commit 8404fdf9572340fd52c3e09f15243576fe0f61b0 Author: Josh John Date: Thu Jul 4 11:28:52 2024 +0530 init push diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..8084853 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,12 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +> 0.5% +last 2 versions +Firefox ESR +not dead +not IE 9-11 # For IE 9-11 support, remove 'not'. \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c8c9194 --- /dev/null +++ b/.gitignore @@ -0,0 +1,121 @@ +/.angular/cache +# ---> Node +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test +.env.production + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..b2dd359 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Flatlogic + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..3458509 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +# Angular Material Admin Lite - free and open source angular admin dashboard template +Including responsive layout and high quality UI built with Angular Material. + +[Demo](https://flatlogic.com/templates/angular-material-admin/demo) | [Download](https://github.com/flatlogic/angular-material-admin/archive/master.zip) | [Available versions](https://demo.flatlogic.com/angular-material-admin/) | [More templates](https://flatlogic.com/admin-dashboards) | [Support forum](https://flatlogic.com/forum) + +![1 (1)](https://user-images.githubusercontent.com/17360676/84912599-41a99c00-b0c2-11ea-8d9b-6c05a398b8ca.jpg) + +This repository contains a limited free version. + +## Features + +Using this template you will be able to leverage lots of built-in components and thus focus on building features that set you apart from competitors rather than bulding everything from scratch. Lite version of Angular Material Admin includes following features and pages: +* Angular Material & SCSS +* Responsive layout +* Styled Angular Material components like buttons, cards, etc +* Dashboard sample +* Typography +* Tables +* Notifications +* Base charts +* Icons +* Maps +* Hover sidebar +* Login +* 404 + +![2 (1)](https://user-images.githubusercontent.com/17360676/84912752-6b62c300-b0c2-11ea-9ff0-f92bad33f2b0.jpg) + +Building a project from scratch means that there is a lot of things to keep track of all at once: analytics, dynamic forms data, UI and UX elements, and much more. This simple admin template is well suited for web apps or any other website or project that requires admin dashboard. This template will serve as a solid foundation for your upcoming project and will save you a lot of time and, hence, money. + +## Quick Start + +#### 1. Get the latest version + +You can start by cloning the latest version of Angular Material Admin on your local machine by running: + +```shell +$ git clone -o angular-material-admin -b master --single-branch \ + https://github.com/flatlogic/angular-material-admin.git MyApp +$ cd MyApp +``` + +#### 2. Run `npm install` + +This will install both run-time project dependencies and developer tools listed +in [package.json](../package.json) file. + +#### 3. Run `npm start` + +This command will build the app from the source files. Then open `localhost:4200` in your browser. + +Now you can open your web app in a browser, on mobile devices and start +hacking. The page must be served from a web server, e.g. apache, nginx, WebStorm built-in web server, etc., otherwise some features may not work properly. + +## Integration +![3 (1)](https://user-images.githubusercontent.com/17360676/84912873-8b928200-b0c2-11ea-9e72-5aac8e8f339e.jpg) + +Angular Material Admin is a part of admin dashboard solution provided by Flatlogic. We can integrate admin dashboards with such systems as your accounting software, customer relationship management (CRM) system, email management, marketing automation, website analytics program, etc. Customized Angular Material Admin can be a great way to learn about your products usability and extendability. With this dashboard, the owner of the website (platform) can easily track orders and their success rate, track social metrics such as the most popular referring social media sites and their appropriate URLs, monitor sales states and periods of growth to better understand what makes users tick. [Contact us](https://flatlogic.com/contact) to learn more. + +## Support +For any additional information please go to our [**support forum**](https://flatlogic.com/forum) and raise your questions or feedback provide there. We highly appreciate your participation! + +## How can I support developers? +- Star our GitHub repo :star: +- [Tweet about it](https://twitter.com/intent/tweet?text=Amazing%20dashboard%20built%20with%20NodeJS,%20React%20and%20Bootstrap!&url=https://github.com/flatlogic/sing-app&via=flatlogic). +- Create pull requests, submit bugs, suggest new features or documentation updates :wrench: +- Follow [@flatlogic on Twitter](https://twitter.com/flatlogic). +- Subscribe to Flatlogic newsletter at [flatlogic.com](https://flatlogic.com/) +- Like our page on [Facebook](https://www.facebook.com/flatlogic/) :thumbsup: + +## More from Flatlogic +- [Awesome Bootstrap Checkboxes & Radios](https://github.com/flatlogic/awesome-bootstrap-checkbox) - ✔️Pure css way to make inputs look prettier +- [React Native Starter](https://github.com/flatlogic/react-native-starter) - 🚀 A powerful react native starter template that bootstraps development of your mobile application + +## Premium themes +Looking for premium themes and templates? Check out our other templates at [flatlogic.com](https://flatlogic.com/templates). + +## License +The source code for the template is licensed under the MIT license, which you can find in +the LICENSE.txt file. diff --git a/angular.json b/angular.json new file mode 100644 index 0000000..670bb93 --- /dev/null +++ b/angular.json @@ -0,0 +1,106 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "cli": { + "analytics": false + }, + "version": 1, + "newProjectRoot": "projects", + "projects": { + "angular-material-admin": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "./node_modules/font-awesome/scss/font-awesome.scss", + "node_modules/bootstrap-icons/font/bootstrap-icons.css", + "./node_modules/ngx-toastr/toastr.css", + "src/custom-theme.scss", + "./node_modules/sweetalert2/dist/sweetalert2.css" + ], + "scripts": [ "./node_modules/sweetalert2/dist/sweetalert2.js"], + "vendorChunk": true, + "extractLicenses": false, + "buildOptimizer": false, + "sourceMap": true, + "optimization": false, + "namedChunks": true + }, + "configurations": { + "production": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "10mb", + "maximumError": "10mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "10mb", + "maximumError": "10mb" + } + ] + }, + "hmr": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.hmr.ts" + } + ] + } + }, + "defaultConfiguration": "" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "options": { + "browserTarget": "angular-material-admin:build" + }, + "configurations": { + "production": { + "browserTarget": "angular-material-admin:build:production" + }, + "hmr": { + "hmr": true, + "browserTarget": "angular-material-admin:build:hmr" + } + } + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "angular-material-admin:build" + } + } + } + } + } +} diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..5e2a79b --- /dev/null +++ b/changelog.md @@ -0,0 +1,71 @@ +# Changelog + +## [1.0.6] - 07/09/2021 +### Updated +- Added MIT License + +## [1.0.5] - 05/10/2021 +### Fixed +- Fixed ngx-echarts error + +## [1.0.4] - 05/10/2021 +### Updated + +- Updated the Angular builder; +- Updated the Angular CLI; +- Update Angular Material; +- Added new package "resize-observer-polyfill" which is dependency of "ngx-echarts" + +###Updated packages + @angular/animations: 9.1.12 -> 11.2.13 + @angular/cdk: 9.2.4 -> 11.2.11 + @angular/common: 9.1.12 -> 11.2.13 + @angular/compiler: 9.1.12 -> 11.2.13 + @angular/core: 9.1.12 -> 11.2.13 + @angular/forms: 9.1.12 -> 11.2.13 + @angular/material: 9.2.4 -> 11.2.12 + @angular/platform-browser: 9.1.12 -> 11.2.13 + @angular/platform-browser-dynamic: 9.1.12 -> 11.2.13 + @angular/router: 9.1.12 -> 11.2.13 + @angular-devkit/build-angular: 0.901.12 -> 0.1102.12 + @angular/cli: 9.1.12 -> 11.2.12 + @angular/compiler-cli: 9.1.12 -> 11.2.13 + @angular/language-service: 9.1.12 -> 11.2.13 + @types/echarts: 4.6.7 -> 4.9.7 + @types/jasmine: 3.5.14 -> 3.6.0 + tslib: 1.10.0 -> 2.0.0 + codelyzer: 5.1.2 -> 6.0.0 + typescript: 3.8.3 -> 4.1.5 + apexcharts: 3.19.3 -> 3.26.2 + echarts: 4.7.0 -> 5.1.1 + ng-apexcharts: 1.2.3 -> 1.5.9 + ngx-echarts: 4.2.2 -> 6.0.1 + ngx-toastr: 12.0.1 -> 13.2.1 + ngx-trend: 5.0.1 -> 6.1.1 + rxjs: 6.5.5 -> 7.0.0 + +###Added packages + resize-observer-polyfill: 1.5.1 + +## [1.0.3] + +### Fixed +- Notifications: fix titles +- Tables add more padding +- Add unlock-button +- Clear code + +## [1.0.2] + +### Update +- Minor package updates + +## [1.0.1] + +### Added +- The added configuration for router module. + +## [1.0.0] + +### Added +- Added Angular Material Admin v1.0.0 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ce9f2b2 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,23143 @@ +{ + "name": "angular-material-admin", + "version": "1.0.6", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "angular-material-admin", + "version": "1.0.6", + "dependencies": { + "@agm/core": "^1.1.0", + "@angular/animations": "^15.2.10", + "@angular/cdk": "^11.2.12", + "@angular/common": "^15.2.10", + "@angular/compiler": "^15.2.10", + "@angular/core": "^15.2.10", + "@angular/forms": "^15.2.10", + "@angular/material": "^11.2.12", + "@angular/material-moment-adapter": "^12.0.0", + "@angular/platform-browser": "^15.2.10", + "@angular/platform-browser-dynamic": "^15.2.10", + "@angular/router": "^15.2.10", + "@ng-idle/core": "^11.1.0", + "@ng-idle/keepalive": "^11.0.3", + "@ngx-translate/core": "^13.0.0", + "@ngx-translate/http-loader": "^6.0.0", + "angular-dual-listbox": "^6.0.0", + "apexcharts": "3.26.2", + "bootstrap": "^5.1.3", + "bootstrap-icons": "^1.10.5", + "crypto-js": "^4.1.1", + "echarts": "5.1.1", + "file-saver": "^2.0.5", + "font-awesome": "^4.7.0", + "moment": "^2.29.1", + "ng-apexcharts": "1.5.9", + "ng-otp-input": "^1.8.1", + "ngx-bootstrap": "^7.0.0", + "ngx-chips": "^3.0.0", + "ngx-echarts": "6.0.1", + "ngx-toastr": "13.2.1", + "ngx-trend": "6.1.1", + "pdfmake": "^0.2.5", + "qrcode": "^1.5.3", + "rxjs": "7.8.1", + "sweetalert2": "^11.7.16", + "to-words": "^3.2.0", + "tslib": "^2.0.0", + "xlsx": "^0.16.9", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^15.2.10", + "@angular/cli": "^15.2.10", + "@angular/compiler-cli": "^15.2.10", + "@angular/language-service": "^15.2.10", + "@angularclass/hmr": "^2.1.3", + "@types/echarts": "^4.9.7", + "@types/jasmine": "~3.6.0", + "@types/jasminewd2": "~2.0.8", + "@types/node": "^12.12.64", + "codelyzer": "^6.0.0", + "resize-observer-polyfill": "^1.5.1", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "4.9.5" + } + }, + "node_modules/@agm/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@agm/core/-/core-1.1.0.tgz", + "integrity": "sha512-cMvmm3+3/uuVFurLv1FKhE0/6ssIlDvYBjQFCi8ELg7h0OY2MkIU1MXWr7z+f/xZ08E936I4eeddni6k4yUTIA==", + "dependencies": { + "tslib": "^1.9.0" + } + }, + "node_modules/@agm/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1502.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.10.tgz", + "integrity": "sha512-S8lN73WYCfpEpw1Q41ZcUinw7JfDeSM8LyGs797OVshnW75QcOkOecWj/3CKR23G44IgFrHN6sqtzWxKmMxLig==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "15.2.10", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.10.tgz", + "integrity": "sha512-3pCPVEJilVwHIJC6Su1/PIEqvFfU1Lxew9yItxX4s6dud8HY+fuKrsDnao4NNMFNqCLqL4el5QbSBKnnpWH1sg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.0", + "@angular-devkit/architect": "0.1502.10", + "@angular-devkit/build-webpack": "0.1502.10", + "@angular-devkit/core": "15.2.10", + "@babel/core": "7.20.12", + "@babel/generator": "7.20.14", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/helper-split-export-declaration": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.20.7", + "@babel/plugin-transform-runtime": "7.19.6", + "@babel/preset-env": "7.20.2", + "@babel/runtime": "7.20.13", + "@babel/template": "7.20.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "15.2.10", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.13", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.5", + "cacache": "17.0.4", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.3", + "esbuild-wasm": "0.17.8", + "glob": "8.1.0", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.29.0", + "mini-css-extract-plugin": "2.7.2", + "open": "8.4.1", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "piscina": "3.2.0", + "postcss": "8.4.31", + "postcss-loader": "7.0.2", + "resolve-url-loader": "5.0.0", + "rxjs": "6.6.7", + "sass": "1.58.1", + "sass-loader": "13.2.0", + "semver": "7.5.3", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.16.3", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.0", + "webpack": "5.76.1", + "webpack-dev-middleware": "6.0.1", + "webpack-dev-server": "4.11.1", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.8" + }, + "peerDependencies": { + "@angular/compiler-cli": "^15.0.0", + "@angular/localize": "^15.0.0", + "@angular/platform-server": "^15.0.0", + "@angular/service-worker": "^15.0.0", + "karma": "^6.3.0", + "ng-packagr": "^15.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.8.2 <5.0" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@angular-devkit/build-angular/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/@angular-devkit/build-angular/node_modules/browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1502.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.10.tgz", + "integrity": "sha512-55b9WZIGU4DNgiIV2lkkN6iQxJrgWY5CDaNu0kJC/qazotJgBbcN/8jgBx2DD8HNE1V3iXxWk66pt1h946Po+Q==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1502.10", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/core": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.10.tgz", + "integrity": "sha512-bFPm7wjvfBds9km2rCJxUhzkqe4h3h/199yJtzC1bNvwRr2LMHvtyoQAzftda+gs7Ulqac5wzUEZX/cVV3WrsA==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/schematics": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.2.10.tgz", + "integrity": "sha512-EeoDs4oKFpLZNa21G/8dqBdclEc4U2piI9EeXCVTaN6z5DYXIZ0G1WtCXU8nhD+GckS47rmfZ4/3lMaXAvED+g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "15.2.10", + "jsonc-parser": "3.2.0", + "magic-string": "0.29.0", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular/animations": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.2.10.tgz", + "integrity": "sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "15.2.10" + } + }, + "node_modules/@angular/cdk": { + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.12.tgz", + "integrity": "sha512-LImCQQ7n5OnTGXBAx1BaHgBBbdXiEtsNcHk5RvVURya9sswRcXRoa48EG3RyuT8mtqWsUdOX9+v4nCINLG4hZA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + } + }, + "node_modules/@angular/cdk/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + }, + "node_modules/@angular/cli": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.2.10.tgz", + "integrity": "sha512-/TSnm/ZQML6A4lvunyN2tjTB5utuvk3d1Pnfyehp/FXtV6YfZm6+EZrOpKkKPCxTuAgW6c9KK4yQtt3RuNVpwQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1502.10", + "@angular-devkit/core": "15.2.10", + "@angular-devkit/schematics": "15.2.10", + "@schematics/angular": "15.2.10", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "3.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.1", + "ora": "5.4.1", + "pacote": "15.1.0", + "resolve": "1.22.1", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "yargs": "17.6.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/common": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.2.10.tgz", + "integrity": "sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "15.2.10", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.10.tgz", + "integrity": "sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "15.2.10" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.10.tgz", + "integrity": "sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==", + "dev": true, + "dependencies": { + "@babel/core": "7.19.3", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.27.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/main-ngcc.js" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "15.2.10", + "typescript": ">=4.8.2 <5.0" + } + }, + "node_modules/@angular/compiler-cli/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@angular/core": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.2.10.tgz", + "integrity": "sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.11.4 || ~0.12.0 || ~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.2.10.tgz", + "integrity": "sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/language-service": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.10.tgz", + "integrity": "sha512-G0g0teF4pBqLTgfyLcoBl55g91sCZvBK+V4VgTD/hXGpXyMNlNpOsgECSMliGQoJlsRLEugFsSlBNqy7CRoBtw==", + "dev": true, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + } + }, + "node_modules/@angular/material": { + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz", + "integrity": "sha512-n3HDKoM552jLcmxtpTYzMUzV6V9vUBKyNs7SNdUfjuK00VJlTWMu03g/QWOj2Y9KftOuDUa8+N2XodwAr+jtCw==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/@angular/material-moment-adapter": { + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-12.2.13.tgz", + "integrity": "sha512-0XhkAhBalvNvIfvi9t5qDKaTBtOuIqd1cABfotyaTecWmw57VoH0KoJtNekXjxDcx71S0LaqeYXfqTo4m+duSA==", + "dependencies": { + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/core": "^12.0.0 || ^13.0.0-0", + "@angular/material": "12.2.13", + "moment": "^2.18.1" + } + }, + "node_modules/@angular/platform-browser": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.10.tgz", + "integrity": "sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "15.2.10", + "@angular/common": "15.2.10", + "@angular/core": "15.2.10" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.10.tgz", + "integrity": "sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "15.2.10", + "@angular/compiler": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10" + } + }, + "node_modules/@angular/router": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.2.10.tgz", + "integrity": "sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "15.2.10", + "@angular/core": "15.2.10", + "@angular/platform-browser": "15.2.10", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angularclass/hmr": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@angularclass/hmr/-/hmr-2.1.3.tgz", + "integrity": "sha1-NOZY7T2jfyOwogDi2lqJvpK7IJ8=", + "dev": true + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "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.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "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", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "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.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.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" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "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.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "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.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@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.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "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.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "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.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "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.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "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.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.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "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.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "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.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "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.23.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "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", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "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", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties/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/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@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.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.8.tgz", + "integrity": "sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz", + "integrity": "sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.8.tgz", + "integrity": "sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz", + "integrity": "sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz", + "integrity": "sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz", + "integrity": "sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz", + "integrity": "sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz", + "integrity": "sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz", + "integrity": "sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz", + "integrity": "sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz", + "integrity": "sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz", + "integrity": "sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz", + "integrity": "sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz", + "integrity": "sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz", + "integrity": "sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz", + "integrity": "sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz", + "integrity": "sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz", + "integrity": "sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz", + "integrity": "sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz", + "integrity": "sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz", + "integrity": "sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz", + "integrity": "sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "dependencies": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "dependencies": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/@foliojs-fork/linebreak/node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "dependencies": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "node_modules/@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==" + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@ng-idle/core": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz", + "integrity": "sha512-/hf3LDFz3UCTe2H6r1bq6Kn6mo5B5mxaU5XVqcDfE4Vdlx9evTqBXyl0VpWbuzZbohVCfWq31mEjbxg9lbY4bw==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=9.0.0", + "@angular/core": ">=9.0.0" + } + }, + "node_modules/@ng-idle/keepalive": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@ng-idle/keepalive/-/keepalive-11.0.3.tgz", + "integrity": "sha512-etnPYnDua/uaFQebDHfC40iBb22KwPVkbt24/9IJBH9A4TGZa6zBrb+8DoRiRJm8I/WBuXdCDeaWzVHElfc9pg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=9.0.0", + "@angular/core": ">=9.0.0", + "@ng-idle/core": "^11.0.3" + } + }, + "node_modules/@ngtools/webpack": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.10.tgz", + "integrity": "sha512-ZExB4rKh/Saad31O/Ofd2XvRuILuCNTYs0+qJL697Be2pzeewvzBhE4Xe1Mm7Jg13aWSPeuIdzSGOqCdwxxxFQ==", + "dev": true, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^15.0.0", + "typescript": ">=4.8.2 <5.0", + "webpack": "^5.54.0" + } + }, + "node_modules/@ngx-translate/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz", + "integrity": "sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": ">=10.0.0", + "rxjs": ">=6.5.3" + } + }, + "node_modules/@ngx-translate/http-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-6.0.0.tgz", + "integrity": "sha512-LCekn6qCbeXWlhESCxU1rAbZz33WzDG0lI7Ig0pYC1o5YxJWrkU9y3Y4tNi+jakQ7R6YhTR2D3ox6APxDtA0wA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=10.0.0", + "@ngx-translate/core": ">=13.0.0", + "rxjs": ">=6.5.3" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/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/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@schematics/angular": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.10.tgz", + "integrity": "sha512-eLdyP+T1TueNQ8FCP7sP+tt8z+YQ1BINsJsyAyoJT/XZjcCV7LUxgDIU94/kuvIotmJ2xTuFWHFPfAY+CN3duQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "15.2.10", + "@angular-devkit/schematics": "15.2.10", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/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/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "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.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "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/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/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/@tufjs/models/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/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/echarts": { + "version": "4.9.7", + "resolved": "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.7.tgz", + "integrity": "sha512-+klqEur0+bh1UjR6EpGE023vxpqzPSk58X5JwVEIBu0NOYMaMPKeM/TMnbL43BlDUZv4xttZFdeDdOtFk/YwzQ==", + "dev": true, + "dependencies": { + "@types/zrender": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", + "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", + "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", + "dev": true + }, + "node_modules/@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", + "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", + "dev": true, + "dependencies": { + "@types/jasmine": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "12.19.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.4.tgz", + "integrity": "sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w==", + "dev": true + }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/zrender": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/zrender/-/zrender-4.0.0.tgz", + "integrity": "sha512-s89GOIeKFiod2KSqHkfd2rzx+T2DVu7ihZCBEBnhFrzvQPUmzvDSBot9Fi1DfMQm9Odg+rTqoMGC38RvrwJK2w==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + }, + "bin": { + "adler32": "bin/adler32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/angular-dual-listbox": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/angular-dual-listbox/-/angular-dual-listbox-6.0.0.tgz", + "integrity": "sha512-ymr3VeFfEegoMdyalwmxDxuHG1lpSdYAncmPWNUWQ0mOV9+9is7cSmz+lc/BJygWGfrSDzCnDRrr4GWvmVFb4Q==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=10.0.0", + "@angular/core": ">=10.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/apexcharts": { + "version": "3.26.2", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.26.2.tgz", + "integrity": "sha512-CD7bad4ygwc9rs9vOQDDagUcoJ1mcc9BwNSiQB14l6jiZBCQKrXxnG4I1ZjJ2MIel/Y5GmsJFs8HTcZBqpe/Ew==", + "dependencies": { + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "node_modules/app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + }, + "node_modules/ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "dependencies": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + } + }, + "node_modules/ast-transform/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "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/axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "dependencies": { + "ast-types-flow": "0.0.7" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + }, + "peerDependencies": { + "@popperjs/core": "^2.10.2" + } + }, + "node_modules/bootstrap-icons": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.10.5.tgz", + "integrity": "sha512-oSX26F37V7QV7NCE53PPEL45d7EGXmBgHG3pDpZvcRaKVzWMqIRL9wcqJUyEha1esFtM3NJzvmxFXDxjJYD0jQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ] + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "dependencies": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + }, + "bin": { + "brfs": "bin/cmd.js" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" + }, + "node_modules/browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "dependencies": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "node_modules/browserslist": { + "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": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "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" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "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/cacache/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/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/cfb/node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/codelyzer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", + "dev": true, + "dependencies": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + } + }, + "node_modules/codelyzer/node_modules/@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", + "dev": true + }, + "node_modules/codelyzer/node_modules/@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", + "dev": true + }, + "node_modules/codelyzer/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/codelyzer/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codelyzer/node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "node_modules/codelyzer/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/codelyzer/node_modules/zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true + }, + "node_modules/codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==", + "dependencies": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "bin": { + "codepage": "bin/codepage.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/codepage/node_modules/commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/critters": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "dependencies": { + "through": "X.X.X" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, + "node_modules/dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/echarts": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.1.1.tgz", + "integrity": "sha512-b3nP8M9XwZM2jISuA+fP0EuJv8lcfgWrinel185Npy8bE/UhXTDIPJcqgQOCWdvk0c5CeT6Dsm1xBjmJXAGlxQ==", + "dependencies": { + "tslib": "2.0.3", + "zrender": "5.1.0" + } + }, + "node_modules/echarts/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.614", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz", + "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/esbuild": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz", + "integrity": "sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.8", + "@esbuild/android-arm64": "0.17.8", + "@esbuild/android-x64": "0.17.8", + "@esbuild/darwin-arm64": "0.17.8", + "@esbuild/darwin-x64": "0.17.8", + "@esbuild/freebsd-arm64": "0.17.8", + "@esbuild/freebsd-x64": "0.17.8", + "@esbuild/linux-arm": "0.17.8", + "@esbuild/linux-arm64": "0.17.8", + "@esbuild/linux-ia32": "0.17.8", + "@esbuild/linux-loong64": "0.17.8", + "@esbuild/linux-mips64el": "0.17.8", + "@esbuild/linux-ppc64": "0.17.8", + "@esbuild/linux-riscv64": "0.17.8", + "@esbuild/linux-s390x": "0.17.8", + "@esbuild/linux-x64": "0.17.8", + "@esbuild/netbsd-x64": "0.17.8", + "@esbuild/openbsd-x64": "0.17.8", + "@esbuild/sunos-x64": "0.17.8", + "@esbuild/win32-arm64": "0.17.8", + "@esbuild/win32-ia32": "0.17.8", + "@esbuild/win32-x64": "0.17.8" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz", + "integrity": "sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "dependencies": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.4.0" + }, + "optionalDependencies": { + "source-map": "~0.1.30" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/escodegen/node_modules/esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=", + "engines": { + "node": ">=0.10.3" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/fs-monkey": { + "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": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/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/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/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/ignore-walk/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/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "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": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "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/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "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/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/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz", + "integrity": "sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/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/make-fetch-happen/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "dependencies": { + "unique-slug": "^3.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "node_modules/ng-apexcharts": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/ng-apexcharts/-/ng-apexcharts-1.5.9.tgz", + "integrity": "sha512-ZRsU9meBvXNPG1vhEolCJGRrhfR7Nnj37E6H5CHfWpUEAw9/89U5TK+yDD+myPhT0ubQbRb6fZJoG74dEebXYA==", + "dependencies": { + "tslib": "^1.10.0" + } + }, + "node_modules/ng-apexcharts/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/ng-otp-input": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/ng-otp-input/-/ng-otp-input-1.8.1.tgz", + "integrity": "sha512-mWl2Jhp3UCkEHsjaNzQHib3PnsMA/kVg+mpntW2KlyP6QKLQ8+PHbINKeyT5E944HeYyxEQzrHOVcmijzDOhGw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "peerDependencies": { + "@angular/common": ">=6.0.0", + "@angular/core": ">=6.0.0" + } + }, + "node_modules/ng2-material-dropdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ng2-material-dropdown/-/ng2-material-dropdown-1.0.0.tgz", + "integrity": "sha512-waKgEkKQwGZT0dqRAd3ZW+wueYs5Xw9owiPBSMdg5jru5DcKDpUqFaADMqqI7HPuzJCxNJSln6nXX1tMYDbXGA==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ngx-bootstrap": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-7.0.0.tgz", + "integrity": "sha512-ei9H3qpSg9OsN24eWFoDMI/sadYI6gH8WY1Tl2ZrYgwgAdBjf3sfF5MDQdzbugRmQ50GzwctH1FpzSpei9HvpQ==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/animations": "^11.0.0 || ^12.0.0", + "@angular/common": "^11.0.0 || ^12.0.0", + "@angular/core": "^11.0.0 || ^12.0.0", + "@angular/forms": "^11.0.0 || ^12.0.0" + } + }, + "node_modules/ngx-chips": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ngx-chips/-/ngx-chips-3.0.0.tgz", + "integrity": "sha512-hBJg4m9kCtCfersQef7vr2Ve6j9ntFSoB5ktF8MyOQnpONAriIp46c3Tb2wdf/lMEB2Xmc45snfJKnxKh3zimg==", + "dependencies": { + "ng2-material-dropdown": ">=1.0.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": ">=10.1.5", + "@angular/common": ">=10.1.5", + "@angular/compiler": ">=10.1.5", + "@angular/core": ">=10.1.5", + "@angular/forms": ">=10.1.5" + } + }, + "node_modules/ngx-echarts": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-6.0.1.tgz", + "integrity": "sha512-a9MZ8cHC7oD+c6Tl0ABAEM2inD+k4FHhuu7RnH6/34c10TJ7AFeQwrFbP6BgW39M9gViWozAjCRFmrvWOYv2Wg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ngx-toastr": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz", + "integrity": "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/ngx-trend": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ngx-trend/-/ngx-trend-6.1.1.tgz", + "integrity": "sha512-bIhjwXwAm75snJKCyBvlKEWQ4UReZrx34qrj+YOrHW+LQNEEu8VAcvCP0OA97xDZXoeKhSklewldiMqOooc76g==", + "dependencies": { + "tslib": "^2.0.0" + } + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "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/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/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/npm-registry-fetch/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", + "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.0.tgz", + "integrity": "sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-sax-parser/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pdfmake": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.5.tgz", + "integrity": "sha512-NlayjehMtuZEdw2Lyipf/MxOCR2vATZQ7jn8cH0/dHwsNb+mqof9/6SW4jZT5p+So4qz+0mD21KG81+dDQSEhA==", + "dependencies": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/pdfmake/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "dependencies": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + }, + "bin": { + "quote-stream": "bin/cmd.js" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/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/read-package-json/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/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/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/read-package-json/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz", + "integrity": "sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==", + "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": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "dependencies": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "dependencies": { + "semver": "^5.3.0" + } + }, + "node_modules/semver-dsl/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/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/sigstore/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/sigstore/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/sigstore/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ssri/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "dependencies": { + "escodegen": "^1.11.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "dependencies": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + } + }, + "node_modules/static-module/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-module/node_modules/magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "dependencies": { + "sourcemap-codec": "^1.4.1" + } + }, + "node_modules/static-module/node_modules/merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/static-module/node_modules/merge-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-module/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/static-module/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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-module/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "dependencies": { + "svg.js": "^2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=", + "dependencies": { + "svg.js": ">=2.3.x" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "node_modules/svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "dependencies": { + "svg.js": "^2.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "dependencies": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.resize.js/node_modules/svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "dependencies": { + "svg.js": "^2.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "dependencies": { + "svg.js": "^2.6.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/sweetalert2": { + "version": "11.7.16", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.16.tgz", + "integrity": "sha512-vxqVcA358RWdK/XOG1gFtOzT7qBH186Ry4gnW0Xtrx7vIo1mpnR8hG8MxQms4gz3JPbYQ6UIgZn0+hTK7in3Jw==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "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", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser": { + "version": "5.16.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", + "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-words": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/to-words/-/to-words-3.2.0.tgz", + "integrity": "sha512-ikoKM8VQ1/uK5P74Nl6WcdKFTmYRVGlpcxm7BXWqG1+MwdtSJ285iir2P4rVrljTZbRmzIYytRcNv/37Pqb5kg==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + }, + "bin": { + "ts-node": "dist/bin.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + } + }, + "node_modules/tslint/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/tslint/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/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/tuf-js/node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/tuf-js/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/tuf-js/node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "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": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.76.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", + "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz", + "integrity": "sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xlsx": { + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz", + "integrity": "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==", + "dependencies": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xlsx/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "node_modules/xmldoc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz", + "integrity": "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==", + "dependencies": { + "sax": "^1.2.4" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/zone.js": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", + "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", + "dependencies": { + "tslib": "^2.3.0" + } + }, + "node_modules/zrender": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.1.0.tgz", + "integrity": "sha512-c+8VRx52ycbmqwHeHLlo/BAfIHBl/JZNLM6cfDQFgzIH05yb+f5J9F/fbRsP+zGc8dW9XHuhdt8/iqukgMZSeg==", + "dependencies": { + "tslib": "2.0.3" + } + }, + "node_modules/zrender/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + }, + "dependencies": { + "@agm/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@agm/core/-/core-1.1.0.tgz", + "integrity": "sha512-cMvmm3+3/uuVFurLv1FKhE0/6ssIlDvYBjQFCi8ELg7h0OY2MkIU1MXWr7z+f/xZ08E936I4eeddni6k4yUTIA==", + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@angular-devkit/architect": { + "version": "0.1502.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.10.tgz", + "integrity": "sha512-S8lN73WYCfpEpw1Q41ZcUinw7JfDeSM8LyGs797OVshnW75QcOkOecWj/3CKR23G44IgFrHN6sqtzWxKmMxLig==", + "dev": true, + "requires": { + "@angular-devkit/core": "15.2.10", + "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/build-angular": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.10.tgz", + "integrity": "sha512-3pCPVEJilVwHIJC6Su1/PIEqvFfU1Lxew9yItxX4s6dud8HY+fuKrsDnao4NNMFNqCLqL4el5QbSBKnnpWH1sg==", + "dev": true, + "requires": { + "@ampproject/remapping": "2.2.0", + "@angular-devkit/architect": "0.1502.10", + "@angular-devkit/build-webpack": "0.1502.10", + "@angular-devkit/core": "15.2.10", + "@babel/core": "7.20.12", + "@babel/generator": "7.20.14", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/helper-split-export-declaration": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.20.7", + "@babel/plugin-transform-runtime": "7.19.6", + "@babel/preset-env": "7.20.2", + "@babel/runtime": "7.20.13", + "@babel/template": "7.20.7", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "15.2.10", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.13", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "4.21.5", + "cacache": "17.0.4", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.3", + "esbuild": "0.17.8", + "esbuild-wasm": "0.17.8", + "glob": "8.1.0", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.29.0", + "mini-css-extract-plugin": "2.7.2", + "open": "8.4.1", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "piscina": "3.2.0", + "postcss": "8.4.31", + "postcss-loader": "7.0.2", + "resolve-url-loader": "5.0.0", + "rxjs": "6.6.7", + "sass": "1.58.1", + "sass-loader": "13.2.0", + "semver": "7.5.3", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.16.3", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.0", + "webpack": "5.76.1", + "webpack-dev-middleware": "6.0.1", + "webpack-dev-server": "4.11.1", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "browserslist": { + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@angular-devkit/build-webpack": { + "version": "0.1502.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.10.tgz", + "integrity": "sha512-55b9WZIGU4DNgiIV2lkkN6iQxJrgWY5CDaNu0kJC/qazotJgBbcN/8jgBx2DD8HNE1V3iXxWk66pt1h946Po+Q==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1502.10", + "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/core": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.10.tgz", + "integrity": "sha512-bFPm7wjvfBds9km2rCJxUhzkqe4h3h/199yJtzC1bNvwRr2LMHvtyoQAzftda+gs7Ulqac5wzUEZX/cVV3WrsA==", + "dev": true, + "requires": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular-devkit/schematics": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.2.10.tgz", + "integrity": "sha512-EeoDs4oKFpLZNa21G/8dqBdclEc4U2piI9EeXCVTaN6z5DYXIZ0G1WtCXU8nhD+GckS47rmfZ4/3lMaXAvED+g==", + "dev": true, + "requires": { + "@angular-devkit/core": "15.2.10", + "jsonc-parser": "3.2.0", + "magic-string": "0.29.0", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "dependencies": { + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "@angular/animations": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-15.2.10.tgz", + "integrity": "sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/cdk": { + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.12.tgz", + "integrity": "sha512-LImCQQ7n5OnTGXBAx1BaHgBBbdXiEtsNcHk5RvVURya9sswRcXRoa48EG3RyuT8mtqWsUdOX9+v4nCINLG4hZA==", + "requires": { + "parse5": "^5.0.0", + "tslib": "^2.0.0" + }, + "dependencies": { + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true + } + } + }, + "@angular/cli": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-15.2.10.tgz", + "integrity": "sha512-/TSnm/ZQML6A4lvunyN2tjTB5utuvk3d1Pnfyehp/FXtV6YfZm6+EZrOpKkKPCxTuAgW6c9KK4yQtt3RuNVpwQ==", + "dev": true, + "requires": { + "@angular-devkit/architect": "0.1502.10", + "@angular-devkit/core": "15.2.10", + "@angular-devkit/schematics": "15.2.10", + "@schematics/angular": "15.2.10", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "3.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.1", + "ora": "5.4.1", + "pacote": "15.1.0", + "resolve": "1.22.1", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "yargs": "17.6.2" + }, + "dependencies": { + "semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@angular/common": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-15.2.10.tgz", + "integrity": "sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.10.tgz", + "integrity": "sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/compiler-cli": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.10.tgz", + "integrity": "sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==", + "dev": true, + "requires": { + "@babel/core": "7.19.3", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.27.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + } + } + }, + "@angular/core": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-15.2.10.tgz", + "integrity": "sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/forms": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-15.2.10.tgz", + "integrity": "sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/language-service": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.10.tgz", + "integrity": "sha512-G0g0teF4pBqLTgfyLcoBl55g91sCZvBK+V4VgTD/hXGpXyMNlNpOsgECSMliGQoJlsRLEugFsSlBNqy7CRoBtw==", + "dev": true + }, + "@angular/material": { + "version": "11.2.12", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz", + "integrity": "sha512-n3HDKoM552jLcmxtpTYzMUzV6V9vUBKyNs7SNdUfjuK00VJlTWMu03g/QWOj2Y9KftOuDUa8+N2XodwAr+jtCw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@angular/material-moment-adapter": { + "version": "12.2.13", + "resolved": "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-12.2.13.tgz", + "integrity": "sha512-0XhkAhBalvNvIfvi9t5qDKaTBtOuIqd1cABfotyaTecWmw57VoH0KoJtNekXjxDcx71S0LaqeYXfqTo4m+duSA==", + "requires": { + "tslib": "^2.2.0" + } + }, + "@angular/platform-browser": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.10.tgz", + "integrity": "sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/platform-browser-dynamic": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.10.tgz", + "integrity": "sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angular/router": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-15.2.10.tgz", + "integrity": "sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==", + "requires": { + "tslib": "^2.3.0" + } + }, + "@angularclass/hmr": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@angularclass/hmr/-/hmr-2.1.3.tgz", + "integrity": "sha1-NOZY7T2jfyOwogDi2lqJvpK7IJ8=", + "dev": true + }, + "@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true + }, + "@babel/core": { + "version": "7.19.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz", + "integrity": "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.3", + "@babel/helper-compilation-targets": "^7.19.3", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.3", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.3", + "@babel/types": "^7.19.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.20.14", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", + "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "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, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz", + "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "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, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "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 + }, + "@babel/helper-function-name": { + "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, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + } + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "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, + "requires": { + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-module-imports": { + "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, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@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.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "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, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + } + } + }, + "@babel/helper-replace-supers": { + "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, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "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 + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "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, + "requires": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + } + } + }, + "@babel/helpers": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz", + "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.6", + "@babel/types": "^7.23.6" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + } + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.23.3", + "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.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.23.3" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "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==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "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==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.15" + }, + "dependencies": { + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + } + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz", + "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20" + } + }, + "@babel/plugin-transform-optional-chaining": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.22.15", + "@babel/helper-plugin-utils": "^7.22.5" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "@babel/runtime": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz", + "integrity": "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz", + "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@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.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@esbuild/android-arm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.8.tgz", + "integrity": "sha512-0/rb91GYKhrtbeglJXOhAv9RuYimgI8h623TplY2X+vA4EXnk3Zj1fXZreJ0J3OJJu1bwmb0W7g+2cT/d8/l/w==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.8.tgz", + "integrity": "sha512-oa/N5j6v1svZQs7EIRPqR8f+Bf8g6HBDjD/xHC02radE/NjKHK7oQmtmLxPs1iVwYyvE+Kolo6lbpfEQ9xnhxQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.8.tgz", + "integrity": "sha512-bTliMLqD7pTOoPg4zZkXqCDuzIUguEWLpeqkNfC41ODBHwoUgZ2w5JBeYimv4oP6TDVocoYmEhZrCLQTrH89bg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.8.tgz", + "integrity": "sha512-ghAbV3ia2zybEefXRRm7+lx8J/rnupZT0gp9CaGy/3iolEXkJ6LYRq4IpQVI9zR97ID80KJVoUlo3LSeA/sMAg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.8.tgz", + "integrity": "sha512-n5WOpyvZ9TIdv2V1K3/iIkkJeKmUpKaCTdun9buhGRWfH//osmUjlv4Z5mmWdPWind/VGcVxTHtLfLCOohsOXw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.8.tgz", + "integrity": "sha512-a/SATTaOhPIPFWvHZDoZYgxaZRVHn0/LX1fHLGfZ6C13JqFUZ3K6SMD6/HCtwOQ8HnsNaEeokdiDSFLuizqv5A==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.8.tgz", + "integrity": "sha512-xpFJb08dfXr5+rZc4E+ooZmayBW6R3q59daCpKZ/cDU96/kvDM+vkYzNeTJCGd8rtO6fHWMq5Rcv/1cY6p6/0Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.8.tgz", + "integrity": "sha512-6Ij8gfuGszcEwZpi5jQIJCVIACLS8Tz2chnEBfYjlmMzVsfqBP1iGmHQPp7JSnZg5xxK9tjCc+pJ2WtAmPRFVA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.8.tgz", + "integrity": "sha512-v3iwDQuDljLTxpsqQDl3fl/yihjPAyOguxuloON9kFHYwopeJEf1BkDXODzYyXEI19gisEsQlG1bM65YqKSIww==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.8.tgz", + "integrity": "sha512-8svILYKhE5XetuFk/B6raFYIyIqydQi+GngEXJgdPdI7OMKUbSd7uzR02wSY4kb53xBrClLkhH4Xs8P61Q2BaA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.8.tgz", + "integrity": "sha512-B6FyMeRJeV0NpyEOYlm5qtQfxbdlgmiGdD+QsipzKfFky0K5HW5Td6dyK3L3ypu1eY4kOmo7wW0o94SBqlqBSA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.8.tgz", + "integrity": "sha512-CCb67RKahNobjm/eeEqeD/oJfJlrWyw29fgiyB6vcgyq97YAf3gCOuP6qMShYSPXgnlZe/i4a8WFHBw6N8bYAA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.8.tgz", + "integrity": "sha512-bytLJOi55y55+mGSdgwZ5qBm0K9WOCh0rx+vavVPx+gqLLhxtSFU0XbeYy/dsAAD6xECGEv4IQeFILaSS2auXw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.8.tgz", + "integrity": "sha512-2YpRyQJmKVBEHSBLa8kBAtbhucaclb6ex4wchfY0Tj3Kg39kpjeJ9vhRU7x4mUpq8ISLXRXH1L0dBYjAeqzZAw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.8.tgz", + "integrity": "sha512-QgbNY/V3IFXvNf11SS6exkpVcX0LJcob+0RWCgV9OiDAmVElnxciHIisoSix9uzYzScPmS6dJFbZULdSAEkQVw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.8.tgz", + "integrity": "sha512-mM/9S0SbAFDBc4OPoyP6SEOo5324LpUxdpeIUUSrSTOfhHU9hEfqRngmKgqILqwx/0DVJBzeNW7HmLEWp9vcOA==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.8.tgz", + "integrity": "sha512-eKUYcWaWTaYr9zbj8GertdVtlt1DTS1gNBWov+iQfWuWyuu59YN6gSEJvFzC5ESJ4kMcKR0uqWThKUn5o8We6Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.8.tgz", + "integrity": "sha512-Vc9J4dXOboDyMXKD0eCeW0SIeEzr8K9oTHJU+Ci1mZc5njPfhKAqkRt3B/fUNU7dP+mRyralPu8QUkiaQn7iIg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.8.tgz", + "integrity": "sha512-0xvOTNuPXI7ft1LYUgiaXtpCEjp90RuBBYovdd2lqAFxje4sEucurg30M1WIm03+3jxByd3mfo+VUmPtRSVuOw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.8.tgz", + "integrity": "sha512-G0JQwUI5WdEFEnYNKzklxtBheCPkuDdu1YrtRrjuQv30WsYbkkoixKxLLv8qhJmNI+ATEWquZe/N0d0rpr55Mg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.8.tgz", + "integrity": "sha512-Fqy63515xl20OHGFykjJsMnoIWS+38fqfg88ClvPXyDbLtgXal2DTlhb1TfTX34qWi3u4I7Cq563QcHpqgLx8w==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz", + "integrity": "sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==", + "dev": true, + "optional": true + }, + "@foliojs-fork/fontkit": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz", + "integrity": "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==", + "requires": { + "@foliojs-fork/restructure": "^2.0.2", + "brfs": "^2.0.0", + "brotli": "^1.2.0", + "browserify-optional": "^1.0.1", + "clone": "^1.0.4", + "deep-equal": "^1.0.0", + "dfa": "^1.2.0", + "tiny-inflate": "^1.0.2", + "unicode-properties": "^1.2.2", + "unicode-trie": "^2.0.0" + } + }, + "@foliojs-fork/linebreak": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz", + "integrity": "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==", + "requires": { + "base64-js": "1.3.1", + "brfs": "^2.0.2", + "unicode-trie": "^2.0.0" + }, + "dependencies": { + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + } + } + }, + "@foliojs-fork/pdfkit": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz", + "integrity": "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==", + "requires": { + "@foliojs-fork/fontkit": "^1.9.1", + "@foliojs-fork/linebreak": "^1.1.1", + "crypto-js": "^4.0.0", + "png-js": "^1.0.0" + } + }, + "@foliojs-fork/restructure": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz", + "integrity": "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==" + }, + "@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "@ng-idle/core": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz", + "integrity": "sha512-/hf3LDFz3UCTe2H6r1bq6Kn6mo5B5mxaU5XVqcDfE4Vdlx9evTqBXyl0VpWbuzZbohVCfWq31mEjbxg9lbY4bw==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ng-idle/keepalive": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@ng-idle/keepalive/-/keepalive-11.0.3.tgz", + "integrity": "sha512-etnPYnDua/uaFQebDHfC40iBb22KwPVkbt24/9IJBH9A4TGZa6zBrb+8DoRiRJm8I/WBuXdCDeaWzVHElfc9pg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ngtools/webpack": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.10.tgz", + "integrity": "sha512-ZExB4rKh/Saad31O/Ofd2XvRuILuCNTYs0+qJL697Be2pzeewvzBhE4Xe1Mm7Jg13aWSPeuIdzSGOqCdwxxxFQ==", + "dev": true, + "requires": {} + }, + "@ngx-translate/core": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz", + "integrity": "sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@ngx-translate/http-loader": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-6.0.0.tgz", + "integrity": "sha512-LCekn6qCbeXWlhESCxU1rAbZz33WzDG0lI7Ig0pYC1o5YxJWrkU9y3Y4tNi+jakQ7R6YhTR2D3ox6APxDtA0wA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "requires": { + "semver": "^7.3.5" + } + }, + "@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "requires": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + } + }, + "@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "requires": { + "which": "^3.0.0" + } + }, + "@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + } + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "peer": true + }, + "@schematics/angular": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.10.tgz", + "integrity": "sha512-eLdyP+T1TueNQ8FCP7sP+tt8z+YQ1BINsJsyAyoJT/XZjcCV7LUxgDIU94/kuvIotmJ2xTuFWHFPfAY+CN3duQ==", + "dev": true, + "requires": { + "@angular-devkit/core": "15.2.10", + "@angular-devkit/schematics": "15.2.10", + "jsonc-parser": "3.2.0" + } + }, + "@sigstore/bundle": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", + "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0" + } + }, + "@sigstore/protobuf-specs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", + "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "dev": true + }, + "@sigstore/sign": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", + "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "make-fetch-happen": "^11.0.1" + }, + "dependencies": { + "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 + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + } + } + }, + "@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "requires": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + } + }, + "@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 + }, + "@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true + }, + "@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "requires": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "dependencies": { + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/echarts": { + "version": "4.9.7", + "resolved": "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.7.tgz", + "integrity": "sha512-+klqEur0+bh1UjR6EpGE023vxpqzPSk58X5JwVEIBu0NOYMaMPKeM/TMnbL43BlDUZv4xttZFdeDdOtFk/YwzQ==", + "dev": true, + "requires": { + "@types/zrender": "*" + } + }, + "@types/eslint": { + "version": "8.44.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz", + "integrity": "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz", + "integrity": "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==", + "dev": true + }, + "@types/jasminewd2": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz", + "integrity": "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==", + "dev": true, + "requires": { + "@types/jasmine": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/node": { + "version": "12.19.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.19.4.tgz", + "integrity": "sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w==", + "dev": true + }, + "@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/zrender": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/zrender/-/zrender-4.0.0.tgz", + "integrity": "sha512-s89GOIeKFiod2KSqHkfd2rzx+T2DVu7ihZCBEBnhFrzvQPUmzvDSBot9Fi1DfMQm9Odg+rTqoMGC38RvrwJK2w==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "requires": {} + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } + } + }, + "adler-32": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz", + "integrity": "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.1.0" + } + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "optional": true + }, + "angular-dual-listbox": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/angular-dual-listbox/-/angular-dual-listbox-6.0.0.tgz", + "integrity": "sha512-ymr3VeFfEegoMdyalwmxDxuHG1lpSdYAncmPWNUWQ0mOV9+9is7cSmz+lc/BJygWGfrSDzCnDRrr4GWvmVFb4Q==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "apexcharts": { + "version": "3.26.2", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-3.26.2.tgz", + "integrity": "sha512-CD7bad4ygwc9rs9vOQDDagUcoJ1mcc9BwNSiQB14l6jiZBCQKrXxnG4I1ZjJ2MIel/Y5GmsJFs8HTcZBqpe/Ew==", + "requires": { + "svg.draggable.js": "^2.2.2", + "svg.easing.js": "^2.0.0", + "svg.filter.js": "^2.0.2", + "svg.pathmorphing.js": "^0.1.3", + "svg.resize.js": "^1.4.3", + "svg.select.js": "^3.0.1" + } + }, + "app-root-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz", + "integrity": "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==", + "dev": true + }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "aria-query": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", + "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7", + "commander": "^2.11.0" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + }, + "ast-transform": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", + "integrity": "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==", + "requires": { + "escodegen": "~1.2.0", + "esprima": "~1.0.4", + "through": "~2.3.4" + }, + "dependencies": { + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==" + } + } + }, + "ast-types": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", + "integrity": "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==" + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "dev": true, + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axobject-query": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", + "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", + "dev": true, + "requires": { + "ast-types-flow": "0.0.7" + } + }, + "babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "bootstrap": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", + "requires": {} + }, + "bootstrap-icons": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.10.5.tgz", + "integrity": "sha512-oSX26F37V7QV7NCE53PPEL45d7EGXmBgHG3pDpZvcRaKVzWMqIRL9wcqJUyEha1esFtM3NJzvmxFXDxjJYD0jQ==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brfs": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", + "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", + "requires": { + "quote-stream": "^1.0.1", + "resolve": "^1.1.5", + "static-module": "^3.0.2", + "through2": "^2.0.0" + } + }, + "brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "requires": { + "base64-js": "^1.1.2" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" + } + } + }, + "browserify-optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", + "integrity": "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==", + "requires": { + "ast-transform": "0.0.0", + "ast-types": "^0.7.0", + "browser-resolve": "^1.8.1" + } + }, + "browserslist": { + "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, + "requires": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "requires": { + "semver": "^7.0.0" + } + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "cacache": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz", + "integrity": "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==", + "dev": true, + "requires": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^8.0.1", + "lru-cache": "^7.7.1", + "minipass": "^4.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "dependencies": { + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "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 + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "caniuse-lite": { + "version": "1.0.30001570", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", + "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "dev": true + }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "dependencies": { + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "codelyzer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz", + "integrity": "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==", + "dev": true, + "requires": { + "@angular/compiler": "9.0.0", + "@angular/core": "9.0.0", + "app-root-path": "^3.0.0", + "aria-query": "^3.0.0", + "axobject-query": "2.0.2", + "css-selector-tokenizer": "^0.7.1", + "cssauron": "^1.4.0", + "damerau-levenshtein": "^1.0.4", + "rxjs": "^6.5.3", + "semver-dsl": "^1.0.1", + "source-map": "^0.5.7", + "sprintf-js": "^1.1.2", + "tslib": "^1.10.0", + "zone.js": "~0.10.3" + }, + "dependencies": { + "@angular/compiler": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz", + "integrity": "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==", + "dev": true + }, + "@angular/core": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz", + "integrity": "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==", + "dev": true + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "zone.js": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz", + "integrity": "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==", + "dev": true + } + } + }, + "codepage": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz", + "integrity": "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==", + "requires": { + "commander": "~2.14.1", + "exit-on-epipe": "~1.0.1" + }, + "dependencies": { + "commander": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz", + "integrity": "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "requires": { + "is-what": "^3.14.1" + } + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "core-js-compat": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", + "dev": true, + "requires": { + "browserslist": "^4.22.2" + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, + "critters": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "cssauron": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz", + "integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=", + "dev": true, + "requires": { + "through": "X.X.X" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, + "dash-ast": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz", + "integrity": "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "requires": { + "readable-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "echarts": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.1.1.tgz", + "integrity": "sha512-b3nP8M9XwZM2jISuA+fP0EuJv8lcfgWrinel185Npy8bE/UhXTDIPJcqgQOCWdvk0c5CeT6Dsm1xBjmJXAGlxQ==", + "requires": { + "tslib": "2.0.3", + "zrender": "5.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.614", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz", + "integrity": "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "es5-ext": { + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "dependencies": { + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "esbuild": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz", + "integrity": "sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==", + "dev": true, + "optional": true, + "requires": { + "@esbuild/android-arm": "0.17.8", + "@esbuild/android-arm64": "0.17.8", + "@esbuild/android-x64": "0.17.8", + "@esbuild/darwin-arm64": "0.17.8", + "@esbuild/darwin-x64": "0.17.8", + "@esbuild/freebsd-arm64": "0.17.8", + "@esbuild/freebsd-x64": "0.17.8", + "@esbuild/linux-arm": "0.17.8", + "@esbuild/linux-arm64": "0.17.8", + "@esbuild/linux-ia32": "0.17.8", + "@esbuild/linux-loong64": "0.17.8", + "@esbuild/linux-mips64el": "0.17.8", + "@esbuild/linux-ppc64": "0.17.8", + "@esbuild/linux-riscv64": "0.17.8", + "@esbuild/linux-s390x": "0.17.8", + "@esbuild/linux-x64": "0.17.8", + "@esbuild/netbsd-x64": "0.17.8", + "@esbuild/openbsd-x64": "0.17.8", + "@esbuild/sunos-x64": "0.17.8", + "@esbuild/win32-arm64": "0.17.8", + "@esbuild/win32-ia32": "0.17.8", + "@esbuild/win32-x64": "0.17.8" + } + }, + "esbuild-wasm": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz", + "integrity": "sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", + "integrity": "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==", + "requires": { + "esprima": "~1.0.4", + "estraverse": "~1.5.0", + "esutils": "~1.0.0", + "source-map": "~0.1.30" + }, + "dependencies": { + "esprima": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", + "integrity": "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==" + }, + "estraverse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", + "integrity": "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==" + }, + "esutils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", + "integrity": "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==" + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "estree-is-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", + "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + } + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fflate": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz", + "integrity": "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "dev": true + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "requires": { + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + }, + "fs-monkey": { + "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 + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "requires": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "requires": { + "lru-cache": "^7.5.1" + }, + "dependencies": { + "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 + } + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true + }, + "ignore-walk": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz", + "integrity": "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==", + "dev": true, + "requires": { + "minimatch": "^9.0.0" + }, + "dependencies": { + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true + }, + "immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz", + "integrity": "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==", + "dev": true + }, + "inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "requires": { + "hasown": "^2.0.0" + } + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true + }, + "karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "requires": { + "source-map-support": "^0.5.5" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true + }, + "less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "requires": { + "copy-anything": "^2.0.1", + "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", + "parse-node-version": "^1.0.1", + "source-map": "~0.6.0", + "tslib": "^2.3.0" + }, + "dependencies": { + "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, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "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 + }, + "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 + } + } + }, + "less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "requires": { + "klona": "^2.0.4" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "requires": { + "webpack-sources": "^3.0.0" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz", + "integrity": "sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "dependencies": { + "@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "requires": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + } + }, + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, + "requires": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "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 + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, + "requires": { + "unique-slug": "^3.0.0" + } + }, + "unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.4" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "dev": true + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true + }, + "needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, + "ng-apexcharts": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/ng-apexcharts/-/ng-apexcharts-1.5.9.tgz", + "integrity": "sha512-ZRsU9meBvXNPG1vhEolCJGRrhfR7Nnj37E6H5CHfWpUEAw9/89U5TK+yDD+myPhT0ubQbRb6fZJoG74dEebXYA==", + "requires": { + "tslib": "^1.10.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "ng-otp-input": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/ng-otp-input/-/ng-otp-input-1.8.1.tgz", + "integrity": "sha512-mWl2Jhp3UCkEHsjaNzQHib3PnsMA/kVg+mpntW2KlyP6QKLQ8+PHbINKeyT5E944HeYyxEQzrHOVcmijzDOhGw==", + "requires": { + "tslib": "^2.2.0" + } + }, + "ng2-material-dropdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ng2-material-dropdown/-/ng2-material-dropdown-1.0.0.tgz", + "integrity": "sha512-waKgEkKQwGZT0dqRAd3ZW+wueYs5Xw9owiPBSMdg5jru5DcKDpUqFaADMqqI7HPuzJCxNJSln6nXX1tMYDbXGA==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ngx-bootstrap": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-7.0.0.tgz", + "integrity": "sha512-ei9H3qpSg9OsN24eWFoDMI/sadYI6gH8WY1Tl2ZrYgwgAdBjf3sfF5MDQdzbugRmQ50GzwctH1FpzSpei9HvpQ==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ngx-chips": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ngx-chips/-/ngx-chips-3.0.0.tgz", + "integrity": "sha512-hBJg4m9kCtCfersQef7vr2Ve6j9ntFSoB5ktF8MyOQnpONAriIp46c3Tb2wdf/lMEB2Xmc45snfJKnxKh3zimg==", + "requires": { + "ng2-material-dropdown": ">=1.0.0", + "tslib": "^2.3.0" + } + }, + "ngx-echarts": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-6.0.1.tgz", + "integrity": "sha512-a9MZ8cHC7oD+c6Tl0ABAEM2inD+k4FHhuu7RnH6/34c10TJ7AFeQwrFbP6BgW39M9gViWozAjCRFmrvWOYv2Wg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ngx-toastr": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz", + "integrity": "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==", + "requires": { + "tslib": "^2.0.0" + } + }, + "ngx-trend": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/ngx-trend/-/ngx-trend-6.1.1.tgz", + "integrity": "sha512-bIhjwXwAm75snJKCyBvlKEWQ4UReZrx34qrj+YOrHW+LQNEEu8VAcvCP0OA97xDZXoeKhSklewldiMqOooc76g==", + "requires": { + "tslib": "^2.0.0" + } + }, + "nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "optional": true, + "requires": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true + }, + "node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-gyp-build": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", + "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "requires": { + "abbrev": "^1.0.0" + } + }, + "normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^3.0.0" + } + }, + "npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "requires": { + "semver": "^7.1.1" + } + }, + "npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true + }, + "npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "requires": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + } + }, + "npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "requires": { + "ignore-walk": "^6.0.0" + } + }, + "npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "requires": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + } + }, + "npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "requires": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "dependencies": { + "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 + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + } + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "requires": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.1.tgz", + "integrity": "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "requires": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "pacote": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.1.0.tgz", + "integrity": "sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg==", + "dev": true, + "requires": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^4.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "requires": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + } + }, + "parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "requires": { + "parse5": "^7.0.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "dev": true + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pdfmake": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.5.tgz", + "integrity": "sha512-NlayjehMtuZEdw2Lyipf/MxOCR2vATZQ7jn8cH0/dHwsNb+mqof9/6SW4jZT5p+So4qz+0mD21KG81+dDQSEhA==", + "requires": { + "@foliojs-fork/linebreak": "^1.1.1", + "@foliojs-fork/pdfkit": "^0.13.0", + "iconv-lite": "^0.6.3", + "xmldoc": "^1.1.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true + }, + "piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "requires": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0", + "nice-napi": "^1.0.2" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "png-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", + "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.8" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "printj": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz", + "integrity": "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + }, + "proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quote-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", + "integrity": "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==", + "requires": { + "buffer-equal": "0.0.1", + "minimist": "^1.1.3", + "through2": "^2.0.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + } + } + }, + "read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "requires": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "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, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "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" + } + }, + "json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + }, + "read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "dependencies": { + "json-parse-even-better-errors": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz", + "integrity": "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==", + "dev": true + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "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, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "requires": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "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 + } + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz", + "integrity": "sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz", + "integrity": "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==", + "dev": true, + "requires": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "scope-analyzer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz", + "integrity": "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==", + "requires": { + "array-from": "^2.1.1", + "dash-ast": "^2.0.1", + "es6-map": "^0.1.5", + "es6-set": "^0.1.5", + "es6-symbol": "^3.1.1", + "estree-is-function": "^1.0.0", + "get-assigned-identifiers": "^1.1.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-dsl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz", + "integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=", + "dev": true, + "requires": { + "semver": "^5.3.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallow-copy": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", + "integrity": "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "sigstore": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", + "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", + "dev": true, + "requires": { + "@sigstore/bundle": "^1.1.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/sign": "^1.0.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "dependencies": { + "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 + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + } + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + } + }, + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "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 + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, + "ssri": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", + "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", + "dev": true, + "requires": { + "minipass": "^7.0.3" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + }, + "static-eval": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz", + "integrity": "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==", + "requires": { + "escodegen": "^1.11.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "static-module": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz", + "integrity": "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==", + "requires": { + "acorn-node": "^1.3.0", + "concat-stream": "~1.6.0", + "convert-source-map": "^1.5.1", + "duplexer2": "~0.1.4", + "escodegen": "^1.11.1", + "has": "^1.0.1", + "magic-string": "0.25.1", + "merge-source-map": "1.0.4", + "object-inspect": "^1.6.0", + "readable-stream": "~2.3.3", + "scope-analyzer": "^2.0.1", + "shallow-copy": "~0.0.1", + "static-eval": "^2.0.5", + "through2": "~2.0.3" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "magic-string": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz", + "integrity": "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==", + "requires": { + "sourcemap-codec": "^1.4.1" + } + }, + "merge-source-map": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", + "integrity": "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==", + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svg.draggable.js": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz", + "integrity": "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==", + "requires": { + "svg.js": "^2.0.1" + } + }, + "svg.easing.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz", + "integrity": "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=", + "requires": { + "svg.js": ">=2.3.x" + } + }, + "svg.filter.js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz", + "integrity": "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=", + "requires": { + "svg.js": "^2.2.5" + } + }, + "svg.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz", + "integrity": "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + }, + "svg.pathmorphing.js": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz", + "integrity": "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==", + "requires": { + "svg.js": "^2.4.0" + } + }, + "svg.resize.js": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz", + "integrity": "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==", + "requires": { + "svg.js": "^2.6.5", + "svg.select.js": "^2.1.2" + }, + "dependencies": { + "svg.select.js": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz", + "integrity": "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==", + "requires": { + "svg.js": "^2.2.5" + } + } + } + }, + "svg.select.js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz", + "integrity": "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==", + "requires": { + "svg.js": "^2.6.5" + } + }, + "sweetalert2": { + "version": "11.7.16", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.16.tgz", + "integrity": "sha512-vxqVcA358RWdK/XOG1gFtOzT7qBH186Ry4gnW0Xtrx7vIo1mpnR8hG8MxQms4gz3JPbYQ6UIgZn0+hTK7in3Jw==" + }, + "symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + } + } + }, + "terser": { + "version": "5.16.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", + "integrity": "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + } + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "to-words": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/to-words/-/to-words-3.2.0.tgz", + "integrity": "sha512-ikoKM8VQ1/uK5P74Nl6WcdKFTmYRVGlpcxm7BXWqG1+MwdtSJ285iir2P4rVrljTZbRmzIYytRcNv/37Pqb5kg==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "ts-node": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", + "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.6", + "yn": "^3.0.0" + } + }, + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + }, + "tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "requires": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "dependencies": { + "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 + }, + "make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "requires": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + } + }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true + }, + "minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "requires": { + "encoding": "^0.1.13", + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "dependencies": { + "minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true + } + } + } + } + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true + }, + "unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "requires": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true + }, + "unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "requires": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + }, + "dependencies": { + "pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + } + } + }, + "unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "requires": { + "unique-slug": "^4.0.0" + } + }, + "unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "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, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "requires": { + "builtins": "^5.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "5.76.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", + "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz", + "integrity": "sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + }, + "webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + } + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "requires": { + "typed-assert": "^1.0.8" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "8.15.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz", + "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==", + "dev": true, + "requires": {} + }, + "xlsx": { + "version": "0.16.9", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz", + "integrity": "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==", + "requires": { + "adler-32": "~1.2.0", + "cfb": "^1.1.4", + "codepage": "~1.14.0", + "commander": "~2.17.1", + "crc-32": "~1.2.0", + "exit-on-epipe": "~1.0.1", + "fflate": "^0.3.8", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + } + } + }, + "xmldoc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz", + "integrity": "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==", + "requires": { + "sax": "^1.2.4" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + }, + "zone.js": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", + "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", + "requires": { + "tslib": "^2.3.0" + } + }, + "zrender": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.1.0.tgz", + "integrity": "sha512-c+8VRx52ycbmqwHeHLlo/BAfIHBl/JZNLM6cfDQFgzIH05yb+f5J9F/fbRsP+zGc8dW9XHuhdt8/iqukgMZSeg==", + "requires": { + "tslib": "2.0.3" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..717ccd9 --- /dev/null +++ b/package.json @@ -0,0 +1,70 @@ +{ + "name": "angular-material-admin", + "version": "1.0.6", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build --configuration production", + "lint": "ng lint", + "hmr": "ng serve --configuration hmr" + }, + "private": true, + "dependencies": { + "@agm/core": "^1.1.0", + "@angular/animations": "^15.2.10", + "@angular/cdk": "^11.2.12", + "@angular/common": "^15.2.10", + "@angular/compiler": "^15.2.10", + "@angular/core": "^15.2.10", + "@angular/forms": "^15.2.10", + "@angular/material": "^11.2.12", + "@angular/material-moment-adapter": "^12.0.0", + "@angular/platform-browser": "^15.2.10", + "@angular/platform-browser-dynamic": "^15.2.10", + "@angular/router": "^15.2.10", + "@ng-idle/core": "^11.1.0", + "@ng-idle/keepalive": "^11.0.3", + "@ngx-translate/core": "^13.0.0", + "@ngx-translate/http-loader": "^6.0.0", + "angular-dual-listbox": "^6.0.0", + "apexcharts": "3.26.2", + "bootstrap": "^5.1.3", + "bootstrap-icons": "^1.10.5", + "crypto-js": "^4.1.1", + "echarts": "5.1.1", + "file-saver": "^2.0.5", + "font-awesome": "^4.7.0", + "moment": "^2.29.1", + "ng-apexcharts": "1.5.9", + "ng-otp-input": "^1.8.1", + "ngx-bootstrap": "^7.0.0", + "ngx-chips": "^3.0.0", + "ngx-echarts": "6.0.1", + "ngx-toastr": "13.2.1", + "ngx-trend": "6.1.1", + "pdfmake": "^0.2.5", + "qrcode": "^1.5.3", + "rxjs": "7.8.1", + "sweetalert2": "^11.7.16", + "to-words": "^3.2.0", + "tslib": "^2.0.0", + "xlsx": "^0.16.9", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^15.2.10", + "@angular/cli": "^15.2.10", + "@angular/compiler-cli": "^15.2.10", + "@angular/language-service": "^15.2.10", + "@angularclass/hmr": "^2.1.3", + "@types/echarts": "^4.9.7", + "@types/jasmine": "~3.6.0", + "@types/jasminewd2": "~2.0.8", + "@types/node": "^12.12.64", + "codelyzer": "^6.0.0", + "resize-observer-polyfill": "^1.5.1", + "ts-node": "~8.3.0", + "tslint": "~6.1.0", + "typescript": "4.9.5" + } +} diff --git a/src/app/_core/_guard/admin.guard.ts b/src/app/_core/_guard/admin.guard.ts new file mode 100644 index 0000000..2f30a3a --- /dev/null +++ b/src/app/_core/_guard/admin.guard.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; + +@Injectable({ + providedIn: 'root' +}) +export class AdminAuthGuard implements CanActivate { + constructor( + private router: Router, + +) { } + +async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise { + const currentUser = localStorage.getItem("authtoken"); + const seculevel = localStorage.getItem("seculevel"); + + if (currentUser) { + if (seculevel == 'Admin') + return true; + else + return false; + } + if(state.url == '/dashboard'){ + + this.router.navigate([routePath.login]); + }else{ + await this.router.navigate([routePath.login], { queryParams: { returnUrl: state.url } }); + return false; + } + +} + +canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, +): Observable | Promise | boolean { + + + return true; +} + +} diff --git a/src/app/_core/_guard/analysts.guard.ts b/src/app/_core/_guard/analysts.guard.ts new file mode 100644 index 0000000..9e0fe65 --- /dev/null +++ b/src/app/_core/_guard/analysts.guard.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; + +@Injectable({ + providedIn: 'root' +}) +export class AnalystAuthGuard implements CanActivate { + constructor( + private router: Router, + +) { } + +async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise { + const currentUser = localStorage.getItem("authtoken"); + const seculevel = localStorage.getItem("seculevel"); + + if (currentUser) { + if (seculevel == 'Analyst') + return true; + else + return false; + } + await this.router.navigate([routePath.login], { queryParams: { returnUrl: state.url } }); + return false; +} + +canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, +): Observable | Promise | boolean { + + + return true; +} + +} diff --git a/src/app/_core/_guard/app.guard.ts b/src/app/_core/_guard/app.guard.ts new file mode 100644 index 0000000..c336c40 --- /dev/null +++ b/src/app/_core/_guard/app.guard.ts @@ -0,0 +1,57 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, CanActivateChild } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; + +/* + Created By : Arun Joy + Created On : 04-01-2020 + Created For : For handling the route path of the application. + For provding security i.e it blocks unautherized acess of rote paths. +*/ + +@Injectable({ + providedIn: 'root' +}) +export class AppGuard implements CanActivate { + + constructor( + private router: Router + ) { } + + // canActivate( + // next: ActivatedRouteSnapshot, + // state: RouterStateSnapshot): Observable | Promise | boolean { + + // const currentUser = localStorage.getItem("authtoken"); + // // console.log("===currentUser====",currentUser); + // if (!currentUser) { + // return true; + // } + // this.router.navigate([routePath.dashboard]); + // return false; + + // } + + async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise | Promise { + + const currentUser = localStorage.getItem("authtoken"); + const seculevel = localStorage.getItem("seculevel"); + if (!currentUser) { + // await this.lan.init("en","ar"); + return true; + } + if (seculevel == 'Analyst') + this.router.navigate([routePath.analyst]); + else if (seculevel == 'Admin') + this.router.navigate([routePath.admin]); + else if (seculevel == 'SuperAdmin') + this.router.navigate([routePath.superAdmin]); + else if (seculevel == 'User') + this.router.navigate([routePath.user]) + return false; + + } +} diff --git a/src/app/_core/_guard/auth-student.guard.ts b/src/app/_core/_guard/auth-student.guard.ts new file mode 100644 index 0000000..50450dd --- /dev/null +++ b/src/app/_core/_guard/auth-student.guard.ts @@ -0,0 +1,65 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, CanActivateChild } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; +import { CryptoService } from '../_security/crypto.service'; + +/* + Created By : Arun Joy + Created On : 04-01-2020 + Created For : For handling the route path of the application. + For provding security i.e it blocks unautherized acess of rote paths. +*/ + +@Injectable({ + providedIn: 'root' +}) +export class AuthStudentGuard implements CanActivate, CanActivateChild { + + constructor( + private router: Router, + // private lan: LangaugeTranslateService, + private crypto: CryptoService + ) { } + + async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise + // | Observable | boolean + { + const currentUser = localStorage.getItem("authtoken"); + const secuLevel = localStorage.getItem("seculevel"); + // console.log("==sec level===", secuLevel); + + if (currentUser && secuLevel.toString() == "2") { + // await this.lan.init(); + return true; + } + + let authKey = localStorage.getItem("authKey"); + //Ayth key null check Added + if (authKey) + authKey = this.crypto.decrypt(authKey); + let url = ''; + if (authKey) + url = `${authKey}${routePath.login}`; + else + url = routePath.login; + // console.log("=====url===", url); + await this.router.navigate([url], { queryParams: { returnUrl: state.url } }); + + + return false; + } + + canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | Promise | boolean { + // if (state.url != "/404" && (this.service.menus && this.service.menus.length > 0 && !this.service.menus.some(menu => menu.routerLink === state.url.split(";")[0]))) + // this.router.navigate([routePath.dashboard]); + + return true; + } + +} diff --git a/src/app/_core/_guard/auth.guard.ts b/src/app/_core/_guard/auth.guard.ts new file mode 100644 index 0000000..84d5055 --- /dev/null +++ b/src/app/_core/_guard/auth.guard.ts @@ -0,0 +1,66 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, CanActivateChild } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; +import { CryptoService } from '../_security/crypto.service'; + +/* + Created By : Sajan + Created On : 11-07-2023 + Created For : For handling the route path of the application. + For provding security i.e it blocks unautherized acess of rote paths. +*/ + +@Injectable({ + providedIn: 'root' +}) +export class AuthGuard implements CanActivate, CanActivateChild { + + constructor( + private router: Router, + // private lan: LangaugeTranslateService, + private crypto: CryptoService + ) { } + + async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise + // | Observable | boolean + { + const currentUser = localStorage.getItem("authtoken"); + if (currentUser ) { + // await this.lan.init(); + return true; + } + + let authKey = localStorage.getItem("authKey"); + //Ayth key null check Added + if (authKey) + authKey = this.crypto.decrypt(authKey); + let url = ''; + if (authKey) { + url = `${authKey}${routePath.home}`; + } + url = routePath.login; + + if(state.url == '/dashboard'){ + + this.router.navigate([url]); + }else{ + + await this.router.navigate([url], { queryParams: { returnUrl: state.url } }); + } + return false; + } + + canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | Promise | boolean { + // if (state.url != "/404" && (this.service.menus && this.service.menus.length > 0 && !this.service.menus.some(menu => menu.routerLink === state.url.split(";")[0]))) + // this.router.navigate([routePath.dashboard]); + + return true; + } + +} diff --git a/src/app/_core/_guard/dirty-check.guard.ts b/src/app/_core/_guard/dirty-check.guard.ts new file mode 100644 index 0000000..6d08d39 --- /dev/null +++ b/src/app/_core/_guard/dirty-check.guard.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { CanDeactivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; +import { DirtyComponent } from './model/dirty-component'; + + +@Injectable({ + providedIn: 'root' +}) +export class DirtyCheckGuard implements CanDeactivate { + + canDeactivate( + component: DirtyComponent, + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Observable | Promise | boolean | UrlTree { + if (component.canDeactivate()) { + return confirm('There are changes you have made to the page. If you quit, you will lose your changes.'); + } else { + return true; + } + } + +} diff --git a/src/app/_core/_guard/model/dirty-component.ts b/src/app/_core/_guard/model/dirty-component.ts new file mode 100644 index 0000000..6b2da4a --- /dev/null +++ b/src/app/_core/_guard/model/dirty-component.ts @@ -0,0 +1,5 @@ +import {Observable} from 'rxjs'; + +export declare interface DirtyComponent { + canDeactivate: () => boolean | Observable; +} \ No newline at end of file diff --git a/src/app/_core/_guard/superadmin.guard.ts b/src/app/_core/_guard/superadmin.guard.ts new file mode 100644 index 0000000..084d080 --- /dev/null +++ b/src/app/_core/_guard/superadmin.guard.ts @@ -0,0 +1,42 @@ +import { Injectable } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router, CanActivateChild } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; +// import { routePath } from '; + +@Injectable({ + providedIn: 'root' +}) +export class SuperAdminAuthGuard implements CanActivate, CanActivateChild { + + constructor( + private router: Router, + + ) { } + + async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise { + const currentUser = localStorage.getItem("authtoken"); + const seculevel = localStorage.getItem("seculevel"); + + if (currentUser) { + if (seculevel == 'SuperAdmin') + return true; + else + return false; + } + await this.router.navigate([routePath.login], { queryParams: { returnUrl: state.url } }); + return false; + } + + canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, + ): Observable | Promise | boolean { + + + return true; + } + +} diff --git a/src/app/_core/_guard/user.guard.ts b/src/app/_core/_guard/user.guard.ts new file mode 100644 index 0000000..cb73c01 --- /dev/null +++ b/src/app/_core/_guard/user.guard.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router'; +import { Observable } from 'rxjs'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; + +@Injectable({ + providedIn: 'root' +}) +export class UserAuthGuard implements CanActivate { + constructor( + private router: Router, + +) { } + +async canActivate( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot): Promise { + const currentUser = localStorage.getItem("authtoken"); + const seculevel = localStorage.getItem("seculevel"); + + if (currentUser) { + if (seculevel == 'user') + return true; + else + return false; + } + await this.router.navigate([routePath.login], { queryParams: { returnUrl: state.url } }); + return false; +} + +canActivateChild( + next: ActivatedRouteSnapshot, + state: RouterStateSnapshot, +): Observable | Promise | boolean { + + + return true; +} + +} diff --git a/src/app/_core/_interceptors/auth-header.interceptor.ts b/src/app/_core/_interceptors/auth-header.interceptor.ts new file mode 100644 index 0000000..ec3ce4c --- /dev/null +++ b/src/app/_core/_interceptors/auth-header.interceptor.ts @@ -0,0 +1,104 @@ +import { Injectable } from "@angular/core"; +import { HttpInterceptor, HttpRequest, HttpHandler, HttpResponse } from "@angular/common/http"; +import { catchError, tap } from "rxjs/operators"; +import { throwError } from "rxjs"; +import { Router } from '@angular/router'; +import { CryptoService } from '../_security/crypto.service'; +import { routePath } from "src/app/_providers/_resources/route-path.properties"; + +/* + Created By : Arun Joy + Created On : 03-01-2020 + Created For : For handling the http api request before it calling. +*/ + +@Injectable() +export class AuthHeaderInterceptor implements HttpInterceptor { + + constructor( + private crypto: CryptoService, + private router: Router + ) { } + + intercept(request: HttpRequest, next: HttpHandler) { + + if (request.url.includes('auth')) + return next.handle(this.addAuthenticationToken(request)) + + if (request.url.startsWith('assets/') && request.url.endsWith('.json')) + return next.handle(request) + + return next.handle(this.addAuthenticationToken(request)) + .pipe(catchError(error => { + if (error.status === 401) { + return next.handle(this.addAuthenticationToken(request, true)) + .pipe( + tap(event => { + if (event instanceof HttpResponse) { + localStorage.setItem("authtoken", event.headers.get('Authorization')); + } + }), + catchError(err => { + if (error.status === 401) { + this.presentAlert(); + } + return throwError(error); + })); + } + return throwError(error); + })); + } + + // private addAuthKey(request: HttpRequest): HttpRequest{ + // // If we do not have a token yet then we should not set the header. + // // Here we could first retrieve the token from where we store it. + // let authKey = localStorage.getItem("authtoken"); + // console.log(authKey); + + // authKey = this.crypto.decrypt(authKey); + // if (!authKey) { + // return request; + // } + // return request.clone({ + // setHeaders: { + // 'authkey': `${authKey}`, + // }, + // }); + // } + + private addAuthenticationToken(request: HttpRequest, hasRefreshToken?: boolean): HttpRequest { + // If we do not have a token yet then we should not set the header. + // Here we could first retrieve the token from where we store it. + const authtoken = localStorage.getItem('authtoken'); + const emailId = localStorage.getItem('emailId') ? localStorage.getItem('emailId') : ""; + const module = localStorage.getItem('module') ? localStorage.getItem('module') : ""; + const refreshtoken = localStorage.getItem('refreshtoken'); + const authKey = localStorage.getItem('authKey'); + + if (!authtoken) { + return request; + } + // If you are calling an outside domain then do not add the token. + // if (!request.url.match(/www.mydomain.com\//)) { + // return request; + // } + return request.clone({ + setHeaders: { + Authorization: `Bearer ${this.crypto.get("accessToken@#123", (!authtoken ? "" : authtoken))}`, + 'refreshtoken': !hasRefreshToken ? '' : `${this.crypto.get("accessToken@#123", (!refreshtoken ? "" : refreshtoken))}`, + 'emailid': `${emailId}`, + 'module': `${module}`, + 'authkey': `${authKey}`, + }, + }); + } + async presentAlert() { + localStorage.setItem("authtoken", ""); + localStorage.setItem("refreshtoken", ""); + localStorage.removeItem("authtoken"); + localStorage.removeItem("refreshtoken"); + localStorage.removeItem("media"); + this.router.navigate([routePath.login]); + } + +} \ No newline at end of file diff --git a/src/app/_core/_interceptors/index.ts b/src/app/_core/_interceptors/index.ts new file mode 100644 index 0000000..f688cd5 --- /dev/null +++ b/src/app/_core/_interceptors/index.ts @@ -0,0 +1,12 @@ +import { HTTP_INTERCEPTORS } from '@angular/common/http' +import { AuthHeaderInterceptor } from './auth-header.interceptor'; + +/* + Created By : Arun Joy + Created On : 03-01-2020 + Created For : For handling the http api interceptor. +*/ + +export const HttpInterceptProviders = [ + {provide: HTTP_INTERCEPTORS, useClass: AuthHeaderInterceptor, multi: true} +]; \ No newline at end of file diff --git a/src/app/_core/_security/crypto.service.ts b/src/app/_core/_security/crypto.service.ts new file mode 100644 index 0000000..87e1366 --- /dev/null +++ b/src/app/_core/_security/crypto.service.ts @@ -0,0 +1,46 @@ +import { Injectable } from '@angular/core'; +import * as CryptoJS from 'crypto-js'; + +/* + Created By : Arun Joy + Created On : 13-01-2020 + Created For : For decrypting the crypto encrpited data. +*/ + +@Injectable({ + providedIn: 'root' +}) +export class CryptoService { + + constructor() { } + + //The get method is use for decrypt the value. + get(keys, value) { + var key = CryptoJS.enc.Utf8.parse(keys); + var iv = CryptoJS.enc.Utf8.parse(keys); + var decrypted = CryptoJS.AES.decrypt(value, key, { + keySize: 128 / 8, + iv: iv, + mode: CryptoJS.mode.CBC, + padding: CryptoJS.pad.Pkcs7 + }); + // console.log("====value=====", decrypted.toString(CryptoJS.enc.Utf8)); + return decrypted.toString(CryptoJS.enc.Utf8); + } + + encrypt(value) { + let b64 = CryptoJS.AES.encrypt(value.toString(), "etarucca").toString(); + let e64 = CryptoJS.enc.Base64.parse(b64); + let encryptedCode = e64.toString(CryptoJS.enc.Hex); + return encryptedCode; + } + + decrypt(value) { + var reb64 = CryptoJS.enc.Hex.parse(value); + var bytes = reb64.toString(CryptoJS.enc.Base64); + var decrypt = CryptoJS.AES.decrypt(bytes, "etarucca"); + var dycryptedCode = decrypt.toString(CryptoJS.enc.Utf8); + return dycryptedCode; + } + +} diff --git a/src/app/_core/core.component.spec.ts b/src/app/_core/core.component.spec.ts new file mode 100644 index 0000000..4347b09 --- /dev/null +++ b/src/app/_core/core.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CoreComponent } from './core.component'; + +describe('CoreComponent', () => { + let component: CoreComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ CoreComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(CoreComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_core/core.component.ts b/src/app/_core/core.component.ts new file mode 100644 index 0000000..e80c89c --- /dev/null +++ b/src/app/_core/core.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'lib-core', + template: ` +

+ core works! +

+ `, + styles: [ + ] +}) +export class CoreComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/_core/core.module.ts b/src/app/_core/core.module.ts new file mode 100644 index 0000000..296e180 --- /dev/null +++ b/src/app/_core/core.module.ts @@ -0,0 +1,12 @@ +import { NgModule } from '@angular/core'; +import { CoreComponent } from './core.component'; + + + +@NgModule({ + declarations: [CoreComponent], + imports: [ + ], + exports: [CoreComponent] +}) +export class CoreModule { } diff --git a/src/app/_core/core.service.spec.ts b/src/app/_core/core.service.spec.ts new file mode 100644 index 0000000..ccb84e8 --- /dev/null +++ b/src/app/_core/core.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { CoreService } from './core.service'; + +describe('CoreService', () => { + let service: CoreService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(CoreService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/_core/core.service.ts b/src/app/_core/core.service.ts new file mode 100644 index 0000000..05d773f --- /dev/null +++ b/src/app/_core/core.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class CoreService { + + constructor() { } +} diff --git a/src/app/_dto/auth-creadentials.ts b/src/app/_dto/auth-creadentials.ts new file mode 100644 index 0000000..268b459 --- /dev/null +++ b/src/app/_dto/auth-creadentials.ts @@ -0,0 +1,9 @@ +export class AuthCreadentialsDto { + + username: string; + + password: string; + + module?: string; + +} \ No newline at end of file diff --git a/src/app/_dto/authentication.dto.ts b/src/app/_dto/authentication.dto.ts new file mode 100644 index 0000000..1458d7d --- /dev/null +++ b/src/app/_dto/authentication.dto.ts @@ -0,0 +1,13 @@ + +/* + Created By : Arun Joy + Created On : 07-01-2020 + Created For : For creating dto for autehntication +*/ + +export class AuthenticationDto { + username: string = ""; + password: string = ""; + confpassword?: string = ""; + email:string= ""; +} \ No newline at end of file diff --git a/src/app/_dto/category.dto.ts b/src/app/_dto/category.dto.ts new file mode 100644 index 0000000..b1d25e4 --- /dev/null +++ b/src/app/_dto/category.dto.ts @@ -0,0 +1,15 @@ +export class TenderCategoryDto{ + + id:number; + + tenderCategory:string; + + active:boolean; + + tenderSubCategory?: any[] ; + + selected? :boolean ; + + all?: boolean ; + +} \ No newline at end of file diff --git a/src/app/_dto/closedTenderUsers.dto.ts b/src/app/_dto/closedTenderUsers.dto.ts new file mode 100644 index 0000000..102c880 --- /dev/null +++ b/src/app/_dto/closedTenderUsers.dto.ts @@ -0,0 +1,4 @@ +export class closedTenderUsersDto{ + tenderId : number + userId : number +} \ No newline at end of file diff --git a/src/app/_dto/common.dto.ts b/src/app/_dto/common.dto.ts new file mode 100644 index 0000000..15f4402 --- /dev/null +++ b/src/app/_dto/common.dto.ts @@ -0,0 +1,5 @@ +export class CommonDto { + id?:any; + + marquee?:any; +} \ No newline at end of file diff --git a/src/app/_dto/email.dto.ts b/src/app/_dto/email.dto.ts new file mode 100644 index 0000000..c57f05e --- /dev/null +++ b/src/app/_dto/email.dto.ts @@ -0,0 +1,7 @@ +export class emailDto{ + toMail: any[]; + + subject: string; + + content: string; +} \ No newline at end of file diff --git a/src/app/_dto/filter-json.dto.ts b/src/app/_dto/filter-json.dto.ts new file mode 100644 index 0000000..1b27abe --- /dev/null +++ b/src/app/_dto/filter-json.dto.ts @@ -0,0 +1,9 @@ +export class FilterJsonDto { + search: string | null; + sessionId: number | null; + courseId: number | null; + sectionId: number | null; + activeStatusId: string | null; + studentId: number | null; + admitStatusId: number | null; +} \ No newline at end of file diff --git a/src/app/_dto/gallery.dto.ts b/src/app/_dto/gallery.dto.ts new file mode 100644 index 0000000..e98141e --- /dev/null +++ b/src/app/_dto/gallery.dto.ts @@ -0,0 +1,20 @@ +import { subGalleryDto } from "./sub-gallery.dto"; + +export class GalleryDto{ + + id:number; + + category: string; + + imageUrl: string; + + title:string; + + description:string; + + projectType:string; + + subGallery:subGalleryDto[]; + + spinLoading:any; +} \ No newline at end of file diff --git a/src/app/_dto/igenMenu.dto.ts b/src/app/_dto/igenMenu.dto.ts new file mode 100644 index 0000000..9e69859 --- /dev/null +++ b/src/app/_dto/igenMenu.dto.ts @@ -0,0 +1,41 @@ +export class IgenMenuDto { + + menuId: string; + + description: string; + + routerLink: string; + + parentMenuId: string; + + menuType: string = "1"; + + icon: string; + + isMegaMenu: boolean; + + displaySeq: number; + + interfaceYn: string = "N"; + + coCode: string; + + tableName: string; + + openMultipleTab: string = "N"; + + tableDesc: string; + + menuEnabled: string = "N"; + + languageLabelCode: string; + + rightsGiven: string; + + submenu?: IgenMenuDto[]; + + role:string; + + project: string; + +} \ No newline at end of file diff --git a/src/app/_dto/igissue-detail.dto.ts b/src/app/_dto/igissue-detail.dto.ts new file mode 100644 index 0000000..575c175 --- /dev/null +++ b/src/app/_dto/igissue-detail.dto.ts @@ -0,0 +1,9 @@ +export class IgissueDetailDto { + code: number; + refCode: number; + description: string; + descriptionSl: string; + seen: string; + imagePath: string; + developerYn: string; +} diff --git a/src/app/_dto/igissue-summary.dto.ts b/src/app/_dto/igissue-summary.dto.ts new file mode 100644 index 0000000..36a74e3 --- /dev/null +++ b/src/app/_dto/igissue-summary.dto.ts @@ -0,0 +1,23 @@ +import { IgissueDetailDto } from "./igissue-detail.dto"; + +export class IgissueSummaryDto { + code: number; + summary: string; + name: string; + issueType: string; + source: string; + identifiedBy: string; + identifiedDate: Date; + relatedProject: string; + assignedTo: number; + status: string; + priority: string; + targetResolutionDate: Date; + progress: string; + actualResolutionDate: Date; + resolutionSummary: string; + identifiedByEmail: string; + unreadCount: number; + igissueDetailDto?: IgissueDetailDto[]; + hold?:string +} \ No newline at end of file diff --git a/src/app/_dto/menu-format.dto.ts b/src/app/_dto/menu-format.dto.ts new file mode 100644 index 0000000..efe7219 --- /dev/null +++ b/src/app/_dto/menu-format.dto.ts @@ -0,0 +1,17 @@ +export declare class MenuFormatDto { + label: string; + icon: string; + langaugeLabelCode: string; + data: MenuDataDto; + items?: MenuFormatDto[]; + routerLink?: string; + menuId?: string; + isExpanded?:boolean; + isSideMenu?:boolean; +} +export declare class MenuDataDto { + menuId: string; + description: string; + langaugeLabelCode: string; + rightsGiven: string; +} \ No newline at end of file diff --git a/src/app/_dto/payment-info.dto.ts b/src/app/_dto/payment-info.dto.ts new file mode 100644 index 0000000..913ec61 --- /dev/null +++ b/src/app/_dto/payment-info.dto.ts @@ -0,0 +1,15 @@ + +export class PaymentInfoDto { + + userId:string + + tenderId:number + + transId:number + + status?:string + + finalBidAmt?:number; + + id?:any; +} \ No newline at end of file diff --git a/src/app/_dto/payment.dto.ts b/src/app/_dto/payment.dto.ts new file mode 100644 index 0000000..5353e86 --- /dev/null +++ b/src/app/_dto/payment.dto.ts @@ -0,0 +1,15 @@ +export class paymentDto { + name:string ; + + mobile : number ; + + amount : number ; + + type : string ; + + tenderId : number ; + + emdFeeType : string ; + + +} \ No newline at end of file diff --git a/src/app/_dto/pcduser.dto.ts b/src/app/_dto/pcduser.dto.ts new file mode 100644 index 0000000..b09d9f0 --- /dev/null +++ b/src/app/_dto/pcduser.dto.ts @@ -0,0 +1,26 @@ +export class PcdUserDto{ + + userName : string | null; + + pass : string | null; + + email: string | null; + + otp?:string | null; + + mobileNumber: string | null; + + confPass? : string | null; + + Category? : any[]; + + active : boolean; + + status : string | null; + + maxAmount : number + + companyProfile:string + + projectCompletedCert:string +} \ No newline at end of file diff --git a/src/app/_dto/purchase.dto.ts b/src/app/_dto/purchase.dto.ts new file mode 100644 index 0000000..30739ce --- /dev/null +++ b/src/app/_dto/purchase.dto.ts @@ -0,0 +1,13 @@ +export class PurchaseDto { + + amount: number; + + application: number; + + mobile: string; + + email: string; + + type: string; + +} \ No newline at end of file diff --git a/src/app/_dto/sub-gallery.dto.ts b/src/app/_dto/sub-gallery.dto.ts new file mode 100644 index 0000000..cb21587 --- /dev/null +++ b/src/app/_dto/sub-gallery.dto.ts @@ -0,0 +1,12 @@ +export class subGalleryDto{ + + id:number; + + galleryId : number + + imageUrl : string + + spinLoading?:boolean; + + +} \ No newline at end of file diff --git a/src/app/_dto/tender-covers.dto.ts b/src/app/_dto/tender-covers.dto.ts new file mode 100644 index 0000000..71082bf --- /dev/null +++ b/src/app/_dto/tender-covers.dto.ts @@ -0,0 +1,9 @@ +export class TenderCoversDto{ + + + tenderId:number; + coverType:string; + Description:string; + fileFormat:string + crud: any; + } diff --git a/src/app/_dto/tender-detail.dto.ts b/src/app/_dto/tender-detail.dto.ts new file mode 100644 index 0000000..4e60757 --- /dev/null +++ b/src/app/_dto/tender-detail.dto.ts @@ -0,0 +1,76 @@ +import { TenderCategoryDto } from "./category.dto"; +import { TenderCoversDto } from "./tender-covers.dto"; +import { TenderDocumentDto } from "./tender-documents.dto"; +import { tenderSubcategoryMasterDto } from "./tenderSubcategoryMaster.dto"; + + +export class TenderDetailDto{ + id: number ; + orgChain: string ; + tenderRefNo: string ; + tenderId: string ; + allowTechEval: string ; + paymentMode: number ; + allowWithdraw: string ; + noOfCovers: number ; + itemwiseTechEval: string ; + allowTwoStageBid: string ; + tenderFee: number ; + feePayableTo: string ; + feePayableAt: string ; + tenderFeeExemption: number ; + emdAmt: number ; + emdPayableTo: string ; + allowEmdBgOrSt: string ; + emdPercentage: number ; + emdPayableAt: string ; + title: string ; + workDesc: string ; + ndaPreQualification: string ; + remarks: string ; + tenderValue: number ; + contractType: string ; + location: string ; + preBidMeetAdd: string ; + allowNdaTender: string ; + productCategory: number ; + bidValidity: number ; + pincode: number ; + preBidDate: Date |any; + allowPreferencialBidder: string ; + subCategory: string ; + periodOfWork: number ; + preBidMeetPlace: string ; + bidOpeningPlace: string ; + bidOpenAddress: string ; + publishDate: Date |any ; + saleStartDate: Date |any ; + clarificationStartDate: Date |any ; + bidSubStartDate: Date |any; + bidOpenDate: Date |any ; + saleEndDate: Date |any ; + clarificationEndDate: Date |any ; + bidSubEndDate: Date |any ; + tenderInvName: string ; + tenderInvAddess: string ; + tenderType: number ; + tenderCategory: number ; + formOfContract: number ; + emdFeeType: string ; + activeYn: string ; + doc_name: string ; + description: string ; + doc_type: string ; + doc_size: number ; + File: any ; + users: string ; + tenderDoc: TenderDocumentDto[] =[]; + crud: any; + covers : TenderCoversDto[] =[]; + subCategoryMaster: tenderSubcategoryMasterDto[] =[]; + closedTenderUsers?: any[]; + emdFeeApplied: Boolean ; + productCategoryD: any ; + + +} \ No newline at end of file diff --git a/src/app/_dto/tender-documents.dto.ts b/src/app/_dto/tender-documents.dto.ts new file mode 100644 index 0000000..5a4c268 --- /dev/null +++ b/src/app/_dto/tender-documents.dto.ts @@ -0,0 +1,13 @@ +export class TenderDocumentDto{ + + tenderId:string|any; + docName:string; + description:string; + docType:string; + documentSize:number; + file: any; + crud: any; + documentCategory: any; + docCategory: string; + userId?:string; +} \ No newline at end of file diff --git a/src/app/_dto/tenderSubcategoryMaster.dto.ts b/src/app/_dto/tenderSubcategoryMaster.dto.ts new file mode 100644 index 0000000..daa5385 --- /dev/null +++ b/src/app/_dto/tenderSubcategoryMaster.dto.ts @@ -0,0 +1,22 @@ +import { TenderCategoryDto } from "./category.dto"; + +export class tenderSubcategoryMasterDto{ + + tenderId : number + + subCategoryId : number + + tenderSubCategory : string ; + + tenderCategory : number ; + + id :number ; + + selected?: boolean ; + + all?: boolean ; + + categoryD?:TenderCategoryDto; + + tenderSubCategoryD?:tenderSubcategoryMasterDto; +} \ No newline at end of file diff --git a/src/app/_dto/token.dto.ts b/src/app/_dto/token.dto.ts new file mode 100644 index 0000000..f265f8c --- /dev/null +++ b/src/app/_dto/token.dto.ts @@ -0,0 +1,16 @@ +/* + Created By : Arun Joy + Created On : 08-01-2020 + Created For : For creating dto for token format +*/ + +export class TokenDto { + + accessToken: string; + + refreshToken: string; + + emailId: string; + + module?: string; +} \ No newline at end of file diff --git a/src/app/_dto/user.dto.ts b/src/app/_dto/user.dto.ts new file mode 100644 index 0000000..b0895d3 --- /dev/null +++ b/src/app/_dto/user.dto.ts @@ -0,0 +1,54 @@ +import { tenderSubcategoryMasterDto } from "./tenderSubcategoryMaster.dto"; + +export class UserDto { + + userId: string; + + userName: string; + + groupOrUser: string; + + pass: string | null; + + salt: string | null; + + secuLevel: string | null; + + pwdExpDays: number | null; + + email: string; + + mobileNumber: string; + + userImagePath: string; + + refreshtoken: string; + + memberNo: string; + + custId: string; + + status: string; + + bankId: string; + + tPass: string | null; + + tSalt: string | null; + + deviceId:string; + + otp?:string; + + category?:any + + active: boolean; + + employee?: boolean; + + projectCompletedCert?:string; + + companyProfile?:string; + + userSubcategoryMaster:tenderSubcategoryMasterDto[] +} \ No newline at end of file diff --git a/src/app/_modules/admin/add-tenders/add-tenders.component.html b/src/app/_modules/admin/add-tenders/add-tenders.component.html new file mode 100644 index 0000000..2db9f43 --- /dev/null +++ b/src/app/_modules/admin/add-tenders/add-tenders.component.html @@ -0,0 +1,1172 @@ +
+ + +
+
+

Tender Details

+
+ +
+
+
+
+ + + +

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

+
+
+ + +
+
+
+ + + +

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

+
+
+ + +
+
+
+ +

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

+
+
+ + +
+
+
+ + +

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+ + +
+ + + + +
+ + + + Sub Category + + All category + + {{subCategory.tenderSubCategory}} + + + + +
+ + + +
+ + +
+ + +
+
+ + + +
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + +
+ + +
+
+ + +
+
+ + +
+ +
+ + + + + + + + +
+

+
+
+ + +
+
+
+ +

+
+
+
+ +
+ + + Published Date + + + + +
+
+ + + Document Download / Sale Start Date + + + +
+ +
+ + +
+
+ + + + Document Download / Sale End Date + + + +
+ + +
+ + + Bid Submission Start Date + + + + + + +
+
+ + +
+ +
+ + + Bid Submission End Date + + + +
+ +
+ + + + Bid Opening Date + + + + +
+
+ +
+

+
+
+ + +
+
+
+ + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Required Documents
Required + Document typeDescription + Document + Format
+
+ + + Document Type + + Select Document Type + + + {{coverType.coverType}} + + + + +
+
+
+ + +
+
+ + Document Type + + Select Document + Type + + {{fileFormat.fileFormat}} + + + + + +
+ +
+
+
+
+
+
+ + +
+
+
+ + +

+
+ +
+
+
+
+ +
+
+ + search + + + + + +
+
+
+
+ +
+ +
Name
+
Mobile No. +
+
Email
+ + + +
+
+
+
+ +
+ +
+ +
+ +
+ {{element?.userName}} +
+
+ {{element?.mobileNumber}} +
+
+ {{element?.email}} +
+ + +
+ +
+
+
+ +
+

No users available.

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

+
+
+ + +
+
+
+ +

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

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

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Notice +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{nitDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+ Work Item Documents +
+ Upload FilesDocument TypeDescription
+
+ + + + {{workItemDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ + +    + +
+ Drawing Document + +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{drawingsDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+
+
+ + + + + +
+
+
+ + +
+
+ +
+ + + + + +
+ +
+
+
+ + + + + + + + +

+
+ + + diff --git a/src/app/_modules/admin/add-tenders/add-tenders.component.scss b/src/app/_modules/admin/add-tenders/add-tenders.component.scss new file mode 100644 index 0000000..dbf00b0 --- /dev/null +++ b/src/app/_modules/admin/add-tenders/add-tenders.component.scss @@ -0,0 +1,144 @@ +// .container-responsive { + // min-height: 100vh; + // position: relative; + // } + + // #footer { + // background-color: #3a8379; + // padding: 20px; + // color: #ffffff; + // position: absolute; + // bottom: 0; + // width: 100%; + // } + .nav-link:hover { + color: rgb(255, 0, 0); + + + } + + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: 120px; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: small; + background-color: #f0f0f0; + font-family: nucleo; + + } + + .green-snackbar { + background-color: green; + color: white; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #16e2e2; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #04fcfc; /* Accent color */ + cursor: pointer; + } + + .element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ + } + + .tenderHeading{ + font-family: texg; + //color: #353535; + } + + + label + { + font-family: texg; + color: #262627; + +} +input{ + overflow-wrap: inherit; + font-family: nucleo; +} +.form-control{ +font-family: nucleo; +} +// .input-style{ +// font-family: nucleo; +// } + + + +.Buttons { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: white; +color: #424242; +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +th,td{ +font-family: nucleo; +} + +.Buttons:hover { +background-color: #ececec; +color: #46AC9E; +} + +.ButtonSubmit { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: #ececec; +color: #46AC9E; + +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.ButtonSubmit:hover { +background-color: #46AC9E; +color: #ececec; +} + +.card-body{ +min-height: 360px; +@media (max-width: 767px) { + .card-body{ + max-height: 500px; + min-height: 500px; + overflow-y: scroll; + min-width: 500px; +} +} +} + +.sub-div{ +@media (max-width: 767px) { + .sub-div{ + min-width: 672px; + + } +} +} \ No newline at end of file diff --git a/src/app/_modules/admin/add-tenders/add-tenders.component.spec.ts b/src/app/_modules/admin/add-tenders/add-tenders.component.spec.ts new file mode 100644 index 0000000..d0b9954 --- /dev/null +++ b/src/app/_modules/admin/add-tenders/add-tenders.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddTendersComponent } from './add-tenders.component'; + +describe('AddTendersComponent', () => { + let component: AddTendersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddTendersComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddTendersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/add-tenders/add-tenders.component.ts b/src/app/_modules/admin/add-tenders/add-tenders.component.ts new file mode 100644 index 0000000..10b7556 --- /dev/null +++ b/src/app/_modules/admin/add-tenders/add-tenders.component.ts @@ -0,0 +1,1244 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { MatOption } from '@angular/material/core'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TenderCoversDto } from 'src/app/_dto/tender-covers.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2'; +import { FormBuilder, FormGroup, FormControl } from '@angular/forms'; +import { tenderSubcategoryMasterDto } from 'src/app/_dto/tenderSubcategoryMaster.dto'; +import { closedTenderUsersDto } from 'src/app/_dto/closedTenderUsers.dto'; + +@Component({ + selector: 'app-add-tenders', + templateUrl: './add-tenders.component.html', + styleUrls: ['./add-tenders.component.scss'] +}) +export class AddTendersComponent implements OnInit { + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + @ViewChild('allSelection') private allSelection: MatOption; + + @ViewChild('allUser') private allUser: MatOption; + + + tenderData: TenderDetailDto + subCategoryData: tenderSubcategoryMasterDto[]; + tenderTypeLov: any; + TenderCategoryLov: any; + PaymentModeLov: any; + formcontractLov: any; + productcategoryLov: any; + AllTenderData: TenderDetailDto; + emdFeeTypeLov: any; + seculevel: any; + documentTypeLov: any; + isNITDocUploaded: boolean = false; + isWIDocUploaded: boolean = false; + toggleValue: boolean = true; + + nitDocuments: TenderDocumentDto[]; + workItemDocuments: TenderDocumentDto[]; + drawingsDocuments: TenderDocumentDto[]; + coverDocs: TenderCoversDto[]; + selectedFiles: any; + tenderID: number; + filteredDocumentTypeLov: any; + filteredDocumentDrawingTypeLov: any; + filteredDocumentNITTypeLov: any; + coverslov: any; + fileformatlov: any; + addnoticeROW: boolean = true + addDrwROW: boolean = true + allCheck: boolean = false; + showMessage: boolean = false; + newDRWROW: boolean = false; + newCvrROW: boolean = false; + id: number; + disableUploadButton: boolean; + userID: string; + isFileNameDuplicate: boolean; + value: any; + subcategoryLov: any; + subcategoryform: UntypedFormGroup; + userform: UntypedFormGroup; + userLov: any; + closedtenderData: closedTenderUsersDto; + selectedUsers: any[]; + selectAllChecked: boolean = false; + + selectUserTabView: boolean = false; + categoryEdit: boolean = false; + data: any; + noData: boolean = true; + searchTerm: string = ''; + filter: string; + pageLength: number; + userDataCopy: any; + savedSubcategories: any[]; + emdDisable: boolean; + subCatId: any[]; + subCatIdString: string; + paymentModeOnline: boolean; + + constructor(private router: Router, + private _masterService: MasterService, + private _ui: UiService, + private route: ActivatedRoute, + private errorTranslateService: ErrorTranslateService, + private datePipe: DatePipe, + private fb: FormBuilder, + private snackBar: MatSnackBar) { + + this.seculevel = localStorage.getItem('seculevel') + this.userID = localStorage.getItem('userId') + this.tenderData = new TenderDetailDto(); + this.closedtenderData = new closedTenderUsersDto(); + this.tenderID = +this.route.snapshot.paramMap.get('id'); + this.getData() + + } + + ngOnInit(): void { + // this.addnoticeROW= true; + this.tenderData.subCategoryMaster = [] + + this.subcategoryform = this.fb.group({ + subCategory: new UntypedFormControl(''), + + }); + + this.userform = this.fb.group({ + users: new UntypedFormControl(''), + }); + // this.addDrwROW = true; + this.nitDocuments = []; + this.workItemDocuments = []; + this.drawingsDocuments = []; + this.coverDocs = []; + this.subCategoryData = []; + this.selectedUsers = []; + + if (this.tenderID) { + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderID).then((res) => { + this.tenderData = res + + if (!this.tenderData.emdFeeApplied) { + this.emdDisable = true; + } + + this.subCatId = []; + + if (this.tenderData && this.tenderData.subCategoryMaster) { + this.tenderData.subCategoryMaster.forEach(element => { + this.subCatId.push(element.subCategoryId); + }); + this.subCatIdString = this.subCatId.map(num => num.toString()).join(','); + + + this._masterService.getMasterData(`${apiUrl.users}?where[subCategory]=${this.subCatId}`).then((res) => { + this.userLov = res; + this.userDataCopy = res; + this.userLov.forEach(element => { + element.selected = false; + }); + + + + if (this.selectUserTabView && this.tenderData.closedTenderUsers && this.tenderData.closedTenderUsers.length > 0) + for (let users of this.tenderData.closedTenderUsers) { + this.userLov.forEach(element => { + if (users.userId == element.userId) { + + element.selected = true; + let temp = {} + temp = { tenderId: this.tenderID, userId: element.userId } + this.selectedUsers.push(temp); + } + + }); + } + + }); + } else { + } + + + + if (this.tenderData.productCategory) { + this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${this.tenderData.productCategory}`).then((res) => { + this.subcategoryLov = res + }) + + if (this.tenderData.tenderType == 7) { + + this.selectUserTabView = true + + } else { + this.selectUserTabView = false; + + } + + // let newDate =new Date(); + // console.log('newdate --->',newDate); + + // if(this.tenderData.publishDate < newDate){ + // this.categoryEdit=true; + + // }else{ + // this.categoryEdit=false; + + + // } + + if (!this.tenderData.id) { + this.categoryEdit = false; + + } else { + this.categoryEdit = true; + + } + } + + this.tenderData.publishDate = this.convertDateFormat(res.publishDate); + this.tenderData.saleStartDate = this.convertDateFormat(res.saleStartDate); + this.tenderData.clarificationStartDate = this.convertDateFormat(res.clarificationStartDate); + this.tenderData.saleEndDate = this.convertDateFormat(res.saleEndDate); + this.tenderData.clarificationEndDate = this.convertDateFormat(res.clarificationEndDate); + this.tenderData.bidSubStartDate = this.convertDateFormat(res.bidSubStartDate); + this.tenderData.bidSubEndDate = this.convertDateFormat(res.bidSubEndDate); + this.tenderData.bidOpenDate = this.convertDateFormat(res.bidOpenDate); + this.tenderData.preBidDate = this.convertDateFormat(res.preBidDate); + + + + + const subCategoryIds = res.subCategoryMaster.map(item => item.subCategoryId); + this.subcategoryform.controls.subCategory.patchValue([...subCategoryIds, 0]); + + + + this.coverDocs = JSON.parse(JSON.stringify(this.tenderData.covers)); + this.newCvrROW = true + this.newDRWROW = true + + this.drawingsDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'D'); + for (let i = 0; i < this.drawingsDocuments.length; i++) { + this.drawingsDocuments[i].file = this.drawingsDocuments[i].docName; + } + + + this.nitDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'NIT'); + for (let i = 0; i < this.nitDocuments.length; i++) { + this.nitDocuments[i].file = this.nitDocuments[i].docName; + } + + + + this.workItemDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'WID'); + for (let i = 0; i < this.workItemDocuments.length; i++) { + this.workItemDocuments[i].file = this.workItemDocuments[i].docName; + + } + + // if(res.fileName.length > 0){ + // this.disableUploadButton = false + // }else{ + // this.disableUploadButton = true + // } + }) + + } + + + + } + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + + addNoticeToggle(event) { + this.addnoticeROW = !event.checked; + + } + + addDrawingToggle(event) { + this.addDrwROW = !event.checked; + + } + + tenderTypeChange() { + + if (this.tenderData.tenderType == 7) { + this.selectUserTabView = true; + + } else { + this.selectUserTabView = false; + + } + + + } + + getData() { + + + this._masterService.getMasterData(apiUrl.TenderType).then((res) => { + this.tenderTypeLov = res; + + if (this.tenderData.tenderType == 7) { + + this.selectUserTabView = true + + } else { + this.selectUserTabView = false; + + } + + }) + this._masterService.getMasterData(apiUrl.emdFeeType).then((res) => { + this.emdFeeTypeLov = res + + }) + + + this._masterService.getMasterData(apiUrl.documentType).then((res) => { + this.documentTypeLov = res + this.filteredDocumentDrawingTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'D'); + this.filteredDocumentNITTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'N'); + + this.filteredDocumentTypeLov = this.documentTypeLov.filter(docType => docType.docCategory == 'WID'); + + }) + + this._masterService.getMasterData(apiUrl.basicCategory).then((res) => { + this.TenderCategoryLov = res + }) + this._masterService.getMasterData(apiUrl.PaymentMode).then((res) => { + this.PaymentModeLov = res + }) + + this._masterService.getMasterData(apiUrl.formcontract).then((res) => { + this.formcontractLov = res + }) + this._masterService.getMasterData(apiUrl.category).then((res) => { + this.productcategoryLov = res + }) + + this._masterService.getMasterData(apiUrl.coverslov).then((res) => { + this.coverslov = res + + }) + this._masterService.getMasterData(apiUrl.fileformatlov).then((res) => { + this.fileformatlov = res + + }) + + + } + + + paymentModeChange(paymentModeId){ + let paymentMode; + + this.PaymentModeLov.forEach(element => { + if(element.id == paymentModeId){ + paymentMode =element.paymentMode; + } + }); + + + if(paymentMode == 'Online'){ + this.paymentModeOnline =true; + } + else{ + this.paymentModeOnline =false; + + } + } + + emdFeeApplicableChange(emdfeeeApplicable) { + + if (emdfeeeApplicable) { + + this.emdDisable = false; + } + else if (emdfeeeApplicable == false) { + this.emdDisable = true; + this.tenderData.emdAmt = null; + this.tenderData.emdFeeType = null; + this.tenderData.emdPayableTo = null; + this.tenderData.allowEmdBgOrSt = null; + + } + + } + + + productCategoryChange(value) { + + this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${value}`).then((res) => { + this.subcategoryLov = res + + }) + + + } + + + + addNewNitDocRow() { + if (this.addnoticeROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableNoticeDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'NIT' + newRow.crud = 'I' + newRow.userId = this.userID + this.nitDocuments.push(newRow); + // console.log('===this.nitDocuments===',this.nitDocuments); + } + } + + addNewDrawingRow() { + if (this.addDrwROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableDrawingDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'D' + newRow.crud = 'I' + newRow.userId = this.userID + this.drawingsDocuments.push(newRow); + // console.log('===this.drawingsDocuments===',this.drawingsDocuments); + + } + + + } + + addNewWorkItemDocRow() { + + // const lastRow = this.tenderData.tenderDocs[this.tenderData.tenderDocs.length - 1]; + const lastRow = new TenderDocumentDto(); + const newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'WID' + newRow.crud = 'I' + newRow.userId = this.userID + this.workItemDocuments.push(newRow); + this.newDRWROW = true + //console.log(this.workItemDocuments); + + } + + + addNewcoverDocRow() { + + const lastRow = new TenderCoversDto(); + const newRow = Object.assign({}, lastRow); + // newRow.documentCategory = 'C' + newRow.crud = 'I' + this.coverDocs.push(newRow); + this.newCvrROW = true + } + + + + + UploadFiles(event, i, type) { + + if (this.workItemDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + + + if (file && this.id) + this._masterService.postMasterData(apiUrl.docUpload, fd, this.id).then((res) => { + // console.log("res1===",res.fileName); + // console.log("res2===",res.fileSizeKB); + // console.log('======= this.tenderData.tenderDocs==========', this.tenderData.tenderDoc); + + + if (type == 'WID') { + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // else{ + + this.workItemDocuments[i].docName = res.fileName + this.workItemDocuments[i].file = res.fileName + this.workItemDocuments[i].documentSize = res.fileSizeKB; + } + }) + } + + + } + // UploadNoticeFiles(event,i,type){ + + // if(this.nitDocuments[i].file){ + // this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false); + // }else{ + + // for (let j = 0; j < this.nitDocuments.length; j++) { + + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + + // if (this.nitDocuments[j].docName === file.name) { + // console.log("this.nitDocuments[j].docName",this.nitDocuments[j].docName); + + // this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"),4000,false); + // file.name = ""; + // } + // if(file && this.id){ + // this._masterService.postMasterData(apiUrl.nitUploadDoc,fd,this.id).then((res)=>{ + + + // if(type == 'NIT'){ + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // })} + + // } + // } + // } + + UploadNoticeFiles(event: any, i: number, type: string) { + if (this.nitDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + return; + } + + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const isFileNameDuplicate = this.nitDocuments.some((doc) => doc.docName === file!.name); + if (isFileNameDuplicate) { + this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"), 4000, false); + return; + } + + const fd = new FormData(); + fd.append('file', file, file.name); + if (file && this.id) { + this._masterService.postMasterData(apiUrl.nitUploadDoc, fd, this.id) + .then((res) => { + if (type == 'NIT') { + this.nitDocuments[i].docName = res.fileName + this.nitDocuments[i].file = res.fileName + this.nitDocuments[i].documentSize = res.fileSizeKB; + } + + }) + .catch((error) => { + + }); + } + } + + + UploadDrawingFiles(event, i) { + + if (this.drawingsDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + if (file && this.id) + // console.log(" this.drawingsDocuments", this.drawingsDocuments); + this._masterService.postMasterData(apiUrl.drawingUploadDoc, fd, this.id).then((res) => { + // console.log("drawings===",res); + this.drawingsDocuments[i].docName = res.fileName + this.drawingsDocuments[i].file = res.fileName; + this.drawingsDocuments[i].documentSize = res.fileSizeKB; + + }) + } + + } + + + deleteDrawingsRow(id, index: number) { + + this._masterService.deleteMasterData(apiUrl.drawingsDelete, `${this.id}/${this.drawingsDocuments[index].docName}`) + + let removeRow = Object.assign({}, (this.drawingsDocuments).splice(index, 1)[0]); + // this.nitDocuments.push(removeRow); + + } + deleteNITRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.noticeDelete, `${this.id}/${this.nitDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.nitDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + deleteWIDRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.widDelete, `${this.id}/${this.workItemDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.workItemDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + + deleteCoverRow(id, index: number) { + + let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]); + // removeRow.crud = 'D'; + this.tenderData.covers[index].crud = 'D'; + + + } + + // UploadCoverFiles(event,i){ + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + // if(file && this.tenderData.tenderId){ + // coverDocs + // } + + // } + + + readUrl(event: any) { + // console.log('size is high'); + // if (event.target.files && event.target.files[0]) { + + // if (event.target.files[0].type === 'image/jpeg' || + // event.target.files[0].type === 'image/png' || + // event.target.files[0].type === 'image/jpg') { + // if (event.target.files[0].size < 200 * 200) {/* Checking height * width*/ } + // if (event.target.files[0].size < 1000000) { + + + // } + // } + // } + } + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + + BasicDetails() { + + if (this.tenderData.tenderCategory == null || this.tenderData.tenderCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderCategoryCantBeBlank"), 2000, true); + } + else this.nextTab() + + } + + TenderFeeDetails() { + if(this.paymentModeOnline){ + if (this.tenderData.tenderFee == null || this.tenderData.tenderFee == undefined || this.tenderData.tenderFee < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeInCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableTo =='' || this.tenderData.feePayableTo == null || this.tenderData.feePayableTo == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableToCantBeBlank"),2000,true); + // } + else if (this.tenderData.tenderFeeExemption == null || this.tenderData.tenderFeeExemption == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeExemptionAllowedCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableAt =='' || this.tenderData.feePayableAt == null || this.tenderData.feePayableAt == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableAtCantBeBlank"),2000,true); + // } + else this.nextTab() + } + } + + + EMDFeeDetails() { + + if (this.tenderData.emdFeeApplied == null || this.tenderData.emdFeeApplied == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdApplicableCantBeBlank"), 2000, true); + } + + else if (this.tenderData.emdFeeApplied) { + + if (this.tenderData.emdAmt == null || this.tenderData.emdAmt == undefined || this.tenderData.emdAmt < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("emdAmountCantBeBlank"), 2000, true); + } + else if (this.tenderData.emdFeeType == '' || this.tenderData.emdFeeType == null || this.tenderData.emdFeeType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdFeeTypeCantBeBlank"), 2000, true); + } + + else if (this.tenderData.allowEmdBgOrSt == '' || this.tenderData.allowEmdBgOrSt == null || this.tenderData.allowEmdBgOrSt == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("selectEmdThrough"), 2000, true); + } + else this.nextTab() + + } + + else this.nextTab() + + } + + + WorkItemDetails() { + if (!this.tenderID && this.subcategoryform.controls.subCategory.value != '') { + + let sbCat = this.subcategoryform.controls.subCategory.value; + + + let body = sbCat.map(num => num.toString()).join(','); + + this._masterService.getMasterData(`${apiUrl.users}?where[subCategory]=${body}`).then((res) => { + this.userLov = res; + this.userDataCopy = res; + + this.userLov.forEach(element => { + element.selected = false; + }); + + + }) + + } + + if (this.tenderData.title == '' || this.tenderData.title == null || this.tenderData.title == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("titleCantBeBlank"), 2000, true); + } + else if (this.tenderData.workDesc == '' || this.tenderData.workDesc == null || this.tenderData.workDesc == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("workDescriptionCantBeBlank"), 2000, true); + } + + // else if( this.tenderData.tenderValue == null || this.tenderData.tenderValue == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("tenderValueCantBeBlank"),2000,true); + // } + else if (this.tenderData.productCategory == null || this.tenderData.productCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("productCategoryCantBeBlank"), 2000, true); + } + else if (!this.tenderID && this.subcategoryform.controls.subCategory.value == '' || this.subcategoryform.controls.subCategory.value == null || this.subcategoryform.controls.subCategory.value == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("subCategoryCantBeBlank"), 2000, true); + } + else if (this.tenderData.ndaPreQualification == '' || this.tenderData.ndaPreQualification == null || this.tenderData.ndaPreQualification == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("preQualificationCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidValidity == null || this.tenderData.bidValidity == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidValidityCantBeBlank"), 2000, true); + } + + else if (this.tenderData.periodOfWork == null || this.tenderData.periodOfWork == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("periodOfWorkCantBeBlank"), 2000, true); + } + else if (this.tenderData.location == '' || this.tenderData.location == null || this.tenderData.location == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("locationCantBeBlank"), 2000, true); + } + // else if( this.tenderData.pincode == null || this.tenderData.pincode == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("pincodeCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpeningPlace =='' || this.tenderData.bidOpeningPlace == null || this.tenderData.bidOpeningPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningPlaceCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpenAddress =='' || this.tenderData.bidOpenAddress == null || this.tenderData.bidOpenAddress == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpenAddressCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.contractType =='' || this.tenderData.contractType == null || this.tenderData.contractType == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("contractTypeCantBeBlank"),2000,true); + // } + + // else if( this.tenderData.preBidMeetAdd == '' || this.tenderData.preBidMeetAdd == null || this.tenderData.preBidMeetAdd == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingAddressCantBeBlank"),2000,true); + // } + + + // else if( this.tenderData.preBidDate == null || this.tenderData.preBidDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingDateCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.preBidMeetPlace == '' || this.tenderData.preBidMeetPlace == null || this.tenderData.preBidMeetPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingPlaceCantBeBlank"),2000,true); + // } + + + else this.nextTab() + + } + + CriticalDates() { + + if (this.tenderData.publishDate == '' || this.tenderData.publishDate == null || this.tenderData.publishDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("publishedDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.saleStartDate == '' || this.tenderData.saleStartDate == null || this.tenderData.saleStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleStartCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationStartDate == null || this.tenderData.clarificationStartDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationStartDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.saleEndDate == '' || this.tenderData.saleEndDate == null || this.tenderData.saleEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleEndCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationEndDate == null || this.tenderData.clarificationEndDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationEndDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.bidSubStartDate == '' || this.tenderData.bidSubStartDate == null || this.tenderData.bidSubStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionStartDateCantBeBlank"), 2000, true); + } + + else if (this.tenderData.bidSubEndDate == '' || this.tenderData.bidSubEndDate == null || this.tenderData.bidSubEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidSubEndDate && this.tenderData.bidOpenDate && this.tenderData.bidSubEndDate > this.tenderData.bidOpenDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeGreaterThanbidOpeningDate"), 2000, true); + } + + else if (this.tenderData.bidOpenDate == null || this.tenderData.bidOpenDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningDateCantBeBlank"), 2000, true); + } + + else this.nextTab() + + } + + selectUserNext() { + + if (this.selectedUsers.length <= 0) { + this._ui.toastMessage(this.errorTranslateService.translate("selectUserCantBeBlank"), 2000, true); + } + else this.nextTab() + + } + + + tenderDocumnetsPreCheck() { + + for (let i = 0; i < this.drawingsDocuments.length; i++) { + if (this.drawingsDocuments[i].file == null || this.drawingsDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].docType == '' || this.drawingsDocuments[i].docType == null || this.drawingsDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].description == '' || this.drawingsDocuments[i].description == null || this.drawingsDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.nitDocuments.length; i++) { + if (this.nitDocuments[i].file == null || this.nitDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].docType == '' || this.nitDocuments[i].docType == null || this.nitDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].description == '' || this.nitDocuments[i].description == null || this.nitDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.workItemDocuments.length; i++) { + if (this.workItemDocuments[i].file == null || this.workItemDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].docType == '' || this.workItemDocuments[i].docType == null || this.workItemDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].description == '' || this.workItemDocuments[i].description == null || this.workItemDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + return true + } + + + RequiredDocumentsPreCheck() { + + for (let i = 0; i < this.coverDocs.length; i++) { + if (this.coverDocs[i].coverType == null || this.coverDocs[i].coverType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].Description == '' || this.coverDocs[i].Description == null || this.coverDocs[i].Description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].fileFormat == '' || this.coverDocs[i].fileFormat == null || this.coverDocs[i].fileFormat == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentFormatCantBeBlank"), 2000, true); + return false; + } + } + return true + + } + + + + RequiredDocuments() { + if (this.RequiredDocumentsPreCheck()) + if (!this.newCvrROW) { + this._ui.toastMessage(this.errorTranslateService.translate("requiresDocs"), 2000, true); + return false; + + } + if (this.RequiredDocumentsPreCheck()) { + // this.tenderData.covers = this.coverDocs + this.nextTab() + } + } + + + + + + TendersDocuments() { + this.tenderData.id = this.id + this.tenderData.crud = 'I' + this.tenderData.covers = this.coverDocs + + // let subcategories = [] + // for(let element of this.subcategoryform.controls.subCategory.value){ + // if(element != 0){ + // subcategories.push(element) + // } + // } + + + for (let i = 0; i < this.savedSubcategories.length; i++) { + + this.subCategoryData[i] = new tenderSubcategoryMasterDto() + this.subCategoryData[i].tenderId = this.id; + + this.subCategoryData[i].subCategoryId = this.savedSubcategories[i]; + + } + + if (this.tenderID) { + this.tenderData.subCategoryMaster = [] + } + else { + this.tenderData.subCategoryMaster = this.subCategoryData; + } + + + + if (this.tenderDocumnetsPreCheck()) + if (!this.newDRWROW) { + this._ui.toastMessage(this.errorTranslateService.translate("addDocs"), 2000, true); + return false; + + } + if (this.tenderDocumnetsPreCheck()) { + // console.log('id ...',this.tenderID) + + // if(!this.tenderID || this.tenderID !=0){ + // console.log('id nahi ...',this.tenderID) + // this.tenderData.activeYn='S'; + + // } + // this.nextTab() + this.tenderData.tenderDoc = this.nitDocuments.concat(this.workItemDocuments, this.drawingsDocuments) + + this._masterService.saveAllMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + + if (res['tenderTypeD'].id == 7) + + this._masterService.saveMasterData(apiUrl.closedTenderUsers, this.selectedUsers).then(res => { + + + }) + + if (res) { + Swal.fire( + 'Created', + 'The tender has been successfully created. Please authorize its publication by approving it', + 'success' + ) + + this.router.navigate(['admin/dashboard']); + + } + + }, (err) => { + if (err.status != 201) { + console.log("-error-"); + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + this.tenderData.tenderDoc = []; + } + }); + + + + } + } + + + + + + submit() { + this.tenderData.activeYn = 'S'; + this.tenderData.crud = 'I' + // console.log('onsub---',this.tenderData); + + if (this.tenderData.tenderInvName == '' || this.tenderData.tenderInvName == null || this.tenderData.tenderInvName == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("nameCantBeBlank"), 2000, true); + return + } + if (this.tenderData.tenderInvAddess == '' || this.tenderData.tenderInvAddess == null || this.tenderData.tenderInvAddess == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("addressCantBeBlank"), 2000, true); + return + } + + this._masterService.saveMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + // console.log('successssssssss========',res); + this.id = res['id'] + this.tenderData = res; + this.savedSubcategories = [] + for (let i = 0; i < res.subCategoryMaster.length; i++) { + this.savedSubcategories.push(res.subCategoryMaster[i].subCategoryId); + } + + + // console.log('this.id========',this.id); + + if (res) { + Swal.fire( + 'Created', + 'Tender Details created successfully', + 'success' + ) + this.nextTab() + + } + + }, (err) => { + if (err.status != 201) { + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + + } + }); + + } + + + + nextTab() { + // console.log("dtaa=",this.tenderData); + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + + prevTab() { + // console.log("dtaa=",this.tenderData); + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + display() { + // console.log('ddddaaatttaa===',this.tenderData); + + } + tosslePerOne(field) { + + if (field == 'select') { + if (this.allSelection.selected) { + this.allSelection.deselect(); + return false; + } + if (this.subcategoryform.controls.subCategory.value.length == this.subcategoryLov.length) { + this.allSelection.select(); + } + } + if (field == 'user') { + if (this.allUser.selected) { + this.allUser.deselect(); + return false; + } + if (this.userform.controls.users.value.length == this.userLov.length) { + this.allUser.select(); + } + } + + } + + toggleAllSelection(field) { + if (field == 'select') { + if (this.allSelection.selected) { + this.subcategoryform.controls.subCategory.patchValue([...this.subcategoryLov.map(item => item.subCategoryId), 0]); + } else { + this.subcategoryform.controls.subCategory.patchValue([]); + } + } + if (field == 'users') { + if (this.allUser.selected) { + + this.userform.controls.users.patchValue([...this.userLov.map(item => item.userId), 0]); + } else { + + this.userform.controls.users.patchValue([]); + } + } + + } + + // selectUser(event,userId){ + + // if(event.checked=true){ + // this.selectedUsers.tenderId=this.tenderID; + // this.selectedUsers.userId=userId; + // console.log('selectedUsers ===',this.selectedUsers); + + // } + + // } + + // selectAllUser(event){ + // if(event.checked=true){ + + // } + // } + + + + selectAllUser(event) { + if (event.checked) { + this.selectedUsers = []; + + this.userLov.forEach(user => { + let temp = {} + temp = { tenderId: this.tenderID, userId: user.userId } + this.selectedUsers.push(temp) + }); + this.userLov.forEach(element => { + element.selected = true + }); + this.allCheck = true; + } else { + this.userLov.forEach(element => { + element.selected = false + }); + this.selectedUsers = []; + this.allCheck = false; + } + + this.selectAllChecked = event.checked; // Update the state of the "Select All" checkbox + + } + + + selectUser(event, userId, index) { + if (event.checked) { + let temp = {} + temp = { tenderId: this.tenderID, userId: userId } + this.selectedUsers.push(temp); + + if (this.selectedUsers.length > 0 && this.selectedUsers.length == this.userLov.length) { + this.allCheck = true; + } + } else { + this.allCheck = false; + + for (let i = 0; i < this.selectedUsers.length; i++) { + if (this.selectedUsers[i].userId == userId) { + this.selectedUsers.splice(i, 1); + } + + } + } + + + + } + + search() { + this.userLov = [...this.userDataCopy] + this.data = [...this.userLov]; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorTranslateService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + + this.userLov = this.data.filter(res => { + let includedInUser = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserId = (res.userId) ? res.userId.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserPhno = (res.mobileNumber) ? res.mobileNumber.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInUser || includedInUserId || includedInUserEmail || includedInUserPhno) { + + return true; + } + + else + return false; + }); + // this.noData = (this.data && this.data.length == 0) ? true : false; + // this.pageLength = this.data.length; + // this.dataSource = new MatTableDataSource(this.data); + } +} \ No newline at end of file diff --git a/src/app/_modules/admin/dashboard-routing.module.ts b/src/app/_modules/admin/dashboard-routing.module.ts new file mode 100644 index 0000000..58f454a --- /dev/null +++ b/src/app/_modules/admin/dashboard-routing.module.ts @@ -0,0 +1,49 @@ +import { NgModule } from '@angular/core'; + +import { DashboardComponent } from './dashboard.component'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { RouterModule, Routes } from '@angular/router'; +import { PreviewApprovalComponent } from './preview-approval/preview-approval.component'; +import { UserApprovalComponent } from './user-approval/user-approval.component'; +import { TenderCategoryComponent } from './tender-category/tender-category.component'; +import { UserManagementComponent } from './user-management/user-management.component'; + + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + {path:'tender-view/:id', component:HomeViewComponent}, + {path:'tender-view/:id/:pay', component:HomeViewComponent}, + { path :'payment-details/:id' , component:PaymentDetailsComponent}, + {path:'tender-upload/:id',component:HomeUploadComponent}, + // { path: 'add-tenders', component: AddTendersComponent}, //enable if admin need to create tenders + { path: 'add-tenders/:id', component: AddTendersComponent}, + { path: 'qr-payment/:id', component: QrPaymentComponent}, + { path: 'preview-approval', component: PreviewApprovalComponent}, + { path: 'user-approval', component: UserApprovalComponent}, + { path: 'category', component: TenderCategoryComponent}, + { path: 'user-management', component: UserManagementComponent}, + + + + + // { path: 'master', loadChildren: () => import('../master/master.module').then(m => m.MasterModule) }, + // { path: 'report', loadChildren: () => import('../report/report.module').then(m => m.ReportModule) }, + // { path: 'support', loadChildren: () => import('../support/support.module').then(m => m.SupportModule) }, + // { path: 'transaction', loadChildren: () => import('../transaction/transaction.module').then(m => m.TransactionModule) } + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule { } diff --git a/src/app/_modules/admin/dashboard.component.html b/src/app/_modules/admin/dashboard.component.html new file mode 100644 index 0000000..7e8efe2 --- /dev/null +++ b/src/app/_modules/admin/dashboard.component.html @@ -0,0 +1,363 @@ +
+ + + + +
+ + +
+
+ + + + +
+ +
+
+ + +
+ + + + + + + + + + + + +
+ + +
+
+
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'status' | translate }} + + +    {{element?.hide}}    +    {{element?.hide}}    +    {{element?.hide}}    +    {{'Canceled'}}    +    {{'in + review'}}    + + + + + + + + + + {{ 'payments' | translate }} + + + + + + + + + + + {{ 'view' | translate }} + + + + + + + + + + + + {{ 'report' | translate }} + + + + + + + + + + + + + + + + + + + + + + + {{ 'upload' | translate }} + + + + + + + + + + + + {{ 'Paymentstatus' | translate }} + + +
+ + + + {{ + element.countStatusP }} +
+
+ + + + +
+ + +
+ + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + +
+ + + +
+
+
+
+
+
+
+
+ + + +
+ + + + +
Notification
+ +
+ + Notification Text + + +
+ +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/admin/dashboard.component.scss b/src/app/_modules/admin/dashboard.component.scss new file mode 100644 index 0000000..92575de --- /dev/null +++ b/src/app/_modules/admin/dashboard.component.scss @@ -0,0 +1,660 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; +} + +mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; +} + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } +} + + +.mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); +} +.viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} +.editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + +} + +.editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + display: block; + width: 63px; +} + +.awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + display: block; + width: 63px; +} + +.closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + display: block; + width: 63px; +} + +.canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + display: block; + width: 80px; +} +.searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 41vh; + height: 47px; + +} +.home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; +} + +.circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.notificationButton{ + padding: 0; + border-radius: 5px !important; + // height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + font-family: nucleo; + width: 11%; + border: 1px solid orangered; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.notificationButton:hover{ + + background-color: orangered ; + box-shadow: 0 2px rgb(255, 76, 31)a(0, 0, 0, 0.2); + border: 1px solid orangered; + color: white; + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + + +// ------------------------------------------------ +// .popup-card { +// position: fixed; +// background-color: #ffffff; +// top: 50%; +// left: 50%; +// transform: translate(-50%, -50%); +// width: 450px; +// height: 330px; +// z-index: 1000; +// } + + + +// .popup-container { +// padding: 20px; /* Add padding for better spacing */ +// display: flex; +// flex-direction: column; +// justify-content: center; +// height: 100%; +// } + + +// .mainCard{ +// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); +// border-radius: 10px; + +// } + + +// .resetSpan{ +// font-family: texg; +// color: #1e3d3b; +// font-size: xx-large; +// float: center; +// margin-top: 15px; +// // margin-left: 64px; +// } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; +// } + + +// @media screen and (max-width: 600px) { +// .popup-card { +// width: 450px; /* Adjust card width for smaller screens */ +// } +// } + +// .mat-card-actions { +// display: flex; +// justify-content: flex-end; +// padding: 16px; /* Add padding for spacing */ +// } + +// .popUpButtons{ +// padding: 5px; +// color: #353535; +// font-weight: 900; +// font-size: medium; +// // background-color: #ececec; +// font-family:nucleo; +// } + +// .popUpButtons:hover{ + +// background-color: #ebeaea ; +// color:#46AC9E; +// box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); +// // transform: translateY(5px); + +// } + +// .custom-spinner-content { +// font-size: 24px; +// color:#46AC9E; +// margin: 0; +// padding: 0; +// } + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.menuBtn{ + background-color: white; + width: 37px; + height: 36px; + margin-left: 10px; + box-shadow: 0px 2px 10px -5px black; + border: 1px solid orangered; + +} + +.menuBtnOpened{ + background-color: orangered; + width: 37px; + height: 36px; + margin-left: 10px; + box-shadow: 0px 2px 10px -5px black; + border: 1px solid orangered; + +} + +.expandIcon{ + color: black; + font-size: x-large; +} + +.rotateIcon{ + color: rgb(255, 255, 255); + font-size: x-large; + rotate: 180deg; +} + +.container-responsive{ + background-size: cover; + background-color: whitesmoke; + + // background-image: url('/assets/img/houstone_line1.jpg'); +} + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} \ No newline at end of file diff --git a/src/app/_modules/admin/dashboard.component.ts b/src/app/_modules/admin/dashboard.component.ts new file mode 100644 index 0000000..c98d248 --- /dev/null +++ b/src/app/_modules/admin/dashboard.component.ts @@ -0,0 +1,736 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout'; +import { MediaMatcher } from '@angular/cdk/layout'; + + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData:CommonDto + + btnBadgeNumber:any; + UserData: any; + userbtnBadgeNumber: any; + isMobile: boolean; + opened: boolean; + + // ------digital signature--------// + + // showPopup:boolean = false; + // fileSelected: boolean; + // fileSelected2:boolean; + // Secretary:any; + // President:any; + // selectedSecretaryFile: any; + // selectedPresidentFile: any; + // SecretarySigned: boolean; + // PresidentSigned: boolean; + + // -----------------------------// + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private breakpointObserver: BreakpointObserver, + public mediaMatcher: MediaMatcher, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + // if(this.seculevel == 'B'){ + // } + // else{ + // this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','userPayments','view','upload']; + // } + + this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','status','Paymentstatus','view','report']; + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck() + // this.fileSelected = false + // this.fileSelected2 = false + + // await this._ui.userValidation() + // this.loading = true; + // this.getMenuData(); + this._masterService.getMasterData(`${apiUrl.adminTenderView}?where[activeYn]=S` ).then((res) =>{ + let data = res; + + this.btnBadgeNumber=data.length ; + }) + this._masterService.getMasterData(apiUrl.statusVerify).then((res) =>{ + + this.UserData = res + this.userbtnBadgeNumber=this.UserData.length ; + + }) + + this.breakpointObserver + .observe([Breakpoints.Handset]) + .subscribe((state: BreakpointState) => { + if (state.matches) { + this.isMobile = true; + } else { + this.isMobile = false; + } + }); + } + + + menuOpened() { + this.opened = true; + } + + menuClosed() { + this.opened = false; + } + + getData(){ + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + + // this._masterService.getMasterData(apiUrl.getTender + '?order[id]=DESC').then((res) =>{ + // this.tenderData = res; + + + + // for(let element of res){ + + // if(element.id == '56'){ + // element.hide56 = 'true' + // }else + // element.hide56= 'false' + + // const bidSubStartDate: Date = new Date(element.bidSubStartDate); + // const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + // if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + + + // element.hide = 'Active' + // } + // else + // element.hide = 'Closed' + + // } + // this.dataCopy = res; + // this.pageLength = this.tenderData.length; + // this.dataSource = new MatTableDataSource(this.tenderData); + // this.dataSource.sort = this.sort; + // this.dataSource.paginator = this.paginator; + // this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + // this.loading = false; + // },err=>{ + // console.error(err) + // }) + + this._masterService.getMasterData(apiUrl.adminTenderView +'?order[id]=DESC').then((res) =>{ + this.tenderData = res; + + + for(let element of res){ + this._masterService.getMasterDatabyId(apiUrl.bidReport, element.id).then(result => { + element.countStatusP = result.countStatusP; + + }) + + const publishDate: Date = new Date(element.publishDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + let bidOpenDate: Date = new Date(element.bidOpenDate); + + // bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 30); + if(newDate >= bidOpenDate){ + element.reportHide = 'false' + } + if(newDate > publishDate){ + element.HideEdit = true + }else { + element.HideEdit = false + } + + if(newDate >= publishDate && newDate <= bidOpenDate){ + + + + element.hide = 'Active' + } + else if(newDate < publishDate){ + element.hide = 'Await' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + + },err=>{ + console.error(err) + }) + + + + // const bidSubStartDate = new Date(this.tenderData.bidSubStartDate); + // const bidSubEndDate = new Date(this.tenderData.bidSubEndDate); + + // if (this.currentDate >= bidSubStartDate && this.currentDate <= bidSubEndDate) { + // this.enableDownload = false; // Enable the button + // } else { + // this.enableDownload = true; // Disable the button + // } + + + } + + getMarqueeData(){ + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res=>{ + + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender(){ + this.navigateTo('/admin/add-tenders') + } + + UserApproval(){ + this.navigateTo('/admin/user-approval') + } + + openNotificationDialog(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getMarqueeData(); + } + + closeDialog(){ + this.dialogRef.close(); + } + + saveNotificationText(){ + if(!this.commonData.marquee || this.commonData.marquee == ''){ + this._ui.toastMessage(this.errorService.translate('notificationTextCannotBeBlank')); + return ; + } + else{ + if(this.commonData.id){ + this._masterService.updateMasterData(apiUrl.common,this.commonData,this.commonData.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('notificationTextSaved')); + this.closeDialog(); + }) + } + + } + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + // navigateTo(destination) { + // this.router.navigate([destination]); + // } + + // async getMenuData() { + // this.menuData = [] + // await this._menuService.getJsonData("sales-menu").then((res) => { + // res.forEach(element => { + // if (element.menuEnabled == "Y") + // this.menuData.push(element) + // }); + // // this.menuData = res; + // this.loading = false; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // }); + + // } + // getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + // if (!parentMenuId) + // return []; + // if (!menuCompactData) + // menuCompactData = []; + // for (let menu of menuList) { + // if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + // let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + // if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + // if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + // if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // // if (menu.menuType == "1") format["isExpanded"] = true; + // // if (menu.menuType != "1") format["isExpanded"] = false; + // // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + // if (menu["menuType"]) format["menuType"] = menu["menuType"]; + // if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + // if (menu["role"]) format["role"] = menu["role"]; + // if (menu["project"]) format["project"] = menu["project"]; + // if (this.seculevel == 'admin') + // menuCompactData.push(format); + // else { + // if (menu.role != 'admin') { + // menuCompactData.push(format); + // } + // } + // } + // } + + // return menuCompactData; + // } + + goToPayment(id){ + this.navigateTo(`admin/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['admin/tender-view',tenderId]); + } + + goToPaymentDetails(tenderId){ + this.router.navigate(['admin/payment-details',tenderId]) + } + + goToAddTenders(){ + this.router.navigate(['admin/add-tenders']); + } + + goToUpload(tenderId){ + + +this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck,`${this.userId}/${tenderId}`).then((res)=> { + + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + this.router.navigate(['/tender-upload',tenderId]); + } +}).catch((error) => { + console.error("Error fetching upload data:", error); +}); + + + + + // + } + + categoryRoute(){ + this.router.navigate(['admin/category']); + + } + goToEdit(tenderId){ + this.router.navigate(['admin/add-tenders',tenderId]); + } + Cancel(){ + + } + + gotoUserManagement(){ + this.navigateTo('/admin/user-management') + + } + + + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id){ + this.navigateTo(`bid-final-report/${id}`) + + + } + + goToPreviewApproval(){ + + this.router.navigate([`admin/preview-approval`]) + + } + + // CancelTender(id){ + // this.showPopup = true; + // this.showPopup = true; + // } + // closePopup() { + // this.showPopup = false; + // this.Secretary ='' + // this.President = '' + // } + + // async UploadsecretaryFiles(event,SecretaryFile){ + + // const allowedExtensions = ['cer']; + + // this.selectedSecretaryFile = event.target.files[0]; + // if (this.selectedSecretaryFile) { + + // const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.Secretary = this.selectedSecretaryFile.name; + + + // const formData = new FormData(); + // formData.append('adminUser', '2'); + // formData.append('certificate', this.selectedSecretaryFile); + + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + + // }else{ + // this.SecretarySigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + // deleteSecretaryInput(){ + + // } + + // async UploadPresidentFiles(event,President){ + + // const allowedExtensions = ['cer']; + + // this.selectedPresidentFile = event.target.files[0]; + // if (this.selectedPresidentFile) { + + // const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.President = this.selectedPresidentFile.name; + + // const formData = new FormData(); + // formData.append('adminUser', '1'); + // formData.append('certificate', this.selectedPresidentFile); + + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + + // }else{ + // this.PresidentSigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + + // deletePresidentInput(){ + + // } + + // VerifySignature(){ + // this.showPopup = true; + // if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + // this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + // return false + + // }else if(this.President == null || this.President == '' || this.President == undefined){ + // this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + // return false + // }else if(!this.SecretarySigned && !this.PresidentSigned){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Something went wrong!', + // // footer: 'Why do I have this issue?' + // }) + // return false + // //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + // }else if(this.SecretarySigned && this.PresidentSigned){ + // Swal.fire({ + // icon: 'success', + // title: 'Cancellation Successfully', + // showConfirmButton: false, + // timer: 1500 + // }) + // this.showPopup = false; + // } + // } + + + // openHelpDialog(templateRef) { + // this.dialogRef = this.dialog.open(templateRef, { + // width: '700px', + // disableClose: false + // }); + // } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/admin/dashboard.module.ts b/src/app/_modules/admin/dashboard.module.ts new file mode 100644 index 0000000..b2f6b1e --- /dev/null +++ b/src/app/_modules/admin/dashboard.module.ts @@ -0,0 +1,105 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardRoutingModule } from './dashboard-routing.module'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { DashboardComponent } from './dashboard.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { TenderHomeComponent } from './tender-home/tender-home.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker'; +import { LOCALE_ID } from '@angular/core'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { DialogComponent } from './dialog/dialog.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { PreviewApprovalComponent } from './preview-approval/preview-approval.component'; +import { MatBadgeModule } from '@angular/material/badge'; +import { UserApprovalComponent } from './user-approval/user-approval.component'; +import { TenderCategoryComponent } from './tender-category/tender-category.component'; +import { MatMenuModule } from '@angular/material/menu'; +import { UserManagementComponent } from './user-management/user-management.component'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; + +// import { MatTimepickerModule } from 'mat-timepicker'; +// import { MatTimepickerModule } from '@angular/material/timepicker'; +// import { MatSelectModule } from '@angular/material'; +const lang = 'en-US'; + +@NgModule({ + declarations: [ + LayoutComponentComponent, + DashboardComponent, + HomeViewComponent, + HomeUploadComponent, + TenderHomeComponent, + AddTendersComponent, + DialogComponent, + QrPaymentComponent, + PaymentDetailsComponent, + PreviewApprovalComponent, + UserApprovalComponent, + TenderCategoryComponent, + UserManagementComponent + + ], + imports: [ + CommonModule, + DashboardRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule, + MatDialogModule, + MatCheckboxModule, + MatBadgeModule, + MatMenuModule, + MatProgressSpinnerModule + + + + // NgxMatTimepickerModule.setLocale(lang), + // NgxMaterialTimepickerModule + // MatTimepickerModule + + + ], + providers: [{ provide: LOCALE_ID, useValue: lang }] +}) +export class DashboardModule { } diff --git a/src/app/_modules/admin/dialog/dialog.component.html b/src/app/_modules/admin/dialog/dialog.component.html new file mode 100644 index 0000000..80a1821 --- /dev/null +++ b/src/app/_modules/admin/dialog/dialog.component.html @@ -0,0 +1 @@ +

dialog works!

diff --git a/src/app/_modules/admin/dialog/dialog.component.scss b/src/app/_modules/admin/dialog/dialog.component.scss new file mode 100644 index 0000000..6879e9c --- /dev/null +++ b/src/app/_modules/admin/dialog/dialog.component.scss @@ -0,0 +1,40 @@ +/* Custom styles for the dialog component */ + +h2.mat-dialog-title { + font-family: 'Arial', sans-serif; /* Change the font family for the title */ + font-size: 24px; /* Increase the font size */ + font-weight: bold; /* Make the title bold */ + } + + mat-dialog-content { + font-family: 'Arial', sans-serif; /* Change the font family for the content */ + font-size: 16px; /* Adjust the font size */ + } + + ul { + list-style-type: disc; /* Use disc bullets for the list items */ + padding-left: 20px; /* Add some padding to the left for better alignment */ + } + + mat-dialog-actions { + justify-content: flex-end; /* Align the buttons to the right */ + } + +// button.mat-dialog-button.mat-primary { +// background-color: #4CAF50; /* Change the background color of the Accept button */ +// color: #ffffff; /* Change the text color of the Accept button */ +// } + + + div.checkbox-container { + display: flex; + align-items: center; /* Center align the contents vertically */ + } + + .view-terms-link { + cursor: pointer; + font-size: 14px; + color: #007bff; /* Change the color of the link (you can choose a different color if needed) */ + text-decoration: underline; + margin-left: 10px; /* Add some space between the checkbox and the link */ + } \ No newline at end of file diff --git a/src/app/_modules/admin/dialog/dialog.component.spec.ts b/src/app/_modules/admin/dialog/dialog.component.spec.ts new file mode 100644 index 0000000..a32e0ea --- /dev/null +++ b/src/app/_modules/admin/dialog/dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DialogComponent } from './dialog.component'; + +describe('DialogComponent', () => { + let component: DialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DialogComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/dialog/dialog.component.ts b/src/app/_modules/admin/dialog/dialog.component.ts new file mode 100644 index 0000000..44de131 --- /dev/null +++ b/src/app/_modules/admin/dialog/dialog.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'app-dialog-component', + template: ` +

Declaration:

+ +
    +
  • {{ detail }}
  • +
+
+ + + Close + + + + + `, + styleUrls: ['./dialog.component.scss'] +}) +export class DialogComponent implements OnInit { + + details: string[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { details: string[] } + ) { + this.details = data.details; + } + + onAccept() { + // You can perform any actions needed when the user accepts the terms and conditions here. + this.dialogRef.close('accepted'); + } + + onClose() { + // You can perform any actions needed when the user closes the dialog without accepting the terms and conditions here. + this.dialogRef.close('closed'); + } + ngOnInit(): void { + + } +} diff --git a/src/app/_modules/admin/home-upload/home-upload.component.html b/src/app/_modules/admin/home-upload/home-upload.component.html new file mode 100644 index 0000000..d691cd9 --- /dev/null +++ b/src/app/_modules/admin/home-upload/home-upload.component.html @@ -0,0 +1,201 @@ +
+ + + + + + +
+
+

Upload Files

+

+ +
+ +
+
+
+
+
+ + + + + Bid Final Amount + + + +
+ + + + + + + + + + + + + + + + + +
DescriptionDocument
{{cover?.Description}} +
({{cover?.fileFormatD?.fileFormat}} format) +
+
+ +
+ + + + {{tenderData?.covers[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + + + +
+
+
+
+

+ + + + + +
+ + + + I agree to the Terms and Conditions + +
+ + + + + + + + +
+ + +
+
+
+
+ +
+ + + + + + +

+ + +
+
+
+
+

© Art.n.Architects 2023. + All Rights Reserved

+

Designed by SiMS

+
+
+
+
+ + + +
\ No newline at end of file diff --git a/src/app/_modules/admin/home-upload/home-upload.component.scss b/src/app/_modules/admin/home-upload/home-upload.component.scss new file mode 100644 index 0000000..caa35a7 --- /dev/null +++ b/src/app/_modules/admin/home-upload/home-upload.component.scss @@ -0,0 +1,70 @@ +#customers { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; +} + +#customers td, #customers th { + border: 1px solid #ddd; + padding: 8px; +} + +#customers tr:nth-child(even){background-color: #f2f2f2;} + +#customers tr:hover {background-color: #ddd;} + +#customers th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #5FACA1; + color: white; +} +.nav-link:hover { + color: rgb(255, 0, 0); + } +.resp{ + min-height: 260px; +} + @media (max-width: 767px) { + .resp{ + min-height: 460px; + } + + #customers td, #customers th { + padding-right: 2px; + } +} + +.checkbox-container { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.checkbox-text { + flex: 1; + font-family: 'Arial', sans-serif; + font-size: 16px; +} +::ng-deep .mat-checkbox-ripple .mat-ripple-element { + background-color: #5FACA1 !important; + +} + +::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + +::ng-deep .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} \ No newline at end of file diff --git a/src/app/_modules/admin/home-upload/home-upload.component.spec.ts b/src/app/_modules/admin/home-upload/home-upload.component.spec.ts new file mode 100644 index 0000000..e09a39b --- /dev/null +++ b/src/app/_modules/admin/home-upload/home-upload.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeUploadComponent } from './home-upload.component'; + +describe('HomeUploadComponent', () => { + let component: HomeUploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeUploadComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/home-upload/home-upload.component.ts b/src/app/_modules/admin/home-upload/home-upload.component.ts new file mode 100644 index 0000000..17636a4 --- /dev/null +++ b/src/app/_modules/admin/home-upload/home-upload.component.ts @@ -0,0 +1,380 @@ +import { Component, OnInit,ViewChild,ElementRef,AfterViewInit, } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { log } from 'console'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2' +import { DialogComponent } from '../dialog/dialog.component'; +import { DatePipe } from '@angular/common'; +@Component({ + selector: 'app-home-upload', + templateUrl: './home-upload.component.html', + styleUrls: ['./home-upload.component.scss'] +}) + +export class HomeUploadComponent implements OnInit { + + phoneInvalid: boolean = false; + + secuLevel: any; + + formData: any = {}; + + myForm: UntypedFormGroup; + + loading: boolean = true + + selected: boolean + + tenderId: number; + + bidAmount:number; + + agreeToTerms1: boolean = false; + + agreeToTerms2: boolean = false; + + showError: boolean = false; + + tenderData: any; + + selectedFiles: any; + + userId: string; + + agreeToTerms: boolean = false; + + fileSelected: boolean[] + + DEFAULT_COVER_COUNT: any; + + initialSelectionStatus: any; + + UploadedFile: TenderDocumentDto[]; + + fileFormat: any[] + + userEmail: string; + + emailBody: any; + + username: string; + + @ViewChild('bidAmountInput') bidAmountInput: ElementRef; + + amountPaid: boolean = false; + OnlinePayment: boolean; + dialogRef: any; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + public dialog: MatDialog, + private datePipe: DatePipe + ) { + + + // this.generateUPIQRCode('atlejs47@oksbi', '100'); + + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.userEmail = localStorage.getItem('emailId'); + this.username = localStorage.getItem('username'); + + } + + + ngOnInit(): void { + this.loading = true; + this.agreeToTerms = false; + + + this.getData(); + this.getFileFormatLov(); + this.paymentCheck(); + } + + + + + + + openDialog() { + const dialogRef = this.dialog.open(DialogComponent, { + width: '500px', + data: { + details: [ + 'I hereby declare that I have read and understood the tendered documents, terms and conditions, drawings and specifications. The rates quoted are based on all the necessary understanding of the site conditions and challenges to carry out the work. The rates are the best I could offer and are inclusive of all taxes and levies.', + ] + } + }); + + dialogRef.afterClosed().subscribe((result) => { + // Handle any logic after the dialog is closed (if needed) + // For example, you can update the agreeToTerms variable based on the user's choice. + }); + } + + openQrImage(templateRef) { + // console.log('this'); + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false + }); + // this.verifiedOtp = true + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + // console.log('pay res=>', res); + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + // console.log("tenderData", res); + this.loading = false; + + this.tenderData = res; + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + this.DEFAULT_COVER_COUNT = this.tenderData?.covers.length; // Replace with the actual number of rows + this.initialSelectionStatus = new Array(this.DEFAULT_COVER_COUNT).fill(false); + this.fileSelected = [...this.initialSelectionStatus]; + // console.log('file---',this.fileSelected); + this.UploadedFile = []; + for(let i=0;i',this.emailBody); + + }) + } + + getFileFormatLov() { + this._masterService.getMasterData(apiUrl.fileFormat).then((res) => { + this.fileFormat = res + //console.log('this.fileFormat===', this.fileFormat); + + }) + } + + UploadFiles(event, i) { + const newFilename = `${this.tenderData.covers[i].Description.replace(/ /g, '')}${this.tenderData.covers[i].fileFormatD.fileFormat}` + + + + let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat); + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + + // Create a new File object with the updated filename + const updatedFile = new File([file], newFilename, { type: file.type }); + // const fd = new FormData(); + fd.append('file', updatedFile); + if (file && this.tenderId) { + this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => { + this.tenderData.covers[i].file = res.fileName; + this.fileSelected[i] = true; + this.UploadedFile[i].docName = res.fileName + this.UploadedFile[i].description = this.tenderData.covers[i].Description; + this.UploadedFile[i].docType = fileFormatId[0].id; + this.UploadedFile[i].documentSize = res.fileSizeKB; + this.UploadedFile[i].documentCategory = 'USERD'; + this.UploadedFile[i].tenderId = this.tenderId; + this.UploadedFile[i].userId = this.userId; + // console.log('this.UploadedFile========',this.UploadedFile); + + }) + } + + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + updateTerms(event: any) { + this.agreeToTerms = event.checked; + } + + + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + preSave() { + + if(this.bidAmount == 0 || this.bidAmount == null || this.bidAmount == undefined){ + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterBidFinalAmount"),2000,true); + return false; + } + for (let element of this.UploadedFile) { + if (!element.docName) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAddfiles"),2000,true); + + return false; + } + } + + if (!this.agreeToTerms) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAgreeToTheTermsandCondition"), 2000, true); + return false; + } + + + return true; + } + + + + + + // openDialog(): void { + // this.showDialog = true; + // } + + // closeDialog(): void { + // this.showDialog = false; + // } + + + + + submit() { + + if(!this.amountPaid && this.OnlinePayment){ + this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000); + return + } + + if(!this.preSave()) + return + + + + let id ={ + tenderId : this.tenderId, + userId : this.userId, + + } + + + let body= { + bidAmount:this.bidAmount + } + // this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + // // console.log(res); + // const body={email:this.userEmail} + // this._masterService.saveMasterData(apiUrl.UploadBidAmount,this.emailBody).then(res=>{ + // // console.log(res); + // },err=>{ + // console.error(err); + // }) + // },err=>{ + // console.error(err); + // }) + + + //console.log('this.tenderId========',body); + // console.log('this.userId========',this.userId); + + Swal.fire({ + title: 'Are you sure you want to submit?', + text: "Once submitted, document cannot be uploaded again", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, save it!' + }).then((result) => { + +if (result.isConfirmed) { + this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + const body={email:this.userEmail} + this._masterService.saveMasterData(apiUrl.emailUserSubmit,this.emailBody).then(res=>{ + + this._masterService.saveAllMasterData(apiUrl.tenderDoc, this.UploadedFile).then(res => { + // console.log('res===upload====', res); + Swal.fire( + 'Success', + 'Documents submitted successfully', + 'success' + ) + this.router.navigate(['dashboard']); + },err=>{ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + }) + }); + + }); + + } + }) + + + } + + deleteInput(i) { + // const inputField = document.getElementById(inputFieldId) as HTMLInputElement; + // if (inputField) { + // inputField.value = ''; + // } + this._masterService.deleteMasterData(apiUrl.fileDelete + '/' + this.tenderId + '/' + this.userId, this.tenderData.covers[i].file).then(res => { + // console.log('delete===', res); + this.tenderData.covers[i].file = ''; + this.fileSelected[i] = false; + this.UploadedFile[i].docName = null + this.UploadedFile[i].description = null; + this.UploadedFile[i].docType = null; + this.UploadedFile[i].documentSize = null; + this.UploadedFile[i].documentCategory = null; + this.UploadedFile[i].tenderId = null; + this.UploadedFile[i].userId = null; + }) + + } + + + +} diff --git a/src/app/_modules/admin/home-view/home-view.component.html b/src/app/_modules/admin/home-view/home-view.component.html new file mode 100644 index 0000000..65459f6 --- /dev/null +++ b/src/app/_modules/admin/home-view/home-view.component.html @@ -0,0 +1,639 @@ +
+ +
+
+ +
+ + +
+ + + + + + + +
+
+

Tender Details

+
+
+
+ + +
+
+
+
+ +
+ + + +
+ + + +
+
+
+ How can I Validate Digital Signature? +
+
+
+
+ +
Connect Security Device +
+
    +
  • Plug in the security device that has the necessary security keys. +
  • +
+
Select Key Files +
+
    +
  • Choose the Public key files for both the secretary and the president, usually provided on the security device. +
  • +
  • Locate the Public key document or file that you want to validate.
  • +
+
+
+ You can access Tender Reports only after validating the digital signatures of President and Secretary. +
+
+ + + +
+ Close +
+
+
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Basic Details
Tender Category{{tenderData.tenderCategoryD?.productCategory}}
Organisation Name{{tenderData?.orgChain}}
Tender Reference Number{{tenderData.tenderRefNo}}
Tender ID{{tenderData.tenderId}}
Tender Type{{tenderData.tenderTypeD?.tenderType}}
Payment Mode{{tenderData.paymentModeD?.paymentMode}}
Form of Contract{{tenderData.formOfContractD?.formOfContract}}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
Tender Fee Details
Tender Fee in ₹{{tenderData.tenderFee ? tenderData.tenderFee : '0' }}
Fee Payable To{{tenderData.feePayableTo ? tenderData.feePayableTo : 'not applicable' }}
Tender Fee Exemption Allowed{{ tenderData.tenderFeeExemption !== null && tenderData.tenderFeeExemption !== '' ? tenderData.tenderFeeExemption : 'not applicable' }}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EMD Fee Details
EMD Fee Applicable{{tenderData.emdFeeApplied ? 'Yes' : 'No'}}
EMD Amount in ₹{{ tenderData.emdAmt !== undefined && tenderData.emdAmt !== null ? (tenderData.emdAmt !== 0 ? tenderData.emdAmt : 'not applicable') : 'not applicable' }}
EMD Fee Type{{tenderData.emdFeeTypeD?.emdFeeType ? tenderData.emdFeeTypeD?.emdFeeType : 'not applicable' }}
EMD Payable To{{tenderData.emdPayableTo ? tenderData.emdPayableTo : 'not applicable' }}
EMD through BG/ST or EMD Exemption Allowed{{tenderData.allowEmdBgOrSt ? tenderData.allowEmdBgOrSt : 'not applicable' }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Critical Dates
Published Date{{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale Start Date{{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale End Date{{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission Start Date{{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission End Date{{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Opening Date{{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work Item Details
Title{{tenderData.title}}
Work Description{{tenderData.workDesc}}
Pre Qualification{{tenderData.ndaPreQualification}}
Tender Value in ₹{{tenderData.tenderValue}}
Category{{tenderData?.productCategoryD?.tenderCategory}}
Sub category + + {{ subCategory.tendersubCategoryD?.tenderSubCategory }} + , + +
Bid Validity(Days){{tenderData.bidValidity}}
Period Of Work {{tenderData.periodOfWork}}
Location{{tenderData.location}}
Pincode{{tenderData.pincode}}
Bid Opening Place{{tenderData.bidOpeningPlace}}
Bid Opening Address{{tenderData.bidOpenAddress}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
Tenders Documents
Notice
Document TypeDocument NameDescriptionDownload
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
Work Item Documents
Document TypeDocument NameDescription
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
+ + +
Drawings Document
Description + + +
{{document.description}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Required Documents Details
Document TypeDescriptionDocument Format
{{ document.coverTypeD.coverType }}{{ document.Description }}{{ document.fileFormatD.fileFormat }}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
Tender Inviting
Name{{tenderData.tenderInvName}}
Address{{tenderData.tenderInvAddess}}
+
+
+ + +
+
+
+
+
+ + +
+
+ + + diff --git a/src/app/_modules/admin/home-view/home-view.component.scss b/src/app/_modules/admin/home-view/home-view.component.scss new file mode 100644 index 0000000..b19ed1b --- /dev/null +++ b/src/app/_modules/admin/home-view/home-view.component.scss @@ -0,0 +1,396 @@ +.container-fluid{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: 10px; + position: relative; +} +.container-fluid2{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: -1px; + position: relative; +} + +@media print { + .hide-on-print { + display: none; + } +} + + + + +.nav-link:hover { + color: rgb(255, 0, 0); +} +// #zipFile:hover { +// color: rgb(255, 0, 0); +// cursor: pointer; +// } + +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +// -------------------------------------------------------------------------------------------- +thead{ + // background-color: #5faca1; color: aliceblue; + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color:orangered; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +.table td { + word-break: break-word; + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; +} + +.table th { + font-family: texg; + color: #353535; +} + +.tenderHeading{ + font-family: texg; + color: #353535; +} +.printButton { + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.printButton:hover { + background-color: #ececec; + color: orangered; +} + +.payButton:hover { + background-color: #ececec; + color:orangered; + border: 1px solid black; +} + + +.DownloadZipButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} +.DownloadZipButton:hover { + background-color: #ececec; + color: orangered; +} + +.DownloadNoticeButton { + // float: right; + // margin-top: 5px; + // margin-bottom: 5px; + background-color: white; + // color: #424242; + color: orangered; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + +} +.DownloadNoticeButton:hover { + background-color: #ececec; + color: #303030; +} + +@media screen and (max-width: 768px) { + /* Adjust font size for smaller screens */ + .DownloadZipButton { + font-size: 14px; + } +} + +@media screen and (max-width: 480px) { + /* Further adjustments for even smaller screens */ + .DownloadZipButton { + font-size: 12px; + } +} + + + + +// ---------------------------------------digital signature------------------------------------------// + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; +} + +::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; +} + + +::ng-deep .mat-slide-toggle-label { + display: flex; + flex: 1; + flex-direction: row; + align-items: center; + height: inherit; + cursor: pointer; + +} + +.element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ +} + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.responsive-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.responsive-buttons button { + margin-left: 10px; /* Add some spacing between the buttons */ +} + +@media (max-width: 768px) { + .responsive-buttons { + flex-direction: row; + justify-content: flex-end; + align-items: center; + } +} + + + + +.master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/admin/home-view/home-view.component.spec.ts b/src/app/_modules/admin/home-view/home-view.component.spec.ts new file mode 100644 index 0000000..bd212a6 --- /dev/null +++ b/src/app/_modules/admin/home-view/home-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeViewComponent } from './home-view.component'; + +describe('HomeViewComponent', () => { + let component: HomeViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/home-view/home-view.component.ts b/src/app/_modules/admin/home-view/home-view.component.ts new file mode 100644 index 0000000..f3ec3fa --- /dev/null +++ b/src/app/_modules/admin/home-view/home-view.component.ts @@ -0,0 +1,607 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TransactionService } from 'src/app/_providers/_services/transaction.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-home-view', + templateUrl: './home-view.component.html', + styleUrls: ['./home-view.component.scss'] +}) +export class HomeViewComponent implements OnInit { + + tenderId: number; + + tenderData: any; + + nitItemDocuments: any[] = []; + + workItemDocuments: any[] = []; + + drawingsDocuments: any[] = []; + + tenderDocuments: any; + + paymentDetails: PurchaseDto; + + tempID: any; + + newPaymentRow: any; + + currentDate = new Date(); + + enableDownload: boolean = true + + paymentStatus: string; + + userId: string; + + amountPaid: boolean = false; + + seculevel: string; + + displayedColumns: string[] = ['field', 'value']; + OnlinePayment: boolean; + showDownloadButton: boolean; + + // ------digital signature--------// + + showPopup:boolean = false; + fileSelected: boolean; + fileSelected2:boolean; + Secretary:any; + President:any; + selectedSecretaryFile: any; + selectedPresidentFile: any; + SecretarySigned: boolean; + PresidentSigned: boolean; + activeYn: any; + dialogRef: any; + newStatus: string; + CancelTenderButtons: boolean; + spinnerLoading: boolean =false; + + // -------------- ---------------// + + + constructor( + private router: Router, + private route: ActivatedRoute, + private _masterService: MasterService, + private _transactionService: TransactionService, + private errorService:ErrorTranslateService, + private _ui: UiService, + private _errorTranslateService: ErrorTranslateService, + private dialog: MatDialog + ) { + this.seculevel = localStorage.getItem('seculevel') + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.paymentStatus = this.route.snapshot.paramMap.get('pay'); + this.getData() + + } + ngOnInit(): void { + this.tenderData = new TenderDetailDto() + this.userId = localStorage.getItem('userId') + this.seculevel = localStorage.getItem('seculevel') + + // console.log("this.seculevel", this.seculevel); + this.enableDownload = true; + this.getData(); + this.getPaymentData(); + + this.fileSelected = false + this.fileSelected2 = false + } + + + + + + + + + getData() { + + let newDate = new Date(); + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + this.tenderData = res + if (res.tenderFeeExemption !== null && res.tenderFeeExemption !== undefined) { + this.tenderData.tenderFeeExemption = res.tenderFeeExemption.trim(); + } + + this.tenderDocuments = this.tenderData['tenderDoc'] + + this.activeYn = this.tenderData['activeYn']; + if(this.activeYn == 'N'){ + this.CancelTenderButtons = true + }else if(this.activeYn == 'Y'){ + this.CancelTenderButtons = false + } + + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + const saleStartDate = new Date(this.tenderData.saleStartDate); + const saleEndDate = new Date(this.tenderData.saleEndDate); + + if (this.currentDate >= saleStartDate && this.currentDate <= saleEndDate) { + this.showDownloadButton = true; // Enable the button + } else { + this.showDownloadButton = false; // Disable the button + } + + + + this.filterDataByCategory(); + }) + } + + + getPaymentData() { + + // if(this.OnlinePayment){ + // console.log("this.online"); + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + }}) + + //} + + } + getUniqueSubCategories() { + if (!this.tenderData || !this.tenderData.subCategoryMaster) { + return []; + } + const uniqueSubCategories = []; + const subCategoryIds = new Set(); // To keep track of already added subcategory IDs + for (const subCategory of this.tenderData.subCategoryMaster) { + const subCategoryId = subCategory.tendersubCategoryD.tenderSubCategory; + if (!subCategoryIds.has(subCategoryId)) { + uniqueSubCategories.push(subCategory); + subCategoryIds.add(subCategoryId); + } + } + return uniqueSubCategories; + } + + print(): void { + window.print(); + } + + filterDataByCategory() { + + + this.drawingsDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'D'); + this.workItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'WID'); + this.nitItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'NIT'); + } + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToDashboard(){ + this.navigateTo(`admin/dashboard`) + } + + DownloadDrawingsZIP() { + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + } else { + this.spinnerLoading = true; + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => { + // Download logic + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + }, err => { + + if (err.status == 200) { + + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } else { + // Handle other errors + } + }).finally(() => { + this.spinnerLoading = false; // Set spinnerLoading to false after download completes or fails + }); + } +} + + // DownloadDrawingsZIP() { + // // Your code to download the ZIP file goes here + + // // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // } + DownloadNIT(index: number) { + const id = this.tenderId; + // console.log(index); + // console.log(this.nitItemDocuments[index].docName); + + + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => { + + } , err => { + // console.log('res===>', err); + if (err.status == 200) { + // console.log('start >>>'); + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10000); + } + if (err.status == 404) { + alert('No Notice Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + + + downloadWITZip() { + + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + + } + else { + // console.log('clicked'); + const id = this.tenderId; + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10); + + this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + }, err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 1000); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + } + } + + + async paymentGateway() { + // this.paymentDetails = new PurchaseDto(); + // this.paymentDetails.application = this.tenderId; + // this.paymentDetails.mobile = localStorage.getItem('mobile') + // this.paymentDetails.email = "accuratesoftware2022@gmail.com"; + // this.paymentDetails.amount = this.tenderData.tenderFee; + // this.paymentDetails.type = "I" + + + // this._transactionService.createPayment(this.paymentDetails).then( + // res => { + // this.onSuccessPayment(res); + // }, + // err => { + // this.onFailurePayment(err); + // } + // ); + + + this.router.navigate([`qr-payment/${this.tenderId}`]) + + } + + onSuccessPayment(response) { + if (response.url) { + // Render PayUmoney payment gateway page + window.location.href = response.url; + } + } + + onFailurePayment(err) { + // console.log('Failure Payment : ' + err); + this._ui.toastMessage(err.message ? err.message : this._errorTranslateService.translate('errInSave'), 3000); + + } + + // ------------------------------------------------------------------------------------------- + + + + + CancelTender(id){ + this.showPopup = true; + + this.showPopup = true; + } + closePopup() { + this.showPopup = false; + this.Secretary ='' + this.President = '' + } + + async UploadsecretaryFiles(event,SecretaryFile){ + + const allowedExtensions = ['cer']; + + this.selectedSecretaryFile = event.target.files[0]; + if (this.selectedSecretaryFile) { + + const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.Secretary = this.selectedSecretaryFile.name; + + + const formData = new FormData(); + formData.append('adminUser', '2'); + formData.append('certificate', this.selectedSecretaryFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + + }else{ + this.SecretarySigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + + + + }) + } + + + } + deleteSecretaryInput(){ + + } + + async UploadPresidentFiles(event,President){ + + const allowedExtensions = ['cer']; + + this.selectedPresidentFile = event.target.files[0]; + if (this.selectedPresidentFile) { + + const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.President = this.selectedPresidentFile.name; + + const formData = new FormData(); + formData.append('adminUser', '1'); + formData.append('certificate', this.selectedPresidentFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + + }else{ + this.PresidentSigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.PresidentSigned = false + this.President = '' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.PresidentSigned = false + this.President = '' + } + + + + }) + } + + + } + + deletePresidentInput(){ + + } + + + TenderCancelToggle(event){ + this.showPopup = true; + + } + + VerifySignature(){ + + const id = this.tenderId; + this.showPopup = true; + if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + return false + + }else if(this.President == null || this.President == '' || this.President == undefined){ + this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + return false + }else if(!this.SecretarySigned && !this.PresidentSigned){ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + // footer: 'Why do I have this issue?' + }) + return false + //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + }else if(this.SecretarySigned && this.PresidentSigned){ + + + + + this.activeYn = this.activeYn === 'N' ? 'Y' : 'N'; + + + let body ={ + activeYn: this.activeYn + } + this._masterService.postMasterData(apiUrl.TenderStatus,body,id).then((res) =>{ + + if(this.activeYn == 'N'){ + this.activeYn == 'N' + }else if(this.activeYn == 'Y'){ + this.activeYn == 'Y' + } + + + this._ui.toastMessage(res.data, 3000); + + + if(res.data == 'Digital Signature Expired'){ + this.activeYn == 'N' + } + this.closePopup() + }, + (err) => { + console.error(err); + this._ui.toastMessage(err.error.message, 3000); + } + ); + + this.showPopup = false; + } + } + + + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog(){ + this.dialogRef.close(); + } + + + + +} diff --git a/src/app/_modules/admin/layout-component/layout-component.component.css b/src/app/_modules/admin/layout-component/layout-component.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/admin/layout-component/layout-component.component.html b/src/app/_modules/admin/layout-component/layout-component.component.html new file mode 100644 index 0000000..59d944b --- /dev/null +++ b/src/app/_modules/admin/layout-component/layout-component.component.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/admin/layout-component/layout-component.component.ts b/src/app/_modules/admin/layout-component/layout-component.component.ts new file mode 100644 index 0000000..08d86dd --- /dev/null +++ b/src/app/_modules/admin/layout-component/layout-component.component.ts @@ -0,0 +1,21 @@ +import { Component, OnInit } from '@angular/core'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-layout-component', + templateUrl: './layout-component.component.html', + styleUrls: ['./layout-component.component.css'] +}) +export class LayoutComponentComponent implements OnInit { + + constructor( + private _ui: UiService, + ) { } + + async ngOnInit() { + + + // await this._ui.userValidation() + } + +} diff --git a/src/app/_modules/admin/payment-details/payment-details.component.html b/src/app/_modules/admin/payment-details/payment-details.component.html new file mode 100644 index 0000000..1841638 --- /dev/null +++ b/src/app/_modules/admin/payment-details/payment-details.component.html @@ -0,0 +1,232 @@ +
+ + + +
+ + + +
+ + + + +
+ + +
+
+

Payment Details

+
+ +
+

Tender Information:

+
+ + +
+
+ + {{'tender'|translate}} : + {{headerData?.title}} + +
+ +
+ + +
+
+ + {{'tenderId'|translate}} : + {{tenderInputId}} + +
+ +
+ +
+
+

Payment Summary:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + +
+ {{'TransactionId'|translate}} +
+ + + {{element?.transId}} + + +
+ + + + + + +
+ {{'Paymentstatus'|translate}} +
+ + + + {{element?.paymentStatus}} + + +
+ + + + + + + +
+
+
+
+

No Payment Details available.

+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/admin/payment-details/payment-details.component.scss b/src/app/_modules/admin/payment-details/payment-details.component.scss new file mode 100644 index 0000000..ac0aa1f --- /dev/null +++ b/src/app/_modules/admin/payment-details/payment-details.component.scss @@ -0,0 +1,440 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + } + + mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media (max-width: 767px) { + .card { + min-width: 600px; + } + } + + + @media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } + } + + .mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); + } + + .table-container { + margin-top: 20px + } + + + .backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + + } + + .backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + } + + .printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + + .excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; + } + .buttonCardBottom{ + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-bottom: 20px; + } + + .reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; + } + + .bidHeading { + font-family: texg; + color: #353535; + } + + .tenderInfo { + font-family: texg; + color: #353535; + } + + .subHead { + font-family: texg; + color: #353535; + } + + .subDetail { + font-family: nucleo; + color: #353535; + } + + .captchaFont { + font-family: captcha; + font-size: large; + } + + .captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); + } + + .captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + .captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ + } + + .rotate-icon { + animation: rotate 1s infinite; + } + + @keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .table-responsive { + overflow-x: scroll; + } + + .printButton { + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + } + + .printButton:hover{ + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: orangered; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + } \ No newline at end of file diff --git a/src/app/_modules/admin/payment-details/payment-details.component.ts b/src/app/_modules/admin/payment-details/payment-details.component.ts new file mode 100644 index 0000000..22dd98f --- /dev/null +++ b/src/app/_modules/admin/payment-details/payment-details.component.ts @@ -0,0 +1,148 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-payment-details', + templateUrl: './payment-details.component.html', + styleUrls: ['./payment-details.component.scss'] +}) +export class PaymentDetailsComponent implements OnInit { + + + title = 'Payment Details'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'transId', 'Paymentstatus']; + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + tenderInputId: any; + + + paymentStatus: any; + userId: string; + + constructor( + private _router: Router, + private _masterService: MasterService, + private route: ActivatedRoute, + private _ui:UiService, + ) { + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + } + + print(): void { + window.print(); + } + + getHeaderData(id) { + this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => { + this.headerData = res; + + this.tenderInputId = res.tenderId + }) + } + + getTableData(id) { + this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => { + + + this.tableData = res.report + this.tableData.forEach(element => { + if (element.status === 'P') { + element.paymentStatus = 'Pending'; + } + if(element.status === 'S'){ + element.paymentStatus = 'Payment Success'; + } + if(element.status === 'D'){ + element.paymentStatus = 'Declined'; + } + }); + + this.tableData.sort((a, b) => { + if (a.status === 'P' && b.status !== 'P') { + return -1; + } else if (a.status !== 'P' && b.status === 'P') { + return 1; + } else { + return 0; + } + }); + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this.navigateTo('admin/dashboard') + // this.backClick.emit() + } + + sortData(sort: Sort) {} + + onPaymentStatusChange(userId, paymentStatus){ + + let message = ''; + if (paymentStatus === 'S') { + message = 'Payment confirmed message'; + } else if (paymentStatus === 'D') { + message = 'Payment declined message'; + } + + let body = { + status : paymentStatus, + notificationViewed:'N', + message:message + } + this._masterService.postMasterData(apiUrl.paymentupdatePaymentStatus,body,`${userId}/${this.tenderId}`).then((res) =>{ + + this._ui.toastMessage(res.data) + + },err=>{ + this._ui.toastMessage(err.error.message); + + + }) + } + + ConfirmMail(userName,email){ + + let body ={ + custName:userName, + email: email + } + this._masterService.saveMasterData(apiUrl.confirmPayment,body).then((res) =>{ + + + }) + + } + +} diff --git a/src/app/_modules/admin/preview-approval/preview-approval.component.html b/src/app/_modules/admin/preview-approval/preview-approval.component.html new file mode 100644 index 0000000..4c17607 --- /dev/null +++ b/src/app/_modules/admin/preview-approval/preview-approval.component.html @@ -0,0 +1,258 @@ +
+ +
+
+ +
+
+ Approval Preview
+ +
+ +
+ + +
+
+
+ + + +
+ +
+
+ +
+
+ + +
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'view' | translate }} + + + + + + + + + + + {{ 'action' | translate }} + + + +    + + + + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+ + +
+ + +
+ +
+
+
+
+
+
+
+ +
+ + + + + +
Notification
+ +
+ + Notification Text + + +
+ +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/admin/preview-approval/preview-approval.component.scss b/src/app/_modules/admin/preview-approval/preview-approval.component.scss new file mode 100644 index 0000000..8085fb4 --- /dev/null +++ b/src/app/_modules/admin/preview-approval/preview-approval.component.scss @@ -0,0 +1,611 @@ + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + // ------------------------------------------------ + // .popup-card { + // position: fixed; + // background-color: #ffffff; + // top: 50%; + // left: 50%; + // transform: translate(-50%, -50%); + // width: 450px; + // height: 330px; + // z-index: 1000; + // } + + + + // .popup-container { + // padding: 20px; /* Add padding for better spacing */ + // display: flex; + // flex-direction: column; + // justify-content: center; + // height: 100%; + // } + + + // .mainCard{ + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + // border-radius: 10px; + + // } + + + // .resetSpan{ + // font-family: texg; + // color: #1e3d3b; + // font-size: xx-large; + // float: center; + // margin-top: 15px; + // // margin-left: 64px; + // } + // .centered-form { + // display: flex; + // flex-direction: column; + // align-items: center; + // justify-content: center; + // } + + + // @media screen and (max-width: 600px) { + // .popup-card { + // width: 450px; /* Adjust card width for smaller screens */ + // } + // } + + // .mat-card-actions { + // display: flex; + // justify-content: flex-end; + // padding: 16px; /* Add padding for spacing */ + // } + + // .popUpButtons{ + // padding: 5px; + // color: #353535; + // font-weight: 900; + // font-size: medium; + // // background-color: #ececec; + // font-family:nucleo; + // } + + // .popUpButtons:hover{ + + // background-color: #ebeaea ; + // color:#46AC9E; + // box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // // transform: translateY(5px); + + // } + + // .custom-spinner-content { + // font-size: 24px; + // color:#46AC9E; + // margin: 0; + // padding: 0; + // } + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size:larger; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + + .verificationPopup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 235px; + z-index: 1000; +} +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + +.master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; +} + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/admin/preview-approval/preview-approval.component.spec.ts b/src/app/_modules/admin/preview-approval/preview-approval.component.spec.ts new file mode 100644 index 0000000..31116df --- /dev/null +++ b/src/app/_modules/admin/preview-approval/preview-approval.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PreviewApprovalComponent } from './preview-approval.component'; + +describe('PreviewApprovalComponent', () => { + let component: PreviewApprovalComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PreviewApprovalComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PreviewApprovalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/preview-approval/preview-approval.component.ts b/src/app/_modules/admin/preview-approval/preview-approval.component.ts new file mode 100644 index 0000000..c80c2c9 --- /dev/null +++ b/src/app/_modules/admin/preview-approval/preview-approval.component.ts @@ -0,0 +1,750 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-preview-approval', + templateUrl: './preview-approval.component.html', + styleUrls: ['./preview-approval.component.scss'] +}) +export class PreviewApprovalComponent implements OnInit{ + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData:CommonDto + + showPopup: boolean = false; + + toggleEvent:any; + + id:string; + + activeYn: any; + // ------digital signature--------// + + // showPopup:boolean = false; + // fileSelected: boolean; + // fileSelected2:boolean; + // Secretary:any; + // President:any; + // selectedSecretaryFile: any; + // selectedPresidentFile: any; + // SecretarySigned: boolean; + // PresidentSigned: boolean; + + // -----------------------------// + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + + this.seculevel = localStorage.getItem('seculevel') + + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + // if(this.seculevel == 'B'){ + // } + // else{ + // this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','userPayments','view','upload']; + // } + + this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','view','action']; + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck() + // this.fileSelected = false + // this.fileSelected2 = false + + // await this._ui.userValidation() + // this.loading = true; + // this.getMenuData(); + + } + + gotoVerify(element) { + this.id =element.id ; + this.showPopup = true; + + + } + + closePopup() { + this.showPopup = false; + + } + goToDashboard(){ + this.navigateTo(`admin/dashboard`) + } + + verifyTender(){ + + this.activeYn='Y'; + let body ={ + activeYn: this.activeYn + } + + this._masterService.postMasterData(apiUrl.TenderStatus,body,this.id).then(res=> { + + + this.showPopup=false; + this.getData(); + + Swal.fire( + 'Verified', + 'Tender Verified Successfully', + 'success' + ) + setTimeout(() => { + this.getData(); + + }, 2000); + + },err=>{ + // console.error(err) + this._ui.toastMessage(err.error.message,3000,true) + }) + } + + + getData(){ + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + if(this.seculevel != 'B') + this._masterService.getMasterData(`${apiUrl.adminTenderView}?where[activeYn]=S` ).then((res) =>{ + // console.log("tenderData=1=",res); + this.tenderData = res; + + + + for(let element of res){ + + if(element.id == '56'){ + element.hide56 = 'true' + }else + element.hide56= 'false' + + const bidSubStartDate: Date = new Date(element.bidSubStartDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + + + element.hide = 'Active' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + },err=>{ + console.error(err) + }) + else + this._masterService.getMasterData(apiUrl.adminTenderView +'?order[id]=DESC').then((res) =>{ + this.tenderData = res; + + + + for(let element of res){ + this._masterService.getMasterDatabyId(apiUrl.bidReport, element.id).then(result => { + element.countStatusP = result.countStatusP; + + + }) + + const publishDate: Date = new Date(element.publishDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + let bidOpenDate: Date = new Date(element.bidOpenDate); + + bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 30); + if(newDate >= bidOpenDate){ + element.reportHide = 'false' + } + if(newDate > publishDate){ + element.HideEdit = true + }else { + element.HideEdit = false + } + + if(newDate >= publishDate && newDate <= bidOpenDate){ + + + + element.hide = 'Active' + } + else if(newDate < publishDate){ + element.hide = 'Await' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + // console.log("tenderData=2=",res); + + },err=>{ + console.error(err) + }) + + + + // const bidSubStartDate = new Date(this.tenderData.bidSubStartDate); + // const bidSubEndDate = new Date(this.tenderData.bidSubEndDate); + + // if (this.currentDate >= bidSubStartDate && this.currentDate <= bidSubEndDate) { + // this.enableDownload = false; // Enable the button + // console.log("enabled"); + // } else { + // this.enableDownload = true; // Disable the button + // console.log("disabled"); + // } + + + } + + getMarqueeData(){ + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res=>{ + + + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender(){ + this.navigateTo('/admin/add-tenders') + } + + openNotificationDialog(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getMarqueeData(); + } + + closeDialog(){ + this.dialogRef.close(); + } + + saveNotificationText(){ + if(!this.commonData.marquee || this.commonData.marquee == ''){ + this._ui.toastMessage(this.errorService.translate('notificationTextCannotBeBlank')); + return ; + } + else{ + if(this.commonData.id){ + this._masterService.updateMasterData(apiUrl.common,this.commonData,this.commonData.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('notificationTextSaved')); + this.closeDialog(); + }) + } + + } + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + // navigateTo(destination) { + // this.router.navigate([destination]); + // } + + // async getMenuData() { + // this.menuData = [] + // await this._menuService.getJsonData("sales-menu").then((res) => { + // res.forEach(element => { + // if (element.menuEnabled == "Y") + // this.menuData.push(element) + // }); + // // this.menuData = res; + // this.loading = false; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // console.log("===err====", err); + // }); + + // } + // getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + // if (!parentMenuId) + // return []; + // if (!menuCompactData) + // menuCompactData = []; + // for (let menu of menuList) { + // if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + // let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + // if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + // if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + // if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // // if (menu.menuType == "1") format["isExpanded"] = true; + // // if (menu.menuType != "1") format["isExpanded"] = false; + // // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + // if (menu["menuType"]) format["menuType"] = menu["menuType"]; + // if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + // if (menu["role"]) format["role"] = menu["role"]; + // if (menu["project"]) format["project"] = menu["project"]; + // if (this.seculevel == 'admin') + // menuCompactData.push(format); + // else { + // if (menu.role != 'admin') { + // menuCompactData.push(format); + // } + // } + // } + // } + + // return menuCompactData; + // } + + goToPayment(id){ + this.navigateTo(`admin/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['admin/tender-view',tenderId]); + } + + goToPaymentDetails(tenderId){ + this.router.navigate(['admin/payment-details',tenderId]) + } + + goToAddTenders(){ + this.router.navigate(['admin/add-tenders']); + } + + goToUpload(tenderId){ + + +this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck,`${this.userId}/${tenderId}`).then((res)=> { + + + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + this.router.navigate(['/tender-upload',tenderId]); + } +}).catch((error) => { + console.error("Error fetching upload data:", error); +}); + + + + + // + } + goToEdit(tenderId){ + this.router.navigate(['/add-tenders',tenderId]); + } + Cancel(){ + + } + + + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id){ + this.navigateTo(`bid-final-report/${id}`) + + + } + + + // CancelTender(id){ + // this.showPopup = true; + // console.log(id); + // this.showPopup = true; + // } + // closePopup() { + // this.showPopup = false; + // this.Secretary ='' + // this.President = '' + // } + + // async UploadsecretaryFiles(event,SecretaryFile){ + + // const allowedExtensions = ['cer']; + + // this.selectedSecretaryFile = event.target.files[0]; + // if (this.selectedSecretaryFile) { + + // const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.Secretary = this.selectedSecretaryFile.name; + + + // const formData = new FormData(); + // formData.append('adminUser', '2'); + // formData.append('certificate', this.selectedSecretaryFile); + + // console.log("s",formData); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // console.log(res); + // if(res.message = "Authentication Successfully Completed"){ + // console.log("1"); + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + + // }else{ + // this.SecretarySigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + // deleteSecretaryInput(){ + + // } + + // async UploadPresidentFiles(event,President){ + + // const allowedExtensions = ['cer']; + + // this.selectedPresidentFile = event.target.files[0]; + // if (this.selectedPresidentFile) { + + // const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.President = this.selectedPresidentFile.name; + + // const formData = new FormData(); + // formData.append('adminUser', '1'); + // formData.append('certificate', this.selectedPresidentFile); + + // console.log("p",formData); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // console.log(res); + // if(res.message = "Authentication Successfully Completed"){ + // console.log("1"); + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + + // }else{ + // this.PresidentSigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + + // deletePresidentInput(){ + + // } + + // VerifySignature(){ + // this.showPopup = true; + // if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + // this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + // return false + + // }else if(this.President == null || this.President == '' || this.President == undefined){ + // this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + // return false + // }else if(!this.SecretarySigned && !this.PresidentSigned){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Something went wrong!', + // // footer: 'Why do I have this issue?' + // }) + // return false + // //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + // }else if(this.SecretarySigned && this.PresidentSigned){ + // console.log("OK"); + // Swal.fire({ + // icon: 'success', + // title: 'Cancellation Successfully', + // showConfirmButton: false, + // timer: 1500 + // }) + // this.showPopup = false; + // } + // } + + + // openHelpDialog(templateRef) { + // this.dialogRef = this.dialog.open(templateRef, { + // width: '700px', + // disableClose: false + // }); + // } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} + diff --git a/src/app/_modules/admin/qr-payment/qr-payment.component.html b/src/app/_modules/admin/qr-payment/qr-payment.component.html new file mode 100644 index 0000000..6ac5299 --- /dev/null +++ b/src/app/_modules/admin/qr-payment/qr-payment.component.html @@ -0,0 +1,193 @@ + + + + + +
+
+
+ + +
+
+
+ {{ 'QRpayment' | translate }} +
+
+
+ help? +
+
+
+
+ + +
+
+

Current payment status :   {{paymentStatus}}

+

Amount need to be paid :  ₹{{amountReq}}/- + Only

+

Pay using any UPI app

+ + QR Code +
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+ +
+

Please provide the transaction id of payment you've made successfully.

+
+ + + Please Enter Transaction ID + + + +
+
+ +
+
+ +
+
+
+
+ + + + + + +
+
How can I pay?
+
    +
  • Launch the payment app on your smartphone
  • +
  • scan the code
  • +
  • After paying need to enter transaction ID for Completing the process
  • +
  • Review the payment details to ensure they're correct, and then confirm the transaction +
  • +
+
How do I get my Transaction Id?
+
    +
  • The method to obtain a transaction ID for a QR code payment can vary depending on the + payment app you're using and the platform through which you made the payment. Generally, + when you make a payment using a QR code, the transaction ID is usually generated and + provided to you as a confirmation of the completed payment. please check your payment + app or mail for Transaction ID
  • +
+
How can I ensure that the payment was successful?
+
    +
  • After your successfull payment,enter the transaction Id
  • +
  • After the confirmation from Bank, your payment status will be changed from Pending to + Paid
  • +
+
Can I change the Transaction ID once it has been saved?
+
    +
  • You can edit the transaction ID after saving also
  • +
  • Editing Must be before the appropriate date
  • +
+

more info : secretary@artnouveau.in

+ +
+ Close +
+
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/src/app/_modules/admin/qr-payment/qr-payment.component.scss b/src/app/_modules/admin/qr-payment/qr-payment.component.scss new file mode 100644 index 0000000..65937bd --- /dev/null +++ b/src/app/_modules/admin/qr-payment/qr-payment.component.scss @@ -0,0 +1,156 @@ +.payUpimsg{ + font-family: texg; + margin-bottom: 0px; +} + +.statusSpan{ + font-weight: bolder; + font-family: nucleo; + font-size: large; +} + +.normalText{ + font-family: nucleo; +} + +.btn1{ + font-family: nucleo; + font-size: 1rem; +} + + + +h6{ + font-family: nucleo; +} +.noFont{ + font-family: sans-serif; + font-weight: 600; +} + + +// -[-----------------------------------------------------------------]- + +.btn:hover, .btn1:hover { + background-color: #ebeaea; + color: #46AC9E; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.popup-card { + background-color: #ffffff; + width: 100%; + max-width: 600px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; +} + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + + // margin-left: 64px; + } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; + +// } + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: auto; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: 1rem; + padding: 10px; + font-family: nucleo; + width: 270px; + + } + .normalTextIN{ + color: #505050; + font-weight: 700; + font-size: small; + font-family: nucleo; + font-size: 1rem; + } + + +.centered-heading { + text-align: center; + margin-bottom: 20px; +} + + +.centered-form-content { + text-align: center; + padding: 0 20px; +} + +.centered-button { + text-align: center; + display: flex; + justify-content: center; + align-items: center; + margin-top: 20px; +} + + + +::ng-deep .mat-form-field-flex{ + background-color: #ffffff; +} + + + + +@media screen and (max-width: 600px) { + .centered-heading { + font-size: 1.2rem; + } +} + + + +@media (max-width: 767px) { + .responsive-container { + padding: 10px; + } + + .custom-tab-group { + width: 100%; + } + + .centered-form-content { + padding: 10px; + } + + .col-md-3, + .col-md-6 { + flex-basis: 100%; + } +} + + +@media (min-width: 768px) and (max-width: 991px) { + .col-md-3, + .col-md-6 { + flex-basis: 50%; + } +} + +.center-container { + display: flex; + justify-content: center; /* Horizontally center */ + // align-items: center; /* Vertically center */ + // height: 100vh; /* Make the container cover the viewport vertically */ + // background-color: rgba(0, 0, 0, 0.5); /* Optional overlay background */ +} \ No newline at end of file diff --git a/src/app/_modules/admin/qr-payment/qr-payment.component.spec.ts b/src/app/_modules/admin/qr-payment/qr-payment.component.spec.ts new file mode 100644 index 0000000..11289ca --- /dev/null +++ b/src/app/_modules/admin/qr-payment/qr-payment.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { QrPaymentComponent } from './qr-payment.component'; + +describe('QrPaymentComponent', () => { + let component: QrPaymentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ QrPaymentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(QrPaymentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/qr-payment/qr-payment.component.ts b/src/app/_modules/admin/qr-payment/qr-payment.component.ts new file mode 100644 index 0000000..2e3dab7 --- /dev/null +++ b/src/app/_modules/admin/qr-payment/qr-payment.component.ts @@ -0,0 +1,189 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as QRCode from 'qrcode'; +import { PaymentInfoDto } from 'src/app/_dto/payment-info.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; + +@Component({ + selector: 'app-qr-payment', + templateUrl: './qr-payment.component.html', + styleUrls: ['./qr-payment.component.scss'] +}) +export class QrPaymentComponent implements OnInit { + + secuLevel: string; + + userId: string; + + tenderId: number; + + transactionData: PaymentInfoDto; + + amountReq: any; + + dialogRef: any; + + paymentStatus: any; + + paymentId: any; + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + private dialog: MatDialog, + private datePipe: DatePipe + ) { + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + qrImage: boolean = false; + + transId: any + + ngOnInit(): void { + + this.transactionData = new PaymentInfoDto() + + this.getData(); + } + + + // ngAfterViewInit(): void { + + // setTimeout(() => { + // }, 1000); + // } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.getTender, this.tenderId).then(res => { + this.amountReq = res.tenderFee; + this.generateUPIQRCode(environment.upiId, this.amountReq); + + }) + this.paymentCheck(); + + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + + if (res && res[0].status) { + if (res[0].status == 'P') { + this.paymentStatus = 'Pending' + } + if (res[0].status == 'D') { + this.paymentStatus = 'Declined' + } + if (res[0].status == 'S') { + this.paymentStatus = 'Success' + } + this.paymentId = res[0].id + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.paymentStatus = 'Payment Not Started' + this.transactionData.status = 'P' + } + }) + } + generateUPIQRCode(upiID: string, amount: string): void { + const upiLink = `upi://pay?pa=${upiID}&am=${amount}&tn=Tender%20Fee`; + + QRCode.toDataURL(upiLink, { errorCorrectionLevel: 'L' }, (err, qrDataURL) => { + if (err) { + console.error(err); + return; + } + // console.log('url==', qrDataURL); + + const qrImageElement = document.getElementById('qrImage') as HTMLImageElement; + qrImageElement.src = qrDataURL; + this.qrImage = true + + }); + } + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog() { + this.dialogRef.close() + } + + nextTab() { + // console.log("dtaa=",this.tenderData); + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + prevTab() { + // console.log("dtaa=",this.tenderData); + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + + preSave() { + + if (this.transactionData.transId == 0 || this.transactionData.transId == null || this.transactionData.transId == undefined) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterTransId"), 2000, true); + return false; + } + + + + return true; + } + + submit() { + if (!this.preSave()) + return + + this.transactionData.userId = this.userId; + this.transactionData.tenderId = this.tenderId; + // this.transactionData. + + + + if(this.paymentId){ + this.transactionData.id = this.paymentId + this._masterService.updateMasterData(apiUrl.paymentMaster, this.transactionData,this.paymentId).then(res=>{ + + this.transactionData = new PaymentInfoDto() + this.getData(); + + }) + } + else + this._masterService.saveMasterData(apiUrl.paymentInfo, this.transactionData).then(res => { + + this.transactionData = new PaymentInfoDto() + this.getData(); + }) + } +} diff --git a/src/app/_modules/admin/tender-category/tender-category.component.html b/src/app/_modules/admin/tender-category/tender-category.component.html new file mode 100644 index 0000000..65f9141 --- /dev/null +++ b/src/app/_modules/admin/tender-category/tender-category.component.html @@ -0,0 +1,203 @@ +
+ +
+
+ +
+
+ Category
+ +
+ +
+
+ + +
+ +
+ + + +
+ +
+
+ + +
+
+
+
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'Category' | translate }} + + + {{element?.tenderCategory}} + + + + + + {{ 'Status' | translate }} + + + Active + Inactive + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+ + + + +
Category
+ +
+ + Category + + +
+
+
+ + {{selectedCategory.active ? 'Active':'Inactive'}} + +
+
+
+ +
+
+ +
+
+ +
+
+ + + + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/admin/tender-category/tender-category.component.scss b/src/app/_modules/admin/tender-category/tender-category.component.scss new file mode 100644 index 0000000..5ad811b --- /dev/null +++ b/src/app/_modules/admin/tender-category/tender-category.component.scss @@ -0,0 +1,664 @@ + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + + :host ::ng-deep .mat-sort-header-container { + display: flex; + justify-content: center; +} + + + mat-table { + text-align: center !important; + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + text-align: center !important; + + } + + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + + .mat-header-cell { + flex-direction: column; + justify-content: center; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #079970; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #60d5a8; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #1bffbb; /* Accent color */ + cursor: pointer; + } + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + align-items: center; + } + .top-left-float{ + min-width: 89%; + + } + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .clearButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .clearButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 29vh; + height: 47px; + } + .clearButton{ + // margin: 5px; + // height: 40px; + margin-left: -105px !important; + margin-top: 4px; +} + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ffffff ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + } + + .main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; + } + + .categoryBtn{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + border: 1px solid orangered; + font-family: nucleo; + width: 11%; + + } + + .categoryBtn:hover{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: white; + background-color: orangered; + border: 1px solid orangered; + font-family: nucleo; + width: 11%; + + } + + .container-responsive{ + background-color: whitesmoke; + } + + .saveButton{ + margin: auto; + width: 75%; + background: #ffffff; + color: #0069ff; + border: 1px solid; + border-radius: 5px !important; + + } + + + .saveButton:hover{ + margin: auto; + width: 75%; + color: #ffffff; + background: #0069ff; + border: 1px solid; + border-radius: 5px !important; + + } + + .editCatBtn{ + width: 75%; + margin: auto; + border-radius: 5px !important; + margin-bottom: 5px; + color: #ff3131; + background-color: white; + border: 1px solid rgb(255, 70, 70); + font-family: nucleo; + } + + .editCatBtn:hover{ + width: 75%; + margin: auto; + border-radius: 5px !important; + margin-bottom: 5px; + color: #ffffff; + background-color: rgb(255, 70, 70); + border: 1px solid rgb(255, 255, 255); + font-family: nucleo; + } + + .editButton{ + margin: auto; + border-radius: 16px !important; + height: 35px !important; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + } \ No newline at end of file diff --git a/src/app/_modules/admin/tender-category/tender-category.component.spec.ts b/src/app/_modules/admin/tender-category/tender-category.component.spec.ts new file mode 100644 index 0000000..784b268 --- /dev/null +++ b/src/app/_modules/admin/tender-category/tender-category.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderCategoryComponent } from './tender-category.component'; + +describe('TenderCategoryComponent', () => { + let component: TenderCategoryComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderCategoryComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TenderCategoryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/tender-category/tender-category.component.ts b/src/app/_modules/admin/tender-category/tender-category.component.ts new file mode 100644 index 0000000..ecbe62e --- /dev/null +++ b/src/app/_modules/admin/tender-category/tender-category.component.ts @@ -0,0 +1,322 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { TenderCategoryDto } from 'src/app/_dto/category.dto'; +import { ThemePalette } from '@angular/material/core'; +@Component({ + selector: 'app-tender-category', + templateUrl: './tender-category.component.html', + styleUrls: ['./tender-category.component.scss'] +}) +export class TenderCategoryComponent implements OnInit { + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any = ['actions','slno','tenderCategory','status']; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + categoryData :TenderCategoryDto[]; + + selectedCategory:TenderCategoryDto; + + color: ThemePalette = 'primary'; + + isEdit: boolean = false; + + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + // console.log('=====level====',this.seculevel); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.categoryData = [] + this.getData(); + + } + + + + getData(){ + + this._masterService.getMasterData(apiUrl.tenderCategory).then((res) =>{ + this.categoryData = res; + this.dataCopy = res; + this.pageLength = this.categoryData.length; + this.dataSource = new MatTableDataSource(this.categoryData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.categoryData && this.categoryData.length == 0) ? true : false; + this.loading = false; + },err=>{ + console.error(err) + }) + + + + + } + + + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + getCategoryById(id){ + this._masterService.getMasterDatabyId(apiUrl.tenderCategory,id).then(res=>{ + this.selectedCategory = res + },err=>{ + console.log(err); + + }) + } + + editCategoryDialog(templateRef,id){ + this.selectedCategory = new TenderCategoryDto(); + this.isEdit = true; + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getCategoryById(id); + } + + openCategoryDialog(templateRef){ + this.isEdit = false; + this.selectedCategory = new TenderCategoryDto(); + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.selectedCategory.active = true + } + closeDialog(){ + this.dialogRef.close(); + } + + sortData(sort: Sort) { + const data = this.categoryData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'tenderCategory': + return compare(a.tenderCategory, b.tenderCategory, isAsc); + case 'status': + return compare(a.active, b.active, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.categoryData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.categoryData = this.categoryData.filter(res => { + let includedIntenderCategory = (res.tenderCategory) ? res.tenderCategory.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedIntenderCategory) + return true; + else + return false; + }); + this.noData = (this.categoryData && this.categoryData.length == 0) ? true : false; + this.pageLength = this.categoryData.length; + this.dataSource = new MatTableDataSource(this.categoryData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + + + goToDashboard(){ + this.navigateTo(`admin/dashboard`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + + saveCategory(){ + if(!this.selectedCategory.tenderCategory || this.selectedCategory.tenderCategory == ''){ + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return ; + } + this._masterService.saveMasterData(apiUrl.tenderCategory,this.selectedCategory).then(res=>{ + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + }) + + + + } + editCategory(){ + if(!this.selectedCategory.tenderCategory || this.selectedCategory.tenderCategory == ''){ + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return ; + } + this._masterService.updateMasterData(apiUrl.tenderCategory,this.selectedCategory,this.selectedCategory.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + this.isEdit = false; + },err=>{ + console.log(err); + + }) + } + + + deleteCategory(){ + this._masterService.deleteMasterData(apiUrl.tenderCategory,this.selectedCategory.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('deleteSuccess')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + },err=>{ + console.log(err); + + }) + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/admin/tender-home/tender-home.component.html b/src/app/_modules/admin/tender-home/tender-home.component.html new file mode 100644 index 0000000..d13567c --- /dev/null +++ b/src/app/_modules/admin/tender-home/tender-home.component.html @@ -0,0 +1,93 @@ +
+ + + + + + + + + +

+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
#TENDER NAMEVIEWUPLOAD
{{ i + 1 }}{{ tender.name }} + + + +
+
+
+
+
+
+


+ + + +
\ No newline at end of file diff --git a/src/app/_modules/admin/tender-home/tender-home.component.scss b/src/app/_modules/admin/tender-home/tender-home.component.scss new file mode 100644 index 0000000..55e3ab1 --- /dev/null +++ b/src/app/_modules/admin/tender-home/tender-home.component.scss @@ -0,0 +1,72 @@ +// .header { + // margin-left: 4%; + // margin-top: 20px; + // } + + // .header>h6{ + // a { + // text-decoration: none; + // color: #262627; + // } + + // a:hover { + // text-decoration: underline; + // cursor: pointer; + // } + // } + + // mat-card{ + // min-width: 180px ; + // // max-width: 20vw; + // height: 200px; + // display: inline-block; + // } + + // mat-card:hover{ + // cursor: pointer; + // } + + + // ----------------------------------------------------------------------------------- + + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + border: 1px solid #ccc; + white-space: nowrap; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } \ No newline at end of file diff --git a/src/app/_modules/admin/tender-home/tender-home.component.spec.ts b/src/app/_modules/admin/tender-home/tender-home.component.spec.ts new file mode 100644 index 0000000..2b846a2 --- /dev/null +++ b/src/app/_modules/admin/tender-home/tender-home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderHomeComponent } from './tender-home.component'; + +describe('TenderHomeComponent', () => { + let component: TenderHomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderHomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenderHomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/tender-home/tender-home.component.ts b/src/app/_modules/admin/tender-home/tender-home.component.ts new file mode 100644 index 0000000..8de17c2 --- /dev/null +++ b/src/app/_modules/admin/tender-home/tender-home.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-tender-home', + templateUrl: './tender-home.component.html', + styleUrls: ['./tender-home.component.scss'] +}) +export class TenderHomeComponent implements OnInit { + + + + displayedColumns: string[] = ['no', 'name','download']; + data:any[] = [ + { no:1,name:'Tender 1', city: 'New York' }, + { no:2 , name:'Tender 2', city: 'London' }, + { no:3 , name:'Tender 3', city: 'Paris' }, + + ]; + constructor( private authenticationService: AuthService, + private router: Router,) { } + + ngOnInit(): void { + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView() { + this.router.navigate(['/tender-view']); + } + + goToUpload(){ + this.router.navigate(['/tender-upload']); + } + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + +} + diff --git a/src/app/_modules/admin/user-approval/user-approval.component.html b/src/app/_modules/admin/user-approval/user-approval.component.html new file mode 100644 index 0000000..28b162c --- /dev/null +++ b/src/app/_modules/admin/user-approval/user-approval.component.html @@ -0,0 +1,98 @@ + + +
+
+
+ +
+
+
Approve User
+
+
+ +
+
+
+ +
+
Requested Date
+
User
+
Mobile No.
+
Email
+
Max Amount
+
company profile
+
certificate
+
Approve / Reject
+ + +
+
+ +
+ +
+ {{element?.createdDate | date:'dd-MM-yyyy'}} +
+
+ {{element?.userName}} +
+
+ {{element?.mobileNumber}} +
+
+ {{element?.email}} +
+
+ {{element?.maxAmount}} +
+
+ +
+
+ +
+
+ + + +
+
+ +
+ +
+

No New Requests available.

+
+ + +
+
+
+
--> + + + + \ No newline at end of file diff --git a/src/app/_modules/admin/user-approval/user-approval.component.scss b/src/app/_modules/admin/user-approval/user-approval.component.scss new file mode 100644 index 0000000..128910f --- /dev/null +++ b/src/app/_modules/admin/user-approval/user-approval.component.scss @@ -0,0 +1,122 @@ +.heading{ + text-align: center;font-size: xx-large; font-family: nucleo; font-weight: 600; +} + +mat-label, mat-option, input::placeholder, input { + font-family: nucleo; +} + + +.status-button-accepted { + background-color: #64B200; + border-color: #64B200; + color: white; + padding: 5px 10px; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: nucleo; + min-height: 4vh; + min-width: 52%; + font-size: small; +} + +.button-Reject{ + background-color: #ff0000; + border-color: #e08d21; + color: white; + padding: 5px 10px; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: nucleo; + min-height: 4vh; + margin-left: 10px; + min-width: 45%; + font-size: small; +} + + +.userHeading{ + font-family: 'texg'; + color: #606060; + top: 6px; + position: relative; + font-size: small; +} +.subHead { + font-family: texg; + color: #353535; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; + min-width: 350px; + overflow: scroll; +} + +.main-card::-webkit-scrollbar { + width: 0; /* This will make the scrollbar invisible */ +} + +.container-responsive{ + background-color: whitesmoke; +} + +.headerCard{ + min-width: 100vh; background: #a6a6a6;color:black; + +} + \ No newline at end of file diff --git a/src/app/_modules/admin/user-approval/user-approval.component.ts b/src/app/_modules/admin/user-approval/user-approval.component.ts new file mode 100644 index 0000000..b4f6f33 --- /dev/null +++ b/src/app/_modules/admin/user-approval/user-approval.component.ts @@ -0,0 +1,123 @@ +import { DatePipe } from '@angular/common'; +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-user-approval', + templateUrl: './user-approval.component.html', + styleUrls: ['./user-approval.component.scss'] +}) +export class UserApprovalComponent { + + UserData: any; + + loading:boolean=false + + + constructor( + // private _menuService: MenuService, + private router: Router, + private _ui: UiService, + // private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + // private dialog: MatDialog + ) { + + } + + ngOnInit() { + this.getData(); + + + } + + getData(){ + this.loading=true; + this._masterService.getMasterData(apiUrl.statusVerify).then((res) =>{ + + this.UserData = res + this.loading=false; + + + }) + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToDashboard(){ + this.navigateTo(`admin/dashboard`) + } + + + ApproveUser(user){ + + let body = { + userId :user.userId, + status : 'A', + } + this.loading=true; + + this._masterService.saveMasterData(apiUrl.reqUser,body).then((res) =>{ + + this.loading=false; + + this._ui.toastMessage(this.errorService.translate(res.msg)); + this.getData() + + + }) + + } + RejectUser(user){ + + let body = { + userId :user.userId, + status : 'R', + } + + this.loading=true; + + this._masterService.saveMasterData(apiUrl.reqUser,body).then((res) =>{ + + this.loading=false; + + this._ui.toastMessage(this.errorService.translate(res.msg)); + this.getData() + }) + + + } + + downloadCmpProfile(cpFileName){ + this.loading=true; + + this._masterService.downloadFileWithAuth(apiUrl.cmpPrFileUpload,cpFileName).then(res=>{ + this.loading=false; + + + + }) + } + + downloadProjectCert(prCertFilename){ + this.loading=true; + + this._masterService.downloadFileWithAuth(apiUrl.projectCompleteCertFile,prCertFilename).then(res=>{ + this.loading=false; + + }) + + } +} diff --git a/src/app/_modules/admin/user-management/user-management.component.html b/src/app/_modules/admin/user-management/user-management.component.html new file mode 100644 index 0000000..273a4b7 --- /dev/null +++ b/src/app/_modules/admin/user-management/user-management.component.html @@ -0,0 +1,343 @@ +
+ +
+
+ +
+
+ User Management
+ +
+ +
+ +
+ + +
+ +
+ + + +
+ +
+
+ + +
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ + + +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'userName' | translate }} + + + {{element?.userName}} + + + + + + {{ 'email' | translate }} + + + {{element?.email}} + + + + + + {{ 'Roles' | translate }} + + + {{element?.secuLevel}} + + + + + {{ 'category' | translate }} + + + + remove_red_eye + + + + + + + {{ 'Max Bid Amount' | translate }} + + + {{element?.maxAmount}} + + + + + + {{ 'Status' | translate }} + + + Active + Inactive + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + +
+ + + + + + +
User management
+
+
+ + User Name + + +
+ +
+ + Email + + +
+ +
+ + Mobile Number + + +
+ + +
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+ + {{selectedUser.active ? 'Active':'Inactive'}} + +
+
+
+
+ +
+ + {{selectedUser.employee ? 'Employee':'User'}} + +
+
+
+
+
+
+ +
+
+ +
+
+ + + + +
+
+ + +
+ + + +
close
+
+
+
+ +
+
+

+ + {{i+1}}.{{cat.category}} + +

+
+

+ ▶  {{subCat.subCategory}}

+
+
+ +
+
+ +
+
+ +
+
+ No Category selected +
+
+ +
+
+
+
\ No newline at end of file diff --git a/src/app/_modules/admin/user-management/user-management.component.scss b/src/app/_modules/admin/user-management/user-management.component.scss new file mode 100644 index 0000000..f2e6252 --- /dev/null +++ b/src/app/_modules/admin/user-management/user-management.component.scss @@ -0,0 +1,565 @@ + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + + :host ::ng-deep .mat-sort-header-container { + display: flex; + justify-content: center; +} + + + mat-table { + text-align: center !important; + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + text-align: center !important; + + } + + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + + .mat-header-cell { + flex-direction: column; + justify-content: center; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; + } + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + // .mat-form-field-infix { + // // border-bottom: 1px solid white; + // } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + + + } + + + + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + + + + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + .editButton{ + margin: auto; + border-radius: 16px !important; + height: 35px !important; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + margin-left: 22px; + } + + .container-responsive{ + background-color: whitesmoke; + } + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + +.downloadBtnPC{ + width:100%; + border-radius: 23px; + color:black; + font-size: small; +} \ No newline at end of file diff --git a/src/app/_modules/admin/user-management/user-management.component.spec.ts b/src/app/_modules/admin/user-management/user-management.component.spec.ts new file mode 100644 index 0000000..c53ae59 --- /dev/null +++ b/src/app/_modules/admin/user-management/user-management.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UserManagementComponent } from './user-management.component'; + +describe('UserManagementComponent', () => { + let component: UserManagementComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UserManagementComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(UserManagementComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/admin/user-management/user-management.component.ts b/src/app/_modules/admin/user-management/user-management.component.ts new file mode 100644 index 0000000..48d7177 --- /dev/null +++ b/src/app/_modules/admin/user-management/user-management.component.ts @@ -0,0 +1,412 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { UserDto } from 'src/app/_dto/user.dto'; +import { ThemePalette } from '@angular/material/core'; +@Component({ + selector: 'app-user-management', + templateUrl: './user-management.component.html', + styleUrls: ['./user-management.component.scss'] +}) +export class UserManagementComponent implements OnInit { + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns: any = ['actions', 'slno', 'userName', 'email','category','maxAmount','active']; + + dataCopy: any; + + pageLength: any; + + searchTerm: any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + userData: UserDto[]; + + selectedUser: UserDto; + + color: ThemePalette = 'primary'; + + isEdit: boolean = false; + tenderSubCategory: any[]; + spinnerLoading: boolean; + PrCompSpinnerLoading: boolean; + + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService: ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + // console.log('=====level====',this.seculevel); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.userData = [] + this.getData(); + + + } + + + + + getData() { + + this._masterService.getMasterData(apiUrl.userData).then((res) => { + this.userData = res; + this.dataCopy = res; + this.pageLength = this.userData.length; + this.dataSource = new MatTableDataSource(this.userData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.userData && this.userData.length == 0) ? true : false; + this.loading = false; + }, err => { + console.error(err) + }) + + + + + } + + + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + getUserById(id) { + this._masterService.getMasterDatabyId(apiUrl.userData, id).then(res => { + this.selectedUser = res + }, err => { + console.log(err); + + }) + } + + editUserDialog(templateRef, id) { + this.selectedUser = new UserDto(); + this.isEdit = true; + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false, + maxHeight:'500px' + }); + this.getUserById(id); + } + + openCategoryDialog(templateRef) { + this.isEdit = false; + this.selectedUser = new UserDto(); + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.selectedUser.active = true + } + closeDialog() { + this.dialogRef.close(); + } + + + viewCategory(templateRef,element){ + this.tenderSubCategory =[] + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false, + // maxHeight:'400px' + }); + + + + + this.tenderSubCategory = []; // Assuming this is where you want to store the results + + element.userSubcategoryMaster.forEach(element => { + let subCategory = element.tenderSubCategoryD.tenderSubCategory; + + if (element.tenderSubCategoryD.tenderCategory === element.categoryD.id) { + let category = element.categoryD.tenderCategory; + + + let existingCategory = this.tenderSubCategory.find(item => item.category === category); + + if (!existingCategory) { + let categoryBody = { + category: category, + subCategory: [{ subCategory: subCategory }] + }; + this.tenderSubCategory.push(categoryBody); + } else { + + existingCategory.subCategory.push({ subCategory: subCategory }); + } + } + }); + + + + } + + sortData(sort: Sort) { + const data = this.userData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'userName': + return compare(a.userName, b.userName, isAsc); + case 'email': + return compare(a.email, b.email, isAsc); + case 'secuLevel': + return compare(a.secuLevel, b.secuLevel, isAsc); + case 'active': + return compare(a.active, b.active, isAsc); + default: + return 0; + } + }); + } + + search() { + this.userData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.userData = this.userData.filter(res => { + let includedInUserName = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInSecuLevel = (res.secuLevel) ? res.secuLevel.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + + let includedInCategory = res.userSubcategoryMaster && res.userSubcategoryMaster.some(cat => { + return cat.categoryD && cat.categoryD.tenderCategory && cat.categoryD.tenderCategory.toLowerCase().includes(this.searchTerm.toLowerCase()); + }); + + let includedInSubCategory = res.userSubcategoryMaster && res.userSubcategoryMaster.some(cat => { + return cat.tenderSubCategoryD && cat.tenderSubCategoryD.tenderSubCategory && cat.tenderSubCategoryD.tenderSubCategory.toLowerCase().includes(this.searchTerm.toLowerCase()); + }); + + + + if (includedInUserName || includedInEmail || includedInSecuLevel || includedInCategory || includedInSubCategory ) + return true; + else + return false; + }); + this.noData = (this.userData && this.userData.length == 0) ? true : false; + this.pageLength = this.userData.length; + this.dataSource = new MatTableDataSource(this.userData); + this.loading = false; + } + + reset() { + this.searchTerm = ""; + this.getData(); + } + + + downloadProjCompFile(docName){ + this.PrCompSpinnerLoading =true; + + this._masterService.downloadFileWithAuth(apiUrl.projectCompleteCertFile,docName).then(res=>{ + + + this.PrCompSpinnerLoading =false; + + },err=>{ + this._ui.toastMessage('File not found') + + this.PrCompSpinnerLoading =false; + + }) + } + + downloadCompPrFile(docName){ + this.spinnerLoading =true; + this._masterService.downloadFileWithAuth(apiUrl.cmpPrFileUpload,docName).then(res=>{ + + + this.spinnerLoading =false; + + },err=>{ + this._ui.toastMessage('File not found') + this.spinnerLoading =false; + + }) + } + + goToDashboard() { + this.navigateTo(`admin/dashboard`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length > 0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn() { + this.router.navigate(['/login']); + } + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + + saveUser() { + if (!this.selectedUser.category || this.selectedUser.category == '') { + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return; + } + this._masterService.saveMasterData(apiUrl.userData, this.selectedUser).then(res => { + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + }) + + + + } + editUser() { + + this._masterService.updateMasterData(apiUrl.userData, this.selectedUser, this.selectedUser.userId).then(res => { + this._ui.toastMessage(this.errorService.translate('updateSuccess')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + this.isEdit = false; + }, err => { + console.log(err); + + }) + } + + + deleteUser() { + this._masterService.deleteMasterData(apiUrl.userData, this.selectedUser.userId).then(res => { + this._ui.toastMessage(this.errorService.translate('deleteSuccess')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + }, err => { + console.log(err); + + }) + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/analyst/add-tenders/add-tenders.component.html b/src/app/_modules/analyst/add-tenders/add-tenders.component.html new file mode 100644 index 0000000..f0e7f17 --- /dev/null +++ b/src/app/_modules/analyst/add-tenders/add-tenders.component.html @@ -0,0 +1,1181 @@ +
+ + +
+
+

Tender Details

+
+ +
+
+
+
+ + + +

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

+
+
+ + +
+
+
+ + + +

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

+
+
+ + +
+
+
+ +

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

+
+
+ + +
+
+
+ + +

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+ + +
+ + + + +
+ + + + Sub Category + + All + category + + {{subCategory.tenderSubCategory}} + + + + +
+ + + +
+ + +
+ + +
+
+ + + +
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + +
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + + + +
+ +
+

+
+
+ + +
+
+
+ +

+
+
+
+ +
+ + + Published Date + + + + +
+
+ + + Document Download / Sale Start Date + + + +
+ +
+
+ + +
+ + + Document Download / Sale End Date + + + +
+
+ + + Bid Submission Start Date + + + + + + +
+ +
+ + + + + + + +
+ +
+ + + Bid Submission End Date + + + +
+ +
+ + + + Bid Opening Date + + + + +
+
+ +
+

+
+
+ + +
+
+
+ + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Required Documents
Required + Document typeDescription + Document + Format
+
+ + + Document Type + + Select Document Type + + + {{coverType.coverType}} + + + + +
+
+
+ + +
+
+ + Document Type + + Select Document + Type + + {{fileFormat.fileFormat}} + + + + + +
+ +
+
+
+
+
+
+ + +
+
+
+ + +

+
+ +
+
+
+
+ +
+
+ + search + + + + + +
+
+
+
+ +
+ +
Name
+
Mobile No. +
+
Email
+ + + +
+
+
+
+ +
+ +
+ +
+ +
+ {{element?.userName}} +
+
+ {{element?.mobileNumber}} +
+
+ {{element?.email}} +
+ + +
+ +
+
+
+ +
+

No users available.

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

+
+
+ + +
+
+
+ +

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

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

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Notice + +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{nitDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+ Work Item Documents +
+ Upload FilesDocument TypeDescription
+
+ + + + {{workItemDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ + +    + +
+ Drawing Document + +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{drawingsDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+
+
+ + + + + +
+
+
+ + +
+
+ +
+ + + + + +
+ +
+
+
+ + + + + + + + +

+ + + + + + +
\ No newline at end of file diff --git a/src/app/_modules/analyst/add-tenders/add-tenders.component.scss b/src/app/_modules/analyst/add-tenders/add-tenders.component.scss new file mode 100644 index 0000000..dbf00b0 --- /dev/null +++ b/src/app/_modules/analyst/add-tenders/add-tenders.component.scss @@ -0,0 +1,144 @@ +// .container-responsive { + // min-height: 100vh; + // position: relative; + // } + + // #footer { + // background-color: #3a8379; + // padding: 20px; + // color: #ffffff; + // position: absolute; + // bottom: 0; + // width: 100%; + // } + .nav-link:hover { + color: rgb(255, 0, 0); + + + } + + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: 120px; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: small; + background-color: #f0f0f0; + font-family: nucleo; + + } + + .green-snackbar { + background-color: green; + color: white; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #16e2e2; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #04fcfc; /* Accent color */ + cursor: pointer; + } + + .element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ + } + + .tenderHeading{ + font-family: texg; + //color: #353535; + } + + + label + { + font-family: texg; + color: #262627; + +} +input{ + overflow-wrap: inherit; + font-family: nucleo; +} +.form-control{ +font-family: nucleo; +} +// .input-style{ +// font-family: nucleo; +// } + + + +.Buttons { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: white; +color: #424242; +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +th,td{ +font-family: nucleo; +} + +.Buttons:hover { +background-color: #ececec; +color: #46AC9E; +} + +.ButtonSubmit { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: #ececec; +color: #46AC9E; + +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.ButtonSubmit:hover { +background-color: #46AC9E; +color: #ececec; +} + +.card-body{ +min-height: 360px; +@media (max-width: 767px) { + .card-body{ + max-height: 500px; + min-height: 500px; + overflow-y: scroll; + min-width: 500px; +} +} +} + +.sub-div{ +@media (max-width: 767px) { + .sub-div{ + min-width: 672px; + + } +} +} \ No newline at end of file diff --git a/src/app/_modules/analyst/add-tenders/add-tenders.component.spec.ts b/src/app/_modules/analyst/add-tenders/add-tenders.component.spec.ts new file mode 100644 index 0000000..d0b9954 --- /dev/null +++ b/src/app/_modules/analyst/add-tenders/add-tenders.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddTendersComponent } from './add-tenders.component'; + +describe('AddTendersComponent', () => { + let component: AddTendersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddTendersComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddTendersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/add-tenders/add-tenders.component.ts b/src/app/_modules/analyst/add-tenders/add-tenders.component.ts new file mode 100644 index 0000000..be5da1c --- /dev/null +++ b/src/app/_modules/analyst/add-tenders/add-tenders.component.ts @@ -0,0 +1,1307 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { MatOption } from '@angular/material/core'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TenderCoversDto } from 'src/app/_dto/tender-covers.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2'; +import { FormBuilder, FormGroup, FormControl } from '@angular/forms'; +import { tenderSubcategoryMasterDto } from 'src/app/_dto/tenderSubcategoryMaster.dto'; +import { closedTenderUsersDto } from 'src/app/_dto/closedTenderUsers.dto'; +import { log } from 'console'; + +@Component({ + selector: 'app-add-tenders', + templateUrl: './add-tenders.component.html', + styleUrls: ['./add-tenders.component.scss'] +}) +export class AddTendersComponent implements OnInit { + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + @ViewChild('allSelection') private allSelection: MatOption; + + @ViewChild('allUser') private allUser: MatOption; + + + tenderData: TenderDetailDto + subCategoryData: tenderSubcategoryMasterDto[]; + tenderTypeLov: any; + TenderCategoryLov: any; + PaymentModeLov: any[]; + formcontractLov: any; + productcategoryLov: any; + AllTenderData: TenderDetailDto; + emdFeeTypeLov: any; + seculevel: any; + documentTypeLov: any; + isNITDocUploaded: boolean = false; + isWIDocUploaded: boolean = false; + toggleValue: boolean = true; + + nitDocuments: TenderDocumentDto[]; + workItemDocuments: TenderDocumentDto[]; + drawingsDocuments: TenderDocumentDto[]; + coverDocs: TenderCoversDto[]; + selectedFiles: any; + tenderID: number; + filteredDocumentTypeLov: any; + filteredDocumentDrawingTypeLov: any; + filteredDocumentNITTypeLov: any; + coverslov: any; + fileformatlov: any; + addnoticeROW: boolean = true + addDrwROW: boolean = true + allCheck: boolean = false; + showMessage: boolean = false; + newDRWROW: boolean = false; + newCvrROW: boolean = false; + id: number; + disableUploadButton: boolean; + userID: string; + isFileNameDuplicate: boolean; + value: any; + subcategoryLov: any; + subcategoryform: UntypedFormGroup; + userform: UntypedFormGroup; + userLov: any; + closedtenderData: closedTenderUsersDto; + selectedUsers: any[]; + selectAllChecked: boolean = false; + + selectUserTabView: boolean = false; + categoryEdit: boolean = false; + data: any; + noData: boolean = true; + searchTerm: string = ''; + filter: string; + pageLength: number; + userDataCopy: any; + savedSubcategories: any[]; + currentDate: Date; + date: Date; + emdDisable: boolean; + paymentModeOnline: boolean = false; + + constructor(private router: Router, + private _masterService: MasterService, + private _ui: UiService, + private route: ActivatedRoute, + private errorTranslateService: ErrorTranslateService, + private datePipe: DatePipe, + private fb: FormBuilder, + private snackBar: MatSnackBar) { + + this.seculevel = localStorage.getItem('seculevel') + this.userID = localStorage.getItem('userId') + this.tenderData = new TenderDetailDto(); + this.closedtenderData = new closedTenderUsersDto(); + this.tenderID = +this.route.snapshot.paramMap.get('id'); + this.getData() + + } + + ngOnInit(): void { + // this.addnoticeROW= true; + + + this.subcategoryform = this.fb.group({ + subCategory: new UntypedFormControl(''), + + }); + + this.userform = this.fb.group({ + users: new UntypedFormControl(''), + }); + // this.addDrwROW = true; + this.nitDocuments = []; + this.workItemDocuments = []; + this.drawingsDocuments = []; + this.coverDocs = []; + this.subCategoryData = []; + this.selectedUsers = []; + + // if(this.tenderID){ + + // this._masterService.getMasterDatabyId(apiUrl.AllTenderData,this.tenderID).then((res) =>{ + // this.tenderData = res + // if(this.tenderData.productCategory) { + // this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${this.tenderData.productCategory}`).then((res) =>{ + // this.subcategoryLov = res + // }) + + // if(this.tenderData.tenderType==7 ){ + + // this.selectUserTabView=true + + // }else{ + // this.selectUserTabView=false; + + // } + + // // let newDate =new Date(); + + // // if(this.tenderData.publishDate < newDate){ + // // this.categoryEdit=true; + + // // }else{ + // // this.categoryEdit=false; + + + // // } + + // if(!this.tenderData.id){ + // this.categoryEdit=false; + + // }else{ + // this.categoryEdit=true; + + // } + // } + + // this.tenderData.publishDate = this.convertDateFormat(res.publishDate) ; + // this.tenderData.saleStartDate = this.convertDateFormat(res.saleStartDate); + // this.tenderData.clarificationStartDate = this.convertDateFormat(res.clarificationStartDate); + // this.tenderData.saleEndDate = this.convertDateFormat(res.saleEndDate); + // this.tenderData.clarificationEndDate = this.convertDateFormat(res.clarificationEndDate); + // this.tenderData.bidSubStartDate = this.convertDateFormat(res.bidSubStartDate); + // this.tenderData.bidSubEndDate = this.convertDateFormat(res.bidSubEndDate); + // this.tenderData.bidOpenDate = this.convertDateFormat(res.bidOpenDate); + // this.tenderData.preBidDate = this.convertDateFormat(res.preBidDate); + // // this.subcategoryform.controls.subCategory.patchValue([res.subCategoryMaster.subCategoryId, 0]); + + + // if(this.selectUserTabView && this.tenderData.closedTenderUsers && this.tenderData.closedTenderUsers.length>0) + // for(let users of this.tenderData.closedTenderUsers){ + // this.userLov.forEach(element => { + // if(users.userId == element.userId){ + // element.selected = true; + // let temp = {} + // temp = {tenderId:this.tenderID,userId:element.userId} + // this.selectedUsers.push(temp); + // } + // }); + // } + // const subCategoryIds = res.subCategoryMaster.map(item => item.id); + // this.subcategoryform.controls.subCategory.patchValue([...subCategoryIds, 0]); + + + + // this.coverDocs = JSON.parse(JSON.stringify(this.tenderData.covers)); + // this.newCvrROW =true + // this.newDRWROW =true + + // this.drawingsDocuments = this.tenderData.tenderDoc.filter(element=> element.documentCategory == 'D'); + // for(let i=0;i element.documentCategory == 'NIT'); + // for(let i=0;i element.documentCategory == 'WID'); + // for(let i=0;i 0){ + // // this.disableUploadButton = false + // // }else{ + // // this.disableUploadButton = true + // // } + // }) + + // } + + + + } + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + + addNoticeToggle(event) { + this.addnoticeROW = !event.checked; + + } + + addDrawingToggle(event) { + this.addDrwROW = !event.checked; + + } + + + tenderTypeChange() { + + if (this.tenderData.tenderType == 7) { + this.selectUserTabView = true; + + } else { + this.selectUserTabView = false; + + } + + + } + + getData() { + + this._masterService.getMasterData(apiUrl.TenderType).then((res) => { + this.tenderTypeLov = res; + + if (this.tenderData.tenderType == 7) { + + this.selectUserTabView = true + + } else { + this.selectUserTabView = false; + + } + + }) + this._masterService.getMasterData(apiUrl.emdFeeType).then((res) => { + this.emdFeeTypeLov = res + + + }) + + + this._masterService.getMasterData(apiUrl.documentType).then((res) => { + this.documentTypeLov = res + + this.filteredDocumentDrawingTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'D'); + this.filteredDocumentNITTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'N'); + + this.filteredDocumentTypeLov = this.documentTypeLov.filter(docType => docType.docCategory == 'WID'); + + }) + + this._masterService.getMasterData(apiUrl.basicCategory).then((res) => { + this.TenderCategoryLov = res + + }) + this._masterService.getMasterData(apiUrl.PaymentMode).then((res) => { + this.PaymentModeLov = res + + }) + + this._masterService.getMasterData(apiUrl.formcontract).then((res) => { + this.formcontractLov = res + + }) + this._masterService.getMasterData(apiUrl.category).then((res) => { + this.productcategoryLov = res + + }) + + this._masterService.getMasterData(apiUrl.coverslov).then((res) => { + this.coverslov = res + + }) + this._masterService.getMasterData(apiUrl.fileformatlov).then((res) => { + this.fileformatlov = res + + }) + + + } + + paymentModeChange(paymentModeId) { + let paymentMode; + + this.PaymentModeLov.forEach(element => { + if (element.id == paymentModeId) { + paymentMode = element.paymentMode; + } + }); + + + if (paymentMode == 'Online') { + this.paymentModeOnline = true; + } + else { + this.paymentModeOnline = false; + + } + } + + + emdFeeApplicableChange(emdfeeeApplicable) { + + if (emdfeeeApplicable) { + + this.emdDisable = false; + } + else if (emdfeeeApplicable == false) { + this.emdDisable = true; + this.tenderData.emdAmt = null; + this.tenderData.emdFeeType = null; + this.tenderData.emdPayableTo = null; + this.tenderData.allowEmdBgOrSt = null; + + } + + } + + + + productCategoryChange(value) { + + this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${value}`).then((res) => { + this.subcategoryLov = res + + }) + + // this._masterService.getMasterDatabyId(apiUrl.users, value).then((res) => { + // this.userLov = res; + // this.userDataCopy = res; + + // this.userLov.forEach(element => { + // element.selected = false; + // }); + + + // }) + } + + + + + addNewNitDocRow() { + if (this.addnoticeROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableNoticeDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'NIT' + newRow.crud = 'I' + newRow.userId = this.userID + this.nitDocuments.push(newRow); + } + } + + addNewDrawingRow() { + if (this.addDrwROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableDrawingDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'D' + newRow.crud = 'I' + newRow.userId = this.userID + this.drawingsDocuments.push(newRow); + + } + + + } + + addNewWorkItemDocRow() { + + // const lastRow = this.tenderData.tenderDocs[this.tenderData.tenderDocs.length - 1]; + const lastRow = new TenderDocumentDto(); + const newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'WID' + newRow.crud = 'I' + newRow.userId = this.userID + this.workItemDocuments.push(newRow); + this.newDRWROW = true + + } + + + addNewcoverDocRow() { + + const lastRow = new TenderCoversDto(); + const newRow = Object.assign({}, lastRow); + // newRow.documentCategory = 'C' + newRow.crud = 'I' + this.coverDocs.push(newRow); + this.newCvrROW = true + } + + + + + UploadFiles(event, i, type) { + + if (this.workItemDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + + + if (file && this.id) + this._masterService.postMasterData(apiUrl.docUpload, fd, this.id).then((res) => { + + + + if (type == 'WID') { + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // else{ + + this.workItemDocuments[i].docName = res.fileName + this.workItemDocuments[i].file = res.fileName + this.workItemDocuments[i].documentSize = res.fileSizeKB; + } + }) + } + + + } + // UploadNoticeFiles(event,i,type){ + + // if(this.nitDocuments[i].file){ + // this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false); + // }else{ + + // for (let j = 0; j < this.nitDocuments.length; j++) { + + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + + // if (this.nitDocuments[j].docName === file.name) { + + // this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"),4000,false); + // file.name = ""; + // } + // if(file && this.id){ + // this._masterService.postMasterData(apiUrl.nitUploadDoc,fd,this.id).then((res)=>{ + + + // if(type == 'NIT'){ + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // })} + + // } + // } + // } + + UploadNoticeFiles(event: any, i: number, type: string) { + if (this.nitDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + return; + } + + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const isFileNameDuplicate = this.nitDocuments.some((doc) => doc.docName === file!.name); + if (isFileNameDuplicate) { + this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"), 4000, false); + return; + } + + const fd = new FormData(); + fd.append('file', file, file.name); + if (file && this.id) { + this._masterService.postMasterData(apiUrl.nitUploadDoc, fd, this.id) + .then((res) => { + if (type == 'NIT') { + this.nitDocuments[i].docName = res.fileName + this.nitDocuments[i].file = res.fileName + this.nitDocuments[i].documentSize = res.fileSizeKB; + } + + }) + .catch((error) => { + + }); + } + } + + + UploadDrawingFiles(event, i) { + + if (this.drawingsDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + if (file && this.id) + this._masterService.postMasterData(apiUrl.drawingUploadDoc, fd, this.id).then((res) => { + + this.drawingsDocuments[i].docName = res.fileName + this.drawingsDocuments[i].file = res.fileName; + this.drawingsDocuments[i].documentSize = res.fileSizeKB; + + }) + } + + } + + + deleteDrawingsRow(id, index: number) { + + this._masterService.deleteMasterData(apiUrl.drawingsDelete, `${this.id}/${this.drawingsDocuments[index].docName}`) + + let removeRow = Object.assign({}, (this.drawingsDocuments).splice(index, 1)[0]); + // this.nitDocuments.push(removeRow); + + } + deleteNITRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.noticeDelete, `${this.id}/${this.nitDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.nitDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + deleteWIDRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.widDelete, `${this.id}/${this.workItemDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.workItemDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + + deleteCoverRow(id, index: number) { + + let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]); + // removeRow.crud = 'D'; + this.tenderData.covers[index].crud = 'D'; + + + } + + // UploadCoverFiles(event,i){ + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + // if(file && this.tenderData.tenderId){ + // coverDocs + // } + + // } + + + readUrl(event: any) { + + // if (event.target.files && event.target.files[0]) { + + // if (event.target.files[0].type === 'image/jpeg' || + // event.target.files[0].type === 'image/png' || + // event.target.files[0].type === 'image/jpg') { + // if (event.target.files[0].size < 200 * 200) {/* Checking height * width*/ } + // if (event.target.files[0].size < 1000000) { + + + // } + // } + // } + } + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + + BasicDetails() { + + if (this.tenderData.tenderCategory == null || this.tenderData.tenderCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderCategoryCantBeBlank"), 2000, true); + } + // if (this.tenderData.tenderType == null || this.tenderData.tenderType == undefined) { + // this._ui.toastMessage(this.errorTranslateService.translate("tenderTypeCantBeBlank"), 2000, true); + // } + else this.nextTab() + + } + + TenderFeeDetails() { + if (this.paymentModeOnline) { + if (this.tenderData.tenderFee == null || this.tenderData.tenderFee == undefined || this.tenderData.tenderFee < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeInCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableTo =='' || this.tenderData.feePayableTo == null || this.tenderData.feePayableTo == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableToCantBeBlank"),2000,true); + // } + else if (this.tenderData.tenderFeeExemption == null || this.tenderData.tenderFeeExemption == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeExemptionAllowedCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableAt =='' || this.tenderData.feePayableAt == null || this.tenderData.feePayableAt == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableAtCantBeBlank"),2000,true); + // } + else this.nextTab() + } + } + + + EMDFeeDetails() { + + if (this.tenderData.emdFeeApplied == null || this.tenderData.emdFeeApplied == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdApplicableCantBeBlank"), 2000, true); + } + + else if (this.tenderData.emdFeeApplied) { + + if (this.tenderData.emdAmt == null || this.tenderData.emdAmt == undefined || this.tenderData.emdAmt < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("emdAmountCantBeBlank"), 2000, true); + } + else if (this.tenderData.emdFeeType == '' || this.tenderData.emdFeeType == null || this.tenderData.emdFeeType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdFeeTypeCantBeBlank"), 2000, true); + } + + else if (this.tenderData.allowEmdBgOrSt == '' || this.tenderData.allowEmdBgOrSt == null || this.tenderData.allowEmdBgOrSt == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("selectEmdThrough"), 2000, true); + } + else this.nextTab() + + } + + else this.nextTab() + + } + + + WorkItemDetails() { + + if (!this.tenderID && this.subcategoryform.controls.subCategory.value != '' || this.subcategoryform.controls.subCategory.value != null || this.subcategoryform.controls.subCategory.value != undefined) { + + let value = this.subcategoryform.controls.subCategory.value; + + + let body = value.map(num => num.toString()).join(','); + + + this._masterService.getMasterData(`${apiUrl.users}?where[subCategory]=${body}`).then((res) => { + this.userLov = res; + this.userDataCopy = res; + + this.userLov.forEach(element => { + element.selected = false; + }); + + + }) + + } + + if (this.tenderData.title == '' || this.tenderData.title == null || this.tenderData.title == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("titleCantBeBlank"), 2000, true); + } + else if (this.tenderData.workDesc == '' || this.tenderData.workDesc == null || this.tenderData.workDesc == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("workDescriptionCantBeBlank"), 2000, true); + } + + // else if( this.tenderData.tenderValue == null || this.tenderData.tenderValue == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("tenderValueCantBeBlank"),2000,true); + // } + else if (this.tenderData.productCategory == null || this.tenderData.productCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("categorycantBeBlank"), 2000, true); + } + else if (!this.tenderID && this.subcategoryform.controls.subCategory.value == '' || this.subcategoryform.controls.subCategory.value == null || this.subcategoryform.controls.subCategory.value == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("subCategoryCantBeBlank"), 2000, true); + } + else if (this.tenderData.ndaPreQualification == '' || this.tenderData.ndaPreQualification == null || this.tenderData.ndaPreQualification == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("preQualificationCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidValidity == null || this.tenderData.bidValidity == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidValidityCantBeBlank"), 2000, true); + } + + else if (this.tenderData.periodOfWork == null || this.tenderData.periodOfWork == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("periodOfWorkCantBeBlank"), 2000, true); + } + else if (this.tenderData.location == '' || this.tenderData.location == null || this.tenderData.location == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("locationCantBeBlank"), 2000, true); + } + // else if( this.tenderData.pincode == null || this.tenderData.pincode == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("pincodeCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpeningPlace =='' || this.tenderData.bidOpeningPlace == null || this.tenderData.bidOpeningPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningPlaceCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpenAddress =='' || this.tenderData.bidOpenAddress == null || this.tenderData.bidOpenAddress == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpenAddressCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.contractType =='' || this.tenderData.contractType == null || this.tenderData.contractType == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("contractTypeCantBeBlank"),2000,true); + // } + + // else if( this.tenderData.preBidMeetAdd == '' || this.tenderData.preBidMeetAdd == null || this.tenderData.preBidMeetAdd == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingAddressCantBeBlank"),2000,true); + // } + + + // else if( this.tenderData.preBidDate == null || this.tenderData.preBidDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingDateCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.preBidMeetPlace == '' || this.tenderData.preBidMeetPlace == null || this.tenderData.preBidMeetPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingPlaceCantBeBlank"),2000,true); + // } + + + else this.nextTab() + + } + + CriticalDates() { + this.date = new Date(); + const year = this.date.getFullYear(); + const month = String(this.date.getMonth() + 1).padStart(2, '0'); + const day = String(this.date.getDate()).padStart(2, '0'); + const hour = String(this.date.getHours()).padStart(2, '0'); + const minute = String(this.date.getMinutes()).padStart(2, '0'); + + + const currentDate = `${year}-${month}-${day}T${hour}:${minute}`; + + + //publishdate validations + + if (this.tenderData.publishDate < currentDate) { + this._ui.toastMessage(this.errorTranslateService.translate("publishDateCantBePreviousDate"), 2500, true); + + } + + // document download/ sale start date validations + + else if (this.tenderData.saleStartDate < this.tenderData.publishDate) { + this._ui.toastMessage(this.errorTranslateService.translate("ddStartGreterThanPublishD"), 2500, true); + } + else if (this.tenderData.saleStartDate < this.tenderData.publishDate || this.tenderData.saleStartDate > this.tenderData.saleEndDate) { + this._ui.toastMessage(this.errorTranslateService.translate("ddStartGreterThanPublishDLessThanddSakeEndD"), 2500, true); + } + + //document download / sale end date validations + + else if (this.tenderData.saleEndDate < this.tenderData.publishDate) { + this._ui.toastMessage(this.errorTranslateService.translate("DDEndGreterThanPublishD"), 2500, true); + } + else if (this.tenderData.saleEndDate < this.tenderData.publishDate || this.tenderData.saleStartDate > this.tenderData.bidSubEndDate) { + this._ui.toastMessage(this.errorTranslateService.translate("DDEndGreterThanPublishDLessThanBidSubEndD"), 2500, true); + } + + // bid submission start date validations + + else if (this.tenderData.bidSubStartDate < this.tenderData.publishDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubStartDmustBeGreaterThanPublishDate"), 2500, true); + } + + else if (this.tenderData.bidSubStartDate < this.tenderData.saleStartDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubStartDmustBeGreaterThanDocumentDwnldStartD"), 2500, true); + } + + //bid submission end date validations + + else if (this.tenderData.bidSubEndDate < this.tenderData.publishDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubEndDmustBeGreaterThanPublishD"), 2500, true); + } + else if (this.tenderData.bidSubEndDate < this.tenderData.publishDate || this.tenderData.bidSubEndDate < this.tenderData.bidSubStartDate || this.tenderData.bidSubEndDate < this.tenderData.saleEndDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubEndDmustBeGreaterThanDocDwnldEndDandbidSubStartD"), 2500, true); + } + + // bid open date validations + + else if (this.tenderData.bidOpenDate < this.tenderData.publishDate || this.tenderData.bidOpenDate < this.tenderData.saleStartDate || + this.tenderData.bidOpenDate < this.tenderData.saleEndDate || this.tenderData.bidOpenDate < this.tenderData.bidSubStartDate || + this.tenderData.bidOpenDate < this.tenderData.bidSubEndDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidopenDmustBeGreaterThanAllD"), 2000, true); + + } + + // publish date validations + + else if (this.tenderData.publishDate > this.tenderData.bidOpenDate || this.tenderData.publishDate > this.tenderData.saleStartDate || + this.tenderData.publishDate > this.tenderData.saleEndDate || this.tenderData.publishDate > this.tenderData.bidSubStartDate || + this.tenderData.publishDate > this.tenderData.bidSubEndDate + ) { + this._ui.toastMessage(this.errorTranslateService.translate("publishDmustBeLesserThanAllD"), 2000, true); + + } + + else if (this.tenderData.publishDate == '' || this.tenderData.publishDate == null || this.tenderData.publishDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("publishedDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.saleStartDate == '' || this.tenderData.saleStartDate == null || this.tenderData.saleStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleStartCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationStartDate == null || this.tenderData.clarificationStartDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationStartDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.saleEndDate == '' || this.tenderData.saleEndDate == null || this.tenderData.saleEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleEndCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationEndDate == null || this.tenderData.clarificationEndDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationEndDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.bidSubStartDate == '' || this.tenderData.bidSubStartDate == null || this.tenderData.bidSubStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionStartDateCantBeBlank"), 2000, true); + } + + else if (this.tenderData.bidSubEndDate == '' || this.tenderData.bidSubEndDate == null || this.tenderData.bidSubEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidSubEndDate && this.tenderData.bidOpenDate && this.tenderData.bidSubEndDate > this.tenderData.bidOpenDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeGreaterThanbidOpeningDate"), 2000, true); + } + + else if (this.tenderData.bidOpenDate == null || this.tenderData.bidOpenDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningDateCantBeBlank"), 2000, true); + } + + + else this.nextTab() + + } + + selectUserNext() { + + if (this.selectedUsers.length <= 0) { + this._ui.toastMessage(this.errorTranslateService.translate("selectUserCantBeBlank"), 2000, true); + } + else this.nextTab() + + } + + + tenderDocumnetsPreCheck() { + + for (let i = 0; i < this.drawingsDocuments.length; i++) { + if (this.drawingsDocuments[i].file == null || this.drawingsDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].docType == '' || this.drawingsDocuments[i].docType == null || this.drawingsDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].description == '' || this.drawingsDocuments[i].description == null || this.drawingsDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.nitDocuments.length; i++) { + if (this.nitDocuments[i].file == null || this.nitDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].docType == '' || this.nitDocuments[i].docType == null || this.nitDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].description == '' || this.nitDocuments[i].description == null || this.nitDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.workItemDocuments.length; i++) { + if (this.workItemDocuments[i].file == null || this.workItemDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].docType == '' || this.workItemDocuments[i].docType == null || this.workItemDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].description == '' || this.workItemDocuments[i].description == null || this.workItemDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + return true + } + + + RequiredDocumentsPreCheck() { + + for (let i = 0; i < this.coverDocs.length; i++) { + if (this.coverDocs[i].coverType == null || this.coverDocs[i].coverType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].Description == '' || this.coverDocs[i].Description == null || this.coverDocs[i].Description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].fileFormat == '' || this.coverDocs[i].fileFormat == null || this.coverDocs[i].fileFormat == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentFormatCantBeBlank"), 2000, true); + return false; + } + } + return true + + } + + + + RequiredDocuments() { + if (this.RequiredDocumentsPreCheck()) + if (!this.newCvrROW) { + this._ui.toastMessage(this.errorTranslateService.translate("requiresDocs"), 2000, true); + return false; + + } + if (this.RequiredDocumentsPreCheck()) { + // this.tenderData.covers = this.coverDocs + this.nextTab() + } + } + + + + + + TendersDocuments() { + this.tenderData.id = this.id + this.tenderData.crud = 'I' + this.tenderData.covers = this.coverDocs + + this.savedSubcategories = [] + for (let element of this.subcategoryform.controls.subCategory.value) { + if (element != 0) { + this.savedSubcategories.push(element) + } + } + + + for (let i = 0; i < this.savedSubcategories.length; i++) { + + this.subCategoryData[i] = new tenderSubcategoryMasterDto() + this.subCategoryData[i].tenderId = this.id; + + this.subCategoryData[i].subCategoryId = this.savedSubcategories[i]; + + } + + + this.tenderData.subCategoryMaster = this.subCategoryData; + + + + + if (this.tenderDocumnetsPreCheck()) + if (!this.newDRWROW) { + this._ui.toastMessage(this.errorTranslateService.translate("addDocs"), 2000, true); + return false; + + } + if (this.tenderDocumnetsPreCheck()) { + + // if(!this.tenderID || this.tenderID !=0){ + // this.tenderData.activeYn='S'; + + // } + // this.nextTab() + this.tenderData.tenderDoc = this.nitDocuments.concat(this.workItemDocuments, this.drawingsDocuments) + + this._masterService.saveAllMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + + + + if (res['tenderTypeD'].id == 7) + + + this._masterService.saveMasterData(apiUrl.closedTenderUsers, this.selectedUsers).then(res => { + + + }) + if (res) { + Swal.fire( + 'Created', + 'Tender created successfully', + 'success' + ) + + this.router.navigate(['analyst/dashboard']); + + } + + }, (err) => { + + this._ui.toastMessage(err.error.message); + + if (err.status != 201) { + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + this.tenderData.tenderDoc = []; + + } + }); + + + + } + } + + + + + + submit() { + this.tenderData.activeYn = 'S'; + this.tenderData.crud = 'I' + if (this.tenderData.tenderInvName == '' || this.tenderData.tenderInvName == null || this.tenderData.tenderInvName == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("nameCantBeBlank"), 2000, true); + return + } + if (this.tenderData.tenderInvAddess == '' || this.tenderData.tenderInvAddess == null || this.tenderData.tenderInvAddess == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("addressCantBeBlank"), 2000, true); + return + } + + this._masterService.saveMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + + this.id = res['id'] + this.tenderData = res; + + if (this.selectUserTabView && this.id) + this.selectedUsers.forEach(element => { + // let temp = {} + // temp = {tenderId:this.id,userId:element.userId} + // this.selectedUsers.push(temp); + element.tenderId = this.id + }); + this.savedSubcategories = [] + + for (let i = 0; i < res.subCategoryMaster.length; i++) { + this.savedSubcategories.push(res.subCategoryMaster[i].subCategoryId); + } + + + + if (res) { + Swal.fire( + 'Created', + 'Tender Details created successfully', + 'success' + ) + this.nextTab() + + } + + }, (err) => { + + this._ui.toastMessage(err.error.message); + + if (err.status != 201) { + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + + } + }); + + } + + + + nextTab() { + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + + prevTab() { + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + display() { + + } + tosslePerOne(field) { + + if (field == 'select') { + if (this.allSelection.selected) { + this.allSelection.deselect(); + return false; + } + if (this.subcategoryform.controls.subCategory.value.length == this.subcategoryLov.length) { + this.allSelection.select(); + } + } + if (field == 'user') { + if (this.allUser.selected) { + this.allUser.deselect(); + return false; + } + if (this.userform.controls.users.value.length == this.userLov.length) { + this.allUser.select(); + } + } + + } + + toggleAllSelection(field) { + if (field == 'select') { + if (this.allSelection.selected) { + this.subcategoryform.controls.subCategory.patchValue([...this.subcategoryLov.map(item => item.id), 0]); + } else { + this.subcategoryform.controls.subCategory.patchValue([]); + } + } + if (field == 'users') { + if (this.allUser.selected) { + + this.userform.controls.users.patchValue([...this.userLov.map(item => item.userId), 0]); + } else { + + this.userform.controls.users.patchValue([]); + } + } + + } + + // selectUser(event,userId){ + + // if(event.checked=true){ + // this.selectedUsers.tenderId=this.tenderID; + // this.selectedUsers.userId=userId; + + // } + + // } + + // selectAllUser(event){ + // if(event.checked=true){ + + // } + // } + + + + selectAllUser(event) { + if (event.checked) { + this.selectedUsers = []; + + this.userLov.forEach(user => { + let temp = {} + temp = { tenderId: null, userId: user.userId } + this.selectedUsers.push(temp) + }); + this.userLov.forEach(element => { + element.selected = true + }); + this.allCheck = true; + } else { + this.userLov.forEach(element => { + element.selected = false + }); + this.selectedUsers = []; + this.allCheck = false; + } + + this.selectAllChecked = event.checked; // Update the state of the "Select All" checkbox + + } + + + selectUser(event, userId, index) { + if (event.checked) { + let temp = {} + temp = { tenderId: null, userId: userId } + this.selectedUsers.push(temp); + + if (this.selectedUsers.length > 0 && this.selectedUsers.length == this.userLov.length) { + this.allCheck = true; + } + } else { + this.allCheck = false; + + for (let i = 0; i < this.selectedUsers.length; i++) { + if (this.selectedUsers[i].userId == userId) { + this.selectedUsers.splice(i, 1); + } + + } + } + + + + } + + search() { + this.userLov = [...this.userDataCopy] + this.data = [...this.userLov]; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorTranslateService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + + this.userLov = this.data.filter(res => { + let includedInUser = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserId = (res.userId) ? res.userId.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserPhno = (res.mobileNumber) ? res.mobileNumber.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInUser || includedInUserId || includedInUserEmail || includedInUserPhno) { + + return true; + } + + else + return false; + }); + // this.noData = (this.data && this.data.length == 0) ? true : false; + // this.pageLength = this.data.length; + // this.dataSource = new MatTableDataSource(this.data); + } +} \ No newline at end of file diff --git a/src/app/_modules/analyst/dashboard-routing.module.ts b/src/app/_modules/analyst/dashboard-routing.module.ts new file mode 100644 index 0000000..ca7f574 --- /dev/null +++ b/src/app/_modules/analyst/dashboard-routing.module.ts @@ -0,0 +1,39 @@ +import { NgModule } from '@angular/core'; + +import { DashboardComponent } from './dashboard.component'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { RouterModule, Routes } from '@angular/router'; +import { GalleryComponent } from './gallery/gallery.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + {path:'tender-view/:id', component:HomeViewComponent}, + {path:'tender-view/:id/:pay', component:HomeViewComponent}, + { path :'payment-details/:id' , component:PaymentDetailsComponent}, + {path:'tender-upload/:id',component:HomeUploadComponent}, + { path: 'add-tenders', component: AddTendersComponent}, + // { path: 'add-tenders/:id', component: AddTendersComponent}, + { path: 'qr-payment/:id', component: QrPaymentComponent}, + { path: 'gallery', component: GalleryComponent} + + // { path: 'master', loadChildren: () => import('../master/master.module').then(m => m.MasterModule) }, + // { path: 'report', loadChildren: () => import('../report/report.module').then(m => m.ReportModule) }, + // { path: 'support', loadChildren: () => import('../support/support.module').then(m => m.SupportModule) }, + // { path: 'transaction', loadChildren: () => import('../transaction/transaction.module').then(m => m.TransactionModule) } + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule { } diff --git a/src/app/_modules/analyst/dashboard.component.html b/src/app/_modules/analyst/dashboard.component.html new file mode 100644 index 0000000..1f3a7e8 --- /dev/null +++ b/src/app/_modules/analyst/dashboard.component.html @@ -0,0 +1,354 @@ +
+ + + + +
+ + +
+
+ + + + +
+ +
+
+ + +
+ + + + + +
+ +
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ + +
+
+ +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'status' | translate }} + + +    {{element?.hide}}    +    {{element?.hide}}    +    {{element?.hide}}    +    {{'cancelled'}}    +    {{'in review'}}    + + + + + + + + + + + {{ 'payments' | translate }} + + + + + + + + + + + {{ 'view' | translate }} + + + + + + + + + + + + {{ 'report' | translate }} + + + + + + + + + + + + + {{ 'tenderStatus' | translate }} + + + +    {{'submitted'}}    + + +    {{'verified'}}    + +    {{'cancelled'}}    + + + + + + + + + + + + + + + {{ 'upload' | translate }} + + + + + + + + + + + + {{ 'Paymentstatus' | translate }} + + +
+ + + + {{ + element.countStatusP }} +
+
+ + + + +
+ + +
+ + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + +
+ + + +
+
+
+
+
+
+
+
+ + + +
+ + + + + +
Notification
+ +
+ + Notification Text + + +
+ +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/analyst/dashboard.component.scss b/src/app/_modules/analyst/dashboard.component.scss new file mode 100644 index 0000000..f182d9b --- /dev/null +++ b/src/app/_modules/analyst/dashboard.component.scss @@ -0,0 +1,637 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; +} + +mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; +} + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } +} + + +.mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); +} +.viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} +.editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + +} + +.editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + display: block; + width: 63px; +} + +.awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + display: block; + width: 63px; +} + +.closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + display: block; + width: 63px; +} + +.canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + display: block; + width: 80px; +} +.searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + +} +.home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; +} + +.circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.notificationButton{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + border-radius: 5px; + font-family: nucleo; + width: 121px; + font-size: smaller; + border:1px solid orangered; + +} + +.notificationButton:hover{ + + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #ffffff; + background-color: orangered; + font-family: nucleo; + width: 121px; + font-size: smaller; + border:1px solid orangered; + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + + +// ------------------------------------------------ +// .popup-card { +// position: fixed; +// background-color: #ffffff; +// top: 50%; +// left: 50%; +// transform: translate(-50%, -50%); +// width: 450px; +// height: 330px; +// z-index: 1000; +// } + + + +// .popup-container { +// padding: 20px; /* Add padding for better spacing */ +// display: flex; +// flex-direction: column; +// justify-content: center; +// height: 100%; +// } + + +// .mainCard{ +// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); +// border-radius: 10px; + +// } + + +// .resetSpan{ +// font-family: texg; +// color: #1e3d3b; +// font-size: xx-large; +// float: center; +// margin-top: 15px; +// // margin-left: 64px; +// } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; +// } + + +// @media screen and (max-width: 600px) { +// .popup-card { +// width: 450px; /* Adjust card width for smaller screens */ +// } +// } + +// .mat-card-actions { +// display: flex; +// justify-content: flex-end; +// padding: 16px; /* Add padding for spacing */ +// } + +// .popUpButtons{ +// padding: 5px; +// color: #353535; +// font-weight: 900; +// font-size: medium; +// // background-color: #ececec; +// font-family:nucleo; +// } + +// .popUpButtons:hover{ + +// background-color: #ebeaea ; +// color:#46AC9E; +// box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); +// // transform: translateY(5px); + +// } + +// .custom-spinner-content { +// font-size: 24px; +// color:#46AC9E; +// margin: 0; +// padding: 0; +// } + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.container-responsive{ + background-size: cover; + background-color: whitesmoke; + + // background-image: url('/assets/img/houstone_line1.jpg'); +} + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} diff --git a/src/app/_modules/analyst/dashboard.component.ts b/src/app/_modules/analyst/dashboard.component.ts new file mode 100644 index 0000000..40b01ac --- /dev/null +++ b/src/app/_modules/analyst/dashboard.component.ts @@ -0,0 +1,697 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData:CommonDto + + // ------digital signature--------// + + // showPopup:boolean = false; + // fileSelected: boolean; + // fileSelected2:boolean; + // Secretary:any; + // President:any; + // selectedSecretaryFile: any; + // selectedPresidentFile: any; + // SecretarySigned: boolean; + // PresidentSigned: boolean; + + // -----------------------------// + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','status','view','tenderStatus']; + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck() + // this.fileSelected = false + // this.fileSelected2 = false + + // await this._ui.userValidation() + // this.loading = true; + // this.getMenuData(); + + + } + + + + getData(){ + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + // if(this.seculevel != 'B') + // this._masterService.getMasterData(apiUrl.getTender + '?order[id]=DESC').then((res) =>{ + // console.log("tenderData=1=",res); + // this.tenderData = res; + + + + // for(let element of res){ + + // if(element.id == '56'){ + // element.hide56 = 'true' + // }else + // element.hide56= 'false' + + // const bidSubStartDate: Date = new Date(element.bidSubStartDate); + // const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + // if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + // element.hide = 'Active' + // } + // else + // element.hide = 'Closed' + + // } + // this.dataCopy = res; + // this.pageLength = this.tenderData.length; + // this.dataSource = new MatTableDataSource(this.tenderData); + // this.dataSource.sort = this.sort; + // this.dataSource.paginator = this.paginator; + // this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + // this.loading = false; + // },err=>{ + // console.error(err) + // }) + // else + this._masterService.getMasterData(apiUrl.adminTenderView +'?order[id]=DESC').then((res) =>{ + this.tenderData = res; + + + for(let element of res){ + // this._masterService.getMasterDatabyId(apiUrl.bidReport, element.id).then(result => { + // element.countStatusP = result.countStatusP; + // console.log("this.countStatusP ", element.countStatusP); + + // }) + + const publishDate: Date = new Date(element.publishDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + let bidOpenDate: Date = new Date(element.bidOpenDate); + + // bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 30); + if(newDate >= bidOpenDate){ + element.reportHide = 'false' + } + if(newDate > publishDate){ + element.HideEdit = true + }else { + element.HideEdit = false + } + + + + + + if(newDate >= publishDate && newDate <= bidOpenDate){ + + element.hide = 'Active' + } + else if(newDate < publishDate){ + element.hide = 'Await' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + // console.log("tenderData=2=",res); + + },err=>{ + console.error(err) + }) + + + + // const bidSubStartDate = new Date(this.tenderData.bidSubStartDate); + // const bidSubEndDate = new Date(this.tenderData.bidSubEndDate); + + // if (this.currentDate >= bidSubStartDate && this.currentDate <= bidSubEndDate) { + // this.enableDownload = false; // Enable the button + // console.log("enabled"); + // } else { + // this.enableDownload = true; // Disable the button + // console.log("disabled"); + // } + + + } + + getMarqueeData(){ + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res=>{ + + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender(){ + this.navigateTo('/analyst/add-tenders') + } + + galleryRoute(){ + this.navigateTo('/analyst/gallery') + + } + + openNotificationDialog(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getMarqueeData(); + } + + closeDialog(){ + this.dialogRef.close(); + } + + saveNotificationText(){ + if(!this.commonData.marquee || this.commonData.marquee == ''){ + this._ui.toastMessage(this.errorService.translate('notificationTextCannotBeBlank')); + return ; + } + else{ + if(this.commonData.id){ + this._masterService.updateMasterData(apiUrl.common,this.commonData,this.commonData.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('notificationTextSaved')); + this.closeDialog(); + }) + } + + } + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + // navigateTo(destination) { + // this.router.navigate([destination]); + // } + + // async getMenuData() { + // this.menuData = [] + // await this._menuService.getJsonData("sales-menu").then((res) => { + // res.forEach(element => { + // if (element.menuEnabled == "Y") + // this.menuData.push(element) + // }); + // // this.menuData = res; + // this.loading = false; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // console.log("===err====", err); + // }); + + // } + // getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + // if (!parentMenuId) + // return []; + // if (!menuCompactData) + // menuCompactData = []; + // for (let menu of menuList) { + // if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + // let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + // if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + // if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + // if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // // if (menu.menuType == "1") format["isExpanded"] = true; + // // if (menu.menuType != "1") format["isExpanded"] = false; + // // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + // if (menu["menuType"]) format["menuType"] = menu["menuType"]; + // if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + // if (menu["role"]) format["role"] = menu["role"]; + // if (menu["project"]) format["project"] = menu["project"]; + // if (this.seculevel == 'admin') + // menuCompactData.push(format); + // else { + // if (menu.role != 'admin') { + // menuCompactData.push(format); + // } + // } + // } + // } + + // return menuCompactData; + // } + + goToPayment(id){ + // this.navigateTo(`admin/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + // console.log("this.userId"); + // console.log("this.tenderId"); + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + // console.log('pay res=>', res); + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['analyst/tender-view',tenderId]); + } + + goToPaymentDetails(tenderId){ + // this.router.navigate(['analyst/payment-details',tenderId]) + } + + goToAddTenders(){ + this.router.navigate(['analyst/add-tenders']); + } + + goToUpload(tenderId){ + + +this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck,`${this.userId}/${tenderId}`).then((res)=> { +// console.log("UPLOAD DATA", res); + + if (res && res.length > 0) { + // console.log("Data already uploaded."); + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + this.router.navigate(['/tender-upload',tenderId]); + } +}).catch((error) => { + console.error("Error fetching upload data:", error); +}); + + + + + // + } + goToEdit(tenderId){ + // this.router.navigate(['analyst/add-tenders',tenderId]); + } + Cancel(){ + + } + + + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id){ + // this.navigateTo(`bid-final-report/${id}`) + + + } + + // CancelTender(id){ + // this.showPopup = true; + // console.log(id); + // this.showPopup = true; + // } + // closePopup() { + // this.showPopup = false; + // this.Secretary ='' + // this.President = '' + // } + + // async UploadsecretaryFiles(event,SecretaryFile){ + + // const allowedExtensions = ['cer']; + + // this.selectedSecretaryFile = event.target.files[0]; + // if (this.selectedSecretaryFile) { + + // const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.Secretary = this.selectedSecretaryFile.name; + + + // const formData = new FormData(); + // formData.append('adminUser', '2'); + // formData.append('certificate', this.selectedSecretaryFile); + + // console.log("s",formData); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // console.log(res); + // if(res.message = "Authentication Successfully Completed"){ + // console.log("1"); + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + + // }else{ + // this.SecretarySigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + // deleteSecretaryInput(){ + + // } + + // async UploadPresidentFiles(event,President){ + + // const allowedExtensions = ['cer']; + + // this.selectedPresidentFile = event.target.files[0]; + // if (this.selectedPresidentFile) { + + // const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.President = this.selectedPresidentFile.name; + + // const formData = new FormData(); + // formData.append('adminUser', '1'); + // formData.append('certificate', this.selectedPresidentFile); + + // console.log("p",formData); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // console.log(res); + // if(res.message = "Authentication Successfully Completed"){ + // console.log("1"); + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + + // }else{ + // this.PresidentSigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + + // deletePresidentInput(){ + + // } + + // VerifySignature(){ + // this.showPopup = true; + // if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + // this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + // return false + + // }else if(this.President == null || this.President == '' || this.President == undefined){ + // this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + // return false + // }else if(!this.SecretarySigned && !this.PresidentSigned){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Something went wrong!', + // // footer: 'Why do I have this issue?' + // }) + // return false + // //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + // }else if(this.SecretarySigned && this.PresidentSigned){ + // console.log("OK"); + // Swal.fire({ + // icon: 'success', + // title: 'Cancellation Successfully', + // showConfirmButton: false, + // timer: 1500 + // }) + // this.showPopup = false; + // } + // } + + + // openHelpDialog(templateRef) { + // this.dialogRef = this.dialog.open(templateRef, { + // width: '700px', + // disableClose: false + // }); + // } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/analyst/dashboard.module.ts b/src/app/_modules/analyst/dashboard.module.ts new file mode 100644 index 0000000..389f626 --- /dev/null +++ b/src/app/_modules/analyst/dashboard.module.ts @@ -0,0 +1,91 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardRoutingModule } from './dashboard-routing.module'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { DashboardComponent } from './dashboard.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { TenderHomeComponent } from './tender-home/tender-home.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker'; +import {ProgressSpinnerMode, MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import { LOCALE_ID } from '@angular/core'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { DialogComponent } from './dialog/dialog.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { GalleryComponent } from './gallery/gallery.component'; + +// import { MatTimepickerModule } from 'mat-timepicker'; +// import { MatTimepickerModule } from '@angular/material/timepicker'; +// import { MatSelectModule } from '@angular/material'; +const lang = 'en-US'; + +@NgModule({ + declarations: [ + LayoutComponentComponent, + DashboardComponent, + HomeViewComponent, + HomeUploadComponent, + TenderHomeComponent, + AddTendersComponent, + DialogComponent, + QrPaymentComponent, + PaymentDetailsComponent, + GalleryComponent + ], + imports: [ + CommonModule, + DashboardRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule, + MatDialogModule, + MatCheckboxModule, + MatProgressSpinnerModule + // NgxMatTimepickerModule.setLocale(lang), + // NgxMaterialTimepickerModule + // MatTimepickerModule + + + ], + providers: [{ provide: LOCALE_ID, useValue: lang }] +}) +export class DashboardModule { } diff --git a/src/app/_modules/analyst/dialog/dialog.component.html b/src/app/_modules/analyst/dialog/dialog.component.html new file mode 100644 index 0000000..80a1821 --- /dev/null +++ b/src/app/_modules/analyst/dialog/dialog.component.html @@ -0,0 +1 @@ +

dialog works!

diff --git a/src/app/_modules/analyst/dialog/dialog.component.scss b/src/app/_modules/analyst/dialog/dialog.component.scss new file mode 100644 index 0000000..6879e9c --- /dev/null +++ b/src/app/_modules/analyst/dialog/dialog.component.scss @@ -0,0 +1,40 @@ +/* Custom styles for the dialog component */ + +h2.mat-dialog-title { + font-family: 'Arial', sans-serif; /* Change the font family for the title */ + font-size: 24px; /* Increase the font size */ + font-weight: bold; /* Make the title bold */ + } + + mat-dialog-content { + font-family: 'Arial', sans-serif; /* Change the font family for the content */ + font-size: 16px; /* Adjust the font size */ + } + + ul { + list-style-type: disc; /* Use disc bullets for the list items */ + padding-left: 20px; /* Add some padding to the left for better alignment */ + } + + mat-dialog-actions { + justify-content: flex-end; /* Align the buttons to the right */ + } + +// button.mat-dialog-button.mat-primary { +// background-color: #4CAF50; /* Change the background color of the Accept button */ +// color: #ffffff; /* Change the text color of the Accept button */ +// } + + + div.checkbox-container { + display: flex; + align-items: center; /* Center align the contents vertically */ + } + + .view-terms-link { + cursor: pointer; + font-size: 14px; + color: #007bff; /* Change the color of the link (you can choose a different color if needed) */ + text-decoration: underline; + margin-left: 10px; /* Add some space between the checkbox and the link */ + } \ No newline at end of file diff --git a/src/app/_modules/analyst/dialog/dialog.component.spec.ts b/src/app/_modules/analyst/dialog/dialog.component.spec.ts new file mode 100644 index 0000000..a32e0ea --- /dev/null +++ b/src/app/_modules/analyst/dialog/dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DialogComponent } from './dialog.component'; + +describe('DialogComponent', () => { + let component: DialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DialogComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/dialog/dialog.component.ts b/src/app/_modules/analyst/dialog/dialog.component.ts new file mode 100644 index 0000000..44de131 --- /dev/null +++ b/src/app/_modules/analyst/dialog/dialog.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'app-dialog-component', + template: ` +

Declaration:

+ +
    +
  • {{ detail }}
  • +
+
+ + + Close + + + + + `, + styleUrls: ['./dialog.component.scss'] +}) +export class DialogComponent implements OnInit { + + details: string[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { details: string[] } + ) { + this.details = data.details; + } + + onAccept() { + // You can perform any actions needed when the user accepts the terms and conditions here. + this.dialogRef.close('accepted'); + } + + onClose() { + // You can perform any actions needed when the user closes the dialog without accepting the terms and conditions here. + this.dialogRef.close('closed'); + } + ngOnInit(): void { + + } +} diff --git a/src/app/_modules/analyst/gallery/gallery.component.html b/src/app/_modules/analyst/gallery/gallery.component.html new file mode 100644 index 0000000..e6c7522 --- /dev/null +++ b/src/app/_modules/analyst/gallery/gallery.component.html @@ -0,0 +1,304 @@ +
+ +
+
+ +
+
+ Gallery +
+ +
+ +
+
+ + +
+ +
+ + + +
+ +
+
+ + +
+
+
+
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ +
+
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'Category' | translate }} + + + {{element?.category}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'description' | translate }} + + + {{element?.description}} + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+ + + + + + + + +
Upload Images
+ +
+ + Project Type + + + {{project.project}} + + + +
+ +
+ + Project Type + + + {{category.category}} + + + +
+
+ + Title + + +
+
+ + Description + + +
+
+
+ + + Image + + + + +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+ + Sub Image {{i+1}} + + + + +
+ +
+ +
+ +
+ +
+
+
+
+
+ + +
+
+ +
+
+ +
+
+ + + + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/analyst/gallery/gallery.component.scss b/src/app/_modules/analyst/gallery/gallery.component.scss new file mode 100644 index 0000000..0a0b0c0 --- /dev/null +++ b/src/app/_modules/analyst/gallery/gallery.component.scss @@ -0,0 +1,634 @@ + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + + :host ::ng-deep .mat-sort-header-container { + display: flex; + justify-content: center; +} + + + mat-table { + text-align: center !important; + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + text-align: center !important; + + } + + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + + .mat-header-cell { + flex-direction: column; + justify-content: center; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; + } + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float{ + min-width: 89%; + } + + + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .clearButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .clearButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 29vh; + height: 47px; + } + .clearButton{ + // margin: 5px; + // height: 40px; + margin-left: -105px !important; + margin-top: 4px; +} + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + .editButton{ + margin: auto; + border-radius: 16px !important; + height: 35px !important; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + } + + + .mat-progress-spinner svg { + position: absolute; + transform: rotate(-90deg); + top: 0; + left: 0; + margin-top: 10px; + width: 25px; + height: 25px; + transform-origin: center; + overflow: visible; +} + +.example-margin { + margin: 0 3px; + height: 25px; + width: 25px; +} + +.container-responsive{ + background-color: whitesmoke; +} + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + +.galleryAddBtn{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + width: 11%; + border: 1px solid orangered; + + +} + + +.galleryAddBtn:hover{ + color: white; + background-color: orangered; + + +} \ No newline at end of file diff --git a/src/app/_modules/analyst/gallery/gallery.component.ts b/src/app/_modules/analyst/gallery/gallery.component.ts new file mode 100644 index 0000000..e2e2838 --- /dev/null +++ b/src/app/_modules/analyst/gallery/gallery.component.ts @@ -0,0 +1,476 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { ThemePalette } from '@angular/material/core'; +import { GalleryDto } from 'src/app/_dto/gallery.dto'; +import { subGalleryDto } from 'src/app/_dto/sub-gallery.dto'; +import { ProgressSpinnerMode } from '@angular/material/progress-spinner'; + + +@Component({ + selector: 'app-gallery', + templateUrl: './gallery.component.html', + styleUrls: ['./gallery.component.scss'] +}) +export class GalleryComponent implements OnInit { + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns: any = ['actions', 'slno', 'category', 'title', 'description']; + + // displayedColumns:any = ['actions','slno','tenderCategory','status']; + + dataCopy: any; + + pageLength: any; + + searchTerm: any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + galleryData: GalleryDto[]; + + selectedGallery: GalleryDto; + + color: ThemePalette = 'primary'; + + isEdit: boolean = false; + + subImages: any[] = []; + + + projectTypeLov = [ + { project: "Architecture Design", value: 'AD' }, + { project: "Interior Design", value: 'ID' }, + { project: "Project Management", value: 'PM' } + ] + + categoryLov = [ + { category: "Residential", value: 'residential' }, + { category: "Commercial", value: 'Commercial' } + ] + imageUrl: any + + spinColor: ThemePalette = 'warn'; + mode: ProgressSpinnerMode = 'indeterminate'; + value = 50; + spinLoading:boolean=false; + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService: ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + // console.log('=====level====',this.seculevel); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.galleryData = [] + this.getData(); + + } + + + + getData() { + + this._masterService.getMasterData(apiUrl.gallery).then((res) => { + this.galleryData = res; + this.dataCopy = res; + this.pageLength = this.galleryData.length; + this.dataSource = new MatTableDataSource(this.galleryData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.galleryData && this.galleryData.length == 0) ? true : false; + this.loading = false; + }, err => { + console.error(err) + }) + + + + + } + + + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + getGalleryById(id) { + this._masterService.getMasterDatabyId(apiUrl.gallery, id).then(res => { + this.selectedGallery = res + }, err => { + console.log(err); + + }) + } + + editCategoryDialog(templateRef, id) { + this.selectedGallery = new GalleryDto(); + this.isEdit = true; + this.dialogRef = this.dialog.open(templateRef, { + width: '600px', + maxHeight: '60vh', + minHeight: '60vh', + disableClose: true + }); + this.getGalleryById(id); + } + + openCategoryDialog(templateRef) { + this.isEdit = false; + this.selectedGallery = new GalleryDto(); + this.selectedGallery.subGallery = []; + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + maxHeight: '80vh', + // minHeight: '60vh', + disableClose: true + }); + } + closeDialog() { + this.selectedGallery = new GalleryDto(); + + this.dialogRef.close(); + // this.getData() + } + + sortData(sort: Sort) { + const data = this.galleryData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'category': + return compare(a.category, b.category, isAsc); + case 'title': + return compare(a.title, b.title, isAsc); + case 'description': + return compare(a.description, b.description, isAsc); + case 'projectType': + return compare(a.projectType, b.projectType, isAsc); + default: + return 0; + } + }); + } + + search() { + this.galleryData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.galleryData = this.galleryData.filter(res => { + let includedInCategory = (res.category) ? res.category.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedIntitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedIndescription = (res.description) ? res.description.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInprojectType = (res.projectType) ? res.projectType.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInCategory || includedIntitle || includedIndescription || includedInprojectType) + return true; + else + return false; + }); + this.noData = (this.galleryData && this.galleryData.length == 0) ? true : false; + this.pageLength = this.galleryData.length; + this.dataSource = new MatTableDataSource(this.galleryData); + this.loading = false; + } + + reset() { + this.searchTerm = ""; + this.getData(); + } + + pushSubImages() { + let temp = new subGalleryDto(); + this.selectedGallery.subGallery.push(temp) + } + + removeSubImage(i,image) { + if(image && image.imageUrl && image.imageUrl != ''){ + this._masterService.deleteMasterData(apiUrl.subGalleryImg+`/${this.selectedGallery.id}`,image.imageUrl).then(res=>{ + this._ui.toastMessage(res['message']) + },err=>{ + this._ui.toastMessage(err.error.message) + + }) + } + this.selectedGallery.subGallery.splice(i, 1); + } + + downloadMainImage(mainImageURL){ + this.imageUrl=mainImageURL; + this.spinLoading=true; + // this._masterService.getMasterDatabyId(apiUrl.galleryImage,`${this.imageUrl}`).then(res=>{ + // console.log('downloading . . .') + // }) + this._masterService.downloadFileWithAuth(apiUrl.galleryImage,`${this.imageUrl}`).then(res=>{ + this.spinLoading=false; + }) + + } + + + downloadSubImage(mainImageURL,i){ + this.imageUrl=mainImageURL; + this.selectedGallery.subGallery[i].spinLoading=true; + // this._masterService.getMasterDatabyId(apiUrl.galleryImage,`${this.imageUrl}`).then(res=>{ + + // }) + this._masterService.downloadFileWithAuth(apiUrl.galleryImage,`${this.imageUrl}`).then(res=>{ + + this.selectedGallery.subGallery[i].spinLoading=false; + }) + + } + + // downloadImage(i,image){ + // console.log('image',image) + // if(image && image.imageUrl && image.imageUrl != ''){ + // this._masterService.getMasterData(apiUrl.galleryImage,) + // } + // } + + isImage(file: File): boolean { + const allowedImageExtensions = ['jpg', 'jpeg', 'png']; + const extension = file.name.split('.').pop()?.toLowerCase() || ''; + return allowedImageExtensions.includes(extension); + } + + UploadMainImage(event) { + + + if(!this.selectedGallery.projectType || this.selectedGallery.projectType == ''){ + this._ui.toastMessage('Select Project Type'); + return + } + if(!this.selectedGallery.category || this.selectedGallery.category == ''){ + this._ui.toastMessage('Select Category'); + return + } + if(!this.selectedGallery.title || this.selectedGallery.title == ''){ + this._ui.toastMessage('Add Title'); + return + } + if(!this.selectedGallery.description || this.selectedGallery.description == ''){ + this._ui.toastMessage('Add Description'); + return + } + + const file = event.target.files[0]; + if (this.isImage(file)) { + const fd = new FormData(); + fd.append('file', file); + this._masterService.saveMasterData(apiUrl.picture,fd).then(res=>{ + this.selectedGallery.imageUrl = res.fileName; + if(!this.selectedGallery.id || this.selectedGallery.id == null){ + this.tempSave(); + } + }) + } + else { + this._ui.toastMessage(`Please attach an image file with extention - jpg,jpeg,png`) + } + + } + + UploadSubImage(event,i) { + + const file = event.target.files[0]; + if (this.isImage(file)) { + const fd = new FormData(); + fd.append('file', file); + this._masterService.saveMasterData(apiUrl.picture,fd).then(res=>{ + this.selectedGallery.subGallery[i].imageUrl = res.fileName; + this.selectedGallery.subGallery[i].galleryId = this.selectedGallery.id; + }) + } + else { + this._ui.toastMessage(`Please attach an image file with extention - jpg, jpeg, png`) + } + + } + + goToDashboard() { + this.navigateTo(`analyst/dashboard`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + + signIn() { + this.router.navigate(['/login']); + } + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + +tempSave(){ + this._masterService.saveMasterData(apiUrl.gallery, this.selectedGallery).then(res => { + + this.selectedGallery.id = res.id + }) +} + + saveGallery() { + // if (!this.preSave()) { + // return; + // } + if(!this.selectedGallery.imageUrl || this.selectedGallery.imageUrl == ''){ + this._ui.toastMessage('Please add Image'); + return + } + if(!this.selectedGallery.subGallery || this.selectedGallery.subGallery.length<1){ + this._ui.toastMessage('Please add Additional Images'); + return + } + + this._masterService.saveMasterData(apiUrl.gallery, this.selectedGallery).then(res => { + this._ui.toastMessage(this.errorService.translate('saveSuccess')); + this.selectedGallery = new GalleryDto(); + this.closeDialog(); + this.getData(); + },err=>{ + this._ui.toastMessage(err.error.message); + + }) + + + + } + editGallery() { + if (!this.selectedGallery.category || this.selectedGallery.category == '') { + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return; + } + this._masterService.updateMasterData(apiUrl.gallery, this.selectedGallery, this.selectedGallery.id).then(res => { + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedGallery = new GalleryDto(); + this.isEdit = false; + }, err => { + console.log(err); + this._ui.toastMessage(err.error.message); + + }) + } + + + deleteGallery() { + this._masterService.deleteMasterData(apiUrl.gallery, this.selectedGallery.id).then(res => { + this._ui.toastMessage(this.errorService.translate('deleteSuccess')); + this.selectedGallery = new GalleryDto(); + this.closeDialog(); + this.getData(); + }, err => { + console.log(err); + this._ui.toastMessage(err.error.message); + + }) + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/analyst/home-upload/home-upload.component.html b/src/app/_modules/analyst/home-upload/home-upload.component.html new file mode 100644 index 0000000..d691cd9 --- /dev/null +++ b/src/app/_modules/analyst/home-upload/home-upload.component.html @@ -0,0 +1,201 @@ +
+ + + + + + +
+
+

Upload Files

+

+ +
+ +
+
+
+
+
+ + + + + Bid Final Amount + + + +
+ + + + + + + + + + + + + + + + + +
DescriptionDocument
{{cover?.Description}} +
({{cover?.fileFormatD?.fileFormat}} format) +
+
+ +
+ + + + {{tenderData?.covers[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + + + +
+
+
+
+

+ + + + + +
+ + + + I agree to the Terms and Conditions + +
+ + + + + + + + +
+ + +
+
+
+
+ +
+ + + + + + +

+ + +
+
+
+
+

© Art.n.Architects 2023. + All Rights Reserved

+

Designed by SiMS

+
+
+
+
+ + + +
\ No newline at end of file diff --git a/src/app/_modules/analyst/home-upload/home-upload.component.scss b/src/app/_modules/analyst/home-upload/home-upload.component.scss new file mode 100644 index 0000000..caa35a7 --- /dev/null +++ b/src/app/_modules/analyst/home-upload/home-upload.component.scss @@ -0,0 +1,70 @@ +#customers { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; +} + +#customers td, #customers th { + border: 1px solid #ddd; + padding: 8px; +} + +#customers tr:nth-child(even){background-color: #f2f2f2;} + +#customers tr:hover {background-color: #ddd;} + +#customers th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #5FACA1; + color: white; +} +.nav-link:hover { + color: rgb(255, 0, 0); + } +.resp{ + min-height: 260px; +} + @media (max-width: 767px) { + .resp{ + min-height: 460px; + } + + #customers td, #customers th { + padding-right: 2px; + } +} + +.checkbox-container { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.checkbox-text { + flex: 1; + font-family: 'Arial', sans-serif; + font-size: 16px; +} +::ng-deep .mat-checkbox-ripple .mat-ripple-element { + background-color: #5FACA1 !important; + +} + +::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + +::ng-deep .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} \ No newline at end of file diff --git a/src/app/_modules/analyst/home-upload/home-upload.component.spec.ts b/src/app/_modules/analyst/home-upload/home-upload.component.spec.ts new file mode 100644 index 0000000..e09a39b --- /dev/null +++ b/src/app/_modules/analyst/home-upload/home-upload.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeUploadComponent } from './home-upload.component'; + +describe('HomeUploadComponent', () => { + let component: HomeUploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeUploadComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/home-upload/home-upload.component.ts b/src/app/_modules/analyst/home-upload/home-upload.component.ts new file mode 100644 index 0000000..92bc4ff --- /dev/null +++ b/src/app/_modules/analyst/home-upload/home-upload.component.ts @@ -0,0 +1,375 @@ +import { Component, OnInit,ViewChild,ElementRef,AfterViewInit, } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { log } from 'console'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2' +import { DialogComponent } from '../dialog/dialog.component'; +import { DatePipe } from '@angular/common'; +@Component({ + selector: 'app-home-upload', + templateUrl: './home-upload.component.html', + styleUrls: ['./home-upload.component.scss'] +}) + +export class HomeUploadComponent implements OnInit { + + phoneInvalid: boolean = false; + + secuLevel: any; + + formData: any = {}; + + myForm: UntypedFormGroup; + + loading: boolean = true + + selected: boolean + + tenderId: number; + + bidAmount:number; + + agreeToTerms1: boolean = false; + + agreeToTerms2: boolean = false; + + showError: boolean = false; + + tenderData: any; + + selectedFiles: any; + + userId: string; + + agreeToTerms: boolean = false; + + fileSelected: boolean[] + + DEFAULT_COVER_COUNT: any; + + initialSelectionStatus: any; + + UploadedFile: TenderDocumentDto[]; + + fileFormat: any[] + + userEmail: string; + + emailBody: any; + + username: string; + + @ViewChild('bidAmountInput') bidAmountInput: ElementRef; + + amountPaid: boolean = false; + OnlinePayment: boolean; + dialogRef: any; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + public dialog: MatDialog, + private datePipe: DatePipe + ) { + + + // this.generateUPIQRCode('atlejs47@oksbi', '100'); + + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.userEmail = localStorage.getItem('emailId'); + this.username = localStorage.getItem('username'); + + } + + + ngOnInit(): void { + this.loading = true; + this.agreeToTerms = false; + + + this.getData(); + this.getFileFormatLov(); + this.paymentCheck(); + } + + + + + + + openDialog() { + const dialogRef = this.dialog.open(DialogComponent, { + width: '500px', + data: { + details: [ + 'I hereby declare that I have read and understood the tendered documents, terms and conditions, drawings and specifications. The rates quoted are based on all the necessary understanding of the site conditions and challenges to carry out the work. The rates are the best I could offer and are inclusive of all taxes and levies.', + ] + } + }); + + dialogRef.afterClosed().subscribe((result) => { + // Handle any logic after the dialog is closed (if needed) + // For example, you can update the agreeToTerms variable based on the user's choice. + }); + } + + openQrImage(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false + }); + // this.verifiedOtp = true + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + + this.loading = false; + + this.tenderData = res; + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + this.DEFAULT_COVER_COUNT = this.tenderData?.covers.length; // Replace with the actual number of rows + this.initialSelectionStatus = new Array(this.DEFAULT_COVER_COUNT).fill(false); + this.fileSelected = [...this.initialSelectionStatus]; + this.UploadedFile = []; + for(let i=0;i',this.emailBody); + + }) + } + + getFileFormatLov() { + this._masterService.getMasterData(apiUrl.fileFormat).then((res) => { + this.fileFormat = res + //console.log('this.fileFormat===', this.fileFormat); + + }) + } + + UploadFiles(event, i) { + const newFilename = `${this.tenderData.covers[i].Description.replace(/ /g, '')}${this.tenderData.covers[i].fileFormatD.fileFormat}` + + + + let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat); + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + + // Create a new File object with the updated filename + const updatedFile = new File([file], newFilename, { type: file.type }); + // const fd = new FormData(); + fd.append('file', updatedFile); + if (file && this.tenderId) { + this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => { + this.tenderData.covers[i].file = res.fileName; + this.fileSelected[i] = true; + this.UploadedFile[i].docName = res.fileName + this.UploadedFile[i].description = this.tenderData.covers[i].Description; + this.UploadedFile[i].docType = fileFormatId[0].id; + this.UploadedFile[i].documentSize = res.fileSizeKB; + this.UploadedFile[i].documentCategory = 'USERD'; + this.UploadedFile[i].tenderId = this.tenderId; + this.UploadedFile[i].userId = this.userId; + // console.log('this.UploadedFile========',this.UploadedFile); + + }) + } + + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + updateTerms(event: any) { + this.agreeToTerms = event.checked; + } + + + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + preSave() { + + if(this.bidAmount == 0 || this.bidAmount == null || this.bidAmount == undefined){ + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterBidFinalAmount"),2000,true); + return false; + } + for (let element of this.UploadedFile) { + if (!element.docName) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAddfiles"),2000,true); + + return false; + } + } + + if (!this.agreeToTerms) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAgreeToTheTermsandCondition"), 2000, true); + return false; + } + + + return true; + } + + + + + + // openDialog(): void { + // this.showDialog = true; + // } + + // closeDialog(): void { + // this.showDialog = false; + // } + + + + + submit() { + + if(!this.amountPaid && this.OnlinePayment){ + this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000); + return + } + + if(!this.preSave()) + return + + + + let id ={ + tenderId : this.tenderId, + userId : this.userId, + + } + + + let body= { + bidAmount:this.bidAmount + } + // this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + + // const body={email:this.userEmail} + // this._masterService.saveMasterData(apiUrl.UploadBidAmount,this.emailBody).then(res=>{ + // + // },err=>{ + // console.error(err); + // }) + // },err=>{ + // console.error(err); + // }) + + + + Swal.fire({ + title: 'Are you sure you want to submit?', + text: "Once submitted, document cannot be uploaded again", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, save it!' + }).then((result) => { + +if (result.isConfirmed) { + this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + const body={email:this.userEmail} + this._masterService.saveMasterData(apiUrl.emailUserSubmit,this.emailBody).then(res=>{ + + this._masterService.saveAllMasterData(apiUrl.tenderDoc, this.UploadedFile).then(res => { + + Swal.fire( + 'Success', + 'Documents submitted successfully', + 'success' + ) + this.router.navigate(['dashboard']); + },err=>{ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + }) + }); + + }); + + } + }) + + + } + + deleteInput(i) { + // const inputField = document.getElementById(inputFieldId) as HTMLInputElement; + // if (inputField) { + // inputField.value = ''; + // } + this._masterService.deleteMasterData(apiUrl.fileDelete + '/' + this.tenderId + '/' + this.userId, this.tenderData.covers[i].file).then(res => { + + this.tenderData.covers[i].file = ''; + this.fileSelected[i] = false; + this.UploadedFile[i].docName = null + this.UploadedFile[i].description = null; + this.UploadedFile[i].docType = null; + this.UploadedFile[i].documentSize = null; + this.UploadedFile[i].documentCategory = null; + this.UploadedFile[i].tenderId = null; + this.UploadedFile[i].userId = null; + }) + + } + + + +} diff --git a/src/app/_modules/analyst/home-view/home-view.component.html b/src/app/_modules/analyst/home-view/home-view.component.html new file mode 100644 index 0000000..e0cbf00 --- /dev/null +++ b/src/app/_modules/analyst/home-view/home-view.component.html @@ -0,0 +1,649 @@ +
+
+
+ +
+ + +
+ + + + + + + +
+
+

Tender Details

+
+
+
+ + +
+
+
+
+ +
+ + + +
+ + + +
+
+
+ How can I Validate Digital Signature? +
+
+
+
+ +
Connect Security Device +
+
    +
  • Plug in the security device that has the necessary security keys. +
  • +
+
Select Key Files +
+
    +
  • Choose the Public key files for both the secretary and the president, usually provided on the security + device. +
  • +
  • Locate the Public key document or file that you want to validate.
  • +
+
+
+ You can access Tender Reports only + after validating the digital signatures of President and Secretary. +
+
+ + + +
+ Close +
+
+
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Basic Details
Tender Category{{tenderData.tenderCategoryD?.productCategory}}
Organisation Name{{tenderData?.orgChain}}
Tender Reference Number{{tenderData.tenderRefNo}}
Tender ID{{tenderData.tenderId}}
Tender Type{{tenderData.tenderTypeD?.tenderType}}
Payment Mode{{tenderData.paymentModeD?.paymentMode}}
Form of Contract{{tenderData.formOfContractD?.formOfContract}}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + +
Tender Fee Details
Tender Fee in ₹{{tenderData.tenderFee ? tenderData.tenderFee : '0' }}
Fee Payable To{{tenderData.feePayableTo ? tenderData.feePayableTo : 'not applicable' }}
Tender Fee Exemption Allowed{{ tenderData.tenderFeeExemption !== null && tenderData.tenderFeeExemption !== '' ? tenderData.tenderFeeExemption : 'not applicable' }}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EMD Fee Details
EMD Fee Applicable{{tenderData.emdFeeApplied ? 'Yes' : 'No'}}
EMD Amount in ₹{{ tenderData.emdAmt !== undefined && tenderData.emdAmt !== null ? (tenderData.emdAmt !== 0 ? tenderData.emdAmt : 'not applicable') : 'not applicable' }}
EMD Fee Type{{tenderData.emdFeeTypeD?.emdFeeType ? tenderData.emdFeeTypeD?.emdFeeType : 'not applicable' }}
EMD Payable To{{tenderData.emdPayableTo ? tenderData.emdPayableTo : 'not applicable' }}
EMD through BG/ST or EMD Exemption Allowed{{tenderData.allowEmdBgOrSt ? tenderData.allowEmdBgOrSt : 'not applicable' }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Critical Dates
Published Date{{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale Start Date{{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale End Date{{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission Start Date{{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission End Date{{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Opening Date{{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work Item Details
Title{{tenderData.title}}
Work Description{{tenderData.workDesc}}
Pre Qualification{{tenderData.ndaPreQualification}}
Tender Value in ₹{{tenderData.tenderValue}}
Category{{tenderData?.productCategoryD?.tenderCategory}}
Sub category + + {{ subCategory.tendersubCategoryD?.tenderSubCategory }} + , + +
Bid Validity(Days){{tenderData.bidValidity}}
Period Of Work {{tenderData.periodOfWork}}
Location{{tenderData.location}}
Pincode{{tenderData.pincode}}
Bid Opening Place{{tenderData.bidOpeningPlace}}
Bid Opening Address{{tenderData.bidOpenAddress}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
Tenders Documents
Notice
Document TypeDocument NameDescriptionDownload
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
Work Item Documents
Document TypeDocument NameDescription
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
+ +

Documents can Only be download between {{tenderData.saleStartDate + | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}} +

+
Drawings Document
Description +

Documents can Only be download between {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}}

+ +
{{document.description}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Required Documents + Details
Document TypeDescriptionDocument Format
{{ document.coverTypeD.coverType }}{{ document.Description }}{{ document.fileFormatD.fileFormat }}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
Tender Inviting
Name{{tenderData.tenderInvName}}
Address{{tenderData.tenderInvAddess}}
+
+
+ + +
+
+
+
+
+ + +
+ + +
+ + + \ No newline at end of file diff --git a/src/app/_modules/analyst/home-view/home-view.component.scss b/src/app/_modules/analyst/home-view/home-view.component.scss new file mode 100644 index 0000000..4192ced --- /dev/null +++ b/src/app/_modules/analyst/home-view/home-view.component.scss @@ -0,0 +1,394 @@ +.container-fluid{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: 10px; + position: relative; +} +.container-fluid2{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: -1px; + position: relative; +} + +@media print { + .hide-on-print { + display: none; + } +} + + + + +.nav-link:hover { + color: rgb(255, 0, 0); +} +// #zipFile:hover { +// color: rgb(255, 0, 0); +// cursor: pointer; +// } + +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +// -------------------------------------------------------------------------------------------- +thead{ + // background-color: #5faca1; color: aliceblue; + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +.table td { + word-break: break-word; + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; +} + +.table th { + font-family: texg; + color: #353535; +} + +.tenderHeading{ + font-family: texg; + color: #353535; +} +.printButton { + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.printButton:hover { + background-color: #ececec; + color: #46AC9E; +} + +.payButton:hover { + background-color: #ececec; + color: #46AC9E; +} + + +.DownloadZipButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} +.DownloadZipButton:hover { + background-color: #ececec; + color: #46AC9E; +} + +.DownloadNoticeButton { + // float: right; + // margin-top: 5px; + // margin-bottom: 5px; + background-color: white; + // color: #424242; + color: #5faca1; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + +} +.DownloadNoticeButton:hover { + background-color: #ececec; + color: #303030; +} + +@media screen and (max-width: 768px) { + /* Adjust font size for smaller screens */ + .DownloadZipButton { + font-size: 14px; + } +} + +@media screen and (max-width: 480px) { + /* Further adjustments for even smaller screens */ + .DownloadZipButton { + font-size: 12px; + } +} + + + + +// ---------------------------------------digital signature------------------------------------------// + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; +} + +::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; +} + + +::ng-deep .mat-slide-toggle-label { + display: flex; + flex: 1; + flex-direction: row; + align-items: center; + height: inherit; + cursor: pointer; + +} + +.element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ +} + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.responsive-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.responsive-buttons button { + margin-left: 10px; /* Add some spacing between the buttons */ +} + +@media (max-width: 768px) { + .responsive-buttons { + flex-direction: row; + justify-content: flex-end; + align-items: center; + } +} + + +.master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/analyst/home-view/home-view.component.spec.ts b/src/app/_modules/analyst/home-view/home-view.component.spec.ts new file mode 100644 index 0000000..bd212a6 --- /dev/null +++ b/src/app/_modules/analyst/home-view/home-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeViewComponent } from './home-view.component'; + +describe('HomeViewComponent', () => { + let component: HomeViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/home-view/home-view.component.ts b/src/app/_modules/analyst/home-view/home-view.component.ts new file mode 100644 index 0000000..e61a59a --- /dev/null +++ b/src/app/_modules/analyst/home-view/home-view.component.ts @@ -0,0 +1,594 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TransactionService } from 'src/app/_providers/_services/transaction.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-home-view', + templateUrl: './home-view.component.html', + styleUrls: ['./home-view.component.scss'] +}) +export class HomeViewComponent implements OnInit { + + tenderId: number; + + tenderData: any; + + nitItemDocuments: any[] = []; + + workItemDocuments: any[] = []; + + drawingsDocuments: any[] = []; + + tenderDocuments: any; + + paymentDetails: PurchaseDto; + + tempID: any; + + newPaymentRow: any; + + currentDate = new Date(); + + enableDownload: boolean = true + + paymentStatus: string; + + userId: string; + + amountPaid: boolean = false; + + seculevel: string; + + displayedColumns: string[] = ['field', 'value']; + OnlinePayment: boolean; + showDownloadButton: boolean; + + // ------digital signature--------// + + showPopup:boolean = false; + fileSelected: boolean; + fileSelected2:boolean; + Secretary:any; + President:any; + selectedSecretaryFile: any; + selectedPresidentFile: any; + SecretarySigned: boolean; + PresidentSigned: boolean; + activeYn: any; + dialogRef: any; + newStatus: string; + CancelTenderButtons: boolean; + spinnerLoading: boolean = false; + // -------------- ---------------// + + + constructor( + private router: Router, + private route: ActivatedRoute, + private _masterService: MasterService, + private _transactionService: TransactionService, + private errorService:ErrorTranslateService, + private _ui: UiService, + private _errorTranslateService: ErrorTranslateService, + private dialog: MatDialog + ) { + this.seculevel = localStorage.getItem('seculevel') + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.paymentStatus = this.route.snapshot.paramMap.get('pay'); + this.getData() + + } + ngOnInit(): void { + this.tenderData = new TenderDetailDto() + this.userId = localStorage.getItem('userId') + this.seculevel = localStorage.getItem('seculevel') + this.enableDownload = true; + this.getData(); + this.getPaymentData(); + + this.fileSelected = false + this.fileSelected2 = false + } + + + + + + + + + getData() { + + let newDate = new Date(); + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + this.tenderData = res + if (res.tenderFeeExemption !== null && res.tenderFeeExemption !== undefined) { + this.tenderData.tenderFeeExemption = res.tenderFeeExemption.trim(); + } + + this.tenderDocuments = this.tenderData['tenderDoc'] + + this.activeYn = this.tenderData['activeYn']; + + if(this.activeYn == 'N'){ + this.CancelTenderButtons = true + }else if(this.activeYn == 'Y'){ + this.CancelTenderButtons = false + } + + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + const saleStartDate = new Date(this.tenderData.saleStartDate); + const saleEndDate = new Date(this.tenderData.saleEndDate); + + if (this.currentDate >= saleStartDate && this.currentDate <= saleEndDate) { + this.showDownloadButton = true; // Enable the button + } else { + this.showDownloadButton = false; // Disable the button + } + + + + this.filterDataByCategory(); + }) + } + + + getPaymentData() { + + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + }}) + + //} + + } + getUniqueSubCategories() { + if (!this.tenderData || !this.tenderData.subCategoryMaster) { + return []; + } + const uniqueSubCategories = []; + const subCategoryIds = new Set(); // To keep track of already added subcategory IDs + for (const subCategory of this.tenderData.subCategoryMaster) { + const subCategoryId = subCategory.tendersubCategoryD.tenderSubCategory; + if (!subCategoryIds.has(subCategoryId)) { + uniqueSubCategories.push(subCategory); + subCategoryIds.add(subCategoryId); + } + } + return uniqueSubCategories; + } + + print(): void { + window.print(); + } + + filterDataByCategory() { + + + this.drawingsDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'D'); + this.workItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'WID'); + this.nitItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'NIT'); + } + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + goToDashboard(){ + this.navigateTo(`analyst/dashboard`) + } + + DownloadDrawingsZIP() { + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + } else { + this.spinnerLoading = true; + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => { + // Download logic + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + }, err => { + if (err.status == 200) { + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } else { + // Handle other errors + } + }).finally(() => { + this.spinnerLoading = false; // Set spinnerLoading to false after download completes or fails + }); + } +} + + // DownloadDrawingsZIP() { + // // Your code to download the ZIP file goes here + + // // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // } + DownloadNIT(index: number) { + const id = this.tenderId; + + + + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => { + + } , err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10000); + } + if (err.status == 404) { + alert('No Notice Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + + + downloadWITZip() { + + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + + } + else { + const id = this.tenderId; + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10); + + this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + }, err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 1000); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + } + } + + + async paymentGateway() { + // this.paymentDetails = new PurchaseDto(); + // this.paymentDetails.application = this.tenderId; + // this.paymentDetails.mobile = localStorage.getItem('mobile') + // this.paymentDetails.email = "accuratesoftware2022@gmail.com"; + // this.paymentDetails.amount = this.tenderData.tenderFee; + // this.paymentDetails.type = "I" + + + // this._transactionService.createPayment(this.paymentDetails).then( + // res => { + // this.onSuccessPayment(res); + // }, + // err => { + // this.onFailurePayment(err); + // } + // ); + + + this.router.navigate([`qr-payment/${this.tenderId}`]) + + } + + onSuccessPayment(response) { + if (response.url) { + // Render PayUmoney payment gateway page + window.location.href = response.url; + } + } + + onFailurePayment(err) { + this._ui.toastMessage(err.message ? err.message : this._errorTranslateService.translate('errInSave'), 3000); + + } + + // ------------------------------------------------------------------------------------------- + + + + + CancelTender(id){ + this.showPopup = true; + this.showPopup = true; + } + closePopup() { + this.showPopup = false; + this.Secretary ='' + this.President = '' + } + + async UploadsecretaryFiles(event,SecretaryFile){ + + const allowedExtensions = ['cer']; + + this.selectedSecretaryFile = event.target.files[0]; + if (this.selectedSecretaryFile) { + + const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.Secretary = this.selectedSecretaryFile.name; + + + const formData = new FormData(); + formData.append('adminUser', '2'); + formData.append('certificate', this.selectedSecretaryFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + + }else{ + this.SecretarySigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + + + + }) + } + + + } + deleteSecretaryInput(){ + + } + + async UploadPresidentFiles(event,President){ + + const allowedExtensions = ['cer']; + + this.selectedPresidentFile = event.target.files[0]; + if (this.selectedPresidentFile) { + + const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.President = this.selectedPresidentFile.name; + + const formData = new FormData(); + formData.append('adminUser', '1'); + formData.append('certificate', this.selectedPresidentFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + + }else{ + this.PresidentSigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.PresidentSigned = false + this.President = '' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.PresidentSigned = false + this.President = '' + } + + + + }) + } + + + } + + deletePresidentInput(){ + + } + + + TenderCancelToggle(event){ + this.showPopup = true; + + } + + VerifySignature(){ + + const id = this.tenderId; + this.showPopup = true; + if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + return false + + }else if(this.President == null || this.President == '' || this.President == undefined){ + this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + return false + }else if(!this.SecretarySigned && !this.PresidentSigned){ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + // footer: 'Why do I have this issue?' + }) + return false + //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + }else if(this.SecretarySigned && this.PresidentSigned){ + + + + + this.activeYn = this.activeYn === 'N' ? 'Y' : 'N'; + + + let body ={ + activeYn: this.activeYn + } + this._masterService.postMasterData(apiUrl.TenderStatus,body,id).then((res) =>{ + + if(this.activeYn == 'N'){ + this.activeYn == 'N' + }else if(this.activeYn == 'Y'){ + this.activeYn == 'Y' + } + + + this._ui.toastMessage(res.data, 3000); + + + if(res.data == 'Digital Signature Expired'){ + this.activeYn == 'N' + } + this.closePopup() + }, + (err) => { + console.error(err); + this._ui.toastMessage(err.error.message, 3000); + } + ); + + this.showPopup = false; + } + } + + + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog(){ + this.dialogRef.close(); + } + + + + +} diff --git a/src/app/_modules/analyst/layout-component/layout-component.component.css b/src/app/_modules/analyst/layout-component/layout-component.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/analyst/layout-component/layout-component.component.html b/src/app/_modules/analyst/layout-component/layout-component.component.html new file mode 100644 index 0000000..872b7fe --- /dev/null +++ b/src/app/_modules/analyst/layout-component/layout-component.component.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/analyst/layout-component/layout-component.component.ts b/src/app/_modules/analyst/layout-component/layout-component.component.ts new file mode 100644 index 0000000..ce7a4ea --- /dev/null +++ b/src/app/_modules/analyst/layout-component/layout-component.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-layout-component', + templateUrl: './layout-component.component.html', + styleUrls: ['./layout-component.component.css'] +}) +export class LayoutComponentComponent implements OnInit { + + constructor( + private _ui: UiService, + ) { } + + async ngOnInit() { + + // await this._ui.userValidation() + } + +} diff --git a/src/app/_modules/analyst/payment-details/payment-details.component.html b/src/app/_modules/analyst/payment-details/payment-details.component.html new file mode 100644 index 0000000..2c01f39 --- /dev/null +++ b/src/app/_modules/analyst/payment-details/payment-details.component.html @@ -0,0 +1,220 @@ +
+ +
+ + + +
+ + + + +
+ + +
+
+

Payment Details

+
+ +
+

Tender Information:

+
+ + +
+
+ + {{'tender'|translate}} : + {{headerData?.title}} + +
+ +
+ + +
+
+ + {{'tenderId'|translate}} : + {{tenderInputId}} + +
+ +
+ +
+
+

Payment Summary:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + +
+ {{'TransactionId'|translate}} +
+ + + {{element?.transId}} + + +
+ + + + + + +
+ {{'Paymentstatus'|translate}} +
+ + + + + + Pending + Decline + Confirm + + + + + +
+ + + + + + + +
+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/analyst/payment-details/payment-details.component.scss b/src/app/_modules/analyst/payment-details/payment-details.component.scss new file mode 100644 index 0000000..17ddfdd --- /dev/null +++ b/src/app/_modules/analyst/payment-details/payment-details.component.scss @@ -0,0 +1,409 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + } + + mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media (max-width: 767px) { + .card { + min-width: 600px; + } + } + + + @media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } + } + + .mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); + } + + .table-container { + margin-top: 20px + } + + + .backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + + } + + .backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + } + + .printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + + .excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; + } + .buttonCardBottom{ + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-bottom: 20px; + } + + .reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; + } + + .bidHeading { + font-family: texg; + color: #353535; + } + + .tenderInfo { + font-family: texg; + color: #353535; + } + + .subHead { + font-family: texg; + color: #353535; + } + + .subDetail { + font-family: nucleo; + color: #353535; + } + + .captchaFont { + font-family: captcha; + font-size: large; + } + + .captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); + } + + .captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + .captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ + } + + .rotate-icon { + animation: rotate 1s infinite; + } + + @keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .table-responsive { + overflow-x: scroll; + } + \ No newline at end of file diff --git a/src/app/_modules/analyst/payment-details/payment-details.component.ts b/src/app/_modules/analyst/payment-details/payment-details.component.ts new file mode 100644 index 0000000..423c263 --- /dev/null +++ b/src/app/_modules/analyst/payment-details/payment-details.component.ts @@ -0,0 +1,142 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-payment-details', + templateUrl: './payment-details.component.html', + styleUrls: ['./payment-details.component.scss'] +}) +export class PaymentDetailsComponent implements OnInit { + + + title = 'Payment Details'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'transId', 'Paymentstatus']; + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + tenderInputId: any; + + + paymentStatus: any; + userId: string; + + constructor( + private _router: Router, + private _masterService: MasterService, + private route: ActivatedRoute, + private _ui:UiService, + ) { + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + } + + getHeaderData(id) { + this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => { + this.headerData = res; + + this.tenderInputId = res.tenderId + }) + } + + getTableData(id) { + this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => { + + this.tableData = res.report + this.tableData.forEach(element => { + if (element.status === 'P') { + element.paymentStatus = 'P'; + } + if(element.status === 'S'){ + element.paymentStatus = 'S'; + } + if(element.status === 'D'){ + element.paymentStatus = 'D'; + } + }); + + this.tableData.sort((a, b) => { + if (a.status === 'P' && b.status !== 'P') { + return -1; + } else if (a.status !== 'P' && b.status === 'P') { + return 1; + } else { + return 0; + } + }); + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this.navigateTo('admin/dashboard') + // this.backClick.emit() + } + + sortData(sort: Sort) {} + + onPaymentStatusChange(userId, paymentStatus){ + let message = ''; + if (paymentStatus === 'S') { + message = 'Payment confirmed message'; + } else if (paymentStatus === 'D') { + message = 'Payment declined message'; + } + + let body = { + status : paymentStatus, + notificationViewed:'N', + message:message + } + this._masterService.postMasterData(apiUrl.paymentupdatePaymentStatus,body,`${userId}/${this.tenderId}`).then((res) =>{ + + this._ui.toastMessage(res.data) + + },err=>{ + this._ui.toastMessage(err.error.message); + + + }) + } + + ConfirmMail(userName,email){ + + let body ={ + custName:userName, + email: email + } + this._masterService.saveMasterData(apiUrl.confirmPayment,body).then((res) =>{ + + + }) + + } + +} diff --git a/src/app/_modules/analyst/qr-payment/qr-payment.component.html b/src/app/_modules/analyst/qr-payment/qr-payment.component.html new file mode 100644 index 0000000..6ac5299 --- /dev/null +++ b/src/app/_modules/analyst/qr-payment/qr-payment.component.html @@ -0,0 +1,193 @@ + + + + + +
+
+
+ + +
+
+
+ {{ 'QRpayment' | translate }} +
+
+
+ help? +
+
+
+
+ + +
+
+

Current payment status :   {{paymentStatus}}

+

Amount need to be paid :  ₹{{amountReq}}/- + Only

+

Pay using any UPI app

+ + QR Code +
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+ +
+

Please provide the transaction id of payment you've made successfully.

+
+ + + Please Enter Transaction ID + + + +
+
+ +
+
+ +
+
+
+
+ + + + + + +
+
How can I pay?
+
    +
  • Launch the payment app on your smartphone
  • +
  • scan the code
  • +
  • After paying need to enter transaction ID for Completing the process
  • +
  • Review the payment details to ensure they're correct, and then confirm the transaction +
  • +
+
How do I get my Transaction Id?
+
    +
  • The method to obtain a transaction ID for a QR code payment can vary depending on the + payment app you're using and the platform through which you made the payment. Generally, + when you make a payment using a QR code, the transaction ID is usually generated and + provided to you as a confirmation of the completed payment. please check your payment + app or mail for Transaction ID
  • +
+
How can I ensure that the payment was successful?
+
    +
  • After your successfull payment,enter the transaction Id
  • +
  • After the confirmation from Bank, your payment status will be changed from Pending to + Paid
  • +
+
Can I change the Transaction ID once it has been saved?
+
    +
  • You can edit the transaction ID after saving also
  • +
  • Editing Must be before the appropriate date
  • +
+

more info : secretary@artnouveau.in

+ +
+ Close +
+
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/src/app/_modules/analyst/qr-payment/qr-payment.component.scss b/src/app/_modules/analyst/qr-payment/qr-payment.component.scss new file mode 100644 index 0000000..221ee11 --- /dev/null +++ b/src/app/_modules/analyst/qr-payment/qr-payment.component.scss @@ -0,0 +1,156 @@ +.payUpimsg{ + font-family: texg; + margin-bottom: 0px; +} + +.statusSpan{ + font-weight: bolder; + font-family: nucleo; + font-size: large; +} + +.normalText{ + font-family: nucleo; +} + +.btn1{ + font-family: nucleo; + font-size: 1rem; +} + + + +h6{ + font-family: nucleo; +} +.noFont{ + font-family: sans-serif; + font-weight: 600; +} + + +// -[-----------------------------------------------------------------]- + +.btn:hover, .btn1:hover { + background-color: #ebeaea; + color: #46AC9E; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.popup-card { + background-color: #ffffff; + width: 100%; + max-width: 600px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; +} + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + + // margin-left: 64px; + } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; + +// } + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: auto; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: 1rem; + padding: 10px; + font-family: nucleo; + width: 270px; + + } + .normalTextIN{ + color: #505050; + font-weight: 700; + font-size: small; + font-family: nucleo; + font-size: 1rem; + } + + +.centered-heading { + text-align: center; + margin-bottom: 20px; +} + + +.centered-form-content { + text-align: center; + padding: 0 20px; +} + +.centered-button { + text-align: center; + display: flex; + justify-content: center; + align-items: center; + margin-top: 20px; +} + + + +::ng-deep .mat-form-field-flex{ + background-color: #f0f0f0; +} + + + + +@media screen and (max-width: 600px) { + .centered-heading { + font-size: 1.2rem; + } +} + + + +@media (max-width: 767px) { + .responsive-container { + padding: 10px; + } + + .custom-tab-group { + width: 100%; + } + + .centered-form-content { + padding: 10px; + } + + .col-md-3, + .col-md-6 { + flex-basis: 100%; + } +} + + +@media (min-width: 768px) and (max-width: 991px) { + .col-md-3, + .col-md-6 { + flex-basis: 50%; + } +} + +.center-container { + display: flex; + justify-content: center; /* Horizontally center */ + // align-items: center; /* Vertically center */ + // height: 100vh; /* Make the container cover the viewport vertically */ + // background-color: rgba(0, 0, 0, 0.5); /* Optional overlay background */ +} \ No newline at end of file diff --git a/src/app/_modules/analyst/qr-payment/qr-payment.component.spec.ts b/src/app/_modules/analyst/qr-payment/qr-payment.component.spec.ts new file mode 100644 index 0000000..11289ca --- /dev/null +++ b/src/app/_modules/analyst/qr-payment/qr-payment.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { QrPaymentComponent } from './qr-payment.component'; + +describe('QrPaymentComponent', () => { + let component: QrPaymentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ QrPaymentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(QrPaymentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/qr-payment/qr-payment.component.ts b/src/app/_modules/analyst/qr-payment/qr-payment.component.ts new file mode 100644 index 0000000..34734f3 --- /dev/null +++ b/src/app/_modules/analyst/qr-payment/qr-payment.component.ts @@ -0,0 +1,186 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as QRCode from 'qrcode'; +import { PaymentInfoDto } from 'src/app/_dto/payment-info.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; + +@Component({ + selector: 'app-qr-payment', + templateUrl: './qr-payment.component.html', + styleUrls: ['./qr-payment.component.scss'] +}) +export class QrPaymentComponent implements OnInit { + + secuLevel: string; + + userId: string; + + tenderId: number; + + transactionData: PaymentInfoDto; + + amountReq: any; + + dialogRef: any; + + paymentStatus: any; + + paymentId: any; + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + private dialog: MatDialog, + private datePipe: DatePipe + ) { + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + qrImage: boolean = false; + + transId: any + + ngOnInit(): void { + + this.transactionData = new PaymentInfoDto() + + this.getData(); + } + + + // ngAfterViewInit(): void { + + // setTimeout(() => { + // }, 1000); + // } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.getTender, this.tenderId).then(res => { + this.amountReq = res.tenderFee; + this.generateUPIQRCode(environment.upiId, this.amountReq); + + }) + this.paymentCheck(); + + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + + if (res && res[0].status) { + if (res[0].status == 'P') { + this.paymentStatus = 'Pending' + } + if (res[0].status == 'D') { + this.paymentStatus = 'Declined' + } + if (res[0].status == 'S') { + this.paymentStatus = 'Success' + } + this.paymentId = res[0].id + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.paymentStatus = 'Payment Not Started' + this.transactionData.status = 'P' + } + }) + } + generateUPIQRCode(upiID: string, amount: string): void { + const upiLink = `upi://pay?pa=${upiID}&am=${amount}&tn=Tender%20Fee`; + + QRCode.toDataURL(upiLink, { errorCorrectionLevel: 'L' }, (err, qrDataURL) => { + if (err) { + console.error(err); + return; + } + + + const qrImageElement = document.getElementById('qrImage') as HTMLImageElement; + qrImageElement.src = qrDataURL; + this.qrImage = true + + }); + } + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog() { + this.dialogRef.close() + } + + nextTab() { + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + prevTab() { + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + + preSave() { + + if (this.transactionData.transId == 0 || this.transactionData.transId == null || this.transactionData.transId == undefined) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterTransId"), 2000, true); + return false; + } + + + + return true; + } + + submit() { + if (!this.preSave()) + return + + this.transactionData.userId = this.userId; + this.transactionData.tenderId = this.tenderId; + + + + if(this.paymentId){ + this.transactionData.id = this.paymentId + this._masterService.updateMasterData(apiUrl.paymentMaster, this.transactionData,this.paymentId).then(res=>{ + + this.transactionData = new PaymentInfoDto() + this.getData(); + + }) + } + else + this._masterService.saveMasterData(apiUrl.paymentInfo, this.transactionData).then(res => { + + this.transactionData = new PaymentInfoDto() + this.getData(); + }) + } +} diff --git a/src/app/_modules/analyst/tender-home/tender-home.component.html b/src/app/_modules/analyst/tender-home/tender-home.component.html new file mode 100644 index 0000000..d13567c --- /dev/null +++ b/src/app/_modules/analyst/tender-home/tender-home.component.html @@ -0,0 +1,93 @@ +
+ + + + + + + + + +

+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
#TENDER NAMEVIEWUPLOAD
{{ i + 1 }}{{ tender.name }} + + + +
+
+
+
+
+
+


+ + + +
\ No newline at end of file diff --git a/src/app/_modules/analyst/tender-home/tender-home.component.scss b/src/app/_modules/analyst/tender-home/tender-home.component.scss new file mode 100644 index 0000000..55e3ab1 --- /dev/null +++ b/src/app/_modules/analyst/tender-home/tender-home.component.scss @@ -0,0 +1,72 @@ +// .header { + // margin-left: 4%; + // margin-top: 20px; + // } + + // .header>h6{ + // a { + // text-decoration: none; + // color: #262627; + // } + + // a:hover { + // text-decoration: underline; + // cursor: pointer; + // } + // } + + // mat-card{ + // min-width: 180px ; + // // max-width: 20vw; + // height: 200px; + // display: inline-block; + // } + + // mat-card:hover{ + // cursor: pointer; + // } + + + // ----------------------------------------------------------------------------------- + + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + border: 1px solid #ccc; + white-space: nowrap; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } \ No newline at end of file diff --git a/src/app/_modules/analyst/tender-home/tender-home.component.spec.ts b/src/app/_modules/analyst/tender-home/tender-home.component.spec.ts new file mode 100644 index 0000000..2b846a2 --- /dev/null +++ b/src/app/_modules/analyst/tender-home/tender-home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderHomeComponent } from './tender-home.component'; + +describe('TenderHomeComponent', () => { + let component: TenderHomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderHomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenderHomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/analyst/tender-home/tender-home.component.ts b/src/app/_modules/analyst/tender-home/tender-home.component.ts new file mode 100644 index 0000000..8de17c2 --- /dev/null +++ b/src/app/_modules/analyst/tender-home/tender-home.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-tender-home', + templateUrl: './tender-home.component.html', + styleUrls: ['./tender-home.component.scss'] +}) +export class TenderHomeComponent implements OnInit { + + + + displayedColumns: string[] = ['no', 'name','download']; + data:any[] = [ + { no:1,name:'Tender 1', city: 'New York' }, + { no:2 , name:'Tender 2', city: 'London' }, + { no:3 , name:'Tender 3', city: 'Paris' }, + + ]; + constructor( private authenticationService: AuthService, + private router: Router,) { } + + ngOnInit(): void { + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView() { + this.router.navigate(['/tender-view']); + } + + goToUpload(){ + this.router.navigate(['/tender-upload']); + } + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + +} + diff --git a/src/app/_modules/auth/admin-home/admin-home.component.html b/src/app/_modules/auth/admin-home/admin-home.component.html new file mode 100644 index 0000000..a309d7d --- /dev/null +++ b/src/app/_modules/auth/admin-home/admin-home.component.html @@ -0,0 +1,191 @@ +
+
+ + + + + + + + +
+
+
+
+
+
+ + + + +
+
+ + search + + + + + + +
+
+
+
+ + + + + + + + {{ 'slno' | translate }} + + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + + {{ 'bidOpenDate' | translate }} + + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + + {{ 'view' | translate }} + + + + + + + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+
+


+ + +
\ No newline at end of file diff --git a/src/app/_modules/auth/admin-home/admin-home.component.scss b/src/app/_modules/auth/admin-home/admin-home.component.scss new file mode 100644 index 0000000..c3aa901 --- /dev/null +++ b/src/app/_modules/auth/admin-home/admin-home.component.scss @@ -0,0 +1,350 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + // padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -70px; + margin-top: 7px; +} + +mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + background-color: #ececec; + font-family:nucleo; + text-align: center; + + } + + .table-headers:hover { + background-color: #ececec; + color:#46AC9E; + + + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + + + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media (max-width: 767px) { + .card { + min-width: 900px; + } +} + + +.mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); +} +.viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} +.editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + +} + +.editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + + +.activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; +} + +.awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; +} + +.closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; +} +.searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + +} + +.backImage{ + // position: fixed; + // left: 0; + // bottom: 0; + width: 100%; + // height:85%; + background-image: url('/assets/img/houstone_line1.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + padding: 10px; + z-index: 1; +} \ No newline at end of file diff --git a/src/app/_modules/auth/admin-home/admin-home.component.spec.ts b/src/app/_modules/auth/admin-home/admin-home.component.spec.ts new file mode 100644 index 0000000..67caac1 --- /dev/null +++ b/src/app/_modules/auth/admin-home/admin-home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AdminHomeComponent } from './admin-home.component'; + +describe('AdminHomeComponent', () => { + let component: AdminHomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AdminHomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AdminHomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/auth/admin-home/admin-home.component.ts b/src/app/_modules/auth/admin-home/admin-home.component.ts new file mode 100644 index 0000000..d408c3e --- /dev/null +++ b/src/app/_modules/auth/admin-home/admin-home.component.ts @@ -0,0 +1,167 @@ +import { Component, OnInit,ViewChild } from '@angular/core'; +import { Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +@Component({ + selector: 'app-admin-home', + templateUrl: './admin-home.component.html', + styleUrls: ['./admin-home.component.scss'] +}) +export class AdminHomeComponent implements OnInit { + + tenderData: any; + + dataSource: MatTableDataSource; + + displayedColumns = ['slno','title','publishedDate','bidOpenDate','view']; + + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + loading: boolean = true; + + noData: boolean; + + constructor( + private authenticationService: AuthService, + private router: Router, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private _ui: UiService, + ) { } + + ngOnInit(): void { + this.getData() + } + + getData(){ + + this._masterService.getMasterData(apiUrl.getTender +'?order[id]=DESC').then((res) =>{ + // console.log("tenderData=1=",res); + this.tenderData = res; + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + },err=>{ + console.error(err) + }) + + } + public signOut(): void { + + this.authenticationService.logOut(); + + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId:number) { + this.router.navigate(['/auth/view',tenderId]); + } + + goToUpload(tenderId){ + this.router.navigate(['/tender-upload',tenderId]); + } + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + + sortData(sort: Sort) { + + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + default: + return 0; + } + }); + } + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} \ No newline at end of file diff --git a/src/app/_modules/auth/auth-routing.module.ts b/src/app/_modules/auth/auth-routing.module.ts new file mode 100644 index 0000000..bf47eeb --- /dev/null +++ b/src/app/_modules/auth/auth-routing.module.ts @@ -0,0 +1,38 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { ForgotPasswordComponent } from './forgot-password/forgot-password.component'; +import { LoginComponent } from './login/login.component'; +import { AdminHomeComponent } from './admin-home/admin-home.component'; +import { ViewComponent } from './view/view.component'; +import { UploadComponent } from './upload/upload.component'; +import { RegisterComponent } from './register/register.component'; +import { WebsiteComponent } from './website/website.component'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent,children: [ + { path: '', redirectTo: 'admin-home', pathMatch: 'full' }, + // { path: 'website', component: WebsiteComponent }, + { path: 'admin-home', component: AdminHomeComponent }, + { path: 'login', component: LoginComponent }, + { path: 'view/:id', component: ViewComponent }, + { path: 'upload', component: UploadComponent }, + { path: 'reset-password', component: ForgotPasswordComponent }, + { path: 'register', component: RegisterComponent } + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class AuthRoutingModule { } +export const authComponents = [ + AdminHomeComponent, + LoginComponent, + ForgotPasswordComponent, + RegisterComponent, + LayoutComponentComponent +]; diff --git a/src/app/_modules/auth/auth.module.ts b/src/app/_modules/auth/auth.module.ts new file mode 100644 index 0000000..42e78a8 --- /dev/null +++ b/src/app/_modules/auth/auth.module.ts @@ -0,0 +1,74 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { authComponents, AuthRoutingModule } from './auth-routing.module'; +import { MatCardModule } from '@angular/material/card'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatInputModule } from '@angular/material/input'; +import { MatIconModule } from '@angular/material/icon'; +import { MatButtonModule } from '@angular/material/button'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatSelectModule } from '@angular/material/select'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { TranslateModule } from '@ngx-translate/core'; +import { NgOtpInputModule } from 'ng-otp-input'; +import { ViewComponent } from './view/view.component'; +import { UploadComponent } from './upload/upload.component'; +import { RegisterComponent } from './register/register.component'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatTableModule } from '@angular/material/table'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatSortModule } from '@angular/material/sort'; +import { WebsiteComponent } from './website/website.component'; +import { AdminHomeComponent } from './admin-home/admin-home.component'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { HeaderModule } from "../../shared/header/header.module"; +import { SharedModule } from "../../shared/shared.module"; +import { MatListModule } from '@angular/material/list'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; + +// import { AdminHomeComponent } from './admin-home/admin-home.component'; + + +@NgModule({ + declarations: [ + authComponents, + ViewComponent, + UploadComponent, + RegisterComponent, + WebsiteComponent, + AdminHomeComponent, + LayoutComponentComponent + ], + imports: [ + CommonModule, + AuthRoutingModule, + MatCardModule, + FormsModule, + ReactiveFormsModule, + MatInputModule, + MatIconModule, + MatButtonModule, + MatToolbarModule, + MatTooltipModule, + MatSelectModule, + MatDatepickerModule, + MatProgressBarModule, + TranslateModule, + NgOtpInputModule, + MatFormFieldModule, + MatTableModule, + MatPaginatorModule, + MatSortModule, + MatCheckboxModule, + ReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'never' }), + HeaderModule, + SharedModule, + MatListModule, + MatProgressSpinnerModule + ] +}) +export class AuthModule { } diff --git a/src/app/_modules/auth/forgot-password/forgot-password.component.html b/src/app/_modules/auth/forgot-password/forgot-password.component.html new file mode 100644 index 0000000..0f47764 --- /dev/null +++ b/src/app/_modules/auth/forgot-password/forgot-password.component.html @@ -0,0 +1,117 @@ +
+ +
+ +
+ +
+ +
+
+ + +
+ + + {{ 'forgotYourPass' | translate }}
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ + + +
+ +
+ {{ 'forgotYourPass' | translate }} + +
+ +
+
+ + +
+

+ + + +

+

+ + Passcode + + +

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

+ + + +

+ +

+ + + +

+ +
+ +
+ +
+
+
+
+
+ + +
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/auth/forgot-password/forgot-password.component.scss b/src/app/_modules/auth/forgot-password/forgot-password.component.scss new file mode 100644 index 0000000..12b6667 --- /dev/null +++ b/src/app/_modules/auth/forgot-password/forgot-password.component.scss @@ -0,0 +1,150 @@ + + +.row{ + display: flex; + justify-content: center; + align-items: center; + } + + .card-style { + display: flex; + justify-content: center; + margin: 100px 0px; + } + + .mat-form-field { + padding: 0; + width: 100%; + // min-width: 300px; + + input { + // height: 5vh; + width: 100%; + // background-color: aliceblue; + border-bottom: 1px solid silver; + } + } + + mat-card-title, + mat-card-content { + display: flex; + justify-content: center; + } + + .error { + padding: 16px; + width: 300px; + color: white; + background-color: red; + } + + .button { + display: flex; + justify-content: center; + align-items: center; + } + + .sendOTP{ + border: 1px solid #295754; + color: #ffffff; + background-color: #295754; + width: 100%; + border-radius: 30px; + height: 35px; + font-family: nucleo; + + } + + .sendOTP:hover{ + background-color: #1c4441; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + +.backImg{ + height: 70%; + position: fixed; + left: 0; + bottom: 0; + width: 100%; + background-image: url('/assets/img/houstone_line1.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + padding: 10px; + z-index: 1; +} +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + top:-70px; +} + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + +.verifyOtpButton{ + border: 1px solid #295754; + color: #ffffff; + background-color: #295754; + width: 54%; + border-radius: 30px; + height: 35px; + font-family: nucleo; +} + +.verifyOtpButton:hover{ + background-color: #1c4441; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.resendOtpButton{ + border: 1px solid #295754; + color: #295754; + background-color: #ffffff; + // width: 100%; + border-radius: 30px; + height: 35px; + font-family: nucleo; +} + +.resendOtpButton:hover{ + background-color: #ebebeb; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} +.changePassButton{ + border: 1px solid #295754; + color: #ffffff; + background-color: #295754; + width: 100%; + border-radius: 30px; + height: 35px; + font-family: nucleo; +} + + +.changePassButton:hover{ + background-color: #1c4441; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.forgotImage{ + background-image: url('/assets/img/forgot.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + height: 250px; + width: 250px; +} + +@media screen and (max-width: 767px) { + .resetSpan { + font-size: large; + + } +} \ No newline at end of file diff --git a/src/app/_modules/auth/forgot-password/forgot-password.component.ts b/src/app/_modules/auth/forgot-password/forgot-password.component.ts new file mode 100644 index 0000000..77e2416 --- /dev/null +++ b/src/app/_modules/auth/forgot-password/forgot-password.component.ts @@ -0,0 +1,197 @@ +import { Component, OnInit } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, Router } from '@angular/router'; +import { AuthenticationDto } from 'src/app/_dto/authentication.dto'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-forgot-password', + templateUrl: './forgot-password.component.html', + styleUrls: ['./forgot-password.component.scss'] +}) +export class ForgotPasswordComponent implements OnInit { + + img: string; + + loginForm: UntypedFormGroup; + + user: AuthenticationDto = new AuthenticationDto(); + + forgotCard:boolean = false + + config = { + allowNumbersOnly: true, + length: 6, + inputStyles: { + width: "25px", + height: "25px", + }, + } + otpValue: any; + + isVisibleOtp: boolean = false; + + loading: boolean = false; + + timeOut: boolean = false; + + timeLeft: number; + + time: any; + + isNewPasswordScreen: boolean = false; + + institute: any; + + constructor( + private _activeRouter: ActivatedRoute, + private formBuilder: UntypedFormBuilder, + private _ui: UiService, + private errorTranslateService: ErrorTranslateService, + private service: AuthService, + private router: Router + ) { } + + async ngOnInit() { + + this.loginForm = this.formBuilder.group({ + username: [''], + password: [''], + confpassword: [''], + }); + + await this._activeRouter.queryParams + .subscribe( + async (params) => { + let school = params.school; + this.institute = params.school; + this.img = "../../../../assets/accurate/images/" + school + ".png" + }); + } + + async sendOTP() { + this.timeOut = true; + if (!this.user.username || this.user.username.trim() == "") { + this._ui.toastMessage(this.errorTranslateService.translate("userNameCantbeBlank")); + this.loading = false; + this.timeOut = false; + return; + } + if (!this._ui.emailValidation(this.user.username)) { + this._ui.toastMessage(this.errorTranslateService.translate("enterAValidEmailID")); + return; + } + + await this.service.sendOtp({ email: this.user.username }, 'F').then(res => { + this.loading = false; + this.isVisibleOtp = true; + this._ui.toastMessage(this.errorTranslateService.translate("otpSendSuccess")); + }, (err) => { + this.timeOut = false; + console.log("-------err-----", err); + this._ui.toastMessage(err.message ? err.error.message : this.errorTranslateService.translate('errInSave'), 3000); + }); + this.setTimer() + } + + setTimer() { + // console.log("here"); + this.timeLeft = 300; + this.time = setInterval(() => { + if (this.timeLeft > 0) { + this.timeLeft--; + } else { + this.timeOut = false; + clearInterval(this.time); + } + }, 1000) + + } + + async onVerifyOtp() { + if (!this.otpValue || this.otpValue.length != 6) { + this._ui.toastMessage(this.errorTranslateService.translate("enterValidOtp")); + return + } + if (this.otpValue && this.user.username) { + let body: { otp: string, email: string } = { otp: '', email: '' }; + body.otp = this.otpValue; + body.email = this.user.username; + await this.service.verifyOtp(body, 'F').then(res => { + // this.visibleOtp = false; + // this.showNewPassword = true; + this._ui.toastMessage(this.errorTranslateService.translate("otpVerifiedSuccess")); + + this.isNewPasswordScreen = true; + }, (err) => { + console.log("-------err-----", err); + this._ui.toastMessage(err.message ? err.error.message : this.errorTranslateService.translate('errInSave'), 3000); + }) + } + } + + async resendOTP() { + this.timeOut = true; + this.otpValue = null; + this.setTimer(); + setTimeout(() => { + }, 0); + if (this.user.username && !(this.user.username.trim() == "")) { + await this.service.sendOtp({ email: this.user.username }, 'FR').then(async res => { + this._ui.toastMessage(this.errorTranslateService.translate("otpSendSuccess")); + }, (err) => { + this._ui.toastMessage(err.message ? err.error.message : this.errorTranslateService.translate('errInSave'), 3000); + }) + } + else + this._ui.toastMessage(this.errorTranslateService.translate("userNameCantbeBlank")); + } + + onOtpChange(otp) { + this.otpValue = otp; + // console.log("==otp==", this.otpValue.length); + } + + goToLogin() { + this.router.navigate(["auth/login"]); + } + + async passwordPreSave(): Promise { + if (!this.user.password || this.user.password == "" || this.user.password.trim() == "") { + this._ui.toastMessage(this.errorTranslateService.translate("passwordCantbeBlank")); + return false; + } + if (this.user.password.length < 6) { + this._ui.toastMessage(this.errorTranslateService.translate("minimumPasswordLenght")); + return false; + } + if (!this.user.confpassword || this.user.confpassword == "" || this.user.confpassword.trim() == "") { + this._ui.toastMessage(this.errorTranslateService.translate("confirmPasswordCantbeBlank")); + return false; + } + if (this.user.password != this.user.confpassword) { + this._ui.toastMessage(this.errorTranslateService.translate("passwordMismatch")); + return false; + } + return true; + } + + async onSubmit() { + if (!(await this.passwordPreSave())) { + return; + } + + this.service.forgotPassword({ pass: this.user.password, email: this.user.username, otp: this.otpValue }).then(async (res) => { + this._ui.toastMessage(this.errorTranslateService.translate("passwordChangeSuccess")); + await this.router.navigate(["auth/login"]); + + }, (err) => { + console.log("--", err); + this._ui.toastMessage(err.message ? err.error.message : this.errorTranslateService.translate('errInSave'), 3000); + + }) + } + +} diff --git a/src/app/_modules/auth/layout-component/layout-component.component.css b/src/app/_modules/auth/layout-component/layout-component.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/auth/layout-component/layout-component.component.html b/src/app/_modules/auth/layout-component/layout-component.component.html new file mode 100644 index 0000000..59d944b --- /dev/null +++ b/src/app/_modules/auth/layout-component/layout-component.component.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/auth/layout-component/layout-component.component.ts b/src/app/_modules/auth/layout-component/layout-component.component.ts new file mode 100644 index 0000000..ce7a4ea --- /dev/null +++ b/src/app/_modules/auth/layout-component/layout-component.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-layout-component', + templateUrl: './layout-component.component.html', + styleUrls: ['./layout-component.component.css'] +}) +export class LayoutComponentComponent implements OnInit { + + constructor( + private _ui: UiService, + ) { } + + async ngOnInit() { + + // await this._ui.userValidation() + } + +} diff --git a/src/app/_modules/auth/login/login.component.html b/src/app/_modules/auth/login/login.component.html new file mode 100644 index 0000000..1301c92 --- /dev/null +++ b/src/app/_modules/auth/login/login.component.html @@ -0,0 +1,125 @@ +
+ + + + + +
+ +
+
+ +
+ +
+ +
+
+
+
+ + + + + + + \ No newline at end of file diff --git a/src/app/_modules/auth/login/login.component.scss b/src/app/_modules/auth/login/login.component.scss new file mode 100644 index 0000000..d05af9d --- /dev/null +++ b/src/app/_modules/auth/login/login.component.scss @@ -0,0 +1,171 @@ +// :host { +// display: flex; +// justify-content: center; +// margin: 100px 0px; +// } +.custom-toolbar { + margin:0 +} + +.row{ + display: flex; + justify-content: center; + align-items: center; +} + +.card-style { + display: flex; + justify-content: center; + margin: 100px 0px; + +} + +.loginCard{ + box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important; + border-radius: 17px; + + +} + +.login-card{ + box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important; + border-radius: 17px; + max-width: 50vh; + width: 50vh; + border: 1px solid #dee4ff +} + + +.mat-form-field { + padding: 0; + width: 100%; + // min-width: 300px; + + input { + // height: 5vh; + width: 100%; + // background-color: aliceblue; + border-bottom: 1px solid silver; + } +} + +mat-card-title, +mat-card-content { + display: flex; + justify-content: center; +} + +.error { + padding: 16px; + width: 300px; + color: white; + background-color: red; +} + +.nav-link:hover { + color: red; +} + + +.button { + display: flex; + justify-content: center; + align-items: center; +} + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + + +.fixed-bottom { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + // background-color: aqua; + height: 70%; + background-image: url('/assets/img/houstone_line1.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + padding: 10px; + z-index: 1; +} + +@media (max-width: 767px) { +.form{ + width: 85% !important; +} +} +.eye-icon{ + cursor: pointer; +} + +.c-wrapper { + position: relative; + z-index: 2; /* Set a higher z-index for the wrapper to overlay it over the footer */ + margin: 0; + /* Add any other styling you want for the wrapper */ +} + +.loginSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xxx-large; + margin-left: 64px; + +} + +.forgotSpan{ + font-size: small; + color: #234442; + text-decoration: auto; + cursor: pointer; + font-family: nucleo; + +} + +.signUpButton{ + color: #ffffff; + background-color: #234442; + border-radius: 30px; + font-family: nucleo; + padding: 6px 20px 8px 19px; + cursor: pointer; + min-width: 91px; + width: 91px; + display: flex; +} + + + +.signUpButton:hover{ + background-color: #16312f; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.loginButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + border: 1px solid #16312f; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #16312f; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 100%; + +} + +.loginButton:hover{ + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); +} \ No newline at end of file diff --git a/src/app/_modules/auth/login/login.component.ts b/src/app/_modules/auth/login/login.component.ts new file mode 100644 index 0000000..025ae0b --- /dev/null +++ b/src/app/_modules/auth/login/login.component.ts @@ -0,0 +1,213 @@ +import { Component, OnInit } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { ActivatedRoute, ParamMap, Router } from '@angular/router'; +import { AuthenticationDto } from 'src/app/_dto/authentication.dto'; +import { routePath } from 'src/app/_providers/_resources/route-path.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-login', + templateUrl: './login.component.html', + styleUrls: ['./login.component.scss'] +}) +export class LoginComponent implements OnInit { + + user: AuthenticationDto = new AuthenticationDto(); + loginForm: UntypedFormGroup; + loading = false; + submitted = false; + returnUrl: string; + error = ''; + id: string; + img: string; + + + + constructor( + private service: AuthService, + private formBuilder: UntypedFormBuilder, + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private errorTranslateService: ErrorTranslateService, + private _activeRouter: ActivatedRoute + ) { } + + ngOnInit() { + this._activeRouter.paramMap.subscribe(async (param: ParamMap) => { + if (param.get('id')) { + this.id = param.get('id'); + localStorage.setItem('institute', this.id) + this.img = "../../../../assets/accurate/images/" + this.id + ".png" + } + + }) + this.loginForm = this.formBuilder.group({ + username: ['', Validators.required], + password: ['', Validators.required] + }); + + // get return url from route parameters or default to '/' + // this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/'; + // localStorage.setItem('returnUrl',this.returnUrl) + // } + this.route.queryParams.subscribe(params => { + + this.returnUrl = params['returnUrl'] ; + +}); + } + // openSnackBar(message: string, action: string) { + // this._snackBar.open(message, action); + // } + + + // convenience getter for easy access to form fields + get f() { return this.loginForm.controls; } + + preSave() { + if (!this.user.username || this.user.username == null) { + this._ui.toastMessage(this.errorTranslateService.translate("userNameCantbeBlank")); + return false; + } + if (!this.user.password || this.user.password == null) { + this._ui.toastMessage(this.errorTranslateService.translate("passwordCantbeBlank")); + return false; + } + return true; + } + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + + onSubmit() { + if (!this.preSave()) + return + this.loading = true; + this.error = ""; + this.submitted = true; + + if (this.loginForm.invalid) { + this.loading = false; + return; + } + + this.service.signIn(this.user) + .then(async (res: any) => { + // localStorage.setItem('seculevel', res.seculevel); + localStorage.setItem('authtoken', res.accessToken); + localStorage.setItem('refreshtoken', res.refreshToken); + localStorage.setItem('emailId', res.emailId); + + + + await this._ui.getUserInfo({ username: this.user.username }).then((res) => { + + + localStorage.setItem('username', res.username); + localStorage.setItem('userId', res.userId); + localStorage.setItem('mobile', res.mobile); + localStorage.setItem('seculevel', res.secuLevel); + + + if(res.secuLevel && res.secuLevel=='Admin'){ + this.router.navigate([routePath.admin]); + } + if(res.secuLevel && res.secuLevel=='SuperAdmin'){ + this.router.navigate([routePath.superAdmin]); + } + if(res.secuLevel && res.secuLevel=='Analyst'){ + this.router.navigate([routePath.analyst]); + } + if(res.secuLevel && res.secuLevel=='User'){ + this.router.navigate([routePath.user]); + } + }, (err) => { + this._ui.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi')); + }); + + + if(this.returnUrl){ + this.router.navigate([this.returnUrl]); + localStorage.removeItem('returnUrl') + } + else{ + + this.user.password = ''; + this.error = ''; + } + }, (err) => { + this.loading = false; + localStorage.setItem('authtoken', ''); + localStorage.setItem('refreshtoken', ''); + localStorage.setItem('emailId', ''); + localStorage.removeItem('authtoken'); + localStorage.removeItem('refreshtoken'); + localStorage.removeItem('media'); + localStorage.removeItem('emailId'); + localStorage.removeItem('passwordVersion'); + + if (err.status == 0) { + this.error = "* Failed to load Database"; + this.loading = false; + setTimeout(() => { + this.error = '' + }, 3000); + } else if (err.status == 422) { + this.error = "* Not Registered"; + this.loading = false; + setTimeout(() => { + this.error = '' + }, 3000); + } + else if (err.status == 500) { + this.error = "* Invalid Credentials"; + this.loading = false; + setTimeout(() => { + this.error = '' + }, 3000); + } + else if (err.status == 400) { + this.error = err.error.message; + this.loading = false; + setTimeout(() => { + this.error = '' + }, 3000); + } + else if (err.status == 401) { + this.error = err.error.message; + this.loading = false; + setTimeout(() => { + this.error = '' + }, 3000); + } + else { + // if (isArray(err.error.message)) { + // const error = err.error.message[0].constraints; + // if (error?.minLength) + // this.error = '* ' + error.minLength; + // this.loading = false; + // } else { + // this.error = '* ' + err.error.message; + // this.loading = false; + // } + } + this._ui.toastMessage(this.error, 2000); + }); + + } + + async goToRegister() { + await this.router.navigate(["auth/register"]); + } + + async goToForgotPassword() { + await this.router.navigate(["auth/reset-password"], { queryParams: {school:this.id} }); + } +} diff --git a/src/app/_modules/auth/register/register.component.html b/src/app/_modules/auth/register/register.component.html new file mode 100644 index 0000000..a870b38 --- /dev/null +++ b/src/app/_modules/auth/register/register.component.html @@ -0,0 +1,387 @@ + + +
+ +
+ + + + +
+ +
+
+ +
+ + +
+ + +
+
+ + {{ 'register' | translate }} + + +
+ + +
+ + + +
+ +
+ +
+
+
+
+
+ +
+
+
+ + + + +
+ +
+ + {{ 'enterOtp' | translate }} + + + +
+
+ {{ 'Please check both inbox and spam folder for OTP.' | translate }}

+

+
+ +
+
+ +
+ + +
+ +
+ +
+
+ +
+ + +
+ + +
+
+ + {{ 'register' | translate }} + + +
+ +
+ + + + User Name + + + + +
+ + + +
+ + Mobile Number + + +
+ +
+ + Password + + +
+ +
+ + Confirm Password + + +
+ + + + + + + + + + +
+ + + + Company profile + + {{ 'companyProfile' | translate }} + + + + + + + + +
+ + +
+ + + + Project Completed certificate + + {{ 'projectCompletedCert' | translate }} + + + + + + + + +
+ +
+ + maximum value of single project completed till date + + +
+
+ +
+
+
+
+
+ +
+
+
+
+ + + +
+ + +
Select Category
+ + +
+
+ +
+
+ +
+
+ + + {{category.tenderCategory}} + + + + +
+
+
+
+ + +
+ +
+
+ +
+ +
+
+ + + +
+
+ + {{subCategory.tenderSubCategory}} + +
+ +
+
+
+ + +
+
+
+
+ + +
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
\ No newline at end of file diff --git a/src/app/_modules/auth/register/register.component.scss b/src/app/_modules/auth/register/register.component.scss new file mode 100644 index 0000000..1f6a07f --- /dev/null +++ b/src/app/_modules/auth/register/register.component.scss @@ -0,0 +1,195 @@ +// :host { +// display: flex; +// justify-content: center; +// margin: 100px 0px; +// } +.custom-toolbar { + margin:0 + } + + .row{ + display: flex; + justify-content: center; + align-items: center; + } + + .card-style { + display: flex; + justify-content: center; + margin: 100px 0px; + } + + .mat-form-field { + padding: 0; + width: 100%; + // min-width: 300px; + + input { + // height: 5vh; + width: 100%; + // background-color: aliceblue; + border-bottom: 1px solid silver; + } + } + + mat-card-title, + mat-card-content { + display: flex; + justify-content: center; + } + + .error { + padding: 16px; + width: 300px; + color: white; + background-color: red; + } + + .nav-link:hover { + color: red; + } + + + .button { + display: flex; + justify-content: center; + align-items: center; + } + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + + .fixed-bottom { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + } + + .backImg{ + height: 70%; + position: fixed; + left: 0; + bottom: 0; + width: 100%; + background-image: url('/assets/img/houstone_line1.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + padding: 10px; + z-index: 1; + } + + .registerCard{ + box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important; + border-radius: 17px; + } + + .loginSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xxx-large; + margin-left: 16px; + } + + .verifyOtpButton{ + border: 1px solid #295754; + color: #ffffff; + background-color: #295754; + width: 60%; + border-radius: 30px; + height: 35px; + font-family: nucleo; + } + + .verifyOtpButton:hover{ + background-color: #1c4441; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .saveButton{ + border: 1px solid #295754; + color: #ffffff; + background-color: #295754; + width: 30%; + border-radius: 30px; + height: 35px; + font-family: nucleo; + } + + .saveButton:hover{ + background-color: #1c4441; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .submitButton{ + border: 1px solid #295754; + color: #234442; + background-color: #ffffff; + width: 50%; + border-radius: 30px; + height: 35px; + font-family: nucleo; + + } + + + // ------------------------------------------------------------------------------------ + + + + + // .element-with-tooltip { + // cursor: pointer; /* Set the cursor style to pointer for the element */ + // font-family: nucleo; + // } + + + .custom-tooltip{ + font-family: nucleo; + } + + + mat-select.mat-select { + font-size: 16px; + font-weight: 300; + color: #4A4A4A; + border: none; + border-radius: 4px; + padding: 8px 10px; +} + + +.mat-optgroup-label { + color: black; +} +.scroll-div::-webkit-scrollbar { + width: 0; /* This will make the scrollbar invisible */ +} +.registerCard{ + box-shadow: 0 18px 20px rgba(0, 0, 0,0.2) !important; + border-radius: 17px; + width:60vh; + border: 1px solid #ddeaff; +} + + +.background-color-blue { + background-color: #ff7f16; +} + +.background-color-white { + background-color: white; +} + +.color-white { + color: white; +} + +.color-black { + color: black; +} diff --git a/src/app/_modules/auth/register/register.component.ts b/src/app/_modules/auth/register/register.component.ts new file mode 100644 index 0000000..c2dd765 --- /dev/null +++ b/src/app/_modules/auth/register/register.component.ts @@ -0,0 +1,593 @@ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { MatOption } from '@angular/material/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Router } from '@angular/router'; +import { TenderCategoryDto } from 'src/app/_dto/category.dto'; +import { PcdUserDto } from 'src/app/_dto/pcduser.dto'; +import { tenderSubcategoryMasterDto } from 'src/app/_dto/tenderSubcategoryMaster.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2' +@Component({ + selector: 'app-register', + templateUrl: './register.component.html', + styleUrls: ['./register.component.scss'] +}) + + +export class RegisterComponent implements OnInit { + + + loading = true + + verifiedOtp: boolean = false; + + dialogRef: any; + + userDetails = new PcdUserDto() + + categories:TenderCategoryDto; + + + selectedCategoryList: number[] = []; + + categoryConfigurationForm: UntypedFormGroup; + + + // companyProfile ={fileName:"",filePath:""} + @ViewChild('allSelection') private allSelection: MatOption; + userCategoryList: any; + cmpPrdocSize: any; + cmpPrfilePath: any; + prCmpltCertFilePath: any; + prCmpltCertdocSize: any; + + selected: boolean; + selectedCategory: any[]; + selectedCategoryId: any; + selectedCategoryIndex: any; + subCatLength: any; + spinnerLoading:boolean = false; + + categoryList: TenderCategoryDto[]; + + subCategoryList: tenderSubcategoryMasterDto[]; + + + constructor( + private dialog: MatDialog, + private _masterService: MasterService, + private _uiService: UiService, + private errorTranslateService: ErrorTranslateService, + private router: Router, + private _fb: UntypedFormBuilder, + + + ) { } + + ngOnInit(): void { + this.loading = false; + this.categoryConfigurationForm = this._fb.group({ + selection: new UntypedFormControl(''), + count: new UntypedFormControl(''), + }); + this.getCategoryData(); + + + this.userDetails.Category = [] + } + + sendOTP(template) { + + if (this.userDetails.email && this._uiService.emailValidation(this.userDetails.email)) { + let body = { email: this.userDetails.email }; + this._masterService.saveAllMasterData(apiUrl.registerOtp, body).then(res => { + this._uiService.toastMessage(this.errorTranslateService.translate("otpSendSuccessfully")); + + this.openDialogbox(template) + },err=>{ + this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi')); + + }) + } + else { + this._uiService.toastMessage(this.errorTranslateService.translate("enterAValidEmailID")); + } + + + this.getCategoryData() + } + + // getCategoryData(){ + // this._masterService.getMasterData(apiUrl.category).then(res =>{ + // this.categories =res; + // this.categoryList = res; + // }) + // } + + + + openDialogbox(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false + }); + // this.verifiedOtp = true + } + + + +// onCategoryChange(selectedValues: number[]): void { + +// const concatenatedValues: string = selectedValues.map(value => value.toString()).join(','); + + + +// this.userDetails.category = concatenatedValues; +// } + + +toggleCategorySelection(categoryId: number): void { + const index = this.selectedCategoryList.indexOf(categoryId); + if (index !== -1) { + this.selectedCategoryList.splice(index, 1); + } else { + this.selectedCategoryList.push(categoryId); + } +} +// toggleAllSelection(event) { +// // if (this.selectedCategoryList.length === this.categoryList.length) { +// // // If all categories are already selected, clear the selection +// // this.selectedCategoryList = []; +// // } else { +// // // Otherwise, select all categories +// // this.selectedCategoryList = this.categoryList.map(category => category.id); +// // } + +// if(event){ +// for(let element of this.categoryList){ +// this.selectedCategoryList.push(element.id); + +// } + +// } +// } + + + + +toggleAllSelection(field) { + if (field == "select") { + if (this.allSelection.selected) { + this.categoryConfigurationForm.controls.selection + .patchValue([...this.categoryList.map(item => item.id), 0]); + + } else { + this.categoryConfigurationForm.controls.selection.patchValue([]); + } + } + + +} + +tosslePerOne(field) { + + if (field == "select") { + if (this.allSelection.selected) { + this.allSelection.deselect(); + return false; + } + if (this.categoryConfigurationForm.controls.selection.value.length == this.categoryList.length) { + this.allSelection.select(); + } + + } + +} + + validation() { + + if (this.userDetails.otp) { + let body = { + email: this.userDetails.email, + otp: this.userDetails.otp + } + this._masterService.saveAllMasterData(apiUrl.validateRegisterOtp, body).then(res => { + if (res['data'] == 'success') { + Swal.fire( + 'Verified', + 'OTP Verified Successfully', + 'success' + ) + this.dialogRef.close() + this._uiService.toastMessage(this.errorTranslateService.translate("otpVerifiedSuccess")); + this.verifiedOtp = true + } + else { + this.dialogRef.close(); + this._uiService.toastMessage(this.errorTranslateService.translate("otpMismatching")); + } + },err=>{ + + this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi')); + + }) + } + else { + this._uiService.toastMessage(this.errorTranslateService.translate("enterOTP")); + } + + } + navigateTo(destination) { + this.router.navigate([destination]); + } + + removeCmpPrFile(){ + this._masterService.deleteMasterData(apiUrl.cmpPrFileUpload,this.userDetails.companyProfile ).then(res=>{ + this.userDetails.companyProfile = null + this.cmpPrfilePath = null + }) + } + uploadCmpPrFiles(event){ + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const fd = new FormData(); + fd.append('file', file ); + + this._masterService.saveMasterData(apiUrl.cmpPrFileUpload,fd).then(res=>{ + this.userDetails.companyProfile = res.fileName; + this.cmpPrfilePath = res.filePath; + this.cmpPrdocSize = res.fileSizeKB; + + }) +} + + + +removeprCmpltCertFile(){ + this._masterService.deleteMasterData(apiUrl.projectCompleteCertFile,this.userDetails.projectCompletedCert ).then(res=>{ + this.userDetails.projectCompletedCert = null + this.prCmpltCertFilePath = null + }) +} + +uploadprCmpltCertFiles(event){ + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const fd = new FormData(); +fd.append('file', file ); + +this._masterService.saveMasterData(apiUrl.projectCompleteCertFile,fd).then(res=>{ + this.userDetails.projectCompletedCert = res.fileName; + this.prCmpltCertFilePath = res.filePath; + this.prCmpltCertdocSize = res.fileSizeKB; + +}) +} + + +openNotificationDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '800px', + disableClose: false, + maxHeight:'80vh' + }); + this.categoryList=[] + // this.getMarqueeData(); + this.getCategoryData(); + // this.getUserCategories() +} + +closeDialog() { + this.dialogRef.close(); +} + +saveCategory() { + // this.spinnerLoading = true; + let tempArray = [] + this.categoryList.forEach(cat => { + + for (let subCat of cat.tenderSubCategory) { + if (subCat.selected && subCat.name != 'all') { + let body = { Category: null, subCategory: null } + body.Category = cat.id; + body.subCategory = subCat.id + // tempArray.push(body) + this.userDetails.Category.push(body) + } + } + + }); + + // this._masterService.saveMasterData(apiUrl.categoryEdit, tempArray).then(res => { + // this._uiService.toastMessage(this.errorTranslateService.translate('updateSuccess')); + // this.spinnerLoading = false; + // this.closeDialog(); + + + // }) + + this.closeDialog() + +} + +getCategoryData() { + + + this._masterService.getMasterData(apiUrl.category).then(res => { + this.categoryList = res; + if (res && res.length > 0) { + this.selectedCategoryId = res[0].id + this.selectedCategoryIndex = 0; + this.categoryList[0].selected = true + } + // this.categoryList.forEach(element => { + // let body = { + // all: false, + // tenderSubCategory: `All ${element.tenderCategory} Category`, + // name: 'all', + // selected:false + // } + // element.tenderSubCategory.unshift(body) + + + // }); + + + + }) +} + +getSubcategory(id, i) { + this.selectedCategoryId = id + this.selectedCategoryIndex = i + this.categoryList[i].selected = true + + //whether all sub categories are selected or not + // let temp = 0; + // this.categoryList[i].tenderSubCategory.forEach(element => { + // if (element.selected && element.name != 'all') { + // temp =temp + 1 ; + // } + // }); + + // if(temp == (this.categoryList[i].tenderSubCategory.length -1) ){ + // this.categoryList[i].tenderSubCategory[0].selected =true; + // } + // else{ + // this.categoryList[i].tenderSubCategory[0].selected =false; + + // } + +} + + + +categoryChecked(event, subcategory, i) { + + if (subcategory.name && subcategory.name == 'all') { + if (subcategory.selected) { + for (let subCat of this.categoryList[i].tenderSubCategory) { + subCat.selected = true; + } + } + else { + for (let subCat of this.categoryList[i].tenderSubCategory) { + subCat.selected = false; + } + } + + + } + else { + + let temp = 0; + + this.categoryList[i].tenderSubCategory.forEach(subCat => { + + if (subCat.selected && subCat.name != 'all') { + temp =temp + 1 ; + + } + }) + + // if(temp == (this.categoryList[i].tenderSubCategory.length -1) ){ + // this.categoryList[i].tenderSubCategory[0].selected =true; + + + // } + // else{ + // this.categoryList[i].tenderSubCategory[0].selected =false; + + // } + +} +} + + + +getUserCategories() { + this._masterService.getMasterData(apiUrl.userCategory).then(res => { + this.userCategoryList = res; + let temp =0 + + this.userCategoryList.forEach(element => { + + this.categoryList.forEach(cat => { + + for (let subCat of cat.tenderSubCategory) { + + if (element.subCategory == subCat.id) { + subCat.selected = true; + // temp =temp+1; + temp++ + } + } + + if(temp == ( cat.tenderSubCategory.length - 1 ) && cat.tenderSubCategory[0].name =='all'){ + + cat.tenderSubCategory[0].selected = true + } + }); + }); + + + }) + + +} + + + + + + preSave(tempRef) { + + if (!this.userDetails.userName || this.userDetails.userName == null || this.userDetails.userName == "" ||this.userDetails.userName == undefined) { + this._uiService.toastMessage(this.errorTranslateService.translate('userNameCantbeBlank'), 3000); + return false; + } + if (!this.userDetails.mobileNumber || this.userDetails.mobileNumber == null || this.userDetails.mobileNumber == "" ||this.userDetails.mobileNumber == undefined) { + this._uiService.toastMessage(this.errorTranslateService.translate('phonecantBeBlank'), 3000); + return false; + } + if (!this._uiService.phoneNoValidation(this.userDetails.mobileNumber) ) { + this._uiService.toastMessage(this.errorTranslateService.translate('enterAValidPhoneNumber'), 3000); + return false; + } + if (!this.userDetails.pass || this.userDetails.pass == null || this.userDetails.pass == "" ||this.userDetails.pass == undefined) { + this._uiService.toastMessage(this.errorTranslateService.translate('passwordCantbeBlank'), 3000); + return false; + } + if (this.userDetails.pass.length < 6) { + this._uiService.toastMessage(this.errorTranslateService.translate('minimumPasswordLenght'), 3000); + return false; + } + if (!this.userDetails.confPass || this.userDetails.confPass == null || this.userDetails.confPass == "" ||this.userDetails.confPass == undefined) { + this._uiService.toastMessage(this.errorTranslateService.translate('confirmPasswordCantbeBlank'), 3000); + return false; + } + if (this.userDetails.pass != this.userDetails.confPass) { + this._uiService.toastMessage(this.errorTranslateService.translate('passwordMismatch'), 3000); + return false; + } if (!this.userDetails.Category || this.userDetails.Category == null || this.userDetails.Category.length == 0 || this.userDetails.Category.length < 0) { + + this.openNotificationDialog(tempRef) + + this._uiService.toastMessage(this.errorTranslateService.translate('categorycantBeBlank'), 3000); + + return false; + } + // if (!this.categoryConfigurationForm.controls.selection.value || this.categoryConfigurationForm.controls.selection.value == null || this.categoryConfigurationForm.controls.selection.value == undefined) { + // this._uiService.toastMessage(this.errorTranslateService.translate('categorycantBeBlank'), 3000); + // return false; + // } + // this.userDetails.category=[] + // this.categoryConfigurationForm.value.selection.forEach(element => { + // if(element != 0) + // this.userDetails.category.push(element) + // }) + if (!this.userDetails.maxAmount || this.userDetails.maxAmount == null || this.userDetails.maxAmount == undefined) { + this._uiService.toastMessage(this.errorTranslateService.translate('maxAmountCantbeBlank'), 3000); + return false; + } + return true; + } + + saveData(tempRef){ + this.userDetails.active = false; + this.userDetails.status = 'R' + if (!this.preSave(tempRef)) + return; + + delete this.userDetails.confPass + this.loading = true; + this._masterService.saveMasterData(apiUrl.signup,this.userDetails).then(res=>{ + this.loading = false + this._uiService.toastMessage(this.errorTranslateService.translate('saveSuccess'), 3000); + this.verifiedOtp = false + this.userDetails = new PcdUserDto(); + this.navigateTo('/auth/login') + },err=>{ + this.loading = false; + this._uiService.toastMessage((err.error.message) ? err.error.message : this.errorTranslateService.translate('errorInApi')); + this.verifiedOtp = false + }) + + } + + + +///////////////////////////////////////////////////////////////////////////// + // tosslePerOne(field) { + + // if (field == "select") { + // if (this.allSelection.selected) { + // this.allSelection.deselect(); + // return false; + // } + // if (this.categoryConfigurationForm.controls.selection.value.length == this.categoryList.length) { + // this.allSelection.select(); + // } + + // } + + // } + toggleOptGroupSelection(categoryGroup) { + const selectedSubCategoryIds = categoryGroup.tenderSubCategory.map(sub => sub.id); + + if (this.isOptGroupSelected(categoryGroup)) { + // Deselect all options if the optgroup is already selected + this.categoryConfigurationForm.controls.selection.patchValue( + this.categoryConfigurationForm.controls.selection.value.filter(id => !selectedSubCategoryIds.includes(id)) + ); + } else { + // Toggle the selection of the optgroup and its options + const selectedOptions = [...this.categoryConfigurationForm.controls.selection.value, ...selectedSubCategoryIds]; + this.categoryConfigurationForm.controls.selection.patchValue(selectedOptions); + + } + } + + isOptGroupSelected(categoryGroup) { + const selectedOptions = this.categoryConfigurationForm.controls.selection.value; + return selectedOptions.includes(categoryGroup.id) && + selectedOptions.some(id => selectedOptions.includes(id) && categoryGroup.tenderSubCategory.map(sub => sub.id).includes(id)); + } + + + + + +// toggleAllSelection() { 6/2/2024 + +// if (this.allSelection.selected) { + +// this.categoryConfigurationForm.controls.selection.patchValue( +// [].concat.apply([], this.categoryList.map(item => item.tenderSubCategory.map(subItem => subItem.id))).concat([0]) +// ); + +// } else { +// this.categoryConfigurationForm.controls.selection.patchValue([]); +// } +// } + + + getAllSubCategoryIds() { + return this.categoryList.reduce((acc, category) => [ + ...acc, + ...category.tenderSubCategory.map(sub => sub.id) + ], []); + } + +} + \ No newline at end of file diff --git a/src/app/_modules/auth/upload/upload.component.html b/src/app/_modules/auth/upload/upload.component.html new file mode 100644 index 0000000..722b09c --- /dev/null +++ b/src/app/_modules/auth/upload/upload.component.html @@ -0,0 +1,156 @@ +
+ + + + + +
+
+

Upload Files

+

+ +
+
+
+
+
+
+
+
+ + +
+
+ Name is required. +
+
+
+
+ + + +
+
+ Phone number is required. +
+
+ Phone number must be a 10-digit number. +
+
+ Invalid phone number format. +
+
+
+
+ + +
+
+ Email is required. +
+
+ Invalid email format. +
+
+
+ +
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+ Please fill in all required fields. +
+ +
+ + +
+
+
+
+
+
+ + + + + + +

+ + +
+
+
+
+

© Art . n Architects + All Rights Reserved

+

Designed by SiMS

+
+
+
+
+ + + +
\ No newline at end of file diff --git a/src/app/_modules/auth/upload/upload.component.scss b/src/app/_modules/auth/upload/upload.component.scss new file mode 100644 index 0000000..eb4d391 --- /dev/null +++ b/src/app/_modules/auth/upload/upload.component.scss @@ -0,0 +1,16 @@ +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +.nav-link:hover { + color: rgb(255, 0, 0); + } \ No newline at end of file diff --git a/src/app/_modules/auth/upload/upload.component.spec.ts b/src/app/_modules/auth/upload/upload.component.spec.ts new file mode 100644 index 0000000..4b9d03c --- /dev/null +++ b/src/app/_modules/auth/upload/upload.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { UploadComponent } from './upload.component'; + +describe('UploadComponent', () => { + let component: UploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ UploadComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(UploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/auth/upload/upload.component.ts b/src/app/_modules/auth/upload/upload.component.ts new file mode 100644 index 0000000..b6f59f2 --- /dev/null +++ b/src/app/_modules/auth/upload/upload.component.ts @@ -0,0 +1,68 @@ +import { Component, OnInit } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-upload', + templateUrl: './upload.component.html', + styleUrls: ['./upload.component.scss'] +}) +export class UploadComponent implements OnInit { + + + phoneInvalid: boolean = false; + formData: any = {}; + myForm: UntypedFormGroup; + loading: boolean = true + + constructor(private router: Router) { } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + validatePhoneNumber() { + const phonePattern = /^[0-9]{10}$/; + const phoneInput = this.myForm.controls.phone; + this.phoneInvalid = !phonePattern.test(phoneInput.value); + } + + // goToHome(){ + // window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + // } + // goToContactUs(){ + // window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + // } + +preSave(){ + if(this.formData.name == '' || this.formData.name == undefined){ + // console.log("1"); + + return false + } + if(this.formData.phone == '' || this.formData.phone == undefined || this.formData.phone.length > 10 || this.formData.phone.length < 10){ + // console.log("ph"); + return false + } + if(this.formData.email == '' || this.formData.email == undefined){ + // console.log("e"); + return false + } + return true +} + + submitForm() { + if(this.preSave()) + console.log(this.formData); + } + + deleteInput(inputFieldId: string) { + const inputField = document.getElementById(inputFieldId) as HTMLInputElement; + if (inputField) { + inputField.value = ''; + } + } + ngOnInit(): void { + this.loading = false + } + +} diff --git a/src/app/_modules/auth/view/view.component.html b/src/app/_modules/auth/view/view.component.html new file mode 100644 index 0000000..5b0eb1b --- /dev/null +++ b/src/app/_modules/auth/view/view.component.html @@ -0,0 +1,475 @@ +
+ + + + + + + +
+
+

Tender Details

+
+
+
+
+   +
+
+ +
+

+ +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Basic Details
Organisation Name{{tenderData.orgChain}}
Tender Reference Number{{tenderData.tenderRefNo}}
Tender ID{{tenderData.tenderId}}
Tender Type{{tenderData?.tenderTypeD?.tenderType}}
Tender Category{{tenderData?.tenderCategoryD?.tenderCategory}}
Payment Mode{{tenderData?.paymentModeD?.paymentMode}}
Form of Contract{{tenderData?.formOfContractD?.formOfContract}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + +
Tender Fee Details
Tender Fee in ₹{{tenderData.tenderFee}}
Fee Payable To{{tenderData.feePayableTo}}
Tender Fee Exemption Allowed{{tenderData.tenderFeeExemption}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EMD Fee Details
EMD Amount in ₹{{tenderData.emdAmt}}
EMD Fee Type{{tenderData?.emdFeeTypeD?.emdFeeType}}
EMD Payable To{{tenderData.emdPayableTo}}
EMD through BG/ST or EMD Exemption Allowed{{tenderData.allowEmdBgOrSt}}
EMD Percentage{{tenderData.emdPercentage}}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Critical Dates
Published Date{{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale Start Date{{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}}
Clarification Start Date{{tenderData.clarificationStartDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale End Date{{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}}
Clarification End Date{{tenderData.clarificationEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission Start Date{{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission End Date{{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Opening Date{{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work Item Details
Title{{tenderData.title}}
Work Description{{tenderData.workDesc}}
Pre Qualification{{tenderData.ndaPreQualification}}
Tender Value in ₹{{tenderData.tenderValue}}
Product Category{{tenderData?.productCategoryD?.productCategory}}
Sub category{{tenderData.subCategory}}
Bid Validity(Days){{tenderData.bidValidity}}
Period Of Work(Days){{tenderData.periodOfWork}}
Location{{tenderData.location}}
Pincode{{tenderData.pincode}}
Bid Opening Place{{tenderData.bidOpeningPlace}}
Bid Opening Address{{tenderData.bidOpenAddress}}
Pre Bid Meeting Place{{tenderData.preBidMeetPlace}}
Pre Bid Meeting Address{{tenderData.preBidMeetAdd}}
Pre Bid Meeting Date{{tenderData.preBidDate | date: 'MMM d, y, h:mm:ss a'}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Tenders Documents
Notice
Document TypeDocument NameDescriptionDownload
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
Work Item Documents
Document TypeDocument NameDescription
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
+ +

Documents can Only be download between {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}}

+ +
Drawings Document
Drawings + +

Documents can Only be download between {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}}

+ +
{{document.description}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Required Documents Details
Document TypeDescriptionDocument Format
{{ document.coverTypeD.coverType }}{{ document.Description }}{{ document.fileFormatD.fileFormat }}
+
+
+ + + +
+
+ + + + + + + + + + + + + + + + + +
Tender Inviting
Name{{tenderData.tenderInvName}}
Address{{tenderData.tenderInvAddess}}
+
+
+ + +
+
+
+
+
+ + +

+
+
+
+
+
+

© Art . n Architects + All Rights Reserved

+

Designed by SiMS

+
+
+
+
\ No newline at end of file diff --git a/src/app/_modules/auth/view/view.component.scss b/src/app/_modules/auth/view/view.component.scss new file mode 100644 index 0000000..39dccc0 --- /dev/null +++ b/src/app/_modules/auth/view/view.component.scss @@ -0,0 +1,204 @@ +.container-fluid{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: 10px; + position: relative; +} +.container-fluid2{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: -1px; + position: relative; +} + +@media print { + .hide-on-print { + display: none; + } +} + + + + +.nav-link:hover { + color: rgb(255, 0, 0); +} +// #zipFile:hover { +// color: rgb(255, 0, 0); +// cursor: pointer; +// } + +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +// -------------------------------------------------------------------------------------------- +thead{ + // background-color: #5faca1; color: aliceblue; + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +.table td { + word-break: break-word; + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; +} + +.table th { + font-family: texg; + color: #353535; +} + +.tenderHeading{ + font-family: texg; + color: #353535; +} +.printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.printButton:hover { + background-color: #ececec; + color: #46AC9E; +} + + + +.DownloadZipButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} +.DownloadZipButton:hover { + background-color: #ececec; + color: #46AC9E; +} + +.DownloadNoticeButton { + // float: right; + // margin-top: 5px; + // margin-bottom: 5px; + background-color: white; + // color: #424242; + color: #5faca1; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + +} +.DownloadNoticeButton:hover { + background-color: #ececec; + color: #303030; +} + +@media screen and (max-width: 768px) { + /* Adjust font size for smaller screens */ + .DownloadZipButton { + font-size: 14px; + } +} + +@media screen and (max-width: 480px) { + /* Further adjustments for even smaller screens */ + .DownloadZipButton { + font-size: 12px; + } +} + + @media print { + + + .hide-on-print { + display: none; + } + + .some-element { + border: 1px solid black !important; + page-break-inside: avoid; /* Prevent element from breaking across pages */ + } + } + .some-element { + border: 1px solid black !important; + page-break-inside: avoid; /* Prevent element from breaking across pages */ + } \ No newline at end of file diff --git a/src/app/_modules/auth/view/view.component.spec.ts b/src/app/_modules/auth/view/view.component.spec.ts new file mode 100644 index 0000000..f644b0a --- /dev/null +++ b/src/app/_modules/auth/view/view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewComponent } from './view.component'; + +describe('ViewComponent', () => { + let component: ViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/auth/view/view.component.ts b/src/app/_modules/auth/view/view.component.ts new file mode 100644 index 0000000..b2e698d --- /dev/null +++ b/src/app/_modules/auth/view/view.component.ts @@ -0,0 +1,280 @@ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; + +@Component({ + selector: 'app-view', + templateUrl: './view.component.html', + styleUrls: ['./view.component.scss'] +}) +export class ViewComponent implements OnInit { + + tenderId: number; + tenderData: any; + nitItemDocuments: any ; + workItemDocuments: any; + drawingsDocuments: any; + tenderDocuments: any; + OnlinePayment: boolean; + currentDate = new Date(); + showDownloadButton: boolean; + activeYn: string; + CancelTenderButtons: boolean; + + + + constructor(private router: Router, + private route: ActivatedRoute, + private _masterService: MasterService, + private _ui:UiService, + private _errorTranslate:ErrorTranslateService, + private _errorTranslateService: ErrorTranslateService) { + this.nitItemDocuments = [] + this.workItemDocuments=[]; + this.drawingsDocuments =[]; + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + ngOnInit(): void { + this.tenderData = new TenderDetailDto() + // console.log("this.tenderId",this.tenderId); + this.getData() + } + + + +getData(){ + this._masterService.getMasterDatabyId(apiUrl.AllTenderData,this.tenderId).then((res) =>{ + // console.log("tenderData",res); + this.tenderData = res + this.tenderDocuments = this.tenderData['tenderDoc'] + this.activeYn = this.tenderData['activeYn']; + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + if(this.activeYn == 'N'){ + this.CancelTenderButtons = true + }else if(this.activeYn == 'Y'){ + this.CancelTenderButtons = false + } + + + + const saleStartDate = new Date(this.tenderData.saleStartDate); + const saleEndDate = new Date(this.tenderData.saleEndDate); + + if (this.currentDate >= saleStartDate && this.currentDate <= saleEndDate) { + this.showDownloadButton = true; // Enable the button + } else { + this.showDownloadButton = false; // Disable the button + } + // console.log("data",this.tenderDocuments); + this.filterDataByCategory(); + }) +} + +filterDataByCategory() { + + + this.drawingsDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'D'); + this.workItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'WID'); + this.nitItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'NIT'); + +} + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + print(): void { + window.print(); + } + + DownloadDrawingsZIP() { + if ( this.OnlinePayment) { + // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + this.goToView() + } + else { + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => { + + }, err => { + // console.log('res===>', err); + if (err.status == 200) { + // console.log('start >>>'); + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 100); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + // alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + } + DownloadNIT(index: number) { + const id = this.tenderId; + // console.log(index); + // console.log(this.nitItemDocuments[index].docName); + + + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => { + + } , err => { + // console.log('res===>', err); + if (err.status == 200) { + // console.log('start >>>'); + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10000); + } + if (err.status == 404) { + alert('No Notice Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + + + downloadWITZip() { + if (this.OnlinePayment) { + // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + this.goToView() + } + else { + // console.log('clicked'); + const id = this.tenderId; + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10); + + this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + }, err => { + // console.log('res===>', err); + if (err.status == 200) { + // console.log('start >>>'); + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 100); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + } + } + // downloadWITZip() { + // console.log('clicked'); + // const id = this.tenderId; + // // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // // setTimeout(() => { + // // newWindow.close(); + // // }, 10); + + // this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + // }, err => { + // console.log('res===>', err); + // if (err.status == 200) { + // console.log('start >>>'); + // // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + // } + // if (err.status == 404) { + // alert('No Bank Document Found for the selected Tender.'); + // } + // if (err.status == 500) { + // alert(`${err.message}`); + // } + // else { + // // alert(`An error Occured`); + // // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // // setTimeout(() => { + // // newWindow.close(); + // // }, 100); + // } + + // }) + // // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + + // } + + goToView(){ + + this._ui.toastMessage(this._errorTranslate.translate('pleaseLogin')); + localStorage.setItem('returnUrl',`tender-view/${this.tenderId}`) + this.navigateTo('auth/login') + +} +} diff --git a/src/app/_modules/auth/website/website.component.html b/src/app/_modules/auth/website/website.component.html new file mode 100644 index 0000000..5ddbf27 --- /dev/null +++ b/src/app/_modules/auth/website/website.component.html @@ -0,0 +1,341 @@ + + + + + + + + Thrickodithanam SCB + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

{{marqueeText}}

+
+
+
+ + + + +

+
+

WELCOME
TO
THRICKODITHANAM SERVICE CO-OPERATIVE BANK

+ +
+
+ +
+ + +


+
+ +
+

ABOUT US

+
+ +
+

Thrickodithanam Service Co-operative Bank LTD No.178

+ +
+ +
+
+

+
+ On August 1920, Thrickodithanam Cooperative Bank started its operations in the Gram Panchayat, with the aim of uplifting the financial growth of farmers and rural communities. Over the course of a century, it has become a stable and reliable institution serving the agricultural sector, contributing to educational progress and enriching the daily lives of people. Thrickodithanam Service Co-operative Bank, with its customer-centric and innovative approach, has remained a steadfast partner to the farming community, offering a range of services to meet their financial and banking requirements. The bank's commitment to empowering the rural population and facilitating agricultural activities has made it a beacon of progress in the Grama Panchayat. +


+ + + + +
+
+

+ The bank has been successful in transforming the financial growth of the Gram Panchayat. It has played a significant role in fostering the development of the agricultural sector, promoting educational progress, and enriching the daily lives of the people. The bank's operations have led to the prosperity of the farming community, as well as improved the overall quality of life for the residents by providing ample opportunities for education and financial stability. +


+

+ Recognized and appreciated for its efforts, the Joint Registrar's order, dated 28th September 2016 (C.R.P (2) 1258/16/KDS), elevated the bank to Class 1 Super Grade category from 1st July 2014 onwards. The bank has successfully fulfilled its mission of empowering the farming community, promoting educational development, and making the lives of people prosperous. this institution stands as a trustworthy and progressive entity, serving the financial needs of farmers and the agricultural sector. +

+
+

+ + +


+
+ +
+

SERVICES

+ +
+ +
+
+
+

Deposits

+

Has investment of Rs 169 crore rupees.

+
+
+
+

Chitty/GDCS

+

Has Chitty/GDCS with total Sala of 1 crore with 5% Bank Commission.

+
+
+
+

Loans

+

Loans are provided transparently, efficiently and without delay and hassles with limit of 50 lakh Rupees.

+
+
+
+

Consumer Store Manure Depo

+

Sells and distribute Quality fertilizer for farmers and daily use items less than the market price +

+
+
+
+

Neethi Medical Store

+

Sells medicines with 12-40% discount.

+
+
+
+

Welfare Pension & Santhwanam Scheme

+

Provide therapeutic aid for terminally ill patients living within the operational area of ​​the bank. Disbursement of Welfare Pensions in Thrickodithanam. +

+
+
+ +
+
+ + +


+
+ +
+

BRANCHES

+ +
+ +
+
+
+ +

Kunnumpuram Branch

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


+
+
+

TENDERS

+
+

NEW TENDER FILES

+ view +
+
+
+ + + + +


+
+ +
+

CONTACT US

+

തൃക്കൊടിത്താനം സര്‍വ്വീസ് സഹകരണ ബാങ്ക് LTD No.178

+ +
+ + +
+
+ + +
+ + + + +
+ +
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/auth/website/website.component.scss b/src/app/_modules/auth/website/website.component.scss new file mode 100644 index 0000000..708088e --- /dev/null +++ b/src/app/_modules/auth/website/website.component.scss @@ -0,0 +1,3 @@ +.titleName{ + font-family: texg; +} \ No newline at end of file diff --git a/src/app/_modules/auth/website/website.component.spec.ts b/src/app/_modules/auth/website/website.component.spec.ts new file mode 100644 index 0000000..a88f0b8 --- /dev/null +++ b/src/app/_modules/auth/website/website.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { WebsiteComponent } from './website.component'; + +describe('WebsiteComponent', () => { + let component: WebsiteComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ WebsiteComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(WebsiteComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/auth/website/website.component.ts b/src/app/_modules/auth/website/website.component.ts new file mode 100644 index 0000000..23b7c3d --- /dev/null +++ b/src/app/_modules/auth/website/website.component.ts @@ -0,0 +1,36 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; + +@Component({ + selector: 'app-website', + templateUrl: './website.component.html', + styleUrls: ['./website.component.scss'] +}) +export class WebsiteComponent implements OnInit { + + marqueeText: any = ''; + + constructor( + private router:Router, + private _masterService : MasterService + ) { } + + ngOnInit(): void { + this.getMarqueeData(); + } + + + openTender(){ + this.router.navigate(['/auth/admin-home']) + } + + getMarqueeData(){ + this._masterService.getMasterData(apiUrl.common).then(res=>{ + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.marqueeText = res[0].marquee + } + }) + } +} diff --git a/src/app/_modules/policy/policy-routing.module.ts b/src/app/_modules/policy/policy-routing.module.ts new file mode 100644 index 0000000..1d9ea06 --- /dev/null +++ b/src/app/_modules/policy/policy-routing.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { PrivacyPolicyComponent } from './privacy-policy/privacy-policy.component'; +import { RefundPolicyComponent } from './refund-policy/refund-policy.component'; +import { TermsAndConditionsComponent } from './terms-and-conditions/terms-and-conditions.component'; + +const routes: Routes = [ + + + { path: 'privacy-policy', component: PrivacyPolicyComponent }, + + { path: 'refund-policy', component: RefundPolicyComponent }, + + { path: 'terms-and-conditions', component: TermsAndConditionsComponent } + + +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class PolicyRoutingModule { } diff --git a/src/app/_modules/policy/policy.module.ts b/src/app/_modules/policy/policy.module.ts new file mode 100644 index 0000000..0c4718d --- /dev/null +++ b/src/app/_modules/policy/policy.module.ts @@ -0,0 +1,21 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { PolicyRoutingModule } from './policy-routing.module'; +import { PrivacyPolicyComponent } from './privacy-policy/privacy-policy.component'; +import { RefundPolicyComponent } from './refund-policy/refund-policy.component'; +import { TermsAndConditionsComponent } from './terms-and-conditions/terms-and-conditions.component'; + + + +@NgModule({ + declarations: [ + PrivacyPolicyComponent, + RefundPolicyComponent, + TermsAndConditionsComponent + ], + imports: [ + CommonModule, + PolicyRoutingModule + ] +}) +export class PolicyModule { } diff --git a/src/app/_modules/policy/privacy-policy/privacy-policy.component.html b/src/app/_modules/policy/privacy-policy/privacy-policy.component.html new file mode 100644 index 0000000..2462fc2 --- /dev/null +++ b/src/app/_modules/policy/privacy-policy/privacy-policy.component.html @@ -0,0 +1,360 @@ + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+ +

Privacy Policy

+

Last updated: January 25, 2024

+

Interpretation and Definitions

+

Interpretation

+

The words of which the initial letter is capitalized have meanings defined under the + following conditions. The following definitions shall have the same meaning regardless of + whether they appear in singular or in plural.

+

Definitions

+

For the purposes of this Privacy Policy:

+
    +
  • +

    Account means a unique account created for You to access our Service + or parts of our Service.

    +
  • +
  • +

    Affiliate means an entity that controls, is controlled by or is + under common control with a party, where "control" means ownership of 50% + or more of the shares, equity interest or other securities entitled to vote for + election of directors or other managing authority.

    +
  • +
  • +

    Application means the software program provided by the Company + downloaded by You on any electronic device, named Tender

    +
  • +
  • +

    Company (referred to as either "the Company", + "We", "Us" or "Our" in this Agreement) refers to + Art.n Architects , India.

    +
  • +
  • +

    Cookies are small files that are placed on Your computer, mobile + device or any other device by a website, containing the details of Your browsing + history on that website among its many uses.

    +
  • +
  • +

    Country refers to: India

    +
  • +
  • +

    Device means any device that can access the Service such as a + computer, a cellphone or a digital tablet.

    +
  • +
  • +

    Personal Data is any information that relates to an identified or + identifiable individual.

    +
  • +
  • +

    Service refers to the Application or the Website or both.

    +
  • +
  • +

    Service Provider means any natural or legal person who processes the + data on behalf of the Company. It refers to third-party companies or individuals + employed by the Company to facilitate the Service, to provide the Service on behalf + of the Company, to perform services related to the Service or to assist the Company + in analyzing how the Service is used.

    +
  • +
  • +

    Usage Data refers to data collected automatically, either generated + by the use of the Service or from the Service infrastructure itself (for example, + the duration of a page visit).

    +
  • +
  • +

    Website refers to Art n. Architects, accessible from https://artnouveau.in/ +

    +
  • +
  • +

    You means the individual accessing or using the Service, or the + company, or other legal entity on behalf of which such individual is accessing or + using the Service, as applicable.

    +
  • +
+

Collecting and Using Your Personal Data

+

Types of Data Collected

+

Personal Data

+

While using Our Service, We may ask You to provide Us with certain personally identifiable + information that can be used to contact or identify You. Personally identifiable information + may include, but is not limited to:

+
    +
  • +

    Email address

    +
  • +
  • +

    First name and last name

    +
  • +
  • +

    Phone number

    +
  • +
+
    +
  • +

    Usage Data

    +
  • +
+

Usage Data

+

Usage Data is collected automatically when using the Service.

+

Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP + address), browser type, browser version, the pages of our Service that You visit, the time + and date of Your visit, the time spent on those pages, unique device identifiers and other + diagnostic data.

+

When You access the Service by or through a mobile device, We may collect certain information + automatically, including, but not limited to, the type of mobile device You use, Your mobile + device unique ID, the IP address of Your mobile device, Your mobile operating system, the + type of mobile Internet browser You use, unique device identifiers and other diagnostic + data.

+

We may also collect information that Your browser sends whenever You visit our Service or + when You access the Service by or through a mobile device.

+ +

Use of Your Personal Data

+

The Company may use Personal Data for the following purposes:

+
    +
  • +

    To provide and maintain our Service, including to monitor the usage + of our Service.

    +
  • +
  • +

    To manage Your Account: to manage Your registration as a user of the + Service. The Personal Data You provide can give You access to different + functionalities of the Service that are available to You as a registered user.

    +
  • +
  • +

    For the performance of a contract: the development, compliance and + undertaking of the purchase contract for the products, items or services You have + purchased or of any other contract with Us through the Service.

    +
  • +
  • +

    To contact You: To contact You by email, telephone calls, SMS, or + other equivalent forms of electronic communication, such as a mobile application's + push notifications regarding updates or informative communications related to the + functionalities, products or contracted services, including the security updates, + when necessary or reasonable for their implementation.

    +
  • +
  • +

    To provide You with news, special offers and general information + about other goods, services and events which we offer that are similar to those that + you have already purchased or enquired about unless You have opted not to receive + such information.

    +
  • +
  • +

    To manage Your requests: To attend and manage Your requests to Us. +

    +
  • +
  • +

    For business transfers: We may use Your information to evaluate or + conduct a merger, divestiture, restructuring, reorganization, dissolution, or other + sale or transfer of some or all of Our assets, whether as a going concern or as part + of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us + about our Service users is among the assets transferred.

    +
  • +
  • +

    For other purposes: We may use Your information for other purposes, + such as data analysis, identifying usage trends, determining the effectiveness of + our promotional campaigns and to evaluate and improve our Service, products, + services, marketing and your experience.

    +
  • +
+

We may share Your personal information in the following situations:

+
    +
  • With Service Providers: We may share Your personal information with + Service Providers to monitor and analyze the use of our Service, to contact You.
  • +
  • For business transfers: We may share or transfer Your personal + information in connection with, or during negotiations of, any merger, sale of Company + assets, financing, or acquisition of all or a portion of Our business to another + company.
  • +
  • With Affiliates: We may share Your information with Our affiliates, in + which case we will require those affiliates to honor this Privacy Policy. Affiliates + include Our parent company and any other subsidiaries, joint venture partners or other + companies that We control or that are under common control with Us.
  • +
  • With business partners: We may share Your information with Our business + partners to offer You certain products, services or promotions.
  • +
  • With other users: when You share personal information or otherwise + interact in the public areas with other users, such information may be viewed by all + users and may be publicly distributed outside.
  • +
  • With Your consent: We may disclose Your personal information for any + other purpose with Your consent.
  • +
+

Retention of Your Personal Data

+

The Company will retain Your Personal Data only for as long as is necessary for the purposes + set out in this Privacy Policy. We will retain and use Your Personal Data to the extent + necessary to comply with our legal obligations (for example, if we are required to retain + your data to comply with applicable laws), resolve disputes, and enforce our legal + agreements and policies.

+

The Company will also retain Usage Data for internal analysis purposes. Usage Data is + generally retained for a shorter period of time, except when this data is used to strengthen + the security or to improve the functionality of Our Service, or We are legally obligated to + retain this data for longer time periods.

+

Transfer of Your Personal Data

+

Your information, including Personal Data, is processed at the Company's operating offices + and in any other places where the parties involved in the processing are located. It means + that this information may be transferred to — and maintained on — computers located outside + of Your state, province, country or other governmental jurisdiction where the data + protection laws may differ than those from Your jurisdiction.

+

Your consent to this Privacy Policy followed by Your submission of such information + represents Your agreement to that transfer.

+

The Company will take all steps reasonably necessary to ensure that Your data is treated + securely and in accordance with this Privacy Policy and no transfer of Your Personal Data + will take place to an organization or a country unless there are adequate controls in place + including the security of Your data and other personal information.

+

Disclosure of Your Personal Data

+

Business Transactions

+

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be + transferred. We will provide notice before Your Personal Data is transferred and becomes + subject to a different Privacy Policy.

+

Law enforcement

+

Under certain circumstances, the Company may be required to disclose Your Personal Data if + required to do so by law or in response to valid requests by public authorities (e.g. a + court or a government agency).

+

Other legal requirements

+

The Company may disclose Your Personal Data in the good faith belief that such action is + necessary to:

+
    +
  • Comply with a legal obligation
  • +
  • Protect and defend the rights or property of the Company
  • +
  • Prevent or investigate possible wrongdoing in connection with the Service
  • +
  • Protect the personal safety of Users of the Service or the public
  • +
  • Protect against legal liability
  • +
+

Security of Your Personal Data

+

The security of Your Personal Data is important to Us, but remember that no method of + transmission over the Internet, or method of electronic storage is 100% secure. While We + strive to use commercially acceptable means to protect Your Personal Data, We cannot + guarantee its absolute security.

+

Children's Privacy

+

Our Service does not address anyone under the age of 13. We do not knowingly collect + personally identifiable information from anyone under the age of 13. If You are a parent or + guardian and You are aware that Your child has provided Us with Personal Data, please + contact Us. If We become aware that We have collected Personal Data from anyone under the + age of 13 without verification of parental consent, We take steps to remove that information + from Our servers.

+

If We need to rely on consent as a legal basis for processing Your information and Your + country requires consent from a parent, We may require Your parent's consent before We + collect and use that information.

+

Links to Other Websites

+

Our Service may contain links to other websites that are not operated by Us. If You click on + a third party link, You will be directed to that third party's site. We strongly advise You + to review the Privacy Policy of every site You visit.

+

We have no control over and assume no responsibility for the content, privacy policies or + practices of any third party sites or services.

+

Changes to this Privacy Policy

+

We may update Our Privacy Policy from time to time. We will notify You of any changes by + posting the new Privacy Policy on this page.

+

We will let You know via email and/or a prominent notice on Our Service, prior to the change + becoming effective and update the "Last updated" date at the top of this Privacy + Policy.

+

You are advised to review this Privacy Policy periodically for any changes. Changes to this + Privacy Policy are effective when they are posted on this page.

+

Contact Us

+

If you have any questions about this Privacy Policy, You can contact us:

+ +
+
+
+ + +
+

+ +
+ + + +
+ +
+
+ + +
+ + diff --git a/src/app/_modules/policy/privacy-policy/privacy-policy.component.scss b/src/app/_modules/policy/privacy-policy/privacy-policy.component.scss new file mode 100644 index 0000000..2debc95 --- /dev/null +++ b/src/app/_modules/policy/privacy-policy/privacy-policy.component.scss @@ -0,0 +1,5 @@ +.heading1{ + font: 400 24px/32px Roboto, "Helvetica Neue", sans-serif; + font-size: xx-large; + font-weight: 500; +} \ No newline at end of file diff --git a/src/app/_modules/policy/privacy-policy/privacy-policy.component.spec.ts b/src/app/_modules/policy/privacy-policy/privacy-policy.component.spec.ts new file mode 100644 index 0000000..d8c8d06 --- /dev/null +++ b/src/app/_modules/policy/privacy-policy/privacy-policy.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PrivacyPolicyComponent } from './privacy-policy.component'; + +describe('PrivacyPolicyComponent', () => { + let component: PrivacyPolicyComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PrivacyPolicyComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PrivacyPolicyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/policy/privacy-policy/privacy-policy.component.ts b/src/app/_modules/policy/privacy-policy/privacy-policy.component.ts new file mode 100644 index 0000000..d2b8a8e --- /dev/null +++ b/src/app/_modules/policy/privacy-policy/privacy-policy.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-privacy-policy', + templateUrl: './privacy-policy.component.html', + styleUrls: ['./privacy-policy.component.scss'] +}) +export class PrivacyPolicyComponent { + +} diff --git a/src/app/_modules/policy/refund-policy/refund-policy.component.html b/src/app/_modules/policy/refund-policy/refund-policy.component.html new file mode 100644 index 0000000..28d8e20 --- /dev/null +++ b/src/app/_modules/policy/refund-policy/refund-policy.component.html @@ -0,0 +1,173 @@ + + + + + + + + +
+ +
+ + +
+ + +
+ + +
+ + + +

REFUNDS

+

After receiving your return and inspecting the condition of your item, + we will process your return. Please allow at least two (2) days from the receipt of your item to process your return. + Refunds may take 1-2 billing cycles to appear on your credit card statement, + depending on your credit card company.

+ + +

Retention of Your Personal Data

+

The Company will retain Your Personal Data only for as long as is necessary for the purposes + set out in this Privacy Policy. We will retain and use Your Personal Data to the extent + necessary to comply with our legal obligations (for example, if we are required to retain + your data to comply with applicable laws), resolve disputes, and enforce our legal + agreements and policies.

+

The Company will also retain Usage Data for internal analysis purposes. Usage Data is + generally retained for a shorter period of time, except when this data is used to strengthen + the security or to improve the functionality of Our Service, or We are legally obligated to + retain this data for longer time periods.

+ + +

Changes to this Return and Refund Policy

+

We may update Our Return and Refund Policy from time to time. We will notify You of any changes by + posting the new Return and Refund Policy on this page.

+

We will let You know via email and/or a prominent notice on Our Service, prior to the change + becoming effective and update the "Last updated" date at the top of this Return and Refund + Policy.

+

You are advised to review this Return and Refund Policy periodically for any changes. Changes to this + Return and Refund Policy are effective when they are posted on this page.

+

Contact Us

+

If you have any questions about this Return and Refund Policy, You can contact us:

+ +
+
+
+ + +
+

+ +
+ + + +
+ +
+
+ + +
+ + diff --git a/src/app/_modules/policy/refund-policy/refund-policy.component.scss b/src/app/_modules/policy/refund-policy/refund-policy.component.scss new file mode 100644 index 0000000..2debc95 --- /dev/null +++ b/src/app/_modules/policy/refund-policy/refund-policy.component.scss @@ -0,0 +1,5 @@ +.heading1{ + font: 400 24px/32px Roboto, "Helvetica Neue", sans-serif; + font-size: xx-large; + font-weight: 500; +} \ No newline at end of file diff --git a/src/app/_modules/policy/refund-policy/refund-policy.component.spec.ts b/src/app/_modules/policy/refund-policy/refund-policy.component.spec.ts new file mode 100644 index 0000000..7d2ab47 --- /dev/null +++ b/src/app/_modules/policy/refund-policy/refund-policy.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RefundPolicyComponent } from './refund-policy.component'; + +describe('RefundPolicyComponent', () => { + let component: RefundPolicyComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ RefundPolicyComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(RefundPolicyComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/policy/refund-policy/refund-policy.component.ts b/src/app/_modules/policy/refund-policy/refund-policy.component.ts new file mode 100644 index 0000000..3afef0e --- /dev/null +++ b/src/app/_modules/policy/refund-policy/refund-policy.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-refund-policy', + templateUrl: './refund-policy.component.html', + styleUrls: ['./refund-policy.component.scss'] +}) +export class RefundPolicyComponent { + +} diff --git a/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.html b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.html new file mode 100644 index 0000000..117e14d --- /dev/null +++ b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.html @@ -0,0 +1,192 @@ + + + + + + + + +
+
+ +
+ +
+ +
+ + +

Terms and Conditions

+

Last updated: January 29, 2024

+

Please read these terms and conditions carefully before using Our Service.

+

Interpretation and Definitions

+

Interpretation

+

The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

+

Definitions

+

For the purposes of these Terms and Conditions:

+
    +
  • +

    Affiliate means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.

    +
  • +
  • +

    Country refers to: Kerala, India

    +
  • +
  • +

    Company (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Art.n Architects, Georges, Near Kavil Temple, Puzhuvathu, Changanacherry, Kottayam, Kerala 686101.

    +
  • +
  • +

    Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.

    +
  • +
  • +

    Service refers to the Website.

    +
  • +
  • +

    Terms and Conditions (also referred as "Terms") mean these Terms and Conditions that form the entire agreement between You and the Company managed by Shintu G George regarding the use of the Service. +

  • +
  • +

    Third-party Social Media Service means any services or content (including data, information, products or services) provided by a third-party that may be displayed, included or made available by the Service.

    +
  • +
  • +

    Website refers to Art.n Architects, accessible from https://artnouveau.in/

    +
  • +
  • +

    You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.

    +
  • +
+

Acknowledgment

+

These are the Terms and Conditions governing the use of this Service and the agreement that operates between You and the Company. These Terms and Conditions set out the rights and obligations of all users regarding the use of the Service.

+

Your access to and use of the Service is conditioned on Your acceptance of and compliance with these Terms and Conditions. These Terms and Conditions apply to all visitors, users and others who access or use the Service.

+

By accessing or using the Service You agree to be bound by these Terms and Conditions. If You disagree with any part of these Terms and Conditions then You may not access the Service.

+

You represent that you are over the age of 18. The Company does not permit those under 18 to use the Service.

+

Your access to and use of the Service is also conditioned on Your acceptance of and compliance with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your personal information when You use the Application or the Website and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our Service.

+

Links to Other Websites

+

Our Service may contain links to third-party web sites or services that are not owned or controlled by the Company.

+

The Company has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third party web sites or services. You further acknowledge and agree that the Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods or services available on or through any such web sites or services.

+

We strongly advise You to read the terms and conditions and privacy policies of any third-party web sites or services that You visit.

+

Termination

+

We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these Terms and Conditions.

+

Upon termination, Your right to use the Service will cease immediately.

+

Limitation of Liability

+

Notwithstanding any damages that You might incur, the entire liability of the Company and any of its suppliers under any provision of this Terms and Your exclusive remedy for all of the foregoing shall be limited to the amount actually paid by You through the Service or 100 USD if You haven't purchased anything through the Service.

+

To the maximum extent permitted by applicable law, in no event shall the Company or its suppliers be liable for any special, incidental, indirect, or consequential damages whatsoever (including, but not limited to, damages for loss of profits, loss of data or other information, for business interruption, for personal injury, loss of privacy arising out of or in any way related to the use of or inability to use the Service, third-party software and/or third-party hardware used with the Service, or otherwise in connection with any provision of this Terms), even if the Company or any supplier has been advised of the possibility of such damages and even if the remedy fails of its essential purpose.

+

Some states do not allow the exclusion of implied warranties or limitation of liability for incidental or consequential damages, which means that some of the above limitations may not apply. In these states, each party's liability will be limited to the greatest extent permitted by law.

+

"AS IS" and "AS AVAILABLE" Disclaimer

+

The Service is provided to You "AS IS" and "AS AVAILABLE" and with all faults and defects without warranty of any kind. To the maximum extent permitted under applicable law, the Company, on its own behalf and on behalf of its Affiliates and its and their respective licensors and service providers, expressly disclaims all warranties, whether express, implied, statutory or otherwise, with respect to the Service, including all implied warranties of merchantability, fitness for a particular purpose, title and non-infringement, and warranties that may arise out of course of dealing, course of performance, usage or trade practice. Without limitation to the foregoing, the Company provides no warranty or undertaking, and makes no representation of any kind that the Service will meet Your requirements, achieve any intended results, be compatible or work with any other software, applications, systems or services, operate without interruption, meet any performance or reliability standards or be error free or that any errors or defects can or will be corrected.

+

Without limiting the foregoing, neither the Company nor any of the company's provider makes any representation or warranty of any kind, express or implied: (i) as to the operation or availability of the Service, or the information, content, and materials or products included thereon; (ii) that the Service will be uninterrupted or error-free; (iii) as to the accuracy, reliability, or currency of any information or content provided through the Service; or (iv) that the Service, its servers, the content, or e-mails sent from or on behalf of the Company are free of viruses, scripts, trojan horses, worms, malware, timebombs or other harmful components.

+

Some jurisdictions do not allow the exclusion of certain types of warranties or limitations on applicable statutory rights of a consumer, so some or all of the above exclusions and limitations may not apply to You. But in such a case the exclusions and limitations set forth in this section shall be applied to the greatest extent enforceable under applicable law.

+

Governing Law

+

The laws of the Country, excluding its conflicts of law rules, shall govern this Terms and Your use of the Service. Your use of the Application may also be subject to other local, state, national, or international laws.

+

Disputes Resolution

+

If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the Company.

+

For European Union (EU) Users

+

If You are a European Union consumer, you will benefit from any mandatory provisions of the law of the country in which You are resident.

+

United States Legal Compliance

+

You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.

+

Severability and Waiver

+

Severability

+

If any provision of these Terms is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law and the remaining provisions will continue in full force and effect.

+

Waiver

+

Except as provided herein, the failure to exercise a right or to require performance of an obligation under these Terms shall not affect a party's ability to exercise such right or require such performance at any time thereafter nor shall the waiver of a breach constitute a waiver of any subsequent breach.

+

Translation Interpretation

+

These Terms and Conditions may have been translated if We have made them available to You on our Service. +You agree that the original English text shall prevail in the case of a dispute.

+

Changes to These Terms and Conditions

+

We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a revision is material We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.

+

By continuing to access or use Our Service after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the website and the Service.

+ + +

Contact Us

+

If you have any questions about this Return and Refund Policy, You can contact us:

+ +
+
+
+ + +
+

+ +
+ + + +
+ +
+
+ + +
+ + diff --git a/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.scss b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.scss new file mode 100644 index 0000000..2debc95 --- /dev/null +++ b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.scss @@ -0,0 +1,5 @@ +.heading1{ + font: 400 24px/32px Roboto, "Helvetica Neue", sans-serif; + font-size: xx-large; + font-weight: 500; +} \ No newline at end of file diff --git a/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.spec.ts b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.spec.ts new file mode 100644 index 0000000..800b38e --- /dev/null +++ b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TermsAndConditionsComponent } from './terms-and-conditions.component'; + +describe('TermsAndConditionsComponent', () => { + let component: TermsAndConditionsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TermsAndConditionsComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TermsAndConditionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.ts b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.ts new file mode 100644 index 0000000..0e71e54 --- /dev/null +++ b/src/app/_modules/policy/terms-and-conditions/terms-and-conditions.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-terms-and-conditions', + templateUrl: './terms-and-conditions.component.html', + styleUrls: ['./terms-and-conditions.component.scss'] +}) +export class TermsAndConditionsComponent { + +} diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.html b/src/app/_modules/report/bid-final-report/bid-final-report.component.html new file mode 100644 index 0000000..d9a6338 --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.html @@ -0,0 +1,602 @@ + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + +
+ + + + +
+
+

Bid Final Report

+
+ +
+

Tender Information:

+
+ + +
+
+ + {{'tender'|translate}} : + {{headerData?.title}} + +
+
+ + {{'publishedDate'|translate}} : + {{headerData?.publishDate | date: 'MMM d, y, h:mm:ss a'}} + +
+
+ + +
+
+ + {{'tenderId'|translate}} : + {{tenderInputId}} + +
+
+ + {{'bidOpenDate'|translate}} : + {{headerData?.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}} + +
+
+ +
+
+

Bid Summary:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + + + {{'totalBidAmount'|translate}} + + + + {{element?.finalBidAmt}} + + + + + + + + + +
+ {{'EMD'|translate}} +
+ + + + + + +
+ + + +
+ {{'BOQ Documents'|translate}} +
+ + + + + + +
+ + + + +
+ {{'BOQ Status'|translate}} +
+ + + {{ element.boqStatus }} + + +
+ + + +
+ {{'Revised BOQ Documents'|translate}} +
+ + + + + + +
+ + + + + + +
+
+
+
+

No Reports available.

+
+ +
+ + +
+ + +
+
+ + {{'Compose an email message'}} + +
+
+ + + +
+
+ +
+ + Subject + + + + + Content + + + +
+ + +
+
+ +
+
+ +
+ + + +
+
+
+
+ + + + + +
+
+ + {{'Sending Report via Email'}} + +
+
+ + + +
+
+ +
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+ {{captchaText}} +
+
+
+ Type the word Above : +
+ +
+ + Text + + +
+ +
+
+
+ +
+
+ refresh +
+ + +
+
+
+ Captcha Not Matching +
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.scss b/src/app/_modules/report/bid-final-report/bid-final-report.component.scss new file mode 100644 index 0000000..69c9d7c --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.scss @@ -0,0 +1,527 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #a6a6a6; + color: white; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media (max-width: 767px) { + .card { + min-width: 600px; + } +} + + +@media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } +} + +.mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); +} + +.table-container { + margin-top: 20px +} + + +.backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + +} + +.backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ +} + +.printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + +} + +.printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ +} + +.excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 25px; +} + +.excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ +} + +.buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; +} + +.reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; +} + +.bidHeading { + font-family: texg; + color: #353535; +} + +.tenderInfo { + font-family: texg; + color: #353535; +} + +.subHead { + font-family: texg; + color: #353535; +} + +.subDetail { + font-family: nucleo; + color: #353535; +} + +.captchaFont { + font-family: captcha; + font-size: large; +} + +.captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); +} + +.captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; +} +.captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ +} + +.rotate-icon { + animation: rotate 1s infinite; +} + +@keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.table-responsive { + overflow-x: scroll; +} + + + +// ------------------------digital signature----------------------------//////// + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} +.mat-fab.mat-accent{ + background-color: white; + width: 42px; + height: 41px; + margin-right: 10px; + box-shadow: 0px 2px 10px -5px black; + float: right; + margin-top: 4px; + + margin-bottom: 5px; +} +.ng2-tag-input.ng2-tag-input--focused[_ngcontent-bek-c129] { + border: 2px solid black; + border-radius: 7px; +} + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; +} \ No newline at end of file diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts b/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts new file mode 100644 index 0000000..8326734 --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { BidFinalReportComponent } from './bid-final-report.component'; + +describe('BidFinalReportComponent', () => { + let component: BidFinalReportComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ BidFinalReportComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(BidFinalReportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/report/bid-final-report/bid-final-report.component.ts b/src/app/_modules/report/bid-final-report/bid-final-report.component.ts new file mode 100644 index 0000000..7978005 --- /dev/null +++ b/src/app/_modules/report/bid-final-report/bid-final-report.component.ts @@ -0,0 +1,625 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; +import Swal from 'sweetalert2'; +import { DatePipe, Location } from '@angular/common' +import * as XLSX from 'xlsx'; +import { FormBuilder, FormGroup, FormControl } from '@angular/forms'; +import { HttpClient } from '@angular/common/http'; +import { Observable, of } from 'rxjs'; + +import { filter, map } from 'rxjs/operators'; +import { emailDto } from 'src/app/_dto/email.dto'; + +@Component({ + selector: 'app-bid-final-report', + templateUrl: './bid-final-report.component.html', + styleUrls: ['./bid-final-report.component.scss'] +}) +export class BidFinalReportComponent implements OnInit { + + printSize = [{ name: "landscape" }, { name: "portrait" }] + + printType: any; + + title = 'Bid Final Report'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = [] + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + tenderInputId: any; + + dialogRef: any; + + sndMaildialogRef: any; + + captchaText: string; + + userCaptchaInput: string; + + captchaMatching: boolean = true; + + fileSelected: boolean; + + fileSelected2: boolean; + + showPopup: boolean = false; + + Secretary: any; + + President: any; + + selectedSecretaryFile: any; + + selectedPresidentFile: any; + + SecretarySigned: boolean; + + PresidentSigned: boolean; + + userDocId: any; + + isIconRotating: boolean; + + seculevel: string; + + form: FormGroup; + + email: string; + + disabled = true; + + items = []; + + inputText = 'text'; + + itemsAsObjects = [{ id: 0, name: 'Angular', readonly: true }, { id: 1, name: 'React' }]; + + autocompleteItems = ['Item1', 'item2', 'item3']; + + autocompleteItemsAsObjects = [ + { value: 'Item1', id: 0, extra: 0 }, + { value: 'item2', id: 1, extra: 1 }, + 'item3' + ]; + + subject: any + + emailData: emailDto; + + PayStatus: any; + + payType: string; + + boqStatus: any; + + loading: boolean = false; + + headerButtonVisible: boolean; + + + constructor( + private route: ActivatedRoute, + private _router: Router, + private _masterService: MasterService, + private dialog: MatDialog, + private _ui: UiService, + private _errorService: ErrorTranslateService, + public _location: Location, + private datePipe: DatePipe, + private http: HttpClient + ) { + + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.seculevel = localStorage.getItem('seculevel') + + + this.form = new FormBuilder().group({ + chips: [['chip'], []] + }); + } + + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + + + + this.printType = 'portrait'; + this.showPopup = true; + this.fileSelected = false + this.fileSelected2 = false + this.seculevel = localStorage.getItem('seculevel') + + this.items = this.tableData?.email; + this.emailData = new emailDto(); + } + + + + closePopup() { + this.navigateTo('/dashboard') + this.showPopup = false; + this.Secretary = '' + this.President = '' + } + + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog() { + this.dialogRef.close() + } + + + + + + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this._location.back(); + } + + getHeaderData(id) { + this.loading = true; + this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => { + this.headerData = res; + this.tenderInputId = res.tenderId + this.loading = false; + + let currentDate = new Date(); + let bidOpenDate = new Date(this.headerData.bidOpenDate); + + + if (currentDate >= bidOpenDate) { + + this.headerButtonVisible = true; + } else { + this.headerButtonVisible = false; + } + + + if (this.headerButtonVisible) { + this.displaycolumns = ['slNo', 'name', 'mobileNumber', 'email', 'finalBidAmt', 'ddDocuments', 'aadharNo']; + } + else { + this.displaycolumns = ['slNo', 'name', 'mobileNumber', 'email']; + + } + }); + + } + + getTableData(id) { + this.loading = true; + this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => { + this.loading = false; + // this.PayStatus=res.emdFeeStatus; + // if(res.emdFeeType==null){ + // this.payType ='not paid' + // }else { + // this.payType = res.emdFeeType + // } + + + // this.tableData = res.report.filter(element => element.status == 'S' && element.finalBidAmt); + this.tableData = res.report; + this.tableData.forEach(element => { + if (element.boqDocument != null && element.boqUser != null) { + this.boqStatus = 'Uploaded' + + + } else if (element.boqDocument == null && element.boqUser == null) { + this.boqStatus = 'not applicable' + + + } else if (element.boqDocument == null && element.boqUser != null) { + this.boqStatus = 'not uploaded' + + + } + element.boqStatus = this.boqStatus; + }); + + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + printScreen() { + + if (this.printType.trim() == 'landscape') { + var css = `@page { size: ${this.printType}; }`, + head = document.head || document.getElementsByTagName('head')[0], + style = document.createElement('style'); + style.type = 'text/css'; + style.media = 'print'; + style.appendChild(document.createTextNode(css)); + head.appendChild(style); + } + // this._menuService.isShowSidebar = false + setTimeout(() => { + window.print(); + }, 1000); + } + + + + excelDownload() { + const ws: XLSX.WorkSheet = XLSX.utils.table_to_sheet(this.table.nativeElement); + const merge = [ + { s: { r: 0, c: 4 }, e: { r: 0, c: 7 } } + ]; + ws["!merges"] = merge; + const wb: XLSX.WorkBook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, ws, 'Sheet1'); + XLSX.writeFile(wb, 'Bid-final-Report.xlsx'); + } + + + sortData(sort: Sort) { + + + // const data = this.tableData.slice(); + // if (!sort.active || sort.direction === '') { + // this.dataSource.data = data; + + // return; + // } + + // this.dataSource.data = data.sort((a, b) => { + // const isAsc = sort.direction === 'asc'; + // switch (sort.active) { + // case 'title': + // return compare(a.title, b.title, isAsc); + // case 'publishedDate': + // return compare(a.publishDate, b.publishDate, isAsc); + // case 'bidOpenDate': + // return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + // default: + // return 0; + // } + // }); + } + + downloadUserDocs(userId) { + let newWindow = window.location.href = `${environment.apiUrl}/${apiUrl.userBidDoc}/${this.tenderId}/${userId}` + } + downloadDDdocs(docName) { + // let newWindow = window.location.href = `${environment.apiUrl}/${apiUrl.ddUpload}/${this.tenderId}/${userId}` + this._masterService.downloadFileWithAuth(apiUrl.ddUpload, docName).then(res => { + + + + }) + } + + downloadBoqdocs(docName) { + this._masterService.downloadFileWithAuth(apiUrl.quotedTender, docName).then(res => { + + + + }) + } + + openDialogBox(templateRef, userId) { + this.userDocId = userId + this.dialogRef = this.dialog.open(templateRef, { + disableClose: false, + width: '400px' + }); + + this.generateRandomText(); + this.captchaMatching = true + this.userCaptchaInput = '' + } + + + generateRandomText() { + this.isIconRotating = true; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + let randomText = ''; + + for (let i = 0; i < 6; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + randomText += characters[randomIndex]; + } + + this.captchaText = randomText; + + setTimeout(() => { + this.isIconRotating = false; + }, 1000); + + + } + + captchaCheck() { + if (this.captchaText == this.userCaptchaInput) { + this.dialogRef.close(); + this.downloadUserDocs(this.userDocId) + + } + else { + this.captchaMatching = false + setTimeout(() => { + this.captchaMatching = true + }, 2000); + } + + } + + // sendMail(){ + // this._masterService.getMasterDatabyId(apiUrl.emailReport,this.tenderId).then(res=>{ + // this._ui.toastMessage(this._errorService.translate("emailSentSuccessfully")); + // this.getHeaderData(this.tenderId) + // },err=>{ + // this._ui.toastMessage(err.error.message); + // this.getHeaderData(this.tenderId) + + // }) + // } + + goToReportQouting() { + this.navigateTo(`report-quoting/${this.tenderId}`) + } + + gotoRequotedReport() { + this.navigateTo(`requoted-report/${this.tenderId}`) + + } + + + + close() { + this.sndMaildialogRef.close(); + } + + sendReportMail(templateRef) { + this.items = [] + this.sndMaildialogRef = this.dialog.open(templateRef, { + disableClose: false, + width: '600px' + }); + } + + sendReportViaMail() { + + if (!this.items || this.items.length < 1) { + this._ui.toastMessage('Add Email IDs. (if you have already entered the mail id, then press enter or tab on the column)', 5000); + return + } + this.emailData.toMail = [] + this.items.forEach(element => { + this.emailData.toMail.push(element.value) + }); + + + + this._masterService.saveMasterData(apiUrl.report + `/${this.tenderId}`, this.emailData).then(res => { + this.emailData.toMail = [] + this.close(); + this._ui.toastMessage('Bid Report sent successfully') + },err=>{ + this._ui.toastMessage('Something went wrong!') + this.close(); + + + }) + } + + sendEmailMsg(templateRef) { + this.items = [] + this.emailData = new emailDto(); + this.dialogRef = this.dialog.open(templateRef, { + disableClose: false, + width: '600px' + }); + + } + + cancelEmailDialog() { + this.closeDialog(); + } + + + emailSubmit() { + + if (!this.items || this.items.length < 1) { + this._ui.toastMessage('Add Email IDs. (if you have already entered the mail id, then press enter or tab on the column)', 5000); + return + } + if (!this.emailData.subject || this.emailData.subject == null || this.emailData.subject == '') { + this._ui.toastMessage('Add Subject'); + return + } + if (!this.emailData.content || this.emailData.content == null || this.emailData.content == '') { + this._ui.toastMessage('Add Content'); + return + } + + this.emailData.toMail = [] + this.items.forEach(element => { + this.emailData.toMail.push(element.value) + }); + + + + this._masterService.saveMasterData(apiUrl.email, this.emailData).then(res => { + this._ui.toastMessage(this._errorService.translate("emailSentSuccessfully")); + this.closeDialog(); + }, err => { + this._ui.toastMessage(err.error.message); + this.closeDialog(); + + }) + } + /////////////////////////////////////////// + + private emailValid(control: FormControl) { + if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(control.value) === false) { + return { + 'emailValid@': true + }; + } + + return null; + } + + public requestAutocompleteItems = (text: string) => { + const url = `https://api.github.com/search/repositories?q=${text}`; + return this.http + .get(url) + .pipe( + map((data: any) => data.items.map(item => item.full_name)) + ); + }; + + public requestAutocompleteItemsFake = (text: string): Observable => { + return of([ + 'item1', 'item2', 'item3' + ]); + }; + + public options = { + readonly: undefined, + placeholder: '+ Tag' + }; + + public onAdd(item) { + + } + + public onRemove(item) { + + } + + public onSelect(item) { + + } + + public onFocus(item) { + + } + + public onTextChange(text) { + + } + + public onBlur(item) { + + } + + public async onTagEdited(item) { + + + } + + public onValidationError(item) { + + } + + public transform(value: string): Observable { + const item = { display: `@${value}`, value: `@${value}` }; + return of(item); + } + + private startsWithAt(control: FormControl) { + if (control.value.charAt(0) !== '@') { + return { + 'startsWithAt@': true + }; + } + + return null; + } + + private endsWith$(control: FormControl) { + if (control.value.charAt(control.value.length - 1) !== '$') { + return { + 'endsWith$': true + }; + } + + return null; + } + + private validateAsync(control: FormControl): Promise { + return new Promise(resolve => { + const value = control.value; + const result: any = isNaN(value) ? { + isNan: true + } : null; + + setTimeout(() => { + resolve(result); + }, 1); + }); + } + + public asyncErrorMessages = { + isNan: 'Please only add numbers' + }; + + public validators = [this.emailValid]; + + public asyncValidators = [this.validateAsync]; + + public errorMessages = { + 'emailValid@': 'Invalid email' + }; + + public onAdding(tag): Observable { + const confirm = window.confirm('Do you really want to add this tag?'); + return of(tag).pipe(filter(() => confirm)); + } + + public onRemoving(tag): Observable { + const confirm = window.confirm('Do you really want to remove this tag?'); + return of(tag).pipe(filter(() => confirm)); + } + + public asyncOnAdding(tag): Observable { + const confirm = window.confirm('Do you really want to add this tag?'); + return of(tag).pipe(filter(() => confirm)); + } + + +} + + + +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} \ No newline at end of file diff --git a/src/app/_modules/report/report-quoting/report-quoting.component.html b/src/app/_modules/report/report-quoting/report-quoting.component.html new file mode 100644 index 0000000..763e3cd --- /dev/null +++ b/src/app/_modules/report/report-quoting/report-quoting.component.html @@ -0,0 +1,187 @@ +
+ + + +
+ + + +
+
+ +
+

Re Quoting and Revise Quotation - {{noOfQuotes}}

+ +

+ + +
+ +
+
+ + +
+
+ + + + +
+
+ search +
+
+ + + + +
+
+ + +
+ + +
+
+ + +
+
+
+ + + + + + +
+
+ + + + + +
+ + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobile}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + +
+ + + +
+
+
+
+
+ + +
+ +
+ +
+
+ + \ No newline at end of file diff --git a/src/app/_modules/report/report-quoting/report-quoting.component.scss b/src/app/_modules/report/report-quoting/report-quoting.component.scss new file mode 100644 index 0000000..f9f8be7 --- /dev/null +++ b/src/app/_modules/report/report-quoting/report-quoting.component.scss @@ -0,0 +1,669 @@ + +// mat-table { +// padding-top: 10px !important; +// // table-layout: fixed; +// width: 100%; +// display: table; +// overflow-x: scroll; + +// .table-headers { +// padding: 5px; +// color: #505050; +// font-weight: 900; +// font-size: medium; +// background-color: #f0f0f0; +// font-family: nucleo; +// } + +// .table-headers:hover { +// background-color: #ececec; +// color: #46AC9E; +// } + +// .table-content { +// padding: 5px; +// overflow-wrap: inherit; +// font-family: nucleo; + +// } + +// .table-column { +// width: 100%; +// } +// } + + +// th, +// td { +// padding: 10px; +// // border: 1px solid #ccc; +// word-wrap: break-word; +// white-space: normal; + +// } + +// .h2 { +// font-family: sans-serif; +// font-size: 26px; +// font-weight: 500; +// } + + +// .table td { +// word-break: break-word; +// } + +// .table-break-word { +// word-break: break-word; +// } + + + +// .top-bar { +// display: flex; +// flex-wrap: wrap; +// justify-content: space-between; +// border: 1px solid #e3e3e3; +// width: 100%; +// margin: auto; +// padding: auto; +// } + +// .header { +// padding: 20px; +// width: 100%; +// min-width: 350px; +// } + +// .header>h6>a { +// text-decoration: none; +// color: #262627; +// } + +// .header>h6>a:hover { +// text-decoration: underline; +// cursor: pointer; +// } + +// .mat-sort-header-content { +// text-align: center; +// display: flex; +// align-items: center; +// } +// .table-responsive { +// overflow-x: scroll; +// } + +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #a6a6a6; + color: rgb(255, 255, 255); + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media (max-width: 767px) { + .card { + min-width: 600px; + } +} + + +@media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } +} + +.mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); +} + +.table-container { + margin-top: 20px +} + + +.backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + +} + +.backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ +} + +.printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 5px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + border: 1px solid orangered; + +} + +.printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + background-color: orangered; + color: white; +} + +.excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; +} + +.excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ +} + +.buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; +} + +.reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; +} + +.bidHeading { + font-family: texg; + color: #353535; +} + +.tenderInfo { + font-family: texg; + color: #353535; +} + +.subHead { + font-family: texg; + color: #353535; +} + +.subDetail { + font-family: nucleo; + color: #353535; +} + +.captchaFont { + font-family: captcha; + font-size: large; +} + +.captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); +} + +.captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; +} +.captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ +} + +.rotate-icon { + animation: rotate 1s infinite; +} + +@keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +// .table-responsive { +// overflow-x: scroll; +// } + + + +// ------------------------digital signature----------------------------//////// + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} +.mat-fab.mat-accent{ + background-color: white; + width: 42px; + height: 41px; + margin-right: 10px; + box-shadow: 0px 2px 10px -5px black; + float: right; + margin-top: 5px; + + margin-bottom: 5px; +} +.ng2-tag-input.ng2-tag-input--focused[_ngcontent-bek-c129] { + border: 2px solid black; + border-radius: 7px; +} + + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; +} + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/report/report-quoting/report-quoting.component.spec.ts b/src/app/_modules/report/report-quoting/report-quoting.component.spec.ts new file mode 100644 index 0000000..492a803 --- /dev/null +++ b/src/app/_modules/report/report-quoting/report-quoting.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ReportQuotingComponent } from './report-quoting.component'; + +describe('ReportQuotingComponent', () => { + let component: ReportQuotingComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ ReportQuotingComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(ReportQuotingComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/report/report-quoting/report-quoting.component.ts b/src/app/_modules/report/report-quoting/report-quoting.component.ts new file mode 100644 index 0000000..eef295c --- /dev/null +++ b/src/app/_modules/report/report-quoting/report-quoting.component.ts @@ -0,0 +1,276 @@ +import { Component ,OnInit ,ViewChild} from '@angular/core'; +import { MatMenuTrigger } from '@angular/material/menu'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import {Location} from '@angular/common' + + +@Component({ + selector: 'app-report-quoting', + templateUrl: './report-quoting.component.html', + styleUrls: ['./report-quoting.component.scss'] +}) +export class ReportQuotingComponent implements OnInit { + + dataSource: MatTableDataSource; + + displaycolumns: string[] = ['selectUser','slNo', 'name', 'mobileNumber', 'email']; + + tableData: any; + + tenderId:any; + + allCheck:boolean=false; + + selectedUsers: any[]; + + userLov: any; + + selectAllChecked: boolean = false; + data: any[]; + userDataCopy: any; + searchTerm: any; + loading:boolean=false; + + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + @ViewChild(MatMenuTrigger) trigger: MatMenuTrigger; + noData: boolean; + pageLength: any; + seculevel: string; + selected: boolean; + noOfQuotes: number; + + + constructor( private _masterService:MasterService, + private route:ActivatedRoute, + private _ui:UiService, + private router:Router, + private _location:Location, + private errorTranslateService:ErrorTranslateService ){ + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.seculevel = localStorage.getItem('seculevel') + + } + + ngOnInit(): void { + + this.getData() + + this.selectedUsers=[] + } + + getData(){ + + this._masterService.getMasterDatabyId(apiUrl.revisedTenderUsers,this.tenderId).then(res => { + this.userLov=res; + this.noOfQuotes =parseInt(this.userLov[0].requotedOrder)+1; + // this.tableData = res.report.filter(element => element.status == 'S' && element.finalBidAmt); + // this.userDataCopy =res.report.filter(element => element.status == 'S' && element.finalBidAmt); + // this.userLov = res.report.filter(element => element.status == 'S' && element.finalBidAmt); + this.tableData = res + this.userDataCopy =res + this.userLov = res + + let boqCount =0; + this.tableData.forEach(element => { + if(element.boqUser&& element.boqUser!=''){ + element.selected = true; + boqCount=boqCount+1; + + + + } + + }); + + if(boqCount==this.tableData.length){ + this.allCheck=true; + } + + this.dataSource = new MatTableDataSource(this.tableData); + this.noData = (this.tableData && this.tableData.length == 0) ? true : false; + this.pageLength = this.tableData.length; + this.dataSource.sort = this.sort; + }) + } + + + backButton() { + // this.navigateTo('/dashboard') + // this.backClick.emit() + this._location.back(); + } + + selectAllUser(event) { + + if (event.checked) { + this.selectedUsers=[]; + + this.userLov.forEach(user => { + let temp ={} + temp = {tenderId:this.tenderId,userId:user.userId,email:user.email} + + this.selectedUsers.push(temp) + }); + this.userLov.forEach(element => { + element.selected = true + }); + this.allCheck = true; + } else { + this.userLov.forEach(element => { + element.selected = false + }); + this.selectedUsers=[]; + this.allCheck = false; + } + + this.selectAllChecked = event.checked; // Update the state of the "Select All" checkbox + + } + + + selectUser(event,element,index) { + + + + let userId =element.userId; + let email = element.email; + if (event.checked) { + let temp = {} + temp = {tenderId:this.tenderId,userId:userId,email:email} + + + this.selectedUsers.push(temp); + + + if(this.selectedUsers.length >0 && this.selectedUsers.length == this.userLov.length){ + this.allCheck = true; + } + } else { + this.allCheck = false; + + for (let i = 0; i < this.selectedUsers.length; i++) { + if( this.selectedUsers[i].userId == userId){ + this.selectedUsers.splice(i,1); + } + + } + } + + + + } + + + + sortData(sort: Sort) { + const data = this.tableData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'name': + return compare(a.name, b.name, isAsc); + case 'mobileNumber': + return compare(a.mobileNumber, b.mobileNumber, isAsc); + case 'email': + return compare(a.email, b.email, isAsc); + + default: + return 0; + } + }); + } + + search() { + this.userLov = [...this.userDataCopy]; + this.data = [...this.userLov]; + + if (!this.searchTerm || this.searchTerm.trim() === "") { + this._ui.toastMessage(this.errorTranslateService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + + this.userLov = this.data.filter(res => { + + let includedInUser = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserId = (res.userId) ? res.userId.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserPhno = (res.mobileNumber) ? res.mobileNumber.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInUser || includedInUserId || includedInUserEmail || includedInUserPhno) { + return true; + } + + else + return false; + }); + + this.noData = (this.userLov.length === 0); + this.pageLength = this.userLov.length; + this.dataSource = new MatTableDataSource(this.userLov); + } + + + + reviseTender(){ + + + if(this.selectedUsers.length<=0 ){ + this._ui.toastMessage('Please select any User ') + + return true ; + } + this.selectedUsers.forEach(element => { + element.requotedOrder = this.noOfQuotes; + + }); + this._masterService.saveMasterData(apiUrl.revisedTender,this.selectedUsers).then(res=>{ + + this._ui.toastMessage('Users selected successfully'); + + if(this.seculevel =='SuperAdmin'){ + // this.navigateTo(`/${this.seculevel}/dashboard`) + this.navigateTo('sadmin/dashboard') + } + else if(this.seculevel =='Admin'){ + this.navigateTo('admin/dashboard') + } + }) + } + + + + reset(){ + this.searchTerm = ""; + this.getData(); + this.allCheck = false; + + } + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + } + + function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); + } diff --git a/src/app/_modules/report/report-routing.module.ts b/src/app/_modules/report/report-routing.module.ts new file mode 100644 index 0000000..a020a8b --- /dev/null +++ b/src/app/_modules/report/report-routing.module.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; +import { LayoutComponentComponent } from '../admin/layout-component/layout-component.component'; +import { BidFinalReportComponent } from './bid-final-report/bid-final-report.component'; +import { ReportQuotingComponent } from './report-quoting/report-quoting.component'; +import { ReportComponent } from './report.component'; +import { RequotedReportComponent } from './requoted-report/requoted-report.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: '/dashboard', pathMatch: 'full' }, + { path: 'bid-final-report/:id', component:BidFinalReportComponent}, + { path: 'report-quoting/:id', component:ReportQuotingComponent}, + { path: 'requoted-report/:id', component:RequotedReportComponent} + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class ReportRoutingModule { } diff --git a/src/app/_modules/report/report.component.html b/src/app/_modules/report/report.component.html new file mode 100644 index 0000000..b63b594 --- /dev/null +++ b/src/app/_modules/report/report.component.html @@ -0,0 +1 @@ +

report worked

\ No newline at end of file diff --git a/src/app/_modules/report/report.component.scss b/src/app/_modules/report/report.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/report/report.component.ts b/src/app/_modules/report/report.component.ts new file mode 100644 index 0000000..309a633 --- /dev/null +++ b/src/app/_modules/report/report.component.ts @@ -0,0 +1,16 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild } from '@angular/core'; + + + +@Component({ + selector: 'app-report', + templateUrl: './report.component.html', + styleUrls: ['./report.component.scss'] +}) +export class ReportComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } +} diff --git a/src/app/_modules/report/report.module.ts b/src/app/_modules/report/report.module.ts new file mode 100644 index 0000000..f931fe2 --- /dev/null +++ b/src/app/_modules/report/report.module.ts @@ -0,0 +1,66 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { ReportRoutingModule } from './report-routing.module'; +import { ReportComponent } from './report.component'; +import { BidFinalReportComponent } from './bid-final-report/bid-final-report.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import { LOCALE_ID } from '@angular/core'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { HttpClientModule } from '@angular/common/http'; + +import { TagInputModule } from 'ngx-chips'; +import { MatMenuModule } from '@angular/material/menu'; +import { ReportQuotingComponent } from './report-quoting/report-quoting.component'; +import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox'; +import { RequotedReportComponent } from './requoted-report/requoted-report.component'; +@NgModule({ + declarations: [ReportComponent, BidFinalReportComponent, ReportQuotingComponent, RequotedReportComponent], + imports: [ + CommonModule, + ReportRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule, + BrowserAnimationsModule, + TagInputModule, + HttpClientModule, + MatMenuModule, + MatCheckboxModule + ] +}) +export class ReportModule { } diff --git a/src/app/_modules/report/requoted-report/requoted-report.component.html b/src/app/_modules/report/requoted-report/requoted-report.component.html new file mode 100644 index 0000000..d03e815 --- /dev/null +++ b/src/app/_modules/report/requoted-report/requoted-report.component.html @@ -0,0 +1,247 @@ +
+ +
+
+ +
+
+ Re Quoted Tender Reports +
+ +
+ +
+ + +
+ + +
+ +
+
+ + +
+
+ + + + +
+
+ search +
+
+ + + + +
+
+ + +
+ + +
+
+ +
+
+
+
+
+ +
+
+ + + Select no of Re Quote + + + + Round -{{order.order}} + + + +
+ +
+ + + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userD?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.userD?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.userD?.email}} + + +
+ + + + + + + +
+ {{'BOQ Status'|translate}} +
+ + + {{ element.boqStatus }} + + +
+ + + +
+ {{'Revised BOQ Documents'|translate}} +
+ + + + + + +
+ + + + + + +
+ +
+
+

No Reports available.

+
+ +
+
+

please select the number of tender Re + Quote

+
+ +
+
+
+
+ + +
+ +
+
+ + \ No newline at end of file diff --git a/src/app/_modules/report/requoted-report/requoted-report.component.scss b/src/app/_modules/report/requoted-report/requoted-report.component.scss new file mode 100644 index 0000000..1eab72f --- /dev/null +++ b/src/app/_modules/report/requoted-report/requoted-report.component.scss @@ -0,0 +1,199 @@ + + +.backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + + } + + .backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; +} + +mat-table { + // padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #a6a6a6; + color: #ffffff; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + overflow: scroll; +} + +.container-responsive{ + background-color: whitesmoke; +} + + + + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} +.master-header{ + font-size: x-large; +} + +@media (max-width: 767px) { + .master-header{ + font-size: large; + } +} \ No newline at end of file diff --git a/src/app/_modules/report/requoted-report/requoted-report.component.spec.ts b/src/app/_modules/report/requoted-report/requoted-report.component.spec.ts new file mode 100644 index 0000000..100eb83 --- /dev/null +++ b/src/app/_modules/report/requoted-report/requoted-report.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RequotedReportComponent } from './requoted-report.component'; + +describe('RequotedReportComponent', () => { + let component: RequotedReportComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ RequotedReportComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(RequotedReportComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/report/requoted-report/requoted-report.component.ts b/src/app/_modules/report/requoted-report/requoted-report.component.ts new file mode 100644 index 0000000..7b6aad0 --- /dev/null +++ b/src/app/_modules/report/requoted-report/requoted-report.component.ts @@ -0,0 +1,175 @@ +import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { Location } from '@angular/common' +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ActivatedRoute } from '@angular/router'; +import { MatTableDataSource } from '@angular/material/table'; +import { MatSort } from '@angular/material/sort'; +import { log } from 'console'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; + +@Component({ + selector: 'app-requoted-report', + templateUrl: './requoted-report.component.html', + styleUrls: ['./requoted-report.component.scss'] +}) + +export class RequotedReportComponent implements OnInit { + loading: boolean; + + reportData: any; + searchTerm:any; + tenderID: number; + tableData: any; + dataSource: MatTableDataSource; + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'boqDocument', 'boqStatus']; + selectedOrder: any + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + formattedOrders: any[] + data: any; + boqStatus: string; + dataCopy: any; + allData: any; + + constructor(private _location: Location, + private _masterService: MasterService, + private _route: ActivatedRoute, + private _ui :UiService, + private errorTranslateService:ErrorTranslateService) { + + this.tenderID = + this._route.snapshot.paramMap.get('id') + + + } + + ngOnInit(): void { + this.getData(); + + } + + getData() { + this.loading = true; + this._masterService.getMasterDatabyId(apiUrl.revisedTenderReport, this.tenderID).then(res => { + this.tableData = res; + this.loading = false; + + let uniqueOrders = []; + + this.tableData.forEach(element => { + if (element.revisedDocument != null) { + this.boqStatus = 'Uploaded' + + + } else { + this.boqStatus = 'not uploaded' + + + } + element.boqStatus = this.boqStatus; + }); + + this.tableData.forEach(element => { + let order = element.requotedOrder; + + if (!uniqueOrders.includes(order)) { + uniqueOrders.push(order); + } + }); + + this.formattedOrders = uniqueOrders.map(order => { + return { order: order }; + }); + + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + + let groupedOrders = {}; + + this.tableData.forEach(element => { + let order = element.requotedOrder; + + if (!groupedOrders[order]) { + groupedOrders[order] = []; + } + + groupedOrders[order].push(element); + }); + this.data = groupedOrders + this.dataCopy = groupedOrders + }) + + } + + + requoteNoChange(order) { + + this.allData =this.data[order] + this.dataCopy =this.data[order] + + this.dataSource =this.allData; + } + + backButton() { + this._location.back(); + } + +search(){ + + // this.allData = [...this.allData]; + this.allData = [...this.dataCopy]; + + if (!this.searchTerm || this.searchTerm.trim() === "") { + this._ui.toastMessage(this.errorTranslateService.translate('enterSearchTerm'), 3000); + this.requoteNoChange(this.selectedOrder); + return; +} + + this.allData =this.allData.filter(res => { + let includedInUser = (res.userD.userName) ? res.userD.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + let includedInUserEmail = (res.userD.email) ? res.userD.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserPhno = (res.userD.mobileNumber) ? res.userD.mobileNumber.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInUser || includedInUserEmail || includedInUserPhno) { + + return true; + + } + + else + return false; +}); + +// this.noData = (this.userLov.length === 0); +// this.pageLength = this.userLov.length; +this.dataSource = new MatTableDataSource(this.allData); + +} + +reset(){ + + this.searchTerm = ""; + this. requoteNoChange(this.selectedOrder); +} + + sortData(event) { + + } + + + downloadBoqdocs(docName) { + this.loading=true; + + this._masterService.downloadFileWithAuth(apiUrl.quotedTender,docName).then(res=>{ + + this.loading=false; + + }) + + } +} diff --git a/src/app/_modules/super-admin/add-tenders/add-tenders.component.html b/src/app/_modules/super-admin/add-tenders/add-tenders.component.html new file mode 100644 index 0000000..f47ca19 --- /dev/null +++ b/src/app/_modules/super-admin/add-tenders/add-tenders.component.html @@ -0,0 +1,1177 @@ +
+ + +
+
+

Tender Details

+
+ +
+
+
+
+ + + +

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

+
+
+ + +
+
+
+ + + +

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

+
+
+ + +
+
+
+ +

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

+
+
+ + +
+
+
+ + +

+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+ +
+ + +
+ + + + +
+ + + + Sub Category + + All category + + {{subCategory.tenderSubCategory}} + + + + +
+ + + +
+ + +
+ + +
+
+ + + +
+ + +
+
+ + +
+
+ + +
+ +
+
+ + + + +
+ + +
+
+ + +
+
+ + +
+ +
+ + + + + + + + +
+

+
+
+ + +
+
+
+ +

+
+
+
+ +
+ + + Published Date + + + + +
+
+ + + Document Download / Sale Start Date + + + +
+ +
+ + +
+
+ + + + Document Download / Sale End Date + + + +
+ + +
+ + + Bid Submission Start Date + + + + + + +
+
+ + +
+ +
+ + + Bid Submission End Date + + + +
+ +
+ + + + Bid Opening Date + + + + +
+
+ +
+

+
+
+ + +
+
+
+ + + +

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Required Documents
Required + Document typeDescription + Document + Format
+
+ + + Document Type + + Select Document Type + + + {{coverType.coverType}} + + + + +
+
+
+ + +
+
+ + Document Type + + Select Document + Type + + {{fileFormat.fileFormat}} + + + + + +
+ +
+
+
+
+
+
+ + +
+
+
+ + +

+
+ +
+
+
+
+ +
+
+ + search + + + + + +
+
+
+
+ +
+ +
Name
+
Mobile No. +
+
Email
+ + + +
+
+
+
+ +
+ +
+ +
+ +
+ {{element?.userName}} +
+
+ {{element?.mobileNumber}} +
+
+ {{element?.email}} +
+ + +
+ +
+
+
+ +
+

No users available.

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

+
+
+ + +
+
+
+ +

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

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

+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Notice +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{nitDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+ Work Item Documents +
+ Upload FilesDocument TypeDescription
+
+ + + + {{workItemDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ + +    + +
+ Drawing Document + +
Upload + FilesDocument + TypeDescription +
+
+ + + + {{drawingsDocuments[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + +
+
+ + Document Type + + Select Document Type + + + {{documentType.documentType}} + + + + + +
+ + +
+
+ +
+
+
+ + + + + +
+
+
+ + +
+
+ +
+ + + + + +
+ +
+
+
+ + + + + + + + +

+ + + + + + +
+ + \ No newline at end of file diff --git a/src/app/_modules/super-admin/add-tenders/add-tenders.component.scss b/src/app/_modules/super-admin/add-tenders/add-tenders.component.scss new file mode 100644 index 0000000..dbf00b0 --- /dev/null +++ b/src/app/_modules/super-admin/add-tenders/add-tenders.component.scss @@ -0,0 +1,144 @@ +// .container-responsive { + // min-height: 100vh; + // position: relative; + // } + + // #footer { + // background-color: #3a8379; + // padding: 20px; + // color: #ffffff; + // position: absolute; + // bottom: 0; + // width: 100%; + // } + .nav-link:hover { + color: rgb(255, 0, 0); + + + } + + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: 120px; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: small; + background-color: #f0f0f0; + font-family: nucleo; + + } + + .green-snackbar { + background-color: green; + color: white; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #16e2e2; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #04fcfc; /* Accent color */ + cursor: pointer; + } + + .element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ + } + + .tenderHeading{ + font-family: texg; + //color: #353535; + } + + + label + { + font-family: texg; + color: #262627; + +} +input{ + overflow-wrap: inherit; + font-family: nucleo; +} +.form-control{ +font-family: nucleo; +} +// .input-style{ +// font-family: nucleo; +// } + + + +.Buttons { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: white; +color: #424242; +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +th,td{ +font-family: nucleo; +} + +.Buttons:hover { +background-color: #ececec; +color: #46AC9E; +} + +.ButtonSubmit { +float: right; +margin-top: 5px; +margin-bottom: 5px; +background-color: #ececec; +color: #46AC9E; + +height: 37px; +border-radius: 9px; +font-family: nucleo; +// width: 17%; +box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.ButtonSubmit:hover { +background-color: #46AC9E; +color: #ececec; +} + +.card-body{ +min-height: 360px; +@media (max-width: 767px) { + .card-body{ + max-height: 500px; + min-height: 500px; + overflow-y: scroll; + min-width: 500px; +} +} +} + +.sub-div{ +@media (max-width: 767px) { + .sub-div{ + min-width: 672px; + + } +} +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/add-tenders/add-tenders.component.spec.ts b/src/app/_modules/super-admin/add-tenders/add-tenders.component.spec.ts new file mode 100644 index 0000000..d0b9954 --- /dev/null +++ b/src/app/_modules/super-admin/add-tenders/add-tenders.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AddTendersComponent } from './add-tenders.component'; + +describe('AddTendersComponent', () => { + let component: AddTendersComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AddTendersComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(AddTendersComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/add-tenders/add-tenders.component.ts b/src/app/_modules/super-admin/add-tenders/add-tenders.component.ts new file mode 100644 index 0000000..08e1eca --- /dev/null +++ b/src/app/_modules/super-admin/add-tenders/add-tenders.component.ts @@ -0,0 +1,1241 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { MatOption } from '@angular/material/core'; +import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import { TenderCoversDto } from 'src/app/_dto/tender-covers.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2'; +import { FormBuilder, FormGroup, FormControl } from '@angular/forms'; +import { tenderSubcategoryMasterDto } from 'src/app/_dto/tenderSubcategoryMaster.dto'; +import { closedTenderUsersDto } from 'src/app/_dto/closedTenderUsers.dto'; + +@Component({ + selector: 'app-add-tenders', + templateUrl: './add-tenders.component.html', + styleUrls: ['./add-tenders.component.scss'] +}) +export class AddTendersComponent implements OnInit { + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + @ViewChild('allSelection') private allSelection: MatOption; + + @ViewChild('allUser') private allUser: MatOption; + + + tenderData: TenderDetailDto + subCategoryData: tenderSubcategoryMasterDto[]; + tenderTypeLov: any; + TenderCategoryLov: any; + PaymentModeLov: any; + formcontractLov: any; + productcategoryLov: any; + AllTenderData: TenderDetailDto; + emdFeeTypeLov: any; + seculevel: any; + documentTypeLov: any; + isNITDocUploaded: boolean = false; + isWIDocUploaded: boolean = false; + toggleValue: boolean = true; + + nitDocuments: TenderDocumentDto[]; + workItemDocuments: TenderDocumentDto[]; + drawingsDocuments: TenderDocumentDto[]; + coverDocs: TenderCoversDto[]; + selectedFiles: any; + tenderID: number; + filteredDocumentTypeLov: any; + filteredDocumentDrawingTypeLov: any; + filteredDocumentNITTypeLov: any; + coverslov: any; + fileformatlov: any; + addnoticeROW: boolean = true + addDrwROW: boolean = true + allCheck: boolean = false; + showMessage: boolean = false; + newDRWROW: boolean = false; + newCvrROW: boolean = false; + id: number; + disableUploadButton: boolean; + userID: string; + isFileNameDuplicate: boolean; + value: any; + subcategoryLov: any; + subcategoryform: UntypedFormGroup; + userform: UntypedFormGroup; + userLov: any; + closedtenderData: closedTenderUsersDto; + selectedUsers: any[]; + selectAllChecked: boolean = false; + + selectUserTabView: boolean = false; + categoryEdit: boolean = false; + data: any; + noData: boolean = true; + searchTerm: string = ''; + filter: string; + pageLength: number; + userDataCopy: any; + savedSubcategories: any[]; + emdDisable: boolean; + subCatId: any[]; + subCatIdString: string; + paymentModeOnline: boolean; + + constructor(private router: Router, + private _masterService: MasterService, + private _ui: UiService, + private route: ActivatedRoute, + private errorTranslateService: ErrorTranslateService, + private datePipe: DatePipe, + private fb: FormBuilder, + private snackBar: MatSnackBar) { + + this.seculevel = localStorage.getItem('seculevel') + this.userID = localStorage.getItem('userId') + this.tenderData = new TenderDetailDto(); + this.closedtenderData = new closedTenderUsersDto(); + this.tenderID = +this.route.snapshot.paramMap.get('id'); + this.getData() + + } + + ngOnInit(): void { + // this.addnoticeROW= true; + + + this.subcategoryform = this.fb.group({ + subCategory: new UntypedFormControl(''), + + }); + + this.userform = this.fb.group({ + users: new UntypedFormControl(''), + }); + // this.addDrwROW = true; + this.nitDocuments = []; + this.workItemDocuments = []; + this.drawingsDocuments = []; + this.coverDocs = []; + this.subCategoryData = []; + this.selectedUsers = []; + + if (this.tenderID) { + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderID).then((res) => { + this.tenderData = res + if (!this.tenderData.emdFeeApplied) { + this.emdDisable = true; + } + this.subCatId = []; + + if (this.tenderData && this.tenderData.subCategoryMaster) { + this.tenderData.subCategoryMaster.forEach(element => { + this.subCatId.push(element.subCategoryId); + }); + this.subCatIdString = this.subCatId.map(num => num.toString()).join(','); + + + this._masterService.getMasterData(`${apiUrl.users}?where[subCategory]=${this.subCatId}`).then((res) => { + this.userLov = res; + this.userDataCopy = res; + this.userLov.forEach(element => { + element.selected = false; + }); + + + + if (this.selectUserTabView && this.tenderData.closedTenderUsers && this.tenderData.closedTenderUsers.length > 0) + for (let users of this.tenderData.closedTenderUsers) { + this.userLov.forEach(element => { + if (users.userId == element.userId) { + element.selected = true; + let temp = {} + temp = { tenderId: this.tenderID, userId: element.userId } + this.selectedUsers.push(temp); + } + }); + } + + }); + } else { + } + + + + + + if (this.tenderData.productCategory) { + this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${this.tenderData.productCategory}`).then((res) => { + this.subcategoryLov = res + }) + + if (this.tenderData.tenderType == 7) { + + this.selectUserTabView = true + + } else { + this.selectUserTabView = false; + + } + + // let newDate =new Date(); + + // if(this.tenderData.publishDate < newDate){ + // this.categoryEdit=true; + + // }else{ + // this.categoryEdit=false; + + + // } + + if (!this.tenderData.id) { + this.categoryEdit = false; + + } else { + this.categoryEdit = true; + + } + } + + this.tenderData.publishDate = this.convertDateFormat(res.publishDate); + this.tenderData.saleStartDate = this.convertDateFormat(res.saleStartDate); + this.tenderData.clarificationStartDate = this.convertDateFormat(res.clarificationStartDate); + this.tenderData.saleEndDate = this.convertDateFormat(res.saleEndDate); + this.tenderData.clarificationEndDate = this.convertDateFormat(res.clarificationEndDate); + this.tenderData.bidSubStartDate = this.convertDateFormat(res.bidSubStartDate); + this.tenderData.bidSubEndDate = this.convertDateFormat(res.bidSubEndDate); + this.tenderData.bidOpenDate = this.convertDateFormat(res.bidOpenDate); + this.tenderData.preBidDate = this.convertDateFormat(res.preBidDate); + + // this.subcategoryform.controls.subCategory.patchValue([res.subCategoryMaster.subCategoryId, 0]); + + + + const subCategoryIds = res.subCategoryMaster.map(item => item.id); + this.subcategoryform.controls.subCategory.patchValue([...subCategoryIds, 0]); + + + + this.coverDocs = JSON.parse(JSON.stringify(this.tenderData.covers)); + this.newCvrROW = true + this.newDRWROW = true + + this.drawingsDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'D'); + for (let i = 0; i < this.drawingsDocuments.length; i++) { + this.drawingsDocuments[i].file = this.drawingsDocuments[i].docName; + } + + + this.nitDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'NIT'); + for (let i = 0; i < this.nitDocuments.length; i++) { + this.nitDocuments[i].file = this.nitDocuments[i].docName; + } + + + + this.workItemDocuments = this.tenderData.tenderDoc.filter(element => element.documentCategory == 'WID'); + for (let i = 0; i < this.workItemDocuments.length; i++) { + this.workItemDocuments[i].file = this.workItemDocuments[i].docName; + + } + + // if(res.fileName.length > 0){ + // this.disableUploadButton = false + // }else{ + // this.disableUploadButton = true + // } + }) + + } + + + + } + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + + addNoticeToggle(event) { + this.addnoticeROW = !event.checked; + + } + + addDrawingToggle(event) { + this.addDrwROW = !event.checked; + + } + + tenderTypeChange() { + + if (this.tenderData.tenderType == 7) { + this.selectUserTabView = true; + + } else { + this.selectUserTabView = false; + + } + + + } + + getData() { + // this._masterService.getMasterData(apiUrl).then((res) =>{ + // this.AllTenderData = res + // }) + + this._masterService.getMasterData(apiUrl.TenderType).then((res) => { + this.tenderTypeLov = res; + + if (this.tenderData.tenderType == 7) { + + this.selectUserTabView = true + + } else { + this.selectUserTabView = false; + + } + + }) + this._masterService.getMasterData(apiUrl.emdFeeType).then((res) => { + this.emdFeeTypeLov = res + + }) + + + this._masterService.getMasterData(apiUrl.documentType).then((res) => { + this.documentTypeLov = res + this.filteredDocumentDrawingTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'D'); + this.filteredDocumentNITTypeLov = this.documentTypeLov.filter(docType => docType.docCategory === 'N'); + + this.filteredDocumentTypeLov = this.documentTypeLov.filter(docType => docType.docCategory == 'WID'); + + }) + + this._masterService.getMasterData(apiUrl.basicCategory).then((res) => { + this.TenderCategoryLov = res + }) + this._masterService.getMasterData(apiUrl.PaymentMode).then((res) => { + this.PaymentModeLov = res + }) + + this._masterService.getMasterData(apiUrl.formcontract).then((res) => { + this.formcontractLov = res + }) + this._masterService.getMasterData(apiUrl.category).then((res) => { + this.productcategoryLov = res + }) + + this._masterService.getMasterData(apiUrl.coverslov).then((res) => { + this.coverslov = res + + }) + this._masterService.getMasterData(apiUrl.fileformatlov).then((res) => { + this.fileformatlov = res + + }) + // this._masterService.getMasterData(apiUrl.users).then((res)=>{ + // this.userLov = res; + // this.userDataCopy =res; + // this.userLov.forEach(element => { + // element.selected = false; + // }); + + + // }) + + } + + + paymentModeChange(paymentModeId){ + let paymentMode; + + this.PaymentModeLov.forEach(element => { + if(element.id == paymentModeId){ + paymentMode =element.paymentMode; + } + }); + + + if(paymentMode == 'Online'){ + this.paymentModeOnline =true; + } + else{ + this.paymentModeOnline =false; + + } + } + + + emdFeeApplicableChange(emdfeeeApplicable) { + + if (emdfeeeApplicable) { + + this.emdDisable = false; + } + else if (emdfeeeApplicable == false) { + this.emdDisable = true; + this.tenderData.emdAmt = null; + this.tenderData.emdFeeType = null; + this.tenderData.emdPayableTo = null; + this.tenderData.allowEmdBgOrSt = null; + + } + + } + + productCategoryChange(value) { + + this._masterService.getMasterData(`${apiUrl.subcategory}?where[tenderCategory]=${value}`).then((res) => { + this.subcategoryLov = res + + }) + + // this._masterService.getMasterDatabyId(apiUrl.users,value).then((res)=>{ + // this.userLov = res; + // this.userDataCopy =res; + + // this.userLov.forEach(element => { + // element.selected = false; + // }); + + + // }) + } + + + + addNewNitDocRow() { + if (this.addnoticeROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableNoticeDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'NIT' + newRow.crud = 'I' + newRow.userId = this.userID + this.nitDocuments.push(newRow); + } + } + + addNewDrawingRow() { + if (this.addDrwROW) { + this._ui.toastMessage(this.errorTranslateService.translate("pleaseEnableDrawingDocuments"), 2000, false); + + } else { + const lastRow = new TenderDocumentDto(); + let newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'D' + newRow.crud = 'I' + newRow.userId = this.userID + this.drawingsDocuments.push(newRow); + + } + + + } + + addNewWorkItemDocRow() { + + // const lastRow = this.tenderData.tenderDocs[this.tenderData.tenderDocs.length - 1]; + const lastRow = new TenderDocumentDto(); + const newRow = Object.assign({}, lastRow); + newRow.documentCategory = 'WID' + newRow.crud = 'I' + newRow.userId = this.userID + this.workItemDocuments.push(newRow); + this.newDRWROW = true + + } + + + addNewcoverDocRow() { + + const lastRow = new TenderCoversDto(); + const newRow = Object.assign({}, lastRow); + // newRow.documentCategory = 'C' + newRow.crud = 'I' + this.coverDocs.push(newRow); + this.newCvrROW = true + } + + + + + UploadFiles(event, i, type) { + + if (this.workItemDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + + + if (file && this.id) + this._masterService.postMasterData(apiUrl.docUpload, fd, this.id).then((res) => { + + + if (type == 'WID') { + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // else{ + + this.workItemDocuments[i].docName = res.fileName + this.workItemDocuments[i].file = res.fileName + this.workItemDocuments[i].documentSize = res.fileSizeKB; + } + }) + } + + + } + // UploadNoticeFiles(event,i,type){ + + // if(this.nitDocuments[i].file){ + // this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"),4000,false); + // }else{ + + // for (let j = 0; j < this.nitDocuments.length; j++) { + + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + + // if (this.nitDocuments[j].docName === file.name) { + + // this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"),4000,false); + // file.name = ""; + // } + // if(file && this.id){ + // this._masterService.postMasterData(apiUrl.nitUploadDoc,fd,this.id).then((res)=>{ + + + // if(type == 'NIT'){ + // this.nitDocuments[i].docName = res.fileName + // this.nitDocuments[i].file = res.fileName + // this.nitDocuments[i].documentSize =res.fileSizeKB; + // } + // })} + + // } + // } + // } + + UploadNoticeFiles(event: any, i: number, type: string) { + if (this.nitDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + return; + } + + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const isFileNameDuplicate = this.nitDocuments.some((doc) => doc.docName === file!.name); + if (isFileNameDuplicate) { + this._ui.toastMessage(this.errorTranslateService.translate("documentnamecantbesame"), 4000, false); + return; + } + + const fd = new FormData(); + fd.append('file', file, file.name); + if (file && this.id) { + this._masterService.postMasterData(apiUrl.nitUploadDoc, fd, this.id) + .then((res) => { + if (type == 'NIT') { + this.nitDocuments[i].docName = res.fileName + this.nitDocuments[i].file = res.fileName + this.nitDocuments[i].documentSize = res.fileSizeKB; + } + + }) + .catch((error) => { + + }); + } + } + + + UploadDrawingFiles(event, i) { + + if (this.drawingsDocuments[i].file) { + this._ui.toastMessage(this.errorTranslateService.translate("Pleasedeletetheexistingfile"), 4000, false); + + + } else { + + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + fd.append('file', file); + if (file && this.id) + this._masterService.postMasterData(apiUrl.drawingUploadDoc, fd, this.id).then((res) => { + this.drawingsDocuments[i].docName = res.fileName + this.drawingsDocuments[i].file = res.fileName; + this.drawingsDocuments[i].documentSize = res.fileSizeKB; + + }) + } + + } + + + deleteDrawingsRow(id, index: number) { + + this._masterService.deleteMasterData(apiUrl.drawingsDelete, `${this.id}/${this.drawingsDocuments[index].docName}`) + + let removeRow = Object.assign({}, (this.drawingsDocuments).splice(index, 1)[0]); + // this.nitDocuments.push(removeRow); + + } + deleteNITRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.noticeDelete, `${this.id}/${this.nitDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.nitDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + deleteWIDRow(id, index: number) { + this._masterService.deleteMasterData(apiUrl.widDelete, `${this.id}/${this.workItemDocuments[index].docName}`) + let removeRow = Object.assign({}, (this.workItemDocuments).splice(index, 1)[0]); + // this.workItemDocuments.push(removeRow); + + } + + deleteCoverRow(id, index: number) { + + let removeRow = Object.assign({}, (this.coverDocs).splice(index, 1)[0]); + // removeRow.crud = 'D'; + this.tenderData.covers[index].crud = 'D'; + + + } + + // UploadCoverFiles(event,i){ + // this.selectedFiles = event.target.files; + // let file = event.target.files[0] + // const fd = new FormData(); + // fd.append('file', file); + // if(file && this.tenderData.tenderId){ + // coverDocs + // } + + // } + + + readUrl(event: any) { + // if (event.target.files && event.target.files[0]) { + + // if (event.target.files[0].type === 'image/jpeg' || + // event.target.files[0].type === 'image/png' || + // event.target.files[0].type === 'image/jpg') { + // if (event.target.files[0].size < 200 * 200) {/* Checking height * width*/ } + // if (event.target.files[0].size < 1000000) { + + + // } + // } + // } + } + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + + BasicDetails() { + + if (this.tenderData.tenderCategory == null || this.tenderData.tenderCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderCategoryCantBeBlank"), 2000, true); + } + else this.nextTab() + + } + + TenderFeeDetails() { + if( this.paymentModeOnline ){ + if (this.tenderData.tenderFee == null || this.tenderData.tenderFee == undefined || this.tenderData.tenderFee < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeInCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableTo =='' || this.tenderData.feePayableTo == null || this.tenderData.feePayableTo == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableToCantBeBlank"),2000,true); + // } + else if (this.tenderData.tenderFeeExemption == null || this.tenderData.tenderFeeExemption == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("tenderFeeExemptionAllowedCantBeBlank"), 2000, true); + } + // else if(this.tenderData.feePayableAt =='' || this.tenderData.feePayableAt == null || this.tenderData.feePayableAt == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("feePayableAtCantBeBlank"),2000,true); + // } + else this.nextTab() + } + } + + + EMDFeeDetails() { + + if (this.tenderData.emdFeeApplied == null || this.tenderData.emdFeeApplied == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdApplicableCantBeBlank"), 2000, true); + } + + else if (this.tenderData.emdFeeApplied) { + + if (this.tenderData.emdAmt == null || this.tenderData.emdAmt == undefined || this.tenderData.emdAmt < 1) { + this._ui.toastMessage(this.errorTranslateService.translate("emdAmountCantBeBlank"), 2000, true); + } + else if (this.tenderData.emdFeeType == '' || this.tenderData.emdFeeType == null || this.tenderData.emdFeeType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("emdFeeTypeCantBeBlank"), 2000, true); + } + + else if (this.tenderData.allowEmdBgOrSt == '' || this.tenderData.allowEmdBgOrSt == null || this.tenderData.allowEmdBgOrSt == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("selectEmdThrough"), 2000, true); + } + else this.nextTab() + + } + + else this.nextTab() + + } + + + WorkItemDetails() { + + if (!this.tenderID && this.subcategoryform.controls.subCategory.value != '') { + + let sbCat = this.subcategoryform.controls.subCategory.value; + + + let body = sbCat.map(num => num.toString()).join(','); + + this._masterService.getMasterData(`${apiUrl.users}?where[subCategory]=${body}`).then((res) => { + this.userLov = res; + this.userDataCopy = res; + + this.userLov.forEach(element => { + element.selected = false; + }); + + + }) + + } + + if (this.tenderData.title == '' || this.tenderData.title == null || this.tenderData.title == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("titleCantBeBlank"), 2000, true); + } + else if (this.tenderData.workDesc == '' || this.tenderData.workDesc == null || this.tenderData.workDesc == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("workDescriptionCantBeBlank"), 2000, true); + } + + // else if( this.tenderData.tenderValue == null || this.tenderData.tenderValue == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("tenderValueCantBeBlank"),2000,true); + // } + else if (this.tenderData.productCategory == null || this.tenderData.productCategory == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("productCategoryCantBeBlank"), 2000, true); + } + else if (!this.tenderID && this.subcategoryform.controls.subCategory.value == '' || this.subcategoryform.controls.subCategory.value == null || this.subcategoryform.controls.subCategory.value == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("subCategoryCantBeBlank"), 2000, true); + } + else if (this.tenderData.ndaPreQualification == '' || this.tenderData.ndaPreQualification == null || this.tenderData.ndaPreQualification == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("preQualificationCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidValidity == null || this.tenderData.bidValidity == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidValidityCantBeBlank"), 2000, true); + } + + else if (this.tenderData.periodOfWork == null || this.tenderData.periodOfWork == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("periodOfWorkCantBeBlank"), 2000, true); + } + else if (this.tenderData.location == '' || this.tenderData.location == null || this.tenderData.location == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("locationCantBeBlank"), 2000, true); + } + // else if( this.tenderData.pincode == null || this.tenderData.pincode == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("pincodeCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpeningPlace =='' || this.tenderData.bidOpeningPlace == null || this.tenderData.bidOpeningPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningPlaceCantBeBlank"),2000,true); + // } + // else if(this.tenderData.bidOpenAddress =='' || this.tenderData.bidOpenAddress == null || this.tenderData.bidOpenAddress == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("bidOpenAddressCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.contractType =='' || this.tenderData.contractType == null || this.tenderData.contractType == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("contractTypeCantBeBlank"),2000,true); + // } + + // else if( this.tenderData.preBidMeetAdd == '' || this.tenderData.preBidMeetAdd == null || this.tenderData.preBidMeetAdd == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingAddressCantBeBlank"),2000,true); + // } + + + // else if( this.tenderData.preBidDate == null || this.tenderData.preBidDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingDateCantBeBlank"),2000,true); + // } + + // else if(this.tenderData.preBidMeetPlace == '' || this.tenderData.preBidMeetPlace == null || this.tenderData.preBidMeetPlace == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("preBidMeetingPlaceCantBeBlank"),2000,true); + // } + + + else this.nextTab() + + } + + CriticalDates() { + + if (this.tenderData.publishDate == '' || this.tenderData.publishDate == null || this.tenderData.publishDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("publishedDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.saleStartDate == '' || this.tenderData.saleStartDate == null || this.tenderData.saleStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleStartCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationStartDate == null || this.tenderData.clarificationStartDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationStartDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.saleEndDate == '' || this.tenderData.saleEndDate == null || this.tenderData.saleEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentDownloadSaleEndCantBeBlank"), 2000, true); + } + // else if( this.tenderData.clarificationEndDate == null || this.tenderData.clarificationEndDate == undefined){ + // this._ui.toastMessage(this.errorTranslateService.translate("clarificationEndDateCantBeBlank"),2000,true); + // } + else if (this.tenderData.bidSubStartDate == '' || this.tenderData.bidSubStartDate == null || this.tenderData.bidSubStartDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionStartDateCantBeBlank"), 2000, true); + } + + else if (this.tenderData.bidSubEndDate == '' || this.tenderData.bidSubEndDate == null || this.tenderData.bidSubEndDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeBlank"), 2000, true); + } + else if (this.tenderData.bidSubEndDate && this.tenderData.bidOpenDate && this.tenderData.bidSubEndDate > this.tenderData.bidOpenDate) { + this._ui.toastMessage(this.errorTranslateService.translate("bidSubmissionEndDateCantBeGreaterThanbidOpeningDate"), 2000, true); + } + + else if (this.tenderData.bidOpenDate == null || this.tenderData.bidOpenDate == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("bidOpeningDateCantBeBlank"), 2000, true); + } + + else this.nextTab() + + } + + selectUserNext() { + + if (this.selectedUsers.length <= 0) { + this._ui.toastMessage(this.errorTranslateService.translate("selectUserCantBeBlank"), 2000, true); + } + else this.nextTab() + + } + + + tenderDocumnetsPreCheck() { + + for (let i = 0; i < this.drawingsDocuments.length; i++) { + if (this.drawingsDocuments[i].file == null || this.drawingsDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].docType == '' || this.drawingsDocuments[i].docType == null || this.drawingsDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.drawingsDocuments[i].description == '' || this.drawingsDocuments[i].description == null || this.drawingsDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.nitDocuments.length; i++) { + if (this.nitDocuments[i].file == null || this.nitDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].docType == '' || this.nitDocuments[i].docType == null || this.nitDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.nitDocuments[i].description == '' || this.nitDocuments[i].description == null || this.nitDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + + for (let i = 0; i < this.workItemDocuments.length; i++) { + if (this.workItemDocuments[i].file == null || this.workItemDocuments[i].file == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("UploaddocumentCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].docType == '' || this.workItemDocuments[i].docType == null || this.workItemDocuments[i].docType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.workItemDocuments[i].description == '' || this.workItemDocuments[i].description == null || this.workItemDocuments[i].description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + } + return true + } + + + RequiredDocumentsPreCheck() { + + for (let i = 0; i < this.coverDocs.length; i++) { + if (this.coverDocs[i].coverType == null || this.coverDocs[i].coverType == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentTypeCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].Description == '' || this.coverDocs[i].Description == null || this.coverDocs[i].Description == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("descriptionCantBeBlank"), 2000, true); + return false; + } + else if (this.coverDocs[i].fileFormat == '' || this.coverDocs[i].fileFormat == null || this.coverDocs[i].fileFormat == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("documentFormatCantBeBlank"), 2000, true); + return false; + } + } + return true + + } + + + + RequiredDocuments() { + if (this.RequiredDocumentsPreCheck()) + if (!this.newCvrROW) { + this._ui.toastMessage(this.errorTranslateService.translate("requiresDocs"), 2000, true); + return false; + + } + if (this.RequiredDocumentsPreCheck()) { + // this.tenderData.covers = this.coverDocs + this.nextTab() + } + } + + + + + + TendersDocuments() { + this.tenderData.id = this.id + this.tenderData.crud = 'I' + this.tenderData.covers = this.coverDocs + + // let subcategories = [] + // for(let element of this.subcategoryform.controls.subCategory.value){ + // if(element != 0){ + // subcategories.push(element) + // } + // } + + + for (let i = 0; i < this.savedSubcategories.length; i++) { + + this.subCategoryData[i] = new tenderSubcategoryMasterDto() + this.subCategoryData[i].tenderId = this.id; + + this.subCategoryData[i].subCategoryId = this.savedSubcategories[i]; + + } + + if (this.tenderID) { + this.tenderData.subCategoryMaster = [] + } + else { + this.tenderData.subCategoryMaster = this.subCategoryData; + } + + + + if (this.tenderDocumnetsPreCheck()) + if (!this.newDRWROW) { + this._ui.toastMessage(this.errorTranslateService.translate("addDocs"), 2000, true); + return false; + + } + if (this.tenderDocumnetsPreCheck()) { + + // if(!this.tenderID || this.tenderID !=0){ + // this.tenderData.activeYn='S'; + + // } + // this.nextTab() + this.tenderData.tenderDoc = this.nitDocuments.concat(this.workItemDocuments, this.drawingsDocuments) + + this._masterService.saveAllMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + if (res['tenderTypeD'].id == 7) + + + this._masterService.saveMasterData(apiUrl.closedTenderUsers, this.selectedUsers).then(res => { + + + }) + if (res) { + Swal.fire( + 'Created', + 'The tender has been successfully created. Please authorize its publication by approving it', + 'success' + ) + + this.router.navigate(['sadmin/dashboard']); + + } + + }, (err) => { + if (err.status != 201) { + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + this.tenderData.tenderDoc = []; + } + }); + + + + } + } + + + + + + submit() { + this.tenderData.activeYn = 'S'; + this.tenderData.crud = 'I' + + if (this.tenderData.tenderInvName == '' || this.tenderData.tenderInvName == null || this.tenderData.tenderInvName == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("nameCantBeBlank"), 2000, true); + return + } + if (this.tenderData.tenderInvAddess == '' || this.tenderData.tenderInvAddess == null || this.tenderData.tenderInvAddess == undefined) { + this._ui.toastMessage(this.errorTranslateService.translate("addressCantBeBlank"), 2000, true); + return + } + + this._masterService.saveMasterData(apiUrl.AllTenderData, this.tenderData).then((res) => { + this.id = res['id'] + this.tenderData = res; + this.savedSubcategories = [] + for (let i = 0; i < res.subCategoryMaster.length; i++) { + this.savedSubcategories.push(res.subCategoryMaster[i].subCategoryId); + } + + + + if (res) { + Swal.fire( + 'Created', + 'Tender Details created successfully', + 'success' + ) + this.nextTab() + + } + + }, (err) => { + if (err.status != 201) { + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + + } + }); + + } + + + + nextTab() { + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + + prevTab() { + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + display() { + + } + tosslePerOne(field) { + + if (field == 'select') { + if (this.allSelection.selected) { + this.allSelection.deselect(); + return false; + } + if (this.subcategoryform.controls.subCategory.value.length == this.subcategoryLov.length) { + this.allSelection.select(); + } + } + if (field == 'user') { + if (this.allUser.selected) { + this.allUser.deselect(); + return false; + } + if (this.userform.controls.users.value.length == this.userLov.length) { + this.allUser.select(); + } + } + + } + + toggleAllSelection(field) { + if (field == 'select') { + if (this.allSelection.selected) { + this.subcategoryform.controls.subCategory.patchValue([...this.subcategoryLov.map(item => item.id), 0]); + } else { + this.subcategoryform.controls.subCategory.patchValue([]); + } + } + if (field == 'users') { + if (this.allUser.selected) { + + this.userform.controls.users.patchValue([...this.userLov.map(item => item.userId), 0]); + } else { + + this.userform.controls.users.patchValue([]); + } + } + + } + + // selectUser(event,userId){ + + // if(event.checked=true){ + // this.selectedUsers.tenderId=this.tenderID; + // this.selectedUsers.userId=userId; + + // } + + // } + + // selectAllUser(event){ + // if(event.checked=true){ + + // } + // } + + + + selectAllUser(event) { + if (event.checked) { + this.selectedUsers = []; + + this.userLov.forEach(user => { + let temp = {} + temp = { tenderId: this.tenderID, userId: user.userId } + this.selectedUsers.push(temp) + }); + this.userLov.forEach(element => { + element.selected = true + }); + this.allCheck = true; + } else { + this.userLov.forEach(element => { + element.selected = false + }); + this.selectedUsers = []; + this.allCheck = false; + } + + this.selectAllChecked = event.checked; // Update the state of the "Select All" checkbox + + } + + + selectUser(event, userId, index) { + if (event.checked) { + let temp = {} + temp = { tenderId: this.tenderID, userId: userId } + this.selectedUsers.push(temp); + + if (this.selectedUsers.length > 0 && this.selectedUsers.length == this.userLov.length) { + this.allCheck = true; + } + } else { + this.allCheck = false; + + for (let i = 0; i < this.selectedUsers.length; i++) { + if (this.selectedUsers[i].userId == userId) { + this.selectedUsers.splice(i, 1); + } + + } + } + + + + } + + search() { + this.userLov = [...this.userDataCopy] + this.data = [...this.userLov]; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorTranslateService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + + this.userLov = this.data.filter(res => { + let includedInUser = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserId = (res.userId) ? res.userId.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInUserPhno = (res.mobileNumber) ? res.mobileNumber.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedInUser || includedInUserId || includedInUserEmail || includedInUserPhno) { + + return true; + } + + else + return false; + }); + // this.noData = (this.data && this.data.length == 0) ? true : false; + // this.pageLength = this.data.length; + // this.dataSource = new MatTableDataSource(this.data); + } +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/dashboard-routing.module.ts b/src/app/_modules/super-admin/dashboard-routing.module.ts new file mode 100644 index 0000000..7cb52a0 --- /dev/null +++ b/src/app/_modules/super-admin/dashboard-routing.module.ts @@ -0,0 +1,47 @@ +import { NgModule } from '@angular/core'; + +import { DashboardComponent } from './dashboard.component'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { RouterModule, Routes } from '@angular/router'; +import { TenderCategoryComponent } from './tender-category/tender-category.component'; +import { UserManagementComponent } from './user-management/user-management.component'; +import { PreviewApprovalComponent } from './preview-approval/preview-approval.component'; +import { UserApprovalComponent } from './user-approval/user-approval.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + {path:'tender-view/:id', component:HomeViewComponent}, + {path:'tender-view/:id/:pay', component:HomeViewComponent}, + { path :'payment-details/:id' , component:PaymentDetailsComponent}, + {path:'tender-upload/:id',component:HomeUploadComponent}, + // { path: 'add-tenders', component: AddTendersComponent}, + { path: 'add-tenders/:id', component: AddTendersComponent}, + { path: 'qr-payment/:id', component: QrPaymentComponent}, + { path: 'category', component: TenderCategoryComponent}, + { path: 'user-management', component: UserManagementComponent}, + { path: 'preview-approval', component: PreviewApprovalComponent}, + { path: 'user-approval', component: UserApprovalComponent} + + + + // { path: 'master', loadChildren: () => import('../master/master.module').then(m => m.MasterModule) }, + // { path: 'report', loadChildren: () => import('../report/report.module').then(m => m.ReportModule) }, + // { path: 'support', loadChildren: () => import('../support/support.module').then(m => m.SupportModule) }, + // { path: 'transaction', loadChildren: () => import('../transaction/transaction.module').then(m => m.TransactionModule) } + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule { } diff --git a/src/app/_modules/super-admin/dashboard.component.html b/src/app/_modules/super-admin/dashboard.component.html new file mode 100644 index 0000000..be492c4 --- /dev/null +++ b/src/app/_modules/super-admin/dashboard.component.html @@ -0,0 +1,367 @@ +
+ + + +
+ + +
+
+ + + +
+ + + +
+ +
+
+ + +
+ + + + + + + + + + + + + +
+ +
+
+ + + + +
+
+ search +
+
+ + + + +
+
+ +
+ + +
+
+ +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'status' | translate }} + + +    {{element?.hide}}    +    {{element?.hide}}    +    {{element?.hide}}    +    {{'Canceled'}}    +    {{'in + review'}}    + + + + + + + + + + + {{ 'payments' | translate }} + + + + + + + + + + + {{ 'view' | translate }} + + + + + + + + + + + + {{ 'report' | translate }} + + + + + + + + + + + + + + + + + + + + + + + {{ 'upload' | translate }} + + + + + + + + + + + + {{ 'Paymentstatus' | translate }} + + +
+ + + + {{ + element.countStatusP }} +
+
+ + + + +
+ + +
+ + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + +
+ + + +
+
+
+
+
+
+
+
+
+ +
+ + + + +
Notification
+ +
+ + Notification Text + + +
+ +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/super-admin/dashboard.component.scss b/src/app/_modules/super-admin/dashboard.component.scss new file mode 100644 index 0000000..7632871 --- /dev/null +++ b/src/app/_modules/super-admin/dashboard.component.scss @@ -0,0 +1,662 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +mat-card { + min-width: 350px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; +} + +mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; +} + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } +} + + +.mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); +} +.viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} +.editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + +} + +.editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + display: block; + width: 63px; +} + +.awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + display: block; + width: 63px; +} + +.closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + display: block; + width: 63px; +} + +.canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + display: block; + width: 80px; +} +.searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 41vh; + height: 47px; + +} +.home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; +} + +.circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + + +.notificationButton{ + padding: 0; + border-radius: 5px !important; + // height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + font-family: nucleo; + width: 11%; + border: 1px solid orangered; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.notificationButton:hover{ + + background-color: orangered ; + box-shadow: 0 2px rgb(255, 76, 31)a(0, 0, 0, 0.2); + border: 1px solid orangered; + color: white; + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + + +// ------------------------------------------------ +// .popup-card { +// position: fixed; +// background-color: #ffffff; +// top: 50%; +// left: 50%; +// transform: translate(-50%, -50%); +// width: 450px; +// height: 330px; +// z-index: 1000; +// } + + + +// .popup-container { +// padding: 20px; /* Add padding for better spacing */ +// display: flex; +// flex-direction: column; +// justify-content: center; +// height: 100%; +// } + + +// .mainCard{ +// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); +// border-radius: 10px; + +// } + + +// .resetSpan{ +// font-family: texg; +// color: #1e3d3b; +// font-size: xx-large; +// float: center; +// margin-top: 15px; +// // margin-left: 64px; +// } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; +// } + + +// @media screen and (max-width: 600px) { +// .popup-card { +// width: 450px; /* Adjust card width for smaller screens */ +// } +// } + +// .mat-card-actions { +// display: flex; +// justify-content: flex-end; +// padding: 16px; /* Add padding for spacing */ +// } + +// .popUpButtons{ +// padding: 5px; +// color: #353535; +// font-weight: 900; +// font-size: medium; +// // background-color: #ececec; +// font-family:nucleo; +// } + +// .popUpButtons:hover{ + +// background-color: #ebeaea ; +// color:#46AC9E; +// box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); +// // transform: translateY(5px); + +// } + +// .custom-spinner-content { +// font-size: 24px; +// color:#46AC9E; +// margin: 0; +// padding: 0; +// } + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.container-responsive{ + background-size: cover; + background-color: whitesmoke; + + // background-image: url('/assets/img/houstone_line1.jpg'); +} + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + + +.menuBtn{ + background-color: white; + width: 37px; + height: 36px; + margin-left: 10px; + box-shadow: 0px 2px 10px -5px black; + border: 1px solid orangered; + +} + +.menuBtnOpened{ + background-color: orangered; + width: 37px; + height: 36px; + margin-left: 10px; + box-shadow: 0px 2px 10px -5px black; + border: 1px solid orangered; + +} + +.expandIcon{ + color: black; + font-size: x-large; +} + +.rotateIcon{ + color: rgb(255, 255, 255); + font-size: x-large; + rotate: 180deg; +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/dashboard.component.ts b/src/app/_modules/super-admin/dashboard.component.ts new file mode 100644 index 0000000..fb6c269 --- /dev/null +++ b/src/app/_modules/super-admin/dashboard.component.ts @@ -0,0 +1,727 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { MatMenuTrigger } from '@angular/material/menu'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + panelOpenState = false; + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + @ViewChild(MatMenuTrigger) trigger: MatMenuTrigger; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData:CommonDto + btnBadgeNumber: any; + UserData: any; + userbtnBadgeNumber: any; + opened: boolean; + + // ------digital signature--------// + + // showPopup:boolean = false; + // fileSelected: boolean; + // fileSelected2:boolean; + // Secretary:any; + // President:any; + // selectedSecretaryFile: any; + // selectedPresidentFile: any; + // SecretarySigned: boolean; + // PresidentSigned: boolean; + + // -----------------------------// + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + // if(this.seculevel == 'B'){ + this.displayedColumns = ['actions','title','publishedDate','bidOpenDate','status','Paymentstatus','view','report']; + // } + // else{ + // this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','userPayments','view','upload']; + // } + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck() + // this.fileSelected = false + // this.fileSelected2 = false + + // await this._ui.userValidation() + // this.loading = true; + // this.getMenuData(); + this._masterService.getMasterData(`${apiUrl.adminTenderView}?where[activeYn]=S` ).then((res) =>{ + let data = res; + + this.btnBadgeNumber=data.length ; + + }) + + this._masterService.getMasterData(apiUrl.statusVerify).then((res) =>{ + this.UserData = res + this.userbtnBadgeNumber=this.UserData.length ; + + }) + } + + + + getData(){ + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + // if(this.seculevel != 'B') + // this._masterService.getMasterData(apiUrl.getTender + '?order[id]=DESC').then((res) =>{ + // this.tenderData = res; + + + + // for(let element of res){ + + // if(element.id == '56'){ + // element.hide56 = 'true' + // }else + // element.hide56= 'false' + + // const bidSubStartDate: Date = new Date(element.bidSubStartDate); + // const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + + + + // if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + // element.hide = 'Active' + // } + // else + // element.hide = 'Closed' + + // } + // this.dataCopy = res; + // this.pageLength = this.tenderData.length; + // this.dataSource = new MatTableDataSource(this.tenderData); + // this.dataSource.sort = this.sort; + // this.dataSource.paginator = this.paginator; + // this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + // this.loading = false; + // },err=>{ + // console.error(err) + // }) + // else + this._masterService.getMasterData(apiUrl.adminTenderView +'?order[id]=DESC').then((res) =>{ + this.tenderData = res; + + + for(let element of res){ + this._masterService.getMasterDatabyId(apiUrl.bidReport, element.id).then(result => { + element.countStatusP = result.countStatusP; + + + }) + + const publishDate: Date = new Date(element.publishDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + let bidOpenDate: Date = new Date(element.bidOpenDate); + + // bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 30); + if(newDate >= bidOpenDate){ + element.reportHide = 'false' + } + if(newDate > publishDate){ + element.HideEdit = true + }else { + element.HideEdit = false + } + + + + + if(newDate >= publishDate && newDate <= bidOpenDate){ + + element.hide = 'Active' + } + else if(newDate < publishDate){ + element.hide = 'Await' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + + },err=>{ + console.error(err) + }) + + + + // const bidSubStartDate = new Date(this.tenderData.bidSubStartDate); + // const bidSubEndDate = new Date(this.tenderData.bidSubEndDate); + + // if (this.currentDate >= bidSubStartDate && this.currentDate <= bidSubEndDate) { + // this.enableDownload = false; // Enable the button + // } else { + // this.enableDownload = true; // Disable the button + // } + + + } + + menuOpened() { + this.opened = true; + } + + menuClosed() { + this.opened = false; + } + + getMarqueeData(){ + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res=>{ + + + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender(){ + this.navigateTo('/sadmin/add-tenders') + } + + UserApproval(){ + this.navigateTo('/sadmin/user-approval') + } + + gotoUserManagement(){ + this.navigateTo('/sadmin/user-management') + + } + + openNotificationDialog(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getMarqueeData(); + } + + closeDialog(){ + this.dialogRef.close(); + } + + saveNotificationText(){ + if(!this.commonData.marquee || this.commonData.marquee == ''){ + this._ui.toastMessage(this.errorService.translate('notificationTextCannotBeBlank')); + return ; + } + else{ + if(this.commonData.id){ + this._masterService.updateMasterData(apiUrl.common,this.commonData,this.commonData.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('notificationTextSaved')); + this.closeDialog(); + }) + } + + } + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + // navigateTo(destination) { + // this.router.navigate([destination]); + // } + + // async getMenuData() { + // this.menuData = [] + // await this._menuService.getJsonData("sales-menu").then((res) => { + // res.forEach(element => { + // if (element.menuEnabled == "Y") + // this.menuData.push(element) + // }); + // // this.menuData = res; + // this.loading = false; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // }); + + // } + // getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + // if (!parentMenuId) + // return []; + // if (!menuCompactData) + // menuCompactData = []; + // for (let menu of menuList) { + // if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + // let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + // if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + // if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + // if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // // if (menu.menuType == "1") format["isExpanded"] = true; + // // if (menu.menuType != "1") format["isExpanded"] = false; + // // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + // if (menu["menuType"]) format["menuType"] = menu["menuType"]; + // if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + // if (menu["role"]) format["role"] = menu["role"]; + // if (menu["project"]) format["project"] = menu["project"]; + // if (this.seculevel == 'admin') + // menuCompactData.push(format); + // else { + // if (menu.role != 'admin') { + // menuCompactData.push(format); + // } + // } + // } + // } + + // return menuCompactData; + // } + + goToPayment(id){ + this.navigateTo(`sadmin/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['sadmin/tender-view',tenderId]); + } + + goToPaymentDetails(tenderId){ + this.router.navigate(['sadmin/payment-details',tenderId]) + } + + goToAddTenders(){ + this.router.navigate(['sadmin/add-tenders']); + } + + goToPreviewApproval(){ + + this.router.navigate([`sadmin/preview-approval`]) + + } + + goToUpload(tenderId){ + + +this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck,`${this.userId}/${tenderId}`).then((res)=> { + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + this.router.navigate(['/tender-upload',tenderId]); + } +}).catch((error) => { + console.error("Error fetching upload data:", error); +}); + + + + + // + } + goToEdit(tenderId){ + this.router.navigate(['sadmin/add-tenders',tenderId]); + } + Cancel(){ + + } + + + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id){ + this.navigateTo(`bid-final-report/${id}`) + + + } + + + gotoCategory(){ + + this.router.navigate(['sadmin/category']); + } + // CancelTender(id){ + // this.showPopup = true; + // this.showPopup = true; + // } + // closePopup() { + // this.showPopup = false; + // this.Secretary ='' + // this.President = '' + // } + + // async UploadsecretaryFiles(event,SecretaryFile){ + + // const allowedExtensions = ['cer']; + + // this.selectedSecretaryFile = event.target.files[0]; + // if (this.selectedSecretaryFile) { + + // const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.Secretary = this.selectedSecretaryFile.name; + + + // const formData = new FormData(); + // formData.append('adminUser', '2'); + // formData.append('certificate', this.selectedSecretaryFile); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + + // }else{ + // this.SecretarySigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + // deleteSecretaryInput(){ + + // } + + // async UploadPresidentFiles(event,President){ + + // const allowedExtensions = ['cer']; + + // this.selectedPresidentFile = event.target.files[0]; + // if (this.selectedPresidentFile) { + + // const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.President = this.selectedPresidentFile.name; + + // const formData = new FormData(); + // formData.append('adminUser', '1'); + // formData.append('certificate', this.selectedPresidentFile); + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + + // }else{ + // this.PresidentSigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + + // deletePresidentInput(){ + + // } + + // VerifySignature(){ + // this.showPopup = true; + // if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + // this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + // return false + + // }else if(this.President == null || this.President == '' || this.President == undefined){ + // this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + // return false + // }else if(!this.SecretarySigned && !this.PresidentSigned){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Something went wrong!', + // // footer: 'Why do I have this issue?' + // }) + // return false + // //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + // }else if(this.SecretarySigned && this.PresidentSigned){ + // Swal.fire({ + // icon: 'success', + // title: 'Cancellation Successfully', + // showConfirmButton: false, + // timer: 1500 + // }) + // this.showPopup = false; + // } + // } + + + // openHelpDialog(templateRef) { + // this.dialogRef = this.dialog.open(templateRef, { + // width: '700px', + // disableClose: false + // }); + // } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/super-admin/dashboard.module.ts b/src/app/_modules/super-admin/dashboard.module.ts new file mode 100644 index 0000000..d5b7759 --- /dev/null +++ b/src/app/_modules/super-admin/dashboard.module.ts @@ -0,0 +1,110 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardRoutingModule } from './dashboard-routing.module'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { DashboardComponent } from './dashboard.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { TenderHomeComponent } from './tender-home/tender-home.component'; +import { AddTendersComponent } from './add-tenders/add-tenders.component'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker'; +import { LOCALE_ID } from '@angular/core'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { DialogComponent } from './dialog/dialog.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import {MatExpansionModule} from '@angular/material/expansion'; +import { TenderCategoryComponent } from './tender-category/tender-category.component'; +import { UserManagementComponent } from './user-management/user-management.component'; +import { MatMenuModule } from '@angular/material/menu'; +import { PreviewApprovalComponent } from './preview-approval/preview-approval.component'; +import { MatBadgeModule } from '@angular/material/badge'; +import { UserApprovalComponent } from './user-approval/user-approval.component'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; + +// import { MatTimepickerModule } from 'mat-timepicker'; +// import { MatTimepickerModule } from '@angular/material/timepicker'; +// import { MatSelectModule } from '@angular/material'; +const lang = 'en-US'; + +@NgModule({ + declarations: [ + LayoutComponentComponent, + DashboardComponent, + HomeViewComponent, + HomeUploadComponent, + TenderHomeComponent, + AddTendersComponent, + DialogComponent, + QrPaymentComponent, + PaymentDetailsComponent, + TenderCategoryComponent, + UserManagementComponent, + PreviewApprovalComponent, + UserApprovalComponent + + ], + imports: [ + CommonModule, + DashboardRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule, + MatDialogModule, + MatCheckboxModule, + MatExpansionModule, + MatMenuModule, + MatButtonModule, + MatBadgeModule, + MatProgressSpinnerModule + + // NgxMatTimepickerModule.setLocale(lang), + // NgxMaterialTimepickerModule + // MatTimepickerModule + + + ], + exports:[ + MatExpansionModule , + MatBadgeModule + ], + providers: [{ provide: LOCALE_ID, useValue: lang }] +}) +export class DashboardModule { } diff --git a/src/app/_modules/super-admin/dialog/dialog.component.html b/src/app/_modules/super-admin/dialog/dialog.component.html new file mode 100644 index 0000000..80a1821 --- /dev/null +++ b/src/app/_modules/super-admin/dialog/dialog.component.html @@ -0,0 +1 @@ +

dialog works!

diff --git a/src/app/_modules/super-admin/dialog/dialog.component.scss b/src/app/_modules/super-admin/dialog/dialog.component.scss new file mode 100644 index 0000000..6879e9c --- /dev/null +++ b/src/app/_modules/super-admin/dialog/dialog.component.scss @@ -0,0 +1,40 @@ +/* Custom styles for the dialog component */ + +h2.mat-dialog-title { + font-family: 'Arial', sans-serif; /* Change the font family for the title */ + font-size: 24px; /* Increase the font size */ + font-weight: bold; /* Make the title bold */ + } + + mat-dialog-content { + font-family: 'Arial', sans-serif; /* Change the font family for the content */ + font-size: 16px; /* Adjust the font size */ + } + + ul { + list-style-type: disc; /* Use disc bullets for the list items */ + padding-left: 20px; /* Add some padding to the left for better alignment */ + } + + mat-dialog-actions { + justify-content: flex-end; /* Align the buttons to the right */ + } + +// button.mat-dialog-button.mat-primary { +// background-color: #4CAF50; /* Change the background color of the Accept button */ +// color: #ffffff; /* Change the text color of the Accept button */ +// } + + + div.checkbox-container { + display: flex; + align-items: center; /* Center align the contents vertically */ + } + + .view-terms-link { + cursor: pointer; + font-size: 14px; + color: #007bff; /* Change the color of the link (you can choose a different color if needed) */ + text-decoration: underline; + margin-left: 10px; /* Add some space between the checkbox and the link */ + } \ No newline at end of file diff --git a/src/app/_modules/super-admin/dialog/dialog.component.spec.ts b/src/app/_modules/super-admin/dialog/dialog.component.spec.ts new file mode 100644 index 0000000..a32e0ea --- /dev/null +++ b/src/app/_modules/super-admin/dialog/dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DialogComponent } from './dialog.component'; + +describe('DialogComponent', () => { + let component: DialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DialogComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/dialog/dialog.component.ts b/src/app/_modules/super-admin/dialog/dialog.component.ts new file mode 100644 index 0000000..44de131 --- /dev/null +++ b/src/app/_modules/super-admin/dialog/dialog.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'app-dialog-component', + template: ` +

Declaration:

+ +
    +
  • {{ detail }}
  • +
+
+ + + Close + + + + + `, + styleUrls: ['./dialog.component.scss'] +}) +export class DialogComponent implements OnInit { + + details: string[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { details: string[] } + ) { + this.details = data.details; + } + + onAccept() { + // You can perform any actions needed when the user accepts the terms and conditions here. + this.dialogRef.close('accepted'); + } + + onClose() { + // You can perform any actions needed when the user closes the dialog without accepting the terms and conditions here. + this.dialogRef.close('closed'); + } + ngOnInit(): void { + + } +} diff --git a/src/app/_modules/super-admin/home-upload/home-upload.component.html b/src/app/_modules/super-admin/home-upload/home-upload.component.html new file mode 100644 index 0000000..d691cd9 --- /dev/null +++ b/src/app/_modules/super-admin/home-upload/home-upload.component.html @@ -0,0 +1,201 @@ +
+ + + + + + +
+
+

Upload Files

+

+ +
+ +
+
+
+
+
+ + + + + Bid Final Amount + + + +
+ + + + + + + + + + + + + + + + + +
DescriptionDocument
{{cover?.Description}} +
({{cover?.fileFormatD?.fileFormat}} format) +
+
+ +
+ + + + {{tenderData?.covers[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + + + +
+
+
+
+

+ + + + + +
+ + + + I agree to the Terms and Conditions + +
+ + + + + + + + +
+ + +
+
+
+
+ +
+ + + + + + +

+ + +
+
+
+
+

© Art.n.Architects 2023. + All Rights Reserved

+

Designed by SiMS

+
+
+
+
+ + + +
\ No newline at end of file diff --git a/src/app/_modules/super-admin/home-upload/home-upload.component.scss b/src/app/_modules/super-admin/home-upload/home-upload.component.scss new file mode 100644 index 0000000..caa35a7 --- /dev/null +++ b/src/app/_modules/super-admin/home-upload/home-upload.component.scss @@ -0,0 +1,70 @@ +#customers { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; +} + +#customers td, #customers th { + border: 1px solid #ddd; + padding: 8px; +} + +#customers tr:nth-child(even){background-color: #f2f2f2;} + +#customers tr:hover {background-color: #ddd;} + +#customers th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #5FACA1; + color: white; +} +.nav-link:hover { + color: rgb(255, 0, 0); + } +.resp{ + min-height: 260px; +} + @media (max-width: 767px) { + .resp{ + min-height: 460px; + } + + #customers td, #customers th { + padding-right: 2px; + } +} + +.checkbox-container { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.checkbox-text { + flex: 1; + font-family: 'Arial', sans-serif; + font-size: 16px; +} +::ng-deep .mat-checkbox-ripple .mat-ripple-element { + background-color: #5FACA1 !important; + +} + +::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + +::ng-deep .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/home-upload/home-upload.component.spec.ts b/src/app/_modules/super-admin/home-upload/home-upload.component.spec.ts new file mode 100644 index 0000000..e09a39b --- /dev/null +++ b/src/app/_modules/super-admin/home-upload/home-upload.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeUploadComponent } from './home-upload.component'; + +describe('HomeUploadComponent', () => { + let component: HomeUploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeUploadComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/home-upload/home-upload.component.ts b/src/app/_modules/super-admin/home-upload/home-upload.component.ts new file mode 100644 index 0000000..8a1a15d --- /dev/null +++ b/src/app/_modules/super-admin/home-upload/home-upload.component.ts @@ -0,0 +1,366 @@ +import { Component, OnInit,ViewChild,ElementRef,AfterViewInit, } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { log } from 'console'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2' +import { DialogComponent } from '../dialog/dialog.component'; +import { DatePipe } from '@angular/common'; +@Component({ + selector: 'app-home-upload', + templateUrl: './home-upload.component.html', + styleUrls: ['./home-upload.component.scss'] +}) + +export class HomeUploadComponent implements OnInit { + + phoneInvalid: boolean = false; + + secuLevel: any; + + formData: any = {}; + + myForm: UntypedFormGroup; + + loading: boolean = true + + selected: boolean + + tenderId: number; + + bidAmount:number; + + agreeToTerms1: boolean = false; + + agreeToTerms2: boolean = false; + + showError: boolean = false; + + tenderData: any; + + selectedFiles: any; + + userId: string; + + agreeToTerms: boolean = false; + + fileSelected: boolean[] + + DEFAULT_COVER_COUNT: any; + + initialSelectionStatus: any; + + UploadedFile: TenderDocumentDto[]; + + fileFormat: any[] + + userEmail: string; + + emailBody: any; + + username: string; + + @ViewChild('bidAmountInput') bidAmountInput: ElementRef; + + amountPaid: boolean = false; + OnlinePayment: boolean; + dialogRef: any; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + public dialog: MatDialog, + private datePipe: DatePipe + ) { + + + // this.generateUPIQRCode('atlejs47@oksbi', '100'); + + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.userEmail = localStorage.getItem('emailId'); + this.username = localStorage.getItem('username'); + + } + + + ngOnInit(): void { + this.loading = true; + this.agreeToTerms = false; + + + this.getData(); + this.getFileFormatLov(); + this.paymentCheck(); + } + + + + + + + openDialog() { + const dialogRef = this.dialog.open(DialogComponent, { + width: '500px', + data: { + details: [ + 'I hereby declare that I have read and understood the tendered documents, terms and conditions, drawings and specifications. The rates quoted are based on all the necessary understanding of the site conditions and challenges to carry out the work. The rates are the best I could offer and are inclusive of all taxes and levies.', + ] + } + }); + + dialogRef.afterClosed().subscribe((result) => { + // Handle any logic after the dialog is closed (if needed) + // For example, you can update the agreeToTerms variable based on the user's choice. + }); + } + + openQrImage(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false + }); + // this.verifiedOtp = true + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + this.loading = false; + + this.tenderData = res; + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + this.DEFAULT_COVER_COUNT = this.tenderData?.covers.length; // Replace with the actual number of rows + this.initialSelectionStatus = new Array(this.DEFAULT_COVER_COUNT).fill(false); + this.fileSelected = [...this.initialSelectionStatus]; + this.UploadedFile = []; + for(let i=0;i { + this.fileFormat = res + + }) + } + + UploadFiles(event, i) { + const newFilename = `${this.tenderData.covers[i].Description.replace(/ /g, '')}${this.tenderData.covers[i].fileFormatD.fileFormat}` + + + + let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat); + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + + // Create a new File object with the updated filename + const updatedFile = new File([file], newFilename, { type: file.type }); + // const fd = new FormData(); + fd.append('file', updatedFile); + if (file && this.tenderId) { + this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => { + this.tenderData.covers[i].file = res.fileName; + this.fileSelected[i] = true; + this.UploadedFile[i].docName = res.fileName + this.UploadedFile[i].description = this.tenderData.covers[i].Description; + this.UploadedFile[i].docType = fileFormatId[0].id; + this.UploadedFile[i].documentSize = res.fileSizeKB; + this.UploadedFile[i].documentCategory = 'USERD'; + this.UploadedFile[i].tenderId = this.tenderId; + this.UploadedFile[i].userId = this.userId; + + }) + } + + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + updateTerms(event: any) { + this.agreeToTerms = event.checked; + } + + + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + preSave() { + + if(this.bidAmount == 0 || this.bidAmount == null || this.bidAmount == undefined){ + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterBidFinalAmount"),2000,true); + return false; + } + for (let element of this.UploadedFile) { + if (!element.docName) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAddfiles"),2000,true); + + return false; + } + } + + if (!this.agreeToTerms) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAgreeToTheTermsandCondition"), 2000, true); + return false; + } + + + return true; + } + + + + + + // openDialog(): void { + // this.showDialog = true; + // } + + // closeDialog(): void { + // this.showDialog = false; + // } + + + + + submit() { + + if(!this.amountPaid && this.OnlinePayment){ + this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000); + return + } + + if(!this.preSave()) + return + + + + let id ={ + tenderId : this.tenderId, + userId : this.userId, + + } + + + let body= { + bidAmount:this.bidAmount + } + // this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + // const body={email:this.userEmail} + // this._masterService.saveMasterData(apiUrl.UploadBidAmount,this.emailBody).then(res=>{ + // },err=>{ + // console.error(err); + // }) + // },err=>{ + // console.error(err); + // }) + + + + Swal.fire({ + title: 'Are you sure you want to submit?', + text: "Once submitted, document cannot be uploaded again", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, save it!' + }).then((result) => { + +if (result.isConfirmed) { + this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + const body={email:this.userEmail} + this._masterService.saveMasterData(apiUrl.emailUserSubmit,this.emailBody).then(res=>{ + + this._masterService.saveAllMasterData(apiUrl.tenderDoc, this.UploadedFile).then(res => { + Swal.fire( + 'Success', + 'Documents submitted successfully', + 'success' + ) + this.router.navigate(['dashboard']); + },err=>{ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + }) + }); + + }); + + } + }) + + + } + + deleteInput(i) { + // const inputField = document.getElementById(inputFieldId) as HTMLInputElement; + // if (inputField) { + // inputField.value = ''; + // } + this._masterService.deleteMasterData(apiUrl.fileDelete + '/' + this.tenderId + '/' + this.userId, this.tenderData.covers[i].file).then(res => { + this.tenderData.covers[i].file = ''; + this.fileSelected[i] = false; + this.UploadedFile[i].docName = null + this.UploadedFile[i].description = null; + this.UploadedFile[i].docType = null; + this.UploadedFile[i].documentSize = null; + this.UploadedFile[i].documentCategory = null; + this.UploadedFile[i].tenderId = null; + this.UploadedFile[i].userId = null; + }) + + } + + + +} diff --git a/src/app/_modules/super-admin/home-view/home-view.component.html b/src/app/_modules/super-admin/home-view/home-view.component.html new file mode 100644 index 0000000..45d2458 --- /dev/null +++ b/src/app/_modules/super-admin/home-view/home-view.component.html @@ -0,0 +1,672 @@ +
+
+
+ +
+ + + + + + + +
+
+

Tender Details

+
+
+
+ + +
+
+
+
+ +
+ + + +
+ + + +
+
+
+ How can I Validate Digital Signature? +
+
+
+
+ +
Connect Security Device +
+
    +
  • Plug in the security device that has the necessary security keys. +
  • +
+
Select Key Files +
+
    +
  • Choose the Public key files for both the secretary and the president, usually provided on the security device. +
  • +
  • Locate the Public key document or file that you want to validate.
  • +
+
+
+ You can access Tender Reports only after validating the digital signatures of President and Secretary. +
+
+ + + +
+ Close +
+
+
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Basic Details
Tender Category{{tenderData.tenderCategoryD?.productCategory}}
Organisation Name{{tenderData?.orgChain}}
Tender Reference Number{{tenderData.tenderRefNo}}
Tender ID{{tenderData.tenderId}}
Tender Type{{tenderData.tenderTypeD?.tenderType}}
Payment Mode{{tenderData.paymentModeD?.paymentMode}}
Form of Contract{{tenderData.formOfContractD?.formOfContract}}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
Tender Fee Details
Tender Fee in ₹{{tenderData.tenderFee ? tenderData.tenderFee : '0' }}
Fee Payable To{{tenderData.feePayableTo ? tenderData.feePayableTo : 'not applicable' }}
Tender Fee Exemption Allowed{{tenderData.tenderFeeExemption ? tenderData.tenderFeeExemption : 'not applicable' }}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EMD Fee Details
EMD Fee Applicable{{tenderData.emdFeeApplied ? 'Yes' : 'No'}}
EMD Amount in ₹{{ tenderData.emdAmt !== undefined && tenderData.emdAmt !== null ? (tenderData.emdAmt !== 0 ? tenderData.emdAmt : 'not applicable') : 'not applicable' }}
EMD Fee Type{{tenderData.emdFeeTypeD?.emdFeeType ? tenderData.emdFeeTypeD?.emdFeeType : 'not applicable' }}
EMD Payable To{{tenderData.emdPayableTo ? tenderData.emdPayableTo : 'not applicable' }}
EMD through BG/ST or EMD Exemption Allowed{{tenderData.allowEmdBgOrSt ? tenderData.allowEmdBgOrSt : 'not applicable' }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Critical Dates
Published Date{{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale Start Date{{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale End Date{{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission Start Date{{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission End Date{{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Opening Date{{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work Item Details
Title{{tenderData.title}}
Work Description{{tenderData.workDesc}}
Pre Qualification{{tenderData.ndaPreQualification}}
Tender Value in ₹{{tenderData.tenderValue}}
Category{{tenderData?.productCategoryD?.tenderCategory}}
Sub category + + {{ subCategory?.tendersubCategoryD?.tenderSubCategory }} + , + +
Bid Validity(Days){{tenderData.bidValidity}}
Period Of Work {{tenderData.periodOfWork}}
Location{{tenderData.location}}
Pincode{{tenderData.pincode}}
Bid Opening Place{{tenderData.bidOpeningPlace}}
Bid Opening Address{{tenderData.bidOpenAddress}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
Tenders Documents
Notice
Document TypeDocument NameDescriptionDownload
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
Work Item Documents
Document TypeDocument NameDescription
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
+ + +
Drawings Document
Description + + +
{{document.description}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Required Documents Details
Document TypeDescriptionDocument Format
{{ document.coverTypeD.coverType }}{{ document.Description }}{{ document.fileFormatD.fileFormat }}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
Tender Inviting
Name{{tenderData.tenderInvName}}
Address{{tenderData.tenderInvAddess}}
+
+
+ + +
+
+
+
+
+ + +
+ + + +
+
+ {{captchaText}} +
+
+
+ Type the word Above : +
+ +
+ + Text + + +
+ +
+
+ + +
+
+ +
+
+ refresh +
+ + +
+
+
+ Captcha Not Matching +
+
+ + + \ No newline at end of file diff --git a/src/app/_modules/super-admin/home-view/home-view.component.scss b/src/app/_modules/super-admin/home-view/home-view.component.scss new file mode 100644 index 0000000..f77ecca --- /dev/null +++ b/src/app/_modules/super-admin/home-view/home-view.component.scss @@ -0,0 +1,424 @@ +.container-fluid{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: 10px; + position: relative; +} +.container-fluid2{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: -1px; + position: relative; +} + +@media print { + .hide-on-print { + display: none; + } + + .footer{ + display: none; + } +} + + + + +.nav-link:hover { + color: rgb(255, 0, 0); +} +// #zipFile:hover { +// color: rgb(255, 0, 0); +// cursor: pointer; +// } + +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +// -------------------------------------------------------------------------------------------- +thead{ + // background-color: #5faca1; color: aliceblue; + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: orangered; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +.table td { + word-break: break-word; + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; +} + +.table th { + font-family: texg; + color: #353535; +} + +.tenderHeading{ + font-family: texg; + color: #353535; +} +.printButton { + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.printButton:hover { + background-color: #ececec; + color: orangered; +} + +.payButton:hover { + background-color: #ececec; + color: orangered; +} + + +.DownloadZipButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} +.DownloadZipButton:hover { + background-color: #ececec; + color: orangered; +} + +.DownloadNoticeButton { + // float: right; + // margin-top: 5px; + // margin-bottom: 5px; + background-color: white; + // color: #424242; + color: orangered; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + +} +.DownloadNoticeButton:hover { + background-color: #ececec; + color: #303030; +} + +@media screen and (max-width: 768px) { + /* Adjust font size for smaller screens */ + .DownloadZipButton { + font-size: 14px; + } +} + +@media screen and (max-width: 480px) { + /* Further adjustments for even smaller screens */ + .DownloadZipButton { + font-size: 12px; + } +} + + + + +// ---------------------------------------digital signature------------------------------------------// + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: rgb(127, 232, 176); /* Primary color */ + //cursor: pointer; +} + +::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: rgb(137, 221, 161); /* Accent color */ + cursor: pointer; +} + + +::ng-deep .mat-slide-toggle-label { + display: flex; + flex: 1; + flex-direction: row; + align-items: center; + height: inherit; + cursor: pointer; + +} + +.element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ +} + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.responsive-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.responsive-buttons button { + margin-left: 10px; /* Add some spacing between the buttons */ +} + +@media (max-width: 768px) { + .responsive-buttons { + flex-direction: row; + justify-content: flex-end; + align-items: center; + } +} + + + + + +.captchaFont { + font-family: captcha; + font-size: large; + -webkit-user-select: none; /* Disable selection for WebKit browsers */ + -moz-user-select: none; /* Disable selection for Firefox */ + -ms-user-select: none; /* Disable selection for IE 10 and IE 11 */ + user-select: none; /* Disable selection for all other browsers */ + +} + +.captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); +} + +.captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; +} +.captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ +} + +.rotate-icon { + animation: rotate 1s infinite; +} + +@keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.captchaClose{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #ff2525; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; +} +.captchaClose:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + border-color: #ff2525; + /* You can adjust the shadow values to your preference */ +} +.container-responsive{ + background: #f3f3f3; +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/home-view/home-view.component.spec.ts b/src/app/_modules/super-admin/home-view/home-view.component.spec.ts new file mode 100644 index 0000000..bd212a6 --- /dev/null +++ b/src/app/_modules/super-admin/home-view/home-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeViewComponent } from './home-view.component'; + +describe('HomeViewComponent', () => { + let component: HomeViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/home-view/home-view.component.ts b/src/app/_modules/super-admin/home-view/home-view.component.ts new file mode 100644 index 0000000..7a95732 --- /dev/null +++ b/src/app/_modules/super-admin/home-view/home-view.component.ts @@ -0,0 +1,703 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TransactionService } from 'src/app/_providers/_services/transaction.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-home-view', + templateUrl: './home-view.component.html', + styleUrls: ['./home-view.component.scss'] +}) +export class HomeViewComponent implements OnInit { + + tenderId: number; + + tenderData: any; + + nitItemDocuments: any[] = []; + + workItemDocuments: any[] = []; + + drawingsDocuments: any[] = []; + + tenderDocuments: any; + + paymentDetails: PurchaseDto; + + tempID: any; + + newPaymentRow: any; + + currentDate = new Date(); + + enableDownload: boolean = true + + paymentStatus: string; + + userId: string; + + amountPaid: boolean = false; + + seculevel: string; + + displayedColumns: string[] = ['field', 'value']; + + OnlinePayment: boolean; + + showDownloadButton: boolean; + + btnToggle:boolean; + // ------digital signature--------// + + showPopup:boolean = false; + fileSelected: boolean; + fileSelected2:boolean; + Secretary:any; + President:any; + selectedSecretaryFile: any; + selectedPresidentFile: any; + SecretarySigned: boolean; + PresidentSigned: boolean; + activeYn: any ='S'; + dialogRef: any; + newStatus: string; + CancelTenderButtons: boolean; + + + + captchaText: string; + + userCaptchaInput: string; + + captchaMatching: boolean = true; + + isIconRotating: boolean; + spinnerLoading: boolean = false; + + // -------------- ---------------// + + + constructor( + private router: Router, + private route: ActivatedRoute, + private _masterService: MasterService, + private _transactionService: TransactionService, + private errorService:ErrorTranslateService, + private _ui: UiService, + private _errorTranslateService: ErrorTranslateService, + private dialog: MatDialog + ) { + this.seculevel = localStorage.getItem('seculevel') + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.paymentStatus = this.route.snapshot.paramMap.get('pay'); + // this.getData() + + } + ngOnInit(): void { + + this.tenderData = new TenderDetailDto() + this.userId = localStorage.getItem('userId') + this.seculevel = localStorage.getItem('seculevel') + + this.enableDownload = true; + this.getData(); + this.getPaymentData(); + if(this.activeYn='Y'){ + this.btnToggle=true; + } + + this.fileSelected = false + this.fileSelected2 = false + } + + + + + + generateRandomText() { + this.isIconRotating = true; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + let randomText = ''; + + for (let i = 0; i < 6; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + randomText += characters[randomIndex]; + } + + this.captchaText = randomText; + + setTimeout(() => { + this.isIconRotating = false; + }, 1000); + + + } + + getUniqueSubCategories() { + if (!this.tenderData || !this.tenderData.subCategoryMaster) { + return []; + } + const uniqueSubCategories = []; + const subCategoryIds = new Set(); // To keep track of already added subcategory IDs + for (const subCategory of this.tenderData.subCategoryMaster) { + const subCategoryId = subCategory.tendersubCategoryD.tenderSubCategory; + if (!subCategoryIds.has(subCategoryId)) { + uniqueSubCategories.push(subCategory); + subCategoryIds.add(subCategoryId); + } + } + return uniqueSubCategories; + } + + closeCheck(){ + if(this.activeYn =='Y'){ + this.btnToggle = true + } + else{ + this.btnToggle = false + } + this.dialogRef.close(); + + } + + captchaCheck(){ + if(this.captchaText == this.userCaptchaInput){ + + if(this.btnToggle){ + this.activeYn='Y'; + let body ={ + activeYn: this.activeYn + } + + this._masterService.postMasterData(apiUrl.TenderStatus,body,this.tenderId).then(res=> { + + }) + + + }else{ + + this.activeYn='N'; + let body ={ + activeYn: this.activeYn + } + + this._masterService.postMasterData(apiUrl.TenderStatus,body,this.tenderId).then(res=> { + + }) + } + this.dialogRef.close(); + + + } + else{ + + this.captchaMatching = false + setTimeout(() => { + this.captchaMatching = true + }, 2000); + } + + } + + + + + + getData() { + + let newDate = new Date(); + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + this.tenderData = res + this.tenderDocuments = this.tenderData['tenderDoc'] + if (res.tenderFeeExemption !== null && res.tenderFeeExemption !== undefined) { + this.tenderData.tenderFeeExemption = res.tenderFeeExemption.trim(); + } + + this.activeYn = this.tenderData['activeYn']; + + if(this.activeYn == 'N'){ + this.CancelTenderButtons = true + }else if(this.activeYn == 'Y'){ + this.CancelTenderButtons = false + } + + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + const saleStartDate = new Date(this.tenderData.saleStartDate); + const saleEndDate = new Date(this.tenderData.saleEndDate); + + if (this.currentDate >= saleStartDate && this.currentDate <= saleEndDate) { + this.showDownloadButton = true; // Enable the button + } else { + this.showDownloadButton = false; // Disable the button + } + + + + this.filterDataByCategory(); + }) + } + + + getPaymentData() { + + // if(this.OnlinePayment){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + }}) + + //} + + } + + + print(): void { + window.print(); + } + + filterDataByCategory() { + + + this.drawingsDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'D'); + this.workItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'WID'); + this.nitItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'NIT'); + } + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + goToDashboard(){ + this.navigateTo(`sadmin/dashboard`) + } + + DownloadDrawingsZIP() { + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + } else { + this.spinnerLoading = true; + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => { + // Download logic + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + }, err => { + if (err.status == 200) { + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } else { + // Handle other errors + } + }).finally(() => { + this.spinnerLoading = false; // Set spinnerLoading to false after download completes or fails + }); + } +} + + // DownloadDrawingsZIP() { + // // Your code to download the ZIP file goes here + + // // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // } + DownloadNIT(index: number) { + const id = this.tenderId; + + + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => { + + } , err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10000); + } + if (err.status == 404) { + alert('No Notice Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + + + downloadWITZip() { + + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + + } + else { + const id = this.tenderId; + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10); + + this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + }, err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 1000); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + } + } + + + async paymentGateway() { + // this.paymentDetails = new PurchaseDto(); + // this.paymentDetails.application = this.tenderId; + // this.paymentDetails.mobile = localStorage.getItem('mobile') + // this.paymentDetails.email = "accuratesoftware2022@gmail.com"; + // this.paymentDetails.amount = this.tenderData.tenderFee; + // this.paymentDetails.type = "I" + + + // this._transactionService.createPayment(this.paymentDetails).then( + // res => { + // this.onSuccessPayment(res); + // }, + // err => { + // this.onFailurePayment(err); + // } + // ); + + + this.router.navigate([`qr-payment/${this.tenderId}`]) + + } + + onSuccessPayment(response) { + if (response.url) { + // Render PayUmoney payment gateway page + window.location.href = response.url; + } + } + + onFailurePayment(err) { + this._ui.toastMessage(err.message ? err.message : this._errorTranslateService.translate('errInSave'), 3000); + + } + + // ------------------------------------------------------------------------------------------- + + + + + CancelTender(id){ + this.showPopup = true; + + this.showPopup = true; + } + closePopup() { + this.showPopup = false; + this.Secretary ='' + this.President = '' + } + + async UploadsecretaryFiles(event,SecretaryFile){ + + const allowedExtensions = ['cer']; + + this.selectedSecretaryFile = event.target.files[0]; + if (this.selectedSecretaryFile) { + + const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.Secretary = this.selectedSecretaryFile.name; + + + const formData = new FormData(); + formData.append('adminUser', '2'); + formData.append('certificate', this.selectedSecretaryFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + + }else{ + this.SecretarySigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + + + + }) + } + + + } + deleteSecretaryInput(){ + + } + + async UploadPresidentFiles(event,President){ + + const allowedExtensions = ['cer']; + + this.selectedPresidentFile = event.target.files[0]; + if (this.selectedPresidentFile) { + + const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.President = this.selectedPresidentFile.name; + + const formData = new FormData(); + formData.append('adminUser', '1'); + formData.append('certificate', this.selectedPresidentFile); + + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + + if(res.message = "Authentication Successfully Completed"){ + + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + + }else{ + this.PresidentSigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.PresidentSigned = false + this.President = '' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.PresidentSigned = false + this.President = '' + } + + + + }) + } + + + } + + deletePresidentInput(){ + + } + + + TenderCancelToggle(templateRef,event){ + + this.dialogRef = this.dialog.open(templateRef, { + disableClose: true, + width: '400px' + }); + + this.generateRandomText(); + this.captchaMatching = true + this.userCaptchaInput = '' + + + + + // this.activeYn='N'; + // let body ={ + // activeYn: this.activeYn + // } + + // this._masterService.postMasterData(apiUrl.TenderStatus,body,this.tenderId).then(res=> { + // }) + } + + VerifySignature(){ + + const id = this.tenderId; + this.showPopup = true; + if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + return false + + }else if(this.President == null || this.President == '' || this.President == undefined){ + this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + return false + }else if(!this.SecretarySigned && !this.PresidentSigned){ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + // footer: 'Why do I have this issue?' + }) + return false + //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + }else if(this.SecretarySigned && this.PresidentSigned){ + + + + + this.activeYn = this.activeYn === 'N' ? 'Y' : 'N'; + + + let body ={ + activeYn: this.activeYn + } + this._masterService.postMasterData(apiUrl.TenderStatus,body,id).then((res) =>{ + + if(this.activeYn == 'N'){ + this.activeYn == 'N' + }else if(this.activeYn == 'Y'){ + this.activeYn == 'Y' + } + + + this._ui.toastMessage(res.data, 3000); + + + if(res.data == 'Digital Signature Expired'){ + this.activeYn == 'N' + } + this.closePopup() + }, + (err) => { + console.error(err); + this._ui.toastMessage(err.error.message, 3000); + } + ); + + this.showPopup = false; + } + } + + + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog(){ + this.dialogRef.close(); + } + + + + +} diff --git a/src/app/_modules/super-admin/layout-component/layout-component.component.css b/src/app/_modules/super-admin/layout-component/layout-component.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/super-admin/layout-component/layout-component.component.html b/src/app/_modules/super-admin/layout-component/layout-component.component.html new file mode 100644 index 0000000..59d944b --- /dev/null +++ b/src/app/_modules/super-admin/layout-component/layout-component.component.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/super-admin/layout-component/layout-component.component.ts b/src/app/_modules/super-admin/layout-component/layout-component.component.ts new file mode 100644 index 0000000..ce7a4ea --- /dev/null +++ b/src/app/_modules/super-admin/layout-component/layout-component.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-layout-component', + templateUrl: './layout-component.component.html', + styleUrls: ['./layout-component.component.css'] +}) +export class LayoutComponentComponent implements OnInit { + + constructor( + private _ui: UiService, + ) { } + + async ngOnInit() { + + // await this._ui.userValidation() + } + +} diff --git a/src/app/_modules/super-admin/payment-details/payment-details.component.html b/src/app/_modules/super-admin/payment-details/payment-details.component.html new file mode 100644 index 0000000..0d13faa --- /dev/null +++ b/src/app/_modules/super-admin/payment-details/payment-details.component.html @@ -0,0 +1,233 @@ +
+ + + +
+ + + +
+ + + + +
+ + +
+
+

Payment Details

+
+ +
+

Tender Information:

+
+ + +
+
+ + {{'tender'|translate}} : + {{headerData?.title}} + +
+ +
+ + +
+
+ + {{'tenderId'|translate}} : + {{tenderInputId}} + +
+ +
+ +
+
+

Payment Summary:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + +
+ {{'TransactionId'|translate}} +
+ + + {{element?.transId}} + + +
+ + + + + + +
+ {{'Paymentstatus'|translate}} +
+ + + + {{element?.paymentStatus}} + + + +
+ + + + + + + +
+
+
+
+

No Payment Details available.

+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/super-admin/payment-details/payment-details.component.scss b/src/app/_modules/super-admin/payment-details/payment-details.component.scss new file mode 100644 index 0000000..49f496a --- /dev/null +++ b/src/app/_modules/super-admin/payment-details/payment-details.component.scss @@ -0,0 +1,438 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + } + + mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media (max-width: 767px) { + .card { + min-width: 600px; + } + } + + + @media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } + } + + .mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); + } + + .table-container { + margin-top: 20px + } + + + .backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + + } + + .backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + } + + .printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + + .excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; + } + .buttonCardBottom{ + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-bottom: 20px; + } + + .reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; + } + + .bidHeading { + font-family: texg; + color: #353535; + } + + .tenderInfo { + font-family: texg; + color: #353535; + } + + .subHead { + font-family: texg; + color: #353535; + } + + .subDetail { + font-family: nucleo; + color: #353535; + } + + .captchaFont { + font-family: captcha; + font-size: large; + } + + .captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); + } + + .captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + .captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ + } + + .rotate-icon { + animation: rotate 1s infinite; + } + + @keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .table-responsive { + overflow-x: scroll; + } + + + .printButton { + margin-top: 13px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + margin-right: 25px; + border-radius: 5px; + width: 35px; + font-family: nucleo; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + } + + .printButton:hover{ + margin-top: 13px; + margin-bottom: 5px; + background-color: white; + color: orangered; + height: 37px; + margin-right: 25px; + border-radius: 5px; + width: 35px; + font-family: nucleo; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + } \ No newline at end of file diff --git a/src/app/_modules/super-admin/payment-details/payment-details.component.ts b/src/app/_modules/super-admin/payment-details/payment-details.component.ts new file mode 100644 index 0000000..f360fa0 --- /dev/null +++ b/src/app/_modules/super-admin/payment-details/payment-details.component.ts @@ -0,0 +1,145 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-payment-details', + templateUrl: './payment-details.component.html', + styleUrls: ['./payment-details.component.scss'] +}) +export class PaymentDetailsComponent implements OnInit { + + + title = 'Payment Details'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'transId', 'Paymentstatus']; + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + tenderInputId: any; + + + paymentStatus: any; + userId: string; + + constructor( + private _router: Router, + private _masterService: MasterService, + private route: ActivatedRoute, + private _ui:UiService, + ) { + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + } + + + print(): void { + window.print(); + } + + getHeaderData(id) { + this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => { + this.headerData = res; + + this.tenderInputId = res.tenderId + }) + } + + getTableData(id) { + this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => { + + this.tableData = res.report + this.tableData.forEach(element => { + if (element.status === 'P') { + element.paymentStatus = 'Pending'; + } + if(element.status === 'S'){ + element.paymentStatus = 'Payment Success'; + } + if(element.status === 'D'){ + element.paymentStatus = 'Declined'; + } + }); + + this.tableData.sort((a, b) => { + if (a.status === 'P' && b.status !== 'P') { + return -1; + } else if (a.status !== 'P' && b.status === 'P') { + return 1; + } else { + return 0; + } + }); + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this.navigateTo('sadmin/dashboard') + // this.backClick.emit() + } + + sortData(sort: Sort) {} + + onPaymentStatusChange(userId, paymentStatus){ + let message = ''; + if (paymentStatus === 'S') { + message = 'Payment confirmed message'; + } else if (paymentStatus === 'D') { + message = 'Payment declined message'; + } + + let body = { + status : paymentStatus, + notificationViewed:'N', + message:message + } + this._masterService.postMasterData(apiUrl.paymentupdatePaymentStatus,body,`${userId}/${this.tenderId}`).then((res) =>{ + this._ui.toastMessage(res.data) + + },err=>{ + this._ui.toastMessage(err.error.message); + + + }) + } + + ConfirmMail(userName,email){ + let body ={ + custName:userName, + email: email + } + this._masterService.saveMasterData(apiUrl.confirmPayment,body).then((res) =>{ + + + }) + + } + +} diff --git a/src/app/_modules/super-admin/preview-approval/preview-approval.component.html b/src/app/_modules/super-admin/preview-approval/preview-approval.component.html new file mode 100644 index 0000000..f55551a --- /dev/null +++ b/src/app/_modules/super-admin/preview-approval/preview-approval.component.html @@ -0,0 +1,264 @@ +
+ +
+
+ +
+
+ Preview Approval
+ +
+ +
+ + + +
+ + +
+
+ + + +
+ +
+
+ +
+
+ + +
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'view' | translate }} + + + + + + + + + + + {{ 'action' | translate }} + + + +    + + + + + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+ + +
+ + +
+ +
+
+
+
+
+
+
+ + + +
+ + + +
Notification
+ +
+ + Notification Text + + +
+ +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/super-admin/preview-approval/preview-approval.component.scss b/src/app/_modules/super-admin/preview-approval/preview-approval.component.scss new file mode 100644 index 0000000..27edf68 --- /dev/null +++ b/src/app/_modules/super-admin/preview-approval/preview-approval.component.scss @@ -0,0 +1,652 @@ +// .header { + // margin-left: 4%; + // margin-top: 20px; + // } + + // .header>h6{ + // a { + // text-decoration: none; + // color: #262627; + // } + + // a:hover { + // text-decoration: underline; + // cursor: pointer; + // } + // } + + // mat-card{ + // min-width: 180px ; + // // max-width: 20vw; + // height: 200px; + // display: inline-block; + // } + + // mat-card:hover{ + // cursor: pointer; + // } + + + // ----------------------------------------------------------------------------------- + + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + // ------------------------------------------------ + // .popup-card { + // position: fixed; + // background-color: #ffffff; + // top: 50%; + // left: 50%; + // transform: translate(-50%, -50%); + // width: 450px; + // height: 330px; + // z-index: 1000; + // } + + + + // .popup-container { + // padding: 20px; /* Add padding for better spacing */ + // display: flex; + // flex-direction: column; + // justify-content: center; + // height: 100%; + // } + + + // .mainCard{ + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + // border-radius: 10px; + + // } + + + // .resetSpan{ + // font-family: texg; + // color: #1e3d3b; + // font-size: xx-large; + // float: center; + // margin-top: 15px; + // // margin-left: 64px; + // } + // .centered-form { + // display: flex; + // flex-direction: column; + // align-items: center; + // justify-content: center; + // } + + + // @media screen and (max-width: 600px) { + // .popup-card { + // width: 450px; /* Adjust card width for smaller screens */ + // } + // } + + // .mat-card-actions { + // display: flex; + // justify-content: flex-end; + // padding: 16px; /* Add padding for spacing */ + // } + + // .popUpButtons{ + // padding: 5px; + // color: #353535; + // font-weight: 900; + // font-size: medium; + // // background-color: #ececec; + // font-family:nucleo; + // } + + // .popUpButtons:hover{ + + // background-color: #ebeaea ; + // color:#46AC9E; + // box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // // transform: translateY(5px); + + // } + + // .custom-spinner-content { + // font-size: 24px; + // color:#46AC9E; + // margin: 0; + // padding: 0; + // } + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size:larger; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + + .verificationPopup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 235px; + z-index: 1000; + } + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + } + + .container-responsive{ + background: #f3f3f3; +} + + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} diff --git a/src/app/_modules/super-admin/preview-approval/preview-approval.component.spec.ts b/src/app/_modules/super-admin/preview-approval/preview-approval.component.spec.ts new file mode 100644 index 0000000..31116df --- /dev/null +++ b/src/app/_modules/super-admin/preview-approval/preview-approval.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PreviewApprovalComponent } from './preview-approval.component'; + +describe('PreviewApprovalComponent', () => { + let component: PreviewApprovalComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PreviewApprovalComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(PreviewApprovalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/preview-approval/preview-approval.component.ts b/src/app/_modules/super-admin/preview-approval/preview-approval.component.ts new file mode 100644 index 0000000..a1e6ce0 --- /dev/null +++ b/src/app/_modules/super-admin/preview-approval/preview-approval.component.ts @@ -0,0 +1,782 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-preview-approval', + templateUrl: './preview-approval.component.html', + styleUrls: ['./preview-approval.component.scss'] +}) +export class PreviewApprovalComponent implements OnInit{ + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData:CommonDto + + showPopup: boolean = false; + + toggleEvent:any; + + id:string; + + activeYn: any; + + reject: boolean = false; + + verify:boolean = false; + btnBadgeNumber: any; + // ------digital signature--------// + + // showPopup:boolean = false; + // fileSelected: boolean; + // fileSelected2:boolean; + // Secretary:any; + // President:any; + // selectedSecretaryFile: any; + // selectedPresidentFile: any; + // SecretarySigned: boolean; + // PresidentSigned: boolean; + + // -----------------------------// + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + // if(this.seculevel == 'B'){ + // } + // else{ + // this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','userPayments','view','upload']; + // } + + this.displayedColumns = ['slno','title','publishedDate','bidOpenDate','view','action']; + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck() + // this.fileSelected = false + // this.fileSelected2 = false + + // await this._ui.userValidation() + // this.loading = true; + // this.getMenuData(); + + } + + gotoVerify(element) { + this.verify=true; + this.id =element.id + this.showPopup = true; + + } + + closePopup() { + this.showPopup = false; + this.verify=false; + this.reject=false; + + } + + goToDashboard(){ + this.navigateTo(`sadmin/dashboard`) + } + + + verifyTender(){ + + + this.activeYn='Y'; + let body ={ + activeYn: this.activeYn + } + + this._masterService.postMasterData(apiUrl.TenderStatus,body,this.id).then(res=> { + + this.getData(); + + this.showPopup=false; + this.verify=false; + this.reject=false; + setTimeout(() => { + this.getData(); + + }, 2000); + Swal.fire( + 'Verified', + 'Tender Verified Successfully', + 'success' + ) + + },err=>{ + // console.error(err) + this._ui.toastMessage(err.error.message,3000,true) + }) + + } + + + gotoReject(element){ + this.reject=true; + this.id =element.id + this.showPopup = true; + + } + + + rejectTender(){ + + this.activeYn='N'; + let body ={ + activeYn: this.activeYn + } + + this._masterService.postMasterData(apiUrl.TenderStatus,body,this.id).then(res=> { + this.showPopup=false; + this.verify=false; + this.reject=false; + this.getData(); + setTimeout(() => { + this.getData(); + + }, 2000); + + Swal.fire( + 'Rejected', + 'Tender rejected Successfully', + 'success' + ) + + },err=>{ + // console.error(err) + this._ui.toastMessage(err.error.message,3000,true) + }) + + } + + getData(){ + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + // if(this.seculevel != 'B') + this.tenderData =[] + + this._masterService.getMasterData(`${apiUrl.adminTenderView}?where[activeYn]=S` ).then((res) =>{ + this.tenderData = res; + + this.btnBadgeNumber=this.tenderData.length ; + + for(let element of res){ + + if(element.id == '56'){ + element.hide56 = 'true' + }else + element.hide56= 'false' + + const bidSubStartDate: Date = new Date(element.bidSubStartDate); + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + + + element.hide = 'Active' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + },err=>{ + console.error(err) + }) + // else + // this._masterService.getMasterData(apiUrl.adminTenderView +'?order[id]=DESC').then((res) =>{ + // this.tenderData = res; + + + // for(let element of res){ + // this._masterService.getMasterDatabyId(apiUrl.bidReport, element.id).then(result => { + // element.countStatusP = result.countStatusP; + + // }) + + // const publishDate: Date = new Date(element.publishDate); + // const bidSubEndDate: Date = new Date(element.bidSubEndDate); + // let bidOpenDate: Date = new Date(element.bidOpenDate); + + // bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 30); + // if(newDate >= bidOpenDate){ + // element.reportHide = 'false' + // } + // if(newDate > publishDate){ + // element.HideEdit = true + // }else { + // element.HideEdit = false + // } + + // if(newDate >= publishDate && newDate <= bidOpenDate){ + + + + // element.hide = 'Active' + // } + // else if(newDate < publishDate){ + // element.hide = 'Await' + // } + // else + // element.hide = 'Closed' + + // } + // this.dataCopy = res; + // this.pageLength = this.tenderData.length; + // this.dataSource = new MatTableDataSource(this.tenderData); + // this.dataSource.sort = this.sort; + // this.dataSource.paginator = this.paginator; + // this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + // this.loading = false; + + // },err=>{ + // console.error(err) + // }) + + + + // const bidSubStartDate = new Date(this.tenderData.bidSubStartDate); + // const bidSubEndDate = new Date(this.tenderData.bidSubEndDate); + + // if (this.currentDate >= bidSubStartDate && this.currentDate <= bidSubEndDate) { + // this.enableDownload = false; // Enable the button + // } else { + // this.enableDownload = true; // Disable the button + // } + + + } + + getMarqueeData(){ + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res=>{ + + if(res && res.length > 0 && res[0].marquee && res[0].marquee != '' ){ + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender(){ + this.navigateTo('/admin/add-tenders') + } + + openNotificationDialog(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getMarqueeData(); + } + + closeDialog(){ + this.dialogRef.close(); + } + + saveNotificationText(){ + if(!this.commonData.marquee || this.commonData.marquee == ''){ + this._ui.toastMessage(this.errorService.translate('notificationTextCannotBeBlank')); + return ; + } + else{ + if(this.commonData.id){ + this._masterService.updateMasterData(apiUrl.common,this.commonData,this.commonData.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('notificationTextSaved')); + this.closeDialog(); + }) + } + + } + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + // navigateTo(destination) { + // this.router.navigate([destination]); + // } + + // async getMenuData() { + // this.menuData = [] + // await this._menuService.getJsonData("sales-menu").then((res) => { + // res.forEach(element => { + // if (element.menuEnabled == "Y") + // this.menuData.push(element) + // }); + // // this.menuData = res; + // this.loading = false; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // }); + + // } + // getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + // if (!parentMenuId) + // return []; + // if (!menuCompactData) + // menuCompactData = []; + // for (let menu of menuList) { + // if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + // let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + // if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + // if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + // if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // // if (menu.menuType == "1") format["isExpanded"] = true; + // // if (menu.menuType != "1") format["isExpanded"] = false; + // // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + // if (menu["menuType"]) format["menuType"] = menu["menuType"]; + // if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + // if (menu["role"]) format["role"] = menu["role"]; + // if (menu["project"]) format["project"] = menu["project"]; + // if (this.seculevel == 'admin') + // menuCompactData.push(format); + // else { + // if (menu.role != 'admin') { + // menuCompactData.push(format); + // } + // } + // } + // } + + // return menuCompactData; + // } + + goToPayment(id){ + this.navigateTo(`admin/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['sadmin/tender-view',tenderId]); + } + + goToPaymentDetails(tenderId){ + this.router.navigate(['admin/payment-details',tenderId]) + } + + goToAddTenders(){ + this.router.navigate(['admin/add-tenders']); + } + + goToUpload(tenderId){ + + +this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck,`${this.userId}/${tenderId}`).then((res)=> { + + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + this.router.navigate(['/tender-upload',tenderId]); + } +}).catch((error) => { + console.error("Error fetching upload data:", error); +}); + + + + + // + } + goToEdit(tenderId){ + this.router.navigate(['/add-tenders',tenderId]); + } + Cancel(){ + + } + + + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id){ + this.navigateTo(`bid-final-report/${id}`) + + + } + + + // CancelTender(id){ + // this.showPopup = true; + // this.showPopup = true; + // } + // closePopup() { + // this.showPopup = false; + // this.Secretary ='' + // this.President = '' + // } + + // async UploadsecretaryFiles(event,SecretaryFile){ + + // const allowedExtensions = ['cer']; + + // this.selectedSecretaryFile = event.target.files[0]; + // if (this.selectedSecretaryFile) { + + // const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.Secretary = this.selectedSecretaryFile.name; + + + // const formData = new FormData(); + // formData.append('adminUser', '2'); + // formData.append('certificate', this.selectedSecretaryFile); + + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + + // }else{ + // this.SecretarySigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.SecretarySigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + // deleteSecretaryInput(){ + + // } + + // async UploadPresidentFiles(event,President){ + + // const allowedExtensions = ['cer']; + + // this.selectedPresidentFile = event.target.files[0]; + // if (this.selectedPresidentFile) { + + // const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + // if (!allowedExtensions.includes(fileExtension)) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + // return; + // } + + // this.President = this.selectedPresidentFile.name; + + // const formData = new FormData(); + // formData.append('adminUser', '1'); + // formData.append('certificate', this.selectedPresidentFile); + + + + // await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + // if(res.message = "Authentication Successfully Completed"){ + + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + + // }else{ + // this.PresidentSigned = false + // } + + + // },(err) => { + // if(err.status === 201){ + // this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + // this.PresidentSigned = true + // } + + // if (err.status === 500) { + // this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + // } + // if(err.status === 400){ + // this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + // this.SecretarySigned = false + // } + + + + // }) + // } + + + // } + + // deletePresidentInput(){ + + // } + + // VerifySignature(){ + // this.showPopup = true; + // if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + // this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + // return false + + // }else if(this.President == null || this.President == '' || this.President == undefined){ + // this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + // return false + // }else if(!this.SecretarySigned && !this.PresidentSigned){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Something went wrong!', + // // footer: 'Why do I have this issue?' + // }) + // return false + // //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + // }else if(this.SecretarySigned && this.PresidentSigned){ + // Swal.fire({ + // icon: 'success', + // title: 'Cancellation Successfully', + // showConfirmButton: false, + // timer: 1500 + // }) + // this.showPopup = false; + // } + // } + + + // openHelpDialog(templateRef) { + // this.dialogRef = this.dialog.open(templateRef, { + // width: '700px', + // disableClose: false + // }); + // } + + + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} + diff --git a/src/app/_modules/super-admin/qr-payment/qr-payment.component.html b/src/app/_modules/super-admin/qr-payment/qr-payment.component.html new file mode 100644 index 0000000..6ac5299 --- /dev/null +++ b/src/app/_modules/super-admin/qr-payment/qr-payment.component.html @@ -0,0 +1,193 @@ + + + + + +
+
+
+ + +
+
+
+ {{ 'QRpayment' | translate }} +
+
+
+ help? +
+
+
+
+ + +
+
+

Current payment status :   {{paymentStatus}}

+

Amount need to be paid :  ₹{{amountReq}}/- + Only

+

Pay using any UPI app

+ + QR Code +
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+ + +
+
+ +
+

Please provide the transaction id of payment you've made successfully.

+
+ + + Please Enter Transaction ID + + + +
+
+ +
+
+ +
+
+
+
+ + + + + + +
+
How can I pay?
+
    +
  • Launch the payment app on your smartphone
  • +
  • scan the code
  • +
  • After paying need to enter transaction ID for Completing the process
  • +
  • Review the payment details to ensure they're correct, and then confirm the transaction +
  • +
+
How do I get my Transaction Id?
+
    +
  • The method to obtain a transaction ID for a QR code payment can vary depending on the + payment app you're using and the platform through which you made the payment. Generally, + when you make a payment using a QR code, the transaction ID is usually generated and + provided to you as a confirmation of the completed payment. please check your payment + app or mail for Transaction ID
  • +
+
How can I ensure that the payment was successful?
+
    +
  • After your successfull payment,enter the transaction Id
  • +
  • After the confirmation from Bank, your payment status will be changed from Pending to + Paid
  • +
+
Can I change the Transaction ID once it has been saved?
+
    +
  • You can edit the transaction ID after saving also
  • +
  • Editing Must be before the appropriate date
  • +
+

more info : secretary@artnouveau.in

+ +
+ Close +
+
+
+ +
+
+
+
+
\ No newline at end of file diff --git a/src/app/_modules/super-admin/qr-payment/qr-payment.component.scss b/src/app/_modules/super-admin/qr-payment/qr-payment.component.scss new file mode 100644 index 0000000..65937bd --- /dev/null +++ b/src/app/_modules/super-admin/qr-payment/qr-payment.component.scss @@ -0,0 +1,156 @@ +.payUpimsg{ + font-family: texg; + margin-bottom: 0px; +} + +.statusSpan{ + font-weight: bolder; + font-family: nucleo; + font-size: large; +} + +.normalText{ + font-family: nucleo; +} + +.btn1{ + font-family: nucleo; + font-size: 1rem; +} + + + +h6{ + font-family: nucleo; +} +.noFont{ + font-family: sans-serif; + font-weight: 600; +} + + +// -[-----------------------------------------------------------------]- + +.btn:hover, .btn1:hover { + background-color: #ebeaea; + color: #46AC9E; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.popup-card { + background-color: #ffffff; + width: 100%; + max-width: 600px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; +} + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + + // margin-left: 64px; + } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; + +// } + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: auto; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: 1rem; + padding: 10px; + font-family: nucleo; + width: 270px; + + } + .normalTextIN{ + color: #505050; + font-weight: 700; + font-size: small; + font-family: nucleo; + font-size: 1rem; + } + + +.centered-heading { + text-align: center; + margin-bottom: 20px; +} + + +.centered-form-content { + text-align: center; + padding: 0 20px; +} + +.centered-button { + text-align: center; + display: flex; + justify-content: center; + align-items: center; + margin-top: 20px; +} + + + +::ng-deep .mat-form-field-flex{ + background-color: #ffffff; +} + + + + +@media screen and (max-width: 600px) { + .centered-heading { + font-size: 1.2rem; + } +} + + + +@media (max-width: 767px) { + .responsive-container { + padding: 10px; + } + + .custom-tab-group { + width: 100%; + } + + .centered-form-content { + padding: 10px; + } + + .col-md-3, + .col-md-6 { + flex-basis: 100%; + } +} + + +@media (min-width: 768px) and (max-width: 991px) { + .col-md-3, + .col-md-6 { + flex-basis: 50%; + } +} + +.center-container { + display: flex; + justify-content: center; /* Horizontally center */ + // align-items: center; /* Vertically center */ + // height: 100vh; /* Make the container cover the viewport vertically */ + // background-color: rgba(0, 0, 0, 0.5); /* Optional overlay background */ +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/qr-payment/qr-payment.component.spec.ts b/src/app/_modules/super-admin/qr-payment/qr-payment.component.spec.ts new file mode 100644 index 0000000..11289ca --- /dev/null +++ b/src/app/_modules/super-admin/qr-payment/qr-payment.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { QrPaymentComponent } from './qr-payment.component'; + +describe('QrPaymentComponent', () => { + let component: QrPaymentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ QrPaymentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(QrPaymentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/qr-payment/qr-payment.component.ts b/src/app/_modules/super-admin/qr-payment/qr-payment.component.ts new file mode 100644 index 0000000..302b046 --- /dev/null +++ b/src/app/_modules/super-admin/qr-payment/qr-payment.component.ts @@ -0,0 +1,183 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as QRCode from 'qrcode'; +import { PaymentInfoDto } from 'src/app/_dto/payment-info.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; + +@Component({ + selector: 'app-qr-payment', + templateUrl: './qr-payment.component.html', + styleUrls: ['./qr-payment.component.scss'] +}) +export class QrPaymentComponent implements OnInit { + + secuLevel: string; + + userId: string; + + tenderId: number; + + transactionData: PaymentInfoDto; + + amountReq: any; + + dialogRef: any; + + paymentStatus: any; + + paymentId: any; + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + private dialog: MatDialog, + private datePipe: DatePipe + ) { + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + qrImage: boolean = false; + + transId: any + + ngOnInit(): void { + + this.transactionData = new PaymentInfoDto() + + this.getData(); + } + + + // ngAfterViewInit(): void { + + // setTimeout(() => { + // }, 1000); + // } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.getTender, this.tenderId).then(res => { + this.amountReq = res.tenderFee; + this.generateUPIQRCode(environment.upiId, this.amountReq); + + }) + this.paymentCheck(); + + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + + if (res && res[0].status) { + if (res[0].status == 'P') { + this.paymentStatus = 'Pending' + } + if (res[0].status == 'D') { + this.paymentStatus = 'Declined' + } + if (res[0].status == 'S') { + this.paymentStatus = 'Success' + } + this.paymentId = res[0].id + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.paymentStatus = 'Payment Not Started' + this.transactionData.status = 'P' + } + }) + } + generateUPIQRCode(upiID: string, amount: string): void { + const upiLink = `upi://pay?pa=${upiID}&am=${amount}&tn=Tender%20Fee`; + + QRCode.toDataURL(upiLink, { errorCorrectionLevel: 'L' }, (err, qrDataURL) => { + if (err) { + console.error(err); + return; + } + + const qrImageElement = document.getElementById('qrImage') as HTMLImageElement; + qrImageElement.src = qrDataURL; + this.qrImage = true + + }); + } + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog() { + this.dialogRef.close() + } + + nextTab() { + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + prevTab() { + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + + preSave() { + + if (this.transactionData.transId == 0 || this.transactionData.transId == null || this.transactionData.transId == undefined) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterTransId"), 2000, true); + return false; + } + + + + return true; + } + + submit() { + if (!this.preSave()) + return + + this.transactionData.userId = this.userId; + this.transactionData.tenderId = this.tenderId; + // this.transactionData. + + + if(this.paymentId){ + this.transactionData.id = this.paymentId + this._masterService.updateMasterData(apiUrl.paymentMaster, this.transactionData,this.paymentId).then(res=>{ + this.transactionData = new PaymentInfoDto() + this.getData(); + + }) + } + else + this._masterService.saveMasterData(apiUrl.paymentInfo, this.transactionData).then(res => { + this.transactionData = new PaymentInfoDto() + this.getData(); + }) + } +} diff --git a/src/app/_modules/super-admin/tender-category/tender-category.component.html b/src/app/_modules/super-admin/tender-category/tender-category.component.html new file mode 100644 index 0000000..391e4d0 --- /dev/null +++ b/src/app/_modules/super-admin/tender-category/tender-category.component.html @@ -0,0 +1,206 @@ +
+ +
+
+ +
+
+ Category
+ +
+ +
+
+ + +
+ +
+ + + +
+ +
+
+ + +
+
+
+
+
+ search +
+
+ + + + +
+
+ +
+ +
+
+ + +
+
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'Category' | translate }} + + + {{element?.tenderCategory}} + + + + + + {{ 'Status' | translate }} + + + Active + Inactive + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ + + +
+ + + + + +
Category
+ +
+ + Category + + +
+
+
+ + {{selectedCategory.active ? 'Active':'Inactive'}} + +
+
+
+ +
+
+ +
+
+ +
+
+ + + + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/super-admin/tender-category/tender-category.component.scss b/src/app/_modules/super-admin/tender-category/tender-category.component.scss new file mode 100644 index 0000000..0276185 --- /dev/null +++ b/src/app/_modules/super-admin/tender-category/tender-category.component.scss @@ -0,0 +1,621 @@ + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + + :host ::ng-deep .mat-sort-header-container { + display: flex; + justify-content: center; +} + + + mat-table { + text-align: center !important; + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + text-align: center !important; + + } + + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + + .mat-header-cell { + flex-direction: column; + justify-content: center; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; + } + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + align-items: center; + } + + .top-left-float{ + min-width: 89%; + + } + .top-right-float { + min-width: 100%; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + .clearButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .clearButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 29vh; + height: 47px; + } + .clearButton{ + // margin: 5px; + // height: 40px; + margin-left: -105px !important; + margin-top: 4px; +} + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + .editButton{ + margin: auto; + border-radius: 16px !important; + height: 35px !important; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: x-large; + color: #424242; + } + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + +.container-responsive{ + background-color: whitesmoke; +} + +.categoryBtn{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + border: 1px solid orangered; + font-family: nucleo; + width: 11%; + +} + +.categoryBtn:hover{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: white; + background-color: orangered; + border: 1px solid orangered; + font-family: nucleo; + width: 11%; + +} diff --git a/src/app/_modules/super-admin/tender-category/tender-category.component.spec.ts b/src/app/_modules/super-admin/tender-category/tender-category.component.spec.ts new file mode 100644 index 0000000..784b268 --- /dev/null +++ b/src/app/_modules/super-admin/tender-category/tender-category.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderCategoryComponent } from './tender-category.component'; + +describe('TenderCategoryComponent', () => { + let component: TenderCategoryComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderCategoryComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TenderCategoryComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/tender-category/tender-category.component.ts b/src/app/_modules/super-admin/tender-category/tender-category.component.ts new file mode 100644 index 0000000..ebbdff9 --- /dev/null +++ b/src/app/_modules/super-admin/tender-category/tender-category.component.ts @@ -0,0 +1,321 @@ +import { Component, OnInit, EventEmitter, Input, Output,ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { TenderCategoryDto } from 'src/app/_dto/category.dto'; +import { ThemePalette } from '@angular/material/core'; +@Component({ + selector: 'app-tender-category', + templateUrl: './tender-category.component.html', + styleUrls: ['./tender-category.component.scss'] +}) +export class TenderCategoryComponent implements OnInit { + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns :any = ['actions','slno','tenderCategory','status']; + + dataCopy: any; + + pageLength: any; + + searchTerm:any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + categoryData :TenderCategoryDto[]; + + selectedCategory:TenderCategoryDto; + + color: ThemePalette = 'primary'; + + isEdit: boolean = false; + + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + this.enableDownload = true; + this.categoryData = [] + this.getData(); + + } + + + + getData(){ + + this._masterService.getMasterData(apiUrl.tenderCategory).then((res) =>{ + this.categoryData = res; + this.dataCopy = res; + this.pageLength = this.categoryData.length; + this.dataSource = new MatTableDataSource(this.categoryData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.categoryData && this.categoryData.length == 0) ? true : false; + this.loading = false; + },err=>{ + console.error(err) + }) + + + + + } + + + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + getCategoryById(id){ + this._masterService.getMasterDatabyId(apiUrl.tenderCategory,id).then(res=>{ + this.selectedCategory = res + },err=>{ + console.log(err); + + }) + } + + editCategoryDialog(templateRef,id){ + this.selectedCategory = new TenderCategoryDto(); + this.isEdit = true; + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.getCategoryById(id); + } + + openCategoryDialog(templateRef){ + this.isEdit = false; + this.selectedCategory = new TenderCategoryDto(); + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.selectedCategory.active = true + } + closeDialog(){ + this.dialogRef.close(); + } + + sortData(sort: Sort) { + const data = this.categoryData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'tenderCategory': + return compare(a.tenderCategory, b.tenderCategory, isAsc); + case 'status': + return compare(a.active, b.active, isAsc); + default: + return 0; + } + }); + } + + search(){ + this.categoryData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.categoryData = this.categoryData.filter(res => { + let includedIntenderCategory = (res.tenderCategory) ? res.tenderCategory.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + if (includedIntenderCategory) + return true; + else + return false; + }); + this.noData = (this.categoryData && this.categoryData.length == 0) ? true : false; + this.pageLength = this.categoryData.length; + this.dataSource = new MatTableDataSource(this.categoryData); + this.loading = false; + } + + reset(){ + this.searchTerm = ""; + this.getData(); + } + + + goToDashboard(){ + this.navigateTo(`sadmin/dashboard`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn(){ + this.router.navigate(['/login']); + } + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + + saveCategory(){ + if(!this.selectedCategory.tenderCategory || this.selectedCategory.tenderCategory == ''){ + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return ; + } + this._masterService.saveMasterData(apiUrl.tenderCategory,this.selectedCategory).then(res=>{ + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + }) + + + + } + editCategory(){ + if(!this.selectedCategory.tenderCategory || this.selectedCategory.tenderCategory == ''){ + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return ; + } + this._masterService.updateMasterData(apiUrl.tenderCategory,this.selectedCategory,this.selectedCategory.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + this.isEdit = false; + },err=>{ + console.log(err); + + }) + } + + + deleteCategory(){ + this._masterService.deleteMasterData(apiUrl.tenderCategory,this.selectedCategory.id).then(res=>{ + this._ui.toastMessage(this.errorService.translate('deleteSuccess')); + this.closeDialog(); + this.getData(); + this.selectedCategory = new TenderCategoryDto(); + },err=>{ + console.log(err); + + }) + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/super-admin/tender-home/tender-home.component.html b/src/app/_modules/super-admin/tender-home/tender-home.component.html new file mode 100644 index 0000000..d13567c --- /dev/null +++ b/src/app/_modules/super-admin/tender-home/tender-home.component.html @@ -0,0 +1,93 @@ +
+ + + + + + + + + +

+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
#TENDER NAMEVIEWUPLOAD
{{ i + 1 }}{{ tender.name }} + + + +
+
+
+
+
+
+


+ + + +
\ No newline at end of file diff --git a/src/app/_modules/super-admin/tender-home/tender-home.component.scss b/src/app/_modules/super-admin/tender-home/tender-home.component.scss new file mode 100644 index 0000000..55e3ab1 --- /dev/null +++ b/src/app/_modules/super-admin/tender-home/tender-home.component.scss @@ -0,0 +1,72 @@ +// .header { + // margin-left: 4%; + // margin-top: 20px; + // } + + // .header>h6{ + // a { + // text-decoration: none; + // color: #262627; + // } + + // a:hover { + // text-decoration: underline; + // cursor: pointer; + // } + // } + + // mat-card{ + // min-width: 180px ; + // // max-width: 20vw; + // height: 200px; + // display: inline-block; + // } + + // mat-card:hover{ + // cursor: pointer; + // } + + + // ----------------------------------------------------------------------------------- + + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + border: 1px solid #ccc; + white-space: nowrap; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } \ No newline at end of file diff --git a/src/app/_modules/super-admin/tender-home/tender-home.component.spec.ts b/src/app/_modules/super-admin/tender-home/tender-home.component.spec.ts new file mode 100644 index 0000000..2b846a2 --- /dev/null +++ b/src/app/_modules/super-admin/tender-home/tender-home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderHomeComponent } from './tender-home.component'; + +describe('TenderHomeComponent', () => { + let component: TenderHomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderHomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenderHomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/super-admin/tender-home/tender-home.component.ts b/src/app/_modules/super-admin/tender-home/tender-home.component.ts new file mode 100644 index 0000000..8de17c2 --- /dev/null +++ b/src/app/_modules/super-admin/tender-home/tender-home.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-tender-home', + templateUrl: './tender-home.component.html', + styleUrls: ['./tender-home.component.scss'] +}) +export class TenderHomeComponent implements OnInit { + + + + displayedColumns: string[] = ['no', 'name','download']; + data:any[] = [ + { no:1,name:'Tender 1', city: 'New York' }, + { no:2 , name:'Tender 2', city: 'London' }, + { no:3 , name:'Tender 3', city: 'Paris' }, + + ]; + constructor( private authenticationService: AuthService, + private router: Router,) { } + + ngOnInit(): void { + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView() { + this.router.navigate(['/tender-view']); + } + + goToUpload(){ + this.router.navigate(['/tender-upload']); + } + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + +} + diff --git a/src/app/_modules/super-admin/user-approval/user-approval.component.html b/src/app/_modules/super-admin/user-approval/user-approval.component.html new file mode 100644 index 0000000..f3f89d5 --- /dev/null +++ b/src/app/_modules/super-admin/user-approval/user-approval.component.html @@ -0,0 +1,101 @@ + + +
+
+
+ +
+
+
Approve User
+
+
+ +
+
+
+ +
+
Requested Date
+
User
+
Mobile No.
+
Email
+
Max Amount
+
company profile
+
certificate
+
Approve / Reject
+ + +
+
+ +
+ +
+ {{element?.createdDate | date:'dd-MM-yyyy'}} +
+
+ {{element?.userName}} +
+
+ {{element?.mobileNumber}} +
+
+ {{element?.email}} +
+
+ {{element?.maxAmount}} +
+
+ +
+
+ +
+
+ + + +
+
+ +
+ +
+

No New Requests available.

+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/src/app/_modules/super-admin/user-approval/user-approval.component.scss b/src/app/_modules/super-admin/user-approval/user-approval.component.scss new file mode 100644 index 0000000..717ea44 --- /dev/null +++ b/src/app/_modules/super-admin/user-approval/user-approval.component.scss @@ -0,0 +1,63 @@ +.heading{ + text-align: center;font-size: xx-large; font-family: nucleo; font-weight: 600; +} + +mat-label, mat-option, input::placeholder, input { + font-family: nucleo; +} + +.status-button-accepted { + background-color: #64B200; + border-color: #64B200; + color: white; + padding: 5px 10px; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: nucleo; + min-height: 4vh; + min-width: 52%; + font-size: small; + } + +.button-Reject{ + background-color: #ff0000; + border-color: #e08d21; + color: white; + padding: 5px 10px; + border: none; + border-radius: 4px; + cursor: pointer; + font-family: nucleo; + min-height: 4vh; + margin-left: 10px; + min-width: 45%; + font-size: small; +} + + +.userHeading{ + font-family: 'texg'; + color: #606060; + top: 6px; + position: relative; + font-size: small; +} +.subHead { + font-family: texg; + color: #353535; + } + .container-responsive{ + background: #f3f3f3; + } + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/user-approval/user-approval.component.ts b/src/app/_modules/super-admin/user-approval/user-approval.component.ts new file mode 100644 index 0000000..9a5e9cb --- /dev/null +++ b/src/app/_modules/super-admin/user-approval/user-approval.component.ts @@ -0,0 +1,117 @@ +import { DatePipe } from '@angular/common'; +import { Component } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-user-approval', + templateUrl: './user-approval.component.html', + styleUrls: ['./user-approval.component.scss'] +}) +export class UserApprovalComponent { + + UserData: any; + loading: boolean = false; + + constructor( + // private _menuService: MenuService, + private router: Router, + private _ui: UiService, + // private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService:ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + // private dialog: MatDialog + ) { + + } + + ngOnInit() { + this.getData(); + + + } + + getData(){ + this.loading = true; + this._masterService.getMasterData(apiUrl.statusVerify).then((res) =>{ + this.loading = false; + + this.UserData = res + + }) + } + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + + goToDashboard(){ + this.navigateTo(`sadmin/dashboard`) + } + + ApproveUser(user){ + + let body = { + userId :user.userId, + status : 'A', + } + this.loading = true; + + this._masterService.saveMasterData(apiUrl.reqUser,body).then((res) =>{ + this.loading = false; + + this._ui.toastMessage(this.errorService.translate(res.msg)); + this.getData() + + + }) + + } + RejectUser(user){ + + let body = { + userId :user.userId, + status : 'R', + } + this.loading = true; + + this._masterService.saveMasterData(apiUrl.reqUser,body).then((res) =>{ + this.loading = false; + + this._ui.toastMessage(this.errorService.translate(res.msg)); + this.getData() + }) + + + } + + downloadCmpProfile(cpFileName){ + this.loading = true; + + this._masterService.downloadFileWithAuth(apiUrl.cmpPrFileUpload,cpFileName).then(res=>{ + this.loading = false; + + + + }) + } + + downloadProjectCert(prCertFilename){ + this.loading = true; + + this._masterService.downloadFileWithAuth(apiUrl.projectCompleteCertFile,prCertFilename).then(res=>{ + + this.loading = false; + + }) + + } +} diff --git a/src/app/_modules/super-admin/user-management/user-management.component.html b/src/app/_modules/super-admin/user-management/user-management.component.html new file mode 100644 index 0000000..df15b30 --- /dev/null +++ b/src/app/_modules/super-admin/user-management/user-management.component.html @@ -0,0 +1,270 @@ +
+ +
+
+ +
+
+ Employee Management
+ +
+ +
+ +
+ + +
+ +
+ + + +
+ +
+
+ + +
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ + +
+
+ + + +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'userName' | translate }} + + + {{element?.userName}} + + + + + + {{ 'email' | translate }} + + + {{element?.email}} + + + + + + {{ 'Roles' | translate }} + + + {{element?.secuLevel}} + + + + + + + + {{ 'Status' | translate }} + + + Active + Inactive + + + + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + + + + + +
+
+
+
+
+
+
+
+ +
+ + + + +
Employee management
+ +
+ + User Name + + +
+ +
+ + Email + + +
+ +
+ + Mobile Number + + +
+ +
+ + Role{{regular()}} + +

User

+

    View tender

+

Analyst

+

    Add tender, gallery

+ Admin +

     User approval, tender approval preview,
     add category, user management

+
+
+
+ + + +
+
+ + {{selectedUser.active ? 'Active':'Inactive'}} + +
+
+
+ +
+ + {{selectedUser.employee ? 'Employee':'User'}} + +
+
+
+ +
+
+ +
+
+ +
+
+ + + + +
+
+ + +
+ + \ No newline at end of file diff --git a/src/app/_modules/super-admin/user-management/user-management.component.scss b/src/app/_modules/super-admin/user-management/user-management.component.scss new file mode 100644 index 0000000..a2651d9 --- /dev/null +++ b/src/app/_modules/super-admin/user-management/user-management.component.scss @@ -0,0 +1,568 @@ + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; + } + + + :host ::ng-deep .mat-sort-header-container { + display: flex; + justify-content: center; +} + + + mat-table { + text-align: center !important; + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + text-align: center !important; + + } + + + .table-headers:hover { + background-color: #a6a6a6; + color:rgb(255, 255, 255); + } + .swal2-content { + font-family:nucleo; + font-weight: 900; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } + + .mat-header-cell { + flex-direction: column; + justify-content: center; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; + } + + ::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + + ::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; + } + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + // .mat-form-field-infix { + // // border-bottom: 1px solid white; + // } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: large; + color: #424242; + } + } + + + .mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); + } + .viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + .editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + + } + + .editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ + } + + .addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + } + + .awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + } + + .closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + } + + .canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + } + .searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + + } + .home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; + } + + .circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + } + + .notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; + } + + .notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + @media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } + } + + + + + .popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; + } + + + + .popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; + } + + + .mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + + } + + + .resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; + } + h6{ + font-family:nucleo; + } + .helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; + } + .centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + + @media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size: large; + color: #424242; + } + } + + .mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ + } + + .popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; + } + + .popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + + } + + .custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; + } + + + .normalText{ + font-family: nucleo; + + + } + + .editButton{ + margin: auto; + border-radius: 16px !important; + height: 35px !important; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + font-family: nucleo; + } + + .master-header{ + font-family: 'nucleo'; + font-weight: bold; + font-size:large; + color: #424242; + } + + + .container-responsive{ + background: #f3f3f3; + } + + +.main-card{ + // min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} \ No newline at end of file diff --git a/src/app/_modules/super-admin/user-management/user-management.component.ts b/src/app/_modules/super-admin/user-management/user-management.component.ts new file mode 100644 index 0000000..ff25da3 --- /dev/null +++ b/src/app/_modules/super-admin/user-management/user-management.component.ts @@ -0,0 +1,408 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild, ElementRef } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error } from 'console'; +import Swal from 'sweetalert2'; +import { ChangeDetectorRef } from '@angular/core'; +import { UserDto } from 'src/app/_dto/user.dto'; +import { ThemePalette } from '@angular/material/core'; +@Component({ + selector: 'app-user-management', + templateUrl: './user-management.component.html', + styleUrls: ['./user-management.component.scss'] +}) +export class UserManagementComponent implements OnInit { + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns: any = ['actions', 'slno', 'userName', 'email', 'secuLevel', 'active']; + + dataCopy: any; + + pageLength: any; + + searchTerm: any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + @ViewChild("toggleEmployee") employeeRef: ElementRef; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + userData: UserDto[]; + + selectedUser: UserDto; + + color: ThemePalette = 'primary'; + + isEdit: boolean = false; + + userLov : any; + + desc: boolean=false; + changeToUser: boolean = false; + + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService: ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog, + private cdr: ChangeDetectorRef + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + isOpened:boolean = false; + + + async ngOnInit() { + this.selectedUser = new UserDto(); + + this.enableDownload = true; + this.userData = [] + this.getData(); + this.userLov = [ + {label: 'User',value:'User',desc:'Users can engage in the tender process by submitting the required fees.'}, + {label: 'Analyst',value:'Analyst',desc:'Analysts have the authority to create new tenders within this application.'}, + {label: 'User',value:'User',desc:'Users can engage in the tender process by submitting the required fees.'} + + ] + + } + + + + getData() { + + this._masterService.getMasterData(apiUrl.userData).then((res) => { + this.userData = res; + this.dataCopy = res; + this.pageLength = this.userData.length; + this.dataSource = new MatTableDataSource(this.userData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.userData && this.userData.length == 0) ? true : false; + this.loading = false; + }, err => { + console.error(err) + }) + + + + + } + + + event(event){ + + + if(event.value ){ + this.desc =true + + }else { + this.desc = false; + } + } + + triggerEvent(event,selectedUser){ + if(selectedUser.secuLevel == 'SuperAdmin'){ + this._ui.toastMessage('Super admin cannot be changed to a user'); + this.employeeRef['_checked'] = true + selectedUser.employee=true; + } + else if(selectedUser.secuLevel !=='User' && selectedUser.employee==false){ + + this._ui.toastMessage('Only users have the privilage to switch Employee to a User.'); + this.employeeRef['_checked'] = true + selectedUser.employee=true; + } + + this.isOpened = event + this.cdr.detectChanges(); + if(!event) + setTimeout(() => { + this.isOpened = false + }, 1000); // Mark for check + } + + regular(){ + if(!this.isOpened){ + this.isOpened = false + } + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + getUserById(id) { + this._masterService.getMasterDatabyId(apiUrl.userData, id).then(res => { + this.selectedUser = res; + + }, err => { + console.log(err); + + }) + } + + editUserDialog(element,templateRef, id) { + + + this.selectedUser = new UserDto(); + this.isEdit = true; + + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + + }); + this.getUserById(id); + + + } + + toggleChange(selectedUser: any) { + if (selectedUser.secuLevel == 'SuperAdmin'){ + this._ui.toastMessage('Super admin cannot be changed to a user'); + this.employeeRef['_checked'] = true + selectedUser.employee=true; + + } + else if (selectedUser.secuLevel !== 'User') { + this._ui.toastMessage('To change an employee into a user, you must first update their role to "user"'); + this.employeeRef['_checked'] = true + this.selectedUser.employee = true; + + } + } + + + + + openCategoryDialog(templateRef) { + this.isEdit = false; + this.selectedUser = new UserDto(); + this.dialogRef = this.dialog.open(templateRef, { + width: '500px', + disableClose: false + }); + this.selectedUser.active = true + } + closeDialog() { + this.dialogRef.close(); + } + + sortData(sort: Sort) { + const data = this.userData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'userName': + return compare(a.userName, b.userName, isAsc); + case 'email': + return compare(a.email, b.email, isAsc); + case 'secuLevel': + return compare(a.secuLevel, b.secuLevel, isAsc); + case 'active': + return compare(a.active, b.active, isAsc); + default: + return 0; + } + }); + } + + search() { + this.userData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.userData = this.userData.filter(res => { + let includedInUserName = (res.userName) ? res.userName.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInEmail = (res.email) ? res.email.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInSecuLevel = (res.secuLevel) ? res.secuLevel.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + + + + + + if (includedInUserName || includedInEmail || includedInSecuLevel ) + return true; + else + return false; + }); + this.noData = (this.userData && this.userData.length == 0) ? true : false; + this.pageLength = this.userData.length; + this.dataSource = new MatTableDataSource(this.userData); + this.loading = false; + } + + reset() { + this.searchTerm = ""; + this.getData(); + } + + + goToDashboard() { + this.navigateTo(`sadmin/dashboard`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + + if (res.length > 0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn() { + this.router.navigate(['/login']); + } + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + + saveUser() { + if (!this.selectedUser.category || this.selectedUser.category == '') { + this._ui.toastMessage(this.errorService.translate('categoryNameCannotBeBlank')); + return; + } + this._masterService.saveMasterData(apiUrl.userData, this.selectedUser).then(res => { + this._ui.toastMessage(this.errorService.translate('categorySaved')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + }) + + + + } + editUser() { + + this._masterService.updateMasterData(apiUrl.userData, this.selectedUser, this.selectedUser.userId).then(res => { + this._ui.toastMessage(this.errorService.translate('updateSuccess')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + this.isEdit = false; + }, err => { + console.log(err); + + }) + } + + + deleteUser() { + this._masterService.deleteMasterData(apiUrl.userData, this.selectedUser.userId).then(res => { + this._ui.toastMessage(this.errorService.translate('deleteSuccess')); + this.closeDialog(); + this.getData(); + this.selectedUser = new UserDto(); + }, err => { + console.log(err); + + }) + } +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/user/dashboard-routing.module.ts b/src/app/_modules/user/dashboard-routing.module.ts new file mode 100644 index 0000000..c32860e --- /dev/null +++ b/src/app/_modules/user/dashboard-routing.module.ts @@ -0,0 +1,39 @@ +import { NgModule } from '@angular/core'; + +import { DashboardComponent } from './dashboard.component'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { RouterModule, Routes } from '@angular/router'; +import { DocumentUploadComponent } from './document-upload/document-upload.component'; + +const routes: Routes = [ + { + path: '', component: LayoutComponentComponent, children: [ + { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, + { path: 'dashboard', component: DashboardComponent }, + {path:'tender-view/:id', component:HomeViewComponent}, + {path:'tender-view/:id/:pay', component:HomeViewComponent}, + { path :'payment-details/:id' , component:PaymentDetailsComponent}, + {path:'tender-upload/:id/:screen',component:HomeUploadComponent}, + {path:'tender-upload/:id',component:HomeUploadComponent}, + { path: 'qr-payment/:id/:screen', component: QrPaymentComponent}, + { path: 'qr-payment/:id', component: QrPaymentComponent}, + {path:'document-upload/:id/:order', component:DocumentUploadComponent}, + + + // { path: 'master', loadChildren: () => import('../master/master.module').then(m => m.MasterModule) }, + // { path: 'report', loadChildren: () => import('../report/report.module').then(m => m.ReportModule) }, + // { path: 'support', loadChildren: () => import('../support/support.module').then(m => m.SupportModule) }, + // { path: 'transaction', loadChildren: () => import('../transaction/transaction.module').then(m => m.TransactionModule) } + ] + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class DashboardRoutingModule { } diff --git a/src/app/_modules/user/dashboard.component.html b/src/app/_modules/user/dashboard.component.html new file mode 100644 index 0000000..cfef8c8 --- /dev/null +++ b/src/app/_modules/user/dashboard.component.html @@ -0,0 +1,403 @@ +
+ + + +
+ + +
+
+ + + + +
+ +
+
+ + +
+ + +
+
+
+ +
+
+ search +
+
+ + + + +
+
+ +
+ + +
+
+ +
+
+
+ + + + + + + + + + + + + + {{ 'slno' | translate }} + + + {{i+1}} + + + + + + {{ 'title' | translate }} + + + {{element?.title}} + + + + + + {{ 'publishedDate' | translate }} + + + {{element?.publishDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'bidOpenDate' | translate }} + + + {{element?.bidOpenDate| date:"YYYY-MM-dd"}} + + + + + + {{ 'status' | translate }} + + +    {{element?.hide}}    +    {{element?.hide}}    +    {{element?.hide}}    +    {{'Canceled'}}    + + + + + + + + + + + {{ 'payments' | translate }} + + + + + + + + + + + {{ 'view' | translate }} + + + + + + + + + + + + {{ 'report' | translate }} + + + + + + + + + + + + + + + + + + + + + + + {{ 'upload' | translate }} + + + + + + + + + + + + {{ 'Paymentstatus' | translate }} + + +
+ + + + {{ + element.countStatusP }} +
+
+ + + + +
+ + +
+ + + + + {{ 'loadingData' | translate }} + + + + + + {{ 'noDataToDisplay' | translate }} + + + + + + + + +
+ + + +
+
+
+
+
+
+
+
+ + +
+ + + + +
Edit Category
+ + + + +
+
+ +
+
+ +
+
+ + + {{category.tenderCategory}} + + + + +
+
+
+
+ + +
+ +
+
+ +
+ +
+
+ + + +
+
+ + {{subCategory.tenderSubCategory}} + +
+ +
+
+
+ + +
+
+
+
+ + +
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+ \ No newline at end of file diff --git a/src/app/_modules/user/dashboard.component.scss b/src/app/_modules/user/dashboard.component.scss new file mode 100644 index 0000000..840f00b --- /dev/null +++ b/src/app/_modules/user/dashboard.component.scss @@ -0,0 +1,674 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + +.container-responsive{ + background-size: cover; + background-color: whitesmoke; + // background-image: url('/assets/img/houstone_line1.jpg'); +} + +.nav-link:hover { + color: red; +} + + +th, +td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + +} + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + + +.table td { + word-break: break-word; +} + +.table-break-word { + word-break: break-word; +} + + + +.top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + // border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; +} + +.header { + padding: 20px; + width: 100%; + min-width: 350px; +} + +.header>h6>a { + text-decoration: none; + color: #262627; +} + +.header>h6>a:hover { + text-decoration: underline; + cursor: pointer; +} + +.main-card{ + min-width: 350px; + // box-shadow: 0 2px 1px -1px #DBDBFF, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + box-shadow: 0 2px 1px -1px #8d8d8d, 0 1px 1px #D0D3FF, 0 1px 3px #DDE3FF; + border: 1px solid #E7E4FF; + border-radius: 12px; + padding: 36px; + margin-top: 65px; +} + +.top-left-float { + display: flex; + min-width: 282px; +} + +.top-right-float { + display: flex; + min-width: 161px; +} + +.top-left-float>button, +.top-right-float>button { + margin: 5px; + height: 40px; + margin-left: -74px; + margin-top: 7px; +} + +mat-table { + table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + .table-headers { + padding: 5px; + color: #000000; + font-weight: 900; + font-size: medium; + background-color: #a6a6a6; + font-family:nucleo; + // border: 2px solid #ff8529; + border-left: none; + border-right: none; + + } + + .table-headers:hover { + background-color: #a6a6a6; + color:#ffffff; + } + .swal2-content { + font-family:nucleo; + font-weight: 900; +} + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family:nucleo; + + } + + .table-column { + width: 100%; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + +:host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + +} + +// .dialog-body { +// display: flex; +// justify-content: center; +// align-items: center; + +// div { +// width: 90%; +// } +// } + +.dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } +} + +.hide { + display: none; +} + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 1px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + +} + + + + +.img-fluid { + margin-right: 5px; + max-height: 40px; +} + +// .navbar { +// background-position: center; +// } + + +@media screen and (max-width: 767px) { + .card { + min-width: 900px; + } + + .top-bar { + flex-direction: column; + align-items: center; + } + + .top-left-float, + .top-right-float { + min-width: 100%; + } +} + + +.mat-row:nth-child(even){ + background-color: rgb(255, 255, 255); +} + +.mat-row:nth-child(odd){ + background-color: rgb(248, 248, 248); +} +.viewButton{ + padding: 0; + border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.reportButton{ + padding: 0; + // border-radius: 16px !important; + height: 32px !important; + // width: 68px !important; + + float: center; + // margin-top: 5px; + // margin-bottom: 5px; + color: #424242; + // background-color: white; + // height: 37px; + // border-radius: 9px; + font-family: nucleo; + width: 8%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} +.editButton { + + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + // transform: translateY(5px); + +} + +.editButton:hover { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.1); + /* You can adjust the shadow values to your preference */ +} + +.addButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.addButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.activeSpan{ + background-color: #98eb98; + border-radius: 10px; + font-size: small; + color: #014d01; + display: block; + width: 63px; +} + +.awaitSpan{ + background-color: #b3c5ff; + border-radius: 10px; + font-size: small; + color: #213a8b; + display: block; + width: 63px; +} + +.closedSpan{ + background-color: #e3c096; + border-radius: 10px; + font-size: small; + color: #4d2a00; + display: block; + width: 63px; +} + +.canceledSpan{ + background-color: #e39696; + border-radius: 10px; + font-size: small; + color: #4d1200; + display: block; + width: 80px; +} +.searchInputSpan{ + background-color: #ececec; + border-radius: 45px; + width: 38vh; + height: 47px; + +} +.home{ + font-family: texg; + font-weight: 800; + color:#4c4c4c; +} + +.circle-span { + cursor: pointer; + display: inline-block; + width: 20px; + height: 20px; + background-color: white; + border-radius: 50%; + text-align: center; + line-height: 20px; + border: 1px solid rgb(202, 202, 202); + font-size: x-small;/* Optional: add a border to the circle */ + transform: translate(-8px, -6px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + + +.editCategoryBtn{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + border: 1px solid orangered; + width:121px; + font-size:smaller; + +} + +.editCategoryBtn:hover{ + padding: 0; + border-radius: 5px !important; + height: 35px !important; + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #ffffff; + background-color: orangered; + border: 1px solid orangered; + width:121px; + font-size:smaller; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.notificationButton{ + padding: 0; + border-radius: 16px !important; + height: 35px !important; + // width: 68px !important; + + float: center; + margin-top: 5px; + margin-bottom: 5px; + margin-right: 15px; + color: #424242; + background-color: white; + // height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 11%; + // box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + // margin-right: 5px; +} + +.notificationButton:hover{ + + background-color: #ebeaea ; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +@media screen and (max-width: 767px) { + .addButton{ + width: 100px; + + } + .notificationButton{ + width: 100px; + } +} + + + +// ------------------------------------------------ +// .popup-card { +// position: fixed; +// background-color: #ffffff; +// top: 50%; +// left: 50%; +// transform: translate(-50%, -50%); +// width: 450px; +// height: 330px; +// z-index: 1000; +// } + + + +// .popup-container { +// padding: 20px; /* Add padding for better spacing */ +// display: flex; +// flex-direction: column; +// justify-content: center; +// height: 100%; +// } + + +// .mainCard{ +// box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); +// border-radius: 10px; + +// } + + +// .resetSpan{ +// font-family: texg; +// color: #1e3d3b; +// font-size: xx-large; +// float: center; +// margin-top: 15px; +// // margin-left: 64px; +// } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; +// } + + +// @media screen and (max-width: 600px) { +// .popup-card { +// width: 450px; /* Adjust card width for smaller screens */ +// } +// } + +// .mat-card-actions { +// display: flex; +// justify-content: flex-end; +// padding: 16px; /* Add padding for spacing */ +// } + +// .popUpButtons{ +// padding: 5px; +// color: #353535; +// font-weight: 900; +// font-size: medium; +// // background-color: #ececec; +// font-family:nucleo; +// } + +// .popUpButtons:hover{ + +// background-color: #ebeaea ; +// color:#46AC9E; +// box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); +// // transform: translateY(5px); + +// } + +// .custom-spinner-content { +// font-size: 24px; +// color:#46AC9E; +// margin: 0; +// padding: 0; +// } + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:#46AC9E; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:#46AC9E; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.background-color-blue { + background-color: #ff7f16; +} + +.background-color-white { + background-color: white; +} + +.color-white { + color: white; +} + +.color-black { + color: black; +} diff --git a/src/app/_modules/user/dashboard.component.ts b/src/app/_modules/user/dashboard.component.ts new file mode 100644 index 0000000..1a083de --- /dev/null +++ b/src/app/_modules/user/dashboard.component.ts @@ -0,0 +1,716 @@ +import { Component, OnInit, EventEmitter, Input, Output, ViewChild } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { EmailService } from 'src/app/pages/auth/services'; +import { Observable, of } from 'rxjs'; +import { Email, User } from 'src/app/pages/auth/models'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { routes } from 'src/app/consts'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { DatePipe } from '@angular/common'; +import { MatDialog } from '@angular/material/dialog'; +import { CommonDto } from 'src/app/_dto/common.dto'; +import { error, log } from 'console'; +import Swal from 'sweetalert2'; +import { UntypedFormBuilder, UntypedFormControl, UntypedFormGroup } from '@angular/forms'; +import { TenderCategoryDto } from 'src/app/_dto/category.dto'; +import { MatOption } from '@angular/material/core'; +import { tenderSubcategoryMasterDto } from 'src/app/_dto/tenderSubcategoryMaster.dto'; +import { setTime } from 'ngx-bootstrap/chronos/utils/date-setters'; + +@Component({ + selector: 'app-dashboard', + templateUrl: './dashboard.component.html', + styleUrls: ['./dashboard.component.scss'] +}) +export class DashboardComponent implements OnInit { + + @Input() isMenuOpened: boolean; + + @Output() isShowSidebar = new EventEmitter(); + + public user$: Observable + + public emails$: Observable + + public routers: typeof routes = routes; + + schoolLogoPath: string; + + tenderData: any[] = []; + + seculevel: string = '' + + dataSource: MatTableDataSource; + + displayedColumns: any; + + dataCopy: any; + + pageLength: any; + + searchTerm: any; + + newDate = new Date(); + + enableDownload: boolean = true + + amountPaid: boolean = false; + + @ViewChild('paginator') paginator: MatPaginator; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + noData: boolean; + + userId: string; + + tenderId: number; + + countStatusP: any; + + dialogRef: any; + + commonData: CommonDto + + categoryConfigurationForm: UntypedFormGroup; + + categoryList: TenderCategoryDto[]; + + subCategoryList: tenderSubcategoryMasterDto[]; + + @ViewChild('allSelection') private allSelection: MatOption; + userCategoryList: any; + selected: boolean; + selectedCategory: any[]; + selectedCategoryId: any; + selectedCategoryIndex: any; + subCatLength: any; + spinnerLoading:boolean = false; + + + constructor( + private _menuService: MenuService, + private router: Router, + private _ui: UiService, + private emailService: EmailService, + private authenticationService: AuthService, + private _masterService: MasterService, + private errorService: ErrorTranslateService, + private datePipe: DatePipe, + private route: ActivatedRoute, + private dialog: MatDialog, + private _fb: UntypedFormBuilder + ) { + // this.user$ = this.getUser(); + this.seculevel = localStorage.getItem('seculevel') + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + + // this.emails$ = this.emailService.loadEmails(); + // this.getSchoolLogo(); + if (this.seculevel == 'B') { + this.displayedColumns = ['actions', 'title', 'publishedDate', 'bidOpenDate', 'status', 'Paymentstatus', 'view', 'report']; + } + else { + this.displayedColumns = ['slno', 'title', 'publishedDate', 'bidOpenDate', 'view', 'upload']; + } + } + + + // displayedColumns: string[] = ['no', 'name','download']; + + + loading: boolean = true; + menuData: any; + model: any; + + + async ngOnInit() { + + + this.enableDownload = true; + this.categoryConfigurationForm = this._fb.group({ + selection: new UntypedFormControl(''), + count: new UntypedFormControl(''), + }); + this.commonData = new CommonDto() + this.getData(); + this.paymentCheck(); + this.categoryList = [] + + } + + + + getData() { + let newDate = new Date(); + + // let currentDate = this.datePipe.transform(newDate, 'yyyy-MM-ddTHH:mm:ss') + // if(this.seculevel != 'B') + // this._masterService.getMasterData(apiUrl.getTender + '?order[id]=DESC').then((res) =>{ + // this.tenderData = res; + + + + // for(let element of res){ + + // if(element.id == '56'){ + // element.hide56 = 'true' + // }else + // element.hide56= 'false' + + // const bidSubStartDate: Date = new Date(element.bidSubStartDate); + // const bidSubEndDate: Date = new Date(element.bidSubEndDate); + + // if(newDate >= bidSubStartDate && newDate <= bidSubEndDate){ + + // element.hide = 'Active' + // } + // else + // element.hide = 'Closed' + + // } + // this.dataCopy = res; + // this.pageLength = this.tenderData.length; + // this.dataSource = new MatTableDataSource(this.tenderData); + // this.dataSource.sort = this.sort; + // this.dataSource.paginator = this.paginator; + // this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + // this.loading = false; + // },err=>{ + // console.error(err) + // }) + // else + this.tenderData = [] + this._masterService.getMasterData(apiUrl.userTender + '?order[id]=DESC').then((res) => { + // for (let i =0;i { + // element.countStatusP = result.countStatusP; + + // }) + + const publishDate: Date = new Date(element.publishDate); + const bidSubStartDate: Date = new Date(element.bidSubStartDate) + const bidSubEndDate: Date = new Date(element.bidSubEndDate); + let bidOpenDate: Date = new Date(element.bidOpenDate); + + bidOpenDate.setMinutes(bidOpenDate.getMinutes() - 5); + if (newDate >= bidOpenDate) { + element.reportHide = 'false' + } + if (newDate > publishDate) { + element.HideEdit = true + } else { + element.HideEdit = false + } + + if (newDate >= bidSubStartDate && newDate <= bidSubEndDate) { + + + element.hide = 'Active' + } + else if (newDate < publishDate) { + element.hide = 'Await' + } + else + element.hide = 'Closed' + + } + this.dataCopy = res; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.dataSource.sort = this.sort; + this.dataSource.paginator = this.paginator; + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.loading = false; + + }, err => { + console.error(err) + }) + + + + } + getCategoryData() { + + + this._masterService.getMasterData(apiUrl.category).then(res => { + this.categoryList = res; + if (res && res.length > 0) { + this.selectedCategoryId = res[0].id + this.selectedCategoryIndex = 0; + this.categoryList[0].selected = true + } + // this.categoryList.forEach(element => { + // let body = { + // all: false, + // tenderSubCategory: `All ${element.tenderCategory} Category`, + // name: 'all', + // selected:false + // } + // element.tenderSubCategory.unshift(body) + + + // }); + + + + }) + // this.getSubcategory(this.selectedCategoryId,this.selectedCategoryIndex) + } + + getSubcategory(id, i) { + this.selectedCategoryId = id + this.selectedCategoryIndex = i + this.categoryList[i].selected = true + + //whether all sub categories are selected or not + // let temp = 0; + // this.categoryList[i].tenderSubCategory.forEach(element => { + // if (element.selected && element.name != 'all') { + // temp =temp + 1 ; + // } + // }); + + // if(temp == (this.categoryList[i].tenderSubCategory.length -1) ){ + // this.categoryList[i].tenderSubCategory[0].selected =true; + // } + // else{ + // this.categoryList[i].tenderSubCategory[0].selected =false; + + // } + + } + + + + categoryChecked(event, subcategory, i) { + + if (subcategory.name && subcategory.name == 'all') { + if (subcategory.selected) { + for (let subCat of this.categoryList[i].tenderSubCategory) { + subCat.selected = true; + } + } + else { + for (let subCat of this.categoryList[i].tenderSubCategory) { + subCat.selected = false; + } + } + + + } + else { + + let temp = 0; + + this.categoryList[i].tenderSubCategory.forEach(subCat => { + + if (subCat.selected && subCat.name != 'all') { + temp =temp + 1 ; + + } + }) + + // if(temp == (this.categoryList[i].tenderSubCategory.length -1) ){ + // this.categoryList[i].tenderSubCategory[0].selected =true; + + + // } + // else{ + // this.categoryList[i].tenderSubCategory[0].selected =false; + + // } + + } + } + + + + getUserCategories() { + this._masterService.getMasterData(apiUrl.userCategory).then(res => { + this.userCategoryList = res; + let temp =0 + + this.userCategoryList.forEach(element => { + + this.categoryList.forEach(cat => { + + for (let subCat of cat.tenderSubCategory) { + + if (element.subCategory == subCat.id) { + subCat.selected = true; + // temp =temp+1; + temp++ + } + } + + + + if(temp == ( cat.tenderSubCategory.length - 1 ) && cat.tenderSubCategory[0].name =='all'){ + + cat.tenderSubCategory[0].selected = true; + } + else{ + // cat.tenderSubCategory[0].selected = false; + + } + }); + }); + + + }) + + + } + + getMarqueeData() { + this.commonData.marquee = ''; + this._masterService.getMasterData(apiUrl.common).then(res => { + + + if (res && res.length > 0 && res[0].marquee && res[0].marquee != '') { + this.commonData.marquee = res[0].marquee; + this.commonData.id = res[0].id + } + + }) + } + + convertDateFormat(dateString: string): string { + const date = new Date(dateString); + return this.datePipe.transform(date, 'yyyy-MM-ddTHH:mm'); + } + + addNewTender() { + this.navigateTo('/admin/add-tenders') + } + + openNotificationDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '800px', + disableClose: false, + maxHeight:'80vh' + }); + this.categoryList=[] + this.getMarqueeData(); + this.getCategoryData(); + this.getUserCategories() + + setTimeout(() => { + this.getUserCategories() + + }, 500); + } + + closeDialog() { + this.dialogRef.close(); + } + + saveCategory() { + this.spinnerLoading = true; + let tempArray = [] + this.categoryList.forEach(cat => { + + for (let subCat of cat.tenderSubCategory) { + if (subCat.selected && subCat.name != 'all') { + let body = { Category: null, subCategory: null } + body.Category = cat.id; + body.subCategory = subCat.id + tempArray.push(body) + } + } + }); + + this._masterService.saveMasterData(apiUrl.categoryEdit, tempArray).then(res => { + this._ui.toastMessage(this.errorService.translate('updateSuccess')); + this.spinnerLoading = false; + this.closeDialog(); + this.getData(); + + + + }) + + } + sortData(sort: Sort) { + const data = this.tenderData.slice(); + if (!sort.active || sort.direction === '') { + this.dataSource.data = data; + + return; + } + + this.dataSource.data = data.sort((a, b) => { + const isAsc = sort.direction === 'asc'; + switch (sort.active) { + case 'title': + return compare(a.title, b.title, isAsc); + case 'publishedDate': + return compare(a.publishDate, b.publishDate, isAsc); + case 'bidOpenDate': + return compare(a.bidOpenDate, b.bidOpenDate, isAsc); + case 'status': + return compare(a.hide, b.hide, isAsc); + default: + return 0; + } + }); + } + + search() { + this.tenderData = this.dataCopy; + this.loading = true; + if (!this.searchTerm || this.searchTerm == null || this.searchTerm == undefined || this.searchTerm == "") { + this._ui.toastMessage(this.errorService.translate('enterSearchTerm'), 3000); + this.getData(); + return; + } + this.tenderData = this.tenderData.filter(res => { + let includedInTitle = (res.title) ? res.title.toLowerCase().includes(this.searchTerm.toLowerCase()) : false; + let includedInPublishDate = (res.publishDate) ? res.publishDate.includes(this.searchTerm.toLowerCase()) : false; + + let includedInbidOpenDate = (res.bidOpenDate) ? res.bidOpenDate.includes(this.searchTerm.toLowerCase()) : false; + + if (includedInTitle) + return true; + if (includedInPublishDate) + return true; + if (includedInbidOpenDate) + return true; + else + return false; + }); + this.noData = (this.tenderData && this.tenderData.length == 0) ? true : false; + this.pageLength = this.tenderData.length; + this.dataSource = new MatTableDataSource(this.tenderData); + this.loading = false; + } + + reset() { + this.searchTerm = ""; + + this.getData(); + } + + + goToPayment(id) { + this.navigateTo(`/qr-payment/${id}`) + } + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + paymentCheck() { + + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + if (res.length > 0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + signIn() { + this.router.navigate(['/login']); + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView(tenderId) { + + this.router.navigate(['/tender-view', tenderId]); + } + + goToPaymentDetails(tenderId) { + this.router.navigate(['/payment-details', tenderId]) + } + + goToAddTenders() { + this.router.navigate(['admin/add-tenders']); + } + + goToUpload(tenderId, tender) { + + + if (tender.paymentModeD.paymentMode && tender.paymentModeD.paymentMode != 'Offline') { + + this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck, `${this.userId}/${tenderId}`).then((res) => { + + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, tenderId).then(res => { + if (res && res[0].status && res[0].status == 'S') { + + if (!tender.emdFeeApplied) { //If emdfeeapplicable is false, there is no requirement to pay the emd fee. + + + this.router.navigate([`/tender-upload/${tenderId}`]) + + + } else { + + let screen = 'E' + this.router.navigate([`qr-payment/${tenderId}/${screen}`]) + } + + + } + else { + this._ui.toastMessage('You must to Pay Tender Fee Amount First'); + let screen = 'T' + this.router.navigate([`tender-view/${tenderId}`]) + } + + }, err => { + this._ui.toastMessage('You must to Pay Tender Fee Amount First'); + let screen = 'T' + this.router.navigate([`tender-view/${tenderId}`]) + + }) + + + + + } + }).catch((error) => { + console.error("Error fetching upload data:", error); + }); + } + else { + + //if payment mode is offline + + this._masterService.getMasterDatabyId(apiUrl.UserUploadCheck, `${this.userId}/${tenderId}`).then((res) => { + + if (res && res.length > 0) { + this._ui.toastMessage(this.errorService.translate('DocumentsAlreadyUploaded'), 3000); + + } else { + + // this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, tenderId).then(res => { + // if (res && res[0].status && res[0].status == 'S') { + + if (!tender.emdFeeApplied) { //If emdfeeapplicable is false, there is no requirement to pay the emd fee. + + + this.router.navigate([`/tender-upload/${tenderId}`]) + + + } else{ + + let screen = 'E' + this.router.navigate([`qr-payment/${tenderId}/${screen}`]) + } + + + // }else{ + // this._ui.toastMessage('You must to Pay Tender Fee Amount First'); + // let screen = 'T' + // this.router.navigate([`tender-view/${tenderId}`]) + // } + + // },err=>{ + // this._ui.toastMessage('You must to Pay Tender Fee Amount First'); + // let screen = 'T' + // this.router.navigate([`tender-view/${tenderId}`]) + // }) + } + + }).catch((error) => { + console.error("Error fetching upload data:", error); + }); + } + + } + goToEdit(tenderId) { + this.router.navigate(['/add-tenders', tenderId]); + } + Cancel() { + + } + + + + + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + goToReport(id) { + this.navigateTo(`bid-final-report/${id}`) + + + } + + + + + // tosslePerOne(field) { + + // if (field == "select") { + // if (this.allSelection.selected) { + // this.allSelection.deselect(); + // return false; + // } + // if (this.categoryConfigurationForm.controls.selection.value.length == this.categoryList.length) { + // this.allSelection.select(); + // } + + // } + + // } + + // toggleAllSelection(field) { + // if (field == "select") { + // if (this.allSelection.selected) { + // this.categoryConfigurationForm.controls.selection + // .patchValue([...this.categoryList.map(item => item.id), 0]); + + // } else { + // this.categoryConfigurationForm.controls.selection.patchValue([]); + // } + // } + + + // } + +} +function compare(a: any, b: any, isAsc: boolean): number { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} diff --git a/src/app/_modules/user/dashboard.module.ts b/src/app/_modules/user/dashboard.module.ts new file mode 100644 index 0000000..9dd3193 --- /dev/null +++ b/src/app/_modules/user/dashboard.module.ts @@ -0,0 +1,93 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; + +import { DashboardRoutingModule } from './dashboard-routing.module'; +import { LayoutComponentComponent } from './layout-component/layout-component.component'; +import { DashboardComponent } from './dashboard.component'; +import { SharedModule } from 'src/app/shared/shared.module'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatTableModule } from '@angular/material/table'; +import { MatInputModule } from '@angular/material/input'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { FormsModule } from '@angular/forms'; +import { MatSortModule } from '@angular/material/sort'; +import { TranslateModule } from '@ngx-translate/core'; +import { HomeViewComponent } from './home-view/home-view.component'; +import { HomeUploadComponent } from './home-upload/home-upload.component'; +import { ReactiveFormsModule } from '@angular/forms'; +import { TenderHomeComponent } from './tender-home/tender-home.component'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatNativeDateModule } from '@angular/material/core'; +import { MatSelectModule } from '@angular/material/select'; +import { MatMomentDateModule } from '@angular/material-moment-adapter'; +import {MatTooltipModule} from '@angular/material/tooltip'; +// import { NgxMatTimepickerModule } from 'ngx-mat-timepicker'; +import { LOCALE_ID } from '@angular/core'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { DialogComponent } from './dialog/dialog.component'; +import { QrPaymentComponent } from './qr-payment/qr-payment.component'; +import { PaymentDetailsComponent } from './payment-details/payment-details.component'; +import { MatFormField, MatFormFieldModule } from '@angular/material/form-field'; +import { DocumentUploadComponent } from './document-upload/document-upload.component'; +import { MatProgressSpinnerModule, MatSpinner } from '@angular/material/progress-spinner'; + +// import { MatTimepickerModule } from 'mat-timepicker'; +// import { MatTimepickerModule } from '@angular/material/timepicker'; +// import { MatSelectModule } from '@angular/material'; +const lang = 'en-US'; + +@NgModule({ + declarations: [ + LayoutComponentComponent, + DashboardComponent, + HomeViewComponent, + HomeUploadComponent, + TenderHomeComponent, + DialogComponent, + QrPaymentComponent, + PaymentDetailsComponent, + DocumentUploadComponent + + ], + imports: [ + CommonModule, + DashboardRoutingModule, + SharedModule, + MatProgressBarModule, + MatCardModule, + MatIconModule, + MatTableModule, + MatInputModule, + MatButtonModule, + MatPaginatorModule, + MatSlideToggleModule, + FormsModule, + MatSortModule, + TranslateModule, + ReactiveFormsModule, + MatTabsModule, + MatSelectModule, + MatNativeDateModule, + MatDatepickerModule, + MatMomentDateModule, + MatTooltipModule, + MatDialogModule, + MatCheckboxModule, + MatFormFieldModule, + MatProgressSpinnerModule + + // NgxMatTimepickerModule.setLocale(lang), + // NgxMaterialTimepickerModule + // MatTimepickerModule + + + ], + providers: [{ provide: LOCALE_ID, useValue: lang }] +}) +export class DashboardModule { } diff --git a/src/app/_modules/user/dialog/dialog.component.html b/src/app/_modules/user/dialog/dialog.component.html new file mode 100644 index 0000000..80a1821 --- /dev/null +++ b/src/app/_modules/user/dialog/dialog.component.html @@ -0,0 +1 @@ +

dialog works!

diff --git a/src/app/_modules/user/dialog/dialog.component.scss b/src/app/_modules/user/dialog/dialog.component.scss new file mode 100644 index 0000000..6879e9c --- /dev/null +++ b/src/app/_modules/user/dialog/dialog.component.scss @@ -0,0 +1,40 @@ +/* Custom styles for the dialog component */ + +h2.mat-dialog-title { + font-family: 'Arial', sans-serif; /* Change the font family for the title */ + font-size: 24px; /* Increase the font size */ + font-weight: bold; /* Make the title bold */ + } + + mat-dialog-content { + font-family: 'Arial', sans-serif; /* Change the font family for the content */ + font-size: 16px; /* Adjust the font size */ + } + + ul { + list-style-type: disc; /* Use disc bullets for the list items */ + padding-left: 20px; /* Add some padding to the left for better alignment */ + } + + mat-dialog-actions { + justify-content: flex-end; /* Align the buttons to the right */ + } + +// button.mat-dialog-button.mat-primary { +// background-color: #4CAF50; /* Change the background color of the Accept button */ +// color: #ffffff; /* Change the text color of the Accept button */ +// } + + + div.checkbox-container { + display: flex; + align-items: center; /* Center align the contents vertically */ + } + + .view-terms-link { + cursor: pointer; + font-size: 14px; + color: #007bff; /* Change the color of the link (you can choose a different color if needed) */ + text-decoration: underline; + margin-left: 10px; /* Add some space between the checkbox and the link */ + } \ No newline at end of file diff --git a/src/app/_modules/user/dialog/dialog.component.spec.ts b/src/app/_modules/user/dialog/dialog.component.spec.ts new file mode 100644 index 0000000..a32e0ea --- /dev/null +++ b/src/app/_modules/user/dialog/dialog.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DialogComponent } from './dialog.component'; + +describe('DialogComponent', () => { + let component: DialogComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DialogComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(DialogComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/dialog/dialog.component.ts b/src/app/_modules/user/dialog/dialog.component.ts new file mode 100644 index 0000000..44de131 --- /dev/null +++ b/src/app/_modules/user/dialog/dialog.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit,Inject } from '@angular/core'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; + +@Component({ + selector: 'app-dialog-component', + template: ` +

Declaration:

+ +
    +
  • {{ detail }}
  • +
+
+ + + Close + + + + + `, + styleUrls: ['./dialog.component.scss'] +}) +export class DialogComponent implements OnInit { + + details: string[]; + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: { details: string[] } + ) { + this.details = data.details; + } + + onAccept() { + // You can perform any actions needed when the user accepts the terms and conditions here. + this.dialogRef.close('accepted'); + } + + onClose() { + // You can perform any actions needed when the user closes the dialog without accepting the terms and conditions here. + this.dialogRef.close('closed'); + } + ngOnInit(): void { + + } +} diff --git a/src/app/_modules/user/document-upload/document-upload.component.css b/src/app/_modules/user/document-upload/document-upload.component.css new file mode 100644 index 0000000..993f86d --- /dev/null +++ b/src/app/_modules/user/document-upload/document-upload.component.css @@ -0,0 +1,27 @@ +#customers { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; + } + + #customers td, #customers th { + border: 1px solid #ddd; + padding: 8px; + } + + #customers tr:nth-child(even){background-color: #f2f2f2;} + + #customers tr:hover {background-color: #ddd;} + + #customers th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #5FACA1; + color: white; + } + + + .container-responsive{ + background-color: whitesmoke; + } \ No newline at end of file diff --git a/src/app/_modules/user/document-upload/document-upload.component.html b/src/app/_modules/user/document-upload/document-upload.component.html new file mode 100644 index 0000000..bae8dc2 --- /dev/null +++ b/src/app/_modules/user/document-upload/document-upload.component.html @@ -0,0 +1,103 @@ +
+
+ +
+
+
+ +
+

Upload Document

+ +

+ + + + + + + + + + + + + + + + + + +
DescriptionDocument
Boq Documents +
+ +
+ + + + {{boqFile?.fileName}} + + {{ 'assetImagePath' | translate }} + + + + + + + + + + + +
+
+
+

+
+
+ +
+ +
+
+ +
+
+ + +
+
+
+
+
+ \ No newline at end of file diff --git a/src/app/_modules/user/document-upload/document-upload.component.spec.ts b/src/app/_modules/user/document-upload/document-upload.component.spec.ts new file mode 100644 index 0000000..e191614 --- /dev/null +++ b/src/app/_modules/user/document-upload/document-upload.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DocumentUploadComponent } from './document-upload.component'; + +describe('DocumentUploadComponent', () => { + let component: DocumentUploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DocumentUploadComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DocumentUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/document-upload/document-upload.component.ts b/src/app/_modules/user/document-upload/document-upload.component.ts new file mode 100644 index 0000000..32b8a94 --- /dev/null +++ b/src/app/_modules/user/document-upload/document-upload.component.ts @@ -0,0 +1,93 @@ +import { Component ,OnInit } from '@angular/core'; +import { ActivatedRoute, Route, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-document-upload', + templateUrl: './document-upload.component.html', + styleUrls: ['./document-upload.component.css'] +}) +export class DocumentUploadComponent implements OnInit { + + boqFile ={fileName:"",filePath:""} + revisedDocumentData={tenderId : null , revisedDocument : '',requotedOrder : ''} + docSize: any; + tenderId: number; + order: any; + + constructor(private _masterService:MasterService, + private route:ActivatedRoute, + private router:Router, + private _ui:UiService){ + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.order = +this.route.snapshot.paramMap.get('order'); + + } + ngOnInit(): void { + + + } + + + removeBoqfile(){ + this._masterService.deleteMasterData(apiUrl.quotedTender,this.boqFile.fileName).then(res=>{ + this.boqFile.fileName = null + this.boqFile.filePath = null + }) + } + + uploadBoqFiles(event){ + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const fd = new FormData(); + + fd.append('file', file ); + + this._masterService.saveMasterData(apiUrl.quotedTender,fd).then(res=>{ + this.boqFile.fileName = res.fileName; + this.boqFile.filePath = res.filePath; + this.docSize = res.fileSizeKB; + + }) + + + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + close(){ +this.navigateTo('dashboard') + } + + saveBoqFile(){ + + + this.revisedDocumentData.revisedDocument=this.boqFile.fileName; + this.revisedDocumentData.tenderId=this.tenderId + this.revisedDocumentData.requotedOrder = this.order; + + if(!this.revisedDocumentData || this.revisedDocumentData.revisedDocument=='' || this.revisedDocumentData.revisedDocument==null ){ + this._ui.toastMessage('Please select any documents ') + return true; + } + + this._masterService.saveMasterData(apiUrl.revisedFileUpload,this.revisedDocumentData).then(res=>{ + + this._ui.toastMessage('Document uploaded successfully ') + this.navigateTo('dashboard') + + + },err=>{ + this._ui.toastMessage(err.error.message) + }) + } +} + + diff --git a/src/app/_modules/user/home-upload/home-upload.component.html b/src/app/_modules/user/home-upload/home-upload.component.html new file mode 100644 index 0000000..4ff01a4 --- /dev/null +++ b/src/app/_modules/user/home-upload/home-upload.component.html @@ -0,0 +1,223 @@ +
+ + + + + + +
+
+

Upload Files

+

+ +
+ +
+
+
+
+
+ + + + + Bid Final Amount + + + + + +
+ + + + + + + + + + + + + + + + + +
DescriptionDocument
{{cover?.Description}} +
({{cover?.fileFormatD?.fileFormat}} format) +
+
+ +
+ + + + {{tenderData?.covers[i].file}} + + {{ 'assetImagePath' | translate }} + + + + + + + + + + +
+
+
+
+

+ + + + + +
+ + + + I agree to the Terms and Conditions + +
+ + + + + + + + +
+ + +
+
+
+
+ +
+ + + + + + +

+ +
+ \ No newline at end of file diff --git a/src/app/_modules/user/home-upload/home-upload.component.scss b/src/app/_modules/user/home-upload/home-upload.component.scss new file mode 100644 index 0000000..f2dd57c --- /dev/null +++ b/src/app/_modules/user/home-upload/home-upload.component.scss @@ -0,0 +1,74 @@ +#customers { + font-family: Arial, Helvetica, sans-serif; + border-collapse: collapse; + width: 100%; +} + +#customers td, #customers th { + border: 1px solid #ddd; + padding: 8px; +} + +#customers tr:nth-child(even){background-color: #f2f2f2;} + +#customers tr:hover {background-color: #ddd;} + +#customers th { + padding-top: 12px; + padding-bottom: 12px; + text-align: left; + background-color: #ff722df2; + color: white; +} +.nav-link:hover { + color: rgb(255, 0, 0); + } +.resp{ + min-height: 260px; +} + @media (max-width: 767px) { + .resp{ + min-height: 460px; + } + + #customers td, #customers th { + padding-right: 2px; + } +} + +.checkbox-container { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.checkbox-text { + flex: 1; + font-family: 'Arial', sans-serif; + font-size: 16px; +} +::ng-deep .mat-checkbox-ripple .mat-ripple-element { + background-color: #5FACA1 !important; + +} + +::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + +::ng-deep .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background { + background-color: #5FACA1 !important; +} + + +input[type=number]::-webkit-inner-spin-button, +input[type=number]::-webkit-outer-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/user/home-upload/home-upload.component.spec.ts b/src/app/_modules/user/home-upload/home-upload.component.spec.ts new file mode 100644 index 0000000..e09a39b --- /dev/null +++ b/src/app/_modules/user/home-upload/home-upload.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeUploadComponent } from './home-upload.component'; + +describe('HomeUploadComponent', () => { + let component: HomeUploadComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeUploadComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeUploadComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/home-upload/home-upload.component.ts b/src/app/_modules/user/home-upload/home-upload.component.ts new file mode 100644 index 0000000..a2f285b --- /dev/null +++ b/src/app/_modules/user/home-upload/home-upload.component.ts @@ -0,0 +1,477 @@ +import { Component, OnInit,ViewChild,ElementRef,AfterViewInit, } from '@angular/core'; +import { UntypedFormGroup } from '@angular/forms'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { log } from 'console'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import Swal from 'sweetalert2' +import { DialogComponent } from '../dialog/dialog.component'; +import { DatePipe } from '@angular/common'; +import { ThisReceiver } from '@angular/compiler'; +@Component({ + selector: 'app-home-upload', + templateUrl: './home-upload.component.html', + styleUrls: ['./home-upload.component.scss'] +}) + +export class HomeUploadComponent implements OnInit { + + phoneInvalid: boolean = false; + + secuLevel: any; + + formData: any = {}; + + myForm: UntypedFormGroup; + + loading: boolean = true + + selected: boolean + + tenderId: number; + + bidAmount:number; + + agreeToTerms1: boolean = false; + + agreeToTerms2: boolean = false; + + showError: boolean = false; + + tenderData: any; + + selectedFiles: any; + + userId: string; + + agreeToTerms: boolean = false; + + fileSelected: boolean[] + + DEFAULT_COVER_COUNT: any; + + initialSelectionStatus: any; + + UploadedFile: TenderDocumentDto[]; + + fileFormat: any[] + + userEmail: string; + + emailBody: any; + + username: string; + + paymentMethodLov=[{ label:"PhonePe",value:"phonepay" }, + { label:"DD", value:"dd" }] + + paymentMethod : any; + + @ViewChild('bidAmountInput') bidAmountInput: ElementRef; + + @ViewChild('emdFeeInput') emdFeeInput : ElementRef ; + + amountPaid: boolean = false; + + OnlinePayment: boolean; + + dialogRef: any; + + emdFee: any; + + screen:any + + emdFeeStatus: string; + + paymentId: any; + + emdFeeApplicable: any; + tenderFee: boolean; + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + public dialog: MatDialog, + private datePipe: DatePipe + ) { + + + // this.generateUPIQRCode('atlejs47@oksbi', '100'); + + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.userEmail = localStorage.getItem('emailId'); + this.username = localStorage.getItem('username'); + this.screen =this.route.snapshot.paramMap.get('screen') + + + } + + + ngOnInit(): void { + this.loading = true; + this.agreeToTerms = false; + + // this.screen='E' + this.getData(); + this.getFileFormatLov(); + this.paymentCheck(); + this.emdPaymentCheck(); + } + + + + + + + openDialog() { + const dialogRef = this.dialog.open(DialogComponent, { + width: '500px', + data: { + details: [ + 'I hereby declare that I have read and understood the tendered documents, terms and conditions, drawings and specifications. The rates quoted are based on all the necessary understanding of the site conditions and challenges to carry out the work. The rates are the best I could offer and are inclusive of all taxes and levies.', + ] + } + }); + + dialogRef.afterClosed().subscribe((result) => { + // Handle any logic after the dialog is closed (if needed) + // For example, you can update the agreeToTerms variable based on the user's choice. + }); + } + + openQrImage(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false + }); + // this.verifiedOtp = true + } + + paymentCheck(){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined) { + this.amountPaid = true + } + + }) + } + + emdPaymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + + if (res && res[0].status) { + if (res[0].emdFeeStatus == 'PAYMENT_SUCCESS') { + this.emdFeeStatus = 'Payment success' + } + if (res[0].emdFeeStatus == 'PAYMENT_ERROR') { + this.emdFeeStatus = 'Payment Failed' + } + if (res[0].emdFeeStatus == 'PAYMENT_PENDING') { + this.emdFeeStatus = 'Payment Pending' + } + if (res[0].emdFeeStatus == 'PAYMENT_DECLINED') { + this.emdFeeStatus = 'Payment Declined' + } + + this.paymentId = res[0].id + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.emdFeeStatus = 'Payment Not Started' + // this.transactionData.status = 'P' + } + }) + } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + + + this.loading = false; + + this.tenderData = res; + this.emdFee = this.tenderData.emdAmt; + this.emdFeeApplicable = this.tenderData.emdFeeApplied + + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + this.DEFAULT_COVER_COUNT = this.tenderData?.covers.length; // Replace with the actual number of rows + this.initialSelectionStatus = new Array(this.DEFAULT_COVER_COUNT).fill(false); + this.fileSelected = [...this.initialSelectionStatus]; + this.UploadedFile = []; + for(let i=0;i { + this.fileFormat = res + + }) + } + + UploadFiles(event, i) { + const newFilename = `${this.tenderData.covers[i].Description.replace(/ /g, '')}${this.tenderData.covers[i].fileFormatD.fileFormat}` + + + + let fileFormatId = this.fileFormat.filter(element => element.fileFormat == this.tenderData.covers[i].fileFormatD.fileFormat); + + this.selectedFiles = event.target.files; + let file = event.target.files[0] + const fd = new FormData(); + + // Create a new File object with the updated filename + const updatedFile = new File([file], newFilename, { type: file.type }); + // const fd = new FormData(); + fd.append('file', updatedFile); + if (file && this.tenderId) { + this._masterService.postMasterData(apiUrl.userDocUpload + '/' + this.tenderId, fd, this.userId).then(res => { + this.tenderData.covers[i].file = res.fileName; + this.fileSelected[i] = true; + this.UploadedFile[i].docName = res.fileName + this.UploadedFile[i].description = this.tenderData.covers[i].Description; + this.UploadedFile[i].docType = fileFormatId[0].id; + this.UploadedFile[i].documentSize = res.fileSizeKB; + this.UploadedFile[i].documentCategory = 'USERD'; + this.UploadedFile[i].tenderId = this.tenderId; + this.UploadedFile[i].userId = this.userId; + + }) + } + + } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + updateTerms(event: any) { + this.agreeToTerms = event.checked; + } + + + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + preSave() { + + if(this.bidAmount == 0 || this.bidAmount == null || this.bidAmount == undefined){ + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterBidFinalAmount"),2000,true); + return false; + } + for (let element of this.UploadedFile) { + if (!element.docName) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAddfiles"),2000,true); + + return false; + } + } + + if (!this.agreeToTerms) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseAgreeToTheTermsandCondition"), 2000, true); + return false; + } + + + return true; + } + + + + + + // openDialog(): void { + // this.showDialog = true; + // } + + // closeDialog(): void { + // this.showDialog = false; + // } + + + + + submit() { + + if(this.emdFeeApplicable){ + + if(!this.amountPaid && this.OnlinePayment ){ + this._ui.toastMessage(this._errorTranslate.translate("pleasePayTheAmountForUpload"), 2000); + return + } + } + + if(!this.preSave()) + return + + // if(this.paymentMethod=='phonepay' ){ + // this.router.navigate([`qr-payment/${ this.tenderId}/${this.screen}`]) + + + // } + + + let id ={ + tenderId : this.tenderId, + userId : this.userId, + + } + + + + let type + + if(this.emdFeeApplicable){ + type = "DD" + }else{ + type = null; + } + + if(!this.emdFeeApplicable && !this.OnlinePayment ){ + + this.tenderFee = false; + + }else if(this.emdFeeApplicable) { + this.tenderFee = false; + }else{ + this.tenderFee = true; + } + + let body= { + bidAmount:this.bidAmount, + type:type, + tenderFee:this.tenderFee + } + + + // this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + // const body={email:this.userEmail} + // this._masterService.saveMasterData(apiUrl.UploadBidAmount,this.emailBody).then(res=>{ + // },err=>{ + // console.error(err); + // }) + // },err=>{ + // console.error(err); + // }) + + + // if(this.emdFeeApplicable){ + + // if(this.screen !=='dd' && this.emdFeeStatus!=='Payment success'){ + // Swal.fire({ + // icon: 'error', + // title: 'Oops...', + // text: 'Please pay the Emd Fee !', + + // }) + // } + // } + +// [this.screen=='dd'] removed from this checking +//else--- case + // if( this.screen=='dd' || this.emdFeeStatus=='Payment success' || !this.emdFeeApplicable ){ + + Swal.fire({ + title: 'Are you sure you want to submit?', + text: "Once submitted, document cannot be uploaded again", + icon: 'warning', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Yes, save it!' + }).then((result) => { + +if (result.isConfirmed ) { + this._masterService.postMasterData(apiUrl.UploadBidAmount,body,`${this.userId}/${this.tenderId}`).then((res)=>{ + const body={email:this.userEmail} + this._masterService.saveMasterData(apiUrl.emailUserSubmit,this.emailBody).then(res=>{ + + this._masterService.saveAllMasterData(apiUrl.tenderDoc, this.UploadedFile).then(res => { + Swal.fire( + 'Success', + 'Documents submitted successfully', + 'success' + ) + this.router.navigate(['dashboard']); + },err=>{ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + + }) + }) + }); + + },err=>{ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: err.error.message + + }) + } + ); + + } + }) + // } + + } + + deleteInput(i) { + // const inputField = document.getElementById(inputFieldId) as HTMLInputElement; + // if (inputField) { + // inputField.value = ''; + // } + this._masterService.deleteMasterData(apiUrl.fileDelete + '/' + this.tenderId + '/' + this.userId, this.tenderData.covers[i].file).then(res => { + this.tenderData.covers[i].file = ''; + this.fileSelected[i] = false; + this.UploadedFile[i].docName = null + this.UploadedFile[i].description = null; + this.UploadedFile[i].docType = null; + this.UploadedFile[i].documentSize = null; + this.UploadedFile[i].documentCategory = null; + this.UploadedFile[i].tenderId = null; + this.UploadedFile[i].userId = null; + }) + + } + + + +} diff --git a/src/app/_modules/user/home-view/home-view.component.html b/src/app/_modules/user/home-view/home-view.component.html new file mode 100644 index 0000000..8414f23 --- /dev/null +++ b/src/app/_modules/user/home-view/home-view.component.html @@ -0,0 +1,627 @@ +
+
+
+ +
+ + + + + + + +
+
+

Tender Details

+
+
+
+ + +
+
+
+
+ +
+ + + +
+ + + +
+
+
+ How can I Validate Digital Signature? +
+
+
+
+ +
Connect Security Device +
+
    +
  • Plug in the security device that has the necessary security keys. +
  • +
+
Select Key Files +
+
    +
  • Choose the Public key files for both the secretary and the president, usually provided on the security device. +
  • +
  • Locate the Public key document or file that you want to validate.
  • +
+
+
+ You can access Tender Reports only after validating the digital signatures of President and Secretary. +
+
+ + + +
+ Close +
+
+
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Basic Details
Organisation Name{{tenderData?.orgChain}}
Tender Reference Number{{tenderData.tenderRefNo}}
Tender ID{{tenderData.tenderId}}
Tender Type{{tenderData.tenderTypeD?.tenderType}}
Tender Category{{tenderData.tenderCategoryD?.productCategory}}
Payment Mode{{tenderData.paymentModeD?.paymentMode}}
Form of Contract{{tenderData.formOfContractD?.formOfContract}}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Tender Fee Details
Tender Fee in ₹{{tenderData.tenderFee ? tenderData.tenderFee : '0' }}
Fee Payable To{{tenderData.feePayableTo ? tenderData.feePayableTo : 'not applicable' }}
Tender Fee Exemption Allowed{{ tenderData.tenderFeeExemption !== null && tenderData.tenderFeeExemption !== '' ? tenderData.tenderFeeExemption : 'not applicable' }}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
EMD Fee Details
EMD Fee Applicable{{tenderData.emdFeeApplied ? 'Yes' : 'No'}}
EMD Amount in ₹{{ tenderData.emdAmt !== undefined && tenderData.emdAmt !== null ? (tenderData.emdAmt !== 0 ? tenderData.emdAmt : 'not applicable') : 'not applicable' }}
EMD Fee Type{{tenderData.emdFeeTypeD?.emdFeeType ? tenderData.emdFeeTypeD?.emdFeeType : 'not applicable' }}
EMD Payable To{{tenderData.emdPayableTo ? tenderData.emdPayableTo : 'not applicable' }}
EMD through BG/ST or EMD Exemption Allowed{{tenderData.allowEmdBgOrSt ? tenderData.allowEmdBgOrSt : 'not applicable' }}
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Critical Dates
Published Date{{tenderData.publishDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale Start Date{{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}}
Document Download / Sale End Date{{tenderData.saleEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission Start Date{{tenderData.bidSubStartDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Submission End Date{{tenderData.bidSubEndDate | date: 'MMM d, y, h:mm:ss a'}}
Bid Opening Date{{tenderData.bidOpenDate | date: 'MMM d, y, h:mm:ss a'}}
+ +
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Work Item Details
Title{{tenderData.title}}
Work Description{{tenderData.workDesc}}
Pre Qualification{{tenderData.ndaPreQualification}}
Tender Value in ₹{{tenderData.tenderValue}}
Category{{tenderData?.productCategoryD?.tenderCategory}}
Sub category + + {{ subCategory?.tendersubCategoryD?.tenderSubCategory }} + , + +
Bid Validity(Days){{tenderData.bidValidity}}
Period Of Work {{tenderData.periodOfWork}}
Location{{tenderData.location}}
Pincode{{tenderData.pincode}}
Bid Opening Place{{tenderData.bidOpeningPlace}}
Bid Opening Address{{tenderData.bidOpenAddress}}
+
+
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
Tenders Documents
Notice
Document TypeDocument NameDescriptionDownload
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
Work Item Documents
Document TypeDocument NameDescription
{{document.documentTypeD.documentType}}{{document.docName}}{{document.description}}
+ +

Documents can Only be download between {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}}

+
Drawings Document
Description +

Documents can Only be download between {{tenderData.saleStartDate | date: 'MMM d, y, h:mm:ss a'}} and {{tenderData.saleEndDate| date: 'MMM d, y, h:mm:ss a'}}

+ +
{{document.description}}
+
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
Required Documents Details
Document TypeDescriptionDocument Format
{{ document.coverTypeD.coverType }}{{ document.Description }}{{ document.fileFormatD.fileFormat }}
+
+
+ + + + +
+
+ + + + + + + + + + + + + + + + + +
Tender Inviting
Name{{tenderData.tenderInvName}}
Address{{tenderData.tenderInvAddess}}
+
+
+ + +
+
+
+
+
+ + +
+ +
+ \ No newline at end of file diff --git a/src/app/_modules/user/home-view/home-view.component.scss b/src/app/_modules/user/home-view/home-view.component.scss new file mode 100644 index 0000000..bbdc6cd --- /dev/null +++ b/src/app/_modules/user/home-view/home-view.component.scss @@ -0,0 +1,354 @@ +.container-fluid{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: 10px; + position: relative; +} +.container-fluid2{ + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; + top: -1px; + position: relative; +} + +@media print { + .hide-on-print { + display: none; + } + .footer{ + display: none; + } +} + + + + +.nav-link:hover { + color: rgb(255, 0, 0); +} +// #zipFile:hover { +// color: rgb(255, 0, 0); +// cursor: pointer; +// } + +// .container-responsive { +// min-height: 100vh; +// position: relative; +// } + +// #footer { +// background-color: #3a8379; +// padding: 20px; +// color: #ffffff; +// position: absolute; +// bottom: 0; +// width: 100%; +// } +// -------------------------------------------------------------------------------------------- +thead{ + // background-color: #5faca1; color: aliceblue; + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; +} + +mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: orangered; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } +} + +.table td { + word-break: break-word; + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; +} + +.table th { + font-family: texg; + color: #353535; +} + +.tenderHeading{ + font-family: texg; + color: #353535; +} +.printButton { + // float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} + +.printButton:hover { + background-color: #ececec; + color: orangered; +} + +.payButton:hover { + background-color: #ececec; + color: orangered; +} + + +.DownloadZipButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + +} +.DownloadZipButton:hover { + background-color: #ececec; + color: orangered; +} + +.DownloadNoticeButton { + // float: right; + // margin-top: 5px; + // margin-bottom: 5px; + background-color: white; + // color: #424242; + color: #5faca1; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 17%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + + + +} +.DownloadNoticeButton:hover { + background-color: #ececec; + color: #303030; +} + +@media screen and (max-width: 768px) { + /* Adjust font size for smaller screens */ + .DownloadZipButton { + font-size: 14px; + } +} + +@media screen and (max-width: 480px) { + /* Further adjustments for even smaller screens */ + .DownloadZipButton { + font-size: 12px; + } +} + + + + +// ---------------------------------------digital signature------------------------------------------// + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-bar { + background-color: #0bbb86; /* Primary color */ + //cursor: pointer; +} + +::ng-deep .mat-slide-toggle .mat-tooltip.tooltip{ + font-family: nucleo; + } + + +::ng-deep .mat-slide-toggle.mat-checked .mat-slide-toggle-thumb { + background-color: #00ffaa; /* Accent color */ + cursor: pointer; +} + + +::ng-deep .mat-slide-toggle-label { + display: flex; + flex: 1; + flex-direction: row; + align-items: center; + height: inherit; + cursor: pointer; + +} + +.element-with-tooltip { + cursor: pointer; /* Set the cursor style to pointer for the element */ +} + +.popup-card { + position: fixed; + background-color: #ffffff; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 450px; + height: 330px; + z-index: 1000; +} + + + +.popup-container { + padding: 20px; /* Add padding for better spacing */ + display: flex; + flex-direction: column; + justify-content: center; + height: 100%; +} + + +.mainCard{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; + +} + + +.resetSpan{ + font-family: texg; + color: #1e3d3b; + font-size: xx-large; + float: center; + margin-top: 15px; + // margin-left: 64px; +} + h6{ + font-family:nucleo; + } +.helpHeading{ + font-family: texg; + color: #1e3d3b; + font-size: x-large; + float: center; + margin-top: 15px; +} +.centered-form { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +@media screen and (max-width: 600px) { + .popup-card { + width: 450px; /* Adjust card width for smaller screens */ + } +} + +.mat-card-actions { + display: flex; + justify-content: flex-end; + padding: 16px; /* Add padding for spacing */ +} + +.popUpButtons{ + padding: 5px; + color: #353535; + font-weight: 900; + font-size: medium; + // background-color: #ececec; + font-family:nucleo; +} + +.popUpButtons:hover{ + + background-color: #ebeaea ; + color:orangered; + box-shadow: 0 2px rgb(129, 129, 129)a(0, 0, 0, 0.2); + // transform: translateY(5px); + +} + +.custom-spinner-content { + font-size: 24px; + color:orangered; + margin: 0; + padding: 0; +} + + +.normalText{ + font-family: nucleo; + + +} + +.responsive-buttons { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.responsive-buttons button { + margin-left: 10px; /* Add some spacing between the buttons */ +} + +@media (max-width: 768px) { + .responsive-buttons { + flex-direction: row; + justify-content: flex-end; + align-items: center; + } +} + + + + +.container-responsive{ + background: #f3f3f3; +} \ No newline at end of file diff --git a/src/app/_modules/user/home-view/home-view.component.spec.ts b/src/app/_modules/user/home-view/home-view.component.spec.ts new file mode 100644 index 0000000..bd212a6 --- /dev/null +++ b/src/app/_modules/user/home-view/home-view.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { HomeViewComponent } from './home-view.component'; + +describe('HomeViewComponent', () => { + let component: HomeViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ HomeViewComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(HomeViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/home-view/home-view.component.ts b/src/app/_modules/user/home-view/home-view.component.ts new file mode 100644 index 0000000..3ef7929 --- /dev/null +++ b/src/app/_modules/user/home-view/home-view.component.ts @@ -0,0 +1,608 @@ +import { Component, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { ActivatedRoute, Router } from '@angular/router'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; +import { TenderDetailDto } from 'src/app/_dto/tender-detail.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { TransactionService } from 'src/app/_providers/_services/transaction.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; +import Swal from 'sweetalert2'; + +@Component({ + selector: 'app-home-view', + templateUrl: './home-view.component.html', + styleUrls: ['./home-view.component.scss'] +}) +export class HomeViewComponent implements OnInit { + + tenderId: number; + + tenderData: any; + + nitItemDocuments: any[] = []; + + workItemDocuments: any[] = []; + + drawingsDocuments: any[] = []; + + tenderDocuments: any; + + paymentDetails: PurchaseDto; + + tempID: any; + + newPaymentRow: any; + + currentDate = new Date(); + + enableDownload: boolean = true + + paymentStatus: string; + + userId: string; + + amountPaid: boolean = false; + + seculevel: string; + + displayedColumns: string[] = ['field', 'value']; + OnlinePayment: boolean; + showDownloadButton: boolean; + + // ------digital signature--------// + + showPopup:boolean = false; + fileSelected: boolean; + fileSelected2:boolean; + Secretary:any; + President:any; + selectedSecretaryFile: any; + selectedPresidentFile: any; + SecretarySigned: boolean; + PresidentSigned: boolean; + activeYn: any; + dialogRef: any; + newStatus: string; + CancelTenderButtons: boolean; + screen: any; + tenderFeePaid: boolean = false; + spinnerLoading: boolean = false; + // -------------- ---------------// + + + constructor( + private router: Router, + private route: ActivatedRoute, + private _masterService: MasterService, + private _transactionService: TransactionService, + private errorService:ErrorTranslateService, + private _ui: UiService, + private _errorTranslateService: ErrorTranslateService, + private dialog: MatDialog + ) { + this.seculevel = localStorage.getItem('seculevel') + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.paymentStatus = this.route.snapshot.paramMap.get('pay'); + this.getData() + + } + ngOnInit(): void { + this.tenderData = new TenderDetailDto() + this.userId = localStorage.getItem('userId') + this.seculevel = localStorage.getItem('seculevel') + + this.enableDownload = true; + this.getData(); + this.getPaymentData(); + this.screen='T' + this.fileSelected = false + this.fileSelected2 = false + + } + + + + + + + + + getData() { + + let newDate = new Date(); + + this._masterService.getMasterDatabyId(apiUrl.AllTenderData, this.tenderId).then((res) => { + this.tenderData = res; + this.getPaymentData() + if (res.tenderFeeExemption !== null && res.tenderFeeExemption !== undefined) { + this.tenderData.tenderFeeExemption = res.tenderFeeExemption.trim(); + } + + this.tenderDocuments = this.tenderData['tenderDoc'] + + this.activeYn = this.tenderData['activeYn']; + + if(this.activeYn == 'N'){ + this.CancelTenderButtons = true + }else if(this.activeYn == 'Y'){ + this.CancelTenderButtons = false + } + + if(this.tenderData.paymentModeD.paymentMode == 'Online'){ + this.OnlinePayment = true + }else { + this.OnlinePayment = false; + } + + + const saleStartDate = new Date(this.tenderData.saleStartDate); + const saleEndDate = new Date(this.tenderData.saleEndDate); + + if (this.currentDate >= saleStartDate && this.currentDate <= saleEndDate) { + this.showDownloadButton = true; // Enable the button + + } else { + this.showDownloadButton = false; // Disable the button + + + + } + + + + this.filterDataByCategory(); + }) + } + + + getPaymentData() { + + + // if(this.OnlinePayment){ + this._masterService.getMasterDatabyId(apiUrl.paymentCheck, `${this.userId}/${this.tenderId}`).then(res => { + if (res.length >0 && res[0].transId && res[0].transId != null && res[0].transId != undefined ) { + this.amountPaid = true + } + + if(res.length > 0 && res[0].status=='S' || !this.OnlinePayment){ + this.tenderFeePaid = true; + } + else if(res.length ==0 && this.OnlinePayment){ + this.showDownloadButton = false; + + } + }) + + + + //} + + } + + getUniqueSubCategories() { + if (!this.tenderData || !this.tenderData.subCategoryMaster) { + return []; + } + const uniqueSubCategories = []; + const subCategoryIds = new Set(); // To keep track of already added subcategory IDs + for (const subCategory of this.tenderData.subCategoryMaster) { + const subCategoryId = subCategory.tendersubCategoryD.tenderSubCategory; + if (!subCategoryIds.has(subCategoryId)) { + uniqueSubCategories.push(subCategory); + subCategoryIds.add(subCategoryId); + } + } + return uniqueSubCategories; + } + + + print(): void { + window.print(); + } + + filterDataByCategory() { + + + this.drawingsDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'D'); + this.workItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'WID'); + this.nitItemDocuments = this.tenderDocuments.filter(doc => doc.documentCategory === 'NIT'); + } + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + goToHome() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs() { + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + goToDashboard(){ + this.navigateTo(`/dashboard`) + } + + DownloadDrawingsZIP() { + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + } else { + this.spinnerLoading = true; + const id = this.tenderId; + this._masterService.getMasterDatabyId(apiUrl.drawingsDownloadDocs, id).then((res) => { + // Download logic + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + }, err => { + if (err.status == 200) { + window.location.href = `${environment.apiUrl}/${apiUrl.drawingsDownloadDocs}/${id}`; + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } else { + // Handle other errors + } + }).finally(() => { + this.spinnerLoading = false; // Set spinnerLoading to false after download completes or fails + }); + } +} + + // DownloadDrawingsZIP() { + // // Your code to download the ZIP file goes here + + // // Scroll to the "Pay" button + // var payButton = document.getElementById("headingBreak"); + // if (payButton) { + // payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + // } + // } + DownloadNIT(index: number) { + const id = this.tenderId; + + + this._masterService.getMasterDatabyId(apiUrl.noticeDownlaod, `${this.tenderId}/${this.nitItemDocuments[index].docName}`).then((res) => { + + } , err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${this.tenderId}/${this.nitItemDocuments[index].docName}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10000); + } + if (err.status == 404) { + alert('No Notice Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.noticeDownlaod}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + } + + + downloadWITZip() { + + if (!this.amountPaid && this.seculevel == 'U' && this.OnlinePayment) { + // Scroll to the "Pay" button + var payButton = document.getElementById("headingBreak"); + if (payButton) { + payButton.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + this._ui.toastMessage(this._errorTranslateService.translate('pleasePayTheAmountForDoc'), 3000); + + } + else { + const id = this.tenderId; + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 10); + + this._masterService.getMasterDatabyId(apiUrl.bankDocs, id).then(res => { + + }, err => { + if (err.status == 200) { + // window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + setTimeout(() => { + newWindow.close(); + }, 1000); + } + if (err.status == 404) { + alert('No Bank Document Found for the selected Tender.'); + } + if (err.status == 500) { + alert(`${err.message}`); + } + else { + //alert(`An error Occured`); + // let newWindow = window.open(`${environment.apiUrl}/${apiUrl.bankDocs}/${id}`); + // setTimeout(() => { + // newWindow.close(); + // }, 100); + } + + }) + // window.open('http://192.168.1.112:3500/api/v1/file-upload/Bank-Documents-Arc/'+id); + } + } + + + async paymentGateway() { + // this.paymentDetails = new PurchaseDto(); + // this.paymentDetails.application = this.tenderId; + // this.paymentDetails.mobile = localStorage.getItem('mobile') + // this.paymentDetails.email = "accuratesoftware2022@gmail.com"; + // this.paymentDetails.amount = this.tenderData.tenderFee; + // this.paymentDetails.type = "I" + + + // this._transactionService.createPayment(this.paymentDetails).then( + // res => { + // this.onSuccessPayment(res); + // }, + // err => { + // this.onFailurePayment(err); + // } + // ); + + + this.router.navigate([`qr-payment/${this.tenderId}/${this.screen}`]) + + } + + onSuccessPayment(response) { + if (response.url) { + // Render PayUmoney payment gateway page + window.location.href = response.url; + } + } + + onFailurePayment(err) { + this._ui.toastMessage(err.message ? err.message : this._errorTranslateService.translate('errInSave'), 3000); + + } + + // ------------------------------------------------------------------------------------------- + + + + + CancelTender(id){ + this.showPopup = true; + this.showPopup = true; + } + closePopup() { + this.showPopup = false; + this.Secretary ='' + this.President = '' + } + + async UploadsecretaryFiles(event,SecretaryFile){ + + const allowedExtensions = ['cer']; + + this.selectedSecretaryFile = event.target.files[0]; + if (this.selectedSecretaryFile) { + + const fileExtension = this.selectedSecretaryFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.Secretary = this.selectedSecretaryFile.name; + + + const formData = new FormData(); + formData.append('adminUser', '2'); + formData.append('certificate', this.selectedSecretaryFile); + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + if(res.message = "Authentication Successfully Completed"){ + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + + }else{ + this.SecretarySigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.SecretarySigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.SecretarySigned = false + this.Secretary ='' + } + + + + }) + } + + + } + deleteSecretaryInput(){ + + } + + async UploadPresidentFiles(event,President){ + + const allowedExtensions = ['cer']; + + this.selectedPresidentFile = event.target.files[0]; + if (this.selectedPresidentFile) { + + const fileExtension = this.selectedPresidentFile.name.split('.').pop(); + + if (!allowedExtensions.includes(fileExtension)) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + return; + } + + this.President = this.selectedPresidentFile.name; + + const formData = new FormData(); + formData.append('adminUser', '1'); + formData.append('certificate', this.selectedPresidentFile); + + + + await this._masterService.saveMasterData(apiUrl.digitalSignature,formData).then((res) =>{ + if(res.message = "Authentication Successfully Completed"){ + + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + + }else{ + this.PresidentSigned = false + } + + + },(err) => { + if(err.status === 201){ + this._ui.toastMessage(this.errorService.translate('AuthenticationSuccessfullyCompleted'), 3000); + this.PresidentSigned = true + } + + if (err.status === 500) { + this._ui.toastMessage(this.errorService.translate('invalidFileFormat'), 3000); + + } + if(err.status === 400){ + this._ui.toastMessage(this.errorService.translate('KeyNotMatchingPleaseTryAgain'), 3000); + this.PresidentSigned = false + this.President = '' + } + if(err.status === 401){ + this._ui.toastMessage(this.errorService.translate('Digital Signature Expired'), 3000); + this.PresidentSigned = false + this.President = '' + } + + + + }) + } + + + } + + deletePresidentInput(){ + + } + + + TenderCancelToggle(event){ + this.showPopup = true; + + } + + VerifySignature(){ + + const id = this.tenderId; + this.showPopup = true; + if(this.Secretary == null || this.Secretary == '' || this.Secretary == undefined){ + this._ui.toastMessage(this.errorService.translate('secretarySignatureCantBeBlank'), 3000); + return false + + }else if(this.President == null || this.President == '' || this.President == undefined){ + this._ui.toastMessage(this.errorService.translate('PresidentSignatureCantBeBlank'), 3000); + return false + }else if(!this.SecretarySigned && !this.PresidentSigned){ + Swal.fire({ + icon: 'error', + title: 'Oops...', + text: 'Something went wrong!', + // footer: 'Why do I have this issue?' + }) + return false + //this._ui.toastMessage(this.errorService.translate('verificationFailed'), 3000); + }else if(this.SecretarySigned && this.PresidentSigned){ + + + + this.activeYn = this.activeYn === 'N' ? 'Y' : 'N'; + + let body ={ + activeYn: this.activeYn + } + this._masterService.postMasterData(apiUrl.TenderStatus,body,id).then((res) =>{ + if(this.activeYn == 'N'){ + this.activeYn == 'N' + }else if(this.activeYn == 'Y'){ + this.activeYn == 'Y' + } + + + this._ui.toastMessage(res.data, 3000); + + + if(res.data == 'Digital Signature Expired'){ + this.activeYn == 'N' + } + this.closePopup() + }, + (err) => { + console.error(err); + this._ui.toastMessage(err.error.message, 3000); + } + ); + + this.showPopup = false; + } + } + + + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog(){ + this.dialogRef.close(); + } + + + + +} diff --git a/src/app/_modules/user/layout-component/layout-component.component.css b/src/app/_modules/user/layout-component/layout-component.component.css new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_modules/user/layout-component/layout-component.component.html b/src/app/_modules/user/layout-component/layout-component.component.html new file mode 100644 index 0000000..59d944b --- /dev/null +++ b/src/app/_modules/user/layout-component/layout-component.component.html @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/app/_modules/user/layout-component/layout-component.component.ts b/src/app/_modules/user/layout-component/layout-component.component.ts new file mode 100644 index 0000000..2195f3e --- /dev/null +++ b/src/app/_modules/user/layout-component/layout-component.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-layout-component', + templateUrl: './layout-component.component.html', + styleUrls: ['./layout-component.component.css'] +}) +export class LayoutComponentComponent implements OnInit { + + constructor( + private _ui: UiService, + ) { } + + async ngOnInit() { + + // await this._ui.userValidation() + } + +} diff --git a/src/app/_modules/user/payment-details/payment-details.component.html b/src/app/_modules/user/payment-details/payment-details.component.html new file mode 100644 index 0000000..2c01f39 --- /dev/null +++ b/src/app/_modules/user/payment-details/payment-details.component.html @@ -0,0 +1,220 @@ +
+ +
+ + + +
+ + + + +
+ + +
+
+

Payment Details

+
+ +
+

Tender Information:

+
+ + +
+
+ + {{'tender'|translate}} : + {{headerData?.title}} + +
+ +
+ + +
+
+ + {{'tenderId'|translate}} : + {{tenderInputId}} + +
+ +
+ +
+
+

Payment Summary:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ {{'slNo'|translate}} +
+ + + {{i+1}} + + +
+ + + +
+ {{'name'|translate}} +
+ + + {{element?.userName}} + + +
+ + + +
+ {{'admissionNo'|translate}} +
+ + + {{element.rollNo }} + + +
+ + + + + +
+ {{'mobileNumber'|translate}} +
+ + + {{element?.mobileNumber}} + + +
+ + + +
+ {{'emailId'|translate}} +
+ + + {{element?.email}} + + +
+ + + + + +
+ {{'TransactionId'|translate}} +
+ + + {{element?.transId}} + + +
+ + + + + + +
+ {{'Paymentstatus'|translate}} +
+ + + + + + Pending + Decline + Confirm + + + + + +
+ + + + + + + +
+
+ + +
+
+
+ +
\ No newline at end of file diff --git a/src/app/_modules/user/payment-details/payment-details.component.scss b/src/app/_modules/user/payment-details/payment-details.component.scss new file mode 100644 index 0000000..17ddfdd --- /dev/null +++ b/src/app/_modules/user/payment-details/payment-details.component.scss @@ -0,0 +1,409 @@ +// .header { +// margin-left: 4%; +// margin-top: 20px; +// } + +// .header>h6{ +// a { +// text-decoration: none; +// color: #262627; +// } + +// a:hover { +// text-decoration: underline; +// cursor: pointer; +// } +// } + +// mat-card{ +// min-width: 180px ; +// // max-width: 20vw; +// height: 200px; +// display: inline-block; +// } + +// mat-card:hover{ +// cursor: pointer; +// } + + +// ----------------------------------------------------------------------------------- + + + +.nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + // border: 1px solid #ccc; + word-wrap: break-word; + white-space: normal; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + .top-bar { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + border: 1px solid #e3e3e3; + width: 100%; + margin: auto; + padding: auto; + } + + .header { + padding: 20px; + width: 100%; + min-width: 350px; + } + + .header>h6>a { + text-decoration: none; + color: #262627; + } + + .header>h6>a:hover { + text-decoration: underline; + cursor: pointer; + } + + mat-card { + min-width: 350px; + } + + .top-left-float { + display: flex; + min-width: 282px; + } + + .top-right-float { + display: flex; + min-width: 161px; + } + + .top-left-float>button, + .top-right-float>button { + margin: 5px; + height: 40px; + } + + mat-table { + padding-top: 10px !important; + // table-layout: fixed; + width: 100%; + display: table; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #505050; + font-weight: 900; + font-size: medium; + background-color: #f0f0f0; + font-family: nucleo; + } + + .table-headers:hover { + background-color: #ececec; + color: #46AC9E; + } + + .table-content { + padding: 5px; + overflow-wrap: inherit; + font-family: nucleo; + + } + + .table-column { + width: 100%; + } + } + + input { + border: none; + border-bottom: 1px solid silver; + } + + :host ::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) { + + .mat-slide-toggle-thumb { + background-color: #46AC9E; + } + + .mat-slide-toggle-bar { + background-color: skyblue; + } + + } + + // .dialog-body { + // display: flex; + // justify-content: center; + // align-items: center; + + // div { + // width: 90%; + // } + // } + + .dialog-actions { + display: flex; + flex-wrap: wrap; + width: 97%; + justify-content: space-between; + + .btn-group-left { + // min-width: 150px; + margin-top: 5px; + } + + .btn-group-right { + // min-width: 95px; + margin-top: 5px; + } + } + + .hide { + display: none; + } + + :host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } + + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } + + + @media (max-width: 767px) { + .card { + min-width: 600px; + } + } + + + @media print { + .buttonCard { + display: none; + } + + .backButton { + display: none; + } + + .printButton { + display: none; + } + + .excelButton { + display: none; + } + } + + .mat-row:nth-child(even) { + background-color: rgb(255, 255, 255); + } + + .mat-row:nth-child(odd) { + background-color: rgb(241, 241, 241); + } + + .table-container { + margin-top: 20px + } + + + .backButton { + float: left; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + transform: translateY(5px); + + } + + .backButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .printButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + background-color: white; + color: #424242; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + + } + + .printButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .excelButton { + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + + .excelButton:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + /* You can adjust the shadow values to your preference */ + } + + .buttonCard { + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-top: 20px; + } + .buttonCardBottom{ + width: 100%; + background-color: #ffffff; + height: 50px; + margin: 0px; + padding: 0px 16px 0px 16px; + margin-bottom: 20px; + } + + .reportHeader { + width: 100%; + background-color: #ffffff; + // height: 50px; + margin: 5px 0px 0px 0px; + } + + .bidHeading { + font-family: texg; + color: #353535; + } + + .tenderInfo { + font-family: texg; + color: #353535; + } + + .subHead { + font-family: texg; + color: #353535; + } + + .subDetail { + font-family: nucleo; + color: #353535; + } + + .captchaFont { + font-family: captcha; + font-size: large; + } + + .captchaDiv { + text-align: center; + height: 100px; + display: flex; + align-items: center; + justify-content: center; + + background-image: url('/assets/img/captchaback.jpeg'); + } + + .captchaSubmit{ + float: right; + margin-top: 5px; + margin-bottom: 5px; + color: #424242; + background-color: white; + height: 37px; + border-radius: 9px; + font-family: nucleo; + // width: 8%; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + margin-right: 5px; + } + .captchaSubmit:hover { + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(240, 240, 240); + + /* You can adjust the shadow values to your preference */ + } + + .rotate-icon { + animation: rotate 1s infinite; + } + + @keyframes rotate { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } + } + + .table-responsive { + overflow-x: scroll; + } + \ No newline at end of file diff --git a/src/app/_modules/user/payment-details/payment-details.component.ts b/src/app/_modules/user/payment-details/payment-details.component.ts new file mode 100644 index 0000000..c2a9ecc --- /dev/null +++ b/src/app/_modules/user/payment-details/payment-details.component.ts @@ -0,0 +1,139 @@ +import { Component, OnInit, ViewChild, ElementRef } from '@angular/core'; +import { MatSort, Sort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { ActivatedRoute, Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-payment-details', + templateUrl: './payment-details.component.html', + styleUrls: ['./payment-details.component.scss'] +}) +export class PaymentDetailsComponent implements OnInit { + + + title = 'Payment Details'; + + today: Date = new Date(); + + @ViewChild('table', { static: false }) table: ElementRef; + + @ViewChild(MatSort, { static: false }) sort: MatSort; + + displaycolumns: string[] = ['slNo', 'name', 'mobileNumber', 'email', 'transId', 'Paymentstatus']; + + dataSource: MatTableDataSource; + + tenderId: number; + + headerData: any; + + tableData: any; + + tenderInputId: any; + + + paymentStatus: any; + userId: string; + + constructor( + private _router: Router, + private _masterService: MasterService, + private route: ActivatedRoute, + private _ui:UiService, + ) { + this.tenderId = +this.route.snapshot.paramMap.get('id'); + } + + ngOnInit(): void { + this.getHeaderData(this.tenderId); + this.getTableData(this.tenderId); + } + + getHeaderData(id) { + this._masterService.getMasterDatabyId(apiUrl.getTender, id).then(res => { + this.headerData = res; + + this.tenderInputId = res.tenderId + }) + } + + getTableData(id) { + this._masterService.getMasterDatabyId(apiUrl.bidReport, id).then(res => { + + this.tableData = res.report + this.tableData.forEach(element => { + if (element.status === 'P') { + element.paymentStatus = 'P'; + } + if(element.status === 'S'){ + element.paymentStatus = 'S'; + } + if(element.status === 'D'){ + element.paymentStatus = 'D'; + } + }); + + this.tableData.sort((a, b) => { + if (a.status === 'P' && b.status !== 'P') { + return -1; + } else if (a.status !== 'P' && b.status === 'P') { + return 1; + } else { + return 0; + } + }); + + this.dataSource = new MatTableDataSource(this.tableData); + this.dataSource.sort = this.sort; + }) + } + + navigateTo(destination) { + this._router.navigate([destination]) + } + + backButton() { + this.navigateTo('admin/dashboard') + // this.backClick.emit() + } + + sortData(sort: Sort) {} + + onPaymentStatusChange(userId, paymentStatus){ + let message = ''; + if (paymentStatus === 'S') { + message = 'Payment confirmed message'; + } else if (paymentStatus === 'D') { + message = 'Payment declined message'; + } + + let body = { + status : paymentStatus, + notificationViewed:'N', + message:message + } + this._masterService.postMasterData(apiUrl.paymentupdatePaymentStatus,body,`${userId}/${this.tenderId}`).then((res) =>{ + this._ui.toastMessage(res.data) + + },err=>{ + this._ui.toastMessage(err.error.message); + + + }) + } + + ConfirmMail(userName,email){ + let body ={ + custName:userName, + email: email + } + this._masterService.saveMasterData(apiUrl.confirmPayment,body).then((res) =>{ + + }) + + } + +} diff --git a/src/app/_modules/user/qr-payment/qr-payment.component.html b/src/app/_modules/user/qr-payment/qr-payment.component.html new file mode 100644 index 0000000..8faf35f --- /dev/null +++ b/src/app/_modules/user/qr-payment/qr-payment.component.html @@ -0,0 +1,291 @@ +
+ +
+
+ +
+
+ + + + +
+
+
+ Payment for {{paymentFor}} +
+
+
+ help? +
+
+
+
+ + + +
+
+
+

Current payment status :   {{paymentStatus}}

+ +

"Safe and Easy Payment Process"

+

+ +
+ +
+

Current payment status :   {{emdFeeStatus}}

+ +

"Safe and Easy Payment Process"

+

+ +
+ +
+ + +
+ + +
+ + + +
+
+
+
+ + +
+
+
+ + +
+
+ +
+
+ +
+
+
+
+ +
+
+
+ +
+
+ +
+
+ + + + + + + + + + +
+
How can I pay?
+
    +
  • Please select any payment method to continue payment
  • + +
+ +

more info : secretary@artnouveau.in

+ +
+ Close +
+
+
+ + +
+
DD Details
+
+
+
+
+

Attach the DD Document File Here

+ + + {{ddFile?.fileName}} + + {{ 'assetImagePath' | translate }} + + + + + + + +
+
+
+

+
+
+ +
+ Close +
+
+ Save +
+
+ + +
+ +
+
+ + + +
+
+ + + +
+
DD Details
+
+
+
+
+

Attach the DD Document File Here

+ + + {{ddFile?.fileName}} + + {{ 'assetImagePath' | translate }} + + + + + + + +
+
+
+
+
+
+ + + +
+
+
+
+
+ +
+ +
+
+ +
+
+ + +
+
+ +
+
+
\ No newline at end of file diff --git a/src/app/_modules/user/qr-payment/qr-payment.component.scss b/src/app/_modules/user/qr-payment/qr-payment.component.scss new file mode 100644 index 0000000..bd9ed3e --- /dev/null +++ b/src/app/_modules/user/qr-payment/qr-payment.component.scss @@ -0,0 +1,170 @@ +.payUpimsg{ + font-family: texg; + margin-bottom: 0px; +} + +.statusSpan{ + font-weight: bolder; + font-family: nucleo; + font-size: large; +} + +.normalText{ + font-family: nucleo; +} + +.btn1{ + font-family: nucleo; + font-size: 1rem; +} + +h5{ + font-family: nucleo; +} + +h6{ + font-family: nucleo; +} +.noFont{ + font-family: sans-serif; + font-weight: 600; + font-size: large; +} + + +// -[-----------------------------------------------------------------]- + +.btn:hover, .btn1:hover { + background-color: #ebeaea; + color: #46AC9E; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} + +.popup-card { + background-color: #ffffff; + width: 100%; + max-width: 600px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + border-radius: 10px; +} + + + .resetSpan{ + font-family: 'nucleo'; + color: #1e3d3b; + font-size: 25px; + float: center; + margin-top: 15px; + font-weight: bold; + + // margin-left: 64px; + } +// .centered-form { +// display: flex; +// flex-direction: column; +// align-items: center; +// justify-content: center; + +// } + ::ng-deep .custom-tab-group .mat-tab-label { + // color: rgb(0, 0, 0); + text-transform: none; + min-width: auto; + padding: 5px; + color: #505050; + font-weight: 700; + font-size: 1rem; + padding: 10px; + font-family: nucleo; + width: 270px; + + } + .normalTextIN{ + color: #505050; + font-weight: 700; + font-size: small; + font-family: nucleo; + font-size: 1rem; + } + + +.centered-heading { + text-align: center; + margin-bottom: 20px; +} + + +.centered-form-content { + text-align: center; + padding: 0 20px; +} + +.centered-button { + text-align: center; + display: flex; + justify-content: center; + align-items: center; + margin-top: 20px; +} + + + +::ng-deep .mat-form-field-flex{ + background-color: #ffffff; +} + + + + +@media screen and (max-width: 600px) { + .centered-heading { + font-size: 1.2rem; + } +} + + + +@media (max-width: 767px) { + .responsive-container { + padding: 10px; + } + + .custom-tab-group { + width: 100%; + } + + .centered-form-content { + padding: 10px; + } + + .col-md-3, + .col-md-6 { + flex-basis: 100%; + } +} + + +@media (min-width: 768px) and (max-width: 991px) { + .col-md-3, + .col-md-6 { + flex-basis: 50%; + } +} + +.center-container { + display: flex; + justify-content: center; /* Horizontally center */ + // align-items: center; /* Vertically center */ + // height: 100vh; /* Make the container cover the viewport vertically */ + // background-color: rgba(0, 0, 0, 0.5); /* Optional overlay background */ +} + +.gtwyLabel{ + display: flex; + justify-content: flex-start; + font-family: nucleo; +} + +.container-responsive{ + background-color: whitesmoke; +} \ No newline at end of file diff --git a/src/app/_modules/user/qr-payment/qr-payment.component.spec.ts b/src/app/_modules/user/qr-payment/qr-payment.component.spec.ts new file mode 100644 index 0000000..11289ca --- /dev/null +++ b/src/app/_modules/user/qr-payment/qr-payment.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { QrPaymentComponent } from './qr-payment.component'; + +describe('QrPaymentComponent', () => { + let component: QrPaymentComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ QrPaymentComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(QrPaymentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/qr-payment/qr-payment.component.ts b/src/app/_modules/user/qr-payment/qr-payment.component.ts new file mode 100644 index 0000000..d84b18b --- /dev/null +++ b/src/app/_modules/user/qr-payment/qr-payment.component.ts @@ -0,0 +1,408 @@ +import { DatePipe } from '@angular/common'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatTabGroup } from '@angular/material/tabs'; +import { ActivatedRoute, Router } from '@angular/router'; +import * as QRCode from 'qrcode'; +import { PaymentInfoDto } from 'src/app/_dto/payment-info.dto'; +import { paymentDto } from 'src/app/_dto/payment.dto'; +import { TenderDocumentDto } from 'src/app/_dto/tender-documents.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { environment } from 'src/environments/environment.prod'; + +@Component({ + selector: 'app-qr-payment', + templateUrl: './qr-payment.component.html', + styleUrls: ['./qr-payment.component.scss'] +}) +export class QrPaymentComponent implements OnInit { + + secuLevel: string; + + userId: string; + + tenderId: number; + + transactionData: PaymentInfoDto; + + amountReq: any = 0; + + dialogRef: any; + + paymentStatus: any; + + EmdpaymentStatus: any; + + paymentId: any; + + @ViewChild(MatTabGroup) tabGroup: MatTabGroup; + + paymentGtwy:any = ''; + + gatewayLov=[]; + mobileNo: any; + + paymentData:paymentDto; + url: any; + screen: any; + paymentFor:any; + emdFeeStatus:any + payStatus: string = ''; + PaymentMethodDD:any; + + phonepay:any + + ddFile ={fileName:"",filePath:""} + docSize: any; + + + constructor( + private router: Router, + private route: ActivatedRoute, + private _ui: UiService, + private _errorTranslate: ErrorTranslateService, + private _masterService: MasterService, + private dialog: MatDialog, + private datePipe: DatePipe + ) { + this.secuLevel = localStorage.getItem('seculevel'); + this.userId = localStorage.getItem('userId'); + this.mobileNo = localStorage.getItem('mobile') + this.tenderId = +this.route.snapshot.paramMap.get('id'); + this.screen = this.route.snapshot.paramMap.get('screen'); + } + + qrImage: boolean = false; + + transId: any + + ddDocuments:TenderDocumentDto; + + emdFeePayment:boolean=false; + + ngOnInit(): void { + + this.ddDocuments = new TenderDocumentDto(); + + // this.paymentGtwy='phonepay'; + this.paymentCheck(); + this.emdPaymentCheck(); + if(this.screen=='T'){ + this.paymentFor='Tender Fee' + this.gatewayLov=[{label:"PhonePe",value:"phonepay"}] + + } + else if (this.screen =='E'){ + this.emdFeePayment=true; + this.paymentFor='Emd Fee' + this.gatewayLov=[ + // {label:"PhonePay",value:"phonepay"}, + {label:"DD",value:"dd"}] + } + this.transactionData = new PaymentInfoDto() + this.paymentData = new paymentDto(); + this.getData(); + + setTimeout(() => { + // this.getData() + this.paymentCheck(); + this.emdPaymentCheck(); + + }, 500); + } + + + // ngAfterViewInit(): void { + + // setTimeout(() => { + // }, 1000); + // } + + getData() { + this._masterService.getMasterDatabyId(apiUrl.getTender, this.tenderId).then(res => { + + if(this.screen=='T'){ + this.amountReq = res.tenderFee; + + } + else if(this.screen=='E'){ + this.amountReq = res.emdAmt; + + } + + // this.generateUPIQRCode(environment.upiId, this.amountReq); + + }) + this.paymentCheck(); + + // this._masterService.getMasterData(apiUrl.userData).then(res => { + // this.mobileNo =res.mobileNo; + + // }) + } + + paymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + + if (res && res[0].status) { + if (res[0].status == 'P') { + this.paymentStatus = 'Pending' + } + if (res[0].status == 'D') { + this.paymentStatus = 'Declined' + } + if (res[0].status == 'S') { + this.paymentStatus = 'Success' + } + this.paymentId = res[0].id + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.paymentStatus = 'Payment Not Started' + this.transactionData.status = 'P' + } + }) + } + + + emdPaymentCheck() { + this._masterService.getMasterDatabyId(apiUrl.paymentUserCheck + `/${this.userId}`, this.tenderId).then(res => { + if (res && res[0].status) { + if (res[0].emdFeeStatus == 'PAYMENT_SUCCESS') { + this.emdFeeStatus = 'Payment success'; + this.payStatus = 'Paid'; + + } + if (res[0].emdFeeStatus == 'PAYMENT_ERROR') { + this.emdFeeStatus = 'Payment Failed' + this.payStatus = `Pay ₹${this.amountReq} `; + } + if (res[0].emdFeeStatus == 'PAYMENT_PENDING') { + this.emdFeeStatus = 'Payment Pending'; + this.payStatus = `Pay ₹${this.amountReq} `; + } + if (res[0].emdFeeStatus == 'PAYMENT_DECLINED') { + this.emdFeeStatus = 'Payment Declined'; + this.payStatus = `Pay ₹${this.amountReq} `; + } + if (res[0].emdFeeStatus == 'PAYMENT_DECLINED') { + this.emdFeeStatus = 'Payment Declined'; + this.payStatus = `Pay ₹${this.amountReq} `; + }if (res[0].emdFeeType == 'DD'){ + + this.payStatus = `Paid`; + + this.emdFeeStatus = 'Selected payment method DD'; + this.PaymentMethodDD='DD'; + + }if(res[0].emdFeeStatus == null && res[0].emdFeeType == null ){ + + this.payStatus = `Pay ₹${this.amountReq} `; + this.emdFeeStatus = 'Payment Not Started'; + + } + + this.paymentId = res[0].id; + } + + }, err => { + if (err.error.message.trim() == "User Payment Not Found") { + this.emdFeeStatus = 'Payment Not Started'; + this.payStatus = `Pay ₹${this.amountReq} `; + // this.transactionData.status = 'P' + } + }) + } + // generateUPIQRCode(upiID: string, amount: string): void { + // const upiLink = `upi://pay?pa=${upiID}&am=${amount}&tn=Tender%20Fee`; + + // QRCode.toDataURL(upiLink, { errorCorrectionLevel: 'L' }, (err, qrDataURL) => { + // if (err) { + // console.error(err); + // return; + // } + + // // const qrImageElement = document.getElementById('qrImage') as HTMLImageElement; + // // qrImageElement.src = qrDataURL; + // // this.qrImage = true + + // }); + // } + + openHelpDialog(templateRef) { + this.dialogRef = this.dialog.open(templateRef, { + width: '700px', + disableClose: false + }); + } + + closeDialog() { + if(this.emdFeePayment){ + this.goBack(); + }else{ + this.dialogRef.close() + + } + } + + nextTab() { + const selectedIndex = this.tabGroup.selectedIndex; + const tabCount = this.tabGroup._tabs.length; + + if (selectedIndex < tabCount - 1) { + this.tabGroup.selectedIndex = selectedIndex + 1; + } + } + prevTab() { + + const selectedIndex = this.tabGroup.selectedIndex; + + if (selectedIndex > 0) { + this.tabGroup.selectedIndex = selectedIndex - 1; + } + } + goTofileUpload(){ + this.router.navigate([`/tender-upload/${this.tenderId}`]) + } + +openDDdialog(tempRef){ + + this.dialogRef = this.dialog.open(tempRef, { + width: '500px', + disableClose: false + }); +} + + + payment(tempRef?){ + + + if(this.payStatus != 'Paid'&& !this.paymentGtwy || this.paymentGtwy == '' || this.paymentGtwy == null || this.paymentGtwy == undefined){ + this._ui.toastMessage('Select Payment Method'); + return + } + if(this.paymentGtwy=='dd'){ + + this.openDDdialog(tempRef) + // this.router.navigate([`tender-upload/${ this.tenderId}/${this.paymentGtwy}`]) + // return + }else if(this.paymentGtwy=='phonepay'){ + + + this.paymentData.amount = this.amountReq; + this.paymentData.mobile = this.mobileNo; + this.paymentData.name = this.userId; + this.paymentData.type = this.screen; + this.paymentData.tenderId =this.tenderId ; + this.paymentData.emdFeeType = this.paymentGtwy ; + + + + this._masterService.saveMasterData(apiUrl.phonepePaymentGtwy,this.paymentData).then(res=>{ + + this.url=res.data.instrumentResponse.redirectInfo.url; + window.location.href = this.url; + // window.open(this.url) + + }) + + + } +} + + + preSave() { + + if (this.transactionData.transId == 0 || this.transactionData.transId == null || this.transactionData.transId == undefined) { + this._ui.toastMessage(this._errorTranslate.translate("pleaseEnterTransId"), 2000, true); + return false; + } + + + + return true; + } + + submit() { + if (!this.preSave()) + return + + this.transactionData.userId = this.userId; + this.transactionData.tenderId = this.tenderId; + + + if(this.paymentId){ + this.transactionData.id = this.paymentId + this._masterService.updateMasterData(apiUrl.paymentMaster, this.transactionData,this.paymentId).then(res=>{ + + this.transactionData = new PaymentInfoDto() + this.getData(); + + }) + } + else + this._masterService.saveMasterData(apiUrl.paymentInfo, this.transactionData).then(res => { + this.transactionData = new PaymentInfoDto() + this.getData(); + }) + } + + uploadDDFiles(event){ + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const fd = new FormData(); + fd.append('file', file ); + this._masterService.getMasterDatabyId(apiUrl.tenderDDdoc +`/${this.userId}`,this.tenderId).then(res=>{ +let length =res.length; + +if(res.length<=0){ + this._masterService.saveMasterData(apiUrl.ddUpload,fd).then(res=>{ + this.ddFile.fileName = res.fileName; + this.ddFile.filePath = res.filePath; + this.docSize = res.fileSizeKB; + + }) +}else{ + this._ui.toastMessage('Document already uploaded ') +} + + }) + + + } + removeDDfile(){ + this._masterService.deleteMasterData(apiUrl.ddUpload,this.ddFile.fileName).then(res=>{ + this.ddFile.fileName = null + this.ddFile.filePath = null + }) + } + + goBack(){ + this.router.navigate(['/dashboard']) + } + + + saveDDdoc(){ + this.ddDocuments.docName = this.ddFile.fileName; + this.ddDocuments.tenderId =this.tenderId; + this.ddDocuments.documentSize = this.docSize; + this.ddDocuments.documentCategory ='DD'; + this.ddDocuments.userId = this.userId; + + this._masterService.saveMasterData(apiUrl.tenderDoc,this.ddDocuments).then(res=>{ + this.router.navigate([`tender-upload/${ this.tenderId}/${this.paymentGtwy}`]) + this.dialogRef.close() + + },err =>{ + this._ui.toastMessage(err.error.message); + + }) + } +} diff --git a/src/app/_modules/user/tender-home/tender-home.component.html b/src/app/_modules/user/tender-home/tender-home.component.html new file mode 100644 index 0000000..d13567c --- /dev/null +++ b/src/app/_modules/user/tender-home/tender-home.component.html @@ -0,0 +1,93 @@ +
+ + + + + + + + + +

+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + +
#TENDER NAMEVIEWUPLOAD
{{ i + 1 }}{{ tender.name }} + + + +
+
+
+
+
+
+


+ + + +
\ No newline at end of file diff --git a/src/app/_modules/user/tender-home/tender-home.component.scss b/src/app/_modules/user/tender-home/tender-home.component.scss new file mode 100644 index 0000000..55e3ab1 --- /dev/null +++ b/src/app/_modules/user/tender-home/tender-home.component.scss @@ -0,0 +1,72 @@ +// .header { + // margin-left: 4%; + // margin-top: 20px; + // } + + // .header>h6{ + // a { + // text-decoration: none; + // color: #262627; + // } + + // a:hover { + // text-decoration: underline; + // cursor: pointer; + // } + // } + + // mat-card{ + // min-width: 180px ; + // // max-width: 20vw; + // height: 200px; + // display: inline-block; + // } + + // mat-card:hover{ + // cursor: pointer; + // } + + + // ----------------------------------------------------------------------------------- + + + + .nav-link:hover { + color: red; + } + + + th, + td { + padding: 10px; + border: 1px solid #ccc; + white-space: nowrap; + + } + + .h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; + } + + + .table td { + word-break: break-word; + } + + .table-break-word { + word-break: break-word; + } + + + + + .img-fluid { + margin-right: 5px; + max-height: 40px; + } + + // .navbar { + // background-position: center; + // } \ No newline at end of file diff --git a/src/app/_modules/user/tender-home/tender-home.component.spec.ts b/src/app/_modules/user/tender-home/tender-home.component.spec.ts new file mode 100644 index 0000000..2b846a2 --- /dev/null +++ b/src/app/_modules/user/tender-home/tender-home.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TenderHomeComponent } from './tender-home.component'; + +describe('TenderHomeComponent', () => { + let component: TenderHomeComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ TenderHomeComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(TenderHomeComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/_modules/user/tender-home/tender-home.component.ts b/src/app/_modules/user/tender-home/tender-home.component.ts new file mode 100644 index 0000000..8de17c2 --- /dev/null +++ b/src/app/_modules/user/tender-home/tender-home.component.ts @@ -0,0 +1,67 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-tender-home', + templateUrl: './tender-home.component.html', + styleUrls: ['./tender-home.component.scss'] +}) +export class TenderHomeComponent implements OnInit { + + + + displayedColumns: string[] = ['no', 'name','download']; + data:any[] = [ + { no:1,name:'Tender 1', city: 'New York' }, + { no:2 , name:'Tender 2', city: 'London' }, + { no:3 , name:'Tender 3', city: 'Paris' }, + + ]; + constructor( private authenticationService: AuthService, + private router: Router,) { } + + ngOnInit(): void { + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + signIn(){ + this.router.navigate(['/login']); + } + + goToHome(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + } + goToContactUs(){ + window.location.href = 'https://www.thrickodithanamscb.in/index.html#contact'; + } + + goToView() { + this.router.navigate(['/tender-view']); + } + + goToUpload(){ + this.router.navigate(['/tender-upload']); + } + + // public getUser(): Observable { + // return of({ + // email: localStorage.getItem('username'), + // name: localStorage.getItem('username'), + + // }); + // } + + navigateTo(destination: any) { + this.router.navigate([destination]) + } + + + +} + diff --git a/src/app/_providers/_directives/amount.directive.ts b/src/app/_providers/_directives/amount.directive.ts new file mode 100644 index 0000000..cf7183f --- /dev/null +++ b/src/app/_providers/_directives/amount.directive.ts @@ -0,0 +1,46 @@ +import { Directive, Input, Output, EventEmitter, SimpleChanges, ChangeDetectorRef } from '@angular/core'; +import { DecimalPipe } from '@angular/common'; + +/* + Created By : Arun Joy + Created On : 20-03-2020 + Created For : For Amount feilds decimal formatting. +*/ + +@Directive({ + selector: '[ictAmount]', + host: { + '[value]': 'ictAmount', + '(change)': 'change($event.target.value)', + } +}) +export class AmountDirective { + + @Input() ictAmount: number; + @Output() ictAmountChange: EventEmitter = new EventEmitter(); + + amtDecPts = 2; + + constructor( + private _cdr: ChangeDetectorRef, + private _decimalPipe: DecimalPipe, + ) { } + + ngOnChanges(changes: SimpleChanges): void { + this.format(this.ictAmount); + } + + change(value) { + this.format(value, "C"); + } + + format(value, flag?: string) { + value = (value && value.toString()) ? (value.toString().replace(/,/gi, "")) : 0; + let pattern = "1." + this.amtDecPts + "-" + this.amtDecPts; + value = this._decimalPipe.transform(value, pattern); + value = value.replace(/,/gi, ""); + // this.ictAmountChange.next(value); + if (!flag || flag != "C") + this._cdr.detectChanges(); + } +} diff --git a/src/app/_providers/_directives/currency.directive.ts b/src/app/_providers/_directives/currency.directive.ts new file mode 100644 index 0000000..5204948 --- /dev/null +++ b/src/app/_providers/_directives/currency.directive.ts @@ -0,0 +1,48 @@ +import { Directive, Input, Output, EventEmitter, ChangeDetectorRef, SimpleChanges } from '@angular/core'; +import { DecimalPipe } from '@angular/common'; + +/* + Created By : Arun Joy + Created On : 20-03-2020 + Created For : For Rate feilds decimal formatting. +*/ + +@Directive({ + selector: '[ictCurrency]', + host: { + '[value]': 'ictCurrency', + '(change)': 'change($event.target.value)', + } +}) +export class CurrencyDirective { + + @Input() ictCurrency: number; + @Output() ictCurrencyChange: EventEmitter = new EventEmitter(); + + coinDec = 2; + + constructor( + private _cdr: ChangeDetectorRef, + private _decimalPipe: DecimalPipe + ) { } + + ngOnChanges(changes: SimpleChanges): void { + this.format(this.ictCurrency); + } + + change(value) { + this.format(value, "C"); + } + + format(value, flag?: string) { + value = (value && value.toString()) ? (value.toString().replace(/,/gi, "")) : 0; + let coinDec = this.coinDec; + let pattern = "1." + coinDec + "-" + coinDec; + value = this._decimalPipe.transform(value, pattern); + value = value.replace(/,/gi, ""); + // this.ictCurrencyChange.next(value); + if (!flag || flag != "C") + this._cdr.detectChanges(); + } + +} diff --git a/src/app/_providers/_directives/format.directive.ts b/src/app/_providers/_directives/format.directive.ts new file mode 100644 index 0000000..a6fe38a --- /dev/null +++ b/src/app/_providers/_directives/format.directive.ts @@ -0,0 +1,47 @@ +import { Directive, Input, Output, EventEmitter, SimpleChanges, ChangeDetectorRef } from '@angular/core'; +import { DecimalPipe } from '@angular/common'; + +/* + Created By : Arun Joy + Created On : 20-03-2020 + Created For : For Amount feilds decimal formatting. +*/ + +@Directive({ + selector: '[ictFormat]', + host: { + '[value]': 'ictFormat', + '(change)': 'change($event.target.value)', + } +}) +export class FormatDirective { + + @Input() ictFormat: number; + @Output() ictFormatChange: EventEmitter = new EventEmitter(); + @Input() arg: string; + + constructor( + private _cdr: ChangeDetectorRef, + private _decimalPipe: DecimalPipe, + ) { } + + ngOnChanges(changes: SimpleChanges): void { + // console.log("===arg===", this.arg); + this.format(this.ictFormat); + } + + change(value) { + this.format(value, "C"); + } + + format(value, flag?: string) { + value = (value && value.toString()) ? (value.toString().replace(/,/gi, "")) : 0; + // let pattern = "1." + this._icoService.currentCompanyDetails.amtDecPts + "-" + this._icoService.currentCompanyDetails.amtDecPts; + let pattern = "1.2-2"; + value = this._decimalPipe.transform(value, pattern); + value = value.replace(/,/gi, ""); + // this.ictFormatChange.next(value); + if (!flag || flag != "C") + this._cdr.detectChanges(); + } +} diff --git a/src/app/_providers/_directives/numberOnly.directive.ts b/src/app/_providers/_directives/numberOnly.directive.ts new file mode 100644 index 0000000..059516c --- /dev/null +++ b/src/app/_providers/_directives/numberOnly.directive.ts @@ -0,0 +1,48 @@ +import { Directive, ElementRef, HostListener } from '@angular/core'; + +/* + created by Ajith A Pradeep + created on 03/03/2023 +*/ +@Directive({ + selector: '[numberOnly]' +}) +export class NumberOnlyDirective { + + private regex: RegExp = new RegExp(/^\d*\.?\d{0,2}$/g); + + constructor(private el: ElementRef) { } + + // Listen for all keydown events on the input field + @HostListener('keydown', ['$event']) + onKeyDown(event: KeyboardEvent) { + // Allow backspace, delete, and navigation keys (arrows) + if ([46, 8, 9, 27, 13, 110, 190].indexOf(event.keyCode) !== -1 || + // Allow Ctrl/Cmd+A, Ctrl/Cmd+C, Ctrl/Cmd+X + (event.keyCode === 65 || event.keyCode === 67 || event.keyCode === 88) && (event.ctrlKey || event.metaKey)) { + return; + } + // Do not allow anything else that is not a number or decimal point + if ((event.shiftKey || event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105) && event.keyCode !== 190 && event.keyCode !== 110) { + event.preventDefault(); + } + } + + // Listen for all input events on the input field (copy-paste, drag-and-drop, etc.) + @HostListener('input', ['$event']) onInputChange(event: any) { + const initialValue = this.el.nativeElement.value; + const newValue = initialValue.replace(/[^0-9\.]/g, ''); // Remove any character that isn't a number or decimal point + const parts = newValue.split('.'); + if (parts.length > 1) { + // Limit to two decimal places + this.el.nativeElement.value = `${parts[0]}.${parts[1].substring(0, 2)}`; + } else { + this.el.nativeElement.value = parts[0]; + } + if (initialValue !== this.el.nativeElement.value) { + // Emit change event to update host component property + event.stopPropagation(); + this.el.nativeElement.dispatchEvent(new Event('input')); + } + } +} \ No newline at end of file diff --git a/src/app/_providers/_directives/rate.directive.ts b/src/app/_providers/_directives/rate.directive.ts new file mode 100644 index 0000000..6ce49f0 --- /dev/null +++ b/src/app/_providers/_directives/rate.directive.ts @@ -0,0 +1,47 @@ +import { Directive, Input, Output, EventEmitter, ChangeDetectorRef, SimpleChanges } from '@angular/core'; +import { DecimalPipe } from '@angular/common'; + +/* + Created By : Arun Joy + Created On : 20-03-2020 + Created For : For Rate feilds decimal formatting. +*/ + +@Directive({ + selector: '[ictRate]', + host: { + '[value]': 'ictRate', + '(change)': 'change($event.target.value)', + } +}) +export class RateDirective { + + @Input() ictRate: number; + @Output() ictRateChange: EventEmitter = new EventEmitter(); + + rateDecPts: number = 2; + + constructor( + private _cdr: ChangeDetectorRef, + private _decimalPipe: DecimalPipe + ) { } + + ngOnChanges(changes: SimpleChanges): void { + this.format(this.ictRate); + } + + change(value) { + this.format(value, "C"); + } + + format(value, flag?: string) { + value = (value && value.toString()) ? (value.toString().replace(/,/gi, "")) : 0; + let pattern = "1." + this.rateDecPts + "-" + this.rateDecPts; + value = this._decimalPipe.transform(value, pattern); + value = value.replace(/,/gi, ""); + // this.ictRateChange.next(value); + if (!flag || flag != "C") + this._cdr.detectChanges(); + } + +} diff --git a/src/app/_providers/_domain/appconfig.ts b/src/app/_providers/_domain/appconfig.ts new file mode 100644 index 0000000..f10fc54 --- /dev/null +++ b/src/app/_providers/_domain/appconfig.ts @@ -0,0 +1,6 @@ +export interface AppConfig { + inputStyle?: string; + dark?: boolean; + theme?: string; + ripple?: boolean; +} \ No newline at end of file diff --git a/src/app/_providers/_environment/environment.token.ts b/src/app/_providers/_environment/environment.token.ts new file mode 100644 index 0000000..55edbc3 --- /dev/null +++ b/src/app/_providers/_environment/environment.token.ts @@ -0,0 +1,4 @@ +// environmenter.token.ts +import { InjectionToken, Inject } from '@angular/core'; +// That last string is just a description for debugging purpose +export const ENVIRONMENTER = new InjectionToken('Environmenter'); \ No newline at end of file diff --git a/src/app/_providers/_resources/api-url.properties.ts b/src/app/_providers/_resources/api-url.properties.ts new file mode 100644 index 0000000..28531f9 --- /dev/null +++ b/src/app/_providers/_resources/api-url.properties.ts @@ -0,0 +1,92 @@ + + +export const apiUrl = { + login: "auth/signin", + googleSignIn: "auth/google", + facebookSignIn: "auth/facebook", + userInfo: "auth/user-info", + getTender: "tender", + AllTenderData: "tender", + TenderType: "tender-type", + TenderCategory: "tender-category", + PaymentMode: "payment-mode", + formcontract: "form-of-contract", + productcategory: "product-category", + emdFeeType: "emd-fee-type", + documentType: "document-type", + drawingUploadDoc:"file-upload/drawings", + nitUploadDoc:"file-upload/notice", + coverslov: "covers-lov", + fileformatlov:"file-format-lov", + userDocUpload:"file-upload/user-documents", + fileDelete:"file-upload/R-userDoc", + tenderDoc:"tender-doc", + fileFormat:"file-format-lov", + docUpload: "file-upload/Bank-documents", + paymentGateway: "payment-gateway", + userImageUpload: "file-upload/user", + changePassword: 'iuser/change-password', + cryptoEncrypt: "crypto/encrypt", + cryptoDecrypt: "crypto/decrypt", + registerOtp: 'auth/otp/R', + validateRegisterOtp: 'auth/verifyOtp/R', + signup: 'auth/signup', + bankDocs: 'file-upload/Bank-Documents-Arc', + drawingsDownloadDocs: "file-upload/Drawings-Arc", + adminTenderView:'tender/admin', + drawingsDelete: "file-upload/R-drawing", + widDelete:"file-upload/R-bankDoc", + noticeDelete:"file-upload/R-notice", + feePaymentCancel: "fee-payment/cancel", + noticeDownlaod:"file-upload/notice", + bidReport:"payment-master/bid-report", + userBidDoc:"file-upload/user-doc-arc", + UploadBidAmount:"payment-master/finalBidAmt", + paymentCheck:"payment-master/bid-payment-check", + emailUserSubmit:"auth/otp/UD", + UserUploadCheck :"tender-doc/userDocCheck", + emailReport:"email/report", + paymentInfo:"payment-master/paymentInfo", + paymentMaster:"payment-master", + paymentUserCheck:"payment-master/userBidPaymentCheck", + paymentupdatePaymentStatus:"payment-master/updatePaymentStatus", + common:"common", + confirmPayment:"auth/otp/CP", + digitalSignature: "report-authentication/upload-certificate", + TenderStatus: "tender/status", + tenderCategory:"tender-category", + category:"category", + userCategory:"category-master/getusercategory", + userData:"admin/user-data", + categoryEdit:"category-master/edit", + basicCategory:"basic-category", + subcategory:"tender-subcategory", + statusVerify:"auth/statusVerify", + reqUser:"auth/reqUser", + email: "email", + closedTenderUsers: "closed-tender-users/users", + users:"admin/users", + userTender:"tender/user", + gallery:"images", + picture:"file-upload/picture", + subGalleryImg:"sub-gallery/image", + phonepePaymentGtwy:"phonepe-payment-gateway", + galleryImage:"gallery/image", + ddUpload:"file-upload/dd", + tenderDDdoc : "tender-doc/dd", + cmpPrFileUpload: "file-upload/company-profile", + projectCompleteCertFile:"file-upload/project-complete_cert", + report:"email/report", + revisedTender:"revised-tender", + quotedTender:"file-upload/quoted-tender", + revisedFileUpload:"revised-tender/document-upload", + tenderSubCategory:"tender-subcategory", + userDetails:"auth/user-data", + revisedTenderUsers:"revised-tender/users", + revisedTenderReport:"revised-tender/report" + +}; + +export const apiFilterProperties = { + +}; \ No newline at end of file diff --git a/src/app/_providers/_resources/route-path.properties.ts b/src/app/_providers/_resources/route-path.properties.ts new file mode 100644 index 0000000..40467b0 --- /dev/null +++ b/src/app/_providers/_resources/route-path.properties.ts @@ -0,0 +1,11 @@ + +export const routePath = { + home:"/auth/admin-home", + login: "/auth/login", + dashboard: "/dashboard", + website:"/auth/website", + analyst:"/analyst/dashboard", + superAdmin:"/sadmin/dashboard", + admin:"/admin/dashboard", + user:"/dashboard" +}; \ No newline at end of file diff --git a/src/app/_providers/_services/appconfigservice.ts b/src/app/_providers/_services/appconfigservice.ts new file mode 100644 index 0000000..ffb846a --- /dev/null +++ b/src/app/_providers/_services/appconfigservice.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { Subject } from 'rxjs'; +import { AppConfig } from '../_domain/appconfig'; + +@Injectable() +export class AppConfigService { + + config: AppConfig = { + theme: 'saga-blue', + dark: false, + inputStyle: 'outlined', + ripple: true + }; + + private configUpdate = new Subject(); + + configUpdate$ = this.configUpdate.asObservable(); + + updateConfig(config: AppConfig) { + this.config = config; + this.configUpdate.next(config); + } + + getConfig() { + return this.config; + } +} \ No newline at end of file diff --git a/src/app/_providers/_services/auth.service.ts b/src/app/_providers/_services/auth.service.ts new file mode 100644 index 0000000..8014625 --- /dev/null +++ b/src/app/_providers/_services/auth.service.ts @@ -0,0 +1,158 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Router } from '@angular/router'; +import { apiUrl } from '../_resources/api-url.properties'; +import { routePath } from '../_resources/route-path.properties'; +import { ProvidersService } from '../providers.service'; +import { BehaviorSubject, Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; +import { AuthenticationDto } from 'src/app/_dto/authentication.dto'; +import { TokenDto } from 'src/app/_dto/token.dto'; + + +/* + Created By : Arun Joy + Created On : 14-01-2020 + Created For : Created for getting authentication data from authentication API. +*/ + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + + headers: HttpHeaders = new HttpHeaders(); + + environment: any; + firebaseToken: string = '' + + currentUserShortInfo: { userId: string, userName: string, userImagePath: string } = { userId: '', userName: '', userImagePath: '' }; + private currentUserSubject: BehaviorSubject; + public currentUser: Observable; + + constructor( + private http: HttpClient, + private router: Router, + private conn: ProvidersService + ) { + this.environment = this.conn.environment; + this.currentUserSubject = new BehaviorSubject(localStorage.getItem('authtoken') ? true : false); + this.currentUser = this.currentUserSubject.asObservable(); + } + + public get currentUserValue(): any { + return this.currentUserSubject.value; + } + + signIn(param: AuthenticationDto) + : Promise { + this.headers.append('Content-Type', 'application/json'); + this.headers.append('emailid', param.username); + return (this.http.post(`${this.environment.apiUrl}/${apiUrl.login}`, param) + .pipe(map(user => { + // console.log("=======user========", user) + if (user && user != null) { + // console.log("=======user======1==", user) + // if (user.accessToken) + this.currentUserSubject.next(user); + // else + // return user; + } + return user; + }))) + .toPromise(); + } + + getUserModule(param: AuthenticationDto): Promise { + return this.http.get(`${this.environment.apiUrl}/${apiUrl.login}`, { headers: { 'emailid': param.username } }).toPromise(); + } + + getUserInfo(): Promise<{ userId: string, userName: string, userImagePath: string, userEmail: string, userMobile: string }> { + return this.http.get(`${this.environment.apiUrl}/${apiUrl.userInfo}`).toPromise(); + } + + facebookSignIn() { + var myWindow = window.open(`${this.environment.apiUrl}/${apiUrl.facebookSignIn}`, "_system", "width=400,height=400,toolbar=yes,scrollbars=yes,resizable=yes"); + // console.log("====my window", myWindow); + + let timer = setInterval(() => { + if (myWindow.closed) { + clearInterval(timer); + let token = localStorage.getItem("authtoken"); + if (token) { + this.router.navigate([routePath.dashboard]); + } + } + }, 1000); + + } + + googleSignIn() { + var myWindow = window.open(`${this.environment.apiUrl}/${apiUrl.googleSignIn}`, "_system", "width=400,height=400,toolbar=yes,scrollbars=yes,resizable=yes"); + // console.log("====my window", myWindow); + + let timer = setInterval(() => { + if (myWindow.closed) { + clearInterval(timer); + let token = localStorage.getItem("authtoken"); + if (token) { + this.router.navigate([routePath.dashboard]); + } + } + }, 1000); + + } + + async logOut() { + localStorage.setItem('authtoken', ''); + localStorage.setItem('refreshtoken', ''); + localStorage.setItem('emailId', ''); + localStorage.setItem('module', ''); + await localStorage.removeItem('authtoken'); + localStorage.removeItem('refreshtoken'); + localStorage.removeItem('emailId'); + localStorage.removeItem('module'); + localStorage.removeItem('passwordVersion'); + this.currentUserSubject.next(null); + // await this.router.navigate([routePath.login]); + // location.reload(); + // this.navCntrl.navigateBack('/Login'); + let institute = localStorage.getItem("institute"); + this.router.navigate([routePath.login]); + } + + + async getUserImage(imageName: string): Promise { + return this.http.get(`${this.environment.apiUrl}/${apiUrl.userImageUpload}/${imageName}`, { responseType: 'blob' }).toPromise(); + } + + async changePassword(body, id?): Promise { + return await this.http.patch(`${this.environment.apiUrl}/${"user/change-password"}`, body).toPromise(); + } + + async patchToken(): Promise { + // console.log(this.firebaseToken, 'firebase token'); + + return await this.http.patch(`${this.environment.apiUrl}/${"user/firebase"}`, { token: this.firebaseToken }).toPromise(); + } + + // async validatePassword(authCredentials:AuthenticationDto) + // { + // console.log("===validatePassword authCredentials====",authCredentials); + // return this.http.get(`${this.environment.apiUrl}/${apiUrl.validatePassword}/${authCredentials}`).toPromise(); + // } + + async sendOtp(email,FR): Promise { + console.log("==",email) + return await this.http.post(`${this.environment.apiUrl}/${"auth/otp"}/${FR}`,email).toPromise(); + } + + async verifyOtp(body,FR): Promise { + return await this.http.post(`${this.environment.apiUrl}/${"auth/verifyOtp"}/${FR}`,body).toPromise(); + } + + async forgotPassword(body): Promise { + return await this.http.post(`${this.environment.apiUrl}/${"auth/forgot-password"}`,body).toPromise(); + } + +} diff --git a/src/app/_providers/_services/error-translate.service.ts b/src/app/_providers/_services/error-translate.service.ts new file mode 100644 index 0000000..c3ab871 --- /dev/null +++ b/src/app/_providers/_services/error-translate.service.ts @@ -0,0 +1,56 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { ProvidersService } from '../providers.service'; + + +/************************** + Created by Ajith A Pradeep + Created on 21/03/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class ErrorTranslateService { + + helpPrimaryData: any = {}; + helpSecondaryData: any = {}; + + environment: any; + primaryLangauge: any="en"; + + constructor( + private httpClient: HttpClient, + private conn: ProvidersService + ) { + this.environment = this.conn.environment; + this.init(); + } + + async init() { + await this.getPrimarySecondryLangauge(); + } + + async getPrimarySecondryLangauge(): Promise { + this.helpPrimaryData = await this.getErrorJsonData(this.primaryLangauge); + } + + translate(code: string): string { + return this.first(code) ; + } + + first(code: string): string { + switch (this.primaryLangauge) { + case "": return; + default: + return this.helpPrimaryData[code] ? (this.helpPrimaryData[code]) : code; + } + } + + + private async getErrorJsonData(lang: string): Promise { + if (!lang || lang.trim() == "") return {}; + return await this.httpClient.get(`assets/i18n/error/${lang}.json`).toPromise(); + } + +} diff --git a/src/app/_providers/_services/master.service.ts b/src/app/_providers/_services/master.service.ts new file mode 100644 index 0000000..b8c7bb3 --- /dev/null +++ b/src/app/_providers/_services/master.service.ts @@ -0,0 +1,136 @@ +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { UiService } from './ui.service'; +import { saveAs } from 'file-saver'; + +/************************** + Created by Ajith A Pradeep + Created on 04/04/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class MasterService { + + loading: boolean = false; + + constructor( + private http: HttpClient, + private _uiService: UiService + ) { } + + + + async getMasterData(apiUrl, filter?: string): Promise { + if (!filter) + filter = '' + return await this.http.get(`${environment.apiUrl}/${apiUrl}${filter}`).toPromise(); + } + + async getMasterDatabyId(apiUrl, id): Promise { + return await this.http.get(`${environment.apiUrl}/${apiUrl}/${id}`).toPromise(); + } + + async saveMasterData(apiUrl, body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}`, body).toPromise(); + } + + async saveAllMasterData(apiUrl, body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}`, body).toPromise(); + } + + async postMasterData(apiUrl, body, id): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}/${id}`, body).toPromise(); + } + + async updateMasterData(apiUrl, body, id): Promise { + return await this.http.put(`${environment.apiUrl}/${apiUrl}/${id}`, body).toPromise(); + } + + async deleteMasterDataById(apiUrl, body, id): Promise { + return await this.http.delete(`${environment.apiUrl}/${apiUrl}/${id}`, body).toPromise(); + } + async deleteMasterData(apiUrl, id): Promise { + return await this.http.delete(`${environment.apiUrl}/${apiUrl}/${id}`).toPromise(); + } + + async saveImage(apiUrl, body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}`, body).toPromise(); + } + + async getImg(apiUrlEnd: string, imagePath: string) { + return await this.http.get(`${environment.apiUrl}/${apiUrlEnd}/${imagePath}`, { responseType: 'blob' }).toPromise(); + } + + async getJsonData(name: string): Promise { + if (!name || name.trim() == "") return {}; + return await this.http.get(`assets/i18n/json/${name}.json`).toPromise(); + } + + + async getLovDataFormat(endUrl, filterCondition?) { + let data = [] + this.loading = true; + let filter = '' + if (filterCondition) { + filter = filterCondition + } + await this.getMasterData(endUrl, filter).then((res: any[]) => { + data = res; + this.loading = false; + }, + err => { + this.loading = false; + // console.log("----err----", err); + this._uiService.toastMessage(err.error.message, 5000, true); + }); + return data; + } + + + downloadFile(apiUrl,fileUrl){ + // const fileUrl = 'https://example.com/path/to/your/file'; + const authToken = `Bearer ${localStorage.getItem('authtoken')}`; // Replace with your actual authentication token + + // Set up headers with authentication token + const headers = new HttpHeaders({ + Authorization: authToken, + 'Content-Type': 'application/json', // Adjust content type as needed + }); + + // Make an authenticated HTTP request to download the file + this.http.get(`${environment.apiUrl}/${apiUrl}/${fileUrl}`, { headers, responseType: 'blob' }) + .subscribe((response: any) => { + // Save the file using FileSaver.js + saveAs(response, 'downloaded-file.zip'); + }); + } + + + + downloadFileWithAuth(apiUrl,fileName): Promise { + const authToken = `Bearer ${localStorage.getItem('authtoken')}`; // Replace with your actual authentication token + + const headers = new HttpHeaders({ + Authorization: authToken, + 'Content-Type': 'application/json', + }); + + return new Promise((resolve, reject) => { + this.http + .get(`${environment.apiUrl}/${apiUrl}/${fileName}`, { headers, responseType: 'blob' }) + .subscribe( + (response: any) => { + saveAs(response, `${fileName}`); + resolve(); + }, + (error) => { + reject(error); + } + ); + }); + } + +} diff --git a/src/app/_providers/_services/menu.service.ts b/src/app/_providers/_services/menu.service.ts new file mode 100644 index 0000000..3a31251 --- /dev/null +++ b/src/app/_providers/_services/menu.service.ts @@ -0,0 +1,35 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; + +/************************** + Created by Ajith A Pradeep + Created on 02/04/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class MenuService { + + menuData: any; + + favouriteMenuData: any; + + public isShowSidebar: boolean; + + constructor( + private httpClient: HttpClient + ) { } + + async getJsonData(name: string): Promise { + if (!name || name.trim() == "") return {}; + return await this.httpClient.get(`assets/i18n/json/${name}.json`).toPromise(); + } + + async getMenuData(apiUrl, filter?): Promise { + if (!filter) + filter = '' + return await this.httpClient.get(`${environment.apiUrl}/${apiUrl}${filter}`).toPromise(); + } +} diff --git a/src/app/_providers/_services/support.service.ts b/src/app/_providers/_services/support.service.ts new file mode 100644 index 0000000..b13001d --- /dev/null +++ b/src/app/_providers/_services/support.service.ts @@ -0,0 +1,43 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { IgissueDetailDto } from 'src/app/_dto/igissue-detail.dto'; +import { IgissueSummaryDto } from 'src/app/_dto/igissue-summary.dto'; +import { environment } from 'src/environments/environment'; +import { apiUrl } from '../_resources/api-url.properties'; + + +@Injectable({ + providedIn: 'root' +}) +export class SupportService { + + constructor(private http: HttpClient, + ) { } + + async getMasterData(apiEndUrl: string, filter?: string): Promise { + return await this.http.get(`${environment.apiUrl}/${apiEndUrl}`).toPromise(); + } + + async save(body: any): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.issueTracker}`, body).toPromise(); + } + + + async getDetailMasterData(apiEndUrl: string, filter?: string): Promise { + return await this.http.get(`${environment.apiUrl}/${apiEndUrl}/${filter}`).toPromise(); + } + + async updateMasterData(apiEndurl: string, body: any): Promise { + return await this.http.post(`${environment.apiUrl}/${apiEndurl}`, body).toPromise(); + } + + async updateDetailData(apiEndUrl: string, body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiEndUrl}`, body).toPromise(); + } + + async getImg(apiUrlEnd: string, imagePath: string) { + return await this.http.get(`${environment.apiUrl}/${apiUrlEnd}/${imagePath}`, { responseType: 'blob' }).toPromise(); + } + + +} diff --git a/src/app/_providers/_services/transaction.service.ts b/src/app/_providers/_services/transaction.service.ts new file mode 100644 index 0000000..7134368 --- /dev/null +++ b/src/app/_providers/_services/transaction.service.ts @@ -0,0 +1,106 @@ +import { DatePipe } from '@angular/common'; +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; +import { apiUrl } from '../_resources/api-url.properties'; +import { PurchaseDto } from 'src/app/_dto/purchase.dto'; + +/************************** + Created by Ajith A Pradeep + Created on 07/05/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class TransactionService { + + constructor( + private http: HttpClient, + private _datePipe:DatePipe + ) { } + + dateFormatting(dateValue) { + let inputDate = new Date(dateValue) + let today = new Date() + let formattedDate + if (inputDate < today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { + formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 23:59:59" + } + else if (inputDate > today && this._datePipe.transform(inputDate, 'dd/MM/yyyy') != this._datePipe.transform(today, 'dd/MM/yyyy')) { + formattedDate = this._datePipe.transform(new Date(inputDate), 'yyyy/MM/dd') + " 00:00:01" + } + else { + formattedDate = this._datePipe.transform(new Date(), 'yyyy/MM/dd HH:mm:ss') + } + return formattedDate + } + + async getTransactionData(apiUrl, filter?: string): Promise { + if (!filter) + filter = '' + return await this.http.get(`${environment.apiUrl}/${apiUrl}${filter}`).toPromise(); + } + + async getTransactionDatabyId(apiUrl, id): Promise { + return await this.http.get(`${environment.apiUrl}/${apiUrl}/${id}`).toPromise(); + } + + async saveTransactionData(apiUrl, body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}`, body).toPromise(); + } + + async updateTransactionData(apiUrl, body, id): Promise { + return await this.http.put(`${environment.apiUrl}/${apiUrl}/${id}`, body).toPromise(); + } + + async deleteTransactionData(apiUrl, id): Promise { + return await this.http.delete(`${environment.apiUrl}/${apiUrl}/${id}`).toPromise(); + } + + // async getFormNo(prefix): Promise { + // return await this.http.get(`${environment.apiUrl}/${apiUrl.admissionFormNo}?where[prefix]=${prefix}`).toPromise(); + // } + + // async getAdmissionNo(filter): Promise { + // return await this.http.get(`${environment.apiUrl}/${apiUrl.admissionNo}${filter}`).toPromise(); + // } + + // async saveDiscount(body): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.applyDiscount}`, body).toPromise(); + // } + + // async saveSection(body): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.studentUpdateSection}`, body).toPromise(); + // } + + async encryptedCode(code): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.cryptoEncrypt}`, { data: code }).toPromise(); + } + + async decryptedCode(code): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.cryptoDecrypt}`, { data: code }).toPromise(); + } + + async sendOtp(email, FR): Promise { + return await this.http.post(`${environment.apiUrl}/${"sms-api/otp"}/${FR}`, email).toPromise(); + } + + async verifyOtp(body, FR): Promise { + return await this.http.post(`${environment.apiUrl}/${"sms-api/verifyOtp"}/${FR}`, body).toPromise(); + } + + async createPayment(paymentRequest: PurchaseDto): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.paymentGateway}`, paymentRequest).toPromise(); + } + + // async createPublicPayment(paymentRequest: PurchaseDto): Promise { + // return await this.http.post(`${environment.apiUrl}/${apiUrl.publicPaymenGateway}`, paymentRequest).toPromise(); + // } + + async cancelPayment(id: number): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.feePaymentCancel}`, { id: id }).toPromise(); + } + +} + diff --git a/src/app/_providers/_services/ui.service.ts b/src/app/_providers/_services/ui.service.ts new file mode 100644 index 0000000..5a0df19 --- /dev/null +++ b/src/app/_providers/_services/ui.service.ts @@ -0,0 +1,149 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { environment } from 'src/environments/environment'; +import { apiUrl } from '../_resources/api-url.properties'; +import { ToWords } from 'to-words'; +import { AuthService } from './auth.service'; +import { ErrorTranslateService } from './error-translate.service'; + +/************************** + Created by Ajith A Pradeep + Created on 21/03/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class UiService { + + isCapitalized: boolean = true; + + toWords = new ToWords({ + localeCode: 'en-IN', + converterOptions: { + currency: true, + ignoreDecimal: false, + ignoreZeroCurrency: false, + doNotAddOnly: false, + } + }); + + numberToWords = new ToWords(); + + constructor( + public _snackBar: MatSnackBar, + private http: HttpClient, + private authService: AuthService, + private _errorTranslateService: ErrorTranslateService + ) { + + } + + parseDate(dateString: string): Date { + if (dateString) { + return new Date(dateString); + } + return null; + } + + toastMessage(message: string, timeDuration?: number, error?: boolean, green?: boolean, button?: string) { + let defaultButton = "Close"; + let defaultTime = 3000; + if (button && button != null) + defaultButton = button; + if (timeDuration && timeDuration != null) + defaultTime = timeDuration + if (error) + this._snackBar.open(message, defaultButton, { duration: defaultTime, panelClass: ['mat-toolbar', 'mat-warn'] }); + + else if (error && green) + this._snackBar.open(message, defaultButton, { duration: defaultTime, panelClass: ['mat-toolbar', 'mat-warn'] }); + else if (green && !error) + this._snackBar.open(message, defaultButton, { duration: defaultTime, panelClass: ['custom-green-snackbar'] }); + else + this._snackBar.open(message, defaultButton, { duration: defaultTime }); + + } + + + openSnackBar(message: string, action: string) { + this._snackBar.open(message, action); + } + + admissionNoValidation(number) { + let regex = new RegExp(/^\d{4}$/i) + return regex.test(number) + } + + phoneNoValidation(number) { + let regex = new RegExp(/^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[6789]\d{9}$/); + return regex.test(number) + } + + emailValidation(email) { + let regex = new RegExp(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/); + return regex.test(email) + } + + alphabetsOnlyValidation(stringValue) { + let regex = new RegExp(/^[a-zA-Z ]*$/); + return regex.test(stringValue); + } + + async getUserInfo(body): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl.userInfo}`, body).toPromise(); + } + + getInstitution() { + let institution = { + name: '', + logo: '', + fullName: '' + } + + institution.name = localStorage.getItem('institute'); + if (institution.name) { + switch (institution.name) { + case 'salesapp': + institution.logo = "./../../../../../assets/accurate/images/salesapp.jpg"; + break; + case 'dav': + institution.logo = "./../../../../../assets/accurate/images/dav.png"; + break; + default: + institution.logo = './../../../../../assets/accurate/images/institute.png'; + break; + } + } else { + institution.logo = './../../../../../assets/accurate/images/institute.png'; + } + + return institution; + } + + async userValidation() { + // await this.getUserInfo().then((res) => { + + // }, (err) => { + // console.log("err==", err); + // this.toastMessage((err.error.message) ? err.error.message : this._errorTranslateService.translate('errorInApi')); + // }); + } + + async capitalizeInputs() { + + if (this.isCapitalized) { + let inputs = document.querySelectorAll(".capitalise"); + inputs.forEach(item => { + item.addEventListener("input", this.capitalize, true); + }); + } + } + + capitalize(e) { + e.target.value = e.target.value.toUpperCase(); + } + + +} \ No newline at end of file diff --git a/src/app/_providers/_services/validation.service.ts b/src/app/_providers/_services/validation.service.ts new file mode 100644 index 0000000..358d6f8 --- /dev/null +++ b/src/app/_providers/_services/validation.service.ts @@ -0,0 +1,26 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { environment } from 'src/environments/environment'; + + +/************************** + Created by Abhijith + Created on 06/05/2022 + **************************/ + +@Injectable({ + providedIn: 'root' +}) +export class ValidationService { + + constructor( + private http: HttpClient + ) { } + + async validateFormNo(apiUrl, formNo): Promise { + return await this.http.post(`${environment.apiUrl}/${apiUrl}`, { formNo: formNo }).toPromise(); + } + + + +} diff --git a/src/app/_providers/providers.component.ts b/src/app/_providers/providers.component.ts new file mode 100644 index 0000000..66144ec --- /dev/null +++ b/src/app/_providers/providers.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'lib-providers', + template: ` +

+ providers works! +

+ `, + styles: [ + ] +}) +export class ProvidersComponent implements OnInit { + + constructor() { } + + ngOnInit(): void { + } + +} diff --git a/src/app/_providers/providers.module.ts b/src/app/_providers/providers.module.ts new file mode 100644 index 0000000..592d63c --- /dev/null +++ b/src/app/_providers/providers.module.ts @@ -0,0 +1,33 @@ +import { NgModule, ModuleWithProviders } from '@angular/core'; +import { ProvidersComponent } from './providers.component'; +import { ENVIRONMENTER } from './_environment/environment.token'; +import { HttpClientModule } from '@angular/common/http'; +import { AmountDirective } from './_directives/amount.directive'; +import { DecimalPipe } from '@angular/common'; +import { RateDirective } from './_directives/rate.directive'; +import { FormatDirective } from './_directives/format.directive'; +import { CurrencyDirective } from './_directives/currency.directive'; +import { NumberOnlyDirective } from './_directives/numberOnly.directive'; + +@NgModule({ + declarations: [ProvidersComponent, AmountDirective, RateDirective, FormatDirective, CurrencyDirective + ,NumberOnlyDirective], + imports: [ + HttpClientModule, + ], + exports: [ProvidersComponent, AmountDirective, RateDirective, FormatDirective, CurrencyDirective + ,NumberOnlyDirective], + providers: [DecimalPipe] +}) +export class ProvidersModule { + + static forRoot(config: any): ModuleWithProviders { + return { + ngModule: ProvidersModule, + providers: [ + { provide: ENVIRONMENTER, useValue: config } + ] + }; + } + +} diff --git a/src/app/_providers/providers.service.ts b/src/app/_providers/providers.service.ts new file mode 100644 index 0000000..4e152bf --- /dev/null +++ b/src/app/_providers/providers.service.ts @@ -0,0 +1,14 @@ +import { Injectable, Inject } from '@angular/core'; +import { ENVIRONMENTER } from './_environment/environment.token'; + +@Injectable({ + providedIn: 'root' +}) +export class ProvidersService { + + constructor( + @Inject(ENVIRONMENTER) public environment: any + ) { } + +} + diff --git a/src/app/_window/time-out-dialog/time-out-dialog.component.html b/src/app/_window/time-out-dialog/time-out-dialog.component.html new file mode 100644 index 0000000..26c67f1 --- /dev/null +++ b/src/app/_window/time-out-dialog/time-out-dialog.component.html @@ -0,0 +1,9 @@ +

+
+

{{data.state}}

+ +
+
+ + +
\ No newline at end of file diff --git a/src/app/_window/time-out-dialog/time-out-dialog.component.scss b/src/app/_window/time-out-dialog/time-out-dialog.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/_window/time-out-dialog/time-out-dialog.component.ts b/src/app/_window/time-out-dialog/time-out-dialog.component.ts new file mode 100644 index 0000000..ffbadef --- /dev/null +++ b/src/app/_window/time-out-dialog/time-out-dialog.component.ts @@ -0,0 +1,30 @@ +import { Component, Inject, OnInit } from '@angular/core'; +import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; + + +/************************** + Created by Ajith A Pradeep + Created on 21/03/2022 + **************************/ + + +@Component({ + selector: 'app-time-out-dialog', + templateUrl: './time-out-dialog.component.html', + styleUrls: ['./time-out-dialog.component.scss'] +}) +export class TimeOutDialogComponent implements OnInit { + + constructor( + public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data: any, + ) { } + + ngOnInit(): void { + } + + onNoClick(state): void { + this.dialogRef.close({ data: state }); + } + +} diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts new file mode 100644 index 0000000..a22183f --- /dev/null +++ b/src/app/app-routing.module.ts @@ -0,0 +1,30 @@ +import { PreloadAllModules, RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; +import { AuthGuard } from './_core/_guard/auth.guard'; +import { AppGuard } from './_core/_guard/app.guard'; +import { SuperAdminAuthGuard } from './_core/_guard/superadmin.guard'; +import { AnalystAuthGuard } from './_core/_guard/analysts.guard'; +import { AdminAuthGuard } from './_core/_guard/admin.guard'; +import { UserAuthGuard } from './_core/_guard/user.guard'; + +const routes: Routes = [ + { path: 'auth', canActivate: [AppGuard], loadChildren: () => import('./_modules/auth/auth.module').then(m => m.AuthModule) }, + { path: 'analyst', canActivate: [AnalystAuthGuard], canActivateChild: [AnalystAuthGuard], loadChildren: () => import('./_modules/analyst/dashboard.module').then(m => m.DashboardModule) }, + { path: 'admin', canActivate: [AdminAuthGuard], canActivateChild: [AdminAuthGuard], loadChildren: () => import('./_modules/admin/dashboard.module').then(m => m.DashboardModule) }, + { path: 'sadmin', canActivate: [SuperAdminAuthGuard], canActivateChild: [SuperAdminAuthGuard], loadChildren: () => import('./_modules/super-admin/dashboard.module').then(m => m.DashboardModule) }, + { path: '', canActivate: [AuthGuard], canActivateChild: [AuthGuard], loadChildren: () => import('./_modules/user/dashboard.module').then(m => m.DashboardModule) }, + { path: 'policy',loadChildren: () => import('./_modules/policy/policy.module').then(m => m.PolicyModule) } +]; + +@NgModule({ + imports: [ + RouterModule.forRoot(routes, { + useHash: true, + preloadingStrategy: PreloadAllModules +}) + ], + exports: [RouterModule] +}) + +export class AppRoutingModule { +} diff --git a/src/app/app.component.html b/src/app/app.component.html new file mode 100644 index 0000000..79be59c --- /dev/null +++ b/src/app/app.component.html @@ -0,0 +1,2 @@ + + diff --git a/src/app/app.component.scss b/src/app/app.component.scss new file mode 100644 index 0000000..1218e3d --- /dev/null +++ b/src/app/app.component.scss @@ -0,0 +1,5 @@ +::ng-deep { + .mat-card-title { + font-size: unset; + } +} \ No newline at end of file diff --git a/src/app/app.component.ts b/src/app/app.component.ts new file mode 100644 index 0000000..733ae76 --- /dev/null +++ b/src/app/app.component.ts @@ -0,0 +1,155 @@ +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { Router } from '@angular/router'; +import { Idle } from '@ng-idle/core'; +import { Keepalive } from '@ng-idle/keepalive'; +import { Subscription } from 'rxjs'; +import { environment } from 'src/environments/environment'; +import { AppConfig } from './_providers/_domain/appconfig'; +import { AppConfigService } from './_providers/_services/appconfigservice'; +import { AuthService } from './_providers/_services/auth.service'; +import { TimeOutDialogComponent } from './_window/time-out-dialog/time-out-dialog.component'; +import { TranslateService } from "@ngx-translate/core"; + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'] +}) +export class AppComponent implements OnInit, OnDestroy { + + title = 'Tender'; + message: any = null; + public subscription: Subscription; + config: AppConfig; + + idleState = 'Not started.'; + timedOut = false; + lastPing?: Date = null; + displaySessionTimeOut: boolean = false; + + constructor( + private idle: Idle, + public router: Router, + private keepalive: Keepalive, + private configService: AppConfigService, + private authenticationService: AuthService, + public dialog: MatDialog, + public translate: TranslateService, + ) { + translate.setDefaultLang('en-sales'); + translate.use('en-sales'); + + // sets an idle timeout of 5 seconds, for testing purposes. + idle.setIdle(environment.timeOutLimit); + // sets a timeout period of 5 seconds. after 10 seconds of inactivity, the user will be considered timed out. + idle.setTimeout(environment.timeOutCountLimit); + // sets the default interrupts, in this case, things like clicks, scrolls, touches to the document + // idle.setInterrupts(DEFAULT_INTERRUPTSOURCES); + + idle.onIdleEnd.subscribe(() => { + this.idleState = 'No longer idle.' + console.log(this.idleState); + this.reset(); + }); + + idle.onTimeout.subscribe(() => { + // this.childModal.hide(); + this.displaySessionTimeOut = false; + this.idleState = 'Timed out!'; + this.timedOut = true; + console.log(this.idleState); + this.logout(); + // this.router.navigate(['/']); + }); + + idle.onIdleStart.subscribe(() => { + this.idleState = 'You\'ve gone idle!' + console.log(this.idleState); + // this.childModal.show(); + this.displaySessionTimeOut = true; + this.logout(); + this.openDialog(); + }); + + idle.onTimeoutWarning.subscribe((countdown) => { + this.idleState = 'You will time out in ' + countdown + ' seconds!' + console.log(this.idleState); + }); + + // sets the ping interval to 15 seconds + keepalive.interval(15); + + keepalive.onPing.subscribe(() => { + this.lastPing = new Date(); this.idleState = 'No longer idle.'; + // console.log('====hereeoiuio=========eee') + }); + + this.authenticationService.currentUser.subscribe(userLoggedIn => { + if (userLoggedIn) { + idle.watch(); + this.timedOut = false; + } else { + idle.stop(); + } + }) + } + + async ngOnInit() { + this.config = this.configService.config; + this.subscription = this.configService.configUpdate$.subscribe(config => this.config = config); + let institute = "institute" + if (localStorage.getItem('institute')) + institute = localStorage.getItem('institute'); + // this.router.navigate(['/auth/login', institute]); + + } + + ngOnDestroy() { + if (this.subscription) { + this.subscription.unsubscribe(); + } + } + + reset() { + this.idle.watch(); + // this.idleState = 'Started.'; + this.timedOut = false; + } + + hideChildModal(): void { + this.displaySessionTimeOut = false; + } + + stay() { + this.displaySessionTimeOut = false; + this.reset(); + + } + + async logout() { + this.displaySessionTimeOut = false; + await this.authenticationService.logOut(); + // this.router.navigate(['/']); + let institute = localStorage.getItem("institute"); + this.router.navigate(['/auth/login', institute]); + } + openDialog(): void { + const dialogRef = this.dialog.open(TimeOutDialogComponent, { + width: '350px', + data: { state: this.idleState }, + }); + + dialogRef.afterClosed().subscribe(result => { + if (result.data == 'S') + this.stay(); + else + this.logout() + }); + } + +} +function DEFAULT_INTERRUPTSOURCES(DEFAULT_INTERRUPTSOURCES: any) { + throw new Error('Function not implemented.'); +} + diff --git a/src/app/app.module.ts b/src/app/app.module.ts new file mode 100644 index 0000000..9c17cb5 --- /dev/null +++ b/src/app/app.module.ts @@ -0,0 +1,149 @@ +import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { RouterModule } from '@angular/router'; +import { ToastrModule } from 'ngx-toastr'; +import { MatCardModule } from '@angular/material/card'; +import { MatButtonModule } from '@angular/material/button'; +import { AppComponent } from './app.component'; +import { SharedModule } from './shared/shared.module'; +import { AppRoutingModule } from './app-routing.module'; +import { DashboardModule } from './pages/dashboard/dashboard.module'; +import { NotFoundComponent } from './pages/not-found/not-found.component'; +import { AuthModule } from './pages/auth/auth.module'; +import { NgxEchartsModule } from 'ngx-echarts'; +import { ProvidersModule } from './_providers/providers.module'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { HttpClient, HttpClientModule } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatTableModule } from '@angular/material/table'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatSortModule } from '@angular/material/sort'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatDatepickerModule } from '@angular/material/datepicker'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { TimeOutDialogComponent } from './_window/time-out-dialog/time-out-dialog.component'; +import { NgIdleKeepaliveModule } from '@ng-idle/keepalive'; +import { HttpInterceptProviders } from './_core/_interceptors'; +import { AppConfigService } from './_providers/_services/appconfigservice'; +import { DatePipe } from '@angular/common'; +import * as _moment from 'moment'; +import { NgOtpInputModule } from 'ng-otp-input'; +// tslint:disable-next-line:no-duplicate-imports +// import { default as _rollupMoment } from 'moment'; + +// const moment = _rollupMoment || _moment; + +import { + MomentDateAdapter, + MAT_MOMENT_DATE_ADAPTER_OPTIONS, +} from '@angular/material-moment-adapter'; +import { + DateAdapter, + MAT_DATE_FORMATS, + MAT_DATE_LOCALE, +} from '@angular/material/core'; + +export const MY_FORMATS = { + parse: { + dateInput: 'DD/MM/YYYY', + }, + display: { + dateInput: 'DD/MM/YYYY', + monthYearLabel: 'DD/MM/YYYY', + dateA11yLabel: 'DD/MM/YYYY', + monthYearA11yLabel: 'DD/MM/YYYY', + }, +}; +import { BsDatepickerModule, BsDatepickerConfig } from 'ngx-bootstrap/datepicker'; + +// import ngx-translate and the http loader +import {TranslateLoader, TranslateModule } from '@ngx-translate/core'; +import {TranslateHttpLoader} from '@ngx-translate/http-loader'; +import { ReportModule } from './_modules/report/report.module'; +import { MatDialogModule } from '@angular/material/dialog'; + +@NgModule({ + declarations: [ + AppComponent, + TimeOutDialogComponent, + NotFoundComponent, + + ], + imports: [ + BrowserModule, + SharedModule, + NgOtpInputModule, + AuthModule, + DashboardModule, + ReportModule, + BrowserAnimationsModule, + RouterModule, + AppRoutingModule, + ToastrModule.forRoot(), + MatCardModule, + MatButtonModule, + NgxEchartsModule.forRoot({ + echarts: () => import('echarts') + }), + + MatToolbarModule, + MatSidenavModule, + MatTableModule, + MatPaginatorModule, + MatSortModule, + MatFormFieldModule, + MatInputModule, + MatIconModule, + MatDatepickerModule, + MatRadioModule, + MatTooltipModule, + ReactiveFormsModule, + MatDialogModule, + FormsModule, + ProvidersModule.forRoot(environment), + MatSnackBarModule, + NgIdleKeepaliveModule.forRoot(), + BsDatepickerModule.forRoot(), + + // ngx-translate and the loader module + HttpClientModule, + TranslateModule.forRoot({ + loader: { + provide: TranslateLoader, + useFactory: HttpLoaderFactory, + deps: [HttpClient] + } + }) + ], + providers: [ + HttpInterceptProviders, + AppConfigService, + DatePipe, + BsDatepickerConfig, + //commented due to change in angular date issue + // { provide: MAT_DATE_LOCALE, useValue: 'en-GB' } + { + provide: DateAdapter, + useClass: MomentDateAdapter, + deps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS], + }, + + { provide: MAT_DATE_FORMATS, useValue: MY_FORMATS } + // { provide: MAT_DATE_LOCALE, useValue: 'hi-IN' } + ], + bootstrap: [AppComponent] +}) +export class AppModule { } + + +// required for AOT compilation +export function HttpLoaderFactory(http: HttpClient): TranslateHttpLoader { + return new TranslateHttpLoader(http, './assets/i18n/languages/', '.json'); +} \ No newline at end of file diff --git a/src/app/consts/colors.ts b/src/app/consts/colors.ts new file mode 100644 index 0000000..dbf6456 --- /dev/null +++ b/src/app/consts/colors.ts @@ -0,0 +1,8 @@ +export enum colors { + YELLOW = '#ffc260', + BLUE = '#536DFE', + LIGHT_BLUE = '#F8F9FF', + PINK = '#ff4081', + GREEN = '#3CD4A0', + VIOLET = '#9013FE' +} diff --git a/src/app/consts/index.ts b/src/app/consts/index.ts new file mode 100644 index 0000000..22c52ca --- /dev/null +++ b/src/app/consts/index.ts @@ -0,0 +1,2 @@ +export * from './routes'; +export * from './colors'; diff --git a/src/app/consts/routes.ts b/src/app/consts/routes.ts new file mode 100644 index 0000000..30574ea --- /dev/null +++ b/src/app/consts/routes.ts @@ -0,0 +1,10 @@ +export enum routes { + DASHBOARD = '/dashboard', + TYPOGRAPHY = '/typography', + TABLES = '/tables', + NOTIFICATION = '/notification', + UI_ELEMENTS_ICONS = '/ui/icons', + UI_ELEMENTS_CHARTS = '/ui/charts', + UI_ELEMENTS_MAP = '/ui/map', + LOGIN = '/login' +} diff --git a/src/app/pages/auth/auth-routing.module.ts b/src/app/pages/auth/auth-routing.module.ts new file mode 100644 index 0000000..37c81d6 --- /dev/null +++ b/src/app/pages/auth/auth-routing.module.ts @@ -0,0 +1,21 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +import { AuthPageComponent } from './containers'; + +const routes: Routes = [ + { + path: 'old-login', + component: AuthPageComponent + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [RouterModule] +}) + +export class AuthRoutingModule { +} diff --git a/src/app/pages/auth/auth.module.ts b/src/app/pages/auth/auth.module.ts new file mode 100644 index 0000000..535a5c9 --- /dev/null +++ b/src/app/pages/auth/auth.module.ts @@ -0,0 +1,37 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatButtonModule } from '@angular/material/button'; +import { MatInputModule } from '@angular/material/input'; +import { ReactiveFormsModule, FormsModule } from '@angular/forms'; + +import { AuthPageComponent } from './containers'; +import { AuthRoutingModule } from './auth-routing.module'; +import { YearPipe } from './pipes'; +import { AuthService, EmailService } from './services'; +import { LoginFormComponent, SignFormComponent } from './components'; +import { AuthGuard } from './guards'; + +@NgModule({ + declarations: [ + AuthPageComponent, + YearPipe, + LoginFormComponent, + SignFormComponent + ], + imports: [ + CommonModule, + AuthRoutingModule, + MatTabsModule, + MatButtonModule, + MatInputModule, + ReactiveFormsModule, + FormsModule + ], + providers: [ + AuthService, + EmailService, + AuthGuard + ] +}) +export class AuthModule { } diff --git a/src/app/pages/auth/components/index.ts b/src/app/pages/auth/components/index.ts new file mode 100644 index 0000000..656b9e5 --- /dev/null +++ b/src/app/pages/auth/components/index.ts @@ -0,0 +1,2 @@ +export * from './login-form/login-form.component'; +export * from './sign-form/sign-form.component'; diff --git a/src/app/pages/auth/components/login-form/login-form.component.html b/src/app/pages/auth/components/login-form/login-form.component.html new file mode 100644 index 0000000..f848931 --- /dev/null +++ b/src/app/pages/auth/components/login-form/login-form.component.html @@ -0,0 +1,14 @@ +
+ + + + + + + + +
+ + +
+
diff --git a/src/app/pages/auth/components/login-form/login-form.component.scss b/src/app/pages/auth/components/login-form/login-form.component.scss new file mode 100644 index 0000000..c533ed3 --- /dev/null +++ b/src/app/pages/auth/components/login-form/login-form.component.scss @@ -0,0 +1,27 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; + +.form { + width: 100%; + + &__input { + width: 100%; + margin-top: 6px; + } +} + +.form-actions { + display: flex; + justify-content: space-between; + align-items: center; + + &__login { + margin-right: 10px; + } + + &__forget { + font-size: 12px; + font-weight: $fw-lighter; + color: $blue; + } +} diff --git a/src/app/pages/auth/components/login-form/login-form.component.ts b/src/app/pages/auth/components/login-form/login-form.component.ts new file mode 100644 index 0000000..f79f828 --- /dev/null +++ b/src/app/pages/auth/components/login-form/login-form.component.ts @@ -0,0 +1,27 @@ +import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; + +@Component({ + selector: 'app-login-form', + templateUrl: './login-form.component.html', + styleUrls: ['./login-form.component.scss'] +}) +export class LoginFormComponent implements OnInit { + @Output() sendLoginForm = new EventEmitter(); + public form: UntypedFormGroup; + public flatlogicEmail = 'admin@flatlogic.com'; + public flatlogicPassword = 'admin'; + + public ngOnInit(): void { + this.form = new UntypedFormGroup({ + email: new UntypedFormControl(this.flatlogicEmail, [Validators.required, Validators.email]), + password: new UntypedFormControl(this.flatlogicPassword, [Validators.required]) + }); + } + + public login(): void { + if (this.form.valid) { + this.sendLoginForm.emit(); + } + } +} diff --git a/src/app/pages/auth/components/sign-form/sign-form.component.html b/src/app/pages/auth/components/sign-form/sign-form.component.html new file mode 100644 index 0000000..30fed81 --- /dev/null +++ b/src/app/pages/auth/components/sign-form/sign-form.component.html @@ -0,0 +1,17 @@ +
+ + + + + + + + + + + + +
+ +
+
diff --git a/src/app/pages/auth/components/sign-form/sign-form.component.scss b/src/app/pages/auth/components/sign-form/sign-form.component.scss new file mode 100644 index 0000000..e601620 --- /dev/null +++ b/src/app/pages/auth/components/sign-form/sign-form.component.scss @@ -0,0 +1,23 @@ +@import "src/app/styles/colors"; + +.form { + width: 100%; + + &__input { + width: 100%; + margin-top: -15px; + } +} + +.form-actions { + display: flex; + justify-content: center; + align-items: center; + margin-top: 5px; + + &__create { + margin: 0; + width: 95%; + box-shadow: 0 0 11px 0 $shadow-white, 0 0 0 -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + } +} diff --git a/src/app/pages/auth/components/sign-form/sign-form.component.ts b/src/app/pages/auth/components/sign-form/sign-form.component.ts new file mode 100644 index 0000000..f951278 --- /dev/null +++ b/src/app/pages/auth/components/sign-form/sign-form.component.ts @@ -0,0 +1,26 @@ +import { Component, EventEmitter, OnInit, Output } from '@angular/core'; +import { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms'; + +@Component({ + selector: 'app-sign-form', + templateUrl: './sign-form.component.html', + styleUrls: ['./sign-form.component.scss'] +}) +export class SignFormComponent implements OnInit { + @Output() sendSignForm = new EventEmitter(); + public form: UntypedFormGroup; + + public ngOnInit(): void { + this.form = new UntypedFormGroup({ + name: new UntypedFormControl('', [Validators.required]), + email: new UntypedFormControl('', [Validators.required, Validators.email]), + password: new UntypedFormControl('', [Validators.required]) + }); + } + + public sign(): void { + if (this.form.valid) { + this.sendSignForm.emit(); + } + } +} diff --git a/src/app/pages/auth/containers/auth-page/auth-page.component.html b/src/app/pages/auth/containers/auth-page/auth-page.component.html new file mode 100644 index 0000000..4f1e5e2 --- /dev/null +++ b/src/app/pages/auth/containers/auth-page/auth-page.component.html @@ -0,0 +1,51 @@ +
+
+
+ + +

Good Morning, User

+
+ +
+ +
+
+

or

+
+
+ + + +
+ +

Welcome!

+

Create you account

+ + + +
+
+

or

+
+
+ +
+ +
+
+
+ + +
+
+ +
diff --git a/src/app/pages/auth/containers/auth-page/auth-page.component.scss b/src/app/pages/auth/containers/auth-page/auth-page.component.scss new file mode 100644 index 0000000..c459c62 --- /dev/null +++ b/src/app/pages/auth/containers/auth-page/auth-page.component.scss @@ -0,0 +1,150 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/variables"; +@import "src/app/styles/font"; + +.auth-page { + width: 100%; + height: 100%; + display: flex; + + @media (max-width: $medium) { + flex-direction: column; + } + + &__content-block { + width: 37%; + height: 100%; + background-color: $white; + display: flex; + align-items: center; + flex-direction: column; + + @media (max-width: $medium) { + width: 100%; + } + } + + &__content-wrapper { + width: 45%; + height: 100%; + padding: 16px; + display: flex; + justify-content: space-between; + flex-direction: column; + + @media (max-width: $small) { + width: 70%; + } + + @media (min-width: $medium) and (max-width: $large){ + width: 45%; + } + } + + &__group { + margin-top: 28px; + } + + &__group-title { + font-size: 32px; + font-weight: $fw-normal; + margin-top: 37px; + letter-spacing: -0.7px; + text-align: center; + line-height: 37px; + color: $dark-grey; + } + + &__group-sub-title { + font-size: $fs-large; + font-weight: $fw-normal; + margin-bottom: 60px; + letter-spacing: -0.5px; + text-align: center; + line-height: 24px; + color: $dark-grey; + } + + &__google-button-wrapper { + margin-top: 32px; + margin-bottom: 10px; + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + } + + &__google-button { + width: 95%; + padding: 0; + box-shadow: 0 0 11px 0 $shadow-white, 0 0 0 -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + } + + &__google-button-icon { + width: 20px; + margin-right: 16px; + } + + &__border-wrapper { + align-items: center; + display: flex; + justify-content: center; + margin: 32px 0; + } + + &__border-line { + height: 1px; + width: 100%; + background-color: $light-grey; + opacity: 0.3; + } + + &__border-title { + font-size: $fs-xs; + padding: 0 16px; + margin: 0; + color: $dark-grey + } + + &__logo { + width: 63%; + height: 100%; + background-color: $blue; + display: flex; + align-items: center; + + @media (max-width: $medium) { + display: none; + } + } + + &__logo-wrapper { + width: 100%; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + } + + &__logo-img { + margin-bottom: 50px; + } + + &__logo-title { + font-size: 62px; + color: $white; + font-weight: 500; + letter-spacing: -1.5px; + line-height: 62px; + } + + &__footer-title { + color: $blue; + font-size: 10px; + opacity: 0.7; + a { + text-decoration: none; + color: $blue; + } + } +} diff --git a/src/app/pages/auth/containers/auth-page/auth-page.component.ts b/src/app/pages/auth/containers/auth-page/auth-page.component.ts new file mode 100644 index 0000000..7502063 --- /dev/null +++ b/src/app/pages/auth/containers/auth-page/auth-page.component.ts @@ -0,0 +1,32 @@ +import { Component } from '@angular/core'; +import { Router } from '@angular/router'; + +import { AuthService } from '../../services'; +import { routes } from '../../../../consts'; + +@Component({ + selector: 'app-auth-page', + templateUrl: './auth-page.component.html', + styleUrls: ['./auth-page.component.scss'] +}) +export class AuthPageComponent { + public todayDate: Date = new Date(); + public routers: typeof routes = routes; + + constructor( + private service: AuthService, + private router: Router + ) { } + + public sendLoginForm(): void { + this.service.login(); + + this.router.navigate([this.routers.DASHBOARD]).then(); + } + + public sendSignForm(): void { + this.service.sign(); + + this.router.navigate([this.routers.DASHBOARD]).then(); + } +} diff --git a/src/app/pages/auth/containers/index.ts b/src/app/pages/auth/containers/index.ts new file mode 100644 index 0000000..92b4e58 --- /dev/null +++ b/src/app/pages/auth/containers/index.ts @@ -0,0 +1 @@ +export * from './auth-page/auth-page.component'; diff --git a/src/app/pages/auth/guards/auth.guard.ts b/src/app/pages/auth/guards/auth.guard.ts new file mode 100644 index 0000000..55bc4d7 --- /dev/null +++ b/src/app/pages/auth/guards/auth.guard.ts @@ -0,0 +1,22 @@ +import { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot } from '@angular/router'; +import { Injectable } from '@angular/core'; + +import { routes } from '../../../consts'; + +@Injectable() +export class AuthGuard implements CanActivate{ + public routers: typeof routes = routes; + + constructor(private router: Router) { + } + + canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { + const token = localStorage.getItem('token'); + + if (token) { + return true; + } else { + this.router.navigate([this.routers.LOGIN]); + } + } +} diff --git a/src/app/pages/auth/guards/index.ts b/src/app/pages/auth/guards/index.ts new file mode 100644 index 0000000..b41e34a --- /dev/null +++ b/src/app/pages/auth/guards/index.ts @@ -0,0 +1 @@ +export * from './auth.guard'; diff --git a/src/app/pages/auth/models/email.ts b/src/app/pages/auth/models/email.ts new file mode 100644 index 0000000..bfdca05 --- /dev/null +++ b/src/app/pages/auth/models/email.ts @@ -0,0 +1,5 @@ +export interface Email { + name: string; + time: string; + message: string +} diff --git a/src/app/pages/auth/models/index.ts b/src/app/pages/auth/models/index.ts new file mode 100644 index 0000000..5a5859f --- /dev/null +++ b/src/app/pages/auth/models/index.ts @@ -0,0 +1,2 @@ +export * from './user'; +export * from './email'; diff --git a/src/app/pages/auth/models/user.ts b/src/app/pages/auth/models/user.ts new file mode 100644 index 0000000..9d4dea9 --- /dev/null +++ b/src/app/pages/auth/models/user.ts @@ -0,0 +1,5 @@ +export interface User { + email?: string; + name: string; + // username : string +} diff --git a/src/app/pages/auth/pipes/index.ts b/src/app/pages/auth/pipes/index.ts new file mode 100644 index 0000000..6404bba --- /dev/null +++ b/src/app/pages/auth/pipes/index.ts @@ -0,0 +1 @@ +export * from './year.pipe'; diff --git a/src/app/pages/auth/pipes/year.pipe.ts b/src/app/pages/auth/pipes/year.pipe.ts new file mode 100644 index 0000000..cf3712d --- /dev/null +++ b/src/app/pages/auth/pipes/year.pipe.ts @@ -0,0 +1,11 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { DatePipe } from '@angular/common'; + +@Pipe({ + name: 'year' +}) +export class YearPipe extends DatePipe implements PipeTransform { + transform(date: Date): any { + return super.transform(date, 'y'); + } +} diff --git a/src/app/pages/auth/services/auth.service.ts b/src/app/pages/auth/services/auth.service.ts new file mode 100644 index 0000000..5d5df1f --- /dev/null +++ b/src/app/pages/auth/services/auth.service.ts @@ -0,0 +1,28 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +import { User } from '../models'; + +@Injectable({ + providedIn: 'root' +}) +export class AuthService { + public login(): void { + localStorage.setItem('token', 'token'); + } + + public sign(): void { + localStorage.setItem('token', 'token'); + } + + public signOut(): void { + localStorage.removeItem('token'); + } + + public getUser(): Observable { + return of({ + name: 'John', + lastName: 'Smith' + }); + } +} diff --git a/src/app/pages/auth/services/email.service.ts b/src/app/pages/auth/services/email.service.ts new file mode 100644 index 0000000..e61f7ea --- /dev/null +++ b/src/app/pages/auth/services/email.service.ts @@ -0,0 +1,18 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +import { Email } from '../models'; + +@Injectable({ + providedIn: 'root' +}) +export class EmailService { + public loadEmails(): Observable { + return of([ + {name: 'Jane Hew', time: '9:32', message: 'Hey! How is it going?'}, + {name: 'Lloyd Brown', time: '9:18', message: 'Check out my new Dashboard'}, + {name: 'Mark Winstein', time: '9:15', message: 'I want rearrange the appointment'}, + {name: 'Liana Dutti', time: '9:09', message: 'Good news from sale department'} + ]) + } +} diff --git a/src/app/pages/auth/services/index.ts b/src/app/pages/auth/services/index.ts new file mode 100644 index 0000000..caaecd1 --- /dev/null +++ b/src/app/pages/auth/services/index.ts @@ -0,0 +1,2 @@ +export * from './auth.service'; +export * from './email.service'; diff --git a/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.html b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.html new file mode 100644 index 0000000..10ba55f --- /dev/null +++ b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.html @@ -0,0 +1,26 @@ + + +

Daily Line Chart

+
+
+
Tablet +
+
+
Mobile +
+
+
Desktop +
+
+ + + Daily + Weekly + Monthly + +
+ + +
+
+
diff --git a/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.scss b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.scss new file mode 100644 index 0000000..669e2bc --- /dev/null +++ b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.scss @@ -0,0 +1,97 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; +@import "src/app/styles/variables"; + +.chart { + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + margin: 16px 24px; + + &__header { + display: flex; + justify-content: space-between; + padding: 8px; + + @media (max-width: $small) { + flex-wrap: wrap; + } + } + + &__title { + margin: 0; + display: flex; + align-items: center; + color: $grey; + font-weight: $fw-normal; + font-size: $fs-regular; + text-transform: none; + line-height: 1.6; + letter-spacing: 0.12px; + order: 1; + } + + &__content { + height: 380px; + width: 100%; + @media (max-width: $small) { + overflow-x: scroll; + } + } + + &__content-item { + @media (max-width: $small) { + width: 600px; + } + } +} + +.chart-legend { + display: flex; + order: 2; + + &__item { + display: flex; + align-items: center; + margin-top: 2.24px; + margin-right: 24px; + } + + &__icon { + width: 5px; + height: 5px; + border-radius: 50%; + } + + &__title { + text-transform: none; + font-weight: $fw-normal; + font-size: $fs-regular; + color: $grey; + margin-left: 8px; + } + + @media (max-width: $small) { + margin-top: 20px; + order: 3; + } +} + +.chart-select { + order: 3; + + @media (max-width: $small) { + order: 2; + } +} + +.yellow { + background-color: $yellow; +} + +.blue { + background-color: $blue; +} + +.light-blue { + background-color: $white-blue; +} + diff --git a/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.ts b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.ts new file mode 100644 index 0000000..4dd8341 --- /dev/null +++ b/src/app/pages/dashboard/components/daily-line-chart/daily-line-chart.component.ts @@ -0,0 +1,230 @@ +import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexFill, + ApexYAxis, + ApexTooltip, + ApexMarkers, + ApexXAxis, + ApexPlotOptions +} from 'ng-apexcharts'; + +import { DailyLineChartData, TimeData } from '../../models'; +import { colors } from '../../../../consts'; +import { customTooltip } from '../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + yaxis: ApexYAxis | ApexYAxis[]; + labels: string[]; + stroke: ApexStroke; + markers: ApexMarkers; + plotOptions: ApexPlotOptions; + fill: ApexFill; + tooltip: ApexTooltip; + legend: ApexLegend; + colors: string[]; + grid: ApexGrid; +}; + +enum matSelectedFields { + daily = 'Daily', + weekly = 'Weekly', + monthly = 'Monthly' +} + +@Component({ + selector: 'app-daily-line-chart', + templateUrl: './daily-line-chart.component.html', + styleUrls: ['./daily-line-chart.component.scss'] +}) +export class DailyLineChartComponent implements OnInit, AfterViewInit { + @Input() dailyLineChartData: DailyLineChartData; + @ViewChild('chart') chart: ElementRef; + public chartObj: ApexCharts; + public chartOptions: Partial; + public matSelectFields: typeof matSelectedFields = matSelectedFields; + public selectedMatSelectValue = matSelectedFields.monthly; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.initChart(this.dailyLineChartData.monthlyData, this.dailyLineChartData.labels); + } + + public ngAfterViewInit() { + this.chartObj = new ApexCharts( + this.chart.nativeElement, + this.chartOptions + ) + + this.chartObj.render(); + } + + public initChart(data: TimeData, labels: string[]): void { + this.chartOptions = { + legend: { + show: false + }, + markers: { + size: [0, 0, 5] + }, + series: [ + { + name: 'Mobile', + type: 'line', + data: data.mobile, + }, + { + name: 'Desktop', + type: 'area', + data: data.desktop + }, + { + name: 'Tablet', + type: 'line', + data: data.tablet + } + ], + colors: [colors.BLUE, colors.LIGHT_BLUE, colors.YELLOW], + chart: { + toolbar: { + show: false + }, + height: 350, + width: '100%', + type: 'line', + stacked: true + }, + stroke: { + width: [2, 0, 2], + curve: ['smooth', 'smooth', 'straight'] + }, + plotOptions: { + bar: { + columnWidth: '50%' + }, + }, + grid: { + yaxis: { + lines: { + show: false, + } + }, + }, + fill: { + opacity: 1, + gradient: { + inverseColors: false, + shade: 'light', + type: 'vertical', + opacityFrom: 0.85, + opacityTo: 0.55, + stops: [0, 100, 100, 100] + } + }, + labels: labels, + xaxis: { + type: 'datetime', + labels: { + style: { + colors: '#4A4A4A', + fontSize: '0.875rem', + fontFamily: 'Roboto, Helvetica, Arial, sans-serif', + fontWeight: 400, + }, + }, + }, + yaxis: { + show: true, + labels: { + style: { + colors: '#4A4A4A', + fontSize: '0.875rem', + fontFamily: 'Roboto, Helvetica, Arial, sans-serif', + fontWeight: 400, + }, + }, + }, + tooltip: { + custom: ({series, seriesIndex, dataPointIndex, w}) => { + return customTooltip; + } + } + }; + }; + + public changedMatSelectionValue() { + switch (this.selectedMatSelectValue) { + case matSelectedFields.daily: + this.chartOptions = { + ...this.chartOptions, + series: [ + { + name: 'Mobile', + type: 'line', + data: this.dailyLineChartData.dailyData.mobile, + }, + { + name: 'Desktop', + type: 'area', + data: this.dailyLineChartData.dailyData.desktop, + }, + { + name: 'Tablet', + type: 'line', + data: this.dailyLineChartData.dailyData.tablet, + } + ] + }; + break; + case matSelectedFields.weekly: + this.chartOptions = { + ...this.chartOptions, + series: [ + { + name: 'Mobile', + type: 'line', + data: this.dailyLineChartData.weeklyData.mobile, + }, + { + name: 'Desktop', + type: 'area', + data: this.dailyLineChartData.weeklyData.desktop, + }, + { + name: 'Tablet', + type: 'line', + data: this.dailyLineChartData.weeklyData.tablet, + } + ] + }; + break; + default: + this.chartOptions = { + ...this.chartOptions, + series: [ + { + name: 'Mobile', + type: 'line', + data: this.dailyLineChartData.monthlyData.mobile, + }, + { + name: 'Desktop', + type: 'area', + data: this.dailyLineChartData.monthlyData.desktop, + }, + { + name: 'Tablet', + type: 'line', + data: this.dailyLineChartData.monthlyData.tablet, + } + ] + }; + } + + this.chartObj.updateSeries(this.chartOptions.series); + } +} diff --git a/src/app/pages/dashboard/components/index.ts b/src/app/pages/dashboard/components/index.ts new file mode 100644 index 0000000..92e8818 --- /dev/null +++ b/src/app/pages/dashboard/components/index.ts @@ -0,0 +1,7 @@ +export * from './visits-chart/visits-chart.component'; +export * from './performance-chart/performance-chart.component'; +export * from './revenue-chart/revenue-chart.component'; +export * from './server-chart/server-chart.component'; +export * from './daily-line-chart/daily-line-chart.component'; +export * from './support-requests/support-requests.component'; +export * from './project-stat-chart/project-stat-chart.component'; diff --git a/src/app/pages/dashboard/components/performance-chart/performance-chart.component.html b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.html new file mode 100644 index 0000000..79e1d1f --- /dev/null +++ b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.html @@ -0,0 +1,36 @@ + + +
App Performance
+ + +
+ + +
+
+
+ Integration +
+
+
+ SDK +
+
+ +
+
Integration
+ +
SDK
+ +
+
+
diff --git a/src/app/pages/dashboard/components/performance-chart/performance-chart.component.scss b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.scss new file mode 100644 index 0000000..95c50e8 --- /dev/null +++ b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.scss @@ -0,0 +1,76 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/variables'; +@import 'src/app/styles/font'; + +.performance-chart { + box-shadow: 0 3px 11px 0 #E8EAFC, 0 3px 3px -2px #B2B2B21A, 0 1px 8px 0 #9A9A9A1A; + display: flex; + flex-direction: column; + height: 192px; + justify-content: space-between; + + &__header { + align-items: center; + color: $grey; + display: flex; + justify-content: space-between; + + &-title { + font-size: 20px; + font-weight: 400; + margin: 0; + line-height: 40px; + } + } + + &__content { + display: flex; + height: 70%; + flex-direction: column; + justify-content: space-between; + + &-header { + display: flex; + + &-item { + align-items: center; + display: flex; + margin-right: 16px; + + &-icon_blue { + background-color: $blue; + border-radius: 50%; + width: 5px; + height: 5px; + } + + &-icon_yellow { + background-color: $yellow; + border-radius: 50%; + width: 5px; + height: 5px; + } + + &-text { + margin-left: 8px; + color: $grey; + } + } + } + } + + &__progress-title { + margin: 20px 0 5px 0; + font-weight: 400; + font-size: $fs-medium; + color: $grey; + } + + &__progress-bar { + margin-bottom: 8px; + + @media ($small) { + margin-bottom: 10px; + } + } +} diff --git a/src/app/pages/dashboard/components/performance-chart/performance-chart.component.ts b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.ts new file mode 100644 index 0000000..fa35e3b --- /dev/null +++ b/src/app/pages/dashboard/components/performance-chart/performance-chart.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +import { PerformanceChartData } from '../../models'; + +@Component({ + selector: 'app-performance-chart', + templateUrl: './performance-chart.component.html', + styleUrls: ['./performance-chart.component.scss'] +}) +export class PerformanceChartComponent { + @Input() performanceChartData: PerformanceChartData; +} diff --git a/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.html b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.html new file mode 100644 index 0000000..9312194 --- /dev/null +++ b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.html @@ -0,0 +1,196 @@ +
+ + +
{{selectedStatsLightBlueData.name}}
+ + +
+ +
+
+

{{selectedStatsLightBlueData.users}}

+

+{{selectedStatsLightBlueData.percent}}%

+

{{selectedStatsLightBlueData.percent}}%

+
+
+ +
+
+ +
+
+
+
{{selectedStatsLightBlueData.registrations}}
+ arrow_upward +
+

Registrations

+
+ +
+
+
{{selectedStatsLightBlueData.bounce}}
+ arrow_upward +
+

Bounce Rate

+
+ +
+
+
{{selectedStatsLightBlueData.views}}
+ arrow_upward +
+

Views

+
+
+
+
+ + + +
{{selectedStatsSingAppData.name}}
+ + +
+ +
+
+

{{selectedStatsSingAppData.users}}

+

+{{selectedStatsSingAppData.percent}}%

+

{{selectedStatsSingAppData.percent}}%

+
+
+ +
+
+ +
+
+
+
{{selectedStatsSingAppData.registrations}}
+ arrow_upward +
+

Registrations

+
+ +
+
+
{{selectedStatsSingAppData.bounce}}
+ arrow_upward +
+

Bounce Rate

+
+ +
+
+
{{selectedStatsSingAppData.views}}
+ arrow_upward +
+

Views

+
+
+
+
+ + + +
{{selectedStatsRNSData.name}}
+ + +
+ +
+
+

{{selectedStatsRNSData.users}}

+

+{{selectedStatsRNSData.percent}}%

+

{{selectedStatsRNSData.percent}}%

+
+
+ +
+
+ +
+
+
+
{{selectedStatsRNSData.registrations}}
+ arrow_upward +
+

Registrations

+
+ +
+
+
{{selectedStatsRNSData.bounce}}
+ arrow_upward +
+

Bounce Rate

+
+ +
+
+
{{selectedStatsRNSData.views}}
+ arrow_upward +
+

Views

+
+
+
+
+
diff --git a/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.scss b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.scss new file mode 100644 index 0000000..a6c3800 --- /dev/null +++ b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.scss @@ -0,0 +1,128 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/variables"; +@import "src/app/styles/font"; + +.project-stat { + display: flex; + justify-content: space-around; + width: calc(100% - 16px); + margin: 16px 8px; + + &__item { + height: 208px; + margin: 16px; + width: 100%; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + @media (min-width: $small) and (max-width: $large) { + width: 41.4%; + } + + @media (min-width: $large) and (max-width: $normal) { + width: 43.6%; + } + } + + &__title { + padding: 8px; + display: flex; + justify-content: space-between; + align-items: center; + } + + &__title-text { + font-weight: $fw-lighter; + font-size: $fs-medium; + color: $dark-grey; + margin: 0; + } + + @media (min-width: $small) and (max-width: $normal) { + justify-content: start; + } + + @media (max-width: $normal) { + flex-wrap: wrap; + } +} + +.project-stat-content { + padding: 8px; + + &__total-info-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + height: 70px; + } + + &__total-info { + display: flex; + justify-content: space-between; + align-items: flex-end; + } + + &__total-info-users { + color: $grey; + font-weight: $fw-lighter; + font-size: $fs-xxxl; + margin: 0; + height: 45px; + letter-spacing: 0.15px; + } + + &__total-info-percent { + color: $green; + font-weight: $fw-lighter; + font-size: $fs-small; + margin: 0 0 0 5px; + } + + &__total-info-percent-warn { + color: $pink; + font-weight: $fw-lighter; + font-size: $fs-small; + margin: 0 0 0 5px; + } + + &__total-info-chart { + position: relative; + right: -9px; + top: -2px; + } + + &__stat-wrapper { + display: flex; + justify-content: space-between; + margin-top: 24px; + } + + &__stat-value-wrapper { + display: flex; + align-items: center; + } + + &__stat-value { + font-weight: $fw-lighter; + font-size: $fs-regular; + color: $dark-grey; + margin: 0; + } + + &__stat-icon { + transform: rotate(45deg); + color: $green; + } + + &__stat-icon-warn { + transform: rotate(135deg); + color: $pink; + } + + &__stat-item-title { + color: $grey; + font-weight: $fw-lighter; + font-size: $fs-xs; + margin: 0; + } +} diff --git a/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.ts b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.ts new file mode 100644 index 0000000..1b4cf8c --- /dev/null +++ b/src/app/pages/dashboard/components/project-stat-chart/project-stat-chart.component.ts @@ -0,0 +1,151 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { ProjectStatData, ProjectTimeData } from '../../models'; +import { colors } from '../../../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries; + chart: ApexChart; + dataLabels: ApexDataLabels; + plotOptions: ApexPlotOptions; + yaxis: ApexYAxis; + xaxis: ApexXAxis; + fill: ApexFill; + tooltip: ApexTooltip; + stroke: ApexStroke; + legend: ApexLegend; + grid: ApexGrid; +}; + +enum ProjectsType { + lightBlue = 'lightBlue', + SingApp = 'SingApp', + RNS = 'RNS' +} + +@Component({ + selector: 'app-project-stat-chart', + templateUrl: './project-stat-chart.component.html', + styleUrls: ['./project-stat-chart.component.scss'] +}) +export class ProjectStatChartComponent implements OnInit { + @Input() projectsStatsData: ProjectStatData; + public selectedStatsLightBlueData: ProjectTimeData; + public selectedStatsSingAppData: ProjectTimeData; + public selectedStatsRNSData: ProjectTimeData; + public chartOptions: Partial; + public projectsType: typeof ProjectsType = ProjectsType; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.selectedStatsLightBlueData = this.projectsStatsData.lightBlue.daily; + this.selectedStatsSingAppData = this.projectsStatsData.singApp.daily; + this.selectedStatsRNSData = this.projectsStatsData.rns.daily; + + this.initChart(); + } + + public initChart(): void { + this.chartOptions = { + chart: { + type: 'bar', + height: 100, + width: 130, + toolbar: { + show: false + } + }, + legend: { + show: false + }, + grid: { + show: false + }, + plotOptions: { + bar: { + horizontal: false, + columnWidth: '70%', + } + }, + dataLabels: { + enabled: false + }, + stroke: { + show: true, + width: 2, + colors: ['transparent'] + }, + xaxis: { + categories: [ + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug' + ], + labels: { + show: false + }, + axisTicks: { + show: false + }, + axisBorder: { + show: false + } + }, + yaxis: { + show: false + }, + tooltip: { + y: { + formatter(val) { + return '$ ' + val + ' thousands'; + } + } + } + }; + } + + public changeDateType(dateType: string, projectType: string): void { + switch (projectType) { + case this.projectsType.lightBlue: + switch (dateType) { + case 'Weekly': + this.selectedStatsLightBlueData = this.projectsStatsData.lightBlue.week; + break; + case 'Monthly': + this.selectedStatsLightBlueData = this.projectsStatsData.lightBlue.monthly; + break; + default: + this.selectedStatsLightBlueData = this.projectsStatsData.lightBlue.daily; + } + break; + case this.projectsType.SingApp: + switch (dateType) { + case 'Weekly': + this.selectedStatsSingAppData = this.projectsStatsData.singApp.week; + break; + case 'Monthly': + this.selectedStatsSingAppData = this.projectsStatsData.singApp.monthly; + break; + default: + this.selectedStatsSingAppData = this.projectsStatsData.singApp.daily; + } + break; + case this.projectsType.RNS: + switch (dateType) { + case 'Weekly': + this.selectedStatsRNSData = this.projectsStatsData.rns.week; + break; + case 'Monthly': + this.selectedStatsRNSData = this.projectsStatsData.rns.monthly; + break; + default: + this.selectedStatsRNSData = this.projectsStatsData.rns.daily; + } + break; + } + } +} diff --git a/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.html b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.html new file mode 100644 index 0000000..26cbc6e --- /dev/null +++ b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.html @@ -0,0 +1,11 @@ + + +
Revenue Breakdown
+ + +
+ + +
+
+
diff --git a/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.scss b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.scss new file mode 100644 index 0000000..4fd5b0b --- /dev/null +++ b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.scss @@ -0,0 +1,33 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; +@import "src/app/styles/variables"; + +.revenue-chart { + height: 192px; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + &__header { + color: $grey; + display: flex; + justify-content: space-between; + + &-title { + font-size: 20px; + font-weight: $fw-lighter; + margin: 0; + line-height: 40px; + } + } + + &__content { + display: flex; + align-items: center; + justify-content: center; + + &-chart { + height: 140px; + width: 100%; + max-width: 218px + } + } +} diff --git a/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.ts b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.ts new file mode 100644 index 0000000..8142676 --- /dev/null +++ b/src/app/pages/dashboard/components/revenue-chart/revenue-chart.component.ts @@ -0,0 +1,69 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { RevenueChartData } from '../../models'; +import {colors} from '../../../../consts'; + +@Component({ + selector: 'app-revenue-chart', + templateUrl: './revenue-chart.component.html', + styleUrls: ['./revenue-chart.component.scss'] +}) +export class RevenueChartComponent implements OnInit { + @Input() revenueCharData: RevenueChartData; + public revenueChart: any; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.initChart(); + } + + public initChart(): void { + this.revenueChart = { + color: [colors.GREEN, colors.PINK, colors.YELLOW, colors.BLUE], + tooltip: { + trigger: 'item' + }, + legend: { + top: 'center', + right: 'right', + data: ['Group A', 'Group B', 'Group C', 'Group D'], + textStyle: { + color: '#6E6E6E' + } + }, + series: [{ + type: 'pie', + radius: ['50%', '70%'], + center: ['24%', '50%'], + label: { + show: false + }, + labelLine: { + normal: { + show: false + } + }, + hoverAnimation: false, + avoidLabelOverlap: false, + data: [ + { + name: 'Group A', + value: this.revenueCharData.groupA + }, + { + name: 'Group B', + value: this.revenueCharData.groupB + }, + { + name: 'Group C', + value: this.revenueCharData.groupC + }, + { + name: 'Group D', + value: this.revenueCharData.groupD + }, + ] + }] + }; + } +} diff --git a/src/app/pages/dashboard/components/server-chart/server-chart.component.html b/src/app/pages/dashboard/components/server-chart/server-chart.component.html new file mode 100644 index 0000000..6058963 --- /dev/null +++ b/src/app/pages/dashboard/components/server-chart/server-chart.component.html @@ -0,0 +1,27 @@ + + +
Server Overview
+ + +
+ + +
+

{{serverDataTitles[i]}}

+ +
+
+
diff --git a/src/app/pages/dashboard/components/server-chart/server-chart.component.scss b/src/app/pages/dashboard/components/server-chart/server-chart.component.scss new file mode 100644 index 0000000..d51520b --- /dev/null +++ b/src/app/pages/dashboard/components/server-chart/server-chart.component.scss @@ -0,0 +1,49 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; + +.server-chart { + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + display: flex; + flex-direction: column; + height: 192px; + + &__header { + align-items: center; + color: $grey; + display: flex; + justify-content: space-between; + + &-title { + font-size: $fs-medium; + font-weight: $fw-lighter; + margin: 0; + line-height: 40px; + } + } + + &__content { + display: flex; + flex-direction: column; + height: 100%; + justify-content: space-between; + + &-item { + align-items: center; + display: flex; + height: 50px; + justify-content: space-between; + + &-text { + width: 100%; + color: $grey; + font-weight: $fw-lighter; + font-size: $fs-small; + padding-right: 16px; + margin: 0; + } + } + } +} + + + diff --git a/src/app/pages/dashboard/components/server-chart/server-chart.component.ts b/src/app/pages/dashboard/components/server-chart/server-chart.component.ts new file mode 100644 index 0000000..35e90a9 --- /dev/null +++ b/src/app/pages/dashboard/components/server-chart/server-chart.component.ts @@ -0,0 +1,122 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexXAxis, + ApexDataLabels, + ApexStroke, + ApexYAxis, + ApexTitleSubtitle, + ApexLegend, ApexGrid +} from 'ng-apexcharts'; + +import { ServerChartData } from '../../models'; +import {colors} from '../../../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + stroke: ApexStroke; + dataLabels: ApexDataLabels; + yaxis: ApexYAxis; + title: ApexTitleSubtitle; + labels: string[]; + legend: ApexLegend; + subtitle: ApexTitleSubtitle; + grid: ApexGrid; + tooltip: any; + colors: string[]; + fill: ApexFill; +}; + +@Component({ + selector: 'app-server-chart', + templateUrl: './server-chart.component.html', + styleUrls: ['./server-chart.component.scss'] +}) +export class ServerChartComponent implements OnInit { + @Input() serverChartData: ServerChartData; + public charts: Partial[]; + public serverDataTitles: string[]; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.charts = [ + this.initChart(this.serverChartData.firstServerChartData, colors.PINK), + this.initChart(this.serverChartData.secondServerChartData, colors.BLUE), + this.initChart(this.serverChartData.thirdServerChartData, colors.YELLOW) + ]; + + this.serverDataTitles = [ + this.serverChartData.firstDataTitle, + this.serverChartData.secondDataTitle, + this.serverChartData.thirdDataTitle, + ] + } + + public initChart(data: number[], color: string): Partial { + return { + chart: { + type: 'area', + height: 80, + zoom: { + enabled: false + }, + toolbar: { + show: false + } + }, + series: [ + { + name: 'STOCK ABC', + data: data + } + ], + colors: [color], + fill: { + type: 'solid', + opacity: 0.3 + }, + dataLabels: { + enabled: false + }, + stroke: { + curve: 'smooth', + width: 2 + }, + labels: this.serverChartData.dates, + xaxis: { + type: 'datetime', + labels: { + show: false + }, + axisBorder: { + show: false + }, + axisTicks: { + show: false + } + }, + yaxis: { + max: 50000, + show: false + }, + legend: { + show: false + }, + grid: { + show: false, + padding: { + bottom: 0, + left: 0, + right: 0, + top: 0 + } + }, + tooltip: { + enabled: false + } + }; + } +} diff --git a/src/app/pages/dashboard/components/support-requests/support-requests.component.html b/src/app/pages/dashboard/components/support-requests/support-requests.component.html new file mode 100644 index 0000000..bb83819 --- /dev/null +++ b/src/app/pages/dashboard/components/support-requests/support-requests.component.html @@ -0,0 +1,24 @@ + + +
Support Requests
+ +
+ + + + + + + + + + + +
{{column}} + {{element[column]}} +
+ {{element[column]}} +
+
+
+
diff --git a/src/app/pages/dashboard/components/support-requests/support-requests.component.scss b/src/app/pages/dashboard/components/support-requests/support-requests.component.scss new file mode 100644 index 0000000..9b70401 --- /dev/null +++ b/src/app/pages/dashboard/components/support-requests/support-requests.component.scss @@ -0,0 +1,91 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.support-requests { + margin: 0 24px; + padding: 0; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + &__header { + color: $grey; + display: flex; + justify-content: space-between; + padding: 24px 24px 8px; + margin-bottom: 0; + } + + &__title { + font-size: $fs-medium; + font-weight: $fw-lighter; + margin: 0; + line-height: 40px; + } + + &__content { + height: 427px; + overflow-y: hidden; + overflow-x: scroll; + + @media (max-width: $small) { + height: auto; + } + } + + &__table { + width: 100%; + } + + &__table-row { + height: 64px; + } + + &__table-row-title { + color: $dark-grey; + font-size: $fs-small; + font-weight: $fw-lighter; + line-height: 24px; + text-transform: uppercase; + padding: 18.4px; + } + + &__table-content { + color: $dark-grey; + font-size: $fs-small; + padding: 20px; + } + + &__content-badge { + width: fit-content; + border-radius: 32px; + color: $white; + text-align: center; + padding: 5px 10px; + font-size: 13px; + box-sizing: border-box; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: $fw-lighter; + line-height: 1.75; + letter-spacing: 0.45px; + + &::first-letter { + text-transform: uppercase; + } + } +} + +mat-menu { + position: absolute; +} + +.send { + background-color: $green; +} + +.pending { + background-color: $yellow; +} + +.declined { + background-color: $pink; +} diff --git a/src/app/pages/dashboard/components/support-requests/support-requests.component.ts b/src/app/pages/dashboard/components/support-requests/support-requests.component.ts new file mode 100644 index 0000000..0113159 --- /dev/null +++ b/src/app/pages/dashboard/components/support-requests/support-requests.component.ts @@ -0,0 +1,13 @@ +import { Component, Input } from '@angular/core'; + +import { SupportRequestData } from '../../models/support-request-data'; + +@Component({ + selector: 'app-support-requests', + templateUrl: './support-requests.component.html', + styleUrls: ['./support-requests.component.scss'] +}) +export class SupportRequestsComponent { + @Input() supportRequestData: SupportRequestData[]; + public displayedColumns: string[] = ['name', 'email', 'product', 'price', 'date', 'city', 'status']; +} diff --git a/src/app/pages/dashboard/components/visits-chart/visits-chart.component.html b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.html new file mode 100644 index 0000000..eed6f5a --- /dev/null +++ b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.html @@ -0,0 +1,38 @@ + + +
Visits Today
+ + +
+ + + + +
+
+

Registration

+

{{visitsChartData.registration}}

+
+ +
+

Sign Out

+

{{visitsChartData.signOut}}

+
+ +
+

Rate

+

{{visitsChartData.rate}}%

+
+
+
+
diff --git a/src/app/pages/dashboard/components/visits-chart/visits-chart.component.scss b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.scss new file mode 100644 index 0000000..dda1ff3 --- /dev/null +++ b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.scss @@ -0,0 +1,71 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; + +.visits-chart { + display: flex; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + height: 192px; + flex-direction: column; + justify-content: space-between; + + &__header { + align-items: center; + color: $grey; + display: flex; + justify-content: space-between; + } + + &__title { + font-size: 20px; + font-weight: $fw-lighter; + margin: 0; + line-height: 40px; + } + + &__content { + display: flex; + flex-direction: column; + justify-content: space-between; + height: 75%; + + &-info { + align-items: center; + display: flex; + height: 96px; + justify-content: space-between; + + &-title { + margin:0; + font-weight: $fw-lighter; + font-size: $fs-large; + line-height: 1.5; + letter-spacing: 0.15px; + color: $dark-grey; + } + + &-chart { + margin-left: 16px; + } + } + + &-stats { + display: flex; + justify-content: space-between; + + &-title { + margin:0; + color: $grey; + font-weight: $fw-lighter; + font-size: $fs-small; + } + + &-data { + margin:0; + line-height: 1.5; + font-weight: $fw-lighter; + font-size: $fs-medium; + color: $dark-grey; + } + } + } +} diff --git a/src/app/pages/dashboard/components/visits-chart/visits-chart.component.ts b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.ts new file mode 100644 index 0000000..87cd1cd --- /dev/null +++ b/src/app/pages/dashboard/components/visits-chart/visits-chart.component.ts @@ -0,0 +1,14 @@ +import { Component, Input } from '@angular/core'; + +import { VisitsChartData } from '../../models'; +import { colors } from '../../../../consts'; + +@Component({ + selector: 'app-visits-chart', + templateUrl: './visits-chart.component.html', + styleUrls: ['./visits-chart.component.scss'] +}) +export class VisitsChartComponent { + @Input() visitsChartData: VisitsChartData; + public colors: typeof colors = colors; +} diff --git a/src/app/pages/dashboard/consts/custom-tooltip.ts b/src/app/pages/dashboard/consts/custom-tooltip.ts new file mode 100644 index 0000000..26f724d --- /dev/null +++ b/src/app/pages/dashboard/consts/custom-tooltip.ts @@ -0,0 +1,6 @@ +export const customTooltip: string = + '
' + + '
' + 'mobile' + '
' + + '
' + 'desktop' + '
' + + '
' + 'tablet' + '
' + + '
'; diff --git a/src/app/pages/dashboard/consts/index.ts b/src/app/pages/dashboard/consts/index.ts new file mode 100644 index 0000000..84bacd7 --- /dev/null +++ b/src/app/pages/dashboard/consts/index.ts @@ -0,0 +1 @@ +export * from './custom-tooltip'; diff --git a/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.html b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.html new file mode 100644 index 0000000..1c45194 --- /dev/null +++ b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.html @@ -0,0 +1,29 @@ + + +

Dashboard

+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + + + + + + + +
diff --git a/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.scss b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.scss new file mode 100644 index 0000000..7caa70a --- /dev/null +++ b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.scss @@ -0,0 +1,22 @@ +@import 'src/app/styles/variables'; + +.charts-wrapper { + display: flex; + margin: 0 8px; + + @media (max-width: $normal) { + flex-wrap: wrap; + } +} + +.chart { + width: 100%; + + @media (max-width: $normal) { + width: 50%; + } + + @media (max-width: $small) { + width: 100%; + } +} diff --git a/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.ts b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.ts new file mode 100644 index 0000000..7bebebc --- /dev/null +++ b/src/app/pages/dashboard/containers/dashboard-page/dashboard-page.component.ts @@ -0,0 +1,38 @@ +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; + +import { DashboardService } from '../../services'; +import { + DailyLineChartData, + PerformanceChartData, + ProjectStatData, + RevenueChartData, + ServerChartData, + SupportRequestData, + VisitsChartData +} from '../../models'; + +@Component({ + selector: 'app-dashboard-page', + templateUrl: './dashboard-page.component.html', + styleUrls: ['./dashboard-page.component.scss'] +}) +export class DashboardPageComponent { + public dailyLineChartData$: Observable; + public performanceChartData$: Observable; + public revenueChartData$: Observable; + public serverChartData$: Observable; + public supportRequestData$: Observable; + public visitsChartData$: Observable; + public projectsStatsData$: Observable; + + constructor(private service: DashboardService) { + this.dailyLineChartData$ = this.service.loadDailyLineChartData(); + this.performanceChartData$ = this.service.loadPerformanceChartData(); + this.revenueChartData$ = this.service.loadRevenueChartData(); + this.serverChartData$ = this.service.loadServerChartData(); + this.supportRequestData$ = this.service.loadSupportRequestData(); + this.visitsChartData$ = this.service.loadVisitsChartData(); + this.projectsStatsData$ = this.service.loadProjectsStatsData(); + } +} diff --git a/src/app/pages/dashboard/containers/index.ts b/src/app/pages/dashboard/containers/index.ts new file mode 100644 index 0000000..5ada6c2 --- /dev/null +++ b/src/app/pages/dashboard/containers/index.ts @@ -0,0 +1 @@ +export * from './dashboard-page/dashboard-page.component'; diff --git a/src/app/pages/dashboard/dashboard.module.ts b/src/app/pages/dashboard/dashboard.module.ts new file mode 100644 index 0000000..149a98f --- /dev/null +++ b/src/app/pages/dashboard/dashboard.module.ts @@ -0,0 +1,68 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatTableModule } from '@angular/material/table'; +import { NgxEchartsModule } from 'ngx-echarts'; +import { TrendModule } from 'ngx-trend'; +import { MatCardModule } from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatButtonModule } from '@angular/material/button'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatGridListModule } from '@angular/material/grid-list'; +import { MatSelectModule } from '@angular/material/select'; +import { MatInputModule } from '@angular/material/input'; +import { NgApexchartsModule } from 'ng-apexcharts'; +import { FormsModule } from '@angular/forms'; + +import { DashboardPageComponent } from './containers'; +import { + VisitsChartComponent, + PerformanceChartComponent, + ServerChartComponent, + RevenueChartComponent, + DailyLineChartComponent, + SupportRequestsComponent, + ProjectStatChartComponent +} from './components'; +import { SharedModule } from '../../shared/shared.module'; +import { DashboardService } from './services'; + + +@NgModule({ + declarations: [ + DashboardPageComponent, + VisitsChartComponent, + PerformanceChartComponent, + ServerChartComponent, + RevenueChartComponent, + DailyLineChartComponent, + SupportRequestsComponent, + ProjectStatChartComponent + ], + imports: [ + CommonModule, + MatTableModule, + NgxEchartsModule, + TrendModule, + MatCardModule, + MatIconModule, + MatMenuModule, + MatButtonModule, + MatProgressBarModule, + MatToolbarModule, + MatGridListModule, + MatSelectModule, + MatInputModule, + NgApexchartsModule, + FormsModule, + SharedModule + ], + exports: [ + DailyLineChartComponent + ], + providers: [ + DashboardService + ] +}) +export class DashboardModule { } diff --git a/src/app/pages/dashboard/models/daily-line-chart-data.ts b/src/app/pages/dashboard/models/daily-line-chart-data.ts new file mode 100644 index 0000000..baba09c --- /dev/null +++ b/src/app/pages/dashboard/models/daily-line-chart-data.ts @@ -0,0 +1,12 @@ +export interface DailyLineChartData { + dailyData: TimeData; + weeklyData: TimeData; + monthlyData: TimeData; + labels: string[]; +} + +export interface TimeData { + mobile: number[]; + desktop: number[]; + tablet: number[]; +} diff --git a/src/app/pages/dashboard/models/index.ts b/src/app/pages/dashboard/models/index.ts new file mode 100644 index 0000000..179317f --- /dev/null +++ b/src/app/pages/dashboard/models/index.ts @@ -0,0 +1,7 @@ +export * from './daily-line-chart-data'; +export * from './performance-chart-data'; +export * from './revenue-chart-data'; +export * from './server-chart-data'; +export * from './support-request-data'; +export * from './visits-chart-data'; +export * from './project-stat-data'; diff --git a/src/app/pages/dashboard/models/performance-chart-data.ts b/src/app/pages/dashboard/models/performance-chart-data.ts new file mode 100644 index 0000000..269ce7a --- /dev/null +++ b/src/app/pages/dashboard/models/performance-chart-data.ts @@ -0,0 +1,4 @@ +export interface PerformanceChartData { + integration: number; + sdk: number; +} diff --git a/src/app/pages/dashboard/models/project-stat-data.ts b/src/app/pages/dashboard/models/project-stat-data.ts new file mode 100644 index 0000000..7c076d1 --- /dev/null +++ b/src/app/pages/dashboard/models/project-stat-data.ts @@ -0,0 +1,32 @@ +export interface ProjectStatData { + lightBlue: { + daily: ProjectTimeData, + week: ProjectTimeData, + monthly: ProjectTimeData + }, + singApp: { + daily: ProjectTimeData, + week: ProjectTimeData, + monthly: ProjectTimeData + }, + rns: { + daily: ProjectTimeData, + week: ProjectTimeData, + monthly: ProjectTimeData + } +} + +export interface ProjectTimeData { + name: string; + users: string; + percent: number, + registrations: string, + bounce: string, + views: string, + series: [ + { + name: string, + data: number[] + } + ] +} diff --git a/src/app/pages/dashboard/models/revenue-chart-data.ts b/src/app/pages/dashboard/models/revenue-chart-data.ts new file mode 100644 index 0000000..2b8d6b7 --- /dev/null +++ b/src/app/pages/dashboard/models/revenue-chart-data.ts @@ -0,0 +1,6 @@ +export interface RevenueChartData { + groupA: number; + groupB: number; + groupC: number; + groupD: number; +} diff --git a/src/app/pages/dashboard/models/server-chart-data.ts b/src/app/pages/dashboard/models/server-chart-data.ts new file mode 100644 index 0000000..e6ba21a --- /dev/null +++ b/src/app/pages/dashboard/models/server-chart-data.ts @@ -0,0 +1,9 @@ +export interface ServerChartData { + firstServerChartData: number[], + firstDataTitle: string, + secondServerChartData: number[], + secondDataTitle: string, + thirdServerChartData: number[], + thirdDataTitle: string, + dates: string[] +} diff --git a/src/app/pages/dashboard/models/support-request-data.ts b/src/app/pages/dashboard/models/support-request-data.ts new file mode 100644 index 0000000..d2f5a62 --- /dev/null +++ b/src/app/pages/dashboard/models/support-request-data.ts @@ -0,0 +1,9 @@ +export interface SupportRequestData { + name: string; + email: string; + product: string; + price: string; + date: string; + city: string; + status: string; +} diff --git a/src/app/pages/dashboard/models/visits-chart-data.ts b/src/app/pages/dashboard/models/visits-chart-data.ts new file mode 100644 index 0000000..1bce0d7 --- /dev/null +++ b/src/app/pages/dashboard/models/visits-chart-data.ts @@ -0,0 +1,7 @@ +export interface VisitsChartData { + data: number[]; + registration: string; + signOut: string; + rate: string; + all: string; +} diff --git a/src/app/pages/dashboard/services/dashboard.service.ts b/src/app/pages/dashboard/services/dashboard.service.ts new file mode 100644 index 0000000..9719d8b --- /dev/null +++ b/src/app/pages/dashboard/services/dashboard.service.ts @@ -0,0 +1,271 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +import { + DailyLineChartData, + PerformanceChartData, + ProjectStatData, + RevenueChartData, + ServerChartData, + SupportRequestData, + VisitsChartData +} from '../models'; + + +@Injectable({ + providedIn: 'root' +}) +export class DashboardService { + public loadDailyLineChartData(): Observable { + return of({ + dailyData: { + mobile: [16, 46, 45, 12, 37, 16, 41, 13, 25, 22, 30], + desktop: [42, 60, 49, 50, 13, 15, 16, 57, 56, 27, 43], + tablet: [35, 25, 36, 30, 67, 35, 64, 12, 25, 36, 39] + }, + weeklyData: { + mobile: [23, 31, 45, 10, 37, 67, 43, 63, 15, 22, 30], + desktop: [67, 60, 49, 50, 25, 15, 16, 57, 13, 27, 43], + tablet: [56, 48, 23, 48, 13, 35, 64, 12, 45, 36, 39] + }, + monthlyData: { + mobile: [23, 11, 22, 27, 13, 22, 37, 21, 44, 22, 30], + desktop: [44, 55, 41, 67, 22, 43, 21, 41, 56, 27, 43], + tablet: [30, 25, 36, 30, 45, 35, 64, 52, 59, 36, 39] + }, + labels: [ + '01/01/2003', + '02/01/2003', + '03/01/2003', + '04/01/2003', + '05/01/2003', + '06/01/2003', + '07/01/2003', + '08/01/2003', + '09/01/2003', + '10/01/2003', + '11/01/2003' + ] + }); + } + + public loadPerformanceChartData(): Observable { + return of({ + integration: 40, + sdk: 75 + }); + } + + public loadRevenueChartData(): Observable { + return of({ + groupA: Math.round(Math.random() * 100), + groupB: Math.round(Math.random() * 100), + groupC: Math.round(Math.random() * 100), + groupD: Math.round(Math.random() * 100) + }); + } + + public loadServerChartData(): Observable { + return of({ + firstServerChartData: [ + 18107.85, + 49128.0, + 38122.9, + 28965.5, + 49340.7 + ], + firstDataTitle: '45% / 78°С / 78 Ghz', + secondServerChartData: [ + 18423.7, + 48423.5, + 28514.3, + 48481.85, + 18487.7 + ], + secondDataTitle: '57% / 45°С / 54 Ghz', + thirdServerChartData: [ + 17114.25, + 27126.6, + 47116.95, + 37203.7, + 17233.75 + ], + thirdDataTitle: '87% / 55°С / 76 Ghz', + dates: [ + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017' + ] + }); + } + + public loadSupportRequestData(): Observable { + return of ([{ + name: 'Mark Otto', + email: 'ottoto@wxample.com', + product: 'ON the Road', + price: '$25 224.2', + date: '11 May 2017', + city: 'Otsego', + status: 'send' + }, + { + name: 'Jacob Thornton', + email: 'thornton@wxample.com', + product: 'HP Core i7', + price: '$1 254.2', + date: '4 Jun 2017', + city: 'Fivepointville', + status: 'send' + }, + { + name: 'Larry the Bird', + email: 'bird@wxample.com', + product: 'Air Pro', + price: '$1 570.0', + date: '27 Aug 2017', + city: 'Leadville North', + status: 'pending' + }, + { + name: 'Joseph May', + email: 'josephmay@wxample.com', + product: 'Version Control', + price: '$5 224.5', + date: '19 Feb 2018', + city: 'Seaforth', + status: 'declined' + }, + { + name: 'Peter Horadnia', + email: 'horadnia@wxample.com', + product: 'Let\'s Dance', + price: '$43 594.7', + date: '1 Mar 2018', + city: 'Hanoverton', + status: 'send' + }]); + } + + public loadVisitsChartData(): Observable { + return of({ + data: [7, 6, 3, 8, 10, 6, 7, 8, 3, 0, 7, 6, 2, 7, 4, 7, 3, 6, 2, 3, 8, 1, 0, 4, 9], + registration: '860', + signOut: '32', + rate: '3.25', + all: '12.678' + }); + } + + public loadProjectsStatsData(): Observable { + return of({ + lightBlue: { + daily: { + name: 'Light Blue', + users: '199', + percent: -3.7, + registrations: '33', + bounce: '3.25%', + views: '330', + series: [ + { name: 'Net Profit', data: [210, 95, 155, 200, 61, 135, 63] } + ] + }, + week: { + name: 'Light Blue', + users: '1293', + percent: 3.1, + registrations: '233', + bounce: '3.1%', + views: '2310', + series: [ + { name: 'Net Profit', data: [65, 195, 135, 95, 72, 155, 200] } + ] + }, + monthly: { + name: 'Light Blue', + users: '9991', + percent: -3.1, + registrations: '725', + bounce: '3.3%', + views: '12301', + series: [ + { name: 'Net Profit', data: [152, 61, 142, 183, 74, 195, 210] } + ] + } + }, + singApp: { + daily: { + name: 'Sing App', + users: '121', + percent: -3.2, + registrations: '15', + bounce: '3.01%', + views: '302', + series: [ + { name: 'Net Profit', data: [135, 65, 192, 215, 85, 154, 75] } + ] + }, + week: { + name: 'Sing App', + users: '956', + percent: 2.9, + registrations: '295', + bounce: '3.15%', + views: '2401', + series: [ + { name: 'Net Profit', data: [78, 145, 186, 64, 78, 135, 224] } + ] + }, + monthly: { + name: 'Sing App', + users: '9982', + percent: -3.23, + registrations: '712', + bounce: '3.2%', + views: '12256', + series: [ + { name: 'Net Profit', data: [59, 75, 153, 194, 87, 205, 215] } + ] + } + }, + rns: { + daily: { + name: 'RNS', + users: '175', + percent: -3.1, + registrations: '31', + bounce: '3.23%', + views: '301', + series: [ + { name: 'Net Profit', data: [205, 81, 175, 192, 52, 199, 206] } + ] + }, + week: { + name: 'RNS', + users: '1395', + percent: 3.21, + registrations: '235', + bounce: '3.23%', + views: '2215', + series: [ + { name: 'Net Profit', data: [51, 186, 159, 201, 72, 86, 212] } + ] + }, + monthly: { + name: 'RNS', + users: '9125', + percent: -3.3, + registrations: '756', + bounce: '3.1%', + views: '12025', + series: [ + { name: 'Net Profit', data: [161, 84, 151, 201, 45, 196, 57] } + ] + } + } + }); + } +} diff --git a/src/app/pages/dashboard/services/index.ts b/src/app/pages/dashboard/services/index.ts new file mode 100644 index 0000000..bd611b2 --- /dev/null +++ b/src/app/pages/dashboard/services/index.ts @@ -0,0 +1 @@ +export * from './dashboard.service'; diff --git a/src/app/pages/not-found/not-found.component.html b/src/app/pages/not-found/not-found.component.html new file mode 100644 index 0000000..3132133 --- /dev/null +++ b/src/app/pages/not-found/not-found.component.html @@ -0,0 +1,20 @@ +
+
+
+ logo +

Material Admin

+
+ + + +

404

+ +

Oops. Looks like the page you're looking for no longer exists

+

But we're here to bring you back to safety

+ + + +
+
+
+
diff --git a/src/app/pages/not-found/not-found.component.scss b/src/app/pages/not-found/not-found.component.scss new file mode 100644 index 0000000..9a919ff --- /dev/null +++ b/src/app/pages/not-found/not-found.component.scss @@ -0,0 +1,84 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; + +.not-found-page { + background-color: $blue; + display: flex; + justify-content: center; + height: 100vh; + + &__content { + width: 355px; + } + + &__title { + display: flex; + align-items: center; + justify-content: space-between; + margin-top: 42px; + margin-bottom: 67px; + + &-img { + width: 48px; + margin-left: 20px; + margin-top: -6px; + } + + &-text { + color: $white; + margin: 1px 30px 0 0; + font-weight: 500; + font-size: 32px; + letter-spacing: 0.6px; + } + } + + &__card { + box-sizing: border-box; + width: 100%; + height: 70vh; + padding: 56px 0 36px 0; + margin: 0; + + &-content { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + } + + &-title { + font-size: 107px; + font-weight: 500; + color: $blue; + line-height: 108px; + text-align: center; + } + + &-sub-title { + margin-top: 30px; + font-size: $fs-normal; + font-weight: 400; + letter-spacing: -0.05px; + color: $blue; + text-align: center; + } + + &-sub-title-second { + margin-top: 30px; + font-size: $fs-normal; + font-weight: 400; + letter-spacing: -0.2px; + color: $grey; + text-align: center; + } + + &-button { + margin-top: 40px; + margin-left: 36px; + width: 150px; + line-height: 40px; + letter-spacing: 1px; + } + } +} diff --git a/src/app/pages/not-found/not-found.component.ts b/src/app/pages/not-found/not-found.component.ts new file mode 100644 index 0000000..406c9dd --- /dev/null +++ b/src/app/pages/not-found/not-found.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +import { routes } from '../../consts'; + +@Component({ + selector: 'app-not-found', + templateUrl: './not-found.component.html', + styleUrls: ['./not-found.component.scss'] +}) +export class NotFoundComponent { + public routes: typeof routes = routes; +} diff --git a/src/app/pages/notification/containers/error-toastr/error-toastr.component.html b/src/app/pages/notification/containers/error-toastr/error-toastr.component.html new file mode 100644 index 0000000..38001a4 --- /dev/null +++ b/src/app/pages/notification/containers/error-toastr/error-toastr.component.html @@ -0,0 +1,11 @@ +
+
+
+ email +
+

Message was not sent!

+
+
+ close +
+
diff --git a/src/app/pages/notification/containers/error-toastr/error-toastr.component.scss b/src/app/pages/notification/containers/error-toastr/error-toastr.component.scss new file mode 100644 index 0000000..b090731 --- /dev/null +++ b/src/app/pages/notification/containers/error-toastr/error-toastr.component.scss @@ -0,0 +1,26 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/toasrt'; + +.toastr-wrapper { + @include toastr-wrapper; +} + +.toastr-wrapper-icon { + @include toastr-wrapper-icon; +} + +.toastr-content { + @include toastr-content; + + &__title { + @include toastr-content-title; + } +} + +.toastr-icon { + @include toastr-icon; +} + +:host { + @include toastr($pink); +} diff --git a/src/app/pages/notification/containers/error-toastr/error-toastr.component.ts b/src/app/pages/notification/containers/error-toastr/error-toastr.component.ts new file mode 100644 index 0000000..beff258 --- /dev/null +++ b/src/app/pages/notification/containers/error-toastr/error-toastr.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { Toast, ToastPackage, ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-error-toastr', + templateUrl: './error-toastr.component.html', + styleUrls: ['./error-toastr.component.scss'], + animations: [ + trigger('flyInOut', [ + state('inactive', style({ opacity: 0 })), + state('active', style({ opacity: 1 })), + state('removed', style({ opacity: 0 })), + transition( + 'inactive => active', + animate('{{ easeTime }}ms {{ easing }}') + ), + transition( + 'active => removed', + animate('{{ easeTime }}ms {{ easing }}') + ) + ]) + ], + preserveWhitespaces: false +}) +export class ErrorToastrComponent extends Toast { + constructor( + protected toastrService: ToastrService, + public toastPackage: ToastPackage, + ) { + super(toastrService, toastPackage); + } +} diff --git a/src/app/pages/notification/containers/index.ts b/src/app/pages/notification/containers/index.ts new file mode 100644 index 0000000..8eb9e6f --- /dev/null +++ b/src/app/pages/notification/containers/index.ts @@ -0,0 +1,4 @@ +export * from './notification-page/notification-page.component'; +export * from './success-toast/success-toast.component'; +export * from './error-toastr/error-toastr.component'; +export * from './info-toastr/info-toastr.component'; diff --git a/src/app/pages/notification/containers/info-toastr/info-toastr.component.html b/src/app/pages/notification/containers/info-toastr/info-toastr.component.html new file mode 100644 index 0000000..a45dad2 --- /dev/null +++ b/src/app/pages/notification/containers/info-toastr/info-toastr.component.html @@ -0,0 +1,11 @@ +
+
+
+ announcement +
+

New user feedback received

+
+
+ close +
+
diff --git a/src/app/pages/notification/containers/info-toastr/info-toastr.component.scss b/src/app/pages/notification/containers/info-toastr/info-toastr.component.scss new file mode 100644 index 0000000..3d1a686 --- /dev/null +++ b/src/app/pages/notification/containers/info-toastr/info-toastr.component.scss @@ -0,0 +1,26 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/toasrt'; + +.toastr-wrapper { + @include toastr-wrapper; +} + +.toastr-wrapper-icon { + @include toastr-wrapper-icon; +} + +.toastr-content { + @include toastr-content; + + &__title { + @include toastr-content-title; + } +} + +.toastr-icon { + @include toastr-icon; +} + +:host { + @include toastr($blue); +} diff --git a/src/app/pages/notification/containers/info-toastr/info-toastr.component.ts b/src/app/pages/notification/containers/info-toastr/info-toastr.component.ts new file mode 100644 index 0000000..a13906b --- /dev/null +++ b/src/app/pages/notification/containers/info-toastr/info-toastr.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { Toast, ToastPackage, ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-info-toastr', + templateUrl: './info-toastr.component.html', + styleUrls: ['./info-toastr.component.scss'], + animations: [ + trigger('flyInOut', [ + state('inactive', style({ opacity: 0 })), + state('active', style({ opacity: 1 })), + state('removed', style({ opacity: 0 })), + transition( + 'inactive => active', + animate('{{ easeTime }}ms {{ easing }}') + ), + transition( + 'active => removed', + animate('{{ easeTime }}ms {{ easing }}') + ) + ]) + ], + preserveWhitespaces: false +}) +export class InfoToastrComponent extends Toast { + constructor( + protected toastrService: ToastrService, + public toastPackage: ToastPackage, + ) { + super(toastrService, toastPackage); + } +} diff --git a/src/app/pages/notification/containers/notification-page/notification-page.component.html b/src/app/pages/notification/containers/notification-page/notification-page.component.html new file mode 100644 index 0000000..961e099 --- /dev/null +++ b/src/app/pages/notification/containers/notification-page/notification-page.component.html @@ -0,0 +1,244 @@ + + +

Notifications

+
+ +
+ +
+ +

Layout Options

+
+ +

There are few position options available for notifications. You can click any of them to change notifications position:

+
+ +
+
+ + + +
+

Click any position

+
+ + + +
+
+
+
+
+ +

Notifications Types

+
+ +

Different types of notifications for lost of use cases. Custom classes are also supported.

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

Usage

+
+ +

Notifications are created with the help of ngx-toastr

+
+ +
+
+import {{'{'}} ToastrService {{'}'}} from 'ngx-toastr';
+
+@Component({{'{'}}...{{'}'}})
+  export class YourComponent {{'{'}}
+  constructor(private toastr: ToastrService) {{'{'}}{{'}'}}
+
+  showSuccess() {{'{'}}
+    this.toastr.success(
+      'Hello world!', 'Toastr fun!'
+    );
+  {{'}'}}
+{{'}'}}
+
+          
+

For more API information refer to the library documentation

+
+
+
+
+ + +

Notification Types Examples

+
+ +
+
+ email +
+

Thanks for Checking out Messenger

+
+
+
+ announcement +
+

New user feedback received

+
+
+
+ account_box +
+

New customer is registered

+
+
+
+ done +
+

The order was shipped

+
+
+
+ business_center +
+

The order was delivered

+
+
+
+ info +
+

5 Defence alerts

+
+
+
+ + +

Notification Types Examples

+
+ +
+
+ report +
+

New report has been received

+
+
+
+ announcement +
+

New user feedback received

+
+
+
+ done +
+

The item was shipped

+
+
+
+ email +
+

The new message from user @nahawaii

+
+
+
+ get_app +
+

Your file is ready to upload

+
+
+
+ disc_full +
+

The disc is full

+
+
+
+ + +

Notification Types Examples

+
+ +
+
+ report +
+

New report has been received

+
+
+
+ announcement +
+

New user feedback received

+
+
+
+ done +
+

The item was shipped

+
+
+
+ email +
+

The new message from user @nahawaii

+
+
+
+ get_app +
+

Your file is ready to upload

+
+
+
+ disc_full +
+

The disc is full

+
+
+
+
+
+ + +
diff --git a/src/app/pages/notification/containers/notification-page/notification-page.component.scss b/src/app/pages/notification/containers/notification-page/notification-page.component.scss new file mode 100644 index 0000000..e90c78d --- /dev/null +++ b/src/app/pages/notification/containers/notification-page/notification-page.component.scss @@ -0,0 +1,326 @@ +@import "src/app/styles/variables"; +@import "src/app/styles/colors"; +@import "src/app/styles/font"; + +.page-content { + padding: 0 8px; + + &__item-wrapper { + display: flex; + justify-content: space-around; + } + + &__items-wrapper { + display: flex; + justify-content: space-around; + + @media(max-width: $small) { + flex-wrap: wrap; + } + } + + &__first-item-wrapper { + display: flex; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + @media(max-width: $small) { + flex-wrap: wrap; + padding-bottom: 0; + } + } + + &__first-item-element { + width: 100%; + padding: 8px; + + @media(max-width: $small) { + padding: 0 0 16px 0; + } + } + + &__item { + box-shadow: 0 3px 11px 0 #E8EAFC, 0 3px 3px -2px #B2B2B21A, 0 1px 8px 0 #9A9A9A1A; + width: 100%; + + } +} + +.select-position { + width: 80%; + height: 200px; + border: 1px dashed $blue; + margin-top: 16px; + display: flex; + flex-direction: column; + justify-content: space-between; + + @media (max-width: $small) { + width: 100%; + } + + &__items-wrapper { + width: 100%; + height: 50px; + display: flex; + } + + &__item { + cursor:pointer; + width: 100%; + height: 100%; + background-color: $blue-white; + border: 0; + outline: none; + + &.active { + background-color: $sky; + cursor: default; + } + } + + &__center-top-item { + @extend .select-position__item; + border-left: 1px dashed $blue; + border-right: 1px dashed $blue; + border-top: none; + border-bottom: 1px dashed $blue; + } + + &__center-bottom-item { + @extend .select-position__item; + border-left: 1px dashed $blue; + border-right: 1px dashed $blue; + border-top: 1px dashed $blue; + border-bottom: none; + } + + &__item-top { + @extend .select-position__item; + border-left: none; + border-right: none; + border-top: none; + border-bottom: 1px dashed $blue; + } + + &__item-bottom { + @extend .select-position__item; + border-left: none; + border-right: none; + border-top: 1px dashed $blue; + border-bottom: none; + } + + &__title { + text-align: center; + margin: 0; + color: $sky; + font-size: $fs-medium; + font-weight: $fw-lighter; + } +} + +.mat-card-content>:last-child.position-buttons-wrapper { + margin-top: 33px; +} + +.position-button { + display:block; + color:white; + margin-bottom: 8px; + + &_blue { + background-color: $blue; + } + + &_pink { + background-color: $pink; + } + + &_green { + background-color: $green; + } +} + +.code-block { + margin-top: 50px; + + @media (max-width: $small) { + margin-top: 33px; + } +} + +.code-wrapper { + margin-top: 49px; + font-size: $fs-xs; + display: block; + overflow-x: auto; + padding: 7px; + color: $dark-grey; + background: $blue-white; + height: 277px; + overflow-y: hidden; +} + +.code { + text-wrap: none; +} + +.link { + color: $blue; +} + +.notification { + width: 100%; + display: flex; + align-items: center; + margin-top: 16px; + height: 45px; + border-radius: 45px; + + &_solid { + &-pink { + background-color: $pink; + } + + &-blue { + background-color: $blue; + } + + &-green { + background-color: $green; + } + + &-yellow { + background-color: $yellow; + } + + &-violet { + background-color: $violet; + } + } + + &_transparent { + &-pink { + background-color: $pink-15; + } + + &-blue { + background-color: $blue-15; + } + + &-green { + background-color: $green-15; + } + + &-yellow { + background-color: $yellow-15; + } + + &-violet { + background-color: $violet-15; + } + } + + &__title { + margin: 0; + + &_white { + color: $white; + } + } + + &__icon-wrapper { + height: 45px; + width: 45px; + display: flex; + align-items: center; + justify-content: center; + + &_transparent { + color: $white-80; + + &-pink { + color: $pink; + } + + &-blue { + color: $blue; + } + + &-green { + color: $green; + } + + &-yellow { + color: $yellow; + } + + &-violet { + color: $violet; + } + } + + &_solid { + &-pink { + color: $pink; + } + + &-blue { + color: $blue; + } + + &-green { + color: $green; + } + + &-yellow { + color: $yellow; + } + + &-violet { + color: $violet; + } + } + } + + &__icon-wrapper-circle { + height: 45px; + width: 45px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 45px; + margin-right: 16px; + + &_transparent { + &-pink { + color: $pink; + background-color: $pink-15; + } + + &-blue { + color: $blue; + background-color: $blue-15; + } + + &-green { + color: $green; + background-color:$green-15; + } + + &-yellow { + color: $yellow; + background-color: $yellow-15; + } + + &-violet { + color: $violet; + background-color: $violet-15; + } + } + } +} + +.icon-rotate { + transform: rotate(180deg); +} diff --git a/src/app/pages/notification/containers/notification-page/notification-page.component.ts b/src/app/pages/notification/containers/notification-page/notification-page.component.ts new file mode 100644 index 0000000..d9e9395 --- /dev/null +++ b/src/app/pages/notification/containers/notification-page/notification-page.component.ts @@ -0,0 +1,73 @@ +import { Component } from '@angular/core'; +import { ToastrService } from 'ngx-toastr'; + +import { SuccessToastComponent } from '../success-toast/success-toast.component'; +import { ErrorToastrComponent } from '../error-toastr/error-toastr.component'; +import { InfoToastrComponent } from '../info-toastr/info-toastr.component'; + +enum ToastPositionTypes { + bottomCenter = 'toast-bottom-center', + bottomRight = 'toast-bottom-right', + bottomLeft = 'toast-bottom-left', + topCenter = 'toast-top-center', + topRight = 'toast-top-right', + topLeft = 'toast-top-left' +} + +@Component({ + selector: 'app-notification-page', + templateUrl: './notification-page.component.html', + styleUrls: ['./notification-page.component.scss'] +}) +export class NotificationPageComponent { + public toastrPositionTypes: typeof ToastPositionTypes = ToastPositionTypes; + public toastrPosition: string = this.toastrPositionTypes.topRight; + public timeOut = 3000; + public toastrLink: string = 'https://github.com/scttcper/ngx-toastr'; + + constructor(private toastrService: ToastrService) { + } + + public setToastrPosition(position: string): void { + this.toastrPosition = position; + } + + public showSuccess(): void { + this.toastrService.show( + null, + null, + { + positionClass: this.toastrPosition, + toastComponent: SuccessToastComponent, + timeOut: this.timeOut, + tapToDismiss: false + } + ); + } + + public showErrorToastr(): void { + this.toastrService.show( + null, + null, + { + positionClass: this.toastrPosition, + toastComponent: ErrorToastrComponent, + timeOut: this.timeOut, + tapToDismiss: false + } + ); + } + + public showInfoToastr(): void { + this.toastrService.show( + null, + null, + { + positionClass: this.toastrPosition, + toastComponent: InfoToastrComponent, + timeOut: this.timeOut, + tapToDismiss: false + } + ); + } +} diff --git a/src/app/pages/notification/containers/success-toast/success-toast.component.html b/src/app/pages/notification/containers/success-toast/success-toast.component.html new file mode 100644 index 0000000..d223ee9 --- /dev/null +++ b/src/app/pages/notification/containers/success-toast/success-toast.component.html @@ -0,0 +1,11 @@ +
+
+
+ done +
+

The item was shipped

+
+
+ close +
+
diff --git a/src/app/pages/notification/containers/success-toast/success-toast.component.scss b/src/app/pages/notification/containers/success-toast/success-toast.component.scss new file mode 100644 index 0000000..71b02ee --- /dev/null +++ b/src/app/pages/notification/containers/success-toast/success-toast.component.scss @@ -0,0 +1,26 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/toasrt'; + +.toastr-wrapper { + @include toastr-wrapper; +} + +.toastr-wrapper-icon { + @include toastr-wrapper-icon; +} + +.toastr-content { + @include toastr-content; + + &__title { + @include toastr-content-title; + } +} + +.toastr-icon { + @include toastr-icon; +} + +:host { + @include toastr($green); +} diff --git a/src/app/pages/notification/containers/success-toast/success-toast.component.ts b/src/app/pages/notification/containers/success-toast/success-toast.component.ts new file mode 100644 index 0000000..b509a97 --- /dev/null +++ b/src/app/pages/notification/containers/success-toast/success-toast.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core'; +import { animate, state, style, transition, trigger } from '@angular/animations'; +import { Toast, ToastPackage, ToastrService } from 'ngx-toastr'; + +@Component({ + selector: 'app-success-toast', + templateUrl: './success-toast.component.html', + styleUrls: ['./success-toast.component.scss'], + animations: [ + trigger('flyInOut', [ + state('inactive', style({ opacity: 0 })), + state('active', style({ opacity: 1 })), + state('removed', style({ opacity: 0 })), + transition( + 'inactive => active', + animate('{{ easeTime }}ms {{ easing }}') + ), + transition( + 'active => removed', + animate('{{ easeTime }}ms {{ easing }}') + ) + ]) + ], + preserveWhitespaces: false +}) +export class SuccessToastComponent extends Toast { + constructor( + protected toastrService: ToastrService, + public toastPackage: ToastPackage, + ) { + super(toastrService, toastPackage); + } +} diff --git a/src/app/pages/notification/notification-routing.module.ts b/src/app/pages/notification/notification-routing.module.ts new file mode 100644 index 0000000..cf835d1 --- /dev/null +++ b/src/app/pages/notification/notification-routing.module.ts @@ -0,0 +1,21 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +import { NotificationPageComponent } from './containers'; + +const routes: Routes = [ + { + path: '', + component: NotificationPageComponent + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [RouterModule] +}) + +export class NotificationRoutingModule { +} diff --git a/src/app/pages/notification/notification.module.ts b/src/app/pages/notification/notification.module.ts new file mode 100644 index 0000000..1380ab0 --- /dev/null +++ b/src/app/pages/notification/notification.module.ts @@ -0,0 +1,35 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatCardModule } from '@angular/material/card'; +import { MatButtonModule } from '@angular/material/button'; +import { MatIconModule } from '@angular/material/icon'; + +import { + ErrorToastrComponent, + InfoToastrComponent, + NotificationPageComponent, + SuccessToastComponent +} from './containers'; +import { NotificationRoutingModule } from './notification-routing.module'; +import { SharedModule } from '../../shared/shared.module'; + + +@NgModule({ + declarations: [ + NotificationPageComponent, + SuccessToastComponent, + ErrorToastrComponent, + InfoToastrComponent + ], + imports: [ + CommonModule, + NotificationRoutingModule, + MatToolbarModule, + MatCardModule, + MatButtonModule, + MatIconModule, + SharedModule + ] +}) +export class NotificationModule { } diff --git a/src/app/pages/tables/components/employee-table/employee-table.component.html b/src/app/pages/tables/components/employee-table/employee-table.component.html new file mode 100644 index 0000000..6c9a7a1 --- /dev/null +++ b/src/app/pages/tables/components/employee-table/employee-table.component.html @@ -0,0 +1,75 @@ + + +

Employee List

+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + Name {{element.name}} Company {{element.company}} City {{element.city}} State {{element.state}}
+
+ +
diff --git a/src/app/pages/tables/components/employee-table/employee-table.component.scss b/src/app/pages/tables/components/employee-table/employee-table.component.scss new file mode 100644 index 0000000..4fd0c25 --- /dev/null +++ b/src/app/pages/tables/components/employee-table/employee-table.component.scss @@ -0,0 +1,103 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.employee-table-wrapper { + padding-left: 0; + padding-right: 0; + margin: 16px 16px 32px 16px; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + &__header { + padding: 0 24px; + display: flex; + align-items: center; + justify-content: space-between; + + @media (max-width: $small) { + padding: 0 16px; + } + } + + &__title { + margin: 0; + } + + &__search { + display: flex; + align-items: center; + } + + &__icon-wrapper { + height: 46px; + width: 46px; + display: flex; + align-items: center; + justify-content: center; + } + + &__icon { + color: inherit; + } + + &__search-input { + font-size: $fs-normal; + height: 32px; + border: 0; + border-bottom: 1px solid $grey; + outline: none; + + @media (max-width: $small) { + width: 150px; + } + + &:focus { + border-bottom: 2px solid $blue; + } + } + + &__button { + box-shadow: none; + background-color: inherit; + width: 46px; + height: 46px; + color: $grey; + + &:hover { + background-color: $black-08; + color: $blue; + } + } +} + +.employee-table { + &__content { + @media (max-width: $small) { + overflow-x: scroll; + } + } + + &__table { + width:100%; + box-shadow: none; + + @media (max-width: $small) { + width: 200%; + } + } + + &__table-checkbox { + width: 32px; + padding-left: 24px; + } + + &__table-header { + padding: 1rem; + font-size: $fs-small; + } + + &__table-body { + padding: 1rem; + font-size: $fs-small; + } +} diff --git a/src/app/pages/tables/components/employee-table/employee-table.component.ts b/src/app/pages/tables/components/employee-table/employee-table.component.ts new file mode 100644 index 0000000..ce2f80e --- /dev/null +++ b/src/app/pages/tables/components/employee-table/employee-table.component.ts @@ -0,0 +1,60 @@ +import { Component, Input, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource } from '@angular/material/table'; +import { SelectionModel } from '@angular/cdk/collections'; +import { MatPaginator } from '@angular/material/paginator'; + +import { Employee } from '../../models/employee'; + +@Component({ + selector: 'app-employee-table', + templateUrl: './employee-table.component.html', + styleUrls: ['./employee-table.component.scss'] +}) +export class EmployeeTableComponent implements OnInit { + @Input() employeeTableData: Employee[]; + public displayedColumns: string[] = ['select', 'name', 'company', 'city', 'state']; + public dataSource: MatTableDataSource; + public selection = new SelectionModel(true, []); + + public isShowFilterInput = false; + + @ViewChild(MatPaginator, {static: true}) paginator: MatPaginator; + + public ngOnInit(): void { + this.dataSource = new MatTableDataSource(this.employeeTableData); + + this.dataSource.paginator = this.paginator; + } + + /** Whether the number of selected elements matches the total number of rows. */ + public isAllSelected(): boolean { + const numSelected = this.selection.selected.length; + const numRows = this.dataSource.data.length; + return numSelected === numRows; + } + + /** Selects all rows if they are not all selected; otherwise clear selection. */ + public masterToggle(): void { + this.isAllSelected() ? + this.selection.clear() : + this.dataSource.data.forEach(row => this.selection.select(row)); + } + + /** The label for the checkbox on the passed row */ + public checkboxLabel(row?: any): string { + if (!row) { + return `${this.isAllSelected() ? 'select' : 'deselect'} all`; + } + return `${this.selection.isSelected(row) ? 'deselect' : 'select'} row ${row.position + 1}`; + } + + public applyFilter(event: Event): void { + const filterValue = (event.target as HTMLInputElement).value; + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + public showFilterInput(): void { + this.isShowFilterInput = !this.isShowFilterInput; + this.dataSource = new MatTableDataSource(this.employeeTableData); + } +} diff --git a/src/app/pages/tables/components/index.ts b/src/app/pages/tables/components/index.ts new file mode 100644 index 0000000..76c64aa --- /dev/null +++ b/src/app/pages/tables/components/index.ts @@ -0,0 +1,2 @@ +export * from './material-table/material-table.component'; +export * from './employee-table/employee-table.component'; diff --git a/src/app/pages/tables/components/material-table/material-table.component.html b/src/app/pages/tables/components/material-table/material-table.component.html new file mode 100644 index 0000000..828a142 --- /dev/null +++ b/src/app/pages/tables/components/material-table/material-table.component.html @@ -0,0 +1,24 @@ + + +
Material-UI Table
+ +
+ + + + + + + + + + +
{{column}} + {{element[column]}} +
+ {{element[column]}} +
+
+
+
+ diff --git a/src/app/pages/tables/components/material-table/material-table.component.scss b/src/app/pages/tables/components/material-table/material-table.component.scss new file mode 100644 index 0000000..56bbf62 --- /dev/null +++ b/src/app/pages/tables/components/material-table/material-table.component.scss @@ -0,0 +1,92 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.material-table { + margin-top: 24px; + padding: 0; + overflow: hidden; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + + &__header { + color: $grey; + display: flex; + justify-content: space-between; + padding: 24px 24px 8px; + margin-bottom: 0; + } + + &__title { + font-size: $fs-medium; + font-weight: $fw-lighter; + margin: 0; + line-height: 40px; + } + + &__content { + height: 424px; + overflow-y: hidden; + overflow-x: scroll; + + @media (max-width: $small) { + height: auto; + } + } + + &__table { + width: 100%; + } + + &__table-row { + height: 64px; + } + + &__table-row-title { + color: $dark-grey; + font-size: $fs-small; + font-weight: $fw-lighter; + line-height: 24px; + text-transform: uppercase; + padding: 16px; + } + + &__table-content { + color: $dark-grey; + font-size: $fs-small; + padding: 20px; + } + + &__content-badge { + width: fit-content; + border-radius: 32px; + color: $white; + text-align: center; + padding: 5px 10px; + font-size: 13px; + box-sizing: border-box; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + font-weight: $fw-lighter; + line-height: 1.75; + letter-spacing: 0.457px; + + &::first-letter { + text-transform: uppercase; + } + } +} + +mat-menu { + position: absolute; +} + +.send { + background-color: $green; +} + +.pending { + background-color: $yellow; +} + +.declined { + background-color: $pink; +} diff --git a/src/app/pages/tables/components/material-table/material-table.component.ts b/src/app/pages/tables/components/material-table/material-table.component.ts new file mode 100644 index 0000000..af748dc --- /dev/null +++ b/src/app/pages/tables/components/material-table/material-table.component.ts @@ -0,0 +1,18 @@ +import { Component, Input, OnInit } from '@angular/core'; + +import { Customer } from '../../models'; + +@Component({ + selector: 'app-material-table', + templateUrl: './material-table.component.html', + styleUrls: ['./material-table.component.scss'] +}) +export class MaterialTableComponent implements OnInit { + @Input() materialTableDate: Customer[]; + public displayedColumns: string[] = ['name', 'email', 'product', 'price', 'date', 'city', 'status']; + public dataSource: Customer[]; + + public ngOnInit() { + this.dataSource = this.materialTableDate; + } +} diff --git a/src/app/pages/tables/containers/index.ts b/src/app/pages/tables/containers/index.ts new file mode 100644 index 0000000..d8687bd --- /dev/null +++ b/src/app/pages/tables/containers/index.ts @@ -0,0 +1 @@ +export * from './tables-page/tables-page.component'; diff --git a/src/app/pages/tables/containers/tables-page/tables-page.component.html b/src/app/pages/tables/containers/tables-page/tables-page.component.html new file mode 100644 index 0000000..8b97c73 --- /dev/null +++ b/src/app/pages/tables/containers/tables-page/tables-page.component.html @@ -0,0 +1,12 @@ + + +

Tables

+
+ +
+ + +
+ + +
diff --git a/src/app/pages/tables/containers/tables-page/tables-page.component.scss b/src/app/pages/tables/containers/tables-page/tables-page.component.scss new file mode 100644 index 0000000..338275a --- /dev/null +++ b/src/app/pages/tables/containers/tables-page/tables-page.component.scss @@ -0,0 +1,3 @@ +.tables-wrapper { + padding: 0 8px; +} diff --git a/src/app/pages/tables/containers/tables-page/tables-page.component.ts b/src/app/pages/tables/containers/tables-page/tables-page.component.ts new file mode 100644 index 0000000..6feb91f --- /dev/null +++ b/src/app/pages/tables/containers/tables-page/tables-page.component.ts @@ -0,0 +1,20 @@ +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; + +import { TablesService } from '../../services'; +import { Customer, Employee } from '../../models'; + +@Component({ + selector: 'app-tables-page', + templateUrl: './tables-page.component.html', + styleUrls: ['./tables-page.component.scss'] +}) +export class TablesPageComponent { + public employeeTableData$: Observable + public materialTableData$: Observable + + constructor(private service: TablesService) { + this.employeeTableData$ = service.loadEmployeeTableData(); + this.materialTableData$ = service.loadMaterialTableData(); + } +} diff --git a/src/app/pages/tables/models/customer.ts b/src/app/pages/tables/models/customer.ts new file mode 100644 index 0000000..9d75c93 --- /dev/null +++ b/src/app/pages/tables/models/customer.ts @@ -0,0 +1,9 @@ +export interface Customer { + name: string; + email: string; + product: string; + price: string; + date: string; + city: string; + status: string; +} diff --git a/src/app/pages/tables/models/employee.ts b/src/app/pages/tables/models/employee.ts new file mode 100644 index 0000000..4a23397 --- /dev/null +++ b/src/app/pages/tables/models/employee.ts @@ -0,0 +1,6 @@ +export interface Employee { + name: string; + company: string; + city: string; + state: string; +} diff --git a/src/app/pages/tables/models/index.ts b/src/app/pages/tables/models/index.ts new file mode 100644 index 0000000..011f194 --- /dev/null +++ b/src/app/pages/tables/models/index.ts @@ -0,0 +1,2 @@ +export * from './employee'; +export * from './customer'; diff --git a/src/app/pages/tables/services/index.ts b/src/app/pages/tables/services/index.ts new file mode 100644 index 0000000..bd4d2e4 --- /dev/null +++ b/src/app/pages/tables/services/index.ts @@ -0,0 +1 @@ +export * from './tables.service'; diff --git a/src/app/pages/tables/services/tables.service.ts b/src/app/pages/tables/services/tables.service.ts new file mode 100644 index 0000000..783662b --- /dev/null +++ b/src/app/pages/tables/services/tables.service.ts @@ -0,0 +1,81 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +import {Customer, Employee} from '../models'; + +@Injectable({ + providedIn: 'root' +}) +export class TablesService { + public loadEmployeeTableData(): Observable { + return of([ + {name: 'Joe James', company: 'Example Inc.', city: 'Yonkers', state: 'NY'}, + {name: 'John Walsh', company: 'Example Inc.', city: 'Hartford', state: 'CT'}, + {name: 'Bob Herm', company: 'Example Inc.', city: 'Tampa', state: 'FL'}, + {name: 'James Houston', company: 'Example Inc.', city: 'Dallas', state: 'TX'}, + {name: 'Prabhakar Linwood', company: 'Example Inc.', city: 'Hartford', state: 'CT'}, + {name: 'Kaui Ignace', company: 'Example Inc.', city: 'Yonkers', state: 'NY'}, + {name: 'Esperanza Susanne', company: 'Example Inc.', city: 'Hartford', state: 'CT'}, + {name: 'Christian Birgitte', company: 'Example Inc.', city: 'Tampa', state: 'FL'}, + {name: 'Meral Elias', company: 'Example Inc.', city: 'Hartford', state: 'CT'}, + {name: 'Deep Pau', company: 'Example Inc.', city: 'Yonkers', state: 'NY'}, + {name: 'Sebastiana Hani', company: 'Example Inc.', city: 'Dallas', state: 'TX'}, + {name: 'Marciano Oihana', company: 'Example Inc.', city: 'Yonkers', state: 'NY'}, + {name: 'Brigid Ankur', company: 'Example Inc.', city: 'Dallas', state: 'TX'}, + {name: 'Anna Siranush', company: 'Example Inc.', city: 'Yonkers', state: 'NY'}, + {name: 'Avram Sylva', company: 'Example Inc.', city: 'Hartford', state: 'CT'}, + {name: 'Serafima Babatunde', company: 'Example Inc.', city: 'Tampa', state: 'FL'}, + {name: 'Gaston Festus', company: 'Example Inc.', city: 'Tampa', state: 'FL'} + ]); + } + + public loadMaterialTableData(): Observable { + return of([ + { + name: 'Mark Otto', + email: 'ottoto@wxample.com', + product: 'ON the Road', + price: '$25 224.2', + date: '11 May 2017', + city: 'Otsego', + status: 'send' + }, + { + name: 'Jacob Thornton', + email: 'thornton@wxample.com', + product: 'HP Core i7', + price: '$1 254.2', + date: '4 Jun 2017', + city: 'Fivepointville', + status: 'send' + }, + { + name: 'Larry the Bird', + email: 'bird@wxample.com', + product: 'Air Pro', + price: '$1 570.0', + date: '27 Aug 2017', + city: 'Leadville North', + status: 'pending' + }, + { + name: 'Joseph May', + email: 'josephmay@wxample.com', + product: 'Version Control', + price: '$5 224.5', + date: '19 Feb 2018', + city: 'Seaforth', + status: 'declined' + }, + { + name: 'Peter Horadnia', + email: 'horadnia@wxample.com', + product: 'Let\'s Dance', + price: '$43 594.7', + date: '1 Mar 2018', + city: 'Hanoverton', + status: 'send' + } + ]); + } +} diff --git a/src/app/pages/tables/tables-routing.module.ts b/src/app/pages/tables/tables-routing.module.ts new file mode 100644 index 0000000..1cf4732 --- /dev/null +++ b/src/app/pages/tables/tables-routing.module.ts @@ -0,0 +1,21 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +import { TablesPageComponent } from './containers'; + +const routes: Routes = [ + { + path: '', + component: TablesPageComponent + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [RouterModule] +}) + +export class TablesRoutingModule { +} diff --git a/src/app/pages/tables/tables.module.ts b/src/app/pages/tables/tables.module.ts new file mode 100644 index 0000000..a429b9a --- /dev/null +++ b/src/app/pages/tables/tables.module.ts @@ -0,0 +1,43 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatCardModule} from '@angular/material/card'; +import { MatIconModule } from '@angular/material/icon'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatTableModule } from '@angular/material/table'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatFormFieldModule } from '@angular/material/form-field'; + +import { TablesPageComponent } from './containers'; +import { TablesRoutingModule } from './tables-routing.module'; +import { SharedModule } from '../../shared/shared.module'; +import { EmployeeTableComponent, MaterialTableComponent } from './components'; +import { TablesService } from './services'; + +@NgModule({ + declarations: [ + TablesPageComponent, + MaterialTableComponent, + EmployeeTableComponent + ], + imports: [ + CommonModule, + TablesRoutingModule, + MatCardModule, + MatIconModule, + MatMenuModule, + MatTableModule, + MatButtonModule, + MatCheckboxModule, + MatToolbarModule, + MatPaginatorModule, + MatFormFieldModule, + SharedModule + ], + providers: [ + TablesService + ] +}) +export class TablesModule { } diff --git a/src/app/pages/typography/containers/index.ts b/src/app/pages/typography/containers/index.ts new file mode 100644 index 0000000..4c5fe7c --- /dev/null +++ b/src/app/pages/typography/containers/index.ts @@ -0,0 +1 @@ +export * from './typography-page/typography-page.component'; diff --git a/src/app/pages/typography/containers/typography-page/typography-page.component.html b/src/app/pages/typography/containers/typography-page/typography-page.component.html new file mode 100644 index 0000000..63982e4 --- /dev/null +++ b/src/app/pages/typography/containers/typography-page/typography-page.component.html @@ -0,0 +1,67 @@ + + +

Typography

+
+ + +
+ + +

Headings

+
+
+

h1. Heading

+

h2. Heading

+

h3. Heading

+

h4. Heading

+
h5. Heading
+
h6. Heading
+
+
+ + +

Typography Colors

+
+
+

h1. Heading

+

h2. Heading

+

h3. Heading

+

h4. Heading

+
h5. Heading
+
h6. Heading
+
+
+
+
+ + +

Basic Text Settings

+
+
+

Basic text

+

Basic light text

+

Basic medium text

+

Basic bold text

+

basic lowercase text

+

basic lowercase text

+

Basic Capitalized Text

+

Basic Cursive Text

+
+
+ + +

Text Size

+
+
+

Heading Typography SM Font Size

+

Heading Typography Regular Font Size

+

Heading Typography MD Font Size

+

Heading Typography XL Font Size

+

Heading Typography XXL Font Size

+
+
+
+
+ + +
diff --git a/src/app/pages/typography/containers/typography-page/typography-page.component.scss b/src/app/pages/typography/containers/typography-page/typography-page.component.scss new file mode 100644 index 0000000..c202075 --- /dev/null +++ b/src/app/pages/typography/containers/typography-page/typography-page.component.scss @@ -0,0 +1,103 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/variables'; +@import 'src/app/styles/font'; + +.typography-content { + + &__wrapper { + display: flex; + padding: 0 8px; + + @media (max-width: $small) { + flex-wrap: wrap; + } + } + + &__item-wrapper { + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px #B2B2B21A, 0 1px 8px 0 #9A9A9A1A; + width: 100%; + margin: 16px; + } + + &__headings, &__colors, &__settings, &__size { + margin-top: 8px; + border: 1px dashed $blue; + padding: 32px 16px; + + h1 { + @media (max-width: $small) { + line-height: 46px; + } + } + } + + &__colors { + &_blue { + color: $blue; + } + + &_green { + color: $green; + } + + &_pink { + color: $pink; + } + + &_yellow { + color: $yellow; + } + + &_light-blue { + color: $light-blue; + } + + &_violet { + color: $violet; + } + } +} + +.fw-light { + font-weight: $fw-lighter; +} + +.fw-medium { + font-weight: $fw-normal; +} + +.fw-bold { + font-weight: $fw-bold; +} + +.font-uppercase { + text-transform: uppercase; +} + +.font-lowercase { + text-transform: lowercase; +} + +.fst-italic { + font-style: italic; +} + +.fs-sm { + font-size: $fs-xs; +} + +.fs-regular { + font-size: $fs-small; +} + +.fs-md { + font-size: $fs-medium; +} + +.fs-xl { + font-size: $fs-xl; +} + +.fs-xxl { + font-size: $fs-xxxl; +} diff --git a/src/app/pages/typography/containers/typography-page/typography-page.component.ts b/src/app/pages/typography/containers/typography-page/typography-page.component.ts new file mode 100644 index 0000000..35bede7 --- /dev/null +++ b/src/app/pages/typography/containers/typography-page/typography-page.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-typography-page', + templateUrl: './typography-page.component.html', + styleUrls: ['./typography-page.component.scss'] +}) +export class TypographyPageComponent { +} diff --git a/src/app/pages/typography/typography-routing.module.ts b/src/app/pages/typography/typography-routing.module.ts new file mode 100644 index 0000000..8bf2515 --- /dev/null +++ b/src/app/pages/typography/typography-routing.module.ts @@ -0,0 +1,21 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +import { TypographyPageComponent } from './containers'; + +const routes: Routes = [ + { + path: '', + component: TypographyPageComponent + } +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [RouterModule] +}) + +export class TypographyRoutingModule { +} diff --git a/src/app/pages/typography/typography.module.ts b/src/app/pages/typography/typography.module.ts new file mode 100644 index 0000000..2f84db0 --- /dev/null +++ b/src/app/pages/typography/typography.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatCardModule } from '@angular/material/card'; +import { MatToolbarModule } from '@angular/material/toolbar'; + +import { TypographyPageComponent } from './containers'; +import { TypographyRoutingModule } from './typography-routing.module'; +import { SharedModule } from '../../shared/shared.module'; + +@NgModule({ + declarations: [TypographyPageComponent], + imports: [ + CommonModule, + TypographyRoutingModule, + MatCardModule, + MatToolbarModule, + SharedModule + ] +}) +export class TypographyModule { } diff --git a/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.html b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.html new file mode 100644 index 0000000..96efc64 --- /dev/null +++ b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.html @@ -0,0 +1,12 @@ + diff --git a/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.scss b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.scss @@ -0,0 +1 @@ + diff --git a/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.ts b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.ts new file mode 100644 index 0000000..61681ed --- /dev/null +++ b/src/app/pages/ui-elements/components/dashed-line-chart/dashed-line-chart.component.ts @@ -0,0 +1,111 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexDataLabels, ApexFill, ApexGrid, + ApexLegend, ApexMarkers, + ApexNonAxisChartSeries, ApexResponsive, + ApexStroke, + ApexTooltip, + ApexXAxis +} from 'ng-apexcharts'; + +import { DashedLineChartData } from '../../models'; +import {colors} from '../../../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries | ApexNonAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + stroke: ApexStroke; + tooltip: ApexTooltip; + dataLabels: ApexDataLabels; + legend: ApexLegend; + colors: string[]; + markers: ApexMarkers; + grid: ApexGrid; + labels: string[]; + responsive: ApexResponsive[]; + fill: ApexFill; +}; + +@Component({ + selector: 'app-dashed-line-chart', + templateUrl: './dashed-line-chart.component.html', + styleUrls: ['./dashed-line-chart.component.scss'] +}) +export class DashedLineChartComponent implements OnInit { + @Input() dashedLineChartData: DashedLineChartData; + public apexDashedLineChartOptions: Partial; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.initChart(); + } + + public initChart(): void { + this.apexDashedLineChartOptions = { + series: this.dashedLineChartData.series, + chart: { + height: 350, + type: 'line', + toolbar: { + show: false + } + }, + colors: [colors.BLUE, colors.YELLOW, colors.PINK], + dataLabels: { + enabled: false + }, + stroke: { + width: 2, + curve: 'smooth', + dashArray: [0, 8, 5] + }, + legend: { + show: false + }, + markers: { + size: 0, + hover: { + sizeOffset: 6 + } + }, + xaxis: { + labels: { + trim: false, + rotate: -45 + }, + categories: this.dashedLineChartData.categories, + }, + tooltip: { + y: [ + { + title: { + formatter(val) { + return val + ' (mins)'; + } + } + }, + { + title: { + formatter(val) { + return val + ' per session'; + } + } + }, + { + title: { + formatter(val) { + return val; + } + } + } + ] + }, + grid: { + borderColor: colors.LIGHT_BLUE + } + }; + } +} diff --git a/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.html b/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.html new file mode 100644 index 0000000..c4b12bc --- /dev/null +++ b/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.html @@ -0,0 +1,7 @@ + diff --git a/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.scss b/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.ts b/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.ts new file mode 100644 index 0000000..cc54ac6 --- /dev/null +++ b/src/app/pages/ui-elements/components/heatmap-chart/heatmap-chart.component.ts @@ -0,0 +1,66 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexDataLabels, ApexFill, ApexGrid, + ApexLegend, ApexMarkers, + ApexNonAxisChartSeries, ApexResponsive, + ApexStroke, + ApexTooltip, + ApexXAxis +} from 'ng-apexcharts'; + +import { HeatmapChartData } from '../../models'; +import { colors } from '../../../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries | ApexNonAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + stroke: ApexStroke; + tooltip: ApexTooltip; + dataLabels: ApexDataLabels; + legend: ApexLegend; + colors: string[]; + markers: ApexMarkers; + grid: ApexGrid; + labels: string[]; + responsive: ApexResponsive[]; + fill: ApexFill; +}; + +@Component({ + selector: 'app-heatmap-chart', + templateUrl: './heatmap-chart.component.html', + styleUrls: ['./heatmap-chart.component.scss'] +}) +export class HeatmapChartComponent implements OnInit { + @Input() heatmapChartData: HeatmapChartData; + public apexHeatmapChartOptions: Partial; + + public ngOnInit(): void { + this.initChart() + } + + public initChart(): void { + this.apexHeatmapChartOptions = { + series: this.heatmapChartData.series, + chart: { + height: 350, + type: 'heatmap', + toolbar: { + show: false + } + }, + dataLabels: { + enabled: false + }, + colors: [colors.BLUE], + xaxis: { + labels: { + rotate: 0 + } + } + }; + } +} diff --git a/src/app/pages/ui-elements/components/icons-page/icons-page.component.html b/src/app/pages/ui-elements/components/icons-page/icons-page.component.html new file mode 100644 index 0000000..e6ea176 --- /dev/null +++ b/src/app/pages/ui-elements/components/icons-page/icons-page.component.html @@ -0,0 +1,30 @@ + + +

Icons

+ +
+ + + + +
+
+ {{toShakeCase(iconName)}} + {{iconName}} +
+
+
+ + +
+
+ + {{toFontAwesomeText(iconName)}} +
+
+
+
+
+ + +
diff --git a/src/app/pages/ui-elements/components/icons-page/icons-page.component.scss b/src/app/pages/ui-elements/components/icons-page/icons-page.component.scss new file mode 100644 index 0000000..ba8213b --- /dev/null +++ b/src/app/pages/ui-elements/components/icons-page/icons-page.component.scss @@ -0,0 +1,54 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; + +.icons-wrapper { + padding:0; + margin: 16px 24px 0; + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; +} + +.icons-header { + display: flex; + justify-content: space-between; + padding: 50px 24px 16px 24px; + + &__title { + font-weight: $fw-lighter; + font-size: $fs-xxxl; + color: $light-grey; + line-height: 1; + letter-spacing: -0.24992px; + } + + &__button { + height: 41.6px; + width: 90.11px; + color: $white; + background-color: $pink; + line-height: 1.75; + font-size: $fs-normal; + font-weight: $fw-lighter; + } +} + +.icons-content { + display: flex; + flex-wrap: wrap; + width: 100%; + overflow: hidden; + padding: 0 16px; + + &__icon-wrapper { + width: 158px; + padding: 8px; + color: $grey; + display: flex; + align-items: center; + } + + &__icon-title { + padding-left: 16px; + overflow: hidden; + text-overflow: ellipsis; + } +} diff --git a/src/app/pages/ui-elements/components/icons-page/icons-page.component.ts b/src/app/pages/ui-elements/components/icons-page/icons-page.component.ts new file mode 100644 index 0000000..89dca35 --- /dev/null +++ b/src/app/pages/ui-elements/components/icons-page/icons-page.component.ts @@ -0,0 +1,1042 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-icons-page', + templateUrl: './icons-page.component.html', + styleUrls: ['./icons-page.component.scss'] +}) +export class IconsPageComponent { + public materialIcons: string[] = [ + 'AccessAlarm', + 'AccessAlarms', + 'Accessibility', + 'Accessible', + 'AccessibleForward', + 'AccessTime', + 'AccountBalance', + 'AccountBalanceWallet', + 'AccountBox', + 'AccountCircle', + 'AcUnit', + 'Adb', + 'Adjust', + 'AirlineSeatFlat', + 'AirlineSeatFlatAngled', + 'AirlineSeatIndividualSuite', + 'AirlineSeatLegroomExtra', + 'AirlineSeatLegroomNormal', + 'AirlineSeatLegroomReduced', + 'AirlineSeatReclineExtra', + 'AirlineSeatReclineNormal', + 'AirplanemodeActive', + 'AirplanemodeInactive', + 'Airplay', + 'AirportShuttle', + 'Alarm', + 'Album', + 'AllInbox', + 'AllInclusive', + 'AllOut', + 'AlternateEmail', + 'Android', + 'Announcement', + 'Apps', + 'Archive', + 'ArrowBack', + 'ArrowBackIos', + 'ArrowDownward', + 'ArrowDropDown', + 'ArrowDropDownCircle', + 'ArrowDropUp', + 'ArrowForward', + 'ArrowForwardIos', + 'ArrowLeft', + 'ArrowRight', + 'ArrowRightAlt', + 'ArrowUpward', + 'ArtTrack', + 'AspectRatio', + 'Assessment', + 'Assignment', + 'AssignmentInd', + 'AssignmentLate', + 'AssignmentReturn', + 'AssignmentReturned', + 'AssignmentTurnedIn', + 'Assistant', + 'AssistantPhoto', + 'Atm', + 'AttachFile', + 'Attachment', + 'AttachMoney', + 'Audiotrack', + 'Autorenew', + 'AvTimer', + 'Backspace', + 'Backup', + 'Ballot', + 'BarChart', + 'BatteryAlert', + 'BatteryChargingFull', + 'BatteryFull', + 'BatteryStd', + 'BatteryUnknown', + 'BeachAccess', + 'Beenhere', + 'Block', + 'Bluetooth', + 'BluetoothAudio', + 'BluetoothConnected', + 'BluetoothDisabled', + 'BluetoothSearching', + 'BlurCircular', + 'BlurLinear', + 'Book', + 'Bookmark', + 'BookmarkBorder', + 'Bookmarks', + 'BorderAll', + 'BorderBottom', + 'BorderClear', + 'BorderColor', + 'BorderHorizontal', + 'BorderInner', + 'BorderLeft', + 'BorderOuter', + 'BorderRight', + 'BorderStyle', + 'BorderTop', + 'BorderVertical', + 'BrandingWatermark', + 'Brightness_1', + 'Brightness_2', + 'Brightness_3', + 'Brightness_4', + 'Brightness_5', + 'Brightness_6', + 'Brightness_7', + 'BrightnessAuto', + 'BrightnessHigh', + 'BrightnessLow', + 'BrightnessMedium', + 'BrokenImage', + 'Brush', + 'BubbleChart', + 'BugReport', + 'Build', + 'BurstMode', + 'Business', + 'BusinessCenter', + 'Cached', + 'Cake', + 'CalendarToday', + 'CalendarViewDay', + 'Call', + 'CallEnd', + 'CallMade', + 'CallMerge', + 'CallMissed', + 'CallMissedOutgoing', + 'CallReceived', + 'CallSplit', + 'CallToAction', + 'Camera', + 'CameraAlt', + 'CameraEnhance', + 'CameraFront', + 'CameraRear', + 'CameraRoll', + 'Cancel', + 'CancelPresentation', + 'CardGiftcard', + 'CardMembership', + 'CardTravel', + 'Casino', + 'Cast', + 'CastConnected', + 'CastForEducation', + 'Category', + 'CellWifi', + 'CenterFocusStrong', + 'CenterFocusWeak', + 'ChangeHistory', + 'Chat', + 'ChatBubble', + 'ChatBubbleOutline', + 'Check', + 'CheckBox', + 'CheckBoxOutlineBlank', + 'CheckCircle', + 'CheckCircleOutline', + 'ChevronLeft', + 'ChevronRight', + 'ChildCare', + 'ChildFriendly', + 'ChromeReaderMode', + 'Class', + 'Clear', + 'ClearAll', + 'Close', + 'ClosedCaption', + 'Cloud', + 'CloudCircle', + 'CloudDone', + 'CloudDownload', + 'CloudQueue', + 'CloudUpload', + 'Code', + 'Collections', + 'CollectionsBookmark', + 'Colorize', + 'ColorLens', + 'Comment', + 'Commute', + 'Compare', + 'CompareArrows', + 'CompassCalibration', + 'Computer', + 'ConfirmationNumber', + 'ContactMail', + 'ContactPhone', + 'Contacts', + 'ContactSupport', + 'ControlCamera', + 'ControlPoint', + 'ControlPointDuplicate', + 'Copyright', + 'Create', + 'CreditCard', + 'Crop', + 'Crop_16_9', + 'Crop_3_2', + 'Crop_5_4', + 'Crop_7_5', + 'CropDin', + 'CropFree', + 'CropLandscape', + 'CropOriginal', + 'CropPortrait', + 'CropRotate', + 'CropSquare', + 'Dashboard', + 'DataUsage', + 'DateRange', + 'Dehaze', + 'Delete', + 'DeleteForever', + 'DeleteOutline', + 'DeleteSweep', + 'DepartureBoard', + 'Description', + 'DesktopAccessDisabled', + 'DesktopMac', + 'DesktopWindows', + 'Details', + 'DeveloperBoard', + 'DeveloperMode', + 'DeviceHub', + 'Devices', + 'DevicesOther', + 'DeviceUnknown', + 'DialerSip', + 'Dialpad', + 'Directions', + 'DirectionsBike', + 'DirectionsBoat', + 'DirectionsBus', + 'DirectionsCar', + 'DirectionsRailway', + 'DirectionsRun', + 'DirectionsSubway', + 'DirectionsTransit', + 'DirectionsWalk', + 'DiscFull', + 'Dns', + 'Dock', + 'Domain', + 'DomainDisabled', + 'Done', + 'DoneAll', + 'DoneOutline', + 'DonutLarge', + 'DonutSmall', + 'Drafts', + 'DragHandle', + 'DragIndicator', + 'DriveEta', + 'Duo', + 'Dvr', + 'Edit', + 'EditAttributes', + 'EditLocation', + 'Eject', + 'Email', + 'EnhancedEncryption', + 'Equalizer', + 'Error', + 'ErrorOutline', + 'EuroSymbol', + 'Event', + 'EventAvailable', + 'EventBusy', + 'EventNote', + 'EventSeat', + 'EvStation', + 'ExitToApp', + 'ExpandLess', + 'ExpandMore', + 'Explicit', + 'Explore', + 'Exposure', + 'ExposureNeg1', + 'ExposureNeg2', + 'ExposurePlus1', + 'ExposurePlus2', + 'ExposureZero', + 'Extension', + 'Face', + 'Fastfood', + 'FastForward', + 'FastRewind', + 'Favorite', + 'FavoriteBorder', + 'FeaturedPlayList', + 'FeaturedVideo', + 'Feedback', + 'FiberDvr', + 'FiberManualRecord', + 'FiberPin', + 'FiberSmartRecord', + 'FileCopy', + 'Filter', + 'Filter1', + 'Filter2', + 'Filter3', + 'Filter4', + 'Filter5', + 'Filter6', + 'Filter7', + 'Filter8', + 'Filter9', + 'Filter9Plus', + 'FilterBAndW', + 'FilterCenterFocus', + 'FilterDrama', + 'FilterFrames', + 'FilterHdr', + 'FilterList', + 'FilterNone', + 'FilterTiltShift', + 'FilterVintage', + 'FindInPage', + 'FindReplace', + 'Fingerprint', + 'FirstPage', + 'FitnessCenter', + 'Flag', + 'Flare', + 'FlashAuto', + 'Flight', + 'FlightLand', + 'FlightTakeoff', + 'Flip', + 'FlipToBack', + 'FlipToFront', + 'Folder', + 'FolderOpen', + 'FolderShared', + 'FolderSpecial', + 'FontDownload', + 'FormatAlignCenter', + 'FormatAlignJustify', + 'FormatAlignLeft', + 'FormatAlignRight', + 'FormatBold', + 'FormatClear', + 'FormatColorFill', + 'FormatColorReset', + 'FormatColorText', + 'FormatIndentDecrease', + 'FormatIndentIncrease', + 'FormatItalic', + 'FormatLineSpacing', + 'FormatListBulleted', + 'FormatListNumbered', + 'FormatListNumberedRtl', + 'FormatPaint', + 'FormatQuote', + 'FormatShapes', + 'FormatSize', + 'FormatStrikethrough', + 'FormatTextdirectionLToR', + 'FormatTextdirectionRToL', + 'FormatUnderlined', + 'Forum', + 'Forward', + 'Forward10', + 'Forward30', + 'Forward5', + 'FourK', + 'FreeBreakfast', + 'Fullscreen', + 'FullscreenExit', + 'Functions', + 'Gamepad', + 'Games', + 'Gavel', + 'Gesture', + 'GetApp', + 'Gif', + 'GolfCourse', + 'GpsFixed', + 'GpsNotFixed', + 'Grade', + 'Gradient', + 'Grain', + 'GraphicEq', + 'Group', + 'GroupWork', + 'GTranslate', + 'Hd', + 'HdrStrong', + 'HdrWeak', + 'Headset', + 'HeadsetMic', + 'Healing', + 'Hearing', + 'Help', + 'HelpOutline', + 'Highlight', + 'HighQuality', + 'History', + 'Home', + 'HorizontalSplit', + 'Hotel', + 'HotTub', + 'HourglassEmpty', + 'HourglassFull', + 'HowToReg', + 'HowToVote', + 'Http', + 'Https', + 'Image', + 'ImageAspectRatio', + 'ImageSearch', + 'ImportantDevices', + 'ImportContacts', + 'ImportExport', + 'Inbox', + 'IndeterminateCheckBox', + 'Info', + 'Input', + 'InsertChart', + 'InsertComment', + 'InsertDriveFile', + 'InsertEmoticon', + 'InsertInvitation', + 'InsertLink', + 'InsertPhoto', + 'InvertColors', + 'Iso', + 'Keyboard', + 'KeyboardArrowDown', + 'KeyboardArrowLeft', + 'KeyboardArrowRight', + 'KeyboardArrowUp', + 'KeyboardBackspace', + 'KeyboardCapslock', + 'KeyboardHide', + 'KeyboardReturn', + 'KeyboardTab', + 'KeyboardVoice', + 'Kitchen', + 'Label', + 'LabelImportant', + 'Landscape', + 'Language', + 'Laptop', + 'LaptopChromebook', + 'LaptopMac', + 'LaptopWindows', + 'LastPage', + 'Launch', + 'Layers', + 'LayersClear', + 'LeakRemove', + 'Lens', + 'LibraryBooks', + 'LibraryMusic', + 'LinearScale', + 'LineStyle', + 'LineWeight', + 'Link', + 'LinkedCamera', + 'List', + 'ListAlt', + 'LiveHelp', + 'LiveTv', + 'LocalActivity', + 'LocalAirport', + 'LocalAtm', + 'LocalBar', + 'LocalCafe', + 'LocalCarWash', + 'LocalConvenienceStore', + 'LocalDining', + 'LocalDrink', + 'LocalFlorist', + 'LocalGasStation', + 'LocalGroceryStore', + 'LocalHospital', + 'LocalHotel', + 'LocalLaundryService', + 'LocalLibrary', + 'LocalMall', + 'LocalMovies', + 'LocalParking', + 'LocalPharmacy', + 'LocalPhone', + 'LocalPizza', + 'LocalPlay', + 'LocalPrintshop', + 'LocalSee', + 'LocalShipping', + 'LocalTaxi', + 'LocationCity', + 'LocationDisabled', + 'LocationSearching', + 'Lock', + 'LockOpen', + 'Looks', + 'Looks3', + 'Looks4', + 'Looks5', + 'Looks6', + 'LooksTwo', + 'Loop', + 'Loupe', + 'LowPriority', + 'Loyalty', + 'Mail', + 'MailOutline', + 'Map', + 'Markunread', + 'MarkunreadMailbox', + 'Maximize', + 'MeetingRoom', + 'Memory', + 'Menu', + 'MergeType', + 'Message', + 'Mic', + 'MicNone', + 'Minimize', + 'MissedVideoCall', + 'Mms', + 'MobileFriendly', + 'MobileScreenShare', + 'ModeComment', + 'Money', + 'MonochromePhotos', + 'Mood', + 'MoodBad', + 'More', + 'MoreHoriz', + 'MoreVert', + 'Motorcycle', + 'Mouse', + 'MoveToInbox', + 'Movie', + 'MovieCreation', + 'MovieFilter', + 'MultilineChart', + 'MusicNote', + 'MusicVideo', + 'MyLocation', + 'Nature', + 'NaturePeople', + 'NavigateBefore', + 'NavigateNext', + 'Navigation', + 'NearMe', + 'NetworkCell', + 'NetworkCheck', + 'NetworkLocked', + 'NetworkWifi', + 'NextWeek', + 'Nfc', + 'NoEncryption', + 'NoMeetingRoom', + 'NoSim', + 'Note', + 'Notes', + 'NotificationImportant', + 'Notifications', + 'NotificationsActive', + 'NotificationsNone', + 'NotificationsPaused', + 'NotInterested', + 'NotListedLocation', + 'Opacity', + 'OpenInBrowser', + 'OpenWith', + 'Pages', + 'Pageview', + 'Palette', + 'Panorama', + 'PanoramaFishEye', + 'PanoramaHorizontal', + 'PanoramaVertical', + 'PanoramaWideAngle', + 'PanTool', + 'PartyMode', + 'Pause', + 'PauseCircleFilled', + 'PauseCircleOutline', + 'PausePresentation', + 'Payment', + 'People', + 'PeopleOutline', + 'PermCameraMic', + 'PermContactCalendar', + 'PermDataSetting', + 'PermDeviceInformation', + 'PermIdentity', + 'PermMedia', + 'PermPhoneMsg', + 'PermScanWifi', + 'Person', + 'PersonalVideo', + 'PersonOutline', + 'PersonPin', + 'PersonPinCircle', + 'Pets', + 'Phone', + 'PhoneAndroid', + 'PhoneBluetoothSpeaker', + 'PhoneCallback', + 'PhoneForwarded', + 'PhoneInTalk', + 'PhoneIphone', + 'Phonelink', + 'PhonelinkErase', + 'PhonelinkLock', + 'PhonelinkRing', + 'PhonelinkSetup', + 'PhoneLocked', + 'PhoneMissed', + 'PhonePaused', + 'Photo', + 'PhotoAlbum', + 'PhotoCamera', + 'PhotoFilter', + 'PhotoLibrary', + 'PhotoSizeSelectActual', + 'PhotoSizeSelectLarge', + 'PhotoSizeSelectSmall', + 'PictureAsPdf', + 'PictureInPicture', + 'PictureInPictureAlt', + 'PieChart', + 'PinDrop', + 'Place', + 'PlayArrow', + 'PlayCircleFilled', + 'PlayCircleFilledWhite', + 'PlayCircleOutline', + 'PlayForWork', + 'PlaylistPlay', + 'Poll', + 'Polymer', + 'Pool', + 'Portrait', + 'Power', + 'PowerInput', + 'PregnantWoman', + 'PresentToAll', + 'Print', + 'PrintDisabled', + 'PriorityHigh', + 'Public', + 'Publish', + 'QueryBuilder', + 'QuestionAnswer', + 'Queue', + 'QueueMusic', + 'QueuePlayNext', + 'Radio', + 'RadioButtonChecked', + 'RadioButtonUnchecked', + 'RateReview', + 'Receipt', + 'RecentActors', + 'RecordVoiceOver', + 'Redeem', + 'Redo', + 'Refresh', + 'Remove', + 'RemoveCircle', + 'RemoveCircleOutline', + 'RemoveFromQueue', + 'RemoveRedEye', + 'RemoveShoppingCart', + 'Reorder', + 'Repeat', + 'Replay', + 'Replay10', + 'Replay30', + 'Replay5', + 'Reply', + 'ReplyAll', + 'Report', + 'ReportProblem', + 'Restaurant', + 'RestaurantMenu', + 'Restore', + 'RestoreFromTrash', + 'RestorePage', + 'RingVolume', + 'Room', + 'RoomService', + 'Rotate90DegreesCcw', + 'RotateLeft', + 'RotateRight', + 'Router', + 'Rowing', + 'RssFeed', + 'RvHookup', + 'Satellite', + 'Save', + 'SaveAlt', + 'Scanner', + 'ScatterPlot', + 'Schedule', + 'School', + 'Score', + 'ScreenLockLandscape', + 'ScreenLockPortrait', + 'ScreenLockRotation', + 'ScreenRotation', + 'ScreenShare', + 'SdCard', + 'SdStorage', + 'Search', + 'Security', + 'SelectAll', + 'Send', + 'SentimentDissatisfied', + 'SentimentSatisfied', + 'SentimentSatisfiedAlt', + 'SentimentVeryDissatisfied', + 'SentimentVerySatisfied', + 'Settings', + 'SettingsApplications', + 'SettingsBackupRestore', + 'SettingsBluetooth', + 'SettingsBrightness', + 'SettingsCell', + 'SettingsEthernet', + 'SettingsInputAntenna', + 'SettingsInputComponent', + 'SettingsInputComposite', + 'SettingsInputHdmi', + 'SettingsInputSvideo', + 'SettingsOverscan', + 'SettingsPhone', + 'SettingsPower', + 'SettingsRemote', + 'SettingsSystemDaydream', + 'SettingsVoice', + 'Share', + 'Shop', + 'ShoppingBasket', + 'ShoppingCart', + 'ShopTwo', + 'ShortText', + 'ShowChart', + 'Shuffle', + 'ShutterSpeed', + 'SimCard', + 'SkipNext', + 'SkipPrevious', + 'Slideshow', + 'SlowMotionVideo', + 'Smartphone', + 'SmokeFree', + 'SmokingRooms', + 'Sms', + 'SmsFailed', + 'Snooze', + 'Sort', + 'SortByAlpha', + 'Spa', + 'SpaceBar', + 'Speaker', + 'SpeakerGroup', + 'SpeakerNotes', + 'SpeakerPhone', + 'Spellcheck', + 'Star', + 'StarBorder', + 'StarHalf', + 'StarRate', + 'Stars', + 'StayCurrentLandscape', + 'StayCurrentPortrait', + 'StayPrimaryLandscape', + 'StayPrimaryPortrait', + 'Stop', + 'StopScreenShare', + 'Storage', + 'Store', + 'StoreMallDirectory', + 'Straighten', + 'Streetview', + 'StrikethroughS', + 'Style', + 'SubdirectoryArrowLeft', + 'SubdirectoryArrowRight', + 'Subject', + 'Subscriptions', + 'Subtitles', + 'Subway', + 'SupervisedUserCircle', + 'SupervisorAccount', + 'SurroundSound', + 'SwapCalls', + 'SwapHoriz', + 'SwapHorizontalCircle', + 'SwapVert', + 'SwapVerticalCircle', + 'SwitchCamera', + 'SwitchVideo', + 'Sync', + 'SyncDisabled', + 'SyncProblem', + 'SystemUpdate', + 'Tab', + 'TableChart', + 'Tablet', + 'TabletAndroid', + 'TabletMac', + 'TabUnselected', + 'TagFaces', + 'TapAndPlay', + 'Terrain', + 'TextFields', + 'TextFormat', + 'TextRotateUp', + 'TextRotateVertical', + 'TextRotationDown', + 'TextRotationNone', + 'Textsms', + 'Texture', + 'Theaters', + 'ThreeDRotation', + 'ThreeSixty', + 'ThumbDown', + 'ThumbDownAlt', + 'ThumbsUpDown', + 'ThumbUp', + 'ThumbUpAlt', + 'Timelapse', + 'Timeline', + 'Timer', + 'Timer10', + 'Timer3', + 'TimeToLeave', + 'Title', + 'Toc', + 'Today', + 'Toll', + 'Tonality', + 'TouchApp', + 'Toys', + 'TrackChanges', + 'Traffic', + 'Train', + 'Tram', + 'TransferWithinAStation', + 'Transform', + 'TransitEnterexit', + 'Translate', + 'TrendingDown', + 'TrendingFlat', + 'TrendingUp', + 'TripOrigin', + 'Tune', + 'TurnedIn', + 'TurnedInNot', + 'Tv', + 'Unarchive', + 'Undo', + 'UnfoldLess', + 'UnfoldMore', + 'Unsubscribe', + 'Update', + 'Usb', + 'VerifiedUser', + 'VerticalAlignBottom', + 'VerticalAlignCenter', + 'VerticalAlignTop', + 'VerticalSplit', + 'Vibration', + 'VideoCall', + 'Videocam', + 'VideogameAsset', + 'VideoLabel', + 'VideoLibrary', + 'ViewAgenda', + 'ViewArray', + 'ViewCarousel', + 'ViewColumn', + 'ViewComfy', + 'ViewCompact', + 'ViewDay', + 'ViewHeadline', + 'ViewList', + 'ViewModule', + 'ViewQuilt', + 'ViewStream', + 'ViewWeek', + 'Vignette', + 'Visibility', + 'VoiceChat', + 'Voicemail', + 'VolumeDown', + 'VolumeMute', + 'VolumeUp', + 'VpnKey', + 'VpnLock', + 'Wallpaper', + 'Warning', + 'Watch', + 'WatchLater', + 'Waves', + 'WbAuto', + 'WbCloudy', + 'WbIncandescent', + 'WbIridescent', + 'WbSunny', + 'Wc', + 'Web', + 'WebAsset', + 'Weekend', + 'Whatshot', + 'WhereToVote', + 'Widgets', + 'Wifi', + 'WifiLock', + 'WifiTethering', + 'Work', + 'WorkOutline', + 'WrapText', + 'YoutubeSearchedFor', + 'ZoomIn', + 'ZoomOut', + 'ZoomOutMap', + ]; + + public fontAwesomeIcons: string[] = [ + 'Bed', + 'Bank', + 'Behance', + 'Behance-square', + 'Bomb', + 'Building', + 'Cab', + 'Car', + 'Child', + 'Circle-o-notch', + 'Circle-thin', + 'Codepen', + 'Cube', + 'Cubes', + 'Database', + 'Delicious', + 'Deviantart', + 'Digg', + 'Drupal', + 'Empire', + 'Envelope-square', + 'Fax', + 'File-archive-o', + 'File-audio-o', + 'File-code-o', + 'File-excel-o', + 'File-image-o', + 'File-movie-o', + 'File-pdf-o', + 'File-photo-o', + 'File-picture-o', + 'File-powerpoint-o', + 'File-sound-o', + 'File-video-o', + 'File-word-o', + 'File-zip-o', + 'Ge', + 'Git', + 'Git-square', + 'Google', + 'Graduation-cap', + 'Hacker-news', + 'Header', + 'History', + 'Institution', + 'Joomla', + 'Jsfiddle', + 'Language', + 'Life-bouy', + 'Life-ring', + 'Life-saver', + 'Mortar-board', + 'Openid', + 'Paper-plane', + 'paper-plane-o', + 'Paragraph', + 'Paw', + 'Pied-piper', + 'Pied-piper-alt', + 'Pied-piper-square', + 'Qq', + 'Ra', + 'Rebel', + 'Recycle', + 'Reddit', + 'Reddit-square', + 'Send', + 'Send-o', + 'Share-alt', + 'Share-alt-square', + 'Slack', + 'Sliders', + 'Soundcloud', + 'Space-shuttle', + 'Spoon', + 'Spotify', + 'Steam', + 'Steam-square', + 'Stumbleupon', + 'Stumbleupon-circle', + 'Support', + 'Taxi', + 'Tencent-weibo', + 'Tree', + 'University', + 'Vine', + 'Wechat', + 'Weixin', + 'Wordpress', + 'Yahoo', + ]; + + public toShakeCase(name: string) { + return name[0].toLowerCase() + name.slice(1).replace(/[A-Z]/g, (m: string) => { + return '_' + m.toLowerCase(); + }); + } + + public toFontAwesomeText(name: string): string { + return 'fa-' + name.toLowerCase(); + } +} diff --git a/src/app/pages/ui-elements/components/index.ts b/src/app/pages/ui-elements/components/index.ts new file mode 100644 index 0000000..0e26432 --- /dev/null +++ b/src/app/pages/ui-elements/components/index.ts @@ -0,0 +1,5 @@ +export * from './icons-page/icons-page.component'; +export * from './line-chart/line-chart.component'; +export * from './dashed-line-chart/dashed-line-chart.component'; +export * from './heatmap-chart/heatmap-chart.component'; +export * from './pie-chart/pie-chart.component'; diff --git a/src/app/pages/ui-elements/components/line-chart/line-chart.component.html b/src/app/pages/ui-elements/components/line-chart/line-chart.component.html new file mode 100644 index 0000000..6d61d59 --- /dev/null +++ b/src/app/pages/ui-elements/components/line-chart/line-chart.component.html @@ -0,0 +1,10 @@ + diff --git a/src/app/pages/ui-elements/components/line-chart/line-chart.component.scss b/src/app/pages/ui-elements/components/line-chart/line-chart.component.scss new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/app/pages/ui-elements/components/line-chart/line-chart.component.scss @@ -0,0 +1 @@ + diff --git a/src/app/pages/ui-elements/components/line-chart/line-chart.component.ts b/src/app/pages/ui-elements/components/line-chart/line-chart.component.ts new file mode 100644 index 0000000..10d5f0b --- /dev/null +++ b/src/app/pages/ui-elements/components/line-chart/line-chart.component.ts @@ -0,0 +1,82 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexDataLabels, + ApexFill, + ApexGrid, + ApexLegend, + ApexMarkers, + ApexNonAxisChartSeries, + ApexResponsive, + ApexStroke, + ApexTooltip, + ApexXAxis +} from 'ng-apexcharts'; + +import { LineChartData } from '../../models'; +import { colors } from '../../../../consts'; + + +export type ChartOptions = { + series: ApexAxisChartSeries | ApexNonAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + stroke: ApexStroke; + tooltip: ApexTooltip; + dataLabels: ApexDataLabels; + legend: ApexLegend; + colors: string[]; + markers: ApexMarkers; + grid: ApexGrid; + labels: string[]; + responsive: ApexResponsive[]; + fill: ApexFill; +}; + +@Component({ + selector: 'app-line-chart', + templateUrl: './line-chart.component.html', + styleUrls: ['./line-chart.component.scss'] +}) +export class LineChartComponent implements OnInit { + @Input() lineChartData: LineChartData; + public apexLineChartOptions: Partial; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.initChart(); + } + + public initChart(): void { + this.apexLineChartOptions = { + series: this.lineChartData.series, + chart: { + height: 350, + type: 'area', + toolbar: { + show: false + } + }, + legend: { + show: false + }, + dataLabels: { + enabled: false + }, + colors: [colors.BLUE, colors.GREEN], + stroke: { + curve: 'smooth', + }, + xaxis: { + type: 'datetime', + categories: this.lineChartData.categories + }, + tooltip: { + x: { + format: 'dd/MM/yy HH:mm' + } + } + }; + } +} diff --git a/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.html b/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.html new file mode 100644 index 0000000..f57c2a1 --- /dev/null +++ b/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.html @@ -0,0 +1,9 @@ + diff --git a/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.scss b/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.ts b/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.ts new file mode 100644 index 0000000..a4b7e80 --- /dev/null +++ b/src/app/pages/ui-elements/components/pie-chart/pie-chart.component.ts @@ -0,0 +1,70 @@ +import { Component, Input, OnInit } from '@angular/core'; +import { + ApexAxisChartSeries, + ApexChart, + ApexDataLabels, ApexFill, ApexGrid, + ApexLegend, ApexMarkers, + ApexNonAxisChartSeries, ApexResponsive, + ApexStroke, + ApexTooltip, + ApexXAxis +} from 'ng-apexcharts'; + +import { PieChartData } from '../../models'; +import { colors } from '../../../../consts'; + +type ChartOptions = { + series: ApexAxisChartSeries | ApexNonAxisChartSeries; + chart: ApexChart; + xaxis: ApexXAxis; + stroke: ApexStroke; + tooltip: ApexTooltip; + dataLabels: ApexDataLabels; + legend: ApexLegend; + colors: string[]; + markers: ApexMarkers; + grid: ApexGrid; + labels: string[]; + responsive: ApexResponsive[]; + fill: ApexFill; +}; + +@Component({ + selector: 'app-pie-chart', + templateUrl: './pie-chart.component.html', + styleUrls: ['./pie-chart.component.scss'] +}) +export class PieChartComponent implements OnInit { + @Input() pieChartData: PieChartData; + public apexPieChartOptions: Partial; + public colors: typeof colors = colors; + + public ngOnInit(): void { + this.initChart(); + } + + public initChart(): void { + this.apexPieChartOptions = { + series: this.pieChartData.series, + chart: { + type: 'donut', + height: 400 + }, + colors: [ + colors.BLUE, + colors.YELLOW, + colors.PINK, + colors.GREEN, + colors.VIOLET + ], + legend: { + position: 'bottom', + itemMargin: { + horizontal: 5, + vertical: 30 + }, + }, + labels: this.pieChartData.labels + }; + } +} diff --git a/src/app/pages/ui-elements/consts/api.ts b/src/app/pages/ui-elements/consts/api.ts new file mode 100644 index 0000000..ed5afe6 --- /dev/null +++ b/src/app/pages/ui-elements/consts/api.ts @@ -0,0 +1 @@ +export const googleMapKey: string = 'AIzaSyB7OXmzfQYua_1LEhRdqsoYzyJOPh9hGLg'; diff --git a/src/app/pages/ui-elements/consts/index.ts b/src/app/pages/ui-elements/consts/index.ts new file mode 100644 index 0000000..b1c13e7 --- /dev/null +++ b/src/app/pages/ui-elements/consts/index.ts @@ -0,0 +1 @@ +export * from './api'; diff --git a/src/app/pages/ui-elements/containers/charts-page/charts-page.component.html b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.html new file mode 100644 index 0000000..0fc30c1 --- /dev/null +++ b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.html @@ -0,0 +1,43 @@ + + +

Charts Page - Data Display

+ +
+ +
+
+ + + +

Apex Line Chart

+
+ +
+ + + +

Apex Heatmap Chart

+
+ +
+
+ +
+ + +

Apex Dashed Line Chart

+
+ +
+ + + +

Apex Pie Chart

+
+ +
+
+
+ + +
diff --git a/src/app/pages/ui-elements/containers/charts-page/charts-page.component.scss b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.scss new file mode 100644 index 0000000..4ded10f --- /dev/null +++ b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.scss @@ -0,0 +1,19 @@ +@import './src/app/styles/variables'; +@import './src/app/styles/colors'; + +.charts-content { + margin: 0 8px; + + &__charts-wrapper { + display: flex; + + @media (max-width: $small) { + flex-wrap: wrap; + } + } + + &__chart-item { + box-shadow: 0 3px 11px 0 $shadow-white, 0 3px 3px -2px $shadow-grey, 0 1px 8px 0 $shadow-dark-grey; + width: 100%; + } +} diff --git a/src/app/pages/ui-elements/containers/charts-page/charts-page.component.ts b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.ts new file mode 100644 index 0000000..4be43ed --- /dev/null +++ b/src/app/pages/ui-elements/containers/charts-page/charts-page.component.ts @@ -0,0 +1,29 @@ +import { Component } from '@angular/core'; +import { Observable } from 'rxjs'; + +import { ChartsService } from '../../services'; +import { + DashedLineChartData, + HeatmapChartData, + LineChartData, + PieChartData +} from '../../models'; + +@Component({ + selector: 'app-charts-page', + templateUrl: './charts-page.component.html', + styleUrls: ['./charts-page.component.scss'] +}) +export class ChartsPageComponent { + public lineChartData$: Observable + public dashedLineChartData$: Observable + public pieChartData$: Observable + public heatmapChartData$: Observable + + constructor(private service: ChartsService) { + this.lineChartData$ = this.service.loadLineChartData(); + this.dashedLineChartData$ = this.service.dashedLineChartData(); + this.pieChartData$ = this.service.loadPieChartData(); + this.heatmapChartData$ = this.service.loadHeatmapChartData(); + } +} diff --git a/src/app/pages/ui-elements/containers/index.ts b/src/app/pages/ui-elements/containers/index.ts new file mode 100644 index 0000000..295a61f --- /dev/null +++ b/src/app/pages/ui-elements/containers/index.ts @@ -0,0 +1,2 @@ +export * from './map-page/map-page.component'; +export * from './charts-page/charts-page.component'; diff --git a/src/app/pages/ui-elements/containers/map-page/map-page.component.html b/src/app/pages/ui-elements/containers/map-page/map-page.component.html new file mode 100644 index 0000000..7bee136 --- /dev/null +++ b/src/app/pages/ui-elements/containers/map-page/map-page.component.html @@ -0,0 +1,5 @@ + + + + + diff --git a/src/app/pages/ui-elements/containers/map-page/map-page.component.scss b/src/app/pages/ui-elements/containers/map-page/map-page.component.scss new file mode 100644 index 0000000..614d7a9 --- /dev/null +++ b/src/app/pages/ui-elements/containers/map-page/map-page.component.scss @@ -0,0 +1,4 @@ +.agm-map { + width: 100%; + height: 100%; +} diff --git a/src/app/pages/ui-elements/containers/map-page/map-page.component.ts b/src/app/pages/ui-elements/containers/map-page/map-page.component.ts new file mode 100644 index 0000000..4f69fef --- /dev/null +++ b/src/app/pages/ui-elements/containers/map-page/map-page.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-map-page', + templateUrl: './map-page.component.html', + styleUrls: ['./map-page.component.scss'] +}) +export class MapPageComponent { + public lat = -37.813179; + public lng = 144.950259; + public zoom = 12; +} diff --git a/src/app/pages/ui-elements/models/dashed-line-chart-data.ts b/src/app/pages/ui-elements/models/dashed-line-chart-data.ts new file mode 100644 index 0000000..9c79e42 --- /dev/null +++ b/src/app/pages/ui-elements/models/dashed-line-chart-data.ts @@ -0,0 +1,9 @@ +export interface DashedLineChartData { + series: Series[], + categories: string[] +} + +interface Series { + name: string, + data: number[] +} diff --git a/src/app/pages/ui-elements/models/heatmap-chart-data.ts b/src/app/pages/ui-elements/models/heatmap-chart-data.ts new file mode 100644 index 0000000..4615910 --- /dev/null +++ b/src/app/pages/ui-elements/models/heatmap-chart-data.ts @@ -0,0 +1,8 @@ +export interface HeatmapChartData { + series: Serie[]; +} + +interface Serie { + name: string; + data: number[]; +} diff --git a/src/app/pages/ui-elements/models/index.ts b/src/app/pages/ui-elements/models/index.ts new file mode 100644 index 0000000..93fda48 --- /dev/null +++ b/src/app/pages/ui-elements/models/index.ts @@ -0,0 +1,4 @@ +export * from './line-chart-data'; +export * from './dashed-line-chart-data'; +export * from './pie-chart-data'; +export * from './heatmap-chart-data'; diff --git a/src/app/pages/ui-elements/models/line-chart-data.ts b/src/app/pages/ui-elements/models/line-chart-data.ts new file mode 100644 index 0000000..6456157 --- /dev/null +++ b/src/app/pages/ui-elements/models/line-chart-data.ts @@ -0,0 +1,9 @@ +export interface LineChartData { + series: Series[], + categories: string[] +} + +interface Series { + name: string, + data: number[] +} diff --git a/src/app/pages/ui-elements/models/pie-chart-data.ts b/src/app/pages/ui-elements/models/pie-chart-data.ts new file mode 100644 index 0000000..b7e58d4 --- /dev/null +++ b/src/app/pages/ui-elements/models/pie-chart-data.ts @@ -0,0 +1,4 @@ +export interface PieChartData { + series: number[], + labels: string[] +} diff --git a/src/app/pages/ui-elements/services/charts.service.ts b/src/app/pages/ui-elements/services/charts.service.ts new file mode 100644 index 0000000..0ca2f1b --- /dev/null +++ b/src/app/pages/ui-elements/services/charts.service.ts @@ -0,0 +1,167 @@ +import { Injectable } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +import { + DashedLineChartData, + HeatmapChartData, + LineChartData, + PieChartData +} from '../models'; + +@Injectable({ + providedIn: 'root' +}) +export class ChartsService { + public loadLineChartData(): Observable{ + return of({ + series: [ + { + name: 'series1', + data: [31, 40, 28, 51, 42, 109, 100] + }, + { + name: 'series2', + data: [11, 32, 45, 32, 34, 52, 41] + } + ], + categories: [ + '2018-09-19T00:00:00.000Z', + '2018-09-19T01:30:00.000Z', + '2018-09-19T02:30:00.000Z', + '2018-09-19T03:30:00.000Z', + '2018-09-19T04:30:00.000Z', + '2018-09-19T05:30:00.000Z', + '2018-09-19T06:30:00.000Z' + ] + }); + } + + public dashedLineChartData(): Observable{ + return of({ + series: [ + { + name: 'Session Duration', + data: [45, 52, 38, 24, 33, 26, 21, 20, 6, 8, 15, 10] + }, + { + name: 'Page Views', + data: [35, 41, 62, 42, 13, 18, 29, 37, 36, 51, 32, 35] + }, + { + name: 'Total Visits', + data: [87, 57, 74, 99, 75, 38, 62, 47, 82, 56, 45, 47] + } + ], + categories: [ + '01 Jan', + '02 Jan', + '03 Jan', + '04 Jan', + '05 Jan', + '06 Jan', + '07 Jan', + '08 Jan', + '09 Jan', + '10 Jan', + '11 Jan', + '12 Jan' + ] + }); + } + + public loadPieChartData(): Observable { + return of({ + series: [ + Math.round(Math.random() * 100), + Math.round(Math.random() * 100), + Math.round(Math.random() * 100), + Math.round(Math.random() * 100), + Math.round(Math.random() * 100) + ], + labels: ['Team A', 'Team B', 'Team C', 'Team D', 'Team E'] + }); + } + + public loadHeatmapChartData(): Observable { + return of({ + series: [ + { + name: 'Metric1', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric2', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric3', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric4', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric5', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric6', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric7', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric8', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + }, + { + name: 'Metric9', + data: this.generateApexHeatmapChartData(18, { + min: 0, + max: 90 + }) + } + ], + }); + } + + private generateApexHeatmapChartData(count, yrange): number[] { + let i = 0; + const series = []; + while (i < count) { + const x = 'w' + (i + 1).toString(); + const y = Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min; + + series.push({x, y}); + i++; + } + return series; + } +} diff --git a/src/app/pages/ui-elements/services/index.ts b/src/app/pages/ui-elements/services/index.ts new file mode 100644 index 0000000..d03fff9 --- /dev/null +++ b/src/app/pages/ui-elements/services/index.ts @@ -0,0 +1 @@ +export * from './charts.service'; diff --git a/src/app/pages/ui-elements/ui-elements-routing.module.ts b/src/app/pages/ui-elements/ui-elements-routing.module.ts new file mode 100644 index 0000000..de1aeb5 --- /dev/null +++ b/src/app/pages/ui-elements/ui-elements-routing.module.ts @@ -0,0 +1,30 @@ +import { RouterModule, Routes } from '@angular/router'; +import { NgModule } from '@angular/core'; + +import { IconsPageComponent } from './components'; +import { ChartsPageComponent, MapPageComponent } from './containers'; + +const routes: Routes = [ + { + path: 'icons', + component: IconsPageComponent + }, + { + path: 'charts', + component: ChartsPageComponent + }, + { + path: 'map', + component: MapPageComponent + }, +]; + +@NgModule({ + imports: [ + RouterModule.forChild(routes) + ], + exports: [RouterModule] +}) + +export class UiElementsRoutingModule { +} diff --git a/src/app/pages/ui-elements/ui-elements.module.ts b/src/app/pages/ui-elements/ui-elements.module.ts new file mode 100644 index 0000000..65dd1cb --- /dev/null +++ b/src/app/pages/ui-elements/ui-elements.module.ts @@ -0,0 +1,58 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { MatButtonModule } from '@angular/material/button'; +import { MatCardModule } from '@angular/material/card'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatIconModule } from '@angular/material/icon'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { NgApexchartsModule } from 'ng-apexcharts'; +import { AgmCoreModule } from '@agm/core'; + +import { + DashedLineChartComponent, + HeatmapChartComponent, + IconsPageComponent, + LineChartComponent, + PieChartComponent +} from './components'; +import { + ChartsPageComponent, + MapPageComponent +} from './containers'; +import { UiElementsRoutingModule } from './ui-elements-routing.module'; +import { SharedModule } from '../../shared/shared.module'; +import { ChartsService } from './services'; +import { DashboardModule } from '../dashboard/dashboard.module'; +import { googleMapKey } from './consts'; + +@NgModule({ + declarations: [ + IconsPageComponent, + ChartsPageComponent, + MapPageComponent, + LineChartComponent, + DashedLineChartComponent, + PieChartComponent, + HeatmapChartComponent + ], + imports: [ + CommonModule, + UiElementsRoutingModule, + MatButtonModule, + MatCardModule, + MatTabsModule, + MatIconModule, + NgApexchartsModule, + AgmCoreModule, + AgmCoreModule.forRoot({ + apiKey: googleMapKey + }), + MatToolbarModule, + SharedModule, + DashboardModule, + ], + providers: [ + ChartsService + ] +}) +export class UiElementsModule { } diff --git a/src/app/shared/footer/footer.component.html b/src/app/shared/footer/footer.component.html new file mode 100644 index 0000000..df5b5f7 --- /dev/null +++ b/src/app/shared/footer/footer.component.html @@ -0,0 +1,15 @@ + + + diff --git a/src/app/shared/footer/footer.component.scss b/src/app/shared/footer/footer.component.scss new file mode 100644 index 0000000..afeb27d --- /dev/null +++ b/src/app/shared/footer/footer.component.scss @@ -0,0 +1,29 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/variables'; + +// .footer { +// margin: 0; +// padding: 0; +// width: 100%; +// position: relative; +// display: flex; +// flex-direction: row-reverse; +// } + +// .watermark{ +// margin: 10px; +// opacity: 0.7; +// } +// @media print { +// .watermark { +// display: none +// } +// } + + +// .fixed-bottom { +// position: fixed; +// left: 0; +// bottom: 0; +// width: 100%; +// } \ No newline at end of file diff --git a/src/app/shared/footer/footer.component.ts b/src/app/shared/footer/footer.component.ts new file mode 100644 index 0000000..a6e4419 --- /dev/null +++ b/src/app/shared/footer/footer.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-footer', + templateUrl: './footer.component.html', + styleUrls: ['./footer.component.scss'] +}) +export class FooterComponent { + public flatlogic: string = 'https://flatlogic.com/'; + public flatlogicAbout: string = 'https://flatlogic.com/about'; + public flatlogicBlog: string = 'https://flatlogic.com/blog'; +} diff --git a/src/app/shared/header/components/email/email.component.html b/src/app/shared/header/components/email/email.component.html new file mode 100644 index 0000000..9986426 --- /dev/null +++ b/src/app/shared/header/components/email/email.component.html @@ -0,0 +1,26 @@ + + + + +
+
+ + {{email.time}} +
+
+ {{email.name}} + {{email.message}} +
+
+ +
+ +
+
diff --git a/src/app/shared/header/components/email/email.component.scss b/src/app/shared/header/components/email/email.component.scss new file mode 100644 index 0000000..72abc96 --- /dev/null +++ b/src/app/shared/header/components/email/email.component.scss @@ -0,0 +1,137 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.email-button { + background-color: $blue; + box-shadow: none; + margin-left: 16px; + + &__icon { + color: $white-35; + } + + &:hover { + background-color: $black-08; + } + + @media (max-width: $small) { + margin-top: 0; + } +} + +.email-menu-header { + padding: 16px 16px 0 16px; + + &__title { + margin: 0; + font-weight: $fw-lighter; + font-size: $fs-large; + color: $dark-grey; + } + + &__subtitle { + color: $pink; + font-weight: $fw-lighter; + font-size: $fs-small; + margin: 4px 0 16px 0; + } +} + +.mail-wrapper { + cursor: pointer; + display: flex; + padding: 6px 16px; + + &:hover { + background-color: $blue-white; + } + + &__icon-wrapper { + display: flex; + flex-direction: column; + } + + &__icon { + font-weight: $fw-lighter; + font-size: $fs-small; + color: $white; + display: flex; + align-items: center; + justify-content: center; + box-shadow: none; + width: 30px; + height: 30px; + } + + &__time { + text-align: center; + color: $grey; + font-weight: $fw-lighter; + font-size: $fs-xs; + } +} + +.mail-content { + display: flex; + flex-direction: column; + overflow: hidden; + padding-left: 16px; + justify-content: space-between; + + &__user { + margin-top: 3px; + font-weight: $fw-normal; + font-size: $fs-small; + color: $dark-grey; + } + + &__message { + color: $grey; + font-weight: $fs-small; + font-size: $fs-small; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } +} + +.send-message-button-wrapper { + margin: 16px 0; + text-align: center; + padding: 0 16px; +} + +.send-message-button { + width: 224px; + height: 48px; + padding: 0 16px; + border-radius: 32px; + color: $white; + background-color: $blue; + + & .mat-button-wrapper { + padding: 0; + } + + &__icon { + color: $white; + margin-left: 16px; + } +} + +.yellow { + background-color: $yellow; +} + +.green { + background-color: $green; +} + +.blue { + background-color: $blue; +} + +.ping { + background-color: $pink; +} diff --git a/src/app/shared/header/components/email/email.component.ts b/src/app/shared/header/components/email/email.component.ts new file mode 100644 index 0000000..b20f7c8 --- /dev/null +++ b/src/app/shared/header/components/email/email.component.ts @@ -0,0 +1,18 @@ +import { Component, Input } from '@angular/core'; + +import { Email } from '../../../../pages/auth/models'; + +@Component({ + selector: 'app-email', + templateUrl: './email.component.html', + styleUrls: ['./email.component.scss'] +}) +export class EmailComponent { + @Input() emails: Email[]; + public colors: string[] = [ + 'yellow', + 'green', + 'blue', + 'ping' + ]; +} diff --git a/src/app/shared/header/components/favourites/favourites.component.html b/src/app/shared/header/components/favourites/favourites.component.html new file mode 100644 index 0000000..dfa3ccd --- /dev/null +++ b/src/app/shared/header/components/favourites/favourites.component.html @@ -0,0 +1,16 @@ + + +
+
+ Favourites +
+
+ + +
\ No newline at end of file diff --git a/src/app/shared/header/components/favourites/favourites.component.scss b/src/app/shared/header/components/favourites/favourites.component.scss new file mode 100644 index 0000000..c3c0df6 --- /dev/null +++ b/src/app/shared/header/components/favourites/favourites.component.scss @@ -0,0 +1,73 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.user-button { + background-color: $blue; + box-shadow: none; + margin-left: 16px; + + &__icon { + color: $white-35; + } + + &:hover { + background-color: $black-08; + } + + @media (max-width: $small) { + margin-top: 0; + } +} + +.user-menu-title { + padding: 16px 48px 0 16px; + margin-bottom: 4px; + + &__name { + margin-bottom: 4px; + font-weight: $fw-lighter; + font-size: $fs-large; + color: $dark-grey; + } + + &__link { + color: $blue; + font-weight: $fw-lighter; + font-size: $fs-small; + text-decoration: none; + } +} + +.user-menu-icon { + color: $light-grey; + margin-right: 16px; + opacity: .8; +} + +.sign-button-wrapper { + text-align: center; + padding: 3px 0 3px 0; + width: 100%; +} + +.sign-button { + border: 1px solid; + color: $blue; + width: 80%; +} + +.user-menu { + &__item-title { + color: $light-grey; + + &:hover { + color: $dark-grey; + background-color: $blue-white; + + & .user-menu-icon { + color: #536DFE; + } + } + } +} \ No newline at end of file diff --git a/src/app/shared/header/components/favourites/favourites.component.ts b/src/app/shared/header/components/favourites/favourites.component.ts new file mode 100644 index 0000000..0eb47d1 --- /dev/null +++ b/src/app/shared/header/components/favourites/favourites.component.ts @@ -0,0 +1,46 @@ +import { Component, OnInit } from '@angular/core'; +import { Router } from '@angular/router'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-favourites', + templateUrl: './favourites.component.html', + styleUrls: ['./favourites.component.scss'] +}) +export class FavouritesComponent implements OnInit { + favouriteMenuData: any; + + constructor( + public _menuService: MenuService, + private _router: Router, + private _uiService: UiService, + private _errorTranslateService: ErrorTranslateService + ) { + this.getMenuData(); + } + + ngOnInit(): void { + + } + + async getMenuData() { + // let filter="?where[favourite]=Y" + // await this._menuService.getMenuData(apiUrl.sisUsermenu,filter).then((res) => { + // // this.favouriteMenuData = res; + // this._menuService.favouriteMenuData=res + // }, + // (err) => { + // console.log("===err====", err); + // this._uiService.toastMessage(err.error.message ? err.error.message : this._errorTranslateService.translate('errorInApi')); + // }); + } + + + navigateTo(destination) { + this._router.navigate([destination]); + } + +} diff --git a/src/app/shared/header/components/index.ts b/src/app/shared/header/components/index.ts new file mode 100644 index 0000000..7c0d61d --- /dev/null +++ b/src/app/shared/header/components/index.ts @@ -0,0 +1,4 @@ +export * from './user/user.component'; +export * from './email/email.component'; +export * from './notifications/notifications.component'; +export * from './search/search.component'; diff --git a/src/app/shared/header/components/notifications/notifications.component.html b/src/app/shared/header/components/notifications/notifications.component.html new file mode 100644 index 0000000..497ee64 --- /dev/null +++ b/src/app/shared/header/components/notifications/notifications.component.html @@ -0,0 +1,17 @@ + + + + + + + diff --git a/src/app/shared/header/components/notifications/notifications.component.scss b/src/app/shared/header/components/notifications/notifications.component.scss new file mode 100644 index 0000000..2690397 --- /dev/null +++ b/src/app/shared/header/components/notifications/notifications.component.scss @@ -0,0 +1,46 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/variables'; + +.notification-button { + background-color: $blue; + box-shadow: none; + margin-left: 16px; + + &__icon { + color: $white-35; + } + + &:hover { + background-color: $black-08; + } + + @media (max-width: $small) { + margin-top: 0; + } +} + +.notification-menu { + &__button { + &:hover { + background-color: $blue-white; + } + } + + &__icon { + &_yellow { + color: $yellow; + } + + &_green { + color: $green; + } + + &_pink { + color: $pink; + } + + &_blue { + color: $blue; + } + } +} diff --git a/src/app/shared/header/components/notifications/notifications.component.ts b/src/app/shared/header/components/notifications/notifications.component.ts new file mode 100644 index 0000000..d133717 --- /dev/null +++ b/src/app/shared/header/components/notifications/notifications.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-notifications', + templateUrl: './notifications.component.html', + styleUrls: ['./notifications.component.scss'] +}) +export class NotificationsComponent { +} diff --git a/src/app/shared/header/components/search/search.component.html b/src/app/shared/header/components/search/search.component.html new file mode 100644 index 0000000..e69de29 diff --git a/src/app/shared/header/components/search/search.component.scss b/src/app/shared/header/components/search/search.component.scss new file mode 100644 index 0000000..2aff0e5 --- /dev/null +++ b/src/app/shared/header/components/search/search.component.scss @@ -0,0 +1,155 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; +@import "src/app/styles/variables"; + +.search { + display: flex; + height: 36px; + border-radius: 32px; + box-sizing: border-box; + align-items: center; + width: 36px; + padding-left: 4px; + cursor: pointer; + flex-direction: row-reverse; + + &:hover { + background-color: $black-08; + } + + // @media (max-width: $small) { + // display: none; + // } +} + +.show-search-input { + animation: 0.3s open_search; + width: 250px; + padding-left: 22.4px; + background-color: $black-08; +} + +.search-input { + color: $white; + font-family: "Roboto", "Helvetica", "Arial", sans-serif; + line-height: 19px; + font-size: $fs-small; + background-color: transparent; + border: none; + outline: none; + height: 36px; + width: 100%; + + &::-webkit-input-placeholder { + color: $white-35; + } +} + +.search-icon { + padding: 0 7px 3px 0; + color: $white-35; +} + +.open-search { + animation: 0.3s move_search-icon; + padding-right: 16px; + padding-left: 4px; +} + +@keyframes open_search { + from { + width: 36px; + } + + to { + width: 250px; + } +} + +@keyframes open_search_large { + from { + width: 36px; + } + + to { + width: 150px; + } +} + +@keyframes move_search-icon { + from { + padding: 0 7px 3px 0; + } + + to { + padding-right: 16px; + } +} + +input { + border: none; + border-bottom: 1px solid silver; +} + + +:host ::ng-deep { + .mat-form-field-infix { + border-bottom: 0px solid white; + } + + .mat-table { + tr { + + th, + td { + vertical-align: middle; + } + } + } +} + + +.table { + margin: 10px; + table-layout: fixed; + border: 1px solid silver; + overflow-x: scroll; + + .table-headers { + padding: 5px; + color: #006ed7; + font-weight: 900; + font-size: medium; + background-color: #f7f7f7; + } +} + +.side-nav { + width: max-content; +} + +.hide { + display: none; +} + +.paginator { + width: 90%; +} + +::ng-deep { + .mat-dialog-container { + + max-height: 500px; + } + + // th.mat-header-cell:first-of-type, + // td.mat-cell:first-of-type, + // td.mat-footer-cell:first-of-type { + // padding-left: 2px; + // } +} + +.mat-dialog-container { + + max-height: 500px; +} \ No newline at end of file diff --git a/src/app/shared/header/components/search/search.component.ts b/src/app/shared/header/components/search/search.component.ts new file mode 100644 index 0000000..b10d385 --- /dev/null +++ b/src/app/shared/header/components/search/search.component.ts @@ -0,0 +1,28 @@ +import { Component, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { MatTableDataSource } from '@angular/material/table'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { ErrorTranslateService } from 'src/app/_providers/_services/error-translate.service'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; + +@Component({ + selector: 'app-search', + templateUrl: './search.component.html', + styleUrls: ['./search.component.scss'] +}) +export class SearchComponent { + + + public isShowInput = false; + + + + constructor( + ) { } + + + +} diff --git a/src/app/shared/header/components/user/user.component.html b/src/app/shared/header/components/user/user.component.html new file mode 100644 index 0000000..1131f84 --- /dev/null +++ b/src/app/shared/header/components/user/user.component.html @@ -0,0 +1,174 @@ + + +
+ + + + + + + +
+ +
+ + + +
+ {{getUser()}} + +

{{getEmail()}}

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

{{getEmail()}}

+
+
close
+ + +
+ profile + +
+
+
+
+
+
+

Hi, {{this.username}}!

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

Edit your profile details

+ + + + + Company profile + + {{ 'companyProfile' | translate }} + + + + + + + + +
+
+ +
+ +
+ + + + Project Completed certificate + + {{ 'projectCompletedCert' | translate }} + + + + + + + + +
+
+ + + +
+ +
+ + maximum value of single project completed till date + + +
+
+
+
+ +
+
+
+ +
+ +
+ +
+
\ No newline at end of file diff --git a/src/app/shared/header/components/user/user.component.scss b/src/app/shared/header/components/user/user.component.scss new file mode 100644 index 0000000..90ca20c --- /dev/null +++ b/src/app/shared/header/components/user/user.component.scss @@ -0,0 +1,99 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +.user-button { + background-color: #4b978d; + box-shadow: none; + margin-left: 16px; + + &__icon { + color: $white-35; + } + + &:hover { + background-color: $black-08; + } + + @media (max-width: $small) { + margin-top: 0; + } +} + +.user-menu-title { + text-align: center !important; + padding: 15px 32px 0 32px; + margin-bottom: 4px; + + &__name { + margin-bottom: 4px; + + // font-weight: $fw-lighter; + // font-size: $fs-large; + // color: $dark-grey; + } + + &__link { + color: $blue; + font-weight: $fw-lighter; + font-size: $fs-small; + text-decoration: none; + } +} + +.user-menu-icon { + color: $light-grey; + margin-right: 16px; + opacity: .8; +} + +.sign-button-wrapper { + text-align: center; + padding: 16px 0 16px 0; + width: 100%; +} + +.sign-button { + border: 1px solid; + color: $dark-grey; + width: 80%; +} + +.user-menu { + &__item-title { + color: black; + + &:hover { + color: $dark-grey; + background-color: $blue-white; + + & .user-menu-icon { + color: #536DFE; + } + } + } +} + +.user-menu-icon { + color: rgb(24, 24, 24); +} + +.adminButtom { + transform: translateY(-5px); + background-color: #ECECEC; + color: #46AC9E; + font-family: nucleo; +} + +.adminButtom:hover{ + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.4); + background-color: rgb(187, 187, 187); +} + +.profiledit{ + border-top-left-radius: 45px; + border-top-right-radius: 45px; + box-shadow: 1px 1px 10px #d0cafc; + padding: 0; + margin:0; +} diff --git a/src/app/shared/header/components/user/user.component.ts b/src/app/shared/header/components/user/user.component.ts new file mode 100644 index 0000000..696888c --- /dev/null +++ b/src/app/shared/header/components/user/user.component.ts @@ -0,0 +1,179 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Router } from '@angular/router'; + +import { routes } from '../../../../consts'; +import { User } from '../../../../pages/auth/models'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { MatDialog } from '@angular/material/dialog'; +import { UserDto } from 'src/app/_dto/user.dto'; +import { PcdUserDto } from 'src/app/_dto/pcduser.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MasterService } from 'src/app/_providers/_services/master.service'; +import { UiService } from 'src/app/_providers/_services/ui.service'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-user', + templateUrl: './user.component.html', + styleUrls: ['./user.component.scss'] +}) +export class UserComponent { + @Input() user: User; + @Output() signOut: EventEmitter = new EventEmitter(); + signedOut : boolean + public routes: typeof routes = routes; + public flatlogicEmail: string = "https://flatlogic.com"; + adminUser: boolean = false; + username: string; + secuLevel: string; + dialogRef: any; + userDetails = new PcdUserDto() + prCmpltCertFilePath: any; + prCmpltCertdocSize: any; + cmpPrfilePath: any; + cmpPrdocSize: any; + userId: string; + email: string; + + public signOutEmit(): void { + localStorage.removeItem('emailId') + this.signOut.emit(); + if(this._router.url == '/auth/login' || this._router.url == '/auth/admin-home') + this.signedOut = true + // console.log('user==email======',this._router); + + } + constructor(public _router : Router, + public dialog :MatDialog, + public _masterService :MasterService, + public _ui:UiService, + public _authService : AuthService){ + // console.log('user==email======',this._router); + this.userId =localStorage.getItem('userId') + } + +ngOnInit(){ + this.getUser(); + this.getEmail(); + this.getData(); +} + + +getData(){ + + let body ={ + + username:this.email + } + + this._masterService.saveMasterData(apiUrl.userInfo,body).then(res=>{ + this.userDetails = res; + + }) + +} + getUser(){ + this.secuLevel = localStorage.getItem('seculevel') + if(this.secuLevel && this.secuLevel == 'B'){ + + if(this.secuLevel === 'B'){ + this.adminUser = true + } + else{ + this.adminUser= false + } + // this.cdr.detectChanges(); + } + this.username = localStorage.getItem('username') + if(this.username) + return this.username + else + return '' + } + getEmail(){ + let email = localStorage.getItem('emailId') + this.email = email; + if(email) + return email + else + return '' + } + + + openEditProfile(templateRef){ + this.dialogRef = this.dialog.open(templateRef, { + width: '400px', + disableClose: false, + panelClass: 'profile-dialog-container' + }); + } + + closeDialog() { + this.dialogRef.close(); +} + + +removeCmpPrFile(){ + this._masterService.deleteMasterData(apiUrl.cmpPrFileUpload,this.userDetails.companyProfile ).then(res=>{ + this.userDetails.companyProfile = null + this.cmpPrfilePath = null + }) +} +uploadCmpPrFiles(event){ + console.log('event ---> ',event) + let file: File | undefined = event.target.files[0]; + if (!file) { + return; + } + + const fd = new FormData(); +fd.append('file', file ); + +this._masterService.saveMasterData(apiUrl.cmpPrFileUpload,fd).then(res=>{ + this.userDetails.companyProfile = res.fileName; + this.cmpPrfilePath = res.filePath; + this.cmpPrdocSize = res.fileSizeKB; + +}) +} + + + +removeprCmpltCertFile(){ +this._masterService.deleteMasterData(apiUrl.projectCompleteCertFile,this.userDetails.projectCompletedCert ).then(res=>{ + this.userDetails.projectCompletedCert = null + this.prCmpltCertFilePath = null + }) +} + +uploadprCmpltCertFiles(event){ +console.log('event ---> ',event) +let file: File | undefined = event.target.files[0]; +if (!file) { + return; +} + +const fd = new FormData(); +fd.append('file', file ); + +this._masterService.saveMasterData(apiUrl.projectCompleteCertFile,fd).then(res=>{ +this.userDetails.projectCompletedCert = res.fileName; +this.prCmpltCertFilePath = res.filePath; +this.prCmpltCertdocSize = res.fileSizeKB; + +}) +} + +saveData(){ +this._masterService.updateMasterData(apiUrl.userDetails,this.userDetails,this.userId).then(res=>{ + this._ui.toastMessage('User Details edited successfully'); + this.dialogRef.close(); + +},err=>{ + this._ui.toastMessage(err.error.message); + this.dialogRef.close(); + +}) +} + +} diff --git a/src/app/shared/header/containers/header/header.component.html b/src/app/shared/header/containers/header/header.component.html new file mode 100644 index 0000000..85088c1 --- /dev/null +++ b/src/app/shared/header/containers/header/header.component.html @@ -0,0 +1,57 @@ +
+ + + + + +
+ + + + \ No newline at end of file diff --git a/src/app/shared/header/containers/header/header.component.scss b/src/app/shared/header/containers/header/header.component.scss new file mode 100644 index 0000000..aa2fb6f --- /dev/null +++ b/src/app/shared/header/containers/header/header.component.scss @@ -0,0 +1,90 @@ +@import 'src/app/styles/colors'; +@import 'src/app/styles/font'; +@import 'src/app/styles/variables'; + +// .header { +// background-color: $header-background-color; +// display: flex; +// justify-content: space-between; +// position: fixed; +// z-index: 2; +// height: $header-height; + +// &__title { +// display: flex; +// align-items: center; +// } + +// &__title-button { +// background-color: $header-button-background-color; +// box-shadow: none; + +// &:hover { +// background-color: $header-button-background-color-hover; +// } + +// @media (max-width: $small) { +// margin-top: 0; +// } +// } + +// &__title-button-icon { +// color: $header-button-font-color; +// } + +// &__title-text { +// color: $header-title-font-color; +// margin-left: 32px; +// font-weight: $fw-lighter; + +// } +// } + +// .header-toolbar { +// display: flex; +// align-items: center; + +// .unlock-button { +// border-color: $green; +// margin-right: 16px; +// text-transform: uppercase; +// background-color: $green; +// color: white; + +// letter-spacing: .0892857143em; +// @media (max-width: $small) { +// display: none; +// } +// } +// } + +// @media print { +// .header{ +// display: none; +// } +// } + +.h2 { + font-family: sans-serif; + font-size: 26px; + font-weight: 500; +} + +#imageHead{ +@media (max-width: $small) { + display: none; +} +} +.title{ + font-family: nucleo; + // color: white; + font-weight: 800; +} + +.container-responsive{ +// background-image: url('/assets/img/grey-poly.jpg'); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + padding: 10px; + } \ No newline at end of file diff --git a/src/app/shared/header/containers/header/header.component.ts b/src/app/shared/header/containers/header/header.component.ts new file mode 100644 index 0000000..f6d8b79 --- /dev/null +++ b/src/app/shared/header/containers/header/header.component.ts @@ -0,0 +1,106 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { Router } from '@angular/router'; + +import { Email, User } from '../../../../pages/auth/models'; +import { EmailService } from '../../../../pages/auth/services'; +import { routes } from '../../../../consts'; +import { AuthService } from 'src/app/_providers/_services/auth.service'; + +@Component({ + selector: 'app-header', + templateUrl: './header.component.html', + styleUrls: ['./header.component.scss'] +}) +export class HeaderComponent { + @Input() isMenuOpened: boolean; + @Output() isShowSidebar = new EventEmitter(); + public user$: Observable + public emails$: Observable + public routers: typeof routes = routes; + schoolLogoPath: string; + seculevel: any; + + constructor( + private emailService: EmailService, + public router: Router, + private authenticationService: AuthService + ) { + this.user$ = this.getUser(); + this.emails$ = this.emailService.loadEmails(); + this.getSchoolLogo(); + this.seculevel = localStorage.getItem('seculevel') + + } + + public getSchoolLogo(){ + let institute = localStorage.getItem('institute'); + if(institute){ + this.schoolLogoPath = "./../../../../../assets/accurate/images/"+institute+".png"; + }else{ + this.schoolLogoPath = "./../../../../../assets/accurate/images/institute.png"; + } + } + + public openMenu(): void { + this.isMenuOpened = !this.isMenuOpened; + + this.isShowSidebar.emit(this.isMenuOpened); + } + + public signOut(): void { + + this.authenticationService.logOut(); + + } + + goToWebsite(){ + this.authenticationService.logOut().then(res=>{ + window.open('https://www.artnouveau.in/') + + }); + // window.location.href = 'https://www.thrickodithanamscb.in/index.html#hero'; + + } + + goToHome(){ + // if(currentLoc.includes('auth')){ + // this.router.navigate(['/auth/admin-home']) + // } + // else{ + // // this.router.navigate(['/dashboard']) + + + // } + this.seculevel = localStorage.getItem('seculevel') + + + if(this.seculevel == 'SuperAdmin'){ + + this.router.navigate(['sadmin/dashboard']) + + }else if(this.seculevel == 'Admin'){ + + this.router.navigate(['admin/dashboard']) + + }else if(this.seculevel == 'Analyst'){ + + this.router.navigate(['analyst/dashboard']) + + }else if(this.seculevel == 'User'){ + + this.router.navigate(['/dashboard']) + } + } + goToSignIn(){ + this.router.navigate(['/auth/login']) + } + + public getUser(): Observable { + return of({ + email: localStorage.getItem('emailId'), + name: localStorage.getItem('username'), + + }); + } +} diff --git a/src/app/shared/header/containers/index.ts b/src/app/shared/header/containers/index.ts new file mode 100644 index 0000000..abd4bb2 --- /dev/null +++ b/src/app/shared/header/containers/index.ts @@ -0,0 +1 @@ +export * from './header/header.component'; diff --git a/src/app/shared/header/header.module.ts b/src/app/shared/header/header.module.ts new file mode 100644 index 0000000..42005d6 --- /dev/null +++ b/src/app/shared/header/header.module.ts @@ -0,0 +1,61 @@ +import { NgModule } from '@angular/core'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { CommonModule } from '@angular/common'; +import { MatIconModule } from '@angular/material/icon'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatButtonModule } from '@angular/material/button'; +import { MatInputModule } from '@angular/material/input'; +import { MatBadgeModule } from '@angular/material/badge'; + +import { HeaderComponent } from './containers'; +import { UserComponent, EmailComponent } from './components'; +import { NotificationsComponent } from './components/notifications/notifications.component'; +import { SearchComponent } from './components/search/search.component'; +import { ShortNamePipe } from './pipes'; +import { FavouritesComponent } from './components/favourites/favourites.component'; +import { TranslateModule } from '@ngx-translate/core'; +import { MatProgressBarModule } from '@angular/material/progress-bar'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; +import { MatCheckboxModule } from '@angular/material/checkbox'; +import { MatSelectModule } from '@angular/material/select'; +import { MatTableModule } from '@angular/material/table'; +import { MatPaginatorModule } from '@angular/material/paginator'; +import { MatCardModule } from '@angular/material/card'; + +@NgModule({ + declarations: [ + HeaderComponent, + UserComponent, + EmailComponent, + NotificationsComponent, + SearchComponent, + ShortNamePipe, + FavouritesComponent + ], + exports: [ + HeaderComponent + ], + imports: [ + CommonModule, + MatToolbarModule, + MatFormFieldModule, + MatIconModule, + MatMenuModule, + MatButtonModule, + MatInputModule, + MatBadgeModule, + MatProgressBarModule, + MatProgressSpinnerModule, + TranslateModule, + FormsModule, + ReactiveFormsModule, + MatCheckboxModule, + MatSelectModule, + MatTableModule, + MatPaginatorModule, + MatCardModule + ] +}) +export class HeaderModule { } diff --git a/src/app/shared/header/pipes/index.ts b/src/app/shared/header/pipes/index.ts new file mode 100644 index 0000000..6617b11 --- /dev/null +++ b/src/app/shared/header/pipes/index.ts @@ -0,0 +1 @@ +export * from './short-name'; diff --git a/src/app/shared/header/pipes/short-name.ts b/src/app/shared/header/pipes/short-name.ts new file mode 100644 index 0000000..0422fc8 --- /dev/null +++ b/src/app/shared/header/pipes/short-name.ts @@ -0,0 +1,13 @@ +import { Pipe, PipeTransform } from '@angular/core'; + +@Pipe({ + name: 'shortName' +}) +export class ShortNamePipe implements PipeTransform { + + transform(value: string): string { + + const commaIndex: number = value.search('\\s'); + return '' + value[0].toUpperCase() + value[commaIndex + 1].toUpperCase(); + } +} diff --git a/src/app/shared/layout/layout.component.html b/src/app/shared/layout/layout.component.html new file mode 100644 index 0000000..790d4b0 --- /dev/null +++ b/src/app/shared/layout/layout.component.html @@ -0,0 +1,18 @@ + + + + \ No newline at end of file diff --git a/src/app/shared/layout/layout.component.scss b/src/app/shared/layout/layout.component.scss new file mode 100644 index 0000000..8eeea1a --- /dev/null +++ b/src/app/shared/layout/layout.component.scss @@ -0,0 +1,31 @@ +@import "src/app/styles/variables"; +@import "src/app/styles/colors"; + +.layout { + width: 100%; +} + +.layout-sidebar { + height:calc(100vh - 64px); + margin-top: 64px; + + @media (max-width: $small) { + width: 218px; + } +} + +.layout-content { + background-color: $background-color; + min-height:calc(100vh - 64px); + margin-top: 64px; + + @media (max-width: $small) { + width: 100%; + } +} + +@media print { + .layout-content { + margin-top: 0px; + } +} diff --git a/src/app/shared/layout/layout.component.ts b/src/app/shared/layout/layout.component.ts new file mode 100644 index 0000000..bc980fc --- /dev/null +++ b/src/app/shared/layout/layout.component.ts @@ -0,0 +1,40 @@ +import { ChangeDetectorRef, Component, OnDestroy, ViewChild } from '@angular/core'; +import { MediaMatcher } from '@angular/cdk/layout'; +import { MatSidenav } from '@angular/material/sidenav'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; + +@Component({ + selector: 'app-layout', + templateUrl: './layout.component.html', + styleUrls: ['./layout.component.scss'] +}) +export class LayoutComponent implements OnDestroy { + + @ViewChild('sidenav') sidenav: MatSidenav; + public isShowSidebar: boolean; + public mobileQuery: MediaQueryList; + private mobileQueryListener: () => void; + + constructor( + changeDetectorRef: ChangeDetectorRef, + media: MediaMatcher, + public _menuService:MenuService + ) { + this.mobileQuery = media.matchMedia('(max-width: 595px)'); + this.mobileQueryListener = () => changeDetectorRef.detectChanges(); + this.mobileQuery.addListener(this.mobileQueryListener); + + // this._menuService.isShowSidebar = !this.mobileQuery.matches; + this._menuService.isShowSidebar = false; + } + + public ngOnDestroy(): void { + this.mobileQuery.removeListener(this.mobileQueryListener); + + this.sidenav.close(); + } + + closeSideMenu(event) { + this._menuService.isShowSidebar = false; + } +} diff --git a/src/app/shared/shared.module.ts b/src/app/shared/shared.module.ts new file mode 100644 index 0000000..bfd77b3 --- /dev/null +++ b/src/app/shared/shared.module.ts @@ -0,0 +1,51 @@ +import { NgModule } from '@angular/core'; +import { MatListModule } from '@angular/material/list'; +import { MatIconModule } from '@angular/material/icon'; +import { RouterModule } from '@angular/router'; +import { MatButtonModule } from '@angular/material/button'; +import { CommonModule } from '@angular/common'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatSelectModule } from '@angular/material/select'; +import { FormsModule } from '@angular/forms'; +import { MatSidenavModule } from '@angular/material/sidenav'; + +import { HeaderModule } from './header/header.module'; +import { SidebarComponent } from './sidebar/sidebar.component'; +import { FooterComponent } from './footer/footer.component'; +import { SettingsMenuComponent } from './ui-elements/settings-menu/settings-menu.component'; +import { DateMenuComponent } from './ui-elements/date-menu/date-menu.component'; +import { LayoutComponent } from './layout/layout.component'; +import { TranslateModule } from '@ngx-translate/core'; + + +@NgModule({ + declarations: [ + SidebarComponent, + FooterComponent, + SettingsMenuComponent, + DateMenuComponent, + LayoutComponent + ], + imports: [ + HeaderModule, + MatListModule, + MatIconModule, + RouterModule, + MatButtonModule, + CommonModule, + MatMenuModule, + MatSelectModule, + FormsModule, + MatSidenavModule, + TranslateModule + ], + exports: [ + HeaderModule, + SidebarComponent, + FooterComponent, + SettingsMenuComponent, + DateMenuComponent, + LayoutComponent + ] +}) +export class SharedModule { } diff --git a/src/app/shared/sidebar/sidebar.component.html b/src/app/shared/sidebar/sidebar.component.html new file mode 100644 index 0000000..f1458b9 --- /dev/null +++ b/src/app/shared/sidebar/sidebar.component.html @@ -0,0 +1,83 @@ + + + {{menu.icon}} + {{ menu.langaugeLabelCode| translate }} + +
+
+ +
+ {{subMenu.icon}} + {{ subMenu.langaugeLabelCode | translate }} +
+
+
+ +
+ {{componentMenu.icon}} + {{ componentMenu.langaugeLabelCode| translate }} +
+
+
+ +
+ {{miniMenu.icon}} + {{ miniMenu.langaugeLabelCode | translate }} +
+
+
+
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/src/app/shared/sidebar/sidebar.component.scss b/src/app/shared/sidebar/sidebar.component.scss new file mode 100644 index 0000000..7989cd2 --- /dev/null +++ b/src/app/shared/sidebar/sidebar.component.scss @@ -0,0 +1,91 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/font"; +@import "src/app/styles/variables"; + +.mat-list-base { + border-bottom: 0px solid $gray-80; + width: $sidebar-width; + padding-bottom: 0px; + padding-top: 1px; + + & .mat-list-item { + display: flex; + cursor: pointer; + color: $sidebar-font-color; + width: auto; + padding-left: 4px; + + &.active { + color: $sidebar-font-color-active; + background-color: $sidebar-background-color-active; + outline: none; + + & .mat-icon { + color: $sidebar-icon-color-active; + } + + & .circle { + background-color: $sidebar-icon-color-active; + } + } + + &:hover { + background-color: $sidebar-background-color-hover; + } + + &:focus { + outline: none; + } + } +} + +.mat-icon { + margin-right: 15px; + color: $sidebar-icon-color; +} + + +.sidebar-title { + color: $sidebar-title-color; + font-size: $fs-normal; + text-transform: uppercase; + margin-top: 32px; + margin-left: 24px; + margin-bottom: 16px; +} + +.mat-list-base .mat-list-item.ui-element { + padding-left: 40px; +} + +.circle { + width: 5px; + height: 5px; + border-radius: 50%; + background-color: $sidebar-circle-color; + margin-right: 30px; +} + +.project-circle { + width: 8px; + height: 8px; + border-radius: 50%; + margin-right: 15px; + margin-left: 8px; + + &_yellow { + background-color: $yellow; + } + + &_blue { + background-color: $blue; + } + + &_pink { + background-color: $pink; + } +} + +.sub-menu{ + padding-left: 10px; +} diff --git a/src/app/shared/sidebar/sidebar.component.ts b/src/app/shared/sidebar/sidebar.component.ts new file mode 100644 index 0000000..8cd14c6 --- /dev/null +++ b/src/app/shared/sidebar/sidebar.component.ts @@ -0,0 +1,102 @@ +import { Component, EventEmitter, HostListener, Output } from '@angular/core'; +import { IgenMenuDto } from 'src/app/_dto/igenMenu.dto'; +import { MenuFormatDto } from 'src/app/_dto/menu-format.dto'; +import { apiUrl } from 'src/app/_providers/_resources/api-url.properties'; +import { MenuService } from 'src/app/_providers/_services/menu.service'; +import { routes } from '../../consts/routes'; + + +@Component({ + selector: 'app-sidebar', + templateUrl: './sidebar.component.html', + styleUrls: ['./sidebar.component.scss'] +}) +export class SidebarComponent { + public routes: typeof routes = routes; + public isOpenUiElements = false; + menuData: any; + model: any; + seculevel: string = '' + screenWidth: number; + @Output() sideBarVisibility = new EventEmitter(); + + constructor( + private _menuService: MenuService + ) { + this.getMenuData(); + this.getScreenSize(); + } + + async getMenuData() { + + await this._menuService.getJsonData("sales-menu").then((res) => { + this.menuData = res; + this.model = this.getMenuCompact(this.menuData, "root"); + }, + (err) => { + // console.log("===err====", err); + }); + // const secuLevel = localStorage.getItem("seculevel"); + // if(secuLevel=="1" || secuLevel=="4"){ + // await this._menuService.getMenuData(apiUrl.sisUsermenu).then((res) => { + // this.menuData = res; + // this._menuService.menuData = res; + // this.model = this.getMenuCompact(this.menuData, "root"); + // }, + // (err) => { + // console.log("===err====", err); + // }); + // } + + } + public openUiElements() { + this.isOpenUiElements = !this.isOpenUiElements; + + } + + @HostListener('window:resize', ['$event']) + getScreenSize(event?) { + this.screenWidth = window.innerWidth; + } + + mediaScreenCheck() { + if (this.screenWidth < 416) { + this.sideBarVisibility.emit(true); + } + } + + + getMenuCompact(menuList: IgenMenuDto[], parentMenuId: string, menuCompactData?: MenuFormatDto[]) { + if (!parentMenuId) + return []; + if (!menuCompactData) + menuCompactData = []; + for (let menu of menuList) { + if (menu.parentMenuId == parentMenuId && menu.menuEnabled == "Y") { + let format: MenuFormatDto = { menuId: menu.menuId, icon: menu.icon, label: menu.description, langaugeLabelCode: menu.languageLabelCode, data: { description: menu.description, langaugeLabelCode: menu.languageLabelCode, menuId: menu.menuId, rightsGiven: menu.rightsGiven } }; + if (menu["isMegaMenu"]) format["isExpanded"] = true; else format["isExpanded"] = false; + if (menu["isSideMenu"]) format["isSideMenu"] = true; else format["isSideMenu"] = false; + if (menu["routerLink"]) format["routerLink"] = menu["routerLink"]; + // if (menu.menuType == "1") format["isExpanded"] = true; + // if (menu.menuType != "1") format["isExpanded"] = false; + // if (menu["routerLink"] === this.router.url) this.service.selectedMenu = format; + if (menu["menuType"]) format["menuType"] = menu["menuType"]; + if (menu.menuType == "1") format["items"] = this.getMenuCompact(menuList, menu.menuId) + if (menu["role"]) format["role"] = menu["role"]; + if (menu["project"]) format["project"] = menu["project"]; + if (this.seculevel == 'admin') + menuCompactData.push(format); + else { + if (menu.role != 'admin') { + menuCompactData.push(format); + } + } + } + } + + return menuCompactData; + } + expand(menu) { + menu.isExpanded = !menu.isExpanded; + } +} diff --git a/src/app/shared/ui-elements/date-menu/date-menu.component.html b/src/app/shared/ui-elements/date-menu/date-menu.component.html new file mode 100644 index 0000000..770e8c6 --- /dev/null +++ b/src/app/shared/ui-elements/date-menu/date-menu.component.html @@ -0,0 +1,6 @@ + + Daily + Weekly + Monthly + + diff --git a/src/app/shared/ui-elements/date-menu/date-menu.component.scss b/src/app/shared/ui-elements/date-menu/date-menu.component.scss new file mode 100644 index 0000000..a25d056 --- /dev/null +++ b/src/app/shared/ui-elements/date-menu/date-menu.component.scss @@ -0,0 +1,5 @@ +.date-menu { + border: none; + width: 55px; + padding: 8px 0 8px 4px; +} diff --git a/src/app/shared/ui-elements/date-menu/date-menu.component.ts b/src/app/shared/ui-elements/date-menu/date-menu.component.ts new file mode 100644 index 0000000..b7e8c12 --- /dev/null +++ b/src/app/shared/ui-elements/date-menu/date-menu.component.ts @@ -0,0 +1,22 @@ +import {Component, EventEmitter, Output} from '@angular/core'; + +enum matSelectedFields { + daily = 'Daily', + weekly = 'Weekly', + monthly = 'Monthly' +} + +@Component({ + selector: 'app-date-menu', + templateUrl: './date-menu.component.html', + styleUrls: ['./date-menu.component.scss'] +}) +export class DateMenuComponent { + @Output() changeDateType = new EventEmitter(); + public matSelectFields: typeof matSelectedFields = matSelectedFields; + public selectedMatSelectValue = matSelectedFields.daily; + + public changedMatSelectionValue(dateType: string) { + this.changeDateType.emit(dateType); + } +} diff --git a/src/app/shared/ui-elements/index.ts b/src/app/shared/ui-elements/index.ts new file mode 100644 index 0000000..250b8c9 --- /dev/null +++ b/src/app/shared/ui-elements/index.ts @@ -0,0 +1,2 @@ +export * from './settings-menu/settinds-menu.component'; +export * from './date-menu/date-menu.component'; diff --git a/src/app/shared/ui-elements/settings-menu/settings-menu.component.html b/src/app/shared/ui-elements/settings-menu/settings-menu.component.html new file mode 100644 index 0000000..ea5a27f --- /dev/null +++ b/src/app/shared/ui-elements/settings-menu/settings-menu.component.html @@ -0,0 +1,11 @@ + +
+ + + + + + +
diff --git a/src/app/shared/ui-elements/settings-menu/settings-menu.component.scss b/src/app/shared/ui-elements/settings-menu/settings-menu.component.scss new file mode 100644 index 0000000..93dbe52 --- /dev/null +++ b/src/app/shared/ui-elements/settings-menu/settings-menu.component.scss @@ -0,0 +1,29 @@ +@import "src/app/styles/colors"; +@import "src/app/styles/variables"; + +.settings-button { + box-shadow: none; + background-color: $settings-button-background-color; + color: $settings-button-color; + + &:hover { + background-color: $blue; + color: $settings-button-color-hover; + } + + &__icon { + color: inherit; + } +} + +.settings-menu { + position: absolute; + + &__item { + color: $dark-grey; + + &:hover { + background-color: $settings-menu-background-color-hover; + } + } +} diff --git a/src/app/shared/ui-elements/settings-menu/settings-menu.component.ts b/src/app/shared/ui-elements/settings-menu/settings-menu.component.ts new file mode 100644 index 0000000..029d3c0 --- /dev/null +++ b/src/app/shared/ui-elements/settings-menu/settings-menu.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-settings-menu', + templateUrl: './settings-menu.component.html', + styleUrls: ['./settings-menu.component.scss'] +}) +export class SettingsMenuComponent { +} diff --git a/src/app/styles/colors-dev.scss b/src/app/styles/colors-dev.scss new file mode 100644 index 0000000..592c6de --- /dev/null +++ b/src/app/styles/colors-dev.scss @@ -0,0 +1,37 @@ +$yellow: #ffc260; +$blue: #81d6d6; +$light-blue: #798DFE; +$white-blue: #B1BCFF; +$blue-white: #F3F5FF; +$pink: #ff4081; +$dark-pink: #ff0f60; +$green: #3CD4A0; +$violet: #9013FE; +$white: white; +$dark-grey: #4A4A4A; +$light-grey: #B9B9B9; +$grey: #6E6E6E; +$sky: #c0caff; + + +$white-35: rgba(255, 255, 255, 0.35); +$white-80: #FFFFFF80; + +$gray-08: rgba(110, 110, 110, 0.8); +$gray-80: #D8D8D880; +$gray-06: rgba(110, 110, 110, 0.6); + +$black-08: rgba(0, 0, 0, 0.08); + +$pink-15: rgba(255, 92, 147, 0.15); +$blue-15: rgba(83, 109, 254, 0.15); +$green-15: rgba(60, 212, 160, 0.15); +$yellow-15: rgba(255, 194, 96, 0.15); +$violet-15: rgba(144, 19, 254, 0.15); + + +$shadow-white: #E8EAFC; +$shadow-grey: #B2B2B21A; +$shadow-dark-grey: #9A9A9A1A; + +$background-color: #F6F7FF; diff --git a/src/app/styles/colors.scss b/src/app/styles/colors.scss new file mode 100644 index 0000000..2fd11b0 --- /dev/null +++ b/src/app/styles/colors.scss @@ -0,0 +1,37 @@ +$yellow: #ffc260; +$blue: #536DFE; +$light-blue: #798DFE; +$white-blue: #B1BCFF; +$blue-white: #F3F5FF; +$pink: #ff4081; +$dark-pink: #ff0f60; +$green: #3CD4A0; +$violet: #9013FE; +$white: white; +$dark-grey: #4A4A4A; +$light-grey: #B9B9B9; +$grey: #6E6E6E; +$sky: #c0caff; + + +$white-35: rgba(255, 255, 255, 0.35); +$white-80: #FFFFFF80; + +$gray-08: rgba(110, 110, 110, 0.8); +$gray-80: #D8D8D880; +$gray-06: rgba(110, 110, 110, 0.6); + +$black-08: rgba(0, 0, 0, 0.08); + +$pink-15: rgba(255, 92, 147, 0.15); +$blue-15: rgba(83, 109, 254, 0.15); +$green-15: rgba(60, 212, 160, 0.15); +$yellow-15: rgba(255, 194, 96, 0.15); +$violet-15: rgba(144, 19, 254, 0.15); + + +$shadow-white: #E8EAFC; +$shadow-grey: #B2B2B21A; +$shadow-dark-grey: #9A9A9A1A; + +$background-color: #F6F7FF; diff --git a/src/app/styles/font.scss b/src/app/styles/font.scss new file mode 100644 index 0000000..80624a9 --- /dev/null +++ b/src/app/styles/font.scss @@ -0,0 +1,14 @@ +$fw-lighter: 400; +$fw-normal: 500; +$fw-bold: 600; + + +$fs-xs: 11.2px; +$fs-small: 14px; +$fs-normal: 16px; +$fs-regular: 18px; +$fs-medium: 21px; +$fs-large: 24px; +$fs-xl: 28px; +$fs-xxl: 38px; +$fs-xxxl: 42px; diff --git a/src/app/styles/toasrt.scss b/src/app/styles/toasrt.scss new file mode 100644 index 0000000..d1ad77e --- /dev/null +++ b/src/app/styles/toasrt.scss @@ -0,0 +1,46 @@ +@import "colors"; + +@mixin toastr-wrapper { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; +} + +@mixin toastr($color) { + position: relative; + overflow: hidden; + margin: 16px 0 6px 0; + pointer-events: all; + cursor: pointer; + width: 257px; + color: $white; + display: flex; + align-items: center; + background-color: $color; + height: 45px; +} + +@mixin toastr-wrapper-icon { + color:$white-80; + height: 45px; + width: 45px; + display: flex; + align-items: center; + justify-content: center; +} + +@mixin toastr-content { + display: flex; + align-items: center; +} + +@mixin toastr-content-title { + margin: 0; +} + +@mixin toastr-icon { + padding: 0; + width: auto; + height: auto; +} diff --git a/src/app/styles/variables.scss b/src/app/styles/variables.scss new file mode 100644 index 0000000..2ff942d --- /dev/null +++ b/src/app/styles/variables.scss @@ -0,0 +1,86 @@ +@import "colors"; + +//== Viewports + +$extra-small: 576px; +$small: 576px; +$medium: 768px; +$normal: 1024px; +$large: 992px; +$extra-large: 1200px; + + +//== Sidebar + +$sidebar-width: 210px; +$sidebar-font-color: $gray-08; +$sidebar-font-color-active: $dark-grey; +$sidebar-background-color-active: $blue-white; +$sidebar-background-color-hover: $blue-white; +$sidebar-icon-color-active: $blue; +$sidebar-icon-color: $gray-06; +$sidebar-title-color: $sidebar-font-color; +$sidebar-circle-color: $light-grey; + +//== Material Card +// + +$card-font-color: $dark-grey; +$card-title-font-color: $grey; + +//== Material Toolbar + +$toolbar-title-font-color: $light-grey; +$toolbar-button-font-color: $white; +$toolbar-button-background-color: $pink; +$toolbar-button-background-color-active: $dark-pink; + +//== Material Sidebar Content + +$sidebar-content-padding: 48px; + +//== Material Tabs + +$tabs-header-font-color: $light-grey; +$tabs-header-font-color-active: $blue; +$tabs-ink-bar-color: $blue; + + +//== Apex Chart X axis tooltip + +$chart-tooltip-background-color: $blue; +$chart-tooltip-border-color: $blue; +$chart-tooltip-font-color: $white; + +//== Scroll bar + +$scrollbar-track-color: $light-grey; +$scrollbar-track-piece-color: $white; +$scrollbar-thumb-color: $light-grey; +$scrollbar-corner-color: $light-grey; + +//== Header + +$header-background-color: $blue; +$header-height: 64px; +$header-button-background-color: $blue; +$header-button-background-color-hover: $black-08; +$header-button-font-color: $white; +$header-title-font-color: $white; + +//== Footer + +$footer-height: 48px; +$footer-width: calc(100% - #{$sidebar-content-padding}); +$footer-link-color: $blue; +$footer-icon-color: $gray-06; +$footer-icon-background-color-hover: $black-08; + +//== Settings menu element + +$settings-button-background-color: $white; +$settings-button-background-color-hover: $blue; +$settings-button-color: $light-grey; +$settings-button-color-hover: $white-35; +$settings-menu-font-color: $dark-grey; +$settings-menu-background-color-hover: $blue-white; diff --git a/src/assets/accurate/images/emblem2.jpg b/src/assets/accurate/images/emblem2.jpg new file mode 100644 index 0000000..ef4d637 Binary files /dev/null and b/src/assets/accurate/images/emblem2.jpg differ diff --git a/src/assets/accurate/images/panel_background.jpg b/src/assets/accurate/images/panel_background.jpg new file mode 100644 index 0000000..25ab5d0 Binary files /dev/null and b/src/assets/accurate/images/panel_background.jpg differ diff --git a/src/assets/accurate/images/salesapp.png b/src/assets/accurate/images/salesapp.png new file mode 100644 index 0000000..ca90dc7 Binary files /dev/null and b/src/assets/accurate/images/salesapp.png differ diff --git a/src/assets/accurate/images/salesappheader.png b/src/assets/accurate/images/salesappheader.png new file mode 100644 index 0000000..7d2a37b Binary files /dev/null and b/src/assets/accurate/images/salesappheader.png differ diff --git a/src/assets/auth/google.svg b/src/assets/auth/google.svg new file mode 100644 index 0000000..c0f35d9 --- /dev/null +++ b/src/assets/auth/google.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/auth/logo.svg b/src/assets/auth/logo.svg new file mode 100644 index 0000000..9b45d20 --- /dev/null +++ b/src/assets/auth/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/css/style.css b/src/assets/css/style.css new file mode 100644 index 0000000..5829fd9 --- /dev/null +++ b/src/assets/css/style.css @@ -0,0 +1,1044 @@ + +/*-------------------------------------------------------------- +# General +--------------------------------------------------------------*/ + + +#loading { + width: 4rem; + height: 4rem; + border: 5px solid #f3f3f3; + border-top: 6px solid #0693f1; + border-radius: 100%; + margin: auto; + visibility: hidden; + animation: spin 1s infinite linear; +} +#loading.display { + visibility: visible; +} +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + + + +body { + font-family: "Open Sans", sans-serif; + color: grey; +} + +a { + text-decoration: none; + color: #000000; +} + +a:hover { + color: #e84545; + text-decoration: none; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.font-primary { + font-family: "Lato", sans-serif; +} + + +/*-------------------------------------------------------------- +# Section Title +--------------------------------------------------------------*/ +section { + padding: 60px 0; +} + +.section-bg { + background-color: #f2f9f8; +} + +.section-title { + text-align: center; + padding-bottom: 40px; +} + +.section-title h2 { + color: #32353a; /*text colour */ + font-size: 32px; + font-weight: 500; + position: relative; +} + +.section-title h2:before, +.section-title h2:after { + content: ""; + width: 50px; + height: 2px; + background: #e84545; + display: inline-block; +} + +.section-title h2:before { + margin: 0 15px 10px 0; +} + +.section-title h2:after { + margin: 0 0 10px 15px; +} + +.section-title p { + margin-bottom: auto; + margin-top: 50px; +} + +/*-------------------------------------------------------------- +# Breadcrumbs +--------------------------------------------------------------*/ +.breadcrumbs { + padding: 45px 0; + background-color: #f6fafa; + min-height: 40px; + margin-top: 80px; + margin-bottom: 20px; + +} + +.breadcrumbs h2 { + font-size: 24px; + font-weight: 500; + margin: 0; + color: black; /* Add black color to the font */ +} + +@media (max-width: 992px) { + .breadcrumbs h2 { + margin: 0 0 10px 0; + } +} + +.breadcrumbs ol { + display: flex; + flex-wrap: wrap; + list-style: none; + padding: 0; + margin: 0; + font-size: 14px; + +} + +.breadcrumbs ol li+li { + padding-left: 10px; +} + +.breadcrumbs ol li+li::before { + display: inline-block; + padding-right: 10px; + color: #000000; + content: "/"; +} + +@media (max-width: 780px) { + .breadcrumbs .d-flex { + display: block !important; + font-weight: 400px; + } + + .breadcrumbs ol { + display: block; + font-weight: 400px; + } + + .breadcrumbs ol li { + display: inline-block; + font-weight: 400px; + } +} + + +/*-------------------------------------------------------------- +# Back to top button +--------------------------------------------------------------*/ +.back-to-top { + position: fixed; + visibility: hidden; + opacity: 0; + right: 15px; + bottom: 15px; + z-index: 99999; + background: #70b9b0; + width: 40px; + height: 40px; + border-radius: 4px; + transition: all 0.4s; +} + +.back-to-top i { + font-size: 24px; + color: #fff; + line-height: 0; +} + +.back-to-top:hover { + background: #8bc6bf; + color: #fff; +} + +.back-to-top.active { + visibility: visible; + opacity: 1; +} + +/*-------------------------------------------------------------- +# Header +--------------------------------------------------------------*/ +#header { + height: 100px; + transition: all 0.5s; + z-index: 997; + transition: all 0.5s; + background: #48746e; +} + +#header { + height: 80px; + transition: all 0.5s; + z-index: 997; + transition: all 0.5s; + background: #ffffff; + display: flex; /* Add flex display to the header */ + align-items: center; /*Align items vertically in the center */ +} +#header.header-scrolled { + background: #ffffff; + height: 60px; +} + +#header .logo h1 { + font-size: 30px; + margin: 0; + padding: 0; + line-height: 0; + font-weight: 500; + letter-spacing: 1px; +} + +#header .logo h1 a, +#header .logo h1 a:hover { + color: #000000; + text-decoration: none; + line-height: 0; +} + +#header .logo h2 { + font-size: 26px;; + line-height: 0; + font-weight: 500; + position: relative; +} + +#header .logo h2 a, +#header .logo h2 a:hover { + color: #000000; + text-decoration: none; + line-height: 0; +} + +#header .logo img { + padding: 0; + margin: 0; + max-height: 40px; +} + +#main { + margin-top: 65px; +} + + +/* -------------------------Marquee------------------------- */ +/* -------------------------Marquee------------------------- */ + +#Marquee { + width: 100%; + padding-top: 0; + padding-bottom: 0; + background-color: #eef5f1; + /* background-color: #e7e7e7; */ + position: fixed; + top: 68px; /* Adjust the value based on the height of your header */ + z-index: 1; + transition: top 0.3s; /* Add transition for smooth animation */ +} + +.marquee-container { + margin-top: 30px; + width: 100vw; + /* background-color: #dbdbdb; */ + overflow: hidden; + height: 25px; /* Adjust the height as desired */ + opacity: 0.9; +} + +.marquee-content { + width: 100%; + display: inline-block; + white-space: nowrap; + animation: marquee 30s linear infinite; + transform: translateX(100%); /* Start from the right side of the container */ +} + +.marquee-content p { + font-size: 15px; + color: #000000; + margin-top: 0; +} + +@keyframes marquee { + 0% { + transform: translateX(100%); /* Start from the right side of the container */ + } + 100% { + transform: translateX(-100%); /* Move towards the left side of the container */ + } +} + +/*-------------------------------------------------------------- +# Navigation Menu +--------------------------------------------------------------*/ +/** +* Desktop Navigation +*/ +.navbar { + padding: 0; +} + +.navbar ul { + margin: 0; + padding: 0; + display: flex; + list-style: none; + align-items: center; +} + +.navbar li { + position: relative; +} + +.navbar a, +.navbar a:focus { + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0 10px 30px; + font-family: "Open Sans", sans-serif; + font-size: 14px; + color: #000000; + white-space: nowrap; + transition: 0.3s; +} + +.navbar a i, +.navbar a:focus i { + font-size: 12px; + line-height: 0; + margin-left: 5px; +} + +.navbar a:hover, +.navbar .active, +.navbar .active:focus, +.navbar li:hover>a { + color: #e84545; +} + +.navbar .dropdown ul { + display: block; + position: absolute; + left: 14px; + top: calc(100% + 30px); + margin: 0; + padding: 10px 0; + z-index: 99; + opacity: 0; + visibility: hidden; + background: #ffffff; + box-shadow: 0px 0px 30px #00000040; + transition: 0.3s; +} + +.navbar .dropdown ul li { + min-width: 200px; +} + +.navbar .dropdown ul a { + padding: 10px 20px; + text-transform: none; + font-size: 14px; + font-weight: 500; + color: #000000; +} + +.navbar .dropdown ul a i { + font-size: 12px; +} + +.navbar .dropdown ul a:hover, +.navbar .dropdown ul .active:hover, +.navbar .dropdown ul li:hover>a { + color: #e84545; +} + +.navbar .dropdown:hover>ul { + opacity: 1; + top: 100%; + visibility: visible; +} + +.navbar .dropdown .dropdown ul { + top: 0; + left: calc(100% - 30px); + visibility: hidden; +} + +.navbar .dropdown .dropdown:hover>ul { + opacity: 1; + top: 0; + left: 100%; + visibility: visible; +} + +@media (max-width: 1366px) { + .navbar .dropdown .dropdown ul { + left: -90%; + } + + .navbar .dropdown .dropdown:hover>ul { + left: -100%; + } +} + +/** +* Mobile Navigation +*/ +.mobile-nav-toggle { + color: #000000; + font-size: 28px; + cursor: pointer; + display: none; + line-height: 0; + transition: 0.5s; +} + +@media (max-width: 991px) { + .mobile-nav-toggle { + display: block; + } + + .navbar ul { + display: none; + } +} + +.navbar-mobile { + position: fixed; + overflow: hidden; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(197, 197, 197, 0.9); + transition: 0.3s; +} + +.navbar-mobile .mobile-nav-toggle { + position: absolute; + top: 15px; + right: 15px; +} + +.navbar-mobile ul { + display: block; + position: absolute; + top: 55px; + right: 15px; + bottom: 15px; + left: 15px; + padding: 10px 0; + background-color: #fffcfc; + overflow-y: auto; + transition: 0.3s; +} + +.navbar-mobile a, +.navbar-mobile a:focus { + padding: 10px 20px; + font-size: 15px; + color: #000000; +} + +.navbar-mobile a:hover, +.navbar-mobile .active, +.navbar-mobile li:hover>a { + color: #e84545; +} + +.navbar-mobile .getstarted, +.navbar-mobile .getstarted:focus { + margin: 15px; +} + +.navbar-mobile .dropdown ul { + position: static; + display: none; + margin: 10px 20px; + padding: 10px 0; + z-index: 99; + opacity: 1; + visibility: visible; + background: #ffffff; + box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.25); +} + +.navbar-mobile .dropdown ul li { + min-width: 200px; +} + +.navbar-mobile .dropdown ul a { + padding: 10px 20px; +} + +.navbar-mobile .dropdown ul a i { + font-size: 12px; +} + +.navbar-mobile .dropdown ul a:hover, +.navbar-mobile .dropdown ul .active:hover, +.navbar-mobile .dropdown ul li:hover>a { + color: #e84545; +} + +.navbar-mobile .dropdown>.dropdown-active { + display: block; +} + +/*-------------------------------------------------------------- +# Hero Section +--------------------------------------------------------------*/ +#hero { + width: 100%; + height: 100vh; + background: url("../img/photo.jpeg") top center; + background-size: cover; + /* background-size: 100%; */ + position: relative; + margin-bottom: -80px; +} + +#hero:before { + content: ""; + background: rgba(39, 39, 39, 0.85); + position: absolute; + bottom: 0; + top: 0; + left: 0; + right: 0; +} + +#hero .hero-container { + position: absolute; + bottom: 0; + top: 0; + left: 0; + right: 0; + display: flex; + padding-top: 80px; + justify-content: center; + align-items: center; + flex-direction: column; + text-align: center; +} + +#hero h1 { + /* margin: 0 0 10px 0; */ + font-size: 48px; + font-weight: 300; + line-height: 56px; + color: #ffffff; + margin-bottom: cm; +} + +#hero h2 { + color: #eee; + margin-bottom: 120px; + font-size: 33px; + font-weight: 400; + letter-spacing: 0.5px; +} + +#hero .btn-get-started { + font-family: "Lato", sans-serif; + font-weight: 400; + font-size: 16px; + letter-spacing: 1px; + display: inline-block; + padding: 8px 28px 10px 28px; + border-radius: 50px; + transition: 0.5s; + border: 1px solid #fff; + color: #fff; +} + +#hero .btn-get-started:hover { + background: #fff; + color: #70b9b0; + border: 1px solid #70b9b0; +} + +@media (min-width: 1024px) { + #hero { + background-attachment: fixed; + } +} + +@media (max-width: 768px) { + #hero h1 { + font-size: 28px; + line-height: 36px; + } + + #hero h2 { + font-size: 18px; + line-height: 24px; + margin-bottom: 30px; + } +} +/*-------------------------------------------------------------- +# Message Section +--------------------------------------------------------------*/ +#message { + width: 100%; + height: 20vh; + /* background: url("../img/photo.jpeg") top center; */ + /* background-size: cover; */ + /* background-size: 100%; */ + /* position: relative; */ + /* margin-bottom: -80px; */ +} +/*-------------------------------------------------------------- +# About Us +--------------------------------------------------------------*/ +.about h3 { + font-weight: 400; + font-size: 26px; + color: #000000; + margin-bottom: 30px; + padding-top: 20px; +} + +.about ul { + list-style: none; + padding: 0; + color: #000000; +} + +.about ul li { + padding-top: 10px; + padding-bottom: 10px; + letter-spacing: .5px; +} + +.about ul i { + font-size: 22px; + padding-right: 4px; + color: #0a0a0a; + line-height: 0; +} + +.about p:last-child { + margin-bottom: 0; +} + +.about p { + margin-bottom: 0; + color: #000000; + text-align: left; + letter-spacing: .5px; +} + +/*-------------------------------------------------------------- +# Services +--------------------------------------------------------------*/ +.services .icon-box { + margin-bottom: 20px; + text-align: center; +} + +.services .icon { + display: flex; + justify-content: center; + margin-bottom: 15px; +} + +.services .icon i { + color: #70b9b0; + font-size: 42px; +} + +.services .title { + font-weight: 700; + margin-bottom: 30px; + font-size: 18px; + text-transform: uppercase; +} + +.services .title a { + color: #343a40; + transition: 0.3s; +} + +.services .icon-box:hover .title a { + color: #70b9b0; +} + +.services .description { + line-height: 24px; + font-size: 14px; +} +/*-------------------------------------------------------------- +# Branches +--------------------------------------------------------------*/ +.branches .icon-box { + margin-bottom: 20px; + text-align: center; +} + +.branches .icon { + display: flex; + justify-content: center; + margin-bottom: 15px; +} + +.branches .icon i { + color: #70b9b0; + font-size: 42px; +} + +.branches .title { + font-weight: 700; + margin-bottom: 30px; + font-size: 18px; + text-transform: uppercase; +} + +.branches .title a { + color: #343a40; + transition: 0.3s; +} + +.branches .icon-box:hover .title a { + color: #70b9b0; +} + +.branches .description { + line-height: 24px; + font-size: 14px; +} + +/*-------------------------------------------------------------- +# Call To Action +--------------------------------------------------------------*/ +.call-to-action { + background: linear-gradient(rgba(1, 41, 42, 0.5), rgba(7, 56, 57, 0.5)), url("../img/call-to-action-bg.jpg") fixed center center; + background-size: cover; + padding: 50px 0; +} + +.call-to-action h3 { + color: #fff; + font-size: 28px; + font-weight: 700; +} + +.call-to-action p { + color: #fff; +} + +.call-to-action .cta-btn { + font-family: "Lato", sans-serif; + font-weight: 400; + font-size: 16px; + letter-spacing: 1px; + display: inline-block; + padding: 6px 28px 10px 28px; + border-radius: 25px; + transition: 0.5s; + margin-top: 10px; + border: 2.5px solid #fff; + color: #fff; +} + +.call-to-action .cta-btn:hover { + background: #0000000e; + border: 2.5px solid #e84545; +} + +/*-------------------------------------------------------------- +# Contact Us +--------------------------------------------------------------*/ +.contact .contact-about h3 { + font-size: 36px; + margin: 0 0 10px 0; + padding: 0; + line-height: 1; + font-weight: 500; + letter-spacing: 1px; + color: #70b9b0; +} + +.contact .contact-about p { + font-size: 14px; + line-height: 24px; + font-family: "Lato", sans-serif; + color: #888; +} + +.contact .info { + color: #777; +} + +.contact .info i { + font-size: 32px; + color: #70b9b0; + float: left; + line-height: 1; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50px; +} + +.contact .info p { + padding: 0 0 0 60px; + margin-bottom: 0; + font-size: 14px; + color: #65747f; +} + +.contact .info-wrap { + padding: 55px; + background: #fff; + border-radius: 45px; +} + +.contact .info h4 { + padding: 0 0 0 60px; + font-size: 22px; + font-weight: 600; + margin-bottom: 5px; + color: #384046; +} + + +@keyframes animate-loading { + 0%{ + transform: rotate(0deg); + } + + 100%{ + transform: rotate(360deg); + } +} + +/*-------------------------------------------------------------- +# Map +--------------------------------------------------------------*/ +.map { + padding: 0; + margin-bottom: -10px; +} + +.map iframe { + width: 100%; + height: 380px; +} + +/*-------------------------------------------------------------- +# Footer +--------------------------------------------------------------*/ +#footer { + background: #48746e; + padding: 30px 0; + color: #ffffff; + font-size: 14px; +} + +#footer .copyright { + text-align:center; +} + +#footer .credits { + padding-top: 10px; + text-align: center; + font-size: 13px; + color: #ffffff; +} + +#footer .policy { + padding-top: 10px; + text-align: center; + font-size: 13px; + color: #ffffff; +} + + +/*-------------------------------------------------------------- +# tender +--------------------------------------------------------------*/ + +h1 { + font-size: 20px; + margin-top: -50px; + margin-bottom: 24px; +} + +h2{ + text-align: center; + color: #0f0f0f; +} + +img { + height: 60px; +} + +label { + width: 100%; + display: inline-block; + color: #0f0f0f; +} + +#submitbtn { + padding-right: 25%; + margin-left: inherit; +} + +/* Mobile Styles */ +@media (max-width: 480px) { + h1 { + font-size: 16px; + margin-top: -20px; + margin-bottom: 12px; + } + + img { + height: 40px; + } + + label { + width: 100%; + display: inline-block; + color: #0f0f0f; + } + + #submitbtn { + padding-right: 10%; + margin-left: inherit; + } +} + +.table-container { + display: flex; + justify-content: center; + padding: 40px 80px; + overflow-x: auto; + width: 100%; + max-width: 100%; +} + +.custom-table { + width: 100%; + border-collapse: collapse; + text-align: center; + display: flexbox; +} + +.custom-table th, +.custom-table td { + padding: 10px; + border: 1px solid #ccc; + white-space: nowrap; +} + +.custom-table th { + background-color: #333; + color: #fff; + font-weight: bold; +} + +.custom-table tbody tr:nth-child(even) { + background-color: #f9f9f9; +} + +.custom-table tbody tr:hover { + background-color: #e6e6e6; +} + +.btn { + color: #fff; +} + +.file-input { + padding: 5px; + width: 100%; + box-sizing: border-box; +} + + +@media (max-width: 768px) { + .table-container { + padding: 40px 10px; + overflow-x:scroll; + width: auto; + } + + .custom-table { + display: block; + overflow-x: auto; + white-space: nowrap; + } + + .custom-table th, + .custom-table td { + vertical-align: top; + width: 100%; + } +} + +.custom-table th:nth-child(1), +.custom-table td:nth-child(1) { + width: 5%; +} + +.custom-table th:nth-child(2), +.custom-table td:nth-child(2) { + width: 55%; +} + +.custom-table th:nth-child(3), +.custom-table td:nth-child(3) { + width: 15%; +} + +.custom-table th:nth-child(4), +.custom-table td:nth-child(4) { + width: 25%; +} + + + diff --git a/src/assets/fonts/Helvetica Light Regular.otf b/src/assets/fonts/Helvetica Light Regular.otf new file mode 100644 index 0000000..0abe99f Binary files /dev/null and b/src/assets/fonts/Helvetica Light Regular.otf differ diff --git a/src/assets/fonts/Poppins-Medium.ttf b/src/assets/fonts/Poppins-Medium.ttf new file mode 100644 index 0000000..5b46f19 Binary files /dev/null and b/src/assets/fonts/Poppins-Medium.ttf differ diff --git a/src/assets/fonts/captcha.ttf b/src/assets/fonts/captcha.ttf new file mode 100644 index 0000000..13f5dc7 Binary files /dev/null and b/src/assets/fonts/captcha.ttf differ diff --git a/src/assets/fonts/texgyreadventor-bold.otf b/src/assets/fonts/texgyreadventor-bold.otf new file mode 100644 index 0000000..51708c5 Binary files /dev/null and b/src/assets/fonts/texgyreadventor-bold.otf differ diff --git a/src/assets/fonts/texgyreadventor-regular.otf b/src/assets/fonts/texgyreadventor-regular.otf new file mode 100644 index 0000000..5c1786d Binary files /dev/null and b/src/assets/fonts/texgyreadventor-regular.otf differ diff --git a/src/assets/hot-found/logo.svg b/src/assets/hot-found/logo.svg new file mode 100644 index 0000000..9b4961d --- /dev/null +++ b/src/assets/hot-found/logo.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/assets/i18n/error/en.json b/src/assets/i18n/error/en.json new file mode 100644 index 0000000..f737c9e --- /dev/null +++ b/src/assets/i18n/error/en.json @@ -0,0 +1,179 @@ +{ + "userNameCantbeBlank": "User Name Can not Be Blank", + "passwordCantbeBlank": "Password Can not Be Blank", + "enterSearchTerm": "Enter a Search Term to search", + "errorInApi": "Error Occured in Api. Message from server : ", + "saveSuccess": "The Data is saved Successfully.", + "updateSuccess": "The Data is updated Successfully.", + "deleteSuccess": "The Data is deleted Successfully.", + "errInSave": "An Error occured while Saving.", + "errInUpdate": "An Error occured while Updating.", + "errInDelete": "An Error occured While Deleting.", + "paymentMethodCantbeBlank": "Payment Method Can't Be Blank", + "fromDateCantBeEmpty": "FromDate Can't be Empty.", + "toDateCantBeEmpty": "ToDate Can't be Empty.", + "fromDateShouldntBeGreaterThanToDate": "FromDate Shouldn't Be Greater than ToDate.", + "receiptNoCantBeBlank": "Receipt No Cannot be blank", + "receiptDateCantBeBlank": "Receipt Date Can't Be Blank", + "receiptAmountCantBeBlank": "Receipt Amount Can't Be Blank", + "dateCantBeBlank": "Date Can't Be Blank", + "monthCantBeBlank": "Month Can't Be Blank", + "yearCantBeBlank": "Year Can't Be Blank", + "noModificationFound": "No Modification Found", + "issueSendSuccess": "Issue Send Successfully", + "updatedSuccessfully": "Updated Successfully", + "templateNameCantbeBlank": "Template Name Can't Be Blank", + "templateMsgCantbeBlank": "Template Message Can't Be Blank", + "prefixCantbeBlank": "Prefix Can't Be Blank", + "smsSendSuccessfully": "SMS Send Successfully", + "enterAValidPhoneNumber": "Enter A Valid Phone Number", + "enterAValidEmailID": "Enter A Valid Email ID", + "phonecantBeBlank": "Phone No can't be blank.", + "categorycantBeBlank":"Category can't be blank", + "otpSendSuccessfully": "OTP Send Successfully", + "mobileNumberExistsOTP": "If this mobile number exists, you will receive an OTP", + "itemNameCantbeBlank": "Item Name Can't Be Blank", + "copiedSuccessfully": "Copied Successfully", + "fetchingDataPleaseWait": "Fetching Data Please Wait", + "otpSendSuccess": "OTP Send Successfully", + "enterValidOtp": "Enter a Valid OTP", + "confirmPasswordCantbeBlank": "Confirm Password Can not Be Blank", + "passwordMismatch": "Password Mismatch", + "passwordChangeSuccess": "Password Change Successfully", + "linkCopied": "Copied To Clipboard", + "transactionDate": "Transaction Date", + "transactionId": "Transaction Id", + "enterAvalidUnitCode": "Enter A Valid Unit Code", + "enterAvalidUnitDesc": "Enter A Valid Unit Description", + "enterCustomerName": "Enter Customer Name", + "enterAddress": "Enter Address", + "enterAvalidPhoneNumber": "Enter A Valid Phone Number", + "companyNameCantbeBlank": "Company Name Can not Be Blank", + "contactNoCantbeBlank": "Contact No Can not Be Blank", + "address1CantbeBlank": "Address 1 Can not Be Blank", + "balanceDateCantbeBlank": "Balance Date Can not Be Blank", + "nextNoUpdated": "NextNo Updated Successfully", + "startDateMustBeLesserThanEndDate": "Start Date Must Be Lesser Than End Date", + "prefixFieldBlank": "Prefix Field Shouldn't Be Blank", + "enterFromDate": "Enter From Date", + "enterEndDate": "Enter End Date", + "nextNoCantBeBlank": "NextNo Can't Be Blank", + "paytypeCodeCantbeBlank": "Payment Type Can not Be Blank", + "paytypeDescCantbeBlank": "Payment Type Description Can not Be Blank", + "unitOfMeasureCantbeBlank": "Unit Of Measure Can not Be Blank", + "paidDateCantbeBlank": "Paid Date Can not Be Blank", + "paidAmountCantbeBlank": "Paid Amount Can not Be Blank", + "customerCantbeBlank": "Customer Can not Be Blank", + "paytypeCantbeBlank": "Payment Type Can not Be Blank", + "totalValueCantBeNull": "Total Value Cant Be Null", + "netValueCantBeNull": "Net Value Cant Be Null", + "paidAmountCantBeNull": "Amount Paid Cant Be Null", + "payTypeCantBeNull": "Payment Type Cant Be Null", + "txnItemCantBeNull": "Transaction Item Cant Be Null", + "enterAvalidUnitDescription": "Enter A Valid Unit Description", + "balanceFromCantBeEmpty": "Balance From Can not Be Blank", + "balanceToCantBeEmpty": "Balance To Can not Be Blank", + "selectInvoice":"Select Invoice", + "anErrorOccured":"An Error Occured", + "otpMismatching":"OTP Mismatching", + "enterOTP":"Enter OTP", + "otpVerifiedSuccess":"OTP Verified Successfully", + "minimumPasswordLenght":"Minimum Password Lenght is 6", + "organisationNameCantBeBlank":"Organisation Name Can't Be Blank", + "tenderReferenceNumberCantBeBlank":"Tender Reference Number Can't Be Blank", + "tenderIDCantBeBlank":"Tender ID Can't Be Blank", + "tenderTypeCantBeBlank":"Tender Type Can't Be Blank", + "tenderCategoryCantBeBlank":"Tender Category Can't Be Blank", + "paymentModeCantBeBlank":"Payment Mode Can't Be Blank", + "formOfContractCantBeBlank":"Form of Contract Can't Be Blank", + "noOfCoversCantBeBlank":"No of Covers Can't Be Blank", + "tenderFeeInCantBeBlank":"Tender Fee in Can't Be Blank", + "feePayableToCantBeBlank":"Fee Payable To Can't Be Blank", + "tenderFeeExemptionAllowedCantBeBlank":"Tender Fee Exemption Allowed Can't Be Blank", + "feePayableAtCantBeBlank":"Fee Payable At Can't Be Blank", + "emdAmountCantBeBlank":"EMD Amount Can't Be Blank", + "emdFeeTypeCantBeBlank":"EMD Fee Type Can't Be Blank", + "emdPayableToCantBeBlank":"EMD Payable To Can't Be Blank", + "selectEmdThrough":"Select EMD through BG/ST or EMD Exemption Allowed", + "emdPercentageCantBeBlank":"EMD Percentage Can't Be Blank", + "titleCantBeBlank":"Title Can't Be Blank", + "workDescriptionCantBeBlank":"Work Description Can't Be Blank", + "preQualificationCantBeBlank":"Pre Qualification Can't Be Blank", + "independentExternalCantBeBlank":"Independent External Monitor/Remarks Can't Be Blank", + "tenderValueCantBeBlank":"Tender Value Can't Be Blank", + "contractTypeCantBeBlank":"Contract Type Can't Be Blank", + "locationCantBeBlank":"Location Can't Be Blank", + "preBidMeetingAddressCantBeBlank":"Pre Bid Meeting Address Can't Be Blank", + "productCategoryCantBeBlank":"Product Category Can't Be Blank", + "bidValidityCantBeBlank":"Bid Validity Can't Be Blank", + "preBidMeetingDateCantBeBlank":"Pre Bid Meeting Date Can't Be Blank", + "subCategoryCantBeBlank":"Sub category Can't Be Blank", + "periodOfWorkCantBeBlank":"Period Of Work Can't Be Blank", + "preBidMeetingPlaceCantBeBlank":"Pre Bid Meeting Place Can't Be Blank", + "bidOpeningPlaceCantBeBlank":"Bid Opening Place Can't Be Blank", + "bidOpenAddressCantBeBlank" :"Bid Opening Address Can't Be Blank", + "publishedDateCantBeBlank":"Published Date Can't Be Blank", + "documentDownloadSaleStartCantBeBlank":"Document Download / Sale Start Date Can't Be Blank", + "clarificationStartDateCantBeBlank":"Clarification Start Date Can't Be Blank", + "bidSubmissionStartDateCantBeBlank":"Bid Submission Start Date Can't Be Blank", + "bidOpeningDateCantBeBlank":"Bid Opening Date Can't Be Blank", + "documentDownloadSaleEndCantBeBlank":"Document Download / Sale Start End Can't Be Blank", + "pincodeCantBeBlank":"Pincode Can't Be Blank", + "clarificationEndDateCantBeBlank":"Clarification End Date Can't Be Blank", + "bidSubmissionEndDateCantBeBlank":"Bid Submission End Date Can't Be Blank", + "bidSubmissionEndDateCantBeGreaterThanbidOpeningDate":"Bid Submission End Date Can't Be Greater Than Bid Opening Date", + "documentNameCantBeBlank":"Document Name Can't Be Blank", + "UploaddocumentCantBeBlank": "Please Upload Documents", + "documentSizeCantBeBlank":"Document Size Can't Be Blank", + "addDocs" : " Documents Can't Be Blank", + "requiresDocs":"Required Documents Can't Be Blank", + "descriptionCantBeBlank":"Description Can't Be Blank", + "documentTypeCantBeBlank":"Document Type Can't Be Blank", + "documentFormatCantBeBlank":"Document Format Can't Be Blank", + "nameCantBeBlank":"Name Can't Be Blank", + "addressCantBeBlank":"Address Can't Be Blank", + "TenderCreatedSuccessfully":"Tender Created Successfully", + "pleaseEnableDrawingDocuments": "Please Enable Drawing Documents", + "pleaseEnableNoticeDocuments" : "Please Enable Notice Documents", + "Pleasedeletetheexistingfile" :"Please Delete The Existing File Before Adding a New One.", + "pleasePayTheAmountForUpload":"Please Pay The Amount For Upload", + "pleaseAddfiles":"Please Add The Remaining Files", + "pleaseEnterBidFinalAmount":"Please Enter Bid Final Amount", + "pleaseLogin":"Please Login for Downloading", + "documentnamecantbesame": "Document Name Can't Be Same ", + "DocumentsAlreadyUploaded" : "Documents Already Uploaded", + "pleaseAgreeToTheTermsandCondition":"Please Agree To The Terms and Condition", + "pleasePayTheAmountForDoc":"Please Pay The Amount For Downloading Documents", + "emailSentSuccessfully":"Email Sent Successfully", + "pleaseEnterTransId":"Please Enter Transaction Id", + "notificationTextCannotBeBlank":"Notification Text Cannot Be Blank", + "notificationTextSaved":"Notification Text Saved", + "secretarySignatureCantBeBlank":"Secretary Signature Can't Be Blank", + "PresidentSignatureCantBeBlank":"President Signature Can't Be Blank", + "invalidFileFormat":"Invalid File Format", + "AuthenticationSuccessfullyCompleted":"Authentication Successfully Completed", + "verificationFailed":"Verification Failed", + "KeyNotMatchingPleaseTryAgain":"Key Not Matching. Please Try Again", + "categoryNameCannotBeBlank":"Category Name Cannot Be Blank", + "categorySaved":"Category Saved", + "selectUserCantBeBlank":"Select user Cannot Be Blank", + "emdApplicableCantBeBlank" : "Emd Applicable Cant Be Blank", + + + + + "publishDateCantBePreviousDate" : "The publish date cannot be a date that has already passed.", + "ddStartGreterThanPublishDLessThanddSakeEndD":"Document Download / Sale start Date should be earlier than Document Download / Sale end date", + "DDEndGreterThanPublishDLessThanBidSubEndD": "Document Download / Sale End Date should be earlier than bid Submission end date", + "bidopenDmustBeGreaterThanAllD" : "Bid Open date must be greater than all other dates ", + "publishDmustBeLesserThanAllD" : "The publish date should be earlier than any other dates.", + "bidSubStartDmustBeGreaterThanDocumentDwnldStartD" : "Bid submission start date must be greater than Document dowload / sale start date ", + "bidSubEndDmustBeGreaterThanDocDwnldEndDandbidSubStartD" : "Bid Submission End Date Must Be greater than Bid Submission Start date and Document Download / sale End date ", + "bidSubEndDmustBeGreaterThanPublishD":"Bid submission End Date must be greater than publish date", + "bidSubStartDmustBeGreaterThanPublishDate" : "Bid submission start Date must be greater than publish date", + "DDEndGreterThanPublishD" : "Document Download / Sale End Date must be greater than publish date", + "ddStartGreterThanPublishD" : "Document Download / Sale start Date must be greater than publish date", + + "maxAmountCantbeBlank":"Maximum value of single project completed till date Can't Be Blank" + +} \ No newline at end of file diff --git a/src/assets/i18n/json/sales-menu.json b/src/assets/i18n/json/sales-menu.json new file mode 100644 index 0000000..e69de29 diff --git a/src/assets/i18n/languages/en-sales.json b/src/assets/i18n/languages/en-sales.json new file mode 100644 index 0000000..e2d10c0 --- /dev/null +++ b/src/assets/i18n/languages/en-sales.json @@ -0,0 +1,376 @@ +{ + "accept": "Accept", + "action": "Action", + "active": "Active", + "activeStatus": "Active Status", + "add": "Add", + "addGroupItems": "Add Group Items", + "additionalDetails": "Additional Details", + "address": "Address", + "addRow": "Add Row", + "addSection": "Add Section", + "admit": "Admit", + "admitDate": "Admit Date", + "admitStatus": "Admit Status", + "all": "All", + "amount": "Amount", + "amountPaid": "Amount Paid", + "amountReceived": "Amount Received", + "applicationDate": "Application Date", + "applicationForm": "Application Form", + "applicationFormReport": "Application Form Report", + "applicationNo": "Application No", + "applicationNoPrefix": "Application No Prefix", + "applyChanges": "Apply Changes", + "attachProof": "Attach proof", + "attachProofWhereverApplicable": "Attach proof wherever applicable", + "authorisedSignatory": "Authorised Signatory", + "avatar": "Avatar", + "back": "Back", + "balanceAmount": "Balance Amount", + "balanceAmountToBePaid": "Balance Amount to be Paid", + "balancePayable": "Balance Payable", + "basicConfig": "Basic Config", + "basicConfiguration": "Basic Configuration", + "basicInformation": "Basic Information", + "campusName": "Campus Name", + "cancel": "Cancel", + "cancelIssue": "Cancel Issue", + "cancelled": "Cancelled", + "cash": "Cash", + "cashier": "Cashier", + "cashierActivities": "Cashier Activities", + "cashierConfig": "Cashier Config", + "cashierConfiguration": "Cashier Configuration", + "cashInflowReport": "Cash Inflow Report", + "category": "Category", + "certificateNo": "Certificate No", + "chat": "Chat", + "cheque/ddSubjectToRealization": "Cheque/DD subject to realization", + "closed": "Closed", + "configName": "Config Name", + "configValue": "Config Value", + "contactNo": "Contact No", + "costPerItemForExtra": "Cost for extra item (Per unit)", + "count": "Count", + "create": "Create", + "createTransferCertificate": "Create Transfer Certificate", + "currentDate": "Current Date", + "date": "Date", + "declaration": "declaration", + "default": "Default", + "delete": "Delete", + "deliveredOn": "Delivered On", + "deliveryStatus": "Delivery Status", + "description": "Description", + "details": "Details", + "discount": "Discount", + "dismissDate": "Dismiss Date", + "dueAmount": "Due Amount", + "email": "Email", + "eMailAddress": "EMail Address", + "emailId": "Email ID", + "enabled": "Enabled", + "endDate": "End Date", + "enrollmentNo": "Enrollment No", + "enterAMessage": "Enter a Message", + "enterMessage": "Enter Message", + "extraAllowed": "Extra allowed", + "extraCharges": "Extra Charges", + "extraCurricular": "Extra Curricular", + "feedback": "Feedback", + "feeTypeName": "Fee Type Name", + "firstAdmissionDate": "First Admission Date", + "forCourses": "for courses", + "forFeeTypes": "for fee types", + "formNo": "Application No", + "formNoPrefix": "Application No Prefix", + "forSections": "for section", + "forSessions": "for sessions", + "from": "From", + "fromDate": "From Date", + "fromSession": "From session", + "go": "Go", + "gstNo": "Gst No", + "isoCode": "Iso Code", + "issueAll": "Issue All", + "issueApplication": "Issue Application", + "issueDate": "Issue Date", + "issuingQuantity": "Issuing Quantity", + "issuedSoFar": "Issued So Far", + "issueId": "Issue Id", + "itemName": "Item name", + "loading": "Loading...", + "loadingData": "Loading Data...", + "login": "Login", + "login.": "log in•", + "addNewPayment": "Add New Payment", + "makeNewPayment": "Make New Payment", + "message": "Message", + "messageDate": "Message Date", + "mobile": "Mobile", + "mobileNumber": "Mobile Number", + "modifiedDate": "Modified Date", + "modifyPreview": "Modify Preview", + "month": "Month", + "name": "Name", + "narration": "Narration", + "next": "Next", + "noDataToDisplay": "No Data To Display", + "noFeePending": "No Fee pending", + "noFeeSetup": "No Fee Setup found. Add fee Setup for the corresponding Session and course !", + "noFeeType": "No Fee Type to Add Payment", + "noPhoto": "No Photo", + "noStudentSelected": "No Student Selected", + "notApplicable": "Not Applicable", + "notMandatory": "Not Mandatory", + "occupation": "Occupation", + "officialAddress": "Official Address", + "ok": "Ok", + "open": "Open", + "optional": "Optional", + "order": "Order", + "orderNumber": "Order Number", + "otherRemarks": "Other Remarks", + "paidAmount": "Paid Amount", + "panNo": "Pan No", + "password": "Password", + "payableAmount": "Payable Amount", + "paymentHistory": "Payment History", + "paymentMethod": "Payment Method", + "paymentMode": "Payment Mode", + "payments": "Payments", + "paymentTowards": "Payment Towards", + "pendingLogOnly": "Pending Log Only", + "pendingTransferCertificate": "Transfer Certificate", + "percentageOfMarks": "% Of Marks", + "permanentAddress": "Permanent Adress", + "personalDetails": "Personal Details", + "personalDetailsBlockLetters": "Personal Details [Block Letters]", + "phoneNo": "Phone No", + "pincode": "Pincode", + "place": "Place", + "plannedQuantity": "Planned quantity", + "pleaseSelect": "Please Select", + "poweredBySalesapp": "Powered by Sales APP", + "prefix": "Prefix", + "presenceDays": "Presence Days", + "previous": "Previous", + "previousBalance": "Balance in Previous Session", + "print": "Print", + "promote": "Promote", + "promoteTo": "Promote To", + "receipt": "Receipt", + "receiptAmount": "Receipt Amount", + "receiptDate": "Receipt Date", + "receiptNo": "Receipt No", + "receiptNumber": "Receipt Number", + "receivedBy": "Received By", + "receivedFrom": "Received From", + "remark": "Remark", + "remarks": "Remarks", + "reportActivities": "Reports", + "reportConfiguration": "Report Configuration", + "reports": "Reports", + "reprintReceipt": "Reprint Receipt", + "resend": "Resend", + "reset": "Reset", + "clear": "Clear", + "residentialAddress": "Residential Address", + "residentialAddress1": "Residential Address 1", + "residentialAddress2": "Residential Address 2", + "resulltOfLastClass": "Result Of Last Class", + "resultOfLastClass": "Result Of Last Class", + "return": "Return", + "returningQuantity": "Returning Quantity", + "role": "Role", + "save": "Save", + "salesapp": "Sales App", + "saveAndResendSms": "Save & Resend SMS", + "saveAndSendSms": "Save & Send SMS", + "screenConfig": "Screen Configuration", + "screenConfiguration": "Screen Configuration", + "screenConfigurationValue": "Screen Configuration Value", + "screenUnavailable": "Screen Unavailable", + "send": "Send", + "signIn": "Sign In", + "signOut": "Sign Out", + "slNo": "Sl.No", + "smsLog": "SMS Log", + "smsPhone": "SMS Phone", + "smsTemplateConfiguration": "SMS Template Configuration", + "staffLogOnly": "Staff Log Only", + "startDate": "Start Date", + "step1": "Step 1", + "step2": "Step 2", + "step3": "Step 3", + "step4": "Step 4", + "tanNo": "Tan No", + "tcDate": "TC Date", + "tcDetails": "TC Details", + "tcIssuedDate": "TC Issued Date", + "tcNo": "TC No", + "template": "Template", + "templateName": "Template Name", + "to": "To", + "totalWorkingDays": "Total Working Days", + "type": "Type", + "udiseNo": "UDISE No", + "unavailable": "Unavailable", + "unreadMessages": "Unread Messages", + "userId": "User Id", + "userName": "User Name", + "username": "Username", + "userRole": "User Role", + "users": "Users", + "view": "View", + "viewId": "View ID", + "whatsappDeliveryStatus": "Whatsapp Delivery Status", + "whetherTheCandidateIs": "Whether The Candidate Is", + "wip": "WIP", + "workingDays": "Working Days", + "year": "Year", + "issued": "Issued", + "toBeDiscussed": "To Be Discussed", + "currentSession": "Current Session", + "copy": "Copy", + "phoneNumber": "Phone Number", + "payThroughPaymentGateway": "Pay Through Payment Gateway", + "printIssuedsoFar": "Print Issued So Far", + "lastIssuedDate": "Last Issued Date", + "totalQtyTobeIssued": "Total Qty To be Issued", + "pay": "Pay", + "paymentModeSelection": "Payment Mode Selection", + "excelDownload": "Excel Download", + "acceptance": "Acceptance", + "transactionDate": "Transaction Date", + "acceptanceFees": "Acceptance Fees", + "cancelPayment": "Cancel Payment", + "resetPassword": "Reset Password", + "sendOtp": "Send OTP", + "verifyOtp": "Verify OTP", + "resendOtp": "Resend OTP", + "changePassword": "Change Password", + "terminateDate": "Terminate Date", + "menuRights": "Menu Rights", + "applyRights": "Apply Rights", + "menuEnabled": "Menu Enabled", + "icon": "Icon", + "menuOrder": "Menu Order", + "menu": "Menu", + "home": "Home", + "units": "Units", + "unitCode": "Unit Code", + "unitDescription": "Unit Description", + "customers": "Customers", + "customerName": "Customer Name", + "address1": "Address 1", + "address2": "Address 2", + "address3": "Address 3", + "fiscalYear": "Fiscal Year", + "documentType": "Document Type", + "nextNo": "Next No", + "searchFiscalYear": "Search Fiscal Year", + "documentNumbers": "Document Numbers", + "companyName": "Company Name", + "openingBalanceDate": "Opening Balance Date", + "newFiscalYear": "New Fiscal Year", + "apply": "Apply", + "documentTypes": "Document Types", + "document": "Document", + "invoice": "Invoice", + "invoices": "Invoices", + "bulkPrint": "Bulk Print", + "invoiceDate": "Invoice Date", + "invoiceNo": "Invoice No", + "customer": "Customer", + "outstandingBalance": "Outstanding Balance", + "totalValue": "Total Value", + "adjustAmount": "Adjust Amount", + "netvalue": "Net Value", + "paymentType": "Payment Type", + "item": "Item", + "quantity": "Quantity", + "rate": "Rate", + "netValue": "Net Value", + "edit": "Edit", + "close": "Close", + "rowsSelected": "Rows Selected", + "total": "Total", + "txnDate": "Txn Date", + "adjustAmt": "Adjust Amount", + "paymentTypeDescription": "Payment Type Description", + "unitOfMeasure": "Unit Of Measure", + "paidDate": "Paid Date", + "txn": "Invoice No.", + "payment": "Payment", + "openingBalance": "Opening Balance", + "creditBalance": "Credit Balance", + "customerBalance": "Customer Balance", + "toDate": "To Date", + "sales": "Sales", + "balance": "Balance", + "transactionType": "Transaction Type", + "amountDr": "Amount Dr", + "amountCr": "Amount Cr", + "salesBill": "Sales Bill", + "update": "Update", + "taxType": "Tax Type", + "balanceFrom": "Balance From", + "balanceTo": "Balance To", + "selectUnitOfMeasure": "Select Unit Of Measure", + "taxes": "Taxes", + "taxDetails": "Tax Details", + "manageTaxes": "Manage Taxes", + "taxTypeCode": "Tax Type Code", + "taxTypeName": "Tax Type Name", + "taxPercentage": "Tax Percentage", + "outLetName": "Outlet Name", + "taxMaster": "Tax Master", + "new": "New", + "taxDetailCode":"Tax Detail Code", + "taxDetailName":"Tax Detail Name", + "search":"Search", + "taxAmount":"Tax Amount", + "hscSac":"HSN/SAC No", + "companySettings":"Company Settings", + "register":"Register•", + "generateOtp":"Generate OTP", + "enterOtp":"Enter OTP", + "submit":"Submit", + "confPass":"Confirm Password", + "addTender":"Add Tender", + "forgotPass":"Forgot Password?", + "forgotYourPass":"Forgot Your Password?", + "digitalSignature": "Digital Signature", + "SecretarySignature":"Secretary Signature", + "PresidentSignature":"President Signature", + "QRpayment":"QR Payment", + "assetImagePath":"Asset File Path", + "title":"Title", + "publishedDate":"Published Date", + "upload":"Upload", + "slno":"Sl no", + "bidOpenDate":"Bid Open Date", + "bidEndDate":"Bid End Date", + "report":"Report", + "totalBidAmount":"Total Bid Amount", + "TransactionId":"Transaction ID", + "documents": "Documents", + "confirmPayment":"Confirm Payment", + "DeclinePayment":"Decline Payment", + "tender":"Tender", + "tenderId":"Tender Id", + "status":"Status", + "Paymentstatus":"Payment Status", + "verified":"Verified", + "submitted":"Submitted", + "approvalPreview":"Approval Preview", + "tenderVerification":"Tender Verification", + "tenderStatus":"Tender Status", + "inreview":"In review", + "maxAmount" : "Maximum Amount", + "projectCompletedCert" : "Project Completed certificate", + "companyProfile":"Company Profile" + +} \ No newline at end of file diff --git a/src/assets/img/Art-n-Artiect-removebg-preview-copy.png b/src/assets/img/Art-n-Artiect-removebg-preview-copy.png new file mode 100644 index 0000000..2e441c0 Binary files /dev/null and b/src/assets/img/Art-n-Artiect-removebg-preview-copy.png differ diff --git a/src/assets/img/Art-n-Artiect-removebg-preview.png b/src/assets/img/Art-n-Artiect-removebg-preview.png new file mode 100644 index 0000000..d3ab29a Binary files /dev/null and b/src/assets/img/Art-n-Artiect-removebg-preview.png differ diff --git a/src/assets/img/Art-n-Artiect.jpg b/src/assets/img/Art-n-Artiect.jpg new file mode 100644 index 0000000..ec273cb Binary files /dev/null and b/src/assets/img/Art-n-Artiect.jpg differ diff --git a/src/assets/img/SL-073119-22070-01.jpg b/src/assets/img/SL-073119-22070-01.jpg new file mode 100644 index 0000000..11691e3 Binary files /dev/null and b/src/assets/img/SL-073119-22070-01.jpg differ diff --git a/src/assets/img/abstract-white-skyscrapers.webp b/src/assets/img/abstract-white-skyscrapers.webp new file mode 100644 index 0000000..9bdf075 Binary files /dev/null and b/src/assets/img/abstract-white-skyscrapers.webp differ diff --git a/src/assets/img/admin.png b/src/assets/img/admin.png new file mode 100644 index 0000000..f1a9e9a Binary files /dev/null and b/src/assets/img/admin.png differ diff --git a/src/assets/img/building-vector.png b/src/assets/img/building-vector.png new file mode 100644 index 0000000..5ea6f4a Binary files /dev/null and b/src/assets/img/building-vector.png differ diff --git a/src/assets/img/call-to-action-bg.jpg b/src/assets/img/call-to-action-bg.jpg new file mode 100644 index 0000000..2469fbd Binary files /dev/null and b/src/assets/img/call-to-action-bg.jpg differ diff --git a/src/assets/img/call-to-action.jpg b/src/assets/img/call-to-action.jpg new file mode 100644 index 0000000..1422f9e Binary files /dev/null and b/src/assets/img/call-to-action.jpg differ diff --git a/src/assets/img/captchaback.jpeg b/src/assets/img/captchaback.jpeg new file mode 100644 index 0000000..bd7f5af Binary files /dev/null and b/src/assets/img/captchaback.jpeg differ diff --git a/src/assets/img/download.jpg b/src/assets/img/download.jpg new file mode 100644 index 0000000..ddbc1aa Binary files /dev/null and b/src/assets/img/download.jpg differ diff --git a/src/assets/img/download.png b/src/assets/img/download.png new file mode 100644 index 0000000..539092a Binary files /dev/null and b/src/assets/img/download.png differ diff --git a/src/assets/img/excel.png b/src/assets/img/excel.png new file mode 100644 index 0000000..8f1226d Binary files /dev/null and b/src/assets/img/excel.png differ diff --git a/src/assets/img/forgot.jpg b/src/assets/img/forgot.jpg new file mode 100644 index 0000000..4beed3c Binary files /dev/null and b/src/assets/img/forgot.jpg differ diff --git a/src/assets/img/greenployg3.jpg b/src/assets/img/greenployg3.jpg new file mode 100644 index 0000000..fa96510 Binary files /dev/null and b/src/assets/img/greenployg3.jpg differ diff --git a/src/assets/img/greenployg5.jpg b/src/assets/img/greenployg5.jpg new file mode 100644 index 0000000..01f9bb2 Binary files /dev/null and b/src/assets/img/greenployg5.jpg differ diff --git a/src/assets/img/greenployg6.jpg b/src/assets/img/greenployg6.jpg new file mode 100644 index 0000000..285a83d Binary files /dev/null and b/src/assets/img/greenployg6.jpg differ diff --git a/src/assets/img/grey-poly.jpg b/src/assets/img/grey-poly.jpg new file mode 100644 index 0000000..ff6a390 Binary files /dev/null and b/src/assets/img/grey-poly.jpg differ diff --git a/src/assets/img/hero-background.jpg b/src/assets/img/hero-background.jpg new file mode 100644 index 0000000..17f4b30 Binary files /dev/null and b/src/assets/img/hero-background.jpg differ diff --git a/src/assets/img/home.png b/src/assets/img/home.png new file mode 100644 index 0000000..51b0606 Binary files /dev/null and b/src/assets/img/home.png differ diff --git a/src/assets/img/houstone_line.jpg b/src/assets/img/houstone_line.jpg new file mode 100644 index 0000000..000c202 Binary files /dev/null and b/src/assets/img/houstone_line.jpg differ diff --git a/src/assets/img/houstone_line1.jpg b/src/assets/img/houstone_line1.jpg new file mode 100644 index 0000000..98634d5 Binary files /dev/null and b/src/assets/img/houstone_line1.jpg differ diff --git a/src/assets/img/houstone_line2.jpg b/src/assets/img/houstone_line2.jpg new file mode 100644 index 0000000..453a119 Binary files /dev/null and b/src/assets/img/houstone_line2.jpg differ diff --git a/src/assets/img/list.png b/src/assets/img/list.png new file mode 100644 index 0000000..b390ecc Binary files /dev/null and b/src/assets/img/list.png differ diff --git a/src/assets/img/loginBack.jpg b/src/assets/img/loginBack.jpg new file mode 100644 index 0000000..588de0b Binary files /dev/null and b/src/assets/img/loginBack.jpg differ diff --git a/src/assets/img/loginBackground.jpg b/src/assets/img/loginBackground.jpg new file mode 100644 index 0000000..23b97be Binary files /dev/null and b/src/assets/img/loginBackground.jpg differ diff --git a/src/assets/img/mail.png b/src/assets/img/mail.png new file mode 100644 index 0000000..e9399f7 Binary files /dev/null and b/src/assets/img/mail.png differ diff --git a/src/assets/img/mastercard_payment_icon.png b/src/assets/img/mastercard_payment_icon.png new file mode 100644 index 0000000..f47291b Binary files /dev/null and b/src/assets/img/mastercard_payment_icon.png differ diff --git a/src/assets/img/out-user.png b/src/assets/img/out-user.png new file mode 100644 index 0000000..0d72ff3 Binary files /dev/null and b/src/assets/img/out-user.png differ diff --git a/src/assets/img/panel_background.jpg b/src/assets/img/panel_background.jpg new file mode 100644 index 0000000..25ab5d0 Binary files /dev/null and b/src/assets/img/panel_background.jpg differ diff --git a/src/assets/img/printttt.png b/src/assets/img/printttt.png new file mode 100644 index 0000000..cdb88d7 Binary files /dev/null and b/src/assets/img/printttt.png differ diff --git a/src/assets/img/send.png b/src/assets/img/send.png new file mode 100644 index 0000000..161bae3 Binary files /dev/null and b/src/assets/img/send.png differ diff --git a/src/assets/img/sendicon.png b/src/assets/img/sendicon.png new file mode 100644 index 0000000..9482847 Binary files /dev/null and b/src/assets/img/sendicon.png differ diff --git a/src/assets/img/something.png b/src/assets/img/something.png new file mode 100644 index 0000000..8cedad3 Binary files /dev/null and b/src/assets/img/something.png differ diff --git a/src/assets/img/team/team-1.jpg b/src/assets/img/team/team-1.jpg new file mode 100644 index 0000000..2b23b36 Binary files /dev/null and b/src/assets/img/team/team-1.jpg differ diff --git a/src/assets/img/team/team-2.jpg b/src/assets/img/team/team-2.jpg new file mode 100644 index 0000000..8f0d75d Binary files /dev/null and b/src/assets/img/team/team-2.jpg differ diff --git a/src/assets/img/team/team-3.jpg b/src/assets/img/team/team-3.jpg new file mode 100644 index 0000000..bf12493 Binary files /dev/null and b/src/assets/img/team/team-3.jpg differ diff --git a/src/assets/img/th img.jpg b/src/assets/img/th img.jpg new file mode 100644 index 0000000..6c6491d Binary files /dev/null and b/src/assets/img/th img.jpg differ diff --git a/src/assets/img/thimg2.jpg b/src/assets/img/thimg2.jpg new file mode 100644 index 0000000..41ba495 Binary files /dev/null and b/src/assets/img/thimg2.jpg differ diff --git a/src/assets/img/thimg3.jpg b/src/assets/img/thimg3.jpg new file mode 100644 index 0000000..dc8d788 Binary files /dev/null and b/src/assets/img/thimg3.jpg differ diff --git a/src/assets/img/unnamed.png b/src/assets/img/unnamed.png new file mode 100644 index 0000000..b4b044c Binary files /dev/null and b/src/assets/img/unnamed.png differ diff --git a/src/assets/img/user-windows.png b/src/assets/img/user-windows.png new file mode 100644 index 0000000..02facb2 Binary files /dev/null and b/src/assets/img/user-windows.png differ diff --git a/src/assets/img/user.png b/src/assets/img/user.png new file mode 100644 index 0000000..5055471 Binary files /dev/null and b/src/assets/img/user.png differ diff --git a/src/assets/img/userU.png b/src/assets/img/userU.png new file mode 100644 index 0000000..e543804 Binary files /dev/null and b/src/assets/img/userU.png differ diff --git a/src/assets/img/vector-building.jpg b/src/assets/img/vector-building.jpg new file mode 100644 index 0000000..a359d9b Binary files /dev/null and b/src/assets/img/vector-building.jpg differ diff --git a/src/assets/img/visa_icon.png b/src/assets/img/visa_icon.png new file mode 100644 index 0000000..d5abfcf Binary files /dev/null and b/src/assets/img/visa_icon.png differ diff --git a/src/assets/img/web.png b/src/assets/img/web.png new file mode 100644 index 0000000..b347486 Binary files /dev/null and b/src/assets/img/web.png differ diff --git a/src/assets/js/main.js b/src/assets/js/main.js new file mode 100644 index 0000000..8a1c612 --- /dev/null +++ b/src/assets/js/main.js @@ -0,0 +1,264 @@ +/** +* Template Name: Amoeba +* Updated: Mar 10 2023 with Bootstrap v5.2.3 +* Template URL: https://bootstrapmade.com/free-one-page-bootstrap-template-amoeba/ +* Author: BootstrapMade.com +* License: https://bootstrapmade.com/license/ +*/ +(async function() { + "use strict"; + + /** + * Easy selector helper function + */ + const select = (el, all = false) => { + el = el.trim() + if (all) { + return [...document.querySelectorAll(el)] + } else { + return document.querySelector(el) + } + } + + /** + * Easy event listener function + */ + const on = (type, el, listener, all = false) => { + let selectEl = select(el, all) + if (selectEl) { + if (all) { + selectEl.forEach(e => e.addEventListener(type, listener)) + } else { + selectEl.addEventListener(type, listener) + } + } + } + + /** + * Easy on scroll event listener + */ + const onscroll = (el, listener) => { + el.addEventListener('scroll', listener) + } + + /** + * Navbar links active state on scroll + */ + let navbarlinks = select('#navbar .scrollto', true) + const navbarlinksActive = () => { + let position = window.scrollY + 200 + navbarlinks.forEach(navbarlink => { + if (!navbarlink.hash) return + let section = select(navbarlink.hash) + if (!section) return + if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { + navbarlink.classList.add('active') + } else { + navbarlink.classList.remove('active') + } + }) + } + window.addEventListener('load', navbarlinksActive) + onscroll(document, navbarlinksActive) + + /** + * Scrolls to an element with header offset + */ + const scrollto = (el) => { + let header = select('#header') + let offset = header.offsetHeight + + if (!header.classList.contains('header-scrolled')) { + offset -= 20 + } + + let elementPos = select(el).offsetTop + window.scrollTo({ + top: elementPos - offset, + behavior: 'smooth' + }) + } + + /** + * Toggle .header-scrolled class to #header when page is scrolled + */ + let selectHeader = select('#header') + if (selectHeader) { + const headerScrolled = () => { + if (window.scrollY > 100) { + selectHeader.classList.add('header-scrolled') + } else { + selectHeader.classList.remove('header-scrolled') + } + } + window.addEventListener('load', headerScrolled) + onscroll(document, headerScrolled) + } + + /** + * Back to top button + */ + let backtotop = select('.back-to-top') + if (backtotop) { + const toggleBacktotop = () => { + if (window.scrollY > 100) { + backtotop.classList.add('active') + } else { + backtotop.classList.remove('active') + } + } + window.addEventListener('load', toggleBacktotop) + onscroll(document, toggleBacktotop) + } + + /** + * Mobile nav toggle + */ + on('click', '.mobile-nav-toggle', function(e) { + select('#navbar').classList.toggle('navbar-mobile') + this.classList.toggle('bi-list') + this.classList.toggle('bi-x') + }) + + /** + * Mobile nav dropdowns activate + */ + on('click', '.navbar .dropdown > a', function(e) { + if (select('#navbar').classList.contains('navbar-mobile')) { + e.preventDefault() + this.nextElementSibling.classList.toggle('dropdown-active') + } + }, true) + + /** + * Scrool with ofset on links with a class name .scrollto + */ + on('click', '.scrollto', function(e) { + if (select(this.hash)) { + e.preventDefault() + + let navbar = select('#navbar') + if (navbar.classList.contains('navbar-mobile')) { + navbar.classList.remove('navbar-mobile') + let navbarToggle = select('.mobile-nav-toggle') + navbarToggle.classList.toggle('bi-list') + navbarToggle.classList.toggle('bi-x') + } + scrollto(this.hash) + } + }, true) + + /** + * Scroll with ofset on page load with hash links in the url + */ + window.addEventListener('load', () => { + if (window.location.hash) { + if (select(window.location.hash)) { + scrollto(window.location.hash) + } + } + }); + + + + + // loading + const loader = document.querySelector("#loading"); + +// showing loading +function displayLoading() { + loader.classList.add("display"); + // to stop loading after some time + // setTimeout(() => { + // loader.classList.remove("display"); + // }, 5000); +} + +// hiding loading +function hideLoading() { + loader.classList.remove("display"); +} + + + // Submit button + + document.querySelector('form').addEventListener('submit', async (event) => { + event.preventDefault(); // Prevent form submission from refreshing the page + displayLoading(); + const form = event.target; + const formData = new FormData(form); // Create a FormData object to store form data + + try { + // const response = await fetch('https://emailapi.thrickodithanamscb.in/email', { + const response = await fetch('http://localhost:3333/email', { + method: 'POST', + body: formData, + }); + + if (response.ok) { + + response.json().then((data) => { + hideLoading() + + alert('Form submitted successfully!') + + form.reset(); // Clear form inputs after successful submission + console.log(data); // Handle the response data as needed + }); + } else { + hideLoading() + alert('Error submitting form. Please try again.'); + } + } catch (error) { + //error caused when sending large file because of server time limit reaches + //error shows but the email is send successfully + + hideLoading() + alert('Form submitted successfully!'); + } + }); + + //size validation and pdf selection + + function addEventListenersToIds(ids, event, listener) { + ids.forEach(function (id) { + var element = document.getElementById(id); + element.addEventListener(event, listener); + }); + } + + var fileInputIds = ['TenderFile', 'PaymentFile']; + + addEventListenersToIds(fileInputIds, 'change', checkfileformat); + + // const fileInput = document.getElementById('TenderFile'); + // fileInput.addEventListener('change', checkfileformat); + + function checkfileformat(event) { + var fileInput = event.target; + var file = fileInput.files[0]; + var size = file.size; + var fileName = file.name; + var fileExtension = fileName.split('.').pop().toLowerCase(); + //var allowedFormats = ['pdf', 'zip']; + var allowedFormats = ['pdf']; + + if (allowedFormats.indexOf(fileExtension) === -1) { + // alert("Only PDF and ZIP files are allowed."); + alert("Only PDF files are allowed."); + fileInput.value = ''; + return false; + } + + var maxSize = 5 * 1024 * 1024; // 5MB in bytes + if (size > maxSize) { + alert("File size exceeds the 5MB limit."); + fileInput.value = ''; + return false; + } + + // alert("File uploaded sucessfully."); + return true; + } + +})() \ No newline at end of file diff --git a/src/assets/vendor/bootstrap-icons/bootstrap-icons.css b/src/assets/vendor/bootstrap-icons/bootstrap-icons.css new file mode 100644 index 0000000..7ebc9f1 --- /dev/null +++ b/src/assets/vendor/bootstrap-icons/bootstrap-icons.css @@ -0,0 +1,2018 @@ +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: url("./fonts/bootstrap-icons.woff2?24e3eb84d0bcaf83d77f904c78ac1f47") format("woff2"), +url("./fonts/bootstrap-icons.woff?24e3eb84d0bcaf83d77f904c78ac1f47") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-1::before { content: "\f2a5"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-1::before { content: "\f68a"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-1::before { content: "\f68d"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-1::before { content: "\f690"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-1::before { content: "\f695"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-1::before { content: "\f698"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-mortorboard-fill::before { content: "\f6a2"; } +.bi-mortorboard::before { content: "\f6a3"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-1::before { content: "\f6b6"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash-1::before { content: "\f6c2"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport-1::before { content: "\f6e0"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-ssd-fill::before { content: "\f6ed"; } +.bi-ssd::before { content: "\f6ee"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt-1::before { content: "\f759"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls-1::before { content: "\f769"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-1::before { content: "\f794"; } +.bi-1-circle-fill-1::before { content: "\f795"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-1::before { content: "\f79a"; } +.bi-2-circle-fill-1::before { content: "\f79b"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-1::before { content: "\f7a0"; } +.bi-3-circle-fill-1::before { content: "\f7a1"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-1::before { content: "\f7a6"; } +.bi-4-circle-fill-1::before { content: "\f7a7"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-1::before { content: "\f7ac"; } +.bi-5-circle-fill-1::before { content: "\f7ad"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-1::before { content: "\f7b2"; } +.bi-6-circle-fill-1::before { content: "\f7b3"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-1::before { content: "\f7b8"; } +.bi-7-circle-fill-1::before { content: "\f7b9"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-1::before { content: "\f7be"; } +.bi-8-circle-fill-1::before { content: "\f7bf"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-1::before { content: "\f7c4"; } +.bi-9-circle-fill-1::before { content: "\f7c5"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-1::before { content: "\f7d8"; } +.bi-c-circle-fill-1::before { content: "\f7d9"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-1::before { content: "\f7e4"; } +.bi-cc-circle-fill-1::before { content: "\f7e5"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-1::before { content: "\f7f8"; } +.bi-h-circle-fill-1::before { content: "\f7f9"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-1::before { content: "\f802"; } +.bi-p-circle-fill-1::before { content: "\f803"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-1::before { content: "\f80c"; } +.bi-r-circle-fill-1::before { content: "\f80d"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } diff --git a/src/assets/vendor/bootstrap-icons/bootstrap-icons.json b/src/assets/vendor/bootstrap-icons/bootstrap-icons.json new file mode 100644 index 0000000..01e6f90 --- /dev/null +++ b/src/assets/vendor/bootstrap-icons/bootstrap-icons.json @@ -0,0 +1,1998 @@ +{ + "123": 63103, + "alarm-fill": 61697, + "alarm": 61698, + "align-bottom": 61699, + "align-center": 61700, + "align-end": 61701, + "align-middle": 61702, + "align-start": 61703, + "align-top": 61704, + "alt": 61705, + "app-indicator": 61706, + "app": 61707, + "archive-fill": 61708, + "archive": 61709, + "arrow-90deg-down": 61710, + "arrow-90deg-left": 61711, + "arrow-90deg-right": 61712, + "arrow-90deg-up": 61713, + "arrow-bar-down": 61714, + "arrow-bar-left": 61715, + "arrow-bar-right": 61716, + "arrow-bar-up": 61717, + "arrow-clockwise": 61718, + "arrow-counterclockwise": 61719, + "arrow-down-circle-fill": 61720, + "arrow-down-circle": 61721, + "arrow-down-left-circle-fill": 61722, + "arrow-down-left-circle": 61723, + "arrow-down-left-square-fill": 61724, + "arrow-down-left-square": 61725, + "arrow-down-left": 61726, + "arrow-down-right-circle-fill": 61727, + "arrow-down-right-circle": 61728, + "arrow-down-right-square-fill": 61729, + "arrow-down-right-square": 61730, + "arrow-down-right": 61731, + "arrow-down-short": 61732, + "arrow-down-square-fill": 61733, + "arrow-down-square": 61734, + "arrow-down-up": 61735, + "arrow-down": 61736, + "arrow-left-circle-fill": 61737, + "arrow-left-circle": 61738, + "arrow-left-right": 61739, + "arrow-left-short": 61740, + "arrow-left-square-fill": 61741, + "arrow-left-square": 61742, + "arrow-left": 61743, + "arrow-repeat": 61744, + "arrow-return-left": 61745, + "arrow-return-right": 61746, + "arrow-right-circle-fill": 61747, + "arrow-right-circle": 61748, + "arrow-right-short": 61749, + "arrow-right-square-fill": 61750, + "arrow-right-square": 61751, + "arrow-right": 61752, + "arrow-up-circle-fill": 61753, + "arrow-up-circle": 61754, + "arrow-up-left-circle-fill": 61755, + "arrow-up-left-circle": 61756, + "arrow-up-left-square-fill": 61757, + "arrow-up-left-square": 61758, + "arrow-up-left": 61759, + "arrow-up-right-circle-fill": 61760, + "arrow-up-right-circle": 61761, + "arrow-up-right-square-fill": 61762, + "arrow-up-right-square": 61763, + "arrow-up-right": 61764, + "arrow-up-short": 61765, + "arrow-up-square-fill": 61766, + "arrow-up-square": 61767, + "arrow-up": 61768, + "arrows-angle-contract": 61769, + "arrows-angle-expand": 61770, + "arrows-collapse": 61771, + "arrows-expand": 61772, + "arrows-fullscreen": 61773, + "arrows-move": 61774, + "aspect-ratio-fill": 61775, + "aspect-ratio": 61776, + "asterisk": 61777, + "at": 61778, + "award-fill": 61779, + "award": 61780, + "back": 61781, + "backspace-fill": 61782, + "backspace-reverse-fill": 61783, + "backspace-reverse": 61784, + "backspace": 61785, + "badge-3d-fill": 61786, + "badge-3d": 61787, + "badge-4k-fill": 61788, + "badge-4k": 61789, + "badge-8k-fill": 61790, + "badge-8k": 61791, + "badge-ad-fill": 61792, + "badge-ad": 61793, + "badge-ar-fill": 61794, + "badge-ar": 61795, + "badge-cc-fill": 61796, + "badge-cc": 61797, + "badge-hd-fill": 61798, + "badge-hd": 61799, + "badge-tm-fill": 61800, + "badge-tm": 61801, + "badge-vo-fill": 61802, + "badge-vo": 61803, + "badge-vr-fill": 61804, + "badge-vr": 61805, + "badge-wc-fill": 61806, + "badge-wc": 61807, + "bag-check-fill": 61808, + "bag-check": 61809, + "bag-dash-fill": 61810, + "bag-dash": 61811, + "bag-fill": 61812, + "bag-plus-fill": 61813, + "bag-plus": 61814, + "bag-x-fill": 61815, + "bag-x": 61816, + "bag": 61817, + "bar-chart-fill": 61818, + "bar-chart-line-fill": 61819, + "bar-chart-line": 61820, + "bar-chart-steps": 61821, + "bar-chart": 61822, + "basket-fill": 61823, + "basket": 61824, + "basket2-fill": 61825, + "basket2": 61826, + "basket3-fill": 61827, + "basket3": 61828, + "battery-charging": 61829, + "battery-full": 61830, + "battery-half": 61831, + "battery": 61832, + "bell-fill": 61833, + "bell": 61834, + "bezier": 61835, + "bezier2": 61836, + "bicycle": 61837, + "binoculars-fill": 61838, + "binoculars": 61839, + "blockquote-left": 61840, + "blockquote-right": 61841, + "book-fill": 61842, + "book-half": 61843, + "book": 61844, + "bookmark-check-fill": 61845, + "bookmark-check": 61846, + "bookmark-dash-fill": 61847, + "bookmark-dash": 61848, + "bookmark-fill": 61849, + "bookmark-heart-fill": 61850, + "bookmark-heart": 61851, + "bookmark-plus-fill": 61852, + "bookmark-plus": 61853, + "bookmark-star-fill": 61854, + "bookmark-star": 61855, + "bookmark-x-fill": 61856, + "bookmark-x": 61857, + "bookmark": 61858, + "bookmarks-fill": 61859, + "bookmarks": 61860, + "bookshelf": 61861, + "bootstrap-fill": 61862, + "bootstrap-reboot": 61863, + "bootstrap": 61864, + "border-all": 61865, + "border-bottom": 61866, + "border-center": 61867, + "border-inner": 61868, + "border-left": 61869, + "border-middle": 61870, + "border-outer": 61871, + "border-right": 61872, + "border-style": 61873, + "border-top": 61874, + "border-width": 61875, + "border": 61876, + "bounding-box-circles": 61877, + "bounding-box": 61878, + "box-arrow-down-left": 61879, + "box-arrow-down-right": 61880, + "box-arrow-down": 61881, + "box-arrow-in-down-left": 61882, + "box-arrow-in-down-right": 61883, + "box-arrow-in-down": 61884, + "box-arrow-in-left": 61885, + "box-arrow-in-right": 61886, + "box-arrow-in-up-left": 61887, + "box-arrow-in-up-right": 61888, + "box-arrow-in-up": 61889, + "box-arrow-left": 61890, + "box-arrow-right": 61891, + "box-arrow-up-left": 61892, + "box-arrow-up-right": 61893, + "box-arrow-up": 61894, + "box-seam": 61895, + "box": 61896, + "braces": 61897, + "bricks": 61898, + "briefcase-fill": 61899, + "briefcase": 61900, + "brightness-alt-high-fill": 61901, + "brightness-alt-high": 61902, + "brightness-alt-low-fill": 61903, + "brightness-alt-low": 61904, + "brightness-high-fill": 61905, + "brightness-high": 61906, + "brightness-low-fill": 61907, + "brightness-low": 61908, + "broadcast-pin": 61909, + "broadcast": 61910, + "brush-fill": 61911, + "brush": 61912, + "bucket-fill": 61913, + "bucket": 61914, + "bug-fill": 61915, + "bug": 61916, + "building": 61917, + "bullseye": 61918, + "calculator-fill": 61919, + "calculator": 61920, + "calendar-check-fill": 61921, + "calendar-check": 61922, + "calendar-date-fill": 61923, + "calendar-date": 61924, + "calendar-day-fill": 61925, + "calendar-day": 61926, + "calendar-event-fill": 61927, + "calendar-event": 61928, + "calendar-fill": 61929, + "calendar-minus-fill": 61930, + "calendar-minus": 61931, + "calendar-month-fill": 61932, + "calendar-month": 61933, + "calendar-plus-fill": 61934, + "calendar-plus": 61935, + "calendar-range-fill": 61936, + "calendar-range": 61937, + "calendar-week-fill": 61938, + "calendar-week": 61939, + "calendar-x-fill": 61940, + "calendar-x": 61941, + "calendar": 61942, + "calendar2-check-fill": 61943, + "calendar2-check": 61944, + "calendar2-date-fill": 61945, + "calendar2-date": 61946, + "calendar2-day-fill": 61947, + "calendar2-day": 61948, + "calendar2-event-fill": 61949, + "calendar2-event": 61950, + "calendar2-fill": 61951, + "calendar2-minus-fill": 61952, + "calendar2-minus": 61953, + "calendar2-month-fill": 61954, + "calendar2-month": 61955, + "calendar2-plus-fill": 61956, + "calendar2-plus": 61957, + "calendar2-range-fill": 61958, + "calendar2-range": 61959, + "calendar2-week-fill": 61960, + "calendar2-week": 61961, + "calendar2-x-fill": 61962, + "calendar2-x": 61963, + "calendar2": 61964, + "calendar3-event-fill": 61965, + "calendar3-event": 61966, + "calendar3-fill": 61967, + "calendar3-range-fill": 61968, + "calendar3-range": 61969, + "calendar3-week-fill": 61970, + "calendar3-week": 61971, + "calendar3": 61972, + "calendar4-event": 61973, + "calendar4-range": 61974, + "calendar4-week": 61975, + "calendar4": 61976, + "camera-fill": 61977, + "camera-reels-fill": 61978, + "camera-reels": 61979, + "camera-video-fill": 61980, + "camera-video-off-fill": 61981, + "camera-video-off": 61982, + "camera-video": 61983, + "camera": 61984, + "camera2": 61985, + "capslock-fill": 61986, + "capslock": 61987, + "card-checklist": 61988, + "card-heading": 61989, + "card-image": 61990, + "card-list": 61991, + "card-text": 61992, + "caret-down-fill": 61993, + "caret-down-square-fill": 61994, + "caret-down-square": 61995, + "caret-down": 61996, + "caret-left-fill": 61997, + "caret-left-square-fill": 61998, + "caret-left-square": 61999, + "caret-left": 62000, + "caret-right-fill": 62001, + "caret-right-square-fill": 62002, + "caret-right-square": 62003, + "caret-right": 62004, + "caret-up-fill": 62005, + "caret-up-square-fill": 62006, + "caret-up-square": 62007, + "caret-up": 62008, + "cart-check-fill": 62009, + "cart-check": 62010, + "cart-dash-fill": 62011, + "cart-dash": 62012, + "cart-fill": 62013, + "cart-plus-fill": 62014, + "cart-plus": 62015, + "cart-x-fill": 62016, + "cart-x": 62017, + "cart": 62018, + "cart2": 62019, + "cart3": 62020, + "cart4": 62021, + "cash-stack": 62022, + "cash": 62023, + "cast": 62024, + "chat-dots-fill": 62025, + "chat-dots": 62026, + "chat-fill": 62027, + "chat-left-dots-fill": 62028, + "chat-left-dots": 62029, + "chat-left-fill": 62030, + "chat-left-quote-fill": 62031, + "chat-left-quote": 62032, + "chat-left-text-fill": 62033, + "chat-left-text": 62034, + "chat-left": 62035, + "chat-quote-fill": 62036, + "chat-quote": 62037, + "chat-right-dots-fill": 62038, + "chat-right-dots": 62039, + "chat-right-fill": 62040, + "chat-right-quote-fill": 62041, + "chat-right-quote": 62042, + "chat-right-text-fill": 62043, + "chat-right-text": 62044, + "chat-right": 62045, + "chat-square-dots-fill": 62046, + "chat-square-dots": 62047, + "chat-square-fill": 62048, + "chat-square-quote-fill": 62049, + "chat-square-quote": 62050, + "chat-square-text-fill": 62051, + "chat-square-text": 62052, + "chat-square": 62053, + "chat-text-fill": 62054, + "chat-text": 62055, + "chat": 62056, + "check-all": 62057, + "check-circle-fill": 62058, + "check-circle": 62059, + "check-square-fill": 62060, + "check-square": 62061, + "check": 62062, + "check2-all": 62063, + "check2-circle": 62064, + "check2-square": 62065, + "check2": 62066, + "chevron-bar-contract": 62067, + "chevron-bar-down": 62068, + "chevron-bar-expand": 62069, + "chevron-bar-left": 62070, + "chevron-bar-right": 62071, + "chevron-bar-up": 62072, + "chevron-compact-down": 62073, + "chevron-compact-left": 62074, + "chevron-compact-right": 62075, + "chevron-compact-up": 62076, + "chevron-contract": 62077, + "chevron-double-down": 62078, + "chevron-double-left": 62079, + "chevron-double-right": 62080, + "chevron-double-up": 62081, + "chevron-down": 62082, + "chevron-expand": 62083, + "chevron-left": 62084, + "chevron-right": 62085, + "chevron-up": 62086, + "circle-fill": 62087, + "circle-half": 62088, + "circle-square": 62089, + "circle": 62090, + "clipboard-check": 62091, + "clipboard-data": 62092, + "clipboard-minus": 62093, + "clipboard-plus": 62094, + "clipboard-x": 62095, + "clipboard": 62096, + "clock-fill": 62097, + "clock-history": 62098, + "clock": 62099, + "cloud-arrow-down-fill": 62100, + "cloud-arrow-down": 62101, + "cloud-arrow-up-fill": 62102, + "cloud-arrow-up": 62103, + "cloud-check-fill": 62104, + "cloud-check": 62105, + "cloud-download-fill": 62106, + "cloud-download": 62107, + "cloud-drizzle-fill": 62108, + "cloud-drizzle": 62109, + "cloud-fill": 62110, + "cloud-fog-fill": 62111, + "cloud-fog": 62112, + "cloud-fog2-fill": 62113, + "cloud-fog2": 62114, + "cloud-hail-fill": 62115, + "cloud-hail": 62116, + "cloud-haze-1": 62117, + "cloud-haze-fill": 62118, + "cloud-haze": 62119, + "cloud-haze2-fill": 62120, + "cloud-lightning-fill": 62121, + "cloud-lightning-rain-fill": 62122, + "cloud-lightning-rain": 62123, + "cloud-lightning": 62124, + "cloud-minus-fill": 62125, + "cloud-minus": 62126, + "cloud-moon-fill": 62127, + "cloud-moon": 62128, + "cloud-plus-fill": 62129, + "cloud-plus": 62130, + "cloud-rain-fill": 62131, + "cloud-rain-heavy-fill": 62132, + "cloud-rain-heavy": 62133, + "cloud-rain": 62134, + "cloud-slash-fill": 62135, + "cloud-slash": 62136, + "cloud-sleet-fill": 62137, + "cloud-sleet": 62138, + "cloud-snow-fill": 62139, + "cloud-snow": 62140, + "cloud-sun-fill": 62141, + "cloud-sun": 62142, + "cloud-upload-fill": 62143, + "cloud-upload": 62144, + "cloud": 62145, + "clouds-fill": 62146, + "clouds": 62147, + "cloudy-fill": 62148, + "cloudy": 62149, + "code-slash": 62150, + "code-square": 62151, + "code": 62152, + "collection-fill": 62153, + "collection-play-fill": 62154, + "collection-play": 62155, + "collection": 62156, + "columns-gap": 62157, + "columns": 62158, + "command": 62159, + "compass-fill": 62160, + "compass": 62161, + "cone-striped": 62162, + "cone": 62163, + "controller": 62164, + "cpu-fill": 62165, + "cpu": 62166, + "credit-card-2-back-fill": 62167, + "credit-card-2-back": 62168, + "credit-card-2-front-fill": 62169, + "credit-card-2-front": 62170, + "credit-card-fill": 62171, + "credit-card": 62172, + "crop": 62173, + "cup-fill": 62174, + "cup-straw": 62175, + "cup": 62176, + "cursor-fill": 62177, + "cursor-text": 62178, + "cursor": 62179, + "dash-circle-dotted": 62180, + "dash-circle-fill": 62181, + "dash-circle": 62182, + "dash-square-dotted": 62183, + "dash-square-fill": 62184, + "dash-square": 62185, + "dash": 62186, + "diagram-2-fill": 62187, + "diagram-2": 62188, + "diagram-3-fill": 62189, + "diagram-3": 62190, + "diamond-fill": 62191, + "diamond-half": 62192, + "diamond": 62193, + "dice-1-fill": 62194, + "dice-1": 62195, + "dice-2-fill": 62196, + "dice-2": 62197, + "dice-3-fill": 62198, + "dice-3": 62199, + "dice-4-fill": 62200, + "dice-4": 62201, + "dice-5-fill": 62202, + "dice-5": 62203, + "dice-6-fill": 62204, + "dice-6": 62205, + "disc-fill": 62206, + "disc": 62207, + "discord": 62208, + "display-fill": 62209, + "display": 62210, + "distribute-horizontal": 62211, + "distribute-vertical": 62212, + "door-closed-fill": 62213, + "door-closed": 62214, + "door-open-fill": 62215, + "door-open": 62216, + "dot": 62217, + "download": 62218, + "droplet-fill": 62219, + "droplet-half": 62220, + "droplet": 62221, + "earbuds": 62222, + "easel-fill": 62223, + "easel": 62224, + "egg-fill": 62225, + "egg-fried": 62226, + "egg": 62227, + "eject-fill": 62228, + "eject": 62229, + "emoji-angry-fill": 62230, + "emoji-angry": 62231, + "emoji-dizzy-fill": 62232, + "emoji-dizzy": 62233, + "emoji-expressionless-fill": 62234, + "emoji-expressionless": 62235, + "emoji-frown-fill": 62236, + "emoji-frown": 62237, + "emoji-heart-eyes-fill": 62238, + "emoji-heart-eyes": 62239, + "emoji-laughing-fill": 62240, + "emoji-laughing": 62241, + "emoji-neutral-fill": 62242, + "emoji-neutral": 62243, + "emoji-smile-fill": 62244, + "emoji-smile-upside-down-fill": 62245, + "emoji-smile-upside-down": 62246, + "emoji-smile": 62247, + "emoji-sunglasses-fill": 62248, + "emoji-sunglasses": 62249, + "emoji-wink-fill": 62250, + "emoji-wink": 62251, + "envelope-fill": 62252, + "envelope-open-fill": 62253, + "envelope-open": 62254, + "envelope": 62255, + "eraser-fill": 62256, + "eraser": 62257, + "exclamation-circle-fill": 62258, + "exclamation-circle": 62259, + "exclamation-diamond-fill": 62260, + "exclamation-diamond": 62261, + "exclamation-octagon-fill": 62262, + "exclamation-octagon": 62263, + "exclamation-square-fill": 62264, + "exclamation-square": 62265, + "exclamation-triangle-fill": 62266, + "exclamation-triangle": 62267, + "exclamation": 62268, + "exclude": 62269, + "eye-fill": 62270, + "eye-slash-fill": 62271, + "eye-slash": 62272, + "eye": 62273, + "eyedropper": 62274, + "eyeglasses": 62275, + "facebook": 62276, + "file-arrow-down-fill": 62277, + "file-arrow-down": 62278, + "file-arrow-up-fill": 62279, + "file-arrow-up": 62280, + "file-bar-graph-fill": 62281, + "file-bar-graph": 62282, + "file-binary-fill": 62283, + "file-binary": 62284, + "file-break-fill": 62285, + "file-break": 62286, + "file-check-fill": 62287, + "file-check": 62288, + "file-code-fill": 62289, + "file-code": 62290, + "file-diff-fill": 62291, + "file-diff": 62292, + "file-earmark-arrow-down-fill": 62293, + "file-earmark-arrow-down": 62294, + "file-earmark-arrow-up-fill": 62295, + "file-earmark-arrow-up": 62296, + "file-earmark-bar-graph-fill": 62297, + "file-earmark-bar-graph": 62298, + "file-earmark-binary-fill": 62299, + "file-earmark-binary": 62300, + "file-earmark-break-fill": 62301, + "file-earmark-break": 62302, + "file-earmark-check-fill": 62303, + "file-earmark-check": 62304, + "file-earmark-code-fill": 62305, + "file-earmark-code": 62306, + "file-earmark-diff-fill": 62307, + "file-earmark-diff": 62308, + "file-earmark-easel-fill": 62309, + "file-earmark-easel": 62310, + "file-earmark-excel-fill": 62311, + "file-earmark-excel": 62312, + "file-earmark-fill": 62313, + "file-earmark-font-fill": 62314, + "file-earmark-font": 62315, + "file-earmark-image-fill": 62316, + "file-earmark-image": 62317, + "file-earmark-lock-fill": 62318, + "file-earmark-lock": 62319, + "file-earmark-lock2-fill": 62320, + "file-earmark-lock2": 62321, + "file-earmark-medical-fill": 62322, + "file-earmark-medical": 62323, + "file-earmark-minus-fill": 62324, + "file-earmark-minus": 62325, + "file-earmark-music-fill": 62326, + "file-earmark-music": 62327, + "file-earmark-person-fill": 62328, + "file-earmark-person": 62329, + "file-earmark-play-fill": 62330, + "file-earmark-play": 62331, + "file-earmark-plus-fill": 62332, + "file-earmark-plus": 62333, + "file-earmark-post-fill": 62334, + "file-earmark-post": 62335, + "file-earmark-ppt-fill": 62336, + "file-earmark-ppt": 62337, + "file-earmark-richtext-fill": 62338, + "file-earmark-richtext": 62339, + "file-earmark-ruled-fill": 62340, + "file-earmark-ruled": 62341, + "file-earmark-slides-fill": 62342, + "file-earmark-slides": 62343, + "file-earmark-spreadsheet-fill": 62344, + "file-earmark-spreadsheet": 62345, + "file-earmark-text-fill": 62346, + "file-earmark-text": 62347, + "file-earmark-word-fill": 62348, + "file-earmark-word": 62349, + "file-earmark-x-fill": 62350, + "file-earmark-x": 62351, + "file-earmark-zip-fill": 62352, + "file-earmark-zip": 62353, + "file-earmark": 62354, + "file-easel-fill": 62355, + "file-easel": 62356, + "file-excel-fill": 62357, + "file-excel": 62358, + "file-fill": 62359, + "file-font-fill": 62360, + "file-font": 62361, + "file-image-fill": 62362, + "file-image": 62363, + "file-lock-fill": 62364, + "file-lock": 62365, + "file-lock2-fill": 62366, + "file-lock2": 62367, + "file-medical-fill": 62368, + "file-medical": 62369, + "file-minus-fill": 62370, + "file-minus": 62371, + "file-music-fill": 62372, + "file-music": 62373, + "file-person-fill": 62374, + "file-person": 62375, + "file-play-fill": 62376, + "file-play": 62377, + "file-plus-fill": 62378, + "file-plus": 62379, + "file-post-fill": 62380, + "file-post": 62381, + "file-ppt-fill": 62382, + "file-ppt": 62383, + "file-richtext-fill": 62384, + "file-richtext": 62385, + "file-ruled-fill": 62386, + "file-ruled": 62387, + "file-slides-fill": 62388, + "file-slides": 62389, + "file-spreadsheet-fill": 62390, + "file-spreadsheet": 62391, + "file-text-fill": 62392, + "file-text": 62393, + "file-word-fill": 62394, + "file-word": 62395, + "file-x-fill": 62396, + "file-x": 62397, + "file-zip-fill": 62398, + "file-zip": 62399, + "file": 62400, + "files-alt": 62401, + "files": 62402, + "film": 62403, + "filter-circle-fill": 62404, + "filter-circle": 62405, + "filter-left": 62406, + "filter-right": 62407, + "filter-square-fill": 62408, + "filter-square": 62409, + "filter": 62410, + "flag-fill": 62411, + "flag": 62412, + "flower1": 62413, + "flower2": 62414, + "flower3": 62415, + "folder-check": 62416, + "folder-fill": 62417, + "folder-minus": 62418, + "folder-plus": 62419, + "folder-symlink-fill": 62420, + "folder-symlink": 62421, + "folder-x": 62422, + "folder": 62423, + "folder2-open": 62424, + "folder2": 62425, + "fonts": 62426, + "forward-fill": 62427, + "forward": 62428, + "front": 62429, + "fullscreen-exit": 62430, + "fullscreen": 62431, + "funnel-fill": 62432, + "funnel": 62433, + "gear-fill": 62434, + "gear-wide-connected": 62435, + "gear-wide": 62436, + "gear": 62437, + "gem": 62438, + "geo-alt-fill": 62439, + "geo-alt": 62440, + "geo-fill": 62441, + "geo": 62442, + "gift-fill": 62443, + "gift": 62444, + "github": 62445, + "globe": 62446, + "globe2": 62447, + "google": 62448, + "graph-down": 62449, + "graph-up": 62450, + "grid-1x2-fill": 62451, + "grid-1x2": 62452, + "grid-3x2-gap-fill": 62453, + "grid-3x2-gap": 62454, + "grid-3x2": 62455, + "grid-3x3-gap-fill": 62456, + "grid-3x3-gap": 62457, + "grid-3x3": 62458, + "grid-fill": 62459, + "grid": 62460, + "grip-horizontal": 62461, + "grip-vertical": 62462, + "hammer": 62463, + "hand-index-fill": 62464, + "hand-index-thumb-fill": 62465, + "hand-index-thumb": 62466, + "hand-index": 62467, + "hand-thumbs-down-fill": 62468, + "hand-thumbs-down": 62469, + "hand-thumbs-up-fill": 62470, + "hand-thumbs-up": 62471, + "handbag-fill": 62472, + "handbag": 62473, + "hash": 62474, + "hdd-fill": 62475, + "hdd-network-fill": 62476, + "hdd-network": 62477, + "hdd-rack-fill": 62478, + "hdd-rack": 62479, + "hdd-stack-fill": 62480, + "hdd-stack": 62481, + "hdd": 62482, + "headphones": 62483, + "headset": 62484, + "heart-fill": 62485, + "heart-half": 62486, + "heart": 62487, + "heptagon-fill": 62488, + "heptagon-half": 62489, + "heptagon": 62490, + "hexagon-fill": 62491, + "hexagon-half": 62492, + "hexagon": 62493, + "hourglass-bottom": 62494, + "hourglass-split": 62495, + "hourglass-top": 62496, + "hourglass": 62497, + "house-door-fill": 62498, + "house-door": 62499, + "house-fill": 62500, + "house": 62501, + "hr": 62502, + "hurricane": 62503, + "image-alt": 62504, + "image-fill": 62505, + "image": 62506, + "images": 62507, + "inbox-fill": 62508, + "inbox": 62509, + "inboxes-fill": 62510, + "inboxes": 62511, + "info-circle-fill": 62512, + "info-circle": 62513, + "info-square-fill": 62514, + "info-square": 62515, + "info": 62516, + "input-cursor-text": 62517, + "input-cursor": 62518, + "instagram": 62519, + "intersect": 62520, + "journal-album": 62521, + "journal-arrow-down": 62522, + "journal-arrow-up": 62523, + "journal-bookmark-fill": 62524, + "journal-bookmark": 62525, + "journal-check": 62526, + "journal-code": 62527, + "journal-medical": 62528, + "journal-minus": 62529, + "journal-plus": 62530, + "journal-richtext": 62531, + "journal-text": 62532, + "journal-x": 62533, + "journal": 62534, + "journals": 62535, + "joystick": 62536, + "justify-left": 62537, + "justify-right": 62538, + "justify": 62539, + "kanban-fill": 62540, + "kanban": 62541, + "key-fill": 62542, + "key": 62543, + "keyboard-fill": 62544, + "keyboard": 62545, + "ladder": 62546, + "lamp-fill": 62547, + "lamp": 62548, + "laptop-fill": 62549, + "laptop": 62550, + "layer-backward": 62551, + "layer-forward": 62552, + "layers-fill": 62553, + "layers-half": 62554, + "layers": 62555, + "layout-sidebar-inset-reverse": 62556, + "layout-sidebar-inset": 62557, + "layout-sidebar-reverse": 62558, + "layout-sidebar": 62559, + "layout-split": 62560, + "layout-text-sidebar-reverse": 62561, + "layout-text-sidebar": 62562, + "layout-text-window-reverse": 62563, + "layout-text-window": 62564, + "layout-three-columns": 62565, + "layout-wtf": 62566, + "life-preserver": 62567, + "lightbulb-fill": 62568, + "lightbulb-off-fill": 62569, + "lightbulb-off": 62570, + "lightbulb": 62571, + "lightning-charge-fill": 62572, + "lightning-charge": 62573, + "lightning-fill": 62574, + "lightning": 62575, + "link-45deg": 62576, + "link": 62577, + "linkedin": 62578, + "list-check": 62579, + "list-nested": 62580, + "list-ol": 62581, + "list-stars": 62582, + "list-task": 62583, + "list-ul": 62584, + "list": 62585, + "lock-fill": 62586, + "lock": 62587, + "mailbox": 62588, + "mailbox2": 62589, + "map-fill": 62590, + "map": 62591, + "markdown-fill": 62592, + "markdown": 62593, + "mask": 62594, + "megaphone-fill": 62595, + "megaphone": 62596, + "menu-app-fill": 62597, + "menu-app": 62598, + "menu-button-fill": 62599, + "menu-button-wide-fill": 62600, + "menu-button-wide": 62601, + "menu-button": 62602, + "menu-down": 62603, + "menu-up": 62604, + "mic-fill": 62605, + "mic-mute-fill": 62606, + "mic-mute": 62607, + "mic": 62608, + "minecart-loaded": 62609, + "minecart": 62610, + "moisture": 62611, + "moon-fill": 62612, + "moon-stars-fill": 62613, + "moon-stars": 62614, + "moon": 62615, + "mouse-fill": 62616, + "mouse": 62617, + "mouse2-fill": 62618, + "mouse2": 62619, + "mouse3-fill": 62620, + "mouse3": 62621, + "music-note-beamed": 62622, + "music-note-list": 62623, + "music-note": 62624, + "music-player-fill": 62625, + "music-player": 62626, + "newspaper": 62627, + "node-minus-fill": 62628, + "node-minus": 62629, + "node-plus-fill": 62630, + "node-plus": 62631, + "nut-fill": 62632, + "nut": 62633, + "octagon-fill": 62634, + "octagon-half": 62635, + "octagon": 62636, + "option": 62637, + "outlet": 62638, + "paint-bucket": 62639, + "palette-fill": 62640, + "palette": 62641, + "palette2": 62642, + "paperclip": 62643, + "paragraph": 62644, + "patch-check-fill": 62645, + "patch-check": 62646, + "patch-exclamation-fill": 62647, + "patch-exclamation": 62648, + "patch-minus-fill": 62649, + "patch-minus": 62650, + "patch-plus-fill": 62651, + "patch-plus": 62652, + "patch-question-fill": 62653, + "patch-question": 62654, + "pause-btn-fill": 62655, + "pause-btn": 62656, + "pause-circle-fill": 62657, + "pause-circle": 62658, + "pause-fill": 62659, + "pause": 62660, + "peace-fill": 62661, + "peace": 62662, + "pen-fill": 62663, + "pen": 62664, + "pencil-fill": 62665, + "pencil-square": 62666, + "pencil": 62667, + "pentagon-fill": 62668, + "pentagon-half": 62669, + "pentagon": 62670, + "people-fill": 62671, + "people": 62672, + "percent": 62673, + "person-badge-fill": 62674, + "person-badge": 62675, + "person-bounding-box": 62676, + "person-check-fill": 62677, + "person-check": 62678, + "person-circle": 62679, + "person-dash-fill": 62680, + "person-dash": 62681, + "person-fill": 62682, + "person-lines-fill": 62683, + "person-plus-fill": 62684, + "person-plus": 62685, + "person-square": 62686, + "person-x-fill": 62687, + "person-x": 62688, + "person": 62689, + "phone-fill": 62690, + "phone-landscape-fill": 62691, + "phone-landscape": 62692, + "phone-vibrate-fill": 62693, + "phone-vibrate": 62694, + "phone": 62695, + "pie-chart-fill": 62696, + "pie-chart": 62697, + "pin-angle-fill": 62698, + "pin-angle": 62699, + "pin-fill": 62700, + "pin": 62701, + "pip-fill": 62702, + "pip": 62703, + "play-btn-fill": 62704, + "play-btn": 62705, + "play-circle-fill": 62706, + "play-circle": 62707, + "play-fill": 62708, + "play": 62709, + "plug-fill": 62710, + "plug": 62711, + "plus-circle-dotted": 62712, + "plus-circle-fill": 62713, + "plus-circle": 62714, + "plus-square-dotted": 62715, + "plus-square-fill": 62716, + "plus-square": 62717, + "plus": 62718, + "power": 62719, + "printer-fill": 62720, + "printer": 62721, + "puzzle-fill": 62722, + "puzzle": 62723, + "question-circle-fill": 62724, + "question-circle": 62725, + "question-diamond-fill": 62726, + "question-diamond": 62727, + "question-octagon-fill": 62728, + "question-octagon": 62729, + "question-square-fill": 62730, + "question-square": 62731, + "question": 62732, + "rainbow": 62733, + "receipt-cutoff": 62734, + "receipt": 62735, + "reception-0": 62736, + "reception-1": 62737, + "reception-2": 62738, + "reception-3": 62739, + "reception-4": 62740, + "record-btn-fill": 62741, + "record-btn": 62742, + "record-circle-fill": 62743, + "record-circle": 62744, + "record-fill": 62745, + "record": 62746, + "record2-fill": 62747, + "record2": 62748, + "reply-all-fill": 62749, + "reply-all": 62750, + "reply-fill": 62751, + "reply": 62752, + "rss-fill": 62753, + "rss": 62754, + "rulers": 62755, + "save-fill": 62756, + "save": 62757, + "save2-fill": 62758, + "save2": 62759, + "scissors": 62760, + "screwdriver": 62761, + "search": 62762, + "segmented-nav": 62763, + "server": 62764, + "share-fill": 62765, + "share": 62766, + "shield-check": 62767, + "shield-exclamation": 62768, + "shield-fill-check": 62769, + "shield-fill-exclamation": 62770, + "shield-fill-minus": 62771, + "shield-fill-plus": 62772, + "shield-fill-x": 62773, + "shield-fill": 62774, + "shield-lock-fill": 62775, + "shield-lock": 62776, + "shield-minus": 62777, + "shield-plus": 62778, + "shield-shaded": 62779, + "shield-slash-fill": 62780, + "shield-slash": 62781, + "shield-x": 62782, + "shield": 62783, + "shift-fill": 62784, + "shift": 62785, + "shop-window": 62786, + "shop": 62787, + "shuffle": 62788, + "signpost-2-fill": 62789, + "signpost-2": 62790, + "signpost-fill": 62791, + "signpost-split-fill": 62792, + "signpost-split": 62793, + "signpost": 62794, + "sim-fill": 62795, + "sim": 62796, + "skip-backward-btn-fill": 62797, + "skip-backward-btn": 62798, + "skip-backward-circle-fill": 62799, + "skip-backward-circle": 62800, + "skip-backward-fill": 62801, + "skip-backward": 62802, + "skip-end-btn-fill": 62803, + "skip-end-btn": 62804, + "skip-end-circle-fill": 62805, + "skip-end-circle": 62806, + "skip-end-fill": 62807, + "skip-end": 62808, + "skip-forward-btn-fill": 62809, + "skip-forward-btn": 62810, + "skip-forward-circle-fill": 62811, + "skip-forward-circle": 62812, + "skip-forward-fill": 62813, + "skip-forward": 62814, + "skip-start-btn-fill": 62815, + "skip-start-btn": 62816, + "skip-start-circle-fill": 62817, + "skip-start-circle": 62818, + "skip-start-fill": 62819, + "skip-start": 62820, + "slack": 62821, + "slash-circle-fill": 62822, + "slash-circle": 62823, + "slash-square-fill": 62824, + "slash-square": 62825, + "slash": 62826, + "sliders": 62827, + "smartwatch": 62828, + "snow": 62829, + "snow2": 62830, + "snow3": 62831, + "sort-alpha-down-alt": 62832, + "sort-alpha-down": 62833, + "sort-alpha-up-alt": 62834, + "sort-alpha-up": 62835, + "sort-down-alt": 62836, + "sort-down": 62837, + "sort-numeric-down-alt": 62838, + "sort-numeric-down": 62839, + "sort-numeric-up-alt": 62840, + "sort-numeric-up": 62841, + "sort-up-alt": 62842, + "sort-up": 62843, + "soundwave": 62844, + "speaker-fill": 62845, + "speaker": 62846, + "speedometer": 62847, + "speedometer2": 62848, + "spellcheck": 62849, + "square-fill": 62850, + "square-half": 62851, + "square": 62852, + "stack": 62853, + "star-fill": 62854, + "star-half": 62855, + "star": 62856, + "stars": 62857, + "stickies-fill": 62858, + "stickies": 62859, + "sticky-fill": 62860, + "sticky": 62861, + "stop-btn-fill": 62862, + "stop-btn": 62863, + "stop-circle-fill": 62864, + "stop-circle": 62865, + "stop-fill": 62866, + "stop": 62867, + "stoplights-fill": 62868, + "stoplights": 62869, + "stopwatch-fill": 62870, + "stopwatch": 62871, + "subtract": 62872, + "suit-club-fill": 62873, + "suit-club": 62874, + "suit-diamond-fill": 62875, + "suit-diamond": 62876, + "suit-heart-fill": 62877, + "suit-heart": 62878, + "suit-spade-fill": 62879, + "suit-spade": 62880, + "sun-fill": 62881, + "sun": 62882, + "sunglasses": 62883, + "sunrise-fill": 62884, + "sunrise": 62885, + "sunset-fill": 62886, + "sunset": 62887, + "symmetry-horizontal": 62888, + "symmetry-vertical": 62889, + "table": 62890, + "tablet-fill": 62891, + "tablet-landscape-fill": 62892, + "tablet-landscape": 62893, + "tablet": 62894, + "tag-fill": 62895, + "tag": 62896, + "tags-fill": 62897, + "tags": 62898, + "telegram": 62899, + "telephone-fill": 62900, + "telephone-forward-fill": 62901, + "telephone-forward": 62902, + "telephone-inbound-fill": 62903, + "telephone-inbound": 62904, + "telephone-minus-fill": 62905, + "telephone-minus": 62906, + "telephone-outbound-fill": 62907, + "telephone-outbound": 62908, + "telephone-plus-fill": 62909, + "telephone-plus": 62910, + "telephone-x-fill": 62911, + "telephone-x": 62912, + "telephone": 62913, + "terminal-fill": 62914, + "terminal": 62915, + "text-center": 62916, + "text-indent-left": 62917, + "text-indent-right": 62918, + "text-left": 62919, + "text-paragraph": 62920, + "text-right": 62921, + "textarea-resize": 62922, + "textarea-t": 62923, + "textarea": 62924, + "thermometer-half": 62925, + "thermometer-high": 62926, + "thermometer-low": 62927, + "thermometer-snow": 62928, + "thermometer-sun": 62929, + "thermometer": 62930, + "three-dots-vertical": 62931, + "three-dots": 62932, + "toggle-off": 62933, + "toggle-on": 62934, + "toggle2-off": 62935, + "toggle2-on": 62936, + "toggles": 62937, + "toggles2": 62938, + "tools": 62939, + "tornado": 62940, + "trash-fill": 62941, + "trash": 62942, + "trash2-fill": 62943, + "trash2": 62944, + "tree-fill": 62945, + "tree": 62946, + "triangle-fill": 62947, + "triangle-half": 62948, + "triangle": 62949, + "trophy-fill": 62950, + "trophy": 62951, + "tropical-storm": 62952, + "truck-flatbed": 62953, + "truck": 62954, + "tsunami": 62955, + "tv-fill": 62956, + "tv": 62957, + "twitch": 62958, + "twitter": 62959, + "type-bold": 62960, + "type-h1": 62961, + "type-h2": 62962, + "type-h3": 62963, + "type-italic": 62964, + "type-strikethrough": 62965, + "type-underline": 62966, + "type": 62967, + "ui-checks-grid": 62968, + "ui-checks": 62969, + "ui-radios-grid": 62970, + "ui-radios": 62971, + "umbrella-fill": 62972, + "umbrella": 62973, + "union": 62974, + "unlock-fill": 62975, + "unlock": 62976, + "upc-scan": 62977, + "upc": 62978, + "upload": 62979, + "vector-pen": 62980, + "view-list": 62981, + "view-stacked": 62982, + "vinyl-fill": 62983, + "vinyl": 62984, + "voicemail": 62985, + "volume-down-fill": 62986, + "volume-down": 62987, + "volume-mute-fill": 62988, + "volume-mute": 62989, + "volume-off-fill": 62990, + "volume-off": 62991, + "volume-up-fill": 62992, + "volume-up": 62993, + "vr": 62994, + "wallet-fill": 62995, + "wallet": 62996, + "wallet2": 62997, + "watch": 62998, + "water": 62999, + "whatsapp": 63000, + "wifi-1": 63001, + "wifi-2": 63002, + "wifi-off": 63003, + "wifi": 63004, + "wind": 63005, + "window-dock": 63006, + "window-sidebar": 63007, + "window": 63008, + "wrench": 63009, + "x-circle-fill": 63010, + "x-circle": 63011, + "x-diamond-fill": 63012, + "x-diamond": 63013, + "x-octagon-fill": 63014, + "x-octagon": 63015, + "x-square-fill": 63016, + "x-square": 63017, + "x": 63018, + "youtube": 63019, + "zoom-in": 63020, + "zoom-out": 63021, + "bank": 63022, + "bank2": 63023, + "bell-slash-fill": 63024, + "bell-slash": 63025, + "cash-coin": 63026, + "check-lg": 63027, + "coin": 63028, + "currency-bitcoin": 63029, + "currency-dollar": 63030, + "currency-euro": 63031, + "currency-exchange": 63032, + "currency-pound": 63033, + "currency-yen": 63034, + "dash-lg": 63035, + "exclamation-lg": 63036, + "file-earmark-pdf-fill": 63037, + "file-earmark-pdf": 63038, + "file-pdf-fill": 63039, + "file-pdf": 63040, + "gender-ambiguous": 63041, + "gender-female": 63042, + "gender-male": 63043, + "gender-trans": 63044, + "headset-vr": 63045, + "info-lg": 63046, + "mastodon": 63047, + "messenger": 63048, + "piggy-bank-fill": 63049, + "piggy-bank": 63050, + "pin-map-fill": 63051, + "pin-map": 63052, + "plus-lg": 63053, + "question-lg": 63054, + "recycle": 63055, + "reddit": 63056, + "safe-fill": 63057, + "safe2-fill": 63058, + "safe2": 63059, + "sd-card-fill": 63060, + "sd-card": 63061, + "skype": 63062, + "slash-lg": 63063, + "translate": 63064, + "x-lg": 63065, + "safe": 63066, + "apple": 63067, + "microsoft": 63069, + "windows": 63070, + "behance": 63068, + "dribbble": 63071, + "line": 63072, + "medium": 63073, + "paypal": 63074, + "pinterest": 63075, + "signal": 63076, + "snapchat": 63077, + "spotify": 63078, + "stack-overflow": 63079, + "strava": 63080, + "wordpress": 63081, + "vimeo": 63082, + "activity": 63083, + "easel2-fill": 63084, + "easel2": 63085, + "easel3-fill": 63086, + "easel3": 63087, + "fan": 63088, + "fingerprint": 63089, + "graph-down-arrow": 63090, + "graph-up-arrow": 63091, + "hypnotize": 63092, + "magic": 63093, + "person-rolodex": 63094, + "person-video": 63095, + "person-video2": 63096, + "person-video3": 63097, + "person-workspace": 63098, + "radioactive": 63099, + "webcam-fill": 63100, + "webcam": 63101, + "yin-yang": 63102, + "bandaid-fill": 63104, + "bandaid": 63105, + "bluetooth": 63106, + "body-text": 63107, + "boombox": 63108, + "boxes": 63109, + "dpad-fill": 63110, + "dpad": 63111, + "ear-fill": 63112, + "ear": 63113, + "envelope-check-1": 63114, + "envelope-check-fill": 63115, + "envelope-check": 63116, + "envelope-dash-1": 63117, + "envelope-dash-fill": 63118, + "envelope-dash": 63119, + "envelope-exclamation-1": 63120, + "envelope-exclamation-fill": 63121, + "envelope-exclamation": 63122, + "envelope-plus-fill": 63123, + "envelope-plus": 63124, + "envelope-slash-1": 63125, + "envelope-slash-fill": 63126, + "envelope-slash": 63127, + "envelope-x-1": 63128, + "envelope-x-fill": 63129, + "envelope-x": 63130, + "explicit-fill": 63131, + "explicit": 63132, + "git": 63133, + "infinity": 63134, + "list-columns-reverse": 63135, + "list-columns": 63136, + "meta": 63137, + "mortorboard-fill": 63138, + "mortorboard": 63139, + "nintendo-switch": 63140, + "pc-display-horizontal": 63141, + "pc-display": 63142, + "pc-horizontal": 63143, + "pc": 63144, + "playstation": 63145, + "plus-slash-minus": 63146, + "projector-fill": 63147, + "projector": 63148, + "qr-code-scan": 63149, + "qr-code": 63150, + "quora": 63151, + "quote": 63152, + "robot": 63153, + "send-check-fill": 63154, + "send-check": 63155, + "send-dash-fill": 63156, + "send-dash": 63157, + "send-exclamation-1": 63158, + "send-exclamation-fill": 63159, + "send-exclamation": 63160, + "send-fill": 63161, + "send-plus-fill": 63162, + "send-plus": 63163, + "send-slash-fill": 63164, + "send-slash": 63165, + "send-x-fill": 63166, + "send-x": 63167, + "send": 63168, + "steam": 63169, + "terminal-dash-1": 63170, + "terminal-dash": 63171, + "terminal-plus": 63172, + "terminal-split": 63173, + "ticket-detailed-fill": 63174, + "ticket-detailed": 63175, + "ticket-fill": 63176, + "ticket-perforated-fill": 63177, + "ticket-perforated": 63178, + "ticket": 63179, + "tiktok": 63180, + "window-dash": 63181, + "window-desktop": 63182, + "window-fullscreen": 63183, + "window-plus": 63184, + "window-split": 63185, + "window-stack": 63186, + "window-x": 63187, + "xbox": 63188, + "ethernet": 63189, + "hdmi-fill": 63190, + "hdmi": 63191, + "usb-c-fill": 63192, + "usb-c": 63193, + "usb-fill": 63194, + "usb-plug-fill": 63195, + "usb-plug": 63196, + "usb-symbol": 63197, + "usb": 63198, + "boombox-fill": 63199, + "displayport-1": 63200, + "displayport": 63201, + "gpu-card": 63202, + "memory": 63203, + "modem-fill": 63204, + "modem": 63205, + "motherboard-fill": 63206, + "motherboard": 63207, + "optical-audio-fill": 63208, + "optical-audio": 63209, + "pci-card": 63210, + "router-fill": 63211, + "router": 63212, + "ssd-fill": 63213, + "ssd": 63214, + "thunderbolt-fill": 63215, + "thunderbolt": 63216, + "usb-drive-fill": 63217, + "usb-drive": 63218, + "usb-micro-fill": 63219, + "usb-micro": 63220, + "usb-mini-fill": 63221, + "usb-mini": 63222, + "cloud-haze2": 63223, + "device-hdd-fill": 63224, + "device-hdd": 63225, + "device-ssd-fill": 63226, + "device-ssd": 63227, + "displayport-fill": 63228, + "mortarboard-fill": 63229, + "mortarboard": 63230, + "terminal-x": 63231, + "arrow-through-heart-fill": 63232, + "arrow-through-heart": 63233, + "badge-sd-fill": 63234, + "badge-sd": 63235, + "bag-heart-fill": 63236, + "bag-heart": 63237, + "balloon-fill": 63238, + "balloon-heart-fill": 63239, + "balloon-heart": 63240, + "balloon": 63241, + "box2-fill": 63242, + "box2-heart-fill": 63243, + "box2-heart": 63244, + "box2": 63245, + "braces-asterisk": 63246, + "calendar-heart-fill": 63247, + "calendar-heart": 63248, + "calendar2-heart-fill": 63249, + "calendar2-heart": 63250, + "chat-heart-fill": 63251, + "chat-heart": 63252, + "chat-left-heart-fill": 63253, + "chat-left-heart": 63254, + "chat-right-heart-fill": 63255, + "chat-right-heart": 63256, + "chat-square-heart-fill": 63257, + "chat-square-heart": 63258, + "clipboard-check-fill": 63259, + "clipboard-data-fill": 63260, + "clipboard-fill": 63261, + "clipboard-heart-fill": 63262, + "clipboard-heart": 63263, + "clipboard-minus-fill": 63264, + "clipboard-plus-fill": 63265, + "clipboard-pulse": 63266, + "clipboard-x-fill": 63267, + "clipboard2-check-fill": 63268, + "clipboard2-check": 63269, + "clipboard2-data-fill": 63270, + "clipboard2-data": 63271, + "clipboard2-fill": 63272, + "clipboard2-heart-fill": 63273, + "clipboard2-heart": 63274, + "clipboard2-minus-fill": 63275, + "clipboard2-minus": 63276, + "clipboard2-plus-fill": 63277, + "clipboard2-plus": 63278, + "clipboard2-pulse-fill": 63279, + "clipboard2-pulse": 63280, + "clipboard2-x-fill": 63281, + "clipboard2-x": 63282, + "clipboard2": 63283, + "emoji-kiss-fill": 63284, + "emoji-kiss": 63285, + "envelope-heart-fill": 63286, + "envelope-heart": 63287, + "envelope-open-heart-fill": 63288, + "envelope-open-heart": 63289, + "envelope-paper-fill": 63290, + "envelope-paper-heart-fill": 63291, + "envelope-paper-heart": 63292, + "envelope-paper": 63293, + "filetype-aac": 63294, + "filetype-ai": 63295, + "filetype-bmp": 63296, + "filetype-cs": 63297, + "filetype-css": 63298, + "filetype-csv": 63299, + "filetype-doc": 63300, + "filetype-docx": 63301, + "filetype-exe": 63302, + "filetype-gif": 63303, + "filetype-heic": 63304, + "filetype-html": 63305, + "filetype-java": 63306, + "filetype-jpg": 63307, + "filetype-js": 63308, + "filetype-jsx": 63309, + "filetype-key": 63310, + "filetype-m4p": 63311, + "filetype-md": 63312, + "filetype-mdx": 63313, + "filetype-mov": 63314, + "filetype-mp3": 63315, + "filetype-mp4": 63316, + "filetype-otf": 63317, + "filetype-pdf": 63318, + "filetype-php": 63319, + "filetype-png": 63320, + "filetype-ppt-1": 63321, + "filetype-ppt": 63322, + "filetype-psd": 63323, + "filetype-py": 63324, + "filetype-raw": 63325, + "filetype-rb": 63326, + "filetype-sass": 63327, + "filetype-scss": 63328, + "filetype-sh": 63329, + "filetype-svg": 63330, + "filetype-tiff": 63331, + "filetype-tsx": 63332, + "filetype-ttf": 63333, + "filetype-txt": 63334, + "filetype-wav": 63335, + "filetype-woff": 63336, + "filetype-xls-1": 63337, + "filetype-xls": 63338, + "filetype-xml": 63339, + "filetype-yml": 63340, + "heart-arrow": 63341, + "heart-pulse-fill": 63342, + "heart-pulse": 63343, + "heartbreak-fill": 63344, + "heartbreak": 63345, + "hearts": 63346, + "hospital-fill": 63347, + "hospital": 63348, + "house-heart-fill": 63349, + "house-heart": 63350, + "incognito": 63351, + "magnet-fill": 63352, + "magnet": 63353, + "person-heart": 63354, + "person-hearts": 63355, + "phone-flip": 63356, + "plugin": 63357, + "postage-fill": 63358, + "postage-heart-fill": 63359, + "postage-heart": 63360, + "postage": 63361, + "postcard-fill": 63362, + "postcard-heart-fill": 63363, + "postcard-heart": 63364, + "postcard": 63365, + "search-heart-fill": 63366, + "search-heart": 63367, + "sliders2-vertical": 63368, + "sliders2": 63369, + "trash3-fill": 63370, + "trash3": 63371, + "valentine": 63372, + "valentine2": 63373, + "wrench-adjustable-circle-fill": 63374, + "wrench-adjustable-circle": 63375, + "wrench-adjustable": 63376, + "filetype-json": 63377, + "filetype-pptx": 63378, + "filetype-xlsx": 63379, + "1-circle-1": 63380, + "1-circle-fill-1": 63381, + "1-circle-fill": 63382, + "1-circle": 63383, + "1-square-fill": 63384, + "1-square": 63385, + "2-circle-1": 63386, + "2-circle-fill-1": 63387, + "2-circle-fill": 63388, + "2-circle": 63389, + "2-square-fill": 63390, + "2-square": 63391, + "3-circle-1": 63392, + "3-circle-fill-1": 63393, + "3-circle-fill": 63394, + "3-circle": 63395, + "3-square-fill": 63396, + "3-square": 63397, + "4-circle-1": 63398, + "4-circle-fill-1": 63399, + "4-circle-fill": 63400, + "4-circle": 63401, + "4-square-fill": 63402, + "4-square": 63403, + "5-circle-1": 63404, + "5-circle-fill-1": 63405, + "5-circle-fill": 63406, + "5-circle": 63407, + "5-square-fill": 63408, + "5-square": 63409, + "6-circle-1": 63410, + "6-circle-fill-1": 63411, + "6-circle-fill": 63412, + "6-circle": 63413, + "6-square-fill": 63414, + "6-square": 63415, + "7-circle-1": 63416, + "7-circle-fill-1": 63417, + "7-circle-fill": 63418, + "7-circle": 63419, + "7-square-fill": 63420, + "7-square": 63421, + "8-circle-1": 63422, + "8-circle-fill-1": 63423, + "8-circle-fill": 63424, + "8-circle": 63425, + "8-square-fill": 63426, + "8-square": 63427, + "9-circle-1": 63428, + "9-circle-fill-1": 63429, + "9-circle-fill": 63430, + "9-circle": 63431, + "9-square-fill": 63432, + "9-square": 63433, + "airplane-engines-fill": 63434, + "airplane-engines": 63435, + "airplane-fill": 63436, + "airplane": 63437, + "alexa": 63438, + "alipay": 63439, + "android": 63440, + "android2": 63441, + "box-fill": 63442, + "box-seam-fill": 63443, + "browser-chrome": 63444, + "browser-edge": 63445, + "browser-firefox": 63446, + "browser-safari": 63447, + "c-circle-1": 63448, + "c-circle-fill-1": 63449, + "c-circle-fill": 63450, + "c-circle": 63451, + "c-square-fill": 63452, + "c-square": 63453, + "capsule-pill": 63454, + "capsule": 63455, + "car-front-fill": 63456, + "car-front": 63457, + "cassette-fill": 63458, + "cassette": 63459, + "cc-circle-1": 63460, + "cc-circle-fill-1": 63461, + "cc-circle-fill": 63462, + "cc-circle": 63463, + "cc-square-fill": 63464, + "cc-square": 63465, + "cup-hot-fill": 63466, + "cup-hot": 63467, + "currency-rupee": 63468, + "dropbox": 63469, + "escape": 63470, + "fast-forward-btn-fill": 63471, + "fast-forward-btn": 63472, + "fast-forward-circle-fill": 63473, + "fast-forward-circle": 63474, + "fast-forward-fill": 63475, + "fast-forward": 63476, + "filetype-sql": 63477, + "fire": 63478, + "google-play": 63479, + "h-circle-1": 63480, + "h-circle-fill-1": 63481, + "h-circle-fill": 63482, + "h-circle": 63483, + "h-square-fill": 63484, + "h-square": 63485, + "indent": 63486, + "lungs-fill": 63487, + "lungs": 63488, + "microsoft-teams": 63489, + "p-circle-1": 63490, + "p-circle-fill-1": 63491, + "p-circle-fill": 63492, + "p-circle": 63493, + "p-square-fill": 63494, + "p-square": 63495, + "pass-fill": 63496, + "pass": 63497, + "prescription": 63498, + "prescription2": 63499, + "r-circle-1": 63500, + "r-circle-fill-1": 63501, + "r-circle-fill": 63502, + "r-circle": 63503, + "r-square-fill": 63504, + "r-square": 63505, + "repeat-1": 63506, + "repeat": 63507, + "rewind-btn-fill": 63508, + "rewind-btn": 63509, + "rewind-circle-fill": 63510, + "rewind-circle": 63511, + "rewind-fill": 63512, + "rewind": 63513, + "train-freight-front-fill": 63514, + "train-freight-front": 63515, + "train-front-fill": 63516, + "train-front": 63517, + "train-lightrail-front-fill": 63518, + "train-lightrail-front": 63519, + "truck-front-fill": 63520, + "truck-front": 63521, + "ubuntu": 63522, + "unindent": 63523, + "unity": 63524, + "universal-access-circle": 63525, + "universal-access": 63526, + "virus": 63527, + "virus2": 63528, + "wechat": 63529, + "yelp": 63530, + "sign-stop-fill": 63531, + "sign-stop-lights-fill": 63532, + "sign-stop-lights": 63533, + "sign-stop": 63534, + "sign-turn-left-fill": 63535, + "sign-turn-left": 63536, + "sign-turn-right-fill": 63537, + "sign-turn-right": 63538, + "sign-turn-slight-left-fill": 63539, + "sign-turn-slight-left": 63540, + "sign-turn-slight-right-fill": 63541, + "sign-turn-slight-right": 63542, + "sign-yield-fill": 63543, + "sign-yield": 63544, + "ev-station-fill": 63545, + "ev-station": 63546, + "fuel-pump-diesel-fill": 63547, + "fuel-pump-diesel": 63548, + "fuel-pump-fill": 63549, + "fuel-pump": 63550, + "0-circle-fill": 63551, + "0-circle": 63552, + "0-square-fill": 63553, + "0-square": 63554, + "rocket-fill": 63555, + "rocket-takeoff-fill": 63556, + "rocket-takeoff": 63557, + "rocket": 63558, + "stripe": 63559, + "subscript": 63560, + "superscript": 63561, + "trello": 63562, + "envelope-at-fill": 63563, + "envelope-at": 63564, + "regex": 63565, + "text-wrap": 63566, + "sign-dead-end-fill": 63567, + "sign-dead-end": 63568, + "sign-do-not-enter-fill": 63569, + "sign-do-not-enter": 63570, + "sign-intersection-fill": 63571, + "sign-intersection-side-fill": 63572, + "sign-intersection-side": 63573, + "sign-intersection-t-fill": 63574, + "sign-intersection-t": 63575, + "sign-intersection-y-fill": 63576, + "sign-intersection-y": 63577, + "sign-intersection": 63578, + "sign-merge-left-fill": 63579, + "sign-merge-left": 63580, + "sign-merge-right-fill": 63581, + "sign-merge-right": 63582, + "sign-no-left-turn-fill": 63583, + "sign-no-left-turn": 63584, + "sign-no-parking-fill": 63585, + "sign-no-parking": 63586, + "sign-no-right-turn-fill": 63587, + "sign-no-right-turn": 63588, + "sign-railroad-fill": 63589, + "sign-railroad": 63590, + "building-add": 63591, + "building-check": 63592, + "building-dash": 63593, + "building-down": 63594, + "building-exclamation": 63595, + "building-fill-add": 63596, + "building-fill-check": 63597, + "building-fill-dash": 63598, + "building-fill-down": 63599, + "building-fill-exclamation": 63600, + "building-fill-gear": 63601, + "building-fill-lock": 63602, + "building-fill-slash": 63603, + "building-fill-up": 63604, + "building-fill-x": 63605, + "building-fill": 63606, + "building-gear": 63607, + "building-lock": 63608, + "building-slash": 63609, + "building-up": 63610, + "building-x": 63611, + "buildings-fill": 63612, + "buildings": 63613, + "bus-front-fill": 63614, + "bus-front": 63615, + "ev-front-fill": 63616, + "ev-front": 63617, + "globe-americas": 63618, + "globe-asia-australia": 63619, + "globe-central-south-asia": 63620, + "globe-europe-africa": 63621, + "house-add-fill": 63622, + "house-add": 63623, + "house-check-fill": 63624, + "house-check": 63625, + "house-dash-fill": 63626, + "house-dash": 63627, + "house-down-fill": 63628, + "house-down": 63629, + "house-exclamation-fill": 63630, + "house-exclamation": 63631, + "house-gear-fill": 63632, + "house-gear": 63633, + "house-lock-fill": 63634, + "house-lock": 63635, + "house-slash-fill": 63636, + "house-slash": 63637, + "house-up-fill": 63638, + "house-up": 63639, + "house-x-fill": 63640, + "house-x": 63641, + "person-add": 63642, + "person-down": 63643, + "person-exclamation": 63644, + "person-fill-add": 63645, + "person-fill-check": 63646, + "person-fill-dash": 63647, + "person-fill-down": 63648, + "person-fill-exclamation": 63649, + "person-fill-gear": 63650, + "person-fill-lock": 63651, + "person-fill-slash": 63652, + "person-fill-up": 63653, + "person-fill-x": 63654, + "person-gear": 63655, + "person-lock": 63656, + "person-slash": 63657, + "person-up": 63658, + "scooter": 63659, + "taxi-front-fill": 63660, + "taxi-front": 63661, + "amd": 63662, + "database-add": 63663, + "database-check": 63664, + "database-dash": 63665, + "database-down": 63666, + "database-exclamation": 63667, + "database-fill-add": 63668, + "database-fill-check": 63669, + "database-fill-dash": 63670, + "database-fill-down": 63671, + "database-fill-exclamation": 63672, + "database-fill-gear": 63673, + "database-fill-lock": 63674, + "database-fill-slash": 63675, + "database-fill-up": 63676, + "database-fill-x": 63677, + "database-fill": 63678, + "database-gear": 63679, + "database-lock": 63680, + "database-slash": 63681, + "database-up": 63682, + "database-x": 63683, + "database": 63684, + "houses-fill": 63685, + "houses": 63686, + "nvidia": 63687, + "person-vcard-fill": 63688, + "person-vcard": 63689, + "sina-weibo": 63690, + "tencent-qq": 63691, + "wikipedia": 63692 +} \ No newline at end of file diff --git a/src/assets/vendor/bootstrap-icons/bootstrap-icons.scss b/src/assets/vendor/bootstrap-icons/bootstrap-icons.scss new file mode 100644 index 0000000..ab7bb84 --- /dev/null +++ b/src/assets/vendor/bootstrap-icons/bootstrap-icons.scss @@ -0,0 +1,4022 @@ +$bootstrap-icons-font: "bootstrap-icons" !default; +$bootstrap-icons-font-dir: "./fonts" !default; +$bootstrap-icons-font-file: #{$bootstrap-icons-font-dir}/#{$bootstrap-icons-font} !default; +$bootstrap-icons-font-hash: "24e3eb84d0bcaf83d77f904c78ac1f47" !default; +$bootstrap-icons-font-src: url("#{$bootstrap-icons-font-file}.woff2?#{$bootstrap-icons-font-hash}") format("woff2"), url("#{$bootstrap-icons-font-file}.woff?#{$bootstrap-icons-font-hash}") format("woff") !default; + +@font-face { + font-display: block; + font-family: $bootstrap-icons-font; + src: $bootstrap-icons-font-src; +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: $bootstrap-icons-font !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +$bootstrap-icons-map: ( + "123": "\f67f", + "alarm-fill": "\f101", + "alarm": "\f102", + "align-bottom": "\f103", + "align-center": "\f104", + "align-end": "\f105", + "align-middle": "\f106", + "align-start": "\f107", + "align-top": "\f108", + "alt": "\f109", + "app-indicator": "\f10a", + "app": "\f10b", + "archive-fill": "\f10c", + "archive": "\f10d", + "arrow-90deg-down": "\f10e", + "arrow-90deg-left": "\f10f", + "arrow-90deg-right": "\f110", + "arrow-90deg-up": "\f111", + "arrow-bar-down": "\f112", + "arrow-bar-left": "\f113", + "arrow-bar-right": "\f114", + "arrow-bar-up": "\f115", + "arrow-clockwise": "\f116", + "arrow-counterclockwise": "\f117", + "arrow-down-circle-fill": "\f118", + "arrow-down-circle": "\f119", + "arrow-down-left-circle-fill": "\f11a", + "arrow-down-left-circle": "\f11b", + "arrow-down-left-square-fill": "\f11c", + "arrow-down-left-square": "\f11d", + "arrow-down-left": "\f11e", + "arrow-down-right-circle-fill": "\f11f", + "arrow-down-right-circle": "\f120", + "arrow-down-right-square-fill": "\f121", + "arrow-down-right-square": "\f122", + "arrow-down-right": "\f123", + "arrow-down-short": "\f124", + "arrow-down-square-fill": "\f125", + "arrow-down-square": "\f126", + "arrow-down-up": "\f127", + "arrow-down": "\f128", + "arrow-left-circle-fill": "\f129", + "arrow-left-circle": "\f12a", + "arrow-left-right": "\f12b", + "arrow-left-short": "\f12c", + "arrow-left-square-fill": "\f12d", + "arrow-left-square": "\f12e", + "arrow-left": "\f12f", + "arrow-repeat": "\f130", + "arrow-return-left": "\f131", + "arrow-return-right": "\f132", + "arrow-right-circle-fill": "\f133", + "arrow-right-circle": "\f134", + "arrow-right-short": "\f135", + "arrow-right-square-fill": "\f136", + "arrow-right-square": "\f137", + "arrow-right": "\f138", + "arrow-up-circle-fill": "\f139", + "arrow-up-circle": "\f13a", + "arrow-up-left-circle-fill": "\f13b", + "arrow-up-left-circle": "\f13c", + "arrow-up-left-square-fill": "\f13d", + "arrow-up-left-square": "\f13e", + "arrow-up-left": "\f13f", + "arrow-up-right-circle-fill": "\f140", + "arrow-up-right-circle": "\f141", + "arrow-up-right-square-fill": "\f142", + "arrow-up-right-square": "\f143", + "arrow-up-right": "\f144", + "arrow-up-short": "\f145", + "arrow-up-square-fill": "\f146", + "arrow-up-square": "\f147", + "arrow-up": "\f148", + "arrows-angle-contract": "\f149", + "arrows-angle-expand": "\f14a", + "arrows-collapse": "\f14b", + "arrows-expand": "\f14c", + "arrows-fullscreen": "\f14d", + "arrows-move": "\f14e", + "aspect-ratio-fill": "\f14f", + "aspect-ratio": "\f150", + "asterisk": "\f151", + "at": "\f152", + "award-fill": "\f153", + "award": "\f154", + "back": "\f155", + "backspace-fill": "\f156", + "backspace-reverse-fill": "\f157", + "backspace-reverse": "\f158", + "backspace": "\f159", + "badge-3d-fill": "\f15a", + "badge-3d": "\f15b", + "badge-4k-fill": "\f15c", + "badge-4k": "\f15d", + "badge-8k-fill": "\f15e", + "badge-8k": "\f15f", + "badge-ad-fill": "\f160", + "badge-ad": "\f161", + "badge-ar-fill": "\f162", + "badge-ar": "\f163", + "badge-cc-fill": "\f164", + "badge-cc": "\f165", + "badge-hd-fill": "\f166", + "badge-hd": "\f167", + "badge-tm-fill": "\f168", + "badge-tm": "\f169", + "badge-vo-fill": "\f16a", + "badge-vo": "\f16b", + "badge-vr-fill": "\f16c", + "badge-vr": "\f16d", + "badge-wc-fill": "\f16e", + "badge-wc": "\f16f", + "bag-check-fill": "\f170", + "bag-check": "\f171", + "bag-dash-fill": "\f172", + "bag-dash": "\f173", + "bag-fill": "\f174", + "bag-plus-fill": "\f175", + "bag-plus": "\f176", + "bag-x-fill": "\f177", + "bag-x": "\f178", + "bag": "\f179", + "bar-chart-fill": "\f17a", + "bar-chart-line-fill": "\f17b", + "bar-chart-line": "\f17c", + "bar-chart-steps": "\f17d", + "bar-chart": "\f17e", + "basket-fill": "\f17f", + "basket": "\f180", + "basket2-fill": "\f181", + "basket2": "\f182", + "basket3-fill": "\f183", + "basket3": "\f184", + "battery-charging": "\f185", + "battery-full": "\f186", + "battery-half": "\f187", + "battery": "\f188", + "bell-fill": "\f189", + "bell": "\f18a", + "bezier": "\f18b", + "bezier2": "\f18c", + "bicycle": "\f18d", + "binoculars-fill": "\f18e", + "binoculars": "\f18f", + "blockquote-left": "\f190", + "blockquote-right": "\f191", + "book-fill": "\f192", + "book-half": "\f193", + "book": "\f194", + "bookmark-check-fill": "\f195", + "bookmark-check": "\f196", + "bookmark-dash-fill": "\f197", + "bookmark-dash": "\f198", + "bookmark-fill": "\f199", + "bookmark-heart-fill": "\f19a", + "bookmark-heart": "\f19b", + "bookmark-plus-fill": "\f19c", + "bookmark-plus": "\f19d", + "bookmark-star-fill": "\f19e", + "bookmark-star": "\f19f", + "bookmark-x-fill": "\f1a0", + "bookmark-x": "\f1a1", + "bookmark": "\f1a2", + "bookmarks-fill": "\f1a3", + "bookmarks": "\f1a4", + "bookshelf": "\f1a5", + "bootstrap-fill": "\f1a6", + "bootstrap-reboot": "\f1a7", + "bootstrap": "\f1a8", + "border-all": "\f1a9", + "border-bottom": "\f1aa", + "border-center": "\f1ab", + "border-inner": "\f1ac", + "border-left": "\f1ad", + "border-middle": "\f1ae", + "border-outer": "\f1af", + "border-right": "\f1b0", + "border-style": "\f1b1", + "border-top": "\f1b2", + "border-width": "\f1b3", + "border": "\f1b4", + "bounding-box-circles": "\f1b5", + "bounding-box": "\f1b6", + "box-arrow-down-left": "\f1b7", + "box-arrow-down-right": "\f1b8", + "box-arrow-down": "\f1b9", + "box-arrow-in-down-left": "\f1ba", + "box-arrow-in-down-right": "\f1bb", + "box-arrow-in-down": "\f1bc", + "box-arrow-in-left": "\f1bd", + "box-arrow-in-right": "\f1be", + "box-arrow-in-up-left": "\f1bf", + "box-arrow-in-up-right": "\f1c0", + "box-arrow-in-up": "\f1c1", + "box-arrow-left": "\f1c2", + "box-arrow-right": "\f1c3", + "box-arrow-up-left": "\f1c4", + "box-arrow-up-right": "\f1c5", + "box-arrow-up": "\f1c6", + "box-seam": "\f1c7", + "box": "\f1c8", + "braces": "\f1c9", + "bricks": "\f1ca", + "briefcase-fill": "\f1cb", + "briefcase": "\f1cc", + "brightness-alt-high-fill": "\f1cd", + "brightness-alt-high": "\f1ce", + "brightness-alt-low-fill": "\f1cf", + "brightness-alt-low": "\f1d0", + "brightness-high-fill": "\f1d1", + "brightness-high": "\f1d2", + "brightness-low-fill": "\f1d3", + "brightness-low": "\f1d4", + "broadcast-pin": "\f1d5", + "broadcast": "\f1d6", + "brush-fill": "\f1d7", + "brush": "\f1d8", + "bucket-fill": "\f1d9", + "bucket": "\f1da", + "bug-fill": "\f1db", + "bug": "\f1dc", + "building": "\f1dd", + "bullseye": "\f1de", + "calculator-fill": "\f1df", + "calculator": "\f1e0", + "calendar-check-fill": "\f1e1", + "calendar-check": "\f1e2", + "calendar-date-fill": "\f1e3", + "calendar-date": "\f1e4", + "calendar-day-fill": "\f1e5", + "calendar-day": "\f1e6", + "calendar-event-fill": "\f1e7", + "calendar-event": "\f1e8", + "calendar-fill": "\f1e9", + "calendar-minus-fill": "\f1ea", + "calendar-minus": "\f1eb", + "calendar-month-fill": "\f1ec", + "calendar-month": "\f1ed", + "calendar-plus-fill": "\f1ee", + "calendar-plus": "\f1ef", + "calendar-range-fill": "\f1f0", + "calendar-range": "\f1f1", + "calendar-week-fill": "\f1f2", + "calendar-week": "\f1f3", + "calendar-x-fill": "\f1f4", + "calendar-x": "\f1f5", + "calendar": "\f1f6", + "calendar2-check-fill": "\f1f7", + "calendar2-check": "\f1f8", + "calendar2-date-fill": "\f1f9", + "calendar2-date": "\f1fa", + "calendar2-day-fill": "\f1fb", + "calendar2-day": "\f1fc", + "calendar2-event-fill": "\f1fd", + "calendar2-event": "\f1fe", + "calendar2-fill": "\f1ff", + "calendar2-minus-fill": "\f200", + "calendar2-minus": "\f201", + "calendar2-month-fill": "\f202", + "calendar2-month": "\f203", + "calendar2-plus-fill": "\f204", + "calendar2-plus": "\f205", + "calendar2-range-fill": "\f206", + "calendar2-range": "\f207", + "calendar2-week-fill": "\f208", + "calendar2-week": "\f209", + "calendar2-x-fill": "\f20a", + "calendar2-x": "\f20b", + "calendar2": "\f20c", + "calendar3-event-fill": "\f20d", + "calendar3-event": "\f20e", + "calendar3-fill": "\f20f", + "calendar3-range-fill": "\f210", + "calendar3-range": "\f211", + "calendar3-week-fill": "\f212", + "calendar3-week": "\f213", + "calendar3": "\f214", + "calendar4-event": "\f215", + "calendar4-range": "\f216", + "calendar4-week": "\f217", + "calendar4": "\f218", + "camera-fill": "\f219", + "camera-reels-fill": "\f21a", + "camera-reels": "\f21b", + "camera-video-fill": "\f21c", + "camera-video-off-fill": "\f21d", + "camera-video-off": "\f21e", + "camera-video": "\f21f", + "camera": "\f220", + "camera2": "\f221", + "capslock-fill": "\f222", + "capslock": "\f223", + "card-checklist": "\f224", + "card-heading": "\f225", + "card-image": "\f226", + "card-list": "\f227", + "card-text": "\f228", + "caret-down-fill": "\f229", + "caret-down-square-fill": "\f22a", + "caret-down-square": "\f22b", + "caret-down": "\f22c", + "caret-left-fill": "\f22d", + "caret-left-square-fill": "\f22e", + "caret-left-square": "\f22f", + "caret-left": "\f230", + "caret-right-fill": "\f231", + "caret-right-square-fill": "\f232", + "caret-right-square": "\f233", + "caret-right": "\f234", + "caret-up-fill": "\f235", + "caret-up-square-fill": "\f236", + "caret-up-square": "\f237", + "caret-up": "\f238", + "cart-check-fill": "\f239", + "cart-check": "\f23a", + "cart-dash-fill": "\f23b", + "cart-dash": "\f23c", + "cart-fill": "\f23d", + "cart-plus-fill": "\f23e", + "cart-plus": "\f23f", + "cart-x-fill": "\f240", + "cart-x": "\f241", + "cart": "\f242", + "cart2": "\f243", + "cart3": "\f244", + "cart4": "\f245", + "cash-stack": "\f246", + "cash": "\f247", + "cast": "\f248", + "chat-dots-fill": "\f249", + "chat-dots": "\f24a", + "chat-fill": "\f24b", + "chat-left-dots-fill": "\f24c", + "chat-left-dots": "\f24d", + "chat-left-fill": "\f24e", + "chat-left-quote-fill": "\f24f", + "chat-left-quote": "\f250", + "chat-left-text-fill": "\f251", + "chat-left-text": "\f252", + "chat-left": "\f253", + "chat-quote-fill": "\f254", + "chat-quote": "\f255", + "chat-right-dots-fill": "\f256", + "chat-right-dots": "\f257", + "chat-right-fill": "\f258", + "chat-right-quote-fill": "\f259", + "chat-right-quote": "\f25a", + "chat-right-text-fill": "\f25b", + "chat-right-text": "\f25c", + "chat-right": "\f25d", + "chat-square-dots-fill": "\f25e", + "chat-square-dots": "\f25f", + "chat-square-fill": "\f260", + "chat-square-quote-fill": "\f261", + "chat-square-quote": "\f262", + "chat-square-text-fill": "\f263", + "chat-square-text": "\f264", + "chat-square": "\f265", + "chat-text-fill": "\f266", + "chat-text": "\f267", + "chat": "\f268", + "check-all": "\f269", + "check-circle-fill": "\f26a", + "check-circle": "\f26b", + "check-square-fill": "\f26c", + "check-square": "\f26d", + "check": "\f26e", + "check2-all": "\f26f", + "check2-circle": "\f270", + "check2-square": "\f271", + "check2": "\f272", + "chevron-bar-contract": "\f273", + "chevron-bar-down": "\f274", + "chevron-bar-expand": "\f275", + "chevron-bar-left": "\f276", + "chevron-bar-right": "\f277", + "chevron-bar-up": "\f278", + "chevron-compact-down": "\f279", + "chevron-compact-left": "\f27a", + "chevron-compact-right": "\f27b", + "chevron-compact-up": "\f27c", + "chevron-contract": "\f27d", + "chevron-double-down": "\f27e", + "chevron-double-left": "\f27f", + "chevron-double-right": "\f280", + "chevron-double-up": "\f281", + "chevron-down": "\f282", + "chevron-expand": "\f283", + "chevron-left": "\f284", + "chevron-right": "\f285", + "chevron-up": "\f286", + "circle-fill": "\f287", + "circle-half": "\f288", + "circle-square": "\f289", + "circle": "\f28a", + "clipboard-check": "\f28b", + "clipboard-data": "\f28c", + "clipboard-minus": "\f28d", + "clipboard-plus": "\f28e", + "clipboard-x": "\f28f", + "clipboard": "\f290", + "clock-fill": "\f291", + "clock-history": "\f292", + "clock": "\f293", + "cloud-arrow-down-fill": "\f294", + "cloud-arrow-down": "\f295", + "cloud-arrow-up-fill": "\f296", + "cloud-arrow-up": "\f297", + "cloud-check-fill": "\f298", + "cloud-check": "\f299", + "cloud-download-fill": "\f29a", + "cloud-download": "\f29b", + "cloud-drizzle-fill": "\f29c", + "cloud-drizzle": "\f29d", + "cloud-fill": "\f29e", + "cloud-fog-fill": "\f29f", + "cloud-fog": "\f2a0", + "cloud-fog2-fill": "\f2a1", + "cloud-fog2": "\f2a2", + "cloud-hail-fill": "\f2a3", + "cloud-hail": "\f2a4", + "cloud-haze-1": "\f2a5", + "cloud-haze-fill": "\f2a6", + "cloud-haze": "\f2a7", + "cloud-haze2-fill": "\f2a8", + "cloud-lightning-fill": "\f2a9", + "cloud-lightning-rain-fill": "\f2aa", + "cloud-lightning-rain": "\f2ab", + "cloud-lightning": "\f2ac", + "cloud-minus-fill": "\f2ad", + "cloud-minus": "\f2ae", + "cloud-moon-fill": "\f2af", + "cloud-moon": "\f2b0", + "cloud-plus-fill": "\f2b1", + "cloud-plus": "\f2b2", + "cloud-rain-fill": "\f2b3", + "cloud-rain-heavy-fill": "\f2b4", + "cloud-rain-heavy": "\f2b5", + "cloud-rain": "\f2b6", + "cloud-slash-fill": "\f2b7", + "cloud-slash": "\f2b8", + "cloud-sleet-fill": "\f2b9", + "cloud-sleet": "\f2ba", + "cloud-snow-fill": "\f2bb", + "cloud-snow": "\f2bc", + "cloud-sun-fill": "\f2bd", + "cloud-sun": "\f2be", + "cloud-upload-fill": "\f2bf", + "cloud-upload": "\f2c0", + "cloud": "\f2c1", + "clouds-fill": "\f2c2", + "clouds": "\f2c3", + "cloudy-fill": "\f2c4", + "cloudy": "\f2c5", + "code-slash": "\f2c6", + "code-square": "\f2c7", + "code": "\f2c8", + "collection-fill": "\f2c9", + "collection-play-fill": "\f2ca", + "collection-play": "\f2cb", + "collection": "\f2cc", + "columns-gap": "\f2cd", + "columns": "\f2ce", + "command": "\f2cf", + "compass-fill": "\f2d0", + "compass": "\f2d1", + "cone-striped": "\f2d2", + "cone": "\f2d3", + "controller": "\f2d4", + "cpu-fill": "\f2d5", + "cpu": "\f2d6", + "credit-card-2-back-fill": "\f2d7", + "credit-card-2-back": "\f2d8", + "credit-card-2-front-fill": "\f2d9", + "credit-card-2-front": "\f2da", + "credit-card-fill": "\f2db", + "credit-card": "\f2dc", + "crop": "\f2dd", + "cup-fill": "\f2de", + "cup-straw": "\f2df", + "cup": "\f2e0", + "cursor-fill": "\f2e1", + "cursor-text": "\f2e2", + "cursor": "\f2e3", + "dash-circle-dotted": "\f2e4", + "dash-circle-fill": "\f2e5", + "dash-circle": "\f2e6", + "dash-square-dotted": "\f2e7", + "dash-square-fill": "\f2e8", + "dash-square": "\f2e9", + "dash": "\f2ea", + "diagram-2-fill": "\f2eb", + "diagram-2": "\f2ec", + "diagram-3-fill": "\f2ed", + "diagram-3": "\f2ee", + "diamond-fill": "\f2ef", + "diamond-half": "\f2f0", + "diamond": "\f2f1", + "dice-1-fill": "\f2f2", + "dice-1": "\f2f3", + "dice-2-fill": "\f2f4", + "dice-2": "\f2f5", + "dice-3-fill": "\f2f6", + "dice-3": "\f2f7", + "dice-4-fill": "\f2f8", + "dice-4": "\f2f9", + "dice-5-fill": "\f2fa", + "dice-5": "\f2fb", + "dice-6-fill": "\f2fc", + "dice-6": "\f2fd", + "disc-fill": "\f2fe", + "disc": "\f2ff", + "discord": "\f300", + "display-fill": "\f301", + "display": "\f302", + "distribute-horizontal": "\f303", + "distribute-vertical": "\f304", + "door-closed-fill": "\f305", + "door-closed": "\f306", + "door-open-fill": "\f307", + "door-open": "\f308", + "dot": "\f309", + "download": "\f30a", + "droplet-fill": "\f30b", + "droplet-half": "\f30c", + "droplet": "\f30d", + "earbuds": "\f30e", + "easel-fill": "\f30f", + "easel": "\f310", + "egg-fill": "\f311", + "egg-fried": "\f312", + "egg": "\f313", + "eject-fill": "\f314", + "eject": "\f315", + "emoji-angry-fill": "\f316", + "emoji-angry": "\f317", + "emoji-dizzy-fill": "\f318", + "emoji-dizzy": "\f319", + "emoji-expressionless-fill": "\f31a", + "emoji-expressionless": "\f31b", + "emoji-frown-fill": "\f31c", + "emoji-frown": "\f31d", + "emoji-heart-eyes-fill": "\f31e", + "emoji-heart-eyes": "\f31f", + "emoji-laughing-fill": "\f320", + "emoji-laughing": "\f321", + "emoji-neutral-fill": "\f322", + "emoji-neutral": "\f323", + "emoji-smile-fill": "\f324", + "emoji-smile-upside-down-fill": "\f325", + "emoji-smile-upside-down": "\f326", + "emoji-smile": "\f327", + "emoji-sunglasses-fill": "\f328", + "emoji-sunglasses": "\f329", + "emoji-wink-fill": "\f32a", + "emoji-wink": "\f32b", + "envelope-fill": "\f32c", + "envelope-open-fill": "\f32d", + "envelope-open": "\f32e", + "envelope": "\f32f", + "eraser-fill": "\f330", + "eraser": "\f331", + "exclamation-circle-fill": "\f332", + "exclamation-circle": "\f333", + "exclamation-diamond-fill": "\f334", + "exclamation-diamond": "\f335", + "exclamation-octagon-fill": "\f336", + "exclamation-octagon": "\f337", + "exclamation-square-fill": "\f338", + "exclamation-square": "\f339", + "exclamation-triangle-fill": "\f33a", + "exclamation-triangle": "\f33b", + "exclamation": "\f33c", + "exclude": "\f33d", + "eye-fill": "\f33e", + "eye-slash-fill": "\f33f", + "eye-slash": "\f340", + "eye": "\f341", + "eyedropper": "\f342", + "eyeglasses": "\f343", + "facebook": "\f344", + "file-arrow-down-fill": "\f345", + "file-arrow-down": "\f346", + "file-arrow-up-fill": "\f347", + "file-arrow-up": "\f348", + "file-bar-graph-fill": "\f349", + "file-bar-graph": "\f34a", + "file-binary-fill": "\f34b", + "file-binary": "\f34c", + "file-break-fill": "\f34d", + "file-break": "\f34e", + "file-check-fill": "\f34f", + "file-check": "\f350", + "file-code-fill": "\f351", + "file-code": "\f352", + "file-diff-fill": "\f353", + "file-diff": "\f354", + "file-earmark-arrow-down-fill": "\f355", + "file-earmark-arrow-down": "\f356", + "file-earmark-arrow-up-fill": "\f357", + "file-earmark-arrow-up": "\f358", + "file-earmark-bar-graph-fill": "\f359", + "file-earmark-bar-graph": "\f35a", + "file-earmark-binary-fill": "\f35b", + "file-earmark-binary": "\f35c", + "file-earmark-break-fill": "\f35d", + "file-earmark-break": "\f35e", + "file-earmark-check-fill": "\f35f", + "file-earmark-check": "\f360", + "file-earmark-code-fill": "\f361", + "file-earmark-code": "\f362", + "file-earmark-diff-fill": "\f363", + "file-earmark-diff": "\f364", + "file-earmark-easel-fill": "\f365", + "file-earmark-easel": "\f366", + "file-earmark-excel-fill": "\f367", + "file-earmark-excel": "\f368", + "file-earmark-fill": "\f369", + "file-earmark-font-fill": "\f36a", + "file-earmark-font": "\f36b", + "file-earmark-image-fill": "\f36c", + "file-earmark-image": "\f36d", + "file-earmark-lock-fill": "\f36e", + "file-earmark-lock": "\f36f", + "file-earmark-lock2-fill": "\f370", + "file-earmark-lock2": "\f371", + "file-earmark-medical-fill": "\f372", + "file-earmark-medical": "\f373", + "file-earmark-minus-fill": "\f374", + "file-earmark-minus": "\f375", + "file-earmark-music-fill": "\f376", + "file-earmark-music": "\f377", + "file-earmark-person-fill": "\f378", + "file-earmark-person": "\f379", + "file-earmark-play-fill": "\f37a", + "file-earmark-play": "\f37b", + "file-earmark-plus-fill": "\f37c", + "file-earmark-plus": "\f37d", + "file-earmark-post-fill": "\f37e", + "file-earmark-post": "\f37f", + "file-earmark-ppt-fill": "\f380", + "file-earmark-ppt": "\f381", + "file-earmark-richtext-fill": "\f382", + "file-earmark-richtext": "\f383", + "file-earmark-ruled-fill": "\f384", + "file-earmark-ruled": "\f385", + "file-earmark-slides-fill": "\f386", + "file-earmark-slides": "\f387", + "file-earmark-spreadsheet-fill": "\f388", + "file-earmark-spreadsheet": "\f389", + "file-earmark-text-fill": "\f38a", + "file-earmark-text": "\f38b", + "file-earmark-word-fill": "\f38c", + "file-earmark-word": "\f38d", + "file-earmark-x-fill": "\f38e", + "file-earmark-x": "\f38f", + "file-earmark-zip-fill": "\f390", + "file-earmark-zip": "\f391", + "file-earmark": "\f392", + "file-easel-fill": "\f393", + "file-easel": "\f394", + "file-excel-fill": "\f395", + "file-excel": "\f396", + "file-fill": "\f397", + "file-font-fill": "\f398", + "file-font": "\f399", + "file-image-fill": "\f39a", + "file-image": "\f39b", + "file-lock-fill": "\f39c", + "file-lock": "\f39d", + "file-lock2-fill": "\f39e", + "file-lock2": "\f39f", + "file-medical-fill": "\f3a0", + "file-medical": "\f3a1", + "file-minus-fill": "\f3a2", + "file-minus": "\f3a3", + "file-music-fill": "\f3a4", + "file-music": "\f3a5", + "file-person-fill": "\f3a6", + "file-person": "\f3a7", + "file-play-fill": "\f3a8", + "file-play": "\f3a9", + "file-plus-fill": "\f3aa", + "file-plus": "\f3ab", + "file-post-fill": "\f3ac", + "file-post": "\f3ad", + "file-ppt-fill": "\f3ae", + "file-ppt": "\f3af", + "file-richtext-fill": "\f3b0", + "file-richtext": "\f3b1", + "file-ruled-fill": "\f3b2", + "file-ruled": "\f3b3", + "file-slides-fill": "\f3b4", + "file-slides": "\f3b5", + "file-spreadsheet-fill": "\f3b6", + "file-spreadsheet": "\f3b7", + "file-text-fill": "\f3b8", + "file-text": "\f3b9", + "file-word-fill": "\f3ba", + "file-word": "\f3bb", + "file-x-fill": "\f3bc", + "file-x": "\f3bd", + "file-zip-fill": "\f3be", + "file-zip": "\f3bf", + "file": "\f3c0", + "files-alt": "\f3c1", + "files": "\f3c2", + "film": "\f3c3", + "filter-circle-fill": "\f3c4", + "filter-circle": "\f3c5", + "filter-left": "\f3c6", + "filter-right": "\f3c7", + "filter-square-fill": "\f3c8", + "filter-square": "\f3c9", + "filter": "\f3ca", + "flag-fill": "\f3cb", + "flag": "\f3cc", + "flower1": "\f3cd", + "flower2": "\f3ce", + "flower3": "\f3cf", + "folder-check": "\f3d0", + "folder-fill": "\f3d1", + "folder-minus": "\f3d2", + "folder-plus": "\f3d3", + "folder-symlink-fill": "\f3d4", + "folder-symlink": "\f3d5", + "folder-x": "\f3d6", + "folder": "\f3d7", + "folder2-open": "\f3d8", + "folder2": "\f3d9", + "fonts": "\f3da", + "forward-fill": "\f3db", + "forward": "\f3dc", + "front": "\f3dd", + "fullscreen-exit": "\f3de", + "fullscreen": "\f3df", + "funnel-fill": "\f3e0", + "funnel": "\f3e1", + "gear-fill": "\f3e2", + "gear-wide-connected": "\f3e3", + "gear-wide": "\f3e4", + "gear": "\f3e5", + "gem": "\f3e6", + "geo-alt-fill": "\f3e7", + "geo-alt": "\f3e8", + "geo-fill": "\f3e9", + "geo": "\f3ea", + "gift-fill": "\f3eb", + "gift": "\f3ec", + "github": "\f3ed", + "globe": "\f3ee", + "globe2": "\f3ef", + "google": "\f3f0", + "graph-down": "\f3f1", + "graph-up": "\f3f2", + "grid-1x2-fill": "\f3f3", + "grid-1x2": "\f3f4", + "grid-3x2-gap-fill": "\f3f5", + "grid-3x2-gap": "\f3f6", + "grid-3x2": "\f3f7", + "grid-3x3-gap-fill": "\f3f8", + "grid-3x3-gap": "\f3f9", + "grid-3x3": "\f3fa", + "grid-fill": "\f3fb", + "grid": "\f3fc", + "grip-horizontal": "\f3fd", + "grip-vertical": "\f3fe", + "hammer": "\f3ff", + "hand-index-fill": "\f400", + "hand-index-thumb-fill": "\f401", + "hand-index-thumb": "\f402", + "hand-index": "\f403", + "hand-thumbs-down-fill": "\f404", + "hand-thumbs-down": "\f405", + "hand-thumbs-up-fill": "\f406", + "hand-thumbs-up": "\f407", + "handbag-fill": "\f408", + "handbag": "\f409", + "hash": "\f40a", + "hdd-fill": "\f40b", + "hdd-network-fill": "\f40c", + "hdd-network": "\f40d", + "hdd-rack-fill": "\f40e", + "hdd-rack": "\f40f", + "hdd-stack-fill": "\f410", + "hdd-stack": "\f411", + "hdd": "\f412", + "headphones": "\f413", + "headset": "\f414", + "heart-fill": "\f415", + "heart-half": "\f416", + "heart": "\f417", + "heptagon-fill": "\f418", + "heptagon-half": "\f419", + "heptagon": "\f41a", + "hexagon-fill": "\f41b", + "hexagon-half": "\f41c", + "hexagon": "\f41d", + "hourglass-bottom": "\f41e", + "hourglass-split": "\f41f", + "hourglass-top": "\f420", + "hourglass": "\f421", + "house-door-fill": "\f422", + "house-door": "\f423", + "house-fill": "\f424", + "house": "\f425", + "hr": "\f426", + "hurricane": "\f427", + "image-alt": "\f428", + "image-fill": "\f429", + "image": "\f42a", + "images": "\f42b", + "inbox-fill": "\f42c", + "inbox": "\f42d", + "inboxes-fill": "\f42e", + "inboxes": "\f42f", + "info-circle-fill": "\f430", + "info-circle": "\f431", + "info-square-fill": "\f432", + "info-square": "\f433", + "info": "\f434", + "input-cursor-text": "\f435", + "input-cursor": "\f436", + "instagram": "\f437", + "intersect": "\f438", + "journal-album": "\f439", + "journal-arrow-down": "\f43a", + "journal-arrow-up": "\f43b", + "journal-bookmark-fill": "\f43c", + "journal-bookmark": "\f43d", + "journal-check": "\f43e", + "journal-code": "\f43f", + "journal-medical": "\f440", + "journal-minus": "\f441", + "journal-plus": "\f442", + "journal-richtext": "\f443", + "journal-text": "\f444", + "journal-x": "\f445", + "journal": "\f446", + "journals": "\f447", + "joystick": "\f448", + "justify-left": "\f449", + "justify-right": "\f44a", + "justify": "\f44b", + "kanban-fill": "\f44c", + "kanban": "\f44d", + "key-fill": "\f44e", + "key": "\f44f", + "keyboard-fill": "\f450", + "keyboard": "\f451", + "ladder": "\f452", + "lamp-fill": "\f453", + "lamp": "\f454", + "laptop-fill": "\f455", + "laptop": "\f456", + "layer-backward": "\f457", + "layer-forward": "\f458", + "layers-fill": "\f459", + "layers-half": "\f45a", + "layers": "\f45b", + "layout-sidebar-inset-reverse": "\f45c", + "layout-sidebar-inset": "\f45d", + "layout-sidebar-reverse": "\f45e", + "layout-sidebar": "\f45f", + "layout-split": "\f460", + "layout-text-sidebar-reverse": "\f461", + "layout-text-sidebar": "\f462", + "layout-text-window-reverse": "\f463", + "layout-text-window": "\f464", + "layout-three-columns": "\f465", + "layout-wtf": "\f466", + "life-preserver": "\f467", + "lightbulb-fill": "\f468", + "lightbulb-off-fill": "\f469", + "lightbulb-off": "\f46a", + "lightbulb": "\f46b", + "lightning-charge-fill": "\f46c", + "lightning-charge": "\f46d", + "lightning-fill": "\f46e", + "lightning": "\f46f", + "link-45deg": "\f470", + "link": "\f471", + "linkedin": "\f472", + "list-check": "\f473", + "list-nested": "\f474", + "list-ol": "\f475", + "list-stars": "\f476", + "list-task": "\f477", + "list-ul": "\f478", + "list": "\f479", + "lock-fill": "\f47a", + "lock": "\f47b", + "mailbox": "\f47c", + "mailbox2": "\f47d", + "map-fill": "\f47e", + "map": "\f47f", + "markdown-fill": "\f480", + "markdown": "\f481", + "mask": "\f482", + "megaphone-fill": "\f483", + "megaphone": "\f484", + "menu-app-fill": "\f485", + "menu-app": "\f486", + "menu-button-fill": "\f487", + "menu-button-wide-fill": "\f488", + "menu-button-wide": "\f489", + "menu-button": "\f48a", + "menu-down": "\f48b", + "menu-up": "\f48c", + "mic-fill": "\f48d", + "mic-mute-fill": "\f48e", + "mic-mute": "\f48f", + "mic": "\f490", + "minecart-loaded": "\f491", + "minecart": "\f492", + "moisture": "\f493", + "moon-fill": "\f494", + "moon-stars-fill": "\f495", + "moon-stars": "\f496", + "moon": "\f497", + "mouse-fill": "\f498", + "mouse": "\f499", + "mouse2-fill": "\f49a", + "mouse2": "\f49b", + "mouse3-fill": "\f49c", + "mouse3": "\f49d", + "music-note-beamed": "\f49e", + "music-note-list": "\f49f", + "music-note": "\f4a0", + "music-player-fill": "\f4a1", + "music-player": "\f4a2", + "newspaper": "\f4a3", + "node-minus-fill": "\f4a4", + "node-minus": "\f4a5", + "node-plus-fill": "\f4a6", + "node-plus": "\f4a7", + "nut-fill": "\f4a8", + "nut": "\f4a9", + "octagon-fill": "\f4aa", + "octagon-half": "\f4ab", + "octagon": "\f4ac", + "option": "\f4ad", + "outlet": "\f4ae", + "paint-bucket": "\f4af", + "palette-fill": "\f4b0", + "palette": "\f4b1", + "palette2": "\f4b2", + "paperclip": "\f4b3", + "paragraph": "\f4b4", + "patch-check-fill": "\f4b5", + "patch-check": "\f4b6", + "patch-exclamation-fill": "\f4b7", + "patch-exclamation": "\f4b8", + "patch-minus-fill": "\f4b9", + "patch-minus": "\f4ba", + "patch-plus-fill": "\f4bb", + "patch-plus": "\f4bc", + "patch-question-fill": "\f4bd", + "patch-question": "\f4be", + "pause-btn-fill": "\f4bf", + "pause-btn": "\f4c0", + "pause-circle-fill": "\f4c1", + "pause-circle": "\f4c2", + "pause-fill": "\f4c3", + "pause": "\f4c4", + "peace-fill": "\f4c5", + "peace": "\f4c6", + "pen-fill": "\f4c7", + "pen": "\f4c8", + "pencil-fill": "\f4c9", + "pencil-square": "\f4ca", + "pencil": "\f4cb", + "pentagon-fill": "\f4cc", + "pentagon-half": "\f4cd", + "pentagon": "\f4ce", + "people-fill": "\f4cf", + "people": "\f4d0", + "percent": "\f4d1", + "person-badge-fill": "\f4d2", + "person-badge": "\f4d3", + "person-bounding-box": "\f4d4", + "person-check-fill": "\f4d5", + "person-check": "\f4d6", + "person-circle": "\f4d7", + "person-dash-fill": "\f4d8", + "person-dash": "\f4d9", + "person-fill": "\f4da", + "person-lines-fill": "\f4db", + "person-plus-fill": "\f4dc", + "person-plus": "\f4dd", + "person-square": "\f4de", + "person-x-fill": "\f4df", + "person-x": "\f4e0", + "person": "\f4e1", + "phone-fill": "\f4e2", + "phone-landscape-fill": "\f4e3", + "phone-landscape": "\f4e4", + "phone-vibrate-fill": "\f4e5", + "phone-vibrate": "\f4e6", + "phone": "\f4e7", + "pie-chart-fill": "\f4e8", + "pie-chart": "\f4e9", + "pin-angle-fill": "\f4ea", + "pin-angle": "\f4eb", + "pin-fill": "\f4ec", + "pin": "\f4ed", + "pip-fill": "\f4ee", + "pip": "\f4ef", + "play-btn-fill": "\f4f0", + "play-btn": "\f4f1", + "play-circle-fill": "\f4f2", + "play-circle": "\f4f3", + "play-fill": "\f4f4", + "play": "\f4f5", + "plug-fill": "\f4f6", + "plug": "\f4f7", + "plus-circle-dotted": "\f4f8", + "plus-circle-fill": "\f4f9", + "plus-circle": "\f4fa", + "plus-square-dotted": "\f4fb", + "plus-square-fill": "\f4fc", + "plus-square": "\f4fd", + "plus": "\f4fe", + "power": "\f4ff", + "printer-fill": "\f500", + "printer": "\f501", + "puzzle-fill": "\f502", + "puzzle": "\f503", + "question-circle-fill": "\f504", + "question-circle": "\f505", + "question-diamond-fill": "\f506", + "question-diamond": "\f507", + "question-octagon-fill": "\f508", + "question-octagon": "\f509", + "question-square-fill": "\f50a", + "question-square": "\f50b", + "question": "\f50c", + "rainbow": "\f50d", + "receipt-cutoff": "\f50e", + "receipt": "\f50f", + "reception-0": "\f510", + "reception-1": "\f511", + "reception-2": "\f512", + "reception-3": "\f513", + "reception-4": "\f514", + "record-btn-fill": "\f515", + "record-btn": "\f516", + "record-circle-fill": "\f517", + "record-circle": "\f518", + "record-fill": "\f519", + "record": "\f51a", + "record2-fill": "\f51b", + "record2": "\f51c", + "reply-all-fill": "\f51d", + "reply-all": "\f51e", + "reply-fill": "\f51f", + "reply": "\f520", + "rss-fill": "\f521", + "rss": "\f522", + "rulers": "\f523", + "save-fill": "\f524", + "save": "\f525", + "save2-fill": "\f526", + "save2": "\f527", + "scissors": "\f528", + "screwdriver": "\f529", + "search": "\f52a", + "segmented-nav": "\f52b", + "server": "\f52c", + "share-fill": "\f52d", + "share": "\f52e", + "shield-check": "\f52f", + "shield-exclamation": "\f530", + "shield-fill-check": "\f531", + "shield-fill-exclamation": "\f532", + "shield-fill-minus": "\f533", + "shield-fill-plus": "\f534", + "shield-fill-x": "\f535", + "shield-fill": "\f536", + "shield-lock-fill": "\f537", + "shield-lock": "\f538", + "shield-minus": "\f539", + "shield-plus": "\f53a", + "shield-shaded": "\f53b", + "shield-slash-fill": "\f53c", + "shield-slash": "\f53d", + "shield-x": "\f53e", + "shield": "\f53f", + "shift-fill": "\f540", + "shift": "\f541", + "shop-window": "\f542", + "shop": "\f543", + "shuffle": "\f544", + "signpost-2-fill": "\f545", + "signpost-2": "\f546", + "signpost-fill": "\f547", + "signpost-split-fill": "\f548", + "signpost-split": "\f549", + "signpost": "\f54a", + "sim-fill": "\f54b", + "sim": "\f54c", + "skip-backward-btn-fill": "\f54d", + "skip-backward-btn": "\f54e", + "skip-backward-circle-fill": "\f54f", + "skip-backward-circle": "\f550", + "skip-backward-fill": "\f551", + "skip-backward": "\f552", + "skip-end-btn-fill": "\f553", + "skip-end-btn": "\f554", + "skip-end-circle-fill": "\f555", + "skip-end-circle": "\f556", + "skip-end-fill": "\f557", + "skip-end": "\f558", + "skip-forward-btn-fill": "\f559", + "skip-forward-btn": "\f55a", + "skip-forward-circle-fill": "\f55b", + "skip-forward-circle": "\f55c", + "skip-forward-fill": "\f55d", + "skip-forward": "\f55e", + "skip-start-btn-fill": "\f55f", + "skip-start-btn": "\f560", + "skip-start-circle-fill": "\f561", + "skip-start-circle": "\f562", + "skip-start-fill": "\f563", + "skip-start": "\f564", + "slack": "\f565", + "slash-circle-fill": "\f566", + "slash-circle": "\f567", + "slash-square-fill": "\f568", + "slash-square": "\f569", + "slash": "\f56a", + "sliders": "\f56b", + "smartwatch": "\f56c", + "snow": "\f56d", + "snow2": "\f56e", + "snow3": "\f56f", + "sort-alpha-down-alt": "\f570", + "sort-alpha-down": "\f571", + "sort-alpha-up-alt": "\f572", + "sort-alpha-up": "\f573", + "sort-down-alt": "\f574", + "sort-down": "\f575", + "sort-numeric-down-alt": "\f576", + "sort-numeric-down": "\f577", + "sort-numeric-up-alt": "\f578", + "sort-numeric-up": "\f579", + "sort-up-alt": "\f57a", + "sort-up": "\f57b", + "soundwave": "\f57c", + "speaker-fill": "\f57d", + "speaker": "\f57e", + "speedometer": "\f57f", + "speedometer2": "\f580", + "spellcheck": "\f581", + "square-fill": "\f582", + "square-half": "\f583", + "square": "\f584", + "stack": "\f585", + "star-fill": "\f586", + "star-half": "\f587", + "star": "\f588", + "stars": "\f589", + "stickies-fill": "\f58a", + "stickies": "\f58b", + "sticky-fill": "\f58c", + "sticky": "\f58d", + "stop-btn-fill": "\f58e", + "stop-btn": "\f58f", + "stop-circle-fill": "\f590", + "stop-circle": "\f591", + "stop-fill": "\f592", + "stop": "\f593", + "stoplights-fill": "\f594", + "stoplights": "\f595", + "stopwatch-fill": "\f596", + "stopwatch": "\f597", + "subtract": "\f598", + "suit-club-fill": "\f599", + "suit-club": "\f59a", + "suit-diamond-fill": "\f59b", + "suit-diamond": "\f59c", + "suit-heart-fill": "\f59d", + "suit-heart": "\f59e", + "suit-spade-fill": "\f59f", + "suit-spade": "\f5a0", + "sun-fill": "\f5a1", + "sun": "\f5a2", + "sunglasses": "\f5a3", + "sunrise-fill": "\f5a4", + "sunrise": "\f5a5", + "sunset-fill": "\f5a6", + "sunset": "\f5a7", + "symmetry-horizontal": "\f5a8", + "symmetry-vertical": "\f5a9", + "table": "\f5aa", + "tablet-fill": "\f5ab", + "tablet-landscape-fill": "\f5ac", + "tablet-landscape": "\f5ad", + "tablet": "\f5ae", + "tag-fill": "\f5af", + "tag": "\f5b0", + "tags-fill": "\f5b1", + "tags": "\f5b2", + "telegram": "\f5b3", + "telephone-fill": "\f5b4", + "telephone-forward-fill": "\f5b5", + "telephone-forward": "\f5b6", + "telephone-inbound-fill": "\f5b7", + "telephone-inbound": "\f5b8", + "telephone-minus-fill": "\f5b9", + "telephone-minus": "\f5ba", + "telephone-outbound-fill": "\f5bb", + "telephone-outbound": "\f5bc", + "telephone-plus-fill": "\f5bd", + "telephone-plus": "\f5be", + "telephone-x-fill": "\f5bf", + "telephone-x": "\f5c0", + "telephone": "\f5c1", + "terminal-fill": "\f5c2", + "terminal": "\f5c3", + "text-center": "\f5c4", + "text-indent-left": "\f5c5", + "text-indent-right": "\f5c6", + "text-left": "\f5c7", + "text-paragraph": "\f5c8", + "text-right": "\f5c9", + "textarea-resize": "\f5ca", + "textarea-t": "\f5cb", + "textarea": "\f5cc", + "thermometer-half": "\f5cd", + "thermometer-high": "\f5ce", + "thermometer-low": "\f5cf", + "thermometer-snow": "\f5d0", + "thermometer-sun": "\f5d1", + "thermometer": "\f5d2", + "three-dots-vertical": "\f5d3", + "three-dots": "\f5d4", + "toggle-off": "\f5d5", + "toggle-on": "\f5d6", + "toggle2-off": "\f5d7", + "toggle2-on": "\f5d8", + "toggles": "\f5d9", + "toggles2": "\f5da", + "tools": "\f5db", + "tornado": "\f5dc", + "trash-fill": "\f5dd", + "trash": "\f5de", + "trash2-fill": "\f5df", + "trash2": "\f5e0", + "tree-fill": "\f5e1", + "tree": "\f5e2", + "triangle-fill": "\f5e3", + "triangle-half": "\f5e4", + "triangle": "\f5e5", + "trophy-fill": "\f5e6", + "trophy": "\f5e7", + "tropical-storm": "\f5e8", + "truck-flatbed": "\f5e9", + "truck": "\f5ea", + "tsunami": "\f5eb", + "tv-fill": "\f5ec", + "tv": "\f5ed", + "twitch": "\f5ee", + "twitter": "\f5ef", + "type-bold": "\f5f0", + "type-h1": "\f5f1", + "type-h2": "\f5f2", + "type-h3": "\f5f3", + "type-italic": "\f5f4", + "type-strikethrough": "\f5f5", + "type-underline": "\f5f6", + "type": "\f5f7", + "ui-checks-grid": "\f5f8", + "ui-checks": "\f5f9", + "ui-radios-grid": "\f5fa", + "ui-radios": "\f5fb", + "umbrella-fill": "\f5fc", + "umbrella": "\f5fd", + "union": "\f5fe", + "unlock-fill": "\f5ff", + "unlock": "\f600", + "upc-scan": "\f601", + "upc": "\f602", + "upload": "\f603", + "vector-pen": "\f604", + "view-list": "\f605", + "view-stacked": "\f606", + "vinyl-fill": "\f607", + "vinyl": "\f608", + "voicemail": "\f609", + "volume-down-fill": "\f60a", + "volume-down": "\f60b", + "volume-mute-fill": "\f60c", + "volume-mute": "\f60d", + "volume-off-fill": "\f60e", + "volume-off": "\f60f", + "volume-up-fill": "\f610", + "volume-up": "\f611", + "vr": "\f612", + "wallet-fill": "\f613", + "wallet": "\f614", + "wallet2": "\f615", + "watch": "\f616", + "water": "\f617", + "whatsapp": "\f618", + "wifi-1": "\f619", + "wifi-2": "\f61a", + "wifi-off": "\f61b", + "wifi": "\f61c", + "wind": "\f61d", + "window-dock": "\f61e", + "window-sidebar": "\f61f", + "window": "\f620", + "wrench": "\f621", + "x-circle-fill": "\f622", + "x-circle": "\f623", + "x-diamond-fill": "\f624", + "x-diamond": "\f625", + "x-octagon-fill": "\f626", + "x-octagon": "\f627", + "x-square-fill": "\f628", + "x-square": "\f629", + "x": "\f62a", + "youtube": "\f62b", + "zoom-in": "\f62c", + "zoom-out": "\f62d", + "bank": "\f62e", + "bank2": "\f62f", + "bell-slash-fill": "\f630", + "bell-slash": "\f631", + "cash-coin": "\f632", + "check-lg": "\f633", + "coin": "\f634", + "currency-bitcoin": "\f635", + "currency-dollar": "\f636", + "currency-euro": "\f637", + "currency-exchange": "\f638", + "currency-pound": "\f639", + "currency-yen": "\f63a", + "dash-lg": "\f63b", + "exclamation-lg": "\f63c", + "file-earmark-pdf-fill": "\f63d", + "file-earmark-pdf": "\f63e", + "file-pdf-fill": "\f63f", + "file-pdf": "\f640", + "gender-ambiguous": "\f641", + "gender-female": "\f642", + "gender-male": "\f643", + "gender-trans": "\f644", + "headset-vr": "\f645", + "info-lg": "\f646", + "mastodon": "\f647", + "messenger": "\f648", + "piggy-bank-fill": "\f649", + "piggy-bank": "\f64a", + "pin-map-fill": "\f64b", + "pin-map": "\f64c", + "plus-lg": "\f64d", + "question-lg": "\f64e", + "recycle": "\f64f", + "reddit": "\f650", + "safe-fill": "\f651", + "safe2-fill": "\f652", + "safe2": "\f653", + "sd-card-fill": "\f654", + "sd-card": "\f655", + "skype": "\f656", + "slash-lg": "\f657", + "translate": "\f658", + "x-lg": "\f659", + "safe": "\f65a", + "apple": "\f65b", + "microsoft": "\f65d", + "windows": "\f65e", + "behance": "\f65c", + "dribbble": "\f65f", + "line": "\f660", + "medium": "\f661", + "paypal": "\f662", + "pinterest": "\f663", + "signal": "\f664", + "snapchat": "\f665", + "spotify": "\f666", + "stack-overflow": "\f667", + "strava": "\f668", + "wordpress": "\f669", + "vimeo": "\f66a", + "activity": "\f66b", + "easel2-fill": "\f66c", + "easel2": "\f66d", + "easel3-fill": "\f66e", + "easel3": "\f66f", + "fan": "\f670", + "fingerprint": "\f671", + "graph-down-arrow": "\f672", + "graph-up-arrow": "\f673", + "hypnotize": "\f674", + "magic": "\f675", + "person-rolodex": "\f676", + "person-video": "\f677", + "person-video2": "\f678", + "person-video3": "\f679", + "person-workspace": "\f67a", + "radioactive": "\f67b", + "webcam-fill": "\f67c", + "webcam": "\f67d", + "yin-yang": "\f67e", + "bandaid-fill": "\f680", + "bandaid": "\f681", + "bluetooth": "\f682", + "body-text": "\f683", + "boombox": "\f684", + "boxes": "\f685", + "dpad-fill": "\f686", + "dpad": "\f687", + "ear-fill": "\f688", + "ear": "\f689", + "envelope-check-1": "\f68a", + "envelope-check-fill": "\f68b", + "envelope-check": "\f68c", + "envelope-dash-1": "\f68d", + "envelope-dash-fill": "\f68e", + "envelope-dash": "\f68f", + "envelope-exclamation-1": "\f690", + "envelope-exclamation-fill": "\f691", + "envelope-exclamation": "\f692", + "envelope-plus-fill": "\f693", + "envelope-plus": "\f694", + "envelope-slash-1": "\f695", + "envelope-slash-fill": "\f696", + "envelope-slash": "\f697", + "envelope-x-1": "\f698", + "envelope-x-fill": "\f699", + "envelope-x": "\f69a", + "explicit-fill": "\f69b", + "explicit": "\f69c", + "git": "\f69d", + "infinity": "\f69e", + "list-columns-reverse": "\f69f", + "list-columns": "\f6a0", + "meta": "\f6a1", + "mortorboard-fill": "\f6a2", + "mortorboard": "\f6a3", + "nintendo-switch": "\f6a4", + "pc-display-horizontal": "\f6a5", + "pc-display": "\f6a6", + "pc-horizontal": "\f6a7", + "pc": "\f6a8", + "playstation": "\f6a9", + "plus-slash-minus": "\f6aa", + "projector-fill": "\f6ab", + "projector": "\f6ac", + "qr-code-scan": "\f6ad", + "qr-code": "\f6ae", + "quora": "\f6af", + "quote": "\f6b0", + "robot": "\f6b1", + "send-check-fill": "\f6b2", + "send-check": "\f6b3", + "send-dash-fill": "\f6b4", + "send-dash": "\f6b5", + "send-exclamation-1": "\f6b6", + "send-exclamation-fill": "\f6b7", + "send-exclamation": "\f6b8", + "send-fill": "\f6b9", + "send-plus-fill": "\f6ba", + "send-plus": "\f6bb", + "send-slash-fill": "\f6bc", + "send-slash": "\f6bd", + "send-x-fill": "\f6be", + "send-x": "\f6bf", + "send": "\f6c0", + "steam": "\f6c1", + "terminal-dash-1": "\f6c2", + "terminal-dash": "\f6c3", + "terminal-plus": "\f6c4", + "terminal-split": "\f6c5", + "ticket-detailed-fill": "\f6c6", + "ticket-detailed": "\f6c7", + "ticket-fill": "\f6c8", + "ticket-perforated-fill": "\f6c9", + "ticket-perforated": "\f6ca", + "ticket": "\f6cb", + "tiktok": "\f6cc", + "window-dash": "\f6cd", + "window-desktop": "\f6ce", + "window-fullscreen": "\f6cf", + "window-plus": "\f6d0", + "window-split": "\f6d1", + "window-stack": "\f6d2", + "window-x": "\f6d3", + "xbox": "\f6d4", + "ethernet": "\f6d5", + "hdmi-fill": "\f6d6", + "hdmi": "\f6d7", + "usb-c-fill": "\f6d8", + "usb-c": "\f6d9", + "usb-fill": "\f6da", + "usb-plug-fill": "\f6db", + "usb-plug": "\f6dc", + "usb-symbol": "\f6dd", + "usb": "\f6de", + "boombox-fill": "\f6df", + "displayport-1": "\f6e0", + "displayport": "\f6e1", + "gpu-card": "\f6e2", + "memory": "\f6e3", + "modem-fill": "\f6e4", + "modem": "\f6e5", + "motherboard-fill": "\f6e6", + "motherboard": "\f6e7", + "optical-audio-fill": "\f6e8", + "optical-audio": "\f6e9", + "pci-card": "\f6ea", + "router-fill": "\f6eb", + "router": "\f6ec", + "ssd-fill": "\f6ed", + "ssd": "\f6ee", + "thunderbolt-fill": "\f6ef", + "thunderbolt": "\f6f0", + "usb-drive-fill": "\f6f1", + "usb-drive": "\f6f2", + "usb-micro-fill": "\f6f3", + "usb-micro": "\f6f4", + "usb-mini-fill": "\f6f5", + "usb-mini": "\f6f6", + "cloud-haze2": "\f6f7", + "device-hdd-fill": "\f6f8", + "device-hdd": "\f6f9", + "device-ssd-fill": "\f6fa", + "device-ssd": "\f6fb", + "displayport-fill": "\f6fc", + "mortarboard-fill": "\f6fd", + "mortarboard": "\f6fe", + "terminal-x": "\f6ff", + "arrow-through-heart-fill": "\f700", + "arrow-through-heart": "\f701", + "badge-sd-fill": "\f702", + "badge-sd": "\f703", + "bag-heart-fill": "\f704", + "bag-heart": "\f705", + "balloon-fill": "\f706", + "balloon-heart-fill": "\f707", + "balloon-heart": "\f708", + "balloon": "\f709", + "box2-fill": "\f70a", + "box2-heart-fill": "\f70b", + "box2-heart": "\f70c", + "box2": "\f70d", + "braces-asterisk": "\f70e", + "calendar-heart-fill": "\f70f", + "calendar-heart": "\f710", + "calendar2-heart-fill": "\f711", + "calendar2-heart": "\f712", + "chat-heart-fill": "\f713", + "chat-heart": "\f714", + "chat-left-heart-fill": "\f715", + "chat-left-heart": "\f716", + "chat-right-heart-fill": "\f717", + "chat-right-heart": "\f718", + "chat-square-heart-fill": "\f719", + "chat-square-heart": "\f71a", + "clipboard-check-fill": "\f71b", + "clipboard-data-fill": "\f71c", + "clipboard-fill": "\f71d", + "clipboard-heart-fill": "\f71e", + "clipboard-heart": "\f71f", + "clipboard-minus-fill": "\f720", + "clipboard-plus-fill": "\f721", + "clipboard-pulse": "\f722", + "clipboard-x-fill": "\f723", + "clipboard2-check-fill": "\f724", + "clipboard2-check": "\f725", + "clipboard2-data-fill": "\f726", + "clipboard2-data": "\f727", + "clipboard2-fill": "\f728", + "clipboard2-heart-fill": "\f729", + "clipboard2-heart": "\f72a", + "clipboard2-minus-fill": "\f72b", + "clipboard2-minus": "\f72c", + "clipboard2-plus-fill": "\f72d", + "clipboard2-plus": "\f72e", + "clipboard2-pulse-fill": "\f72f", + "clipboard2-pulse": "\f730", + "clipboard2-x-fill": "\f731", + "clipboard2-x": "\f732", + "clipboard2": "\f733", + "emoji-kiss-fill": "\f734", + "emoji-kiss": "\f735", + "envelope-heart-fill": "\f736", + "envelope-heart": "\f737", + "envelope-open-heart-fill": "\f738", + "envelope-open-heart": "\f739", + "envelope-paper-fill": "\f73a", + "envelope-paper-heart-fill": "\f73b", + "envelope-paper-heart": "\f73c", + "envelope-paper": "\f73d", + "filetype-aac": "\f73e", + "filetype-ai": "\f73f", + "filetype-bmp": "\f740", + "filetype-cs": "\f741", + "filetype-css": "\f742", + "filetype-csv": "\f743", + "filetype-doc": "\f744", + "filetype-docx": "\f745", + "filetype-exe": "\f746", + "filetype-gif": "\f747", + "filetype-heic": "\f748", + "filetype-html": "\f749", + "filetype-java": "\f74a", + "filetype-jpg": "\f74b", + "filetype-js": "\f74c", + "filetype-jsx": "\f74d", + "filetype-key": "\f74e", + "filetype-m4p": "\f74f", + "filetype-md": "\f750", + "filetype-mdx": "\f751", + "filetype-mov": "\f752", + "filetype-mp3": "\f753", + "filetype-mp4": "\f754", + "filetype-otf": "\f755", + "filetype-pdf": "\f756", + "filetype-php": "\f757", + "filetype-png": "\f758", + "filetype-ppt-1": "\f759", + "filetype-ppt": "\f75a", + "filetype-psd": "\f75b", + "filetype-py": "\f75c", + "filetype-raw": "\f75d", + "filetype-rb": "\f75e", + "filetype-sass": "\f75f", + "filetype-scss": "\f760", + "filetype-sh": "\f761", + "filetype-svg": "\f762", + "filetype-tiff": "\f763", + "filetype-tsx": "\f764", + "filetype-ttf": "\f765", + "filetype-txt": "\f766", + "filetype-wav": "\f767", + "filetype-woff": "\f768", + "filetype-xls-1": "\f769", + "filetype-xls": "\f76a", + "filetype-xml": "\f76b", + "filetype-yml": "\f76c", + "heart-arrow": "\f76d", + "heart-pulse-fill": "\f76e", + "heart-pulse": "\f76f", + "heartbreak-fill": "\f770", + "heartbreak": "\f771", + "hearts": "\f772", + "hospital-fill": "\f773", + "hospital": "\f774", + "house-heart-fill": "\f775", + "house-heart": "\f776", + "incognito": "\f777", + "magnet-fill": "\f778", + "magnet": "\f779", + "person-heart": "\f77a", + "person-hearts": "\f77b", + "phone-flip": "\f77c", + "plugin": "\f77d", + "postage-fill": "\f77e", + "postage-heart-fill": "\f77f", + "postage-heart": "\f780", + "postage": "\f781", + "postcard-fill": "\f782", + "postcard-heart-fill": "\f783", + "postcard-heart": "\f784", + "postcard": "\f785", + "search-heart-fill": "\f786", + "search-heart": "\f787", + "sliders2-vertical": "\f788", + "sliders2": "\f789", + "trash3-fill": "\f78a", + "trash3": "\f78b", + "valentine": "\f78c", + "valentine2": "\f78d", + "wrench-adjustable-circle-fill": "\f78e", + "wrench-adjustable-circle": "\f78f", + "wrench-adjustable": "\f790", + "filetype-json": "\f791", + "filetype-pptx": "\f792", + "filetype-xlsx": "\f793", + "1-circle-1": "\f794", + "1-circle-fill-1": "\f795", + "1-circle-fill": "\f796", + "1-circle": "\f797", + "1-square-fill": "\f798", + "1-square": "\f799", + "2-circle-1": "\f79a", + "2-circle-fill-1": "\f79b", + "2-circle-fill": "\f79c", + "2-circle": "\f79d", + "2-square-fill": "\f79e", + "2-square": "\f79f", + "3-circle-1": "\f7a0", + "3-circle-fill-1": "\f7a1", + "3-circle-fill": "\f7a2", + "3-circle": "\f7a3", + "3-square-fill": "\f7a4", + "3-square": "\f7a5", + "4-circle-1": "\f7a6", + "4-circle-fill-1": "\f7a7", + "4-circle-fill": "\f7a8", + "4-circle": "\f7a9", + "4-square-fill": "\f7aa", + "4-square": "\f7ab", + "5-circle-1": "\f7ac", + "5-circle-fill-1": "\f7ad", + "5-circle-fill": "\f7ae", + "5-circle": "\f7af", + "5-square-fill": "\f7b0", + "5-square": "\f7b1", + "6-circle-1": "\f7b2", + "6-circle-fill-1": "\f7b3", + "6-circle-fill": "\f7b4", + "6-circle": "\f7b5", + "6-square-fill": "\f7b6", + "6-square": "\f7b7", + "7-circle-1": "\f7b8", + "7-circle-fill-1": "\f7b9", + "7-circle-fill": "\f7ba", + "7-circle": "\f7bb", + "7-square-fill": "\f7bc", + "7-square": "\f7bd", + "8-circle-1": "\f7be", + "8-circle-fill-1": "\f7bf", + "8-circle-fill": "\f7c0", + "8-circle": "\f7c1", + "8-square-fill": "\f7c2", + "8-square": "\f7c3", + "9-circle-1": "\f7c4", + "9-circle-fill-1": "\f7c5", + "9-circle-fill": "\f7c6", + "9-circle": "\f7c7", + "9-square-fill": "\f7c8", + "9-square": "\f7c9", + "airplane-engines-fill": "\f7ca", + "airplane-engines": "\f7cb", + "airplane-fill": "\f7cc", + "airplane": "\f7cd", + "alexa": "\f7ce", + "alipay": "\f7cf", + "android": "\f7d0", + "android2": "\f7d1", + "box-fill": "\f7d2", + "box-seam-fill": "\f7d3", + "browser-chrome": "\f7d4", + "browser-edge": "\f7d5", + "browser-firefox": "\f7d6", + "browser-safari": "\f7d7", + "c-circle-1": "\f7d8", + "c-circle-fill-1": "\f7d9", + "c-circle-fill": "\f7da", + "c-circle": "\f7db", + "c-square-fill": "\f7dc", + "c-square": "\f7dd", + "capsule-pill": "\f7de", + "capsule": "\f7df", + "car-front-fill": "\f7e0", + "car-front": "\f7e1", + "cassette-fill": "\f7e2", + "cassette": "\f7e3", + "cc-circle-1": "\f7e4", + "cc-circle-fill-1": "\f7e5", + "cc-circle-fill": "\f7e6", + "cc-circle": "\f7e7", + "cc-square-fill": "\f7e8", + "cc-square": "\f7e9", + "cup-hot-fill": "\f7ea", + "cup-hot": "\f7eb", + "currency-rupee": "\f7ec", + "dropbox": "\f7ed", + "escape": "\f7ee", + "fast-forward-btn-fill": "\f7ef", + "fast-forward-btn": "\f7f0", + "fast-forward-circle-fill": "\f7f1", + "fast-forward-circle": "\f7f2", + "fast-forward-fill": "\f7f3", + "fast-forward": "\f7f4", + "filetype-sql": "\f7f5", + "fire": "\f7f6", + "google-play": "\f7f7", + "h-circle-1": "\f7f8", + "h-circle-fill-1": "\f7f9", + "h-circle-fill": "\f7fa", + "h-circle": "\f7fb", + "h-square-fill": "\f7fc", + "h-square": "\f7fd", + "indent": "\f7fe", + "lungs-fill": "\f7ff", + "lungs": "\f800", + "microsoft-teams": "\f801", + "p-circle-1": "\f802", + "p-circle-fill-1": "\f803", + "p-circle-fill": "\f804", + "p-circle": "\f805", + "p-square-fill": "\f806", + "p-square": "\f807", + "pass-fill": "\f808", + "pass": "\f809", + "prescription": "\f80a", + "prescription2": "\f80b", + "r-circle-1": "\f80c", + "r-circle-fill-1": "\f80d", + "r-circle-fill": "\f80e", + "r-circle": "\f80f", + "r-square-fill": "\f810", + "r-square": "\f811", + "repeat-1": "\f812", + "repeat": "\f813", + "rewind-btn-fill": "\f814", + "rewind-btn": "\f815", + "rewind-circle-fill": "\f816", + "rewind-circle": "\f817", + "rewind-fill": "\f818", + "rewind": "\f819", + "train-freight-front-fill": "\f81a", + "train-freight-front": "\f81b", + "train-front-fill": "\f81c", + "train-front": "\f81d", + "train-lightrail-front-fill": "\f81e", + "train-lightrail-front": "\f81f", + "truck-front-fill": "\f820", + "truck-front": "\f821", + "ubuntu": "\f822", + "unindent": "\f823", + "unity": "\f824", + "universal-access-circle": "\f825", + "universal-access": "\f826", + "virus": "\f827", + "virus2": "\f828", + "wechat": "\f829", + "yelp": "\f82a", + "sign-stop-fill": "\f82b", + "sign-stop-lights-fill": "\f82c", + "sign-stop-lights": "\f82d", + "sign-stop": "\f82e", + "sign-turn-left-fill": "\f82f", + "sign-turn-left": "\f830", + "sign-turn-right-fill": "\f831", + "sign-turn-right": "\f832", + "sign-turn-slight-left-fill": "\f833", + "sign-turn-slight-left": "\f834", + "sign-turn-slight-right-fill": "\f835", + "sign-turn-slight-right": "\f836", + "sign-yield-fill": "\f837", + "sign-yield": "\f838", + "ev-station-fill": "\f839", + "ev-station": "\f83a", + "fuel-pump-diesel-fill": "\f83b", + "fuel-pump-diesel": "\f83c", + "fuel-pump-fill": "\f83d", + "fuel-pump": "\f83e", + "0-circle-fill": "\f83f", + "0-circle": "\f840", + "0-square-fill": "\f841", + "0-square": "\f842", + "rocket-fill": "\f843", + "rocket-takeoff-fill": "\f844", + "rocket-takeoff": "\f845", + "rocket": "\f846", + "stripe": "\f847", + "subscript": "\f848", + "superscript": "\f849", + "trello": "\f84a", + "envelope-at-fill": "\f84b", + "envelope-at": "\f84c", + "regex": "\f84d", + "text-wrap": "\f84e", + "sign-dead-end-fill": "\f84f", + "sign-dead-end": "\f850", + "sign-do-not-enter-fill": "\f851", + "sign-do-not-enter": "\f852", + "sign-intersection-fill": "\f853", + "sign-intersection-side-fill": "\f854", + "sign-intersection-side": "\f855", + "sign-intersection-t-fill": "\f856", + "sign-intersection-t": "\f857", + "sign-intersection-y-fill": "\f858", + "sign-intersection-y": "\f859", + "sign-intersection": "\f85a", + "sign-merge-left-fill": "\f85b", + "sign-merge-left": "\f85c", + "sign-merge-right-fill": "\f85d", + "sign-merge-right": "\f85e", + "sign-no-left-turn-fill": "\f85f", + "sign-no-left-turn": "\f860", + "sign-no-parking-fill": "\f861", + "sign-no-parking": "\f862", + "sign-no-right-turn-fill": "\f863", + "sign-no-right-turn": "\f864", + "sign-railroad-fill": "\f865", + "sign-railroad": "\f866", + "building-add": "\f867", + "building-check": "\f868", + "building-dash": "\f869", + "building-down": "\f86a", + "building-exclamation": "\f86b", + "building-fill-add": "\f86c", + "building-fill-check": "\f86d", + "building-fill-dash": "\f86e", + "building-fill-down": "\f86f", + "building-fill-exclamation": "\f870", + "building-fill-gear": "\f871", + "building-fill-lock": "\f872", + "building-fill-slash": "\f873", + "building-fill-up": "\f874", + "building-fill-x": "\f875", + "building-fill": "\f876", + "building-gear": "\f877", + "building-lock": "\f878", + "building-slash": "\f879", + "building-up": "\f87a", + "building-x": "\f87b", + "buildings-fill": "\f87c", + "buildings": "\f87d", + "bus-front-fill": "\f87e", + "bus-front": "\f87f", + "ev-front-fill": "\f880", + "ev-front": "\f881", + "globe-americas": "\f882", + "globe-asia-australia": "\f883", + "globe-central-south-asia": "\f884", + "globe-europe-africa": "\f885", + "house-add-fill": "\f886", + "house-add": "\f887", + "house-check-fill": "\f888", + "house-check": "\f889", + "house-dash-fill": "\f88a", + "house-dash": "\f88b", + "house-down-fill": "\f88c", + "house-down": "\f88d", + "house-exclamation-fill": "\f88e", + "house-exclamation": "\f88f", + "house-gear-fill": "\f890", + "house-gear": "\f891", + "house-lock-fill": "\f892", + "house-lock": "\f893", + "house-slash-fill": "\f894", + "house-slash": "\f895", + "house-up-fill": "\f896", + "house-up": "\f897", + "house-x-fill": "\f898", + "house-x": "\f899", + "person-add": "\f89a", + "person-down": "\f89b", + "person-exclamation": "\f89c", + "person-fill-add": "\f89d", + "person-fill-check": "\f89e", + "person-fill-dash": "\f89f", + "person-fill-down": "\f8a0", + "person-fill-exclamation": "\f8a1", + "person-fill-gear": "\f8a2", + "person-fill-lock": "\f8a3", + "person-fill-slash": "\f8a4", + "person-fill-up": "\f8a5", + "person-fill-x": "\f8a6", + "person-gear": "\f8a7", + "person-lock": "\f8a8", + "person-slash": "\f8a9", + "person-up": "\f8aa", + "scooter": "\f8ab", + "taxi-front-fill": "\f8ac", + "taxi-front": "\f8ad", + "amd": "\f8ae", + "database-add": "\f8af", + "database-check": "\f8b0", + "database-dash": "\f8b1", + "database-down": "\f8b2", + "database-exclamation": "\f8b3", + "database-fill-add": "\f8b4", + "database-fill-check": "\f8b5", + "database-fill-dash": "\f8b6", + "database-fill-down": "\f8b7", + "database-fill-exclamation": "\f8b8", + "database-fill-gear": "\f8b9", + "database-fill-lock": "\f8ba", + "database-fill-slash": "\f8bb", + "database-fill-up": "\f8bc", + "database-fill-x": "\f8bd", + "database-fill": "\f8be", + "database-gear": "\f8bf", + "database-lock": "\f8c0", + "database-slash": "\f8c1", + "database-up": "\f8c2", + "database-x": "\f8c3", + "database": "\f8c4", + "houses-fill": "\f8c5", + "houses": "\f8c6", + "nvidia": "\f8c7", + "person-vcard-fill": "\f8c8", + "person-vcard": "\f8c9", + "sina-weibo": "\f8ca", + "tencent-qq": "\f8cb", + "wikipedia": "\f8cc", +); + +.bi-123::before { content: map-get($bootstrap-icons-map, "123"); } +.bi-alarm-fill::before { content: map-get($bootstrap-icons-map, "alarm-fill"); } +.bi-alarm::before { content: map-get($bootstrap-icons-map, "alarm"); } +.bi-align-bottom::before { content: map-get($bootstrap-icons-map, "align-bottom"); } +.bi-align-center::before { content: map-get($bootstrap-icons-map, "align-center"); } +.bi-align-end::before { content: map-get($bootstrap-icons-map, "align-end"); } +.bi-align-middle::before { content: map-get($bootstrap-icons-map, "align-middle"); } +.bi-align-start::before { content: map-get($bootstrap-icons-map, "align-start"); } +.bi-align-top::before { content: map-get($bootstrap-icons-map, "align-top"); } +.bi-alt::before { content: map-get($bootstrap-icons-map, "alt"); } +.bi-app-indicator::before { content: map-get($bootstrap-icons-map, "app-indicator"); } +.bi-app::before { content: map-get($bootstrap-icons-map, "app"); } +.bi-archive-fill::before { content: map-get($bootstrap-icons-map, "archive-fill"); } +.bi-archive::before { content: map-get($bootstrap-icons-map, "archive"); } +.bi-arrow-90deg-down::before { content: map-get($bootstrap-icons-map, "arrow-90deg-down"); } +.bi-arrow-90deg-left::before { content: map-get($bootstrap-icons-map, "arrow-90deg-left"); } +.bi-arrow-90deg-right::before { content: map-get($bootstrap-icons-map, "arrow-90deg-right"); } +.bi-arrow-90deg-up::before { content: map-get($bootstrap-icons-map, "arrow-90deg-up"); } +.bi-arrow-bar-down::before { content: map-get($bootstrap-icons-map, "arrow-bar-down"); } +.bi-arrow-bar-left::before { content: map-get($bootstrap-icons-map, "arrow-bar-left"); } +.bi-arrow-bar-right::before { content: map-get($bootstrap-icons-map, "arrow-bar-right"); } +.bi-arrow-bar-up::before { content: map-get($bootstrap-icons-map, "arrow-bar-up"); } +.bi-arrow-clockwise::before { content: map-get($bootstrap-icons-map, "arrow-clockwise"); } +.bi-arrow-counterclockwise::before { content: map-get($bootstrap-icons-map, "arrow-counterclockwise"); } +.bi-arrow-down-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-circle-fill"); } +.bi-arrow-down-circle::before { content: map-get($bootstrap-icons-map, "arrow-down-circle"); } +.bi-arrow-down-left-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-left-circle-fill"); } +.bi-arrow-down-left-circle::before { content: map-get($bootstrap-icons-map, "arrow-down-left-circle"); } +.bi-arrow-down-left-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-left-square-fill"); } +.bi-arrow-down-left-square::before { content: map-get($bootstrap-icons-map, "arrow-down-left-square"); } +.bi-arrow-down-left::before { content: map-get($bootstrap-icons-map, "arrow-down-left"); } +.bi-arrow-down-right-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-right-circle-fill"); } +.bi-arrow-down-right-circle::before { content: map-get($bootstrap-icons-map, "arrow-down-right-circle"); } +.bi-arrow-down-right-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-right-square-fill"); } +.bi-arrow-down-right-square::before { content: map-get($bootstrap-icons-map, "arrow-down-right-square"); } +.bi-arrow-down-right::before { content: map-get($bootstrap-icons-map, "arrow-down-right"); } +.bi-arrow-down-short::before { content: map-get($bootstrap-icons-map, "arrow-down-short"); } +.bi-arrow-down-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-down-square-fill"); } +.bi-arrow-down-square::before { content: map-get($bootstrap-icons-map, "arrow-down-square"); } +.bi-arrow-down-up::before { content: map-get($bootstrap-icons-map, "arrow-down-up"); } +.bi-arrow-down::before { content: map-get($bootstrap-icons-map, "arrow-down"); } +.bi-arrow-left-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-left-circle-fill"); } +.bi-arrow-left-circle::before { content: map-get($bootstrap-icons-map, "arrow-left-circle"); } +.bi-arrow-left-right::before { content: map-get($bootstrap-icons-map, "arrow-left-right"); } +.bi-arrow-left-short::before { content: map-get($bootstrap-icons-map, "arrow-left-short"); } +.bi-arrow-left-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-left-square-fill"); } +.bi-arrow-left-square::before { content: map-get($bootstrap-icons-map, "arrow-left-square"); } +.bi-arrow-left::before { content: map-get($bootstrap-icons-map, "arrow-left"); } +.bi-arrow-repeat::before { content: map-get($bootstrap-icons-map, "arrow-repeat"); } +.bi-arrow-return-left::before { content: map-get($bootstrap-icons-map, "arrow-return-left"); } +.bi-arrow-return-right::before { content: map-get($bootstrap-icons-map, "arrow-return-right"); } +.bi-arrow-right-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-right-circle-fill"); } +.bi-arrow-right-circle::before { content: map-get($bootstrap-icons-map, "arrow-right-circle"); } +.bi-arrow-right-short::before { content: map-get($bootstrap-icons-map, "arrow-right-short"); } +.bi-arrow-right-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-right-square-fill"); } +.bi-arrow-right-square::before { content: map-get($bootstrap-icons-map, "arrow-right-square"); } +.bi-arrow-right::before { content: map-get($bootstrap-icons-map, "arrow-right"); } +.bi-arrow-up-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-circle-fill"); } +.bi-arrow-up-circle::before { content: map-get($bootstrap-icons-map, "arrow-up-circle"); } +.bi-arrow-up-left-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-left-circle-fill"); } +.bi-arrow-up-left-circle::before { content: map-get($bootstrap-icons-map, "arrow-up-left-circle"); } +.bi-arrow-up-left-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-left-square-fill"); } +.bi-arrow-up-left-square::before { content: map-get($bootstrap-icons-map, "arrow-up-left-square"); } +.bi-arrow-up-left::before { content: map-get($bootstrap-icons-map, "arrow-up-left"); } +.bi-arrow-up-right-circle-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-right-circle-fill"); } +.bi-arrow-up-right-circle::before { content: map-get($bootstrap-icons-map, "arrow-up-right-circle"); } +.bi-arrow-up-right-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-right-square-fill"); } +.bi-arrow-up-right-square::before { content: map-get($bootstrap-icons-map, "arrow-up-right-square"); } +.bi-arrow-up-right::before { content: map-get($bootstrap-icons-map, "arrow-up-right"); } +.bi-arrow-up-short::before { content: map-get($bootstrap-icons-map, "arrow-up-short"); } +.bi-arrow-up-square-fill::before { content: map-get($bootstrap-icons-map, "arrow-up-square-fill"); } +.bi-arrow-up-square::before { content: map-get($bootstrap-icons-map, "arrow-up-square"); } +.bi-arrow-up::before { content: map-get($bootstrap-icons-map, "arrow-up"); } +.bi-arrows-angle-contract::before { content: map-get($bootstrap-icons-map, "arrows-angle-contract"); } +.bi-arrows-angle-expand::before { content: map-get($bootstrap-icons-map, "arrows-angle-expand"); } +.bi-arrows-collapse::before { content: map-get($bootstrap-icons-map, "arrows-collapse"); } +.bi-arrows-expand::before { content: map-get($bootstrap-icons-map, "arrows-expand"); } +.bi-arrows-fullscreen::before { content: map-get($bootstrap-icons-map, "arrows-fullscreen"); } +.bi-arrows-move::before { content: map-get($bootstrap-icons-map, "arrows-move"); } +.bi-aspect-ratio-fill::before { content: map-get($bootstrap-icons-map, "aspect-ratio-fill"); } +.bi-aspect-ratio::before { content: map-get($bootstrap-icons-map, "aspect-ratio"); } +.bi-asterisk::before { content: map-get($bootstrap-icons-map, "asterisk"); } +.bi-at::before { content: map-get($bootstrap-icons-map, "at"); } +.bi-award-fill::before { content: map-get($bootstrap-icons-map, "award-fill"); } +.bi-award::before { content: map-get($bootstrap-icons-map, "award"); } +.bi-back::before { content: map-get($bootstrap-icons-map, "back"); } +.bi-backspace-fill::before { content: map-get($bootstrap-icons-map, "backspace-fill"); } +.bi-backspace-reverse-fill::before { content: map-get($bootstrap-icons-map, "backspace-reverse-fill"); } +.bi-backspace-reverse::before { content: map-get($bootstrap-icons-map, "backspace-reverse"); } +.bi-backspace::before { content: map-get($bootstrap-icons-map, "backspace"); } +.bi-badge-3d-fill::before { content: map-get($bootstrap-icons-map, "badge-3d-fill"); } +.bi-badge-3d::before { content: map-get($bootstrap-icons-map, "badge-3d"); } +.bi-badge-4k-fill::before { content: map-get($bootstrap-icons-map, "badge-4k-fill"); } +.bi-badge-4k::before { content: map-get($bootstrap-icons-map, "badge-4k"); } +.bi-badge-8k-fill::before { content: map-get($bootstrap-icons-map, "badge-8k-fill"); } +.bi-badge-8k::before { content: map-get($bootstrap-icons-map, "badge-8k"); } +.bi-badge-ad-fill::before { content: map-get($bootstrap-icons-map, "badge-ad-fill"); } +.bi-badge-ad::before { content: map-get($bootstrap-icons-map, "badge-ad"); } +.bi-badge-ar-fill::before { content: map-get($bootstrap-icons-map, "badge-ar-fill"); } +.bi-badge-ar::before { content: map-get($bootstrap-icons-map, "badge-ar"); } +.bi-badge-cc-fill::before { content: map-get($bootstrap-icons-map, "badge-cc-fill"); } +.bi-badge-cc::before { content: map-get($bootstrap-icons-map, "badge-cc"); } +.bi-badge-hd-fill::before { content: map-get($bootstrap-icons-map, "badge-hd-fill"); } +.bi-badge-hd::before { content: map-get($bootstrap-icons-map, "badge-hd"); } +.bi-badge-tm-fill::before { content: map-get($bootstrap-icons-map, "badge-tm-fill"); } +.bi-badge-tm::before { content: map-get($bootstrap-icons-map, "badge-tm"); } +.bi-badge-vo-fill::before { content: map-get($bootstrap-icons-map, "badge-vo-fill"); } +.bi-badge-vo::before { content: map-get($bootstrap-icons-map, "badge-vo"); } +.bi-badge-vr-fill::before { content: map-get($bootstrap-icons-map, "badge-vr-fill"); } +.bi-badge-vr::before { content: map-get($bootstrap-icons-map, "badge-vr"); } +.bi-badge-wc-fill::before { content: map-get($bootstrap-icons-map, "badge-wc-fill"); } +.bi-badge-wc::before { content: map-get($bootstrap-icons-map, "badge-wc"); } +.bi-bag-check-fill::before { content: map-get($bootstrap-icons-map, "bag-check-fill"); } +.bi-bag-check::before { content: map-get($bootstrap-icons-map, "bag-check"); } +.bi-bag-dash-fill::before { content: map-get($bootstrap-icons-map, "bag-dash-fill"); } +.bi-bag-dash::before { content: map-get($bootstrap-icons-map, "bag-dash"); } +.bi-bag-fill::before { content: map-get($bootstrap-icons-map, "bag-fill"); } +.bi-bag-plus-fill::before { content: map-get($bootstrap-icons-map, "bag-plus-fill"); } +.bi-bag-plus::before { content: map-get($bootstrap-icons-map, "bag-plus"); } +.bi-bag-x-fill::before { content: map-get($bootstrap-icons-map, "bag-x-fill"); } +.bi-bag-x::before { content: map-get($bootstrap-icons-map, "bag-x"); } +.bi-bag::before { content: map-get($bootstrap-icons-map, "bag"); } +.bi-bar-chart-fill::before { content: map-get($bootstrap-icons-map, "bar-chart-fill"); } +.bi-bar-chart-line-fill::before { content: map-get($bootstrap-icons-map, "bar-chart-line-fill"); } +.bi-bar-chart-line::before { content: map-get($bootstrap-icons-map, "bar-chart-line"); } +.bi-bar-chart-steps::before { content: map-get($bootstrap-icons-map, "bar-chart-steps"); } +.bi-bar-chart::before { content: map-get($bootstrap-icons-map, "bar-chart"); } +.bi-basket-fill::before { content: map-get($bootstrap-icons-map, "basket-fill"); } +.bi-basket::before { content: map-get($bootstrap-icons-map, "basket"); } +.bi-basket2-fill::before { content: map-get($bootstrap-icons-map, "basket2-fill"); } +.bi-basket2::before { content: map-get($bootstrap-icons-map, "basket2"); } +.bi-basket3-fill::before { content: map-get($bootstrap-icons-map, "basket3-fill"); } +.bi-basket3::before { content: map-get($bootstrap-icons-map, "basket3"); } +.bi-battery-charging::before { content: map-get($bootstrap-icons-map, "battery-charging"); } +.bi-battery-full::before { content: map-get($bootstrap-icons-map, "battery-full"); } +.bi-battery-half::before { content: map-get($bootstrap-icons-map, "battery-half"); } +.bi-battery::before { content: map-get($bootstrap-icons-map, "battery"); } +.bi-bell-fill::before { content: map-get($bootstrap-icons-map, "bell-fill"); } +.bi-bell::before { content: map-get($bootstrap-icons-map, "bell"); } +.bi-bezier::before { content: map-get($bootstrap-icons-map, "bezier"); } +.bi-bezier2::before { content: map-get($bootstrap-icons-map, "bezier2"); } +.bi-bicycle::before { content: map-get($bootstrap-icons-map, "bicycle"); } +.bi-binoculars-fill::before { content: map-get($bootstrap-icons-map, "binoculars-fill"); } +.bi-binoculars::before { content: map-get($bootstrap-icons-map, "binoculars"); } +.bi-blockquote-left::before { content: map-get($bootstrap-icons-map, "blockquote-left"); } +.bi-blockquote-right::before { content: map-get($bootstrap-icons-map, "blockquote-right"); } +.bi-book-fill::before { content: map-get($bootstrap-icons-map, "book-fill"); } +.bi-book-half::before { content: map-get($bootstrap-icons-map, "book-half"); } +.bi-book::before { content: map-get($bootstrap-icons-map, "book"); } +.bi-bookmark-check-fill::before { content: map-get($bootstrap-icons-map, "bookmark-check-fill"); } +.bi-bookmark-check::before { content: map-get($bootstrap-icons-map, "bookmark-check"); } +.bi-bookmark-dash-fill::before { content: map-get($bootstrap-icons-map, "bookmark-dash-fill"); } +.bi-bookmark-dash::before { content: map-get($bootstrap-icons-map, "bookmark-dash"); } +.bi-bookmark-fill::before { content: map-get($bootstrap-icons-map, "bookmark-fill"); } +.bi-bookmark-heart-fill::before { content: map-get($bootstrap-icons-map, "bookmark-heart-fill"); } +.bi-bookmark-heart::before { content: map-get($bootstrap-icons-map, "bookmark-heart"); } +.bi-bookmark-plus-fill::before { content: map-get($bootstrap-icons-map, "bookmark-plus-fill"); } +.bi-bookmark-plus::before { content: map-get($bootstrap-icons-map, "bookmark-plus"); } +.bi-bookmark-star-fill::before { content: map-get($bootstrap-icons-map, "bookmark-star-fill"); } +.bi-bookmark-star::before { content: map-get($bootstrap-icons-map, "bookmark-star"); } +.bi-bookmark-x-fill::before { content: map-get($bootstrap-icons-map, "bookmark-x-fill"); } +.bi-bookmark-x::before { content: map-get($bootstrap-icons-map, "bookmark-x"); } +.bi-bookmark::before { content: map-get($bootstrap-icons-map, "bookmark"); } +.bi-bookmarks-fill::before { content: map-get($bootstrap-icons-map, "bookmarks-fill"); } +.bi-bookmarks::before { content: map-get($bootstrap-icons-map, "bookmarks"); } +.bi-bookshelf::before { content: map-get($bootstrap-icons-map, "bookshelf"); } +.bi-bootstrap-fill::before { content: map-get($bootstrap-icons-map, "bootstrap-fill"); } +.bi-bootstrap-reboot::before { content: map-get($bootstrap-icons-map, "bootstrap-reboot"); } +.bi-bootstrap::before { content: map-get($bootstrap-icons-map, "bootstrap"); } +.bi-border-all::before { content: map-get($bootstrap-icons-map, "border-all"); } +.bi-border-bottom::before { content: map-get($bootstrap-icons-map, "border-bottom"); } +.bi-border-center::before { content: map-get($bootstrap-icons-map, "border-center"); } +.bi-border-inner::before { content: map-get($bootstrap-icons-map, "border-inner"); } +.bi-border-left::before { content: map-get($bootstrap-icons-map, "border-left"); } +.bi-border-middle::before { content: map-get($bootstrap-icons-map, "border-middle"); } +.bi-border-outer::before { content: map-get($bootstrap-icons-map, "border-outer"); } +.bi-border-right::before { content: map-get($bootstrap-icons-map, "border-right"); } +.bi-border-style::before { content: map-get($bootstrap-icons-map, "border-style"); } +.bi-border-top::before { content: map-get($bootstrap-icons-map, "border-top"); } +.bi-border-width::before { content: map-get($bootstrap-icons-map, "border-width"); } +.bi-border::before { content: map-get($bootstrap-icons-map, "border"); } +.bi-bounding-box-circles::before { content: map-get($bootstrap-icons-map, "bounding-box-circles"); } +.bi-bounding-box::before { content: map-get($bootstrap-icons-map, "bounding-box"); } +.bi-box-arrow-down-left::before { content: map-get($bootstrap-icons-map, "box-arrow-down-left"); } +.bi-box-arrow-down-right::before { content: map-get($bootstrap-icons-map, "box-arrow-down-right"); } +.bi-box-arrow-down::before { content: map-get($bootstrap-icons-map, "box-arrow-down"); } +.bi-box-arrow-in-down-left::before { content: map-get($bootstrap-icons-map, "box-arrow-in-down-left"); } +.bi-box-arrow-in-down-right::before { content: map-get($bootstrap-icons-map, "box-arrow-in-down-right"); } +.bi-box-arrow-in-down::before { content: map-get($bootstrap-icons-map, "box-arrow-in-down"); } +.bi-box-arrow-in-left::before { content: map-get($bootstrap-icons-map, "box-arrow-in-left"); } +.bi-box-arrow-in-right::before { content: map-get($bootstrap-icons-map, "box-arrow-in-right"); } +.bi-box-arrow-in-up-left::before { content: map-get($bootstrap-icons-map, "box-arrow-in-up-left"); } +.bi-box-arrow-in-up-right::before { content: map-get($bootstrap-icons-map, "box-arrow-in-up-right"); } +.bi-box-arrow-in-up::before { content: map-get($bootstrap-icons-map, "box-arrow-in-up"); } +.bi-box-arrow-left::before { content: map-get($bootstrap-icons-map, "box-arrow-left"); } +.bi-box-arrow-right::before { content: map-get($bootstrap-icons-map, "box-arrow-right"); } +.bi-box-arrow-up-left::before { content: map-get($bootstrap-icons-map, "box-arrow-up-left"); } +.bi-box-arrow-up-right::before { content: map-get($bootstrap-icons-map, "box-arrow-up-right"); } +.bi-box-arrow-up::before { content: map-get($bootstrap-icons-map, "box-arrow-up"); } +.bi-box-seam::before { content: map-get($bootstrap-icons-map, "box-seam"); } +.bi-box::before { content: map-get($bootstrap-icons-map, "box"); } +.bi-braces::before { content: map-get($bootstrap-icons-map, "braces"); } +.bi-bricks::before { content: map-get($bootstrap-icons-map, "bricks"); } +.bi-briefcase-fill::before { content: map-get($bootstrap-icons-map, "briefcase-fill"); } +.bi-briefcase::before { content: map-get($bootstrap-icons-map, "briefcase"); } +.bi-brightness-alt-high-fill::before { content: map-get($bootstrap-icons-map, "brightness-alt-high-fill"); } +.bi-brightness-alt-high::before { content: map-get($bootstrap-icons-map, "brightness-alt-high"); } +.bi-brightness-alt-low-fill::before { content: map-get($bootstrap-icons-map, "brightness-alt-low-fill"); } +.bi-brightness-alt-low::before { content: map-get($bootstrap-icons-map, "brightness-alt-low"); } +.bi-brightness-high-fill::before { content: map-get($bootstrap-icons-map, "brightness-high-fill"); } +.bi-brightness-high::before { content: map-get($bootstrap-icons-map, "brightness-high"); } +.bi-brightness-low-fill::before { content: map-get($bootstrap-icons-map, "brightness-low-fill"); } +.bi-brightness-low::before { content: map-get($bootstrap-icons-map, "brightness-low"); } +.bi-broadcast-pin::before { content: map-get($bootstrap-icons-map, "broadcast-pin"); } +.bi-broadcast::before { content: map-get($bootstrap-icons-map, "broadcast"); } +.bi-brush-fill::before { content: map-get($bootstrap-icons-map, "brush-fill"); } +.bi-brush::before { content: map-get($bootstrap-icons-map, "brush"); } +.bi-bucket-fill::before { content: map-get($bootstrap-icons-map, "bucket-fill"); } +.bi-bucket::before { content: map-get($bootstrap-icons-map, "bucket"); } +.bi-bug-fill::before { content: map-get($bootstrap-icons-map, "bug-fill"); } +.bi-bug::before { content: map-get($bootstrap-icons-map, "bug"); } +.bi-building::before { content: map-get($bootstrap-icons-map, "building"); } +.bi-bullseye::before { content: map-get($bootstrap-icons-map, "bullseye"); } +.bi-calculator-fill::before { content: map-get($bootstrap-icons-map, "calculator-fill"); } +.bi-calculator::before { content: map-get($bootstrap-icons-map, "calculator"); } +.bi-calendar-check-fill::before { content: map-get($bootstrap-icons-map, "calendar-check-fill"); } +.bi-calendar-check::before { content: map-get($bootstrap-icons-map, "calendar-check"); } +.bi-calendar-date-fill::before { content: map-get($bootstrap-icons-map, "calendar-date-fill"); } +.bi-calendar-date::before { content: map-get($bootstrap-icons-map, "calendar-date"); } +.bi-calendar-day-fill::before { content: map-get($bootstrap-icons-map, "calendar-day-fill"); } +.bi-calendar-day::before { content: map-get($bootstrap-icons-map, "calendar-day"); } +.bi-calendar-event-fill::before { content: map-get($bootstrap-icons-map, "calendar-event-fill"); } +.bi-calendar-event::before { content: map-get($bootstrap-icons-map, "calendar-event"); } +.bi-calendar-fill::before { content: map-get($bootstrap-icons-map, "calendar-fill"); } +.bi-calendar-minus-fill::before { content: map-get($bootstrap-icons-map, "calendar-minus-fill"); } +.bi-calendar-minus::before { content: map-get($bootstrap-icons-map, "calendar-minus"); } +.bi-calendar-month-fill::before { content: map-get($bootstrap-icons-map, "calendar-month-fill"); } +.bi-calendar-month::before { content: map-get($bootstrap-icons-map, "calendar-month"); } +.bi-calendar-plus-fill::before { content: map-get($bootstrap-icons-map, "calendar-plus-fill"); } +.bi-calendar-plus::before { content: map-get($bootstrap-icons-map, "calendar-plus"); } +.bi-calendar-range-fill::before { content: map-get($bootstrap-icons-map, "calendar-range-fill"); } +.bi-calendar-range::before { content: map-get($bootstrap-icons-map, "calendar-range"); } +.bi-calendar-week-fill::before { content: map-get($bootstrap-icons-map, "calendar-week-fill"); } +.bi-calendar-week::before { content: map-get($bootstrap-icons-map, "calendar-week"); } +.bi-calendar-x-fill::before { content: map-get($bootstrap-icons-map, "calendar-x-fill"); } +.bi-calendar-x::before { content: map-get($bootstrap-icons-map, "calendar-x"); } +.bi-calendar::before { content: map-get($bootstrap-icons-map, "calendar"); } +.bi-calendar2-check-fill::before { content: map-get($bootstrap-icons-map, "calendar2-check-fill"); } +.bi-calendar2-check::before { content: map-get($bootstrap-icons-map, "calendar2-check"); } +.bi-calendar2-date-fill::before { content: map-get($bootstrap-icons-map, "calendar2-date-fill"); } +.bi-calendar2-date::before { content: map-get($bootstrap-icons-map, "calendar2-date"); } +.bi-calendar2-day-fill::before { content: map-get($bootstrap-icons-map, "calendar2-day-fill"); } +.bi-calendar2-day::before { content: map-get($bootstrap-icons-map, "calendar2-day"); } +.bi-calendar2-event-fill::before { content: map-get($bootstrap-icons-map, "calendar2-event-fill"); } +.bi-calendar2-event::before { content: map-get($bootstrap-icons-map, "calendar2-event"); } +.bi-calendar2-fill::before { content: map-get($bootstrap-icons-map, "calendar2-fill"); } +.bi-calendar2-minus-fill::before { content: map-get($bootstrap-icons-map, "calendar2-minus-fill"); } +.bi-calendar2-minus::before { content: map-get($bootstrap-icons-map, "calendar2-minus"); } +.bi-calendar2-month-fill::before { content: map-get($bootstrap-icons-map, "calendar2-month-fill"); } +.bi-calendar2-month::before { content: map-get($bootstrap-icons-map, "calendar2-month"); } +.bi-calendar2-plus-fill::before { content: map-get($bootstrap-icons-map, "calendar2-plus-fill"); } +.bi-calendar2-plus::before { content: map-get($bootstrap-icons-map, "calendar2-plus"); } +.bi-calendar2-range-fill::before { content: map-get($bootstrap-icons-map, "calendar2-range-fill"); } +.bi-calendar2-range::before { content: map-get($bootstrap-icons-map, "calendar2-range"); } +.bi-calendar2-week-fill::before { content: map-get($bootstrap-icons-map, "calendar2-week-fill"); } +.bi-calendar2-week::before { content: map-get($bootstrap-icons-map, "calendar2-week"); } +.bi-calendar2-x-fill::before { content: map-get($bootstrap-icons-map, "calendar2-x-fill"); } +.bi-calendar2-x::before { content: map-get($bootstrap-icons-map, "calendar2-x"); } +.bi-calendar2::before { content: map-get($bootstrap-icons-map, "calendar2"); } +.bi-calendar3-event-fill::before { content: map-get($bootstrap-icons-map, "calendar3-event-fill"); } +.bi-calendar3-event::before { content: map-get($bootstrap-icons-map, "calendar3-event"); } +.bi-calendar3-fill::before { content: map-get($bootstrap-icons-map, "calendar3-fill"); } +.bi-calendar3-range-fill::before { content: map-get($bootstrap-icons-map, "calendar3-range-fill"); } +.bi-calendar3-range::before { content: map-get($bootstrap-icons-map, "calendar3-range"); } +.bi-calendar3-week-fill::before { content: map-get($bootstrap-icons-map, "calendar3-week-fill"); } +.bi-calendar3-week::before { content: map-get($bootstrap-icons-map, "calendar3-week"); } +.bi-calendar3::before { content: map-get($bootstrap-icons-map, "calendar3"); } +.bi-calendar4-event::before { content: map-get($bootstrap-icons-map, "calendar4-event"); } +.bi-calendar4-range::before { content: map-get($bootstrap-icons-map, "calendar4-range"); } +.bi-calendar4-week::before { content: map-get($bootstrap-icons-map, "calendar4-week"); } +.bi-calendar4::before { content: map-get($bootstrap-icons-map, "calendar4"); } +.bi-camera-fill::before { content: map-get($bootstrap-icons-map, "camera-fill"); } +.bi-camera-reels-fill::before { content: map-get($bootstrap-icons-map, "camera-reels-fill"); } +.bi-camera-reels::before { content: map-get($bootstrap-icons-map, "camera-reels"); } +.bi-camera-video-fill::before { content: map-get($bootstrap-icons-map, "camera-video-fill"); } +.bi-camera-video-off-fill::before { content: map-get($bootstrap-icons-map, "camera-video-off-fill"); } +.bi-camera-video-off::before { content: map-get($bootstrap-icons-map, "camera-video-off"); } +.bi-camera-video::before { content: map-get($bootstrap-icons-map, "camera-video"); } +.bi-camera::before { content: map-get($bootstrap-icons-map, "camera"); } +.bi-camera2::before { content: map-get($bootstrap-icons-map, "camera2"); } +.bi-capslock-fill::before { content: map-get($bootstrap-icons-map, "capslock-fill"); } +.bi-capslock::before { content: map-get($bootstrap-icons-map, "capslock"); } +.bi-card-checklist::before { content: map-get($bootstrap-icons-map, "card-checklist"); } +.bi-card-heading::before { content: map-get($bootstrap-icons-map, "card-heading"); } +.bi-card-image::before { content: map-get($bootstrap-icons-map, "card-image"); } +.bi-card-list::before { content: map-get($bootstrap-icons-map, "card-list"); } +.bi-card-text::before { content: map-get($bootstrap-icons-map, "card-text"); } +.bi-caret-down-fill::before { content: map-get($bootstrap-icons-map, "caret-down-fill"); } +.bi-caret-down-square-fill::before { content: map-get($bootstrap-icons-map, "caret-down-square-fill"); } +.bi-caret-down-square::before { content: map-get($bootstrap-icons-map, "caret-down-square"); } +.bi-caret-down::before { content: map-get($bootstrap-icons-map, "caret-down"); } +.bi-caret-left-fill::before { content: map-get($bootstrap-icons-map, "caret-left-fill"); } +.bi-caret-left-square-fill::before { content: map-get($bootstrap-icons-map, "caret-left-square-fill"); } +.bi-caret-left-square::before { content: map-get($bootstrap-icons-map, "caret-left-square"); } +.bi-caret-left::before { content: map-get($bootstrap-icons-map, "caret-left"); } +.bi-caret-right-fill::before { content: map-get($bootstrap-icons-map, "caret-right-fill"); } +.bi-caret-right-square-fill::before { content: map-get($bootstrap-icons-map, "caret-right-square-fill"); } +.bi-caret-right-square::before { content: map-get($bootstrap-icons-map, "caret-right-square"); } +.bi-caret-right::before { content: map-get($bootstrap-icons-map, "caret-right"); } +.bi-caret-up-fill::before { content: map-get($bootstrap-icons-map, "caret-up-fill"); } +.bi-caret-up-square-fill::before { content: map-get($bootstrap-icons-map, "caret-up-square-fill"); } +.bi-caret-up-square::before { content: map-get($bootstrap-icons-map, "caret-up-square"); } +.bi-caret-up::before { content: map-get($bootstrap-icons-map, "caret-up"); } +.bi-cart-check-fill::before { content: map-get($bootstrap-icons-map, "cart-check-fill"); } +.bi-cart-check::before { content: map-get($bootstrap-icons-map, "cart-check"); } +.bi-cart-dash-fill::before { content: map-get($bootstrap-icons-map, "cart-dash-fill"); } +.bi-cart-dash::before { content: map-get($bootstrap-icons-map, "cart-dash"); } +.bi-cart-fill::before { content: map-get($bootstrap-icons-map, "cart-fill"); } +.bi-cart-plus-fill::before { content: map-get($bootstrap-icons-map, "cart-plus-fill"); } +.bi-cart-plus::before { content: map-get($bootstrap-icons-map, "cart-plus"); } +.bi-cart-x-fill::before { content: map-get($bootstrap-icons-map, "cart-x-fill"); } +.bi-cart-x::before { content: map-get($bootstrap-icons-map, "cart-x"); } +.bi-cart::before { content: map-get($bootstrap-icons-map, "cart"); } +.bi-cart2::before { content: map-get($bootstrap-icons-map, "cart2"); } +.bi-cart3::before { content: map-get($bootstrap-icons-map, "cart3"); } +.bi-cart4::before { content: map-get($bootstrap-icons-map, "cart4"); } +.bi-cash-stack::before { content: map-get($bootstrap-icons-map, "cash-stack"); } +.bi-cash::before { content: map-get($bootstrap-icons-map, "cash"); } +.bi-cast::before { content: map-get($bootstrap-icons-map, "cast"); } +.bi-chat-dots-fill::before { content: map-get($bootstrap-icons-map, "chat-dots-fill"); } +.bi-chat-dots::before { content: map-get($bootstrap-icons-map, "chat-dots"); } +.bi-chat-fill::before { content: map-get($bootstrap-icons-map, "chat-fill"); } +.bi-chat-left-dots-fill::before { content: map-get($bootstrap-icons-map, "chat-left-dots-fill"); } +.bi-chat-left-dots::before { content: map-get($bootstrap-icons-map, "chat-left-dots"); } +.bi-chat-left-fill::before { content: map-get($bootstrap-icons-map, "chat-left-fill"); } +.bi-chat-left-quote-fill::before { content: map-get($bootstrap-icons-map, "chat-left-quote-fill"); } +.bi-chat-left-quote::before { content: map-get($bootstrap-icons-map, "chat-left-quote"); } +.bi-chat-left-text-fill::before { content: map-get($bootstrap-icons-map, "chat-left-text-fill"); } +.bi-chat-left-text::before { content: map-get($bootstrap-icons-map, "chat-left-text"); } +.bi-chat-left::before { content: map-get($bootstrap-icons-map, "chat-left"); } +.bi-chat-quote-fill::before { content: map-get($bootstrap-icons-map, "chat-quote-fill"); } +.bi-chat-quote::before { content: map-get($bootstrap-icons-map, "chat-quote"); } +.bi-chat-right-dots-fill::before { content: map-get($bootstrap-icons-map, "chat-right-dots-fill"); } +.bi-chat-right-dots::before { content: map-get($bootstrap-icons-map, "chat-right-dots"); } +.bi-chat-right-fill::before { content: map-get($bootstrap-icons-map, "chat-right-fill"); } +.bi-chat-right-quote-fill::before { content: map-get($bootstrap-icons-map, "chat-right-quote-fill"); } +.bi-chat-right-quote::before { content: map-get($bootstrap-icons-map, "chat-right-quote"); } +.bi-chat-right-text-fill::before { content: map-get($bootstrap-icons-map, "chat-right-text-fill"); } +.bi-chat-right-text::before { content: map-get($bootstrap-icons-map, "chat-right-text"); } +.bi-chat-right::before { content: map-get($bootstrap-icons-map, "chat-right"); } +.bi-chat-square-dots-fill::before { content: map-get($bootstrap-icons-map, "chat-square-dots-fill"); } +.bi-chat-square-dots::before { content: map-get($bootstrap-icons-map, "chat-square-dots"); } +.bi-chat-square-fill::before { content: map-get($bootstrap-icons-map, "chat-square-fill"); } +.bi-chat-square-quote-fill::before { content: map-get($bootstrap-icons-map, "chat-square-quote-fill"); } +.bi-chat-square-quote::before { content: map-get($bootstrap-icons-map, "chat-square-quote"); } +.bi-chat-square-text-fill::before { content: map-get($bootstrap-icons-map, "chat-square-text-fill"); } +.bi-chat-square-text::before { content: map-get($bootstrap-icons-map, "chat-square-text"); } +.bi-chat-square::before { content: map-get($bootstrap-icons-map, "chat-square"); } +.bi-chat-text-fill::before { content: map-get($bootstrap-icons-map, "chat-text-fill"); } +.bi-chat-text::before { content: map-get($bootstrap-icons-map, "chat-text"); } +.bi-chat::before { content: map-get($bootstrap-icons-map, "chat"); } +.bi-check-all::before { content: map-get($bootstrap-icons-map, "check-all"); } +.bi-check-circle-fill::before { content: map-get($bootstrap-icons-map, "check-circle-fill"); } +.bi-check-circle::before { content: map-get($bootstrap-icons-map, "check-circle"); } +.bi-check-square-fill::before { content: map-get($bootstrap-icons-map, "check-square-fill"); } +.bi-check-square::before { content: map-get($bootstrap-icons-map, "check-square"); } +.bi-check::before { content: map-get($bootstrap-icons-map, "check"); } +.bi-check2-all::before { content: map-get($bootstrap-icons-map, "check2-all"); } +.bi-check2-circle::before { content: map-get($bootstrap-icons-map, "check2-circle"); } +.bi-check2-square::before { content: map-get($bootstrap-icons-map, "check2-square"); } +.bi-check2::before { content: map-get($bootstrap-icons-map, "check2"); } +.bi-chevron-bar-contract::before { content: map-get($bootstrap-icons-map, "chevron-bar-contract"); } +.bi-chevron-bar-down::before { content: map-get($bootstrap-icons-map, "chevron-bar-down"); } +.bi-chevron-bar-expand::before { content: map-get($bootstrap-icons-map, "chevron-bar-expand"); } +.bi-chevron-bar-left::before { content: map-get($bootstrap-icons-map, "chevron-bar-left"); } +.bi-chevron-bar-right::before { content: map-get($bootstrap-icons-map, "chevron-bar-right"); } +.bi-chevron-bar-up::before { content: map-get($bootstrap-icons-map, "chevron-bar-up"); } +.bi-chevron-compact-down::before { content: map-get($bootstrap-icons-map, "chevron-compact-down"); } +.bi-chevron-compact-left::before { content: map-get($bootstrap-icons-map, "chevron-compact-left"); } +.bi-chevron-compact-right::before { content: map-get($bootstrap-icons-map, "chevron-compact-right"); } +.bi-chevron-compact-up::before { content: map-get($bootstrap-icons-map, "chevron-compact-up"); } +.bi-chevron-contract::before { content: map-get($bootstrap-icons-map, "chevron-contract"); } +.bi-chevron-double-down::before { content: map-get($bootstrap-icons-map, "chevron-double-down"); } +.bi-chevron-double-left::before { content: map-get($bootstrap-icons-map, "chevron-double-left"); } +.bi-chevron-double-right::before { content: map-get($bootstrap-icons-map, "chevron-double-right"); } +.bi-chevron-double-up::before { content: map-get($bootstrap-icons-map, "chevron-double-up"); } +.bi-chevron-down::before { content: map-get($bootstrap-icons-map, "chevron-down"); } +.bi-chevron-expand::before { content: map-get($bootstrap-icons-map, "chevron-expand"); } +.bi-chevron-left::before { content: map-get($bootstrap-icons-map, "chevron-left"); } +.bi-chevron-right::before { content: map-get($bootstrap-icons-map, "chevron-right"); } +.bi-chevron-up::before { content: map-get($bootstrap-icons-map, "chevron-up"); } +.bi-circle-fill::before { content: map-get($bootstrap-icons-map, "circle-fill"); } +.bi-circle-half::before { content: map-get($bootstrap-icons-map, "circle-half"); } +.bi-circle-square::before { content: map-get($bootstrap-icons-map, "circle-square"); } +.bi-circle::before { content: map-get($bootstrap-icons-map, "circle"); } +.bi-clipboard-check::before { content: map-get($bootstrap-icons-map, "clipboard-check"); } +.bi-clipboard-data::before { content: map-get($bootstrap-icons-map, "clipboard-data"); } +.bi-clipboard-minus::before { content: map-get($bootstrap-icons-map, "clipboard-minus"); } +.bi-clipboard-plus::before { content: map-get($bootstrap-icons-map, "clipboard-plus"); } +.bi-clipboard-x::before { content: map-get($bootstrap-icons-map, "clipboard-x"); } +.bi-clipboard::before { content: map-get($bootstrap-icons-map, "clipboard"); } +.bi-clock-fill::before { content: map-get($bootstrap-icons-map, "clock-fill"); } +.bi-clock-history::before { content: map-get($bootstrap-icons-map, "clock-history"); } +.bi-clock::before { content: map-get($bootstrap-icons-map, "clock"); } +.bi-cloud-arrow-down-fill::before { content: map-get($bootstrap-icons-map, "cloud-arrow-down-fill"); } +.bi-cloud-arrow-down::before { content: map-get($bootstrap-icons-map, "cloud-arrow-down"); } +.bi-cloud-arrow-up-fill::before { content: map-get($bootstrap-icons-map, "cloud-arrow-up-fill"); } +.bi-cloud-arrow-up::before { content: map-get($bootstrap-icons-map, "cloud-arrow-up"); } +.bi-cloud-check-fill::before { content: map-get($bootstrap-icons-map, "cloud-check-fill"); } +.bi-cloud-check::before { content: map-get($bootstrap-icons-map, "cloud-check"); } +.bi-cloud-download-fill::before { content: map-get($bootstrap-icons-map, "cloud-download-fill"); } +.bi-cloud-download::before { content: map-get($bootstrap-icons-map, "cloud-download"); } +.bi-cloud-drizzle-fill::before { content: map-get($bootstrap-icons-map, "cloud-drizzle-fill"); } +.bi-cloud-drizzle::before { content: map-get($bootstrap-icons-map, "cloud-drizzle"); } +.bi-cloud-fill::before { content: map-get($bootstrap-icons-map, "cloud-fill"); } +.bi-cloud-fog-fill::before { content: map-get($bootstrap-icons-map, "cloud-fog-fill"); } +.bi-cloud-fog::before { content: map-get($bootstrap-icons-map, "cloud-fog"); } +.bi-cloud-fog2-fill::before { content: map-get($bootstrap-icons-map, "cloud-fog2-fill"); } +.bi-cloud-fog2::before { content: map-get($bootstrap-icons-map, "cloud-fog2"); } +.bi-cloud-hail-fill::before { content: map-get($bootstrap-icons-map, "cloud-hail-fill"); } +.bi-cloud-hail::before { content: map-get($bootstrap-icons-map, "cloud-hail"); } +.bi-cloud-haze-1::before { content: map-get($bootstrap-icons-map, "cloud-haze-1"); } +.bi-cloud-haze-fill::before { content: map-get($bootstrap-icons-map, "cloud-haze-fill"); } +.bi-cloud-haze::before { content: map-get($bootstrap-icons-map, "cloud-haze"); } +.bi-cloud-haze2-fill::before { content: map-get($bootstrap-icons-map, "cloud-haze2-fill"); } +.bi-cloud-lightning-fill::before { content: map-get($bootstrap-icons-map, "cloud-lightning-fill"); } +.bi-cloud-lightning-rain-fill::before { content: map-get($bootstrap-icons-map, "cloud-lightning-rain-fill"); } +.bi-cloud-lightning-rain::before { content: map-get($bootstrap-icons-map, "cloud-lightning-rain"); } +.bi-cloud-lightning::before { content: map-get($bootstrap-icons-map, "cloud-lightning"); } +.bi-cloud-minus-fill::before { content: map-get($bootstrap-icons-map, "cloud-minus-fill"); } +.bi-cloud-minus::before { content: map-get($bootstrap-icons-map, "cloud-minus"); } +.bi-cloud-moon-fill::before { content: map-get($bootstrap-icons-map, "cloud-moon-fill"); } +.bi-cloud-moon::before { content: map-get($bootstrap-icons-map, "cloud-moon"); } +.bi-cloud-plus-fill::before { content: map-get($bootstrap-icons-map, "cloud-plus-fill"); } +.bi-cloud-plus::before { content: map-get($bootstrap-icons-map, "cloud-plus"); } +.bi-cloud-rain-fill::before { content: map-get($bootstrap-icons-map, "cloud-rain-fill"); } +.bi-cloud-rain-heavy-fill::before { content: map-get($bootstrap-icons-map, "cloud-rain-heavy-fill"); } +.bi-cloud-rain-heavy::before { content: map-get($bootstrap-icons-map, "cloud-rain-heavy"); } +.bi-cloud-rain::before { content: map-get($bootstrap-icons-map, "cloud-rain"); } +.bi-cloud-slash-fill::before { content: map-get($bootstrap-icons-map, "cloud-slash-fill"); } +.bi-cloud-slash::before { content: map-get($bootstrap-icons-map, "cloud-slash"); } +.bi-cloud-sleet-fill::before { content: map-get($bootstrap-icons-map, "cloud-sleet-fill"); } +.bi-cloud-sleet::before { content: map-get($bootstrap-icons-map, "cloud-sleet"); } +.bi-cloud-snow-fill::before { content: map-get($bootstrap-icons-map, "cloud-snow-fill"); } +.bi-cloud-snow::before { content: map-get($bootstrap-icons-map, "cloud-snow"); } +.bi-cloud-sun-fill::before { content: map-get($bootstrap-icons-map, "cloud-sun-fill"); } +.bi-cloud-sun::before { content: map-get($bootstrap-icons-map, "cloud-sun"); } +.bi-cloud-upload-fill::before { content: map-get($bootstrap-icons-map, "cloud-upload-fill"); } +.bi-cloud-upload::before { content: map-get($bootstrap-icons-map, "cloud-upload"); } +.bi-cloud::before { content: map-get($bootstrap-icons-map, "cloud"); } +.bi-clouds-fill::before { content: map-get($bootstrap-icons-map, "clouds-fill"); } +.bi-clouds::before { content: map-get($bootstrap-icons-map, "clouds"); } +.bi-cloudy-fill::before { content: map-get($bootstrap-icons-map, "cloudy-fill"); } +.bi-cloudy::before { content: map-get($bootstrap-icons-map, "cloudy"); } +.bi-code-slash::before { content: map-get($bootstrap-icons-map, "code-slash"); } +.bi-code-square::before { content: map-get($bootstrap-icons-map, "code-square"); } +.bi-code::before { content: map-get($bootstrap-icons-map, "code"); } +.bi-collection-fill::before { content: map-get($bootstrap-icons-map, "collection-fill"); } +.bi-collection-play-fill::before { content: map-get($bootstrap-icons-map, "collection-play-fill"); } +.bi-collection-play::before { content: map-get($bootstrap-icons-map, "collection-play"); } +.bi-collection::before { content: map-get($bootstrap-icons-map, "collection"); } +.bi-columns-gap::before { content: map-get($bootstrap-icons-map, "columns-gap"); } +.bi-columns::before { content: map-get($bootstrap-icons-map, "columns"); } +.bi-command::before { content: map-get($bootstrap-icons-map, "command"); } +.bi-compass-fill::before { content: map-get($bootstrap-icons-map, "compass-fill"); } +.bi-compass::before { content: map-get($bootstrap-icons-map, "compass"); } +.bi-cone-striped::before { content: map-get($bootstrap-icons-map, "cone-striped"); } +.bi-cone::before { content: map-get($bootstrap-icons-map, "cone"); } +.bi-controller::before { content: map-get($bootstrap-icons-map, "controller"); } +.bi-cpu-fill::before { content: map-get($bootstrap-icons-map, "cpu-fill"); } +.bi-cpu::before { content: map-get($bootstrap-icons-map, "cpu"); } +.bi-credit-card-2-back-fill::before { content: map-get($bootstrap-icons-map, "credit-card-2-back-fill"); } +.bi-credit-card-2-back::before { content: map-get($bootstrap-icons-map, "credit-card-2-back"); } +.bi-credit-card-2-front-fill::before { content: map-get($bootstrap-icons-map, "credit-card-2-front-fill"); } +.bi-credit-card-2-front::before { content: map-get($bootstrap-icons-map, "credit-card-2-front"); } +.bi-credit-card-fill::before { content: map-get($bootstrap-icons-map, "credit-card-fill"); } +.bi-credit-card::before { content: map-get($bootstrap-icons-map, "credit-card"); } +.bi-crop::before { content: map-get($bootstrap-icons-map, "crop"); } +.bi-cup-fill::before { content: map-get($bootstrap-icons-map, "cup-fill"); } +.bi-cup-straw::before { content: map-get($bootstrap-icons-map, "cup-straw"); } +.bi-cup::before { content: map-get($bootstrap-icons-map, "cup"); } +.bi-cursor-fill::before { content: map-get($bootstrap-icons-map, "cursor-fill"); } +.bi-cursor-text::before { content: map-get($bootstrap-icons-map, "cursor-text"); } +.bi-cursor::before { content: map-get($bootstrap-icons-map, "cursor"); } +.bi-dash-circle-dotted::before { content: map-get($bootstrap-icons-map, "dash-circle-dotted"); } +.bi-dash-circle-fill::before { content: map-get($bootstrap-icons-map, "dash-circle-fill"); } +.bi-dash-circle::before { content: map-get($bootstrap-icons-map, "dash-circle"); } +.bi-dash-square-dotted::before { content: map-get($bootstrap-icons-map, "dash-square-dotted"); } +.bi-dash-square-fill::before { content: map-get($bootstrap-icons-map, "dash-square-fill"); } +.bi-dash-square::before { content: map-get($bootstrap-icons-map, "dash-square"); } +.bi-dash::before { content: map-get($bootstrap-icons-map, "dash"); } +.bi-diagram-2-fill::before { content: map-get($bootstrap-icons-map, "diagram-2-fill"); } +.bi-diagram-2::before { content: map-get($bootstrap-icons-map, "diagram-2"); } +.bi-diagram-3-fill::before { content: map-get($bootstrap-icons-map, "diagram-3-fill"); } +.bi-diagram-3::before { content: map-get($bootstrap-icons-map, "diagram-3"); } +.bi-diamond-fill::before { content: map-get($bootstrap-icons-map, "diamond-fill"); } +.bi-diamond-half::before { content: map-get($bootstrap-icons-map, "diamond-half"); } +.bi-diamond::before { content: map-get($bootstrap-icons-map, "diamond"); } +.bi-dice-1-fill::before { content: map-get($bootstrap-icons-map, "dice-1-fill"); } +.bi-dice-1::before { content: map-get($bootstrap-icons-map, "dice-1"); } +.bi-dice-2-fill::before { content: map-get($bootstrap-icons-map, "dice-2-fill"); } +.bi-dice-2::before { content: map-get($bootstrap-icons-map, "dice-2"); } +.bi-dice-3-fill::before { content: map-get($bootstrap-icons-map, "dice-3-fill"); } +.bi-dice-3::before { content: map-get($bootstrap-icons-map, "dice-3"); } +.bi-dice-4-fill::before { content: map-get($bootstrap-icons-map, "dice-4-fill"); } +.bi-dice-4::before { content: map-get($bootstrap-icons-map, "dice-4"); } +.bi-dice-5-fill::before { content: map-get($bootstrap-icons-map, "dice-5-fill"); } +.bi-dice-5::before { content: map-get($bootstrap-icons-map, "dice-5"); } +.bi-dice-6-fill::before { content: map-get($bootstrap-icons-map, "dice-6-fill"); } +.bi-dice-6::before { content: map-get($bootstrap-icons-map, "dice-6"); } +.bi-disc-fill::before { content: map-get($bootstrap-icons-map, "disc-fill"); } +.bi-disc::before { content: map-get($bootstrap-icons-map, "disc"); } +.bi-discord::before { content: map-get($bootstrap-icons-map, "discord"); } +.bi-display-fill::before { content: map-get($bootstrap-icons-map, "display-fill"); } +.bi-display::before { content: map-get($bootstrap-icons-map, "display"); } +.bi-distribute-horizontal::before { content: map-get($bootstrap-icons-map, "distribute-horizontal"); } +.bi-distribute-vertical::before { content: map-get($bootstrap-icons-map, "distribute-vertical"); } +.bi-door-closed-fill::before { content: map-get($bootstrap-icons-map, "door-closed-fill"); } +.bi-door-closed::before { content: map-get($bootstrap-icons-map, "door-closed"); } +.bi-door-open-fill::before { content: map-get($bootstrap-icons-map, "door-open-fill"); } +.bi-door-open::before { content: map-get($bootstrap-icons-map, "door-open"); } +.bi-dot::before { content: map-get($bootstrap-icons-map, "dot"); } +.bi-download::before { content: map-get($bootstrap-icons-map, "download"); } +.bi-droplet-fill::before { content: map-get($bootstrap-icons-map, "droplet-fill"); } +.bi-droplet-half::before { content: map-get($bootstrap-icons-map, "droplet-half"); } +.bi-droplet::before { content: map-get($bootstrap-icons-map, "droplet"); } +.bi-earbuds::before { content: map-get($bootstrap-icons-map, "earbuds"); } +.bi-easel-fill::before { content: map-get($bootstrap-icons-map, "easel-fill"); } +.bi-easel::before { content: map-get($bootstrap-icons-map, "easel"); } +.bi-egg-fill::before { content: map-get($bootstrap-icons-map, "egg-fill"); } +.bi-egg-fried::before { content: map-get($bootstrap-icons-map, "egg-fried"); } +.bi-egg::before { content: map-get($bootstrap-icons-map, "egg"); } +.bi-eject-fill::before { content: map-get($bootstrap-icons-map, "eject-fill"); } +.bi-eject::before { content: map-get($bootstrap-icons-map, "eject"); } +.bi-emoji-angry-fill::before { content: map-get($bootstrap-icons-map, "emoji-angry-fill"); } +.bi-emoji-angry::before { content: map-get($bootstrap-icons-map, "emoji-angry"); } +.bi-emoji-dizzy-fill::before { content: map-get($bootstrap-icons-map, "emoji-dizzy-fill"); } +.bi-emoji-dizzy::before { content: map-get($bootstrap-icons-map, "emoji-dizzy"); } +.bi-emoji-expressionless-fill::before { content: map-get($bootstrap-icons-map, "emoji-expressionless-fill"); } +.bi-emoji-expressionless::before { content: map-get($bootstrap-icons-map, "emoji-expressionless"); } +.bi-emoji-frown-fill::before { content: map-get($bootstrap-icons-map, "emoji-frown-fill"); } +.bi-emoji-frown::before { content: map-get($bootstrap-icons-map, "emoji-frown"); } +.bi-emoji-heart-eyes-fill::before { content: map-get($bootstrap-icons-map, "emoji-heart-eyes-fill"); } +.bi-emoji-heart-eyes::before { content: map-get($bootstrap-icons-map, "emoji-heart-eyes"); } +.bi-emoji-laughing-fill::before { content: map-get($bootstrap-icons-map, "emoji-laughing-fill"); } +.bi-emoji-laughing::before { content: map-get($bootstrap-icons-map, "emoji-laughing"); } +.bi-emoji-neutral-fill::before { content: map-get($bootstrap-icons-map, "emoji-neutral-fill"); } +.bi-emoji-neutral::before { content: map-get($bootstrap-icons-map, "emoji-neutral"); } +.bi-emoji-smile-fill::before { content: map-get($bootstrap-icons-map, "emoji-smile-fill"); } +.bi-emoji-smile-upside-down-fill::before { content: map-get($bootstrap-icons-map, "emoji-smile-upside-down-fill"); } +.bi-emoji-smile-upside-down::before { content: map-get($bootstrap-icons-map, "emoji-smile-upside-down"); } +.bi-emoji-smile::before { content: map-get($bootstrap-icons-map, "emoji-smile"); } +.bi-emoji-sunglasses-fill::before { content: map-get($bootstrap-icons-map, "emoji-sunglasses-fill"); } +.bi-emoji-sunglasses::before { content: map-get($bootstrap-icons-map, "emoji-sunglasses"); } +.bi-emoji-wink-fill::before { content: map-get($bootstrap-icons-map, "emoji-wink-fill"); } +.bi-emoji-wink::before { content: map-get($bootstrap-icons-map, "emoji-wink"); } +.bi-envelope-fill::before { content: map-get($bootstrap-icons-map, "envelope-fill"); } +.bi-envelope-open-fill::before { content: map-get($bootstrap-icons-map, "envelope-open-fill"); } +.bi-envelope-open::before { content: map-get($bootstrap-icons-map, "envelope-open"); } +.bi-envelope::before { content: map-get($bootstrap-icons-map, "envelope"); } +.bi-eraser-fill::before { content: map-get($bootstrap-icons-map, "eraser-fill"); } +.bi-eraser::before { content: map-get($bootstrap-icons-map, "eraser"); } +.bi-exclamation-circle-fill::before { content: map-get($bootstrap-icons-map, "exclamation-circle-fill"); } +.bi-exclamation-circle::before { content: map-get($bootstrap-icons-map, "exclamation-circle"); } +.bi-exclamation-diamond-fill::before { content: map-get($bootstrap-icons-map, "exclamation-diamond-fill"); } +.bi-exclamation-diamond::before { content: map-get($bootstrap-icons-map, "exclamation-diamond"); } +.bi-exclamation-octagon-fill::before { content: map-get($bootstrap-icons-map, "exclamation-octagon-fill"); } +.bi-exclamation-octagon::before { content: map-get($bootstrap-icons-map, "exclamation-octagon"); } +.bi-exclamation-square-fill::before { content: map-get($bootstrap-icons-map, "exclamation-square-fill"); } +.bi-exclamation-square::before { content: map-get($bootstrap-icons-map, "exclamation-square"); } +.bi-exclamation-triangle-fill::before { content: map-get($bootstrap-icons-map, "exclamation-triangle-fill"); } +.bi-exclamation-triangle::before { content: map-get($bootstrap-icons-map, "exclamation-triangle"); } +.bi-exclamation::before { content: map-get($bootstrap-icons-map, "exclamation"); } +.bi-exclude::before { content: map-get($bootstrap-icons-map, "exclude"); } +.bi-eye-fill::before { content: map-get($bootstrap-icons-map, "eye-fill"); } +.bi-eye-slash-fill::before { content: map-get($bootstrap-icons-map, "eye-slash-fill"); } +.bi-eye-slash::before { content: map-get($bootstrap-icons-map, "eye-slash"); } +.bi-eye::before { content: map-get($bootstrap-icons-map, "eye"); } +.bi-eyedropper::before { content: map-get($bootstrap-icons-map, "eyedropper"); } +.bi-eyeglasses::before { content: map-get($bootstrap-icons-map, "eyeglasses"); } +.bi-facebook::before { content: map-get($bootstrap-icons-map, "facebook"); } +.bi-file-arrow-down-fill::before { content: map-get($bootstrap-icons-map, "file-arrow-down-fill"); } +.bi-file-arrow-down::before { content: map-get($bootstrap-icons-map, "file-arrow-down"); } +.bi-file-arrow-up-fill::before { content: map-get($bootstrap-icons-map, "file-arrow-up-fill"); } +.bi-file-arrow-up::before { content: map-get($bootstrap-icons-map, "file-arrow-up"); } +.bi-file-bar-graph-fill::before { content: map-get($bootstrap-icons-map, "file-bar-graph-fill"); } +.bi-file-bar-graph::before { content: map-get($bootstrap-icons-map, "file-bar-graph"); } +.bi-file-binary-fill::before { content: map-get($bootstrap-icons-map, "file-binary-fill"); } +.bi-file-binary::before { content: map-get($bootstrap-icons-map, "file-binary"); } +.bi-file-break-fill::before { content: map-get($bootstrap-icons-map, "file-break-fill"); } +.bi-file-break::before { content: map-get($bootstrap-icons-map, "file-break"); } +.bi-file-check-fill::before { content: map-get($bootstrap-icons-map, "file-check-fill"); } +.bi-file-check::before { content: map-get($bootstrap-icons-map, "file-check"); } +.bi-file-code-fill::before { content: map-get($bootstrap-icons-map, "file-code-fill"); } +.bi-file-code::before { content: map-get($bootstrap-icons-map, "file-code"); } +.bi-file-diff-fill::before { content: map-get($bootstrap-icons-map, "file-diff-fill"); } +.bi-file-diff::before { content: map-get($bootstrap-icons-map, "file-diff"); } +.bi-file-earmark-arrow-down-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-arrow-down-fill"); } +.bi-file-earmark-arrow-down::before { content: map-get($bootstrap-icons-map, "file-earmark-arrow-down"); } +.bi-file-earmark-arrow-up-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-arrow-up-fill"); } +.bi-file-earmark-arrow-up::before { content: map-get($bootstrap-icons-map, "file-earmark-arrow-up"); } +.bi-file-earmark-bar-graph-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-bar-graph-fill"); } +.bi-file-earmark-bar-graph::before { content: map-get($bootstrap-icons-map, "file-earmark-bar-graph"); } +.bi-file-earmark-binary-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-binary-fill"); } +.bi-file-earmark-binary::before { content: map-get($bootstrap-icons-map, "file-earmark-binary"); } +.bi-file-earmark-break-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-break-fill"); } +.bi-file-earmark-break::before { content: map-get($bootstrap-icons-map, "file-earmark-break"); } +.bi-file-earmark-check-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-check-fill"); } +.bi-file-earmark-check::before { content: map-get($bootstrap-icons-map, "file-earmark-check"); } +.bi-file-earmark-code-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-code-fill"); } +.bi-file-earmark-code::before { content: map-get($bootstrap-icons-map, "file-earmark-code"); } +.bi-file-earmark-diff-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-diff-fill"); } +.bi-file-earmark-diff::before { content: map-get($bootstrap-icons-map, "file-earmark-diff"); } +.bi-file-earmark-easel-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-easel-fill"); } +.bi-file-earmark-easel::before { content: map-get($bootstrap-icons-map, "file-earmark-easel"); } +.bi-file-earmark-excel-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-excel-fill"); } +.bi-file-earmark-excel::before { content: map-get($bootstrap-icons-map, "file-earmark-excel"); } +.bi-file-earmark-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-fill"); } +.bi-file-earmark-font-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-font-fill"); } +.bi-file-earmark-font::before { content: map-get($bootstrap-icons-map, "file-earmark-font"); } +.bi-file-earmark-image-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-image-fill"); } +.bi-file-earmark-image::before { content: map-get($bootstrap-icons-map, "file-earmark-image"); } +.bi-file-earmark-lock-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-lock-fill"); } +.bi-file-earmark-lock::before { content: map-get($bootstrap-icons-map, "file-earmark-lock"); } +.bi-file-earmark-lock2-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-lock2-fill"); } +.bi-file-earmark-lock2::before { content: map-get($bootstrap-icons-map, "file-earmark-lock2"); } +.bi-file-earmark-medical-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-medical-fill"); } +.bi-file-earmark-medical::before { content: map-get($bootstrap-icons-map, "file-earmark-medical"); } +.bi-file-earmark-minus-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-minus-fill"); } +.bi-file-earmark-minus::before { content: map-get($bootstrap-icons-map, "file-earmark-minus"); } +.bi-file-earmark-music-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-music-fill"); } +.bi-file-earmark-music::before { content: map-get($bootstrap-icons-map, "file-earmark-music"); } +.bi-file-earmark-person-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-person-fill"); } +.bi-file-earmark-person::before { content: map-get($bootstrap-icons-map, "file-earmark-person"); } +.bi-file-earmark-play-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-play-fill"); } +.bi-file-earmark-play::before { content: map-get($bootstrap-icons-map, "file-earmark-play"); } +.bi-file-earmark-plus-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-plus-fill"); } +.bi-file-earmark-plus::before { content: map-get($bootstrap-icons-map, "file-earmark-plus"); } +.bi-file-earmark-post-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-post-fill"); } +.bi-file-earmark-post::before { content: map-get($bootstrap-icons-map, "file-earmark-post"); } +.bi-file-earmark-ppt-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-ppt-fill"); } +.bi-file-earmark-ppt::before { content: map-get($bootstrap-icons-map, "file-earmark-ppt"); } +.bi-file-earmark-richtext-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-richtext-fill"); } +.bi-file-earmark-richtext::before { content: map-get($bootstrap-icons-map, "file-earmark-richtext"); } +.bi-file-earmark-ruled-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-ruled-fill"); } +.bi-file-earmark-ruled::before { content: map-get($bootstrap-icons-map, "file-earmark-ruled"); } +.bi-file-earmark-slides-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-slides-fill"); } +.bi-file-earmark-slides::before { content: map-get($bootstrap-icons-map, "file-earmark-slides"); } +.bi-file-earmark-spreadsheet-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-spreadsheet-fill"); } +.bi-file-earmark-spreadsheet::before { content: map-get($bootstrap-icons-map, "file-earmark-spreadsheet"); } +.bi-file-earmark-text-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-text-fill"); } +.bi-file-earmark-text::before { content: map-get($bootstrap-icons-map, "file-earmark-text"); } +.bi-file-earmark-word-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-word-fill"); } +.bi-file-earmark-word::before { content: map-get($bootstrap-icons-map, "file-earmark-word"); } +.bi-file-earmark-x-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-x-fill"); } +.bi-file-earmark-x::before { content: map-get($bootstrap-icons-map, "file-earmark-x"); } +.bi-file-earmark-zip-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-zip-fill"); } +.bi-file-earmark-zip::before { content: map-get($bootstrap-icons-map, "file-earmark-zip"); } +.bi-file-earmark::before { content: map-get($bootstrap-icons-map, "file-earmark"); } +.bi-file-easel-fill::before { content: map-get($bootstrap-icons-map, "file-easel-fill"); } +.bi-file-easel::before { content: map-get($bootstrap-icons-map, "file-easel"); } +.bi-file-excel-fill::before { content: map-get($bootstrap-icons-map, "file-excel-fill"); } +.bi-file-excel::before { content: map-get($bootstrap-icons-map, "file-excel"); } +.bi-file-fill::before { content: map-get($bootstrap-icons-map, "file-fill"); } +.bi-file-font-fill::before { content: map-get($bootstrap-icons-map, "file-font-fill"); } +.bi-file-font::before { content: map-get($bootstrap-icons-map, "file-font"); } +.bi-file-image-fill::before { content: map-get($bootstrap-icons-map, "file-image-fill"); } +.bi-file-image::before { content: map-get($bootstrap-icons-map, "file-image"); } +.bi-file-lock-fill::before { content: map-get($bootstrap-icons-map, "file-lock-fill"); } +.bi-file-lock::before { content: map-get($bootstrap-icons-map, "file-lock"); } +.bi-file-lock2-fill::before { content: map-get($bootstrap-icons-map, "file-lock2-fill"); } +.bi-file-lock2::before { content: map-get($bootstrap-icons-map, "file-lock2"); } +.bi-file-medical-fill::before { content: map-get($bootstrap-icons-map, "file-medical-fill"); } +.bi-file-medical::before { content: map-get($bootstrap-icons-map, "file-medical"); } +.bi-file-minus-fill::before { content: map-get($bootstrap-icons-map, "file-minus-fill"); } +.bi-file-minus::before { content: map-get($bootstrap-icons-map, "file-minus"); } +.bi-file-music-fill::before { content: map-get($bootstrap-icons-map, "file-music-fill"); } +.bi-file-music::before { content: map-get($bootstrap-icons-map, "file-music"); } +.bi-file-person-fill::before { content: map-get($bootstrap-icons-map, "file-person-fill"); } +.bi-file-person::before { content: map-get($bootstrap-icons-map, "file-person"); } +.bi-file-play-fill::before { content: map-get($bootstrap-icons-map, "file-play-fill"); } +.bi-file-play::before { content: map-get($bootstrap-icons-map, "file-play"); } +.bi-file-plus-fill::before { content: map-get($bootstrap-icons-map, "file-plus-fill"); } +.bi-file-plus::before { content: map-get($bootstrap-icons-map, "file-plus"); } +.bi-file-post-fill::before { content: map-get($bootstrap-icons-map, "file-post-fill"); } +.bi-file-post::before { content: map-get($bootstrap-icons-map, "file-post"); } +.bi-file-ppt-fill::before { content: map-get($bootstrap-icons-map, "file-ppt-fill"); } +.bi-file-ppt::before { content: map-get($bootstrap-icons-map, "file-ppt"); } +.bi-file-richtext-fill::before { content: map-get($bootstrap-icons-map, "file-richtext-fill"); } +.bi-file-richtext::before { content: map-get($bootstrap-icons-map, "file-richtext"); } +.bi-file-ruled-fill::before { content: map-get($bootstrap-icons-map, "file-ruled-fill"); } +.bi-file-ruled::before { content: map-get($bootstrap-icons-map, "file-ruled"); } +.bi-file-slides-fill::before { content: map-get($bootstrap-icons-map, "file-slides-fill"); } +.bi-file-slides::before { content: map-get($bootstrap-icons-map, "file-slides"); } +.bi-file-spreadsheet-fill::before { content: map-get($bootstrap-icons-map, "file-spreadsheet-fill"); } +.bi-file-spreadsheet::before { content: map-get($bootstrap-icons-map, "file-spreadsheet"); } +.bi-file-text-fill::before { content: map-get($bootstrap-icons-map, "file-text-fill"); } +.bi-file-text::before { content: map-get($bootstrap-icons-map, "file-text"); } +.bi-file-word-fill::before { content: map-get($bootstrap-icons-map, "file-word-fill"); } +.bi-file-word::before { content: map-get($bootstrap-icons-map, "file-word"); } +.bi-file-x-fill::before { content: map-get($bootstrap-icons-map, "file-x-fill"); } +.bi-file-x::before { content: map-get($bootstrap-icons-map, "file-x"); } +.bi-file-zip-fill::before { content: map-get($bootstrap-icons-map, "file-zip-fill"); } +.bi-file-zip::before { content: map-get($bootstrap-icons-map, "file-zip"); } +.bi-file::before { content: map-get($bootstrap-icons-map, "file"); } +.bi-files-alt::before { content: map-get($bootstrap-icons-map, "files-alt"); } +.bi-files::before { content: map-get($bootstrap-icons-map, "files"); } +.bi-film::before { content: map-get($bootstrap-icons-map, "film"); } +.bi-filter-circle-fill::before { content: map-get($bootstrap-icons-map, "filter-circle-fill"); } +.bi-filter-circle::before { content: map-get($bootstrap-icons-map, "filter-circle"); } +.bi-filter-left::before { content: map-get($bootstrap-icons-map, "filter-left"); } +.bi-filter-right::before { content: map-get($bootstrap-icons-map, "filter-right"); } +.bi-filter-square-fill::before { content: map-get($bootstrap-icons-map, "filter-square-fill"); } +.bi-filter-square::before { content: map-get($bootstrap-icons-map, "filter-square"); } +.bi-filter::before { content: map-get($bootstrap-icons-map, "filter"); } +.bi-flag-fill::before { content: map-get($bootstrap-icons-map, "flag-fill"); } +.bi-flag::before { content: map-get($bootstrap-icons-map, "flag"); } +.bi-flower1::before { content: map-get($bootstrap-icons-map, "flower1"); } +.bi-flower2::before { content: map-get($bootstrap-icons-map, "flower2"); } +.bi-flower3::before { content: map-get($bootstrap-icons-map, "flower3"); } +.bi-folder-check::before { content: map-get($bootstrap-icons-map, "folder-check"); } +.bi-folder-fill::before { content: map-get($bootstrap-icons-map, "folder-fill"); } +.bi-folder-minus::before { content: map-get($bootstrap-icons-map, "folder-minus"); } +.bi-folder-plus::before { content: map-get($bootstrap-icons-map, "folder-plus"); } +.bi-folder-symlink-fill::before { content: map-get($bootstrap-icons-map, "folder-symlink-fill"); } +.bi-folder-symlink::before { content: map-get($bootstrap-icons-map, "folder-symlink"); } +.bi-folder-x::before { content: map-get($bootstrap-icons-map, "folder-x"); } +.bi-folder::before { content: map-get($bootstrap-icons-map, "folder"); } +.bi-folder2-open::before { content: map-get($bootstrap-icons-map, "folder2-open"); } +.bi-folder2::before { content: map-get($bootstrap-icons-map, "folder2"); } +.bi-fonts::before { content: map-get($bootstrap-icons-map, "fonts"); } +.bi-forward-fill::before { content: map-get($bootstrap-icons-map, "forward-fill"); } +.bi-forward::before { content: map-get($bootstrap-icons-map, "forward"); } +.bi-front::before { content: map-get($bootstrap-icons-map, "front"); } +.bi-fullscreen-exit::before { content: map-get($bootstrap-icons-map, "fullscreen-exit"); } +.bi-fullscreen::before { content: map-get($bootstrap-icons-map, "fullscreen"); } +.bi-funnel-fill::before { content: map-get($bootstrap-icons-map, "funnel-fill"); } +.bi-funnel::before { content: map-get($bootstrap-icons-map, "funnel"); } +.bi-gear-fill::before { content: map-get($bootstrap-icons-map, "gear-fill"); } +.bi-gear-wide-connected::before { content: map-get($bootstrap-icons-map, "gear-wide-connected"); } +.bi-gear-wide::before { content: map-get($bootstrap-icons-map, "gear-wide"); } +.bi-gear::before { content: map-get($bootstrap-icons-map, "gear"); } +.bi-gem::before { content: map-get($bootstrap-icons-map, "gem"); } +.bi-geo-alt-fill::before { content: map-get($bootstrap-icons-map, "geo-alt-fill"); } +.bi-geo-alt::before { content: map-get($bootstrap-icons-map, "geo-alt"); } +.bi-geo-fill::before { content: map-get($bootstrap-icons-map, "geo-fill"); } +.bi-geo::before { content: map-get($bootstrap-icons-map, "geo"); } +.bi-gift-fill::before { content: map-get($bootstrap-icons-map, "gift-fill"); } +.bi-gift::before { content: map-get($bootstrap-icons-map, "gift"); } +.bi-github::before { content: map-get($bootstrap-icons-map, "github"); } +.bi-globe::before { content: map-get($bootstrap-icons-map, "globe"); } +.bi-globe2::before { content: map-get($bootstrap-icons-map, "globe2"); } +.bi-google::before { content: map-get($bootstrap-icons-map, "google"); } +.bi-graph-down::before { content: map-get($bootstrap-icons-map, "graph-down"); } +.bi-graph-up::before { content: map-get($bootstrap-icons-map, "graph-up"); } +.bi-grid-1x2-fill::before { content: map-get($bootstrap-icons-map, "grid-1x2-fill"); } +.bi-grid-1x2::before { content: map-get($bootstrap-icons-map, "grid-1x2"); } +.bi-grid-3x2-gap-fill::before { content: map-get($bootstrap-icons-map, "grid-3x2-gap-fill"); } +.bi-grid-3x2-gap::before { content: map-get($bootstrap-icons-map, "grid-3x2-gap"); } +.bi-grid-3x2::before { content: map-get($bootstrap-icons-map, "grid-3x2"); } +.bi-grid-3x3-gap-fill::before { content: map-get($bootstrap-icons-map, "grid-3x3-gap-fill"); } +.bi-grid-3x3-gap::before { content: map-get($bootstrap-icons-map, "grid-3x3-gap"); } +.bi-grid-3x3::before { content: map-get($bootstrap-icons-map, "grid-3x3"); } +.bi-grid-fill::before { content: map-get($bootstrap-icons-map, "grid-fill"); } +.bi-grid::before { content: map-get($bootstrap-icons-map, "grid"); } +.bi-grip-horizontal::before { content: map-get($bootstrap-icons-map, "grip-horizontal"); } +.bi-grip-vertical::before { content: map-get($bootstrap-icons-map, "grip-vertical"); } +.bi-hammer::before { content: map-get($bootstrap-icons-map, "hammer"); } +.bi-hand-index-fill::before { content: map-get($bootstrap-icons-map, "hand-index-fill"); } +.bi-hand-index-thumb-fill::before { content: map-get($bootstrap-icons-map, "hand-index-thumb-fill"); } +.bi-hand-index-thumb::before { content: map-get($bootstrap-icons-map, "hand-index-thumb"); } +.bi-hand-index::before { content: map-get($bootstrap-icons-map, "hand-index"); } +.bi-hand-thumbs-down-fill::before { content: map-get($bootstrap-icons-map, "hand-thumbs-down-fill"); } +.bi-hand-thumbs-down::before { content: map-get($bootstrap-icons-map, "hand-thumbs-down"); } +.bi-hand-thumbs-up-fill::before { content: map-get($bootstrap-icons-map, "hand-thumbs-up-fill"); } +.bi-hand-thumbs-up::before { content: map-get($bootstrap-icons-map, "hand-thumbs-up"); } +.bi-handbag-fill::before { content: map-get($bootstrap-icons-map, "handbag-fill"); } +.bi-handbag::before { content: map-get($bootstrap-icons-map, "handbag"); } +.bi-hash::before { content: map-get($bootstrap-icons-map, "hash"); } +.bi-hdd-fill::before { content: map-get($bootstrap-icons-map, "hdd-fill"); } +.bi-hdd-network-fill::before { content: map-get($bootstrap-icons-map, "hdd-network-fill"); } +.bi-hdd-network::before { content: map-get($bootstrap-icons-map, "hdd-network"); } +.bi-hdd-rack-fill::before { content: map-get($bootstrap-icons-map, "hdd-rack-fill"); } +.bi-hdd-rack::before { content: map-get($bootstrap-icons-map, "hdd-rack"); } +.bi-hdd-stack-fill::before { content: map-get($bootstrap-icons-map, "hdd-stack-fill"); } +.bi-hdd-stack::before { content: map-get($bootstrap-icons-map, "hdd-stack"); } +.bi-hdd::before { content: map-get($bootstrap-icons-map, "hdd"); } +.bi-headphones::before { content: map-get($bootstrap-icons-map, "headphones"); } +.bi-headset::before { content: map-get($bootstrap-icons-map, "headset"); } +.bi-heart-fill::before { content: map-get($bootstrap-icons-map, "heart-fill"); } +.bi-heart-half::before { content: map-get($bootstrap-icons-map, "heart-half"); } +.bi-heart::before { content: map-get($bootstrap-icons-map, "heart"); } +.bi-heptagon-fill::before { content: map-get($bootstrap-icons-map, "heptagon-fill"); } +.bi-heptagon-half::before { content: map-get($bootstrap-icons-map, "heptagon-half"); } +.bi-heptagon::before { content: map-get($bootstrap-icons-map, "heptagon"); } +.bi-hexagon-fill::before { content: map-get($bootstrap-icons-map, "hexagon-fill"); } +.bi-hexagon-half::before { content: map-get($bootstrap-icons-map, "hexagon-half"); } +.bi-hexagon::before { content: map-get($bootstrap-icons-map, "hexagon"); } +.bi-hourglass-bottom::before { content: map-get($bootstrap-icons-map, "hourglass-bottom"); } +.bi-hourglass-split::before { content: map-get($bootstrap-icons-map, "hourglass-split"); } +.bi-hourglass-top::before { content: map-get($bootstrap-icons-map, "hourglass-top"); } +.bi-hourglass::before { content: map-get($bootstrap-icons-map, "hourglass"); } +.bi-house-door-fill::before { content: map-get($bootstrap-icons-map, "house-door-fill"); } +.bi-house-door::before { content: map-get($bootstrap-icons-map, "house-door"); } +.bi-house-fill::before { content: map-get($bootstrap-icons-map, "house-fill"); } +.bi-house::before { content: map-get($bootstrap-icons-map, "house"); } +.bi-hr::before { content: map-get($bootstrap-icons-map, "hr"); } +.bi-hurricane::before { content: map-get($bootstrap-icons-map, "hurricane"); } +.bi-image-alt::before { content: map-get($bootstrap-icons-map, "image-alt"); } +.bi-image-fill::before { content: map-get($bootstrap-icons-map, "image-fill"); } +.bi-image::before { content: map-get($bootstrap-icons-map, "image"); } +.bi-images::before { content: map-get($bootstrap-icons-map, "images"); } +.bi-inbox-fill::before { content: map-get($bootstrap-icons-map, "inbox-fill"); } +.bi-inbox::before { content: map-get($bootstrap-icons-map, "inbox"); } +.bi-inboxes-fill::before { content: map-get($bootstrap-icons-map, "inboxes-fill"); } +.bi-inboxes::before { content: map-get($bootstrap-icons-map, "inboxes"); } +.bi-info-circle-fill::before { content: map-get($bootstrap-icons-map, "info-circle-fill"); } +.bi-info-circle::before { content: map-get($bootstrap-icons-map, "info-circle"); } +.bi-info-square-fill::before { content: map-get($bootstrap-icons-map, "info-square-fill"); } +.bi-info-square::before { content: map-get($bootstrap-icons-map, "info-square"); } +.bi-info::before { content: map-get($bootstrap-icons-map, "info"); } +.bi-input-cursor-text::before { content: map-get($bootstrap-icons-map, "input-cursor-text"); } +.bi-input-cursor::before { content: map-get($bootstrap-icons-map, "input-cursor"); } +.bi-instagram::before { content: map-get($bootstrap-icons-map, "instagram"); } +.bi-intersect::before { content: map-get($bootstrap-icons-map, "intersect"); } +.bi-journal-album::before { content: map-get($bootstrap-icons-map, "journal-album"); } +.bi-journal-arrow-down::before { content: map-get($bootstrap-icons-map, "journal-arrow-down"); } +.bi-journal-arrow-up::before { content: map-get($bootstrap-icons-map, "journal-arrow-up"); } +.bi-journal-bookmark-fill::before { content: map-get($bootstrap-icons-map, "journal-bookmark-fill"); } +.bi-journal-bookmark::before { content: map-get($bootstrap-icons-map, "journal-bookmark"); } +.bi-journal-check::before { content: map-get($bootstrap-icons-map, "journal-check"); } +.bi-journal-code::before { content: map-get($bootstrap-icons-map, "journal-code"); } +.bi-journal-medical::before { content: map-get($bootstrap-icons-map, "journal-medical"); } +.bi-journal-minus::before { content: map-get($bootstrap-icons-map, "journal-minus"); } +.bi-journal-plus::before { content: map-get($bootstrap-icons-map, "journal-plus"); } +.bi-journal-richtext::before { content: map-get($bootstrap-icons-map, "journal-richtext"); } +.bi-journal-text::before { content: map-get($bootstrap-icons-map, "journal-text"); } +.bi-journal-x::before { content: map-get($bootstrap-icons-map, "journal-x"); } +.bi-journal::before { content: map-get($bootstrap-icons-map, "journal"); } +.bi-journals::before { content: map-get($bootstrap-icons-map, "journals"); } +.bi-joystick::before { content: map-get($bootstrap-icons-map, "joystick"); } +.bi-justify-left::before { content: map-get($bootstrap-icons-map, "justify-left"); } +.bi-justify-right::before { content: map-get($bootstrap-icons-map, "justify-right"); } +.bi-justify::before { content: map-get($bootstrap-icons-map, "justify"); } +.bi-kanban-fill::before { content: map-get($bootstrap-icons-map, "kanban-fill"); } +.bi-kanban::before { content: map-get($bootstrap-icons-map, "kanban"); } +.bi-key-fill::before { content: map-get($bootstrap-icons-map, "key-fill"); } +.bi-key::before { content: map-get($bootstrap-icons-map, "key"); } +.bi-keyboard-fill::before { content: map-get($bootstrap-icons-map, "keyboard-fill"); } +.bi-keyboard::before { content: map-get($bootstrap-icons-map, "keyboard"); } +.bi-ladder::before { content: map-get($bootstrap-icons-map, "ladder"); } +.bi-lamp-fill::before { content: map-get($bootstrap-icons-map, "lamp-fill"); } +.bi-lamp::before { content: map-get($bootstrap-icons-map, "lamp"); } +.bi-laptop-fill::before { content: map-get($bootstrap-icons-map, "laptop-fill"); } +.bi-laptop::before { content: map-get($bootstrap-icons-map, "laptop"); } +.bi-layer-backward::before { content: map-get($bootstrap-icons-map, "layer-backward"); } +.bi-layer-forward::before { content: map-get($bootstrap-icons-map, "layer-forward"); } +.bi-layers-fill::before { content: map-get($bootstrap-icons-map, "layers-fill"); } +.bi-layers-half::before { content: map-get($bootstrap-icons-map, "layers-half"); } +.bi-layers::before { content: map-get($bootstrap-icons-map, "layers"); } +.bi-layout-sidebar-inset-reverse::before { content: map-get($bootstrap-icons-map, "layout-sidebar-inset-reverse"); } +.bi-layout-sidebar-inset::before { content: map-get($bootstrap-icons-map, "layout-sidebar-inset"); } +.bi-layout-sidebar-reverse::before { content: map-get($bootstrap-icons-map, "layout-sidebar-reverse"); } +.bi-layout-sidebar::before { content: map-get($bootstrap-icons-map, "layout-sidebar"); } +.bi-layout-split::before { content: map-get($bootstrap-icons-map, "layout-split"); } +.bi-layout-text-sidebar-reverse::before { content: map-get($bootstrap-icons-map, "layout-text-sidebar-reverse"); } +.bi-layout-text-sidebar::before { content: map-get($bootstrap-icons-map, "layout-text-sidebar"); } +.bi-layout-text-window-reverse::before { content: map-get($bootstrap-icons-map, "layout-text-window-reverse"); } +.bi-layout-text-window::before { content: map-get($bootstrap-icons-map, "layout-text-window"); } +.bi-layout-three-columns::before { content: map-get($bootstrap-icons-map, "layout-three-columns"); } +.bi-layout-wtf::before { content: map-get($bootstrap-icons-map, "layout-wtf"); } +.bi-life-preserver::before { content: map-get($bootstrap-icons-map, "life-preserver"); } +.bi-lightbulb-fill::before { content: map-get($bootstrap-icons-map, "lightbulb-fill"); } +.bi-lightbulb-off-fill::before { content: map-get($bootstrap-icons-map, "lightbulb-off-fill"); } +.bi-lightbulb-off::before { content: map-get($bootstrap-icons-map, "lightbulb-off"); } +.bi-lightbulb::before { content: map-get($bootstrap-icons-map, "lightbulb"); } +.bi-lightning-charge-fill::before { content: map-get($bootstrap-icons-map, "lightning-charge-fill"); } +.bi-lightning-charge::before { content: map-get($bootstrap-icons-map, "lightning-charge"); } +.bi-lightning-fill::before { content: map-get($bootstrap-icons-map, "lightning-fill"); } +.bi-lightning::before { content: map-get($bootstrap-icons-map, "lightning"); } +.bi-link-45deg::before { content: map-get($bootstrap-icons-map, "link-45deg"); } +.bi-link::before { content: map-get($bootstrap-icons-map, "link"); } +.bi-linkedin::before { content: map-get($bootstrap-icons-map, "linkedin"); } +.bi-list-check::before { content: map-get($bootstrap-icons-map, "list-check"); } +.bi-list-nested::before { content: map-get($bootstrap-icons-map, "list-nested"); } +.bi-list-ol::before { content: map-get($bootstrap-icons-map, "list-ol"); } +.bi-list-stars::before { content: map-get($bootstrap-icons-map, "list-stars"); } +.bi-list-task::before { content: map-get($bootstrap-icons-map, "list-task"); } +.bi-list-ul::before { content: map-get($bootstrap-icons-map, "list-ul"); } +.bi-list::before { content: map-get($bootstrap-icons-map, "list"); } +.bi-lock-fill::before { content: map-get($bootstrap-icons-map, "lock-fill"); } +.bi-lock::before { content: map-get($bootstrap-icons-map, "lock"); } +.bi-mailbox::before { content: map-get($bootstrap-icons-map, "mailbox"); } +.bi-mailbox2::before { content: map-get($bootstrap-icons-map, "mailbox2"); } +.bi-map-fill::before { content: map-get($bootstrap-icons-map, "map-fill"); } +.bi-map::before { content: map-get($bootstrap-icons-map, "map"); } +.bi-markdown-fill::before { content: map-get($bootstrap-icons-map, "markdown-fill"); } +.bi-markdown::before { content: map-get($bootstrap-icons-map, "markdown"); } +.bi-mask::before { content: map-get($bootstrap-icons-map, "mask"); } +.bi-megaphone-fill::before { content: map-get($bootstrap-icons-map, "megaphone-fill"); } +.bi-megaphone::before { content: map-get($bootstrap-icons-map, "megaphone"); } +.bi-menu-app-fill::before { content: map-get($bootstrap-icons-map, "menu-app-fill"); } +.bi-menu-app::before { content: map-get($bootstrap-icons-map, "menu-app"); } +.bi-menu-button-fill::before { content: map-get($bootstrap-icons-map, "menu-button-fill"); } +.bi-menu-button-wide-fill::before { content: map-get($bootstrap-icons-map, "menu-button-wide-fill"); } +.bi-menu-button-wide::before { content: map-get($bootstrap-icons-map, "menu-button-wide"); } +.bi-menu-button::before { content: map-get($bootstrap-icons-map, "menu-button"); } +.bi-menu-down::before { content: map-get($bootstrap-icons-map, "menu-down"); } +.bi-menu-up::before { content: map-get($bootstrap-icons-map, "menu-up"); } +.bi-mic-fill::before { content: map-get($bootstrap-icons-map, "mic-fill"); } +.bi-mic-mute-fill::before { content: map-get($bootstrap-icons-map, "mic-mute-fill"); } +.bi-mic-mute::before { content: map-get($bootstrap-icons-map, "mic-mute"); } +.bi-mic::before { content: map-get($bootstrap-icons-map, "mic"); } +.bi-minecart-loaded::before { content: map-get($bootstrap-icons-map, "minecart-loaded"); } +.bi-minecart::before { content: map-get($bootstrap-icons-map, "minecart"); } +.bi-moisture::before { content: map-get($bootstrap-icons-map, "moisture"); } +.bi-moon-fill::before { content: map-get($bootstrap-icons-map, "moon-fill"); } +.bi-moon-stars-fill::before { content: map-get($bootstrap-icons-map, "moon-stars-fill"); } +.bi-moon-stars::before { content: map-get($bootstrap-icons-map, "moon-stars"); } +.bi-moon::before { content: map-get($bootstrap-icons-map, "moon"); } +.bi-mouse-fill::before { content: map-get($bootstrap-icons-map, "mouse-fill"); } +.bi-mouse::before { content: map-get($bootstrap-icons-map, "mouse"); } +.bi-mouse2-fill::before { content: map-get($bootstrap-icons-map, "mouse2-fill"); } +.bi-mouse2::before { content: map-get($bootstrap-icons-map, "mouse2"); } +.bi-mouse3-fill::before { content: map-get($bootstrap-icons-map, "mouse3-fill"); } +.bi-mouse3::before { content: map-get($bootstrap-icons-map, "mouse3"); } +.bi-music-note-beamed::before { content: map-get($bootstrap-icons-map, "music-note-beamed"); } +.bi-music-note-list::before { content: map-get($bootstrap-icons-map, "music-note-list"); } +.bi-music-note::before { content: map-get($bootstrap-icons-map, "music-note"); } +.bi-music-player-fill::before { content: map-get($bootstrap-icons-map, "music-player-fill"); } +.bi-music-player::before { content: map-get($bootstrap-icons-map, "music-player"); } +.bi-newspaper::before { content: map-get($bootstrap-icons-map, "newspaper"); } +.bi-node-minus-fill::before { content: map-get($bootstrap-icons-map, "node-minus-fill"); } +.bi-node-minus::before { content: map-get($bootstrap-icons-map, "node-minus"); } +.bi-node-plus-fill::before { content: map-get($bootstrap-icons-map, "node-plus-fill"); } +.bi-node-plus::before { content: map-get($bootstrap-icons-map, "node-plus"); } +.bi-nut-fill::before { content: map-get($bootstrap-icons-map, "nut-fill"); } +.bi-nut::before { content: map-get($bootstrap-icons-map, "nut"); } +.bi-octagon-fill::before { content: map-get($bootstrap-icons-map, "octagon-fill"); } +.bi-octagon-half::before { content: map-get($bootstrap-icons-map, "octagon-half"); } +.bi-octagon::before { content: map-get($bootstrap-icons-map, "octagon"); } +.bi-option::before { content: map-get($bootstrap-icons-map, "option"); } +.bi-outlet::before { content: map-get($bootstrap-icons-map, "outlet"); } +.bi-paint-bucket::before { content: map-get($bootstrap-icons-map, "paint-bucket"); } +.bi-palette-fill::before { content: map-get($bootstrap-icons-map, "palette-fill"); } +.bi-palette::before { content: map-get($bootstrap-icons-map, "palette"); } +.bi-palette2::before { content: map-get($bootstrap-icons-map, "palette2"); } +.bi-paperclip::before { content: map-get($bootstrap-icons-map, "paperclip"); } +.bi-paragraph::before { content: map-get($bootstrap-icons-map, "paragraph"); } +.bi-patch-check-fill::before { content: map-get($bootstrap-icons-map, "patch-check-fill"); } +.bi-patch-check::before { content: map-get($bootstrap-icons-map, "patch-check"); } +.bi-patch-exclamation-fill::before { content: map-get($bootstrap-icons-map, "patch-exclamation-fill"); } +.bi-patch-exclamation::before { content: map-get($bootstrap-icons-map, "patch-exclamation"); } +.bi-patch-minus-fill::before { content: map-get($bootstrap-icons-map, "patch-minus-fill"); } +.bi-patch-minus::before { content: map-get($bootstrap-icons-map, "patch-minus"); } +.bi-patch-plus-fill::before { content: map-get($bootstrap-icons-map, "patch-plus-fill"); } +.bi-patch-plus::before { content: map-get($bootstrap-icons-map, "patch-plus"); } +.bi-patch-question-fill::before { content: map-get($bootstrap-icons-map, "patch-question-fill"); } +.bi-patch-question::before { content: map-get($bootstrap-icons-map, "patch-question"); } +.bi-pause-btn-fill::before { content: map-get($bootstrap-icons-map, "pause-btn-fill"); } +.bi-pause-btn::before { content: map-get($bootstrap-icons-map, "pause-btn"); } +.bi-pause-circle-fill::before { content: map-get($bootstrap-icons-map, "pause-circle-fill"); } +.bi-pause-circle::before { content: map-get($bootstrap-icons-map, "pause-circle"); } +.bi-pause-fill::before { content: map-get($bootstrap-icons-map, "pause-fill"); } +.bi-pause::before { content: map-get($bootstrap-icons-map, "pause"); } +.bi-peace-fill::before { content: map-get($bootstrap-icons-map, "peace-fill"); } +.bi-peace::before { content: map-get($bootstrap-icons-map, "peace"); } +.bi-pen-fill::before { content: map-get($bootstrap-icons-map, "pen-fill"); } +.bi-pen::before { content: map-get($bootstrap-icons-map, "pen"); } +.bi-pencil-fill::before { content: map-get($bootstrap-icons-map, "pencil-fill"); } +.bi-pencil-square::before { content: map-get($bootstrap-icons-map, "pencil-square"); } +.bi-pencil::before { content: map-get($bootstrap-icons-map, "pencil"); } +.bi-pentagon-fill::before { content: map-get($bootstrap-icons-map, "pentagon-fill"); } +.bi-pentagon-half::before { content: map-get($bootstrap-icons-map, "pentagon-half"); } +.bi-pentagon::before { content: map-get($bootstrap-icons-map, "pentagon"); } +.bi-people-fill::before { content: map-get($bootstrap-icons-map, "people-fill"); } +.bi-people::before { content: map-get($bootstrap-icons-map, "people"); } +.bi-percent::before { content: map-get($bootstrap-icons-map, "percent"); } +.bi-person-badge-fill::before { content: map-get($bootstrap-icons-map, "person-badge-fill"); } +.bi-person-badge::before { content: map-get($bootstrap-icons-map, "person-badge"); } +.bi-person-bounding-box::before { content: map-get($bootstrap-icons-map, "person-bounding-box"); } +.bi-person-check-fill::before { content: map-get($bootstrap-icons-map, "person-check-fill"); } +.bi-person-check::before { content: map-get($bootstrap-icons-map, "person-check"); } +.bi-person-circle::before { content: map-get($bootstrap-icons-map, "person-circle"); } +.bi-person-dash-fill::before { content: map-get($bootstrap-icons-map, "person-dash-fill"); } +.bi-person-dash::before { content: map-get($bootstrap-icons-map, "person-dash"); } +.bi-person-fill::before { content: map-get($bootstrap-icons-map, "person-fill"); } +.bi-person-lines-fill::before { content: map-get($bootstrap-icons-map, "person-lines-fill"); } +.bi-person-plus-fill::before { content: map-get($bootstrap-icons-map, "person-plus-fill"); } +.bi-person-plus::before { content: map-get($bootstrap-icons-map, "person-plus"); } +.bi-person-square::before { content: map-get($bootstrap-icons-map, "person-square"); } +.bi-person-x-fill::before { content: map-get($bootstrap-icons-map, "person-x-fill"); } +.bi-person-x::before { content: map-get($bootstrap-icons-map, "person-x"); } +.bi-person::before { content: map-get($bootstrap-icons-map, "person"); } +.bi-phone-fill::before { content: map-get($bootstrap-icons-map, "phone-fill"); } +.bi-phone-landscape-fill::before { content: map-get($bootstrap-icons-map, "phone-landscape-fill"); } +.bi-phone-landscape::before { content: map-get($bootstrap-icons-map, "phone-landscape"); } +.bi-phone-vibrate-fill::before { content: map-get($bootstrap-icons-map, "phone-vibrate-fill"); } +.bi-phone-vibrate::before { content: map-get($bootstrap-icons-map, "phone-vibrate"); } +.bi-phone::before { content: map-get($bootstrap-icons-map, "phone"); } +.bi-pie-chart-fill::before { content: map-get($bootstrap-icons-map, "pie-chart-fill"); } +.bi-pie-chart::before { content: map-get($bootstrap-icons-map, "pie-chart"); } +.bi-pin-angle-fill::before { content: map-get($bootstrap-icons-map, "pin-angle-fill"); } +.bi-pin-angle::before { content: map-get($bootstrap-icons-map, "pin-angle"); } +.bi-pin-fill::before { content: map-get($bootstrap-icons-map, "pin-fill"); } +.bi-pin::before { content: map-get($bootstrap-icons-map, "pin"); } +.bi-pip-fill::before { content: map-get($bootstrap-icons-map, "pip-fill"); } +.bi-pip::before { content: map-get($bootstrap-icons-map, "pip"); } +.bi-play-btn-fill::before { content: map-get($bootstrap-icons-map, "play-btn-fill"); } +.bi-play-btn::before { content: map-get($bootstrap-icons-map, "play-btn"); } +.bi-play-circle-fill::before { content: map-get($bootstrap-icons-map, "play-circle-fill"); } +.bi-play-circle::before { content: map-get($bootstrap-icons-map, "play-circle"); } +.bi-play-fill::before { content: map-get($bootstrap-icons-map, "play-fill"); } +.bi-play::before { content: map-get($bootstrap-icons-map, "play"); } +.bi-plug-fill::before { content: map-get($bootstrap-icons-map, "plug-fill"); } +.bi-plug::before { content: map-get($bootstrap-icons-map, "plug"); } +.bi-plus-circle-dotted::before { content: map-get($bootstrap-icons-map, "plus-circle-dotted"); } +.bi-plus-circle-fill::before { content: map-get($bootstrap-icons-map, "plus-circle-fill"); } +.bi-plus-circle::before { content: map-get($bootstrap-icons-map, "plus-circle"); } +.bi-plus-square-dotted::before { content: map-get($bootstrap-icons-map, "plus-square-dotted"); } +.bi-plus-square-fill::before { content: map-get($bootstrap-icons-map, "plus-square-fill"); } +.bi-plus-square::before { content: map-get($bootstrap-icons-map, "plus-square"); } +.bi-plus::before { content: map-get($bootstrap-icons-map, "plus"); } +.bi-power::before { content: map-get($bootstrap-icons-map, "power"); } +.bi-printer-fill::before { content: map-get($bootstrap-icons-map, "printer-fill"); } +.bi-printer::before { content: map-get($bootstrap-icons-map, "printer"); } +.bi-puzzle-fill::before { content: map-get($bootstrap-icons-map, "puzzle-fill"); } +.bi-puzzle::before { content: map-get($bootstrap-icons-map, "puzzle"); } +.bi-question-circle-fill::before { content: map-get($bootstrap-icons-map, "question-circle-fill"); } +.bi-question-circle::before { content: map-get($bootstrap-icons-map, "question-circle"); } +.bi-question-diamond-fill::before { content: map-get($bootstrap-icons-map, "question-diamond-fill"); } +.bi-question-diamond::before { content: map-get($bootstrap-icons-map, "question-diamond"); } +.bi-question-octagon-fill::before { content: map-get($bootstrap-icons-map, "question-octagon-fill"); } +.bi-question-octagon::before { content: map-get($bootstrap-icons-map, "question-octagon"); } +.bi-question-square-fill::before { content: map-get($bootstrap-icons-map, "question-square-fill"); } +.bi-question-square::before { content: map-get($bootstrap-icons-map, "question-square"); } +.bi-question::before { content: map-get($bootstrap-icons-map, "question"); } +.bi-rainbow::before { content: map-get($bootstrap-icons-map, "rainbow"); } +.bi-receipt-cutoff::before { content: map-get($bootstrap-icons-map, "receipt-cutoff"); } +.bi-receipt::before { content: map-get($bootstrap-icons-map, "receipt"); } +.bi-reception-0::before { content: map-get($bootstrap-icons-map, "reception-0"); } +.bi-reception-1::before { content: map-get($bootstrap-icons-map, "reception-1"); } +.bi-reception-2::before { content: map-get($bootstrap-icons-map, "reception-2"); } +.bi-reception-3::before { content: map-get($bootstrap-icons-map, "reception-3"); } +.bi-reception-4::before { content: map-get($bootstrap-icons-map, "reception-4"); } +.bi-record-btn-fill::before { content: map-get($bootstrap-icons-map, "record-btn-fill"); } +.bi-record-btn::before { content: map-get($bootstrap-icons-map, "record-btn"); } +.bi-record-circle-fill::before { content: map-get($bootstrap-icons-map, "record-circle-fill"); } +.bi-record-circle::before { content: map-get($bootstrap-icons-map, "record-circle"); } +.bi-record-fill::before { content: map-get($bootstrap-icons-map, "record-fill"); } +.bi-record::before { content: map-get($bootstrap-icons-map, "record"); } +.bi-record2-fill::before { content: map-get($bootstrap-icons-map, "record2-fill"); } +.bi-record2::before { content: map-get($bootstrap-icons-map, "record2"); } +.bi-reply-all-fill::before { content: map-get($bootstrap-icons-map, "reply-all-fill"); } +.bi-reply-all::before { content: map-get($bootstrap-icons-map, "reply-all"); } +.bi-reply-fill::before { content: map-get($bootstrap-icons-map, "reply-fill"); } +.bi-reply::before { content: map-get($bootstrap-icons-map, "reply"); } +.bi-rss-fill::before { content: map-get($bootstrap-icons-map, "rss-fill"); } +.bi-rss::before { content: map-get($bootstrap-icons-map, "rss"); } +.bi-rulers::before { content: map-get($bootstrap-icons-map, "rulers"); } +.bi-save-fill::before { content: map-get($bootstrap-icons-map, "save-fill"); } +.bi-save::before { content: map-get($bootstrap-icons-map, "save"); } +.bi-save2-fill::before { content: map-get($bootstrap-icons-map, "save2-fill"); } +.bi-save2::before { content: map-get($bootstrap-icons-map, "save2"); } +.bi-scissors::before { content: map-get($bootstrap-icons-map, "scissors"); } +.bi-screwdriver::before { content: map-get($bootstrap-icons-map, "screwdriver"); } +.bi-search::before { content: map-get($bootstrap-icons-map, "search"); } +.bi-segmented-nav::before { content: map-get($bootstrap-icons-map, "segmented-nav"); } +.bi-server::before { content: map-get($bootstrap-icons-map, "server"); } +.bi-share-fill::before { content: map-get($bootstrap-icons-map, "share-fill"); } +.bi-share::before { content: map-get($bootstrap-icons-map, "share"); } +.bi-shield-check::before { content: map-get($bootstrap-icons-map, "shield-check"); } +.bi-shield-exclamation::before { content: map-get($bootstrap-icons-map, "shield-exclamation"); } +.bi-shield-fill-check::before { content: map-get($bootstrap-icons-map, "shield-fill-check"); } +.bi-shield-fill-exclamation::before { content: map-get($bootstrap-icons-map, "shield-fill-exclamation"); } +.bi-shield-fill-minus::before { content: map-get($bootstrap-icons-map, "shield-fill-minus"); } +.bi-shield-fill-plus::before { content: map-get($bootstrap-icons-map, "shield-fill-plus"); } +.bi-shield-fill-x::before { content: map-get($bootstrap-icons-map, "shield-fill-x"); } +.bi-shield-fill::before { content: map-get($bootstrap-icons-map, "shield-fill"); } +.bi-shield-lock-fill::before { content: map-get($bootstrap-icons-map, "shield-lock-fill"); } +.bi-shield-lock::before { content: map-get($bootstrap-icons-map, "shield-lock"); } +.bi-shield-minus::before { content: map-get($bootstrap-icons-map, "shield-minus"); } +.bi-shield-plus::before { content: map-get($bootstrap-icons-map, "shield-plus"); } +.bi-shield-shaded::before { content: map-get($bootstrap-icons-map, "shield-shaded"); } +.bi-shield-slash-fill::before { content: map-get($bootstrap-icons-map, "shield-slash-fill"); } +.bi-shield-slash::before { content: map-get($bootstrap-icons-map, "shield-slash"); } +.bi-shield-x::before { content: map-get($bootstrap-icons-map, "shield-x"); } +.bi-shield::before { content: map-get($bootstrap-icons-map, "shield"); } +.bi-shift-fill::before { content: map-get($bootstrap-icons-map, "shift-fill"); } +.bi-shift::before { content: map-get($bootstrap-icons-map, "shift"); } +.bi-shop-window::before { content: map-get($bootstrap-icons-map, "shop-window"); } +.bi-shop::before { content: map-get($bootstrap-icons-map, "shop"); } +.bi-shuffle::before { content: map-get($bootstrap-icons-map, "shuffle"); } +.bi-signpost-2-fill::before { content: map-get($bootstrap-icons-map, "signpost-2-fill"); } +.bi-signpost-2::before { content: map-get($bootstrap-icons-map, "signpost-2"); } +.bi-signpost-fill::before { content: map-get($bootstrap-icons-map, "signpost-fill"); } +.bi-signpost-split-fill::before { content: map-get($bootstrap-icons-map, "signpost-split-fill"); } +.bi-signpost-split::before { content: map-get($bootstrap-icons-map, "signpost-split"); } +.bi-signpost::before { content: map-get($bootstrap-icons-map, "signpost"); } +.bi-sim-fill::before { content: map-get($bootstrap-icons-map, "sim-fill"); } +.bi-sim::before { content: map-get($bootstrap-icons-map, "sim"); } +.bi-skip-backward-btn-fill::before { content: map-get($bootstrap-icons-map, "skip-backward-btn-fill"); } +.bi-skip-backward-btn::before { content: map-get($bootstrap-icons-map, "skip-backward-btn"); } +.bi-skip-backward-circle-fill::before { content: map-get($bootstrap-icons-map, "skip-backward-circle-fill"); } +.bi-skip-backward-circle::before { content: map-get($bootstrap-icons-map, "skip-backward-circle"); } +.bi-skip-backward-fill::before { content: map-get($bootstrap-icons-map, "skip-backward-fill"); } +.bi-skip-backward::before { content: map-get($bootstrap-icons-map, "skip-backward"); } +.bi-skip-end-btn-fill::before { content: map-get($bootstrap-icons-map, "skip-end-btn-fill"); } +.bi-skip-end-btn::before { content: map-get($bootstrap-icons-map, "skip-end-btn"); } +.bi-skip-end-circle-fill::before { content: map-get($bootstrap-icons-map, "skip-end-circle-fill"); } +.bi-skip-end-circle::before { content: map-get($bootstrap-icons-map, "skip-end-circle"); } +.bi-skip-end-fill::before { content: map-get($bootstrap-icons-map, "skip-end-fill"); } +.bi-skip-end::before { content: map-get($bootstrap-icons-map, "skip-end"); } +.bi-skip-forward-btn-fill::before { content: map-get($bootstrap-icons-map, "skip-forward-btn-fill"); } +.bi-skip-forward-btn::before { content: map-get($bootstrap-icons-map, "skip-forward-btn"); } +.bi-skip-forward-circle-fill::before { content: map-get($bootstrap-icons-map, "skip-forward-circle-fill"); } +.bi-skip-forward-circle::before { content: map-get($bootstrap-icons-map, "skip-forward-circle"); } +.bi-skip-forward-fill::before { content: map-get($bootstrap-icons-map, "skip-forward-fill"); } +.bi-skip-forward::before { content: map-get($bootstrap-icons-map, "skip-forward"); } +.bi-skip-start-btn-fill::before { content: map-get($bootstrap-icons-map, "skip-start-btn-fill"); } +.bi-skip-start-btn::before { content: map-get($bootstrap-icons-map, "skip-start-btn"); } +.bi-skip-start-circle-fill::before { content: map-get($bootstrap-icons-map, "skip-start-circle-fill"); } +.bi-skip-start-circle::before { content: map-get($bootstrap-icons-map, "skip-start-circle"); } +.bi-skip-start-fill::before { content: map-get($bootstrap-icons-map, "skip-start-fill"); } +.bi-skip-start::before { content: map-get($bootstrap-icons-map, "skip-start"); } +.bi-slack::before { content: map-get($bootstrap-icons-map, "slack"); } +.bi-slash-circle-fill::before { content: map-get($bootstrap-icons-map, "slash-circle-fill"); } +.bi-slash-circle::before { content: map-get($bootstrap-icons-map, "slash-circle"); } +.bi-slash-square-fill::before { content: map-get($bootstrap-icons-map, "slash-square-fill"); } +.bi-slash-square::before { content: map-get($bootstrap-icons-map, "slash-square"); } +.bi-slash::before { content: map-get($bootstrap-icons-map, "slash"); } +.bi-sliders::before { content: map-get($bootstrap-icons-map, "sliders"); } +.bi-smartwatch::before { content: map-get($bootstrap-icons-map, "smartwatch"); } +.bi-snow::before { content: map-get($bootstrap-icons-map, "snow"); } +.bi-snow2::before { content: map-get($bootstrap-icons-map, "snow2"); } +.bi-snow3::before { content: map-get($bootstrap-icons-map, "snow3"); } +.bi-sort-alpha-down-alt::before { content: map-get($bootstrap-icons-map, "sort-alpha-down-alt"); } +.bi-sort-alpha-down::before { content: map-get($bootstrap-icons-map, "sort-alpha-down"); } +.bi-sort-alpha-up-alt::before { content: map-get($bootstrap-icons-map, "sort-alpha-up-alt"); } +.bi-sort-alpha-up::before { content: map-get($bootstrap-icons-map, "sort-alpha-up"); } +.bi-sort-down-alt::before { content: map-get($bootstrap-icons-map, "sort-down-alt"); } +.bi-sort-down::before { content: map-get($bootstrap-icons-map, "sort-down"); } +.bi-sort-numeric-down-alt::before { content: map-get($bootstrap-icons-map, "sort-numeric-down-alt"); } +.bi-sort-numeric-down::before { content: map-get($bootstrap-icons-map, "sort-numeric-down"); } +.bi-sort-numeric-up-alt::before { content: map-get($bootstrap-icons-map, "sort-numeric-up-alt"); } +.bi-sort-numeric-up::before { content: map-get($bootstrap-icons-map, "sort-numeric-up"); } +.bi-sort-up-alt::before { content: map-get($bootstrap-icons-map, "sort-up-alt"); } +.bi-sort-up::before { content: map-get($bootstrap-icons-map, "sort-up"); } +.bi-soundwave::before { content: map-get($bootstrap-icons-map, "soundwave"); } +.bi-speaker-fill::before { content: map-get($bootstrap-icons-map, "speaker-fill"); } +.bi-speaker::before { content: map-get($bootstrap-icons-map, "speaker"); } +.bi-speedometer::before { content: map-get($bootstrap-icons-map, "speedometer"); } +.bi-speedometer2::before { content: map-get($bootstrap-icons-map, "speedometer2"); } +.bi-spellcheck::before { content: map-get($bootstrap-icons-map, "spellcheck"); } +.bi-square-fill::before { content: map-get($bootstrap-icons-map, "square-fill"); } +.bi-square-half::before { content: map-get($bootstrap-icons-map, "square-half"); } +.bi-square::before { content: map-get($bootstrap-icons-map, "square"); } +.bi-stack::before { content: map-get($bootstrap-icons-map, "stack"); } +.bi-star-fill::before { content: map-get($bootstrap-icons-map, "star-fill"); } +.bi-star-half::before { content: map-get($bootstrap-icons-map, "star-half"); } +.bi-star::before { content: map-get($bootstrap-icons-map, "star"); } +.bi-stars::before { content: map-get($bootstrap-icons-map, "stars"); } +.bi-stickies-fill::before { content: map-get($bootstrap-icons-map, "stickies-fill"); } +.bi-stickies::before { content: map-get($bootstrap-icons-map, "stickies"); } +.bi-sticky-fill::before { content: map-get($bootstrap-icons-map, "sticky-fill"); } +.bi-sticky::before { content: map-get($bootstrap-icons-map, "sticky"); } +.bi-stop-btn-fill::before { content: map-get($bootstrap-icons-map, "stop-btn-fill"); } +.bi-stop-btn::before { content: map-get($bootstrap-icons-map, "stop-btn"); } +.bi-stop-circle-fill::before { content: map-get($bootstrap-icons-map, "stop-circle-fill"); } +.bi-stop-circle::before { content: map-get($bootstrap-icons-map, "stop-circle"); } +.bi-stop-fill::before { content: map-get($bootstrap-icons-map, "stop-fill"); } +.bi-stop::before { content: map-get($bootstrap-icons-map, "stop"); } +.bi-stoplights-fill::before { content: map-get($bootstrap-icons-map, "stoplights-fill"); } +.bi-stoplights::before { content: map-get($bootstrap-icons-map, "stoplights"); } +.bi-stopwatch-fill::before { content: map-get($bootstrap-icons-map, "stopwatch-fill"); } +.bi-stopwatch::before { content: map-get($bootstrap-icons-map, "stopwatch"); } +.bi-subtract::before { content: map-get($bootstrap-icons-map, "subtract"); } +.bi-suit-club-fill::before { content: map-get($bootstrap-icons-map, "suit-club-fill"); } +.bi-suit-club::before { content: map-get($bootstrap-icons-map, "suit-club"); } +.bi-suit-diamond-fill::before { content: map-get($bootstrap-icons-map, "suit-diamond-fill"); } +.bi-suit-diamond::before { content: map-get($bootstrap-icons-map, "suit-diamond"); } +.bi-suit-heart-fill::before { content: map-get($bootstrap-icons-map, "suit-heart-fill"); } +.bi-suit-heart::before { content: map-get($bootstrap-icons-map, "suit-heart"); } +.bi-suit-spade-fill::before { content: map-get($bootstrap-icons-map, "suit-spade-fill"); } +.bi-suit-spade::before { content: map-get($bootstrap-icons-map, "suit-spade"); } +.bi-sun-fill::before { content: map-get($bootstrap-icons-map, "sun-fill"); } +.bi-sun::before { content: map-get($bootstrap-icons-map, "sun"); } +.bi-sunglasses::before { content: map-get($bootstrap-icons-map, "sunglasses"); } +.bi-sunrise-fill::before { content: map-get($bootstrap-icons-map, "sunrise-fill"); } +.bi-sunrise::before { content: map-get($bootstrap-icons-map, "sunrise"); } +.bi-sunset-fill::before { content: map-get($bootstrap-icons-map, "sunset-fill"); } +.bi-sunset::before { content: map-get($bootstrap-icons-map, "sunset"); } +.bi-symmetry-horizontal::before { content: map-get($bootstrap-icons-map, "symmetry-horizontal"); } +.bi-symmetry-vertical::before { content: map-get($bootstrap-icons-map, "symmetry-vertical"); } +.bi-table::before { content: map-get($bootstrap-icons-map, "table"); } +.bi-tablet-fill::before { content: map-get($bootstrap-icons-map, "tablet-fill"); } +.bi-tablet-landscape-fill::before { content: map-get($bootstrap-icons-map, "tablet-landscape-fill"); } +.bi-tablet-landscape::before { content: map-get($bootstrap-icons-map, "tablet-landscape"); } +.bi-tablet::before { content: map-get($bootstrap-icons-map, "tablet"); } +.bi-tag-fill::before { content: map-get($bootstrap-icons-map, "tag-fill"); } +.bi-tag::before { content: map-get($bootstrap-icons-map, "tag"); } +.bi-tags-fill::before { content: map-get($bootstrap-icons-map, "tags-fill"); } +.bi-tags::before { content: map-get($bootstrap-icons-map, "tags"); } +.bi-telegram::before { content: map-get($bootstrap-icons-map, "telegram"); } +.bi-telephone-fill::before { content: map-get($bootstrap-icons-map, "telephone-fill"); } +.bi-telephone-forward-fill::before { content: map-get($bootstrap-icons-map, "telephone-forward-fill"); } +.bi-telephone-forward::before { content: map-get($bootstrap-icons-map, "telephone-forward"); } +.bi-telephone-inbound-fill::before { content: map-get($bootstrap-icons-map, "telephone-inbound-fill"); } +.bi-telephone-inbound::before { content: map-get($bootstrap-icons-map, "telephone-inbound"); } +.bi-telephone-minus-fill::before { content: map-get($bootstrap-icons-map, "telephone-minus-fill"); } +.bi-telephone-minus::before { content: map-get($bootstrap-icons-map, "telephone-minus"); } +.bi-telephone-outbound-fill::before { content: map-get($bootstrap-icons-map, "telephone-outbound-fill"); } +.bi-telephone-outbound::before { content: map-get($bootstrap-icons-map, "telephone-outbound"); } +.bi-telephone-plus-fill::before { content: map-get($bootstrap-icons-map, "telephone-plus-fill"); } +.bi-telephone-plus::before { content: map-get($bootstrap-icons-map, "telephone-plus"); } +.bi-telephone-x-fill::before { content: map-get($bootstrap-icons-map, "telephone-x-fill"); } +.bi-telephone-x::before { content: map-get($bootstrap-icons-map, "telephone-x"); } +.bi-telephone::before { content: map-get($bootstrap-icons-map, "telephone"); } +.bi-terminal-fill::before { content: map-get($bootstrap-icons-map, "terminal-fill"); } +.bi-terminal::before { content: map-get($bootstrap-icons-map, "terminal"); } +.bi-text-center::before { content: map-get($bootstrap-icons-map, "text-center"); } +.bi-text-indent-left::before { content: map-get($bootstrap-icons-map, "text-indent-left"); } +.bi-text-indent-right::before { content: map-get($bootstrap-icons-map, "text-indent-right"); } +.bi-text-left::before { content: map-get($bootstrap-icons-map, "text-left"); } +.bi-text-paragraph::before { content: map-get($bootstrap-icons-map, "text-paragraph"); } +.bi-text-right::before { content: map-get($bootstrap-icons-map, "text-right"); } +.bi-textarea-resize::before { content: map-get($bootstrap-icons-map, "textarea-resize"); } +.bi-textarea-t::before { content: map-get($bootstrap-icons-map, "textarea-t"); } +.bi-textarea::before { content: map-get($bootstrap-icons-map, "textarea"); } +.bi-thermometer-half::before { content: map-get($bootstrap-icons-map, "thermometer-half"); } +.bi-thermometer-high::before { content: map-get($bootstrap-icons-map, "thermometer-high"); } +.bi-thermometer-low::before { content: map-get($bootstrap-icons-map, "thermometer-low"); } +.bi-thermometer-snow::before { content: map-get($bootstrap-icons-map, "thermometer-snow"); } +.bi-thermometer-sun::before { content: map-get($bootstrap-icons-map, "thermometer-sun"); } +.bi-thermometer::before { content: map-get($bootstrap-icons-map, "thermometer"); } +.bi-three-dots-vertical::before { content: map-get($bootstrap-icons-map, "three-dots-vertical"); } +.bi-three-dots::before { content: map-get($bootstrap-icons-map, "three-dots"); } +.bi-toggle-off::before { content: map-get($bootstrap-icons-map, "toggle-off"); } +.bi-toggle-on::before { content: map-get($bootstrap-icons-map, "toggle-on"); } +.bi-toggle2-off::before { content: map-get($bootstrap-icons-map, "toggle2-off"); } +.bi-toggle2-on::before { content: map-get($bootstrap-icons-map, "toggle2-on"); } +.bi-toggles::before { content: map-get($bootstrap-icons-map, "toggles"); } +.bi-toggles2::before { content: map-get($bootstrap-icons-map, "toggles2"); } +.bi-tools::before { content: map-get($bootstrap-icons-map, "tools"); } +.bi-tornado::before { content: map-get($bootstrap-icons-map, "tornado"); } +.bi-trash-fill::before { content: map-get($bootstrap-icons-map, "trash-fill"); } +.bi-trash::before { content: map-get($bootstrap-icons-map, "trash"); } +.bi-trash2-fill::before { content: map-get($bootstrap-icons-map, "trash2-fill"); } +.bi-trash2::before { content: map-get($bootstrap-icons-map, "trash2"); } +.bi-tree-fill::before { content: map-get($bootstrap-icons-map, "tree-fill"); } +.bi-tree::before { content: map-get($bootstrap-icons-map, "tree"); } +.bi-triangle-fill::before { content: map-get($bootstrap-icons-map, "triangle-fill"); } +.bi-triangle-half::before { content: map-get($bootstrap-icons-map, "triangle-half"); } +.bi-triangle::before { content: map-get($bootstrap-icons-map, "triangle"); } +.bi-trophy-fill::before { content: map-get($bootstrap-icons-map, "trophy-fill"); } +.bi-trophy::before { content: map-get($bootstrap-icons-map, "trophy"); } +.bi-tropical-storm::before { content: map-get($bootstrap-icons-map, "tropical-storm"); } +.bi-truck-flatbed::before { content: map-get($bootstrap-icons-map, "truck-flatbed"); } +.bi-truck::before { content: map-get($bootstrap-icons-map, "truck"); } +.bi-tsunami::before { content: map-get($bootstrap-icons-map, "tsunami"); } +.bi-tv-fill::before { content: map-get($bootstrap-icons-map, "tv-fill"); } +.bi-tv::before { content: map-get($bootstrap-icons-map, "tv"); } +.bi-twitch::before { content: map-get($bootstrap-icons-map, "twitch"); } +.bi-twitter::before { content: map-get($bootstrap-icons-map, "twitter"); } +.bi-type-bold::before { content: map-get($bootstrap-icons-map, "type-bold"); } +.bi-type-h1::before { content: map-get($bootstrap-icons-map, "type-h1"); } +.bi-type-h2::before { content: map-get($bootstrap-icons-map, "type-h2"); } +.bi-type-h3::before { content: map-get($bootstrap-icons-map, "type-h3"); } +.bi-type-italic::before { content: map-get($bootstrap-icons-map, "type-italic"); } +.bi-type-strikethrough::before { content: map-get($bootstrap-icons-map, "type-strikethrough"); } +.bi-type-underline::before { content: map-get($bootstrap-icons-map, "type-underline"); } +.bi-type::before { content: map-get($bootstrap-icons-map, "type"); } +.bi-ui-checks-grid::before { content: map-get($bootstrap-icons-map, "ui-checks-grid"); } +.bi-ui-checks::before { content: map-get($bootstrap-icons-map, "ui-checks"); } +.bi-ui-radios-grid::before { content: map-get($bootstrap-icons-map, "ui-radios-grid"); } +.bi-ui-radios::before { content: map-get($bootstrap-icons-map, "ui-radios"); } +.bi-umbrella-fill::before { content: map-get($bootstrap-icons-map, "umbrella-fill"); } +.bi-umbrella::before { content: map-get($bootstrap-icons-map, "umbrella"); } +.bi-union::before { content: map-get($bootstrap-icons-map, "union"); } +.bi-unlock-fill::before { content: map-get($bootstrap-icons-map, "unlock-fill"); } +.bi-unlock::before { content: map-get($bootstrap-icons-map, "unlock"); } +.bi-upc-scan::before { content: map-get($bootstrap-icons-map, "upc-scan"); } +.bi-upc::before { content: map-get($bootstrap-icons-map, "upc"); } +.bi-upload::before { content: map-get($bootstrap-icons-map, "upload"); } +.bi-vector-pen::before { content: map-get($bootstrap-icons-map, "vector-pen"); } +.bi-view-list::before { content: map-get($bootstrap-icons-map, "view-list"); } +.bi-view-stacked::before { content: map-get($bootstrap-icons-map, "view-stacked"); } +.bi-vinyl-fill::before { content: map-get($bootstrap-icons-map, "vinyl-fill"); } +.bi-vinyl::before { content: map-get($bootstrap-icons-map, "vinyl"); } +.bi-voicemail::before { content: map-get($bootstrap-icons-map, "voicemail"); } +.bi-volume-down-fill::before { content: map-get($bootstrap-icons-map, "volume-down-fill"); } +.bi-volume-down::before { content: map-get($bootstrap-icons-map, "volume-down"); } +.bi-volume-mute-fill::before { content: map-get($bootstrap-icons-map, "volume-mute-fill"); } +.bi-volume-mute::before { content: map-get($bootstrap-icons-map, "volume-mute"); } +.bi-volume-off-fill::before { content: map-get($bootstrap-icons-map, "volume-off-fill"); } +.bi-volume-off::before { content: map-get($bootstrap-icons-map, "volume-off"); } +.bi-volume-up-fill::before { content: map-get($bootstrap-icons-map, "volume-up-fill"); } +.bi-volume-up::before { content: map-get($bootstrap-icons-map, "volume-up"); } +.bi-vr::before { content: map-get($bootstrap-icons-map, "vr"); } +.bi-wallet-fill::before { content: map-get($bootstrap-icons-map, "wallet-fill"); } +.bi-wallet::before { content: map-get($bootstrap-icons-map, "wallet"); } +.bi-wallet2::before { content: map-get($bootstrap-icons-map, "wallet2"); } +.bi-watch::before { content: map-get($bootstrap-icons-map, "watch"); } +.bi-water::before { content: map-get($bootstrap-icons-map, "water"); } +.bi-whatsapp::before { content: map-get($bootstrap-icons-map, "whatsapp"); } +.bi-wifi-1::before { content: map-get($bootstrap-icons-map, "wifi-1"); } +.bi-wifi-2::before { content: map-get($bootstrap-icons-map, "wifi-2"); } +.bi-wifi-off::before { content: map-get($bootstrap-icons-map, "wifi-off"); } +.bi-wifi::before { content: map-get($bootstrap-icons-map, "wifi"); } +.bi-wind::before { content: map-get($bootstrap-icons-map, "wind"); } +.bi-window-dock::before { content: map-get($bootstrap-icons-map, "window-dock"); } +.bi-window-sidebar::before { content: map-get($bootstrap-icons-map, "window-sidebar"); } +.bi-window::before { content: map-get($bootstrap-icons-map, "window"); } +.bi-wrench::before { content: map-get($bootstrap-icons-map, "wrench"); } +.bi-x-circle-fill::before { content: map-get($bootstrap-icons-map, "x-circle-fill"); } +.bi-x-circle::before { content: map-get($bootstrap-icons-map, "x-circle"); } +.bi-x-diamond-fill::before { content: map-get($bootstrap-icons-map, "x-diamond-fill"); } +.bi-x-diamond::before { content: map-get($bootstrap-icons-map, "x-diamond"); } +.bi-x-octagon-fill::before { content: map-get($bootstrap-icons-map, "x-octagon-fill"); } +.bi-x-octagon::before { content: map-get($bootstrap-icons-map, "x-octagon"); } +.bi-x-square-fill::before { content: map-get($bootstrap-icons-map, "x-square-fill"); } +.bi-x-square::before { content: map-get($bootstrap-icons-map, "x-square"); } +.bi-x::before { content: map-get($bootstrap-icons-map, "x"); } +.bi-youtube::before { content: map-get($bootstrap-icons-map, "youtube"); } +.bi-zoom-in::before { content: map-get($bootstrap-icons-map, "zoom-in"); } +.bi-zoom-out::before { content: map-get($bootstrap-icons-map, "zoom-out"); } +.bi-bank::before { content: map-get($bootstrap-icons-map, "bank"); } +.bi-bank2::before { content: map-get($bootstrap-icons-map, "bank2"); } +.bi-bell-slash-fill::before { content: map-get($bootstrap-icons-map, "bell-slash-fill"); } +.bi-bell-slash::before { content: map-get($bootstrap-icons-map, "bell-slash"); } +.bi-cash-coin::before { content: map-get($bootstrap-icons-map, "cash-coin"); } +.bi-check-lg::before { content: map-get($bootstrap-icons-map, "check-lg"); } +.bi-coin::before { content: map-get($bootstrap-icons-map, "coin"); } +.bi-currency-bitcoin::before { content: map-get($bootstrap-icons-map, "currency-bitcoin"); } +.bi-currency-dollar::before { content: map-get($bootstrap-icons-map, "currency-dollar"); } +.bi-currency-euro::before { content: map-get($bootstrap-icons-map, "currency-euro"); } +.bi-currency-exchange::before { content: map-get($bootstrap-icons-map, "currency-exchange"); } +.bi-currency-pound::before { content: map-get($bootstrap-icons-map, "currency-pound"); } +.bi-currency-yen::before { content: map-get($bootstrap-icons-map, "currency-yen"); } +.bi-dash-lg::before { content: map-get($bootstrap-icons-map, "dash-lg"); } +.bi-exclamation-lg::before { content: map-get($bootstrap-icons-map, "exclamation-lg"); } +.bi-file-earmark-pdf-fill::before { content: map-get($bootstrap-icons-map, "file-earmark-pdf-fill"); } +.bi-file-earmark-pdf::before { content: map-get($bootstrap-icons-map, "file-earmark-pdf"); } +.bi-file-pdf-fill::before { content: map-get($bootstrap-icons-map, "file-pdf-fill"); } +.bi-file-pdf::before { content: map-get($bootstrap-icons-map, "file-pdf"); } +.bi-gender-ambiguous::before { content: map-get($bootstrap-icons-map, "gender-ambiguous"); } +.bi-gender-female::before { content: map-get($bootstrap-icons-map, "gender-female"); } +.bi-gender-male::before { content: map-get($bootstrap-icons-map, "gender-male"); } +.bi-gender-trans::before { content: map-get($bootstrap-icons-map, "gender-trans"); } +.bi-headset-vr::before { content: map-get($bootstrap-icons-map, "headset-vr"); } +.bi-info-lg::before { content: map-get($bootstrap-icons-map, "info-lg"); } +.bi-mastodon::before { content: map-get($bootstrap-icons-map, "mastodon"); } +.bi-messenger::before { content: map-get($bootstrap-icons-map, "messenger"); } +.bi-piggy-bank-fill::before { content: map-get($bootstrap-icons-map, "piggy-bank-fill"); } +.bi-piggy-bank::before { content: map-get($bootstrap-icons-map, "piggy-bank"); } +.bi-pin-map-fill::before { content: map-get($bootstrap-icons-map, "pin-map-fill"); } +.bi-pin-map::before { content: map-get($bootstrap-icons-map, "pin-map"); } +.bi-plus-lg::before { content: map-get($bootstrap-icons-map, "plus-lg"); } +.bi-question-lg::before { content: map-get($bootstrap-icons-map, "question-lg"); } +.bi-recycle::before { content: map-get($bootstrap-icons-map, "recycle"); } +.bi-reddit::before { content: map-get($bootstrap-icons-map, "reddit"); } +.bi-safe-fill::before { content: map-get($bootstrap-icons-map, "safe-fill"); } +.bi-safe2-fill::before { content: map-get($bootstrap-icons-map, "safe2-fill"); } +.bi-safe2::before { content: map-get($bootstrap-icons-map, "safe2"); } +.bi-sd-card-fill::before { content: map-get($bootstrap-icons-map, "sd-card-fill"); } +.bi-sd-card::before { content: map-get($bootstrap-icons-map, "sd-card"); } +.bi-skype::before { content: map-get($bootstrap-icons-map, "skype"); } +.bi-slash-lg::before { content: map-get($bootstrap-icons-map, "slash-lg"); } +.bi-translate::before { content: map-get($bootstrap-icons-map, "translate"); } +.bi-x-lg::before { content: map-get($bootstrap-icons-map, "x-lg"); } +.bi-safe::before { content: map-get($bootstrap-icons-map, "safe"); } +.bi-apple::before { content: map-get($bootstrap-icons-map, "apple"); } +.bi-microsoft::before { content: map-get($bootstrap-icons-map, "microsoft"); } +.bi-windows::before { content: map-get($bootstrap-icons-map, "windows"); } +.bi-behance::before { content: map-get($bootstrap-icons-map, "behance"); } +.bi-dribbble::before { content: map-get($bootstrap-icons-map, "dribbble"); } +.bi-line::before { content: map-get($bootstrap-icons-map, "line"); } +.bi-medium::before { content: map-get($bootstrap-icons-map, "medium"); } +.bi-paypal::before { content: map-get($bootstrap-icons-map, "paypal"); } +.bi-pinterest::before { content: map-get($bootstrap-icons-map, "pinterest"); } +.bi-signal::before { content: map-get($bootstrap-icons-map, "signal"); } +.bi-snapchat::before { content: map-get($bootstrap-icons-map, "snapchat"); } +.bi-spotify::before { content: map-get($bootstrap-icons-map, "spotify"); } +.bi-stack-overflow::before { content: map-get($bootstrap-icons-map, "stack-overflow"); } +.bi-strava::before { content: map-get($bootstrap-icons-map, "strava"); } +.bi-wordpress::before { content: map-get($bootstrap-icons-map, "wordpress"); } +.bi-vimeo::before { content: map-get($bootstrap-icons-map, "vimeo"); } +.bi-activity::before { content: map-get($bootstrap-icons-map, "activity"); } +.bi-easel2-fill::before { content: map-get($bootstrap-icons-map, "easel2-fill"); } +.bi-easel2::before { content: map-get($bootstrap-icons-map, "easel2"); } +.bi-easel3-fill::before { content: map-get($bootstrap-icons-map, "easel3-fill"); } +.bi-easel3::before { content: map-get($bootstrap-icons-map, "easel3"); } +.bi-fan::before { content: map-get($bootstrap-icons-map, "fan"); } +.bi-fingerprint::before { content: map-get($bootstrap-icons-map, "fingerprint"); } +.bi-graph-down-arrow::before { content: map-get($bootstrap-icons-map, "graph-down-arrow"); } +.bi-graph-up-arrow::before { content: map-get($bootstrap-icons-map, "graph-up-arrow"); } +.bi-hypnotize::before { content: map-get($bootstrap-icons-map, "hypnotize"); } +.bi-magic::before { content: map-get($bootstrap-icons-map, "magic"); } +.bi-person-rolodex::before { content: map-get($bootstrap-icons-map, "person-rolodex"); } +.bi-person-video::before { content: map-get($bootstrap-icons-map, "person-video"); } +.bi-person-video2::before { content: map-get($bootstrap-icons-map, "person-video2"); } +.bi-person-video3::before { content: map-get($bootstrap-icons-map, "person-video3"); } +.bi-person-workspace::before { content: map-get($bootstrap-icons-map, "person-workspace"); } +.bi-radioactive::before { content: map-get($bootstrap-icons-map, "radioactive"); } +.bi-webcam-fill::before { content: map-get($bootstrap-icons-map, "webcam-fill"); } +.bi-webcam::before { content: map-get($bootstrap-icons-map, "webcam"); } +.bi-yin-yang::before { content: map-get($bootstrap-icons-map, "yin-yang"); } +.bi-bandaid-fill::before { content: map-get($bootstrap-icons-map, "bandaid-fill"); } +.bi-bandaid::before { content: map-get($bootstrap-icons-map, "bandaid"); } +.bi-bluetooth::before { content: map-get($bootstrap-icons-map, "bluetooth"); } +.bi-body-text::before { content: map-get($bootstrap-icons-map, "body-text"); } +.bi-boombox::before { content: map-get($bootstrap-icons-map, "boombox"); } +.bi-boxes::before { content: map-get($bootstrap-icons-map, "boxes"); } +.bi-dpad-fill::before { content: map-get($bootstrap-icons-map, "dpad-fill"); } +.bi-dpad::before { content: map-get($bootstrap-icons-map, "dpad"); } +.bi-ear-fill::before { content: map-get($bootstrap-icons-map, "ear-fill"); } +.bi-ear::before { content: map-get($bootstrap-icons-map, "ear"); } +.bi-envelope-check-1::before { content: map-get($bootstrap-icons-map, "envelope-check-1"); } +.bi-envelope-check-fill::before { content: map-get($bootstrap-icons-map, "envelope-check-fill"); } +.bi-envelope-check::before { content: map-get($bootstrap-icons-map, "envelope-check"); } +.bi-envelope-dash-1::before { content: map-get($bootstrap-icons-map, "envelope-dash-1"); } +.bi-envelope-dash-fill::before { content: map-get($bootstrap-icons-map, "envelope-dash-fill"); } +.bi-envelope-dash::before { content: map-get($bootstrap-icons-map, "envelope-dash"); } +.bi-envelope-exclamation-1::before { content: map-get($bootstrap-icons-map, "envelope-exclamation-1"); } +.bi-envelope-exclamation-fill::before { content: map-get($bootstrap-icons-map, "envelope-exclamation-fill"); } +.bi-envelope-exclamation::before { content: map-get($bootstrap-icons-map, "envelope-exclamation"); } +.bi-envelope-plus-fill::before { content: map-get($bootstrap-icons-map, "envelope-plus-fill"); } +.bi-envelope-plus::before { content: map-get($bootstrap-icons-map, "envelope-plus"); } +.bi-envelope-slash-1::before { content: map-get($bootstrap-icons-map, "envelope-slash-1"); } +.bi-envelope-slash-fill::before { content: map-get($bootstrap-icons-map, "envelope-slash-fill"); } +.bi-envelope-slash::before { content: map-get($bootstrap-icons-map, "envelope-slash"); } +.bi-envelope-x-1::before { content: map-get($bootstrap-icons-map, "envelope-x-1"); } +.bi-envelope-x-fill::before { content: map-get($bootstrap-icons-map, "envelope-x-fill"); } +.bi-envelope-x::before { content: map-get($bootstrap-icons-map, "envelope-x"); } +.bi-explicit-fill::before { content: map-get($bootstrap-icons-map, "explicit-fill"); } +.bi-explicit::before { content: map-get($bootstrap-icons-map, "explicit"); } +.bi-git::before { content: map-get($bootstrap-icons-map, "git"); } +.bi-infinity::before { content: map-get($bootstrap-icons-map, "infinity"); } +.bi-list-columns-reverse::before { content: map-get($bootstrap-icons-map, "list-columns-reverse"); } +.bi-list-columns::before { content: map-get($bootstrap-icons-map, "list-columns"); } +.bi-meta::before { content: map-get($bootstrap-icons-map, "meta"); } +.bi-mortorboard-fill::before { content: map-get($bootstrap-icons-map, "mortorboard-fill"); } +.bi-mortorboard::before { content: map-get($bootstrap-icons-map, "mortorboard"); } +.bi-nintendo-switch::before { content: map-get($bootstrap-icons-map, "nintendo-switch"); } +.bi-pc-display-horizontal::before { content: map-get($bootstrap-icons-map, "pc-display-horizontal"); } +.bi-pc-display::before { content: map-get($bootstrap-icons-map, "pc-display"); } +.bi-pc-horizontal::before { content: map-get($bootstrap-icons-map, "pc-horizontal"); } +.bi-pc::before { content: map-get($bootstrap-icons-map, "pc"); } +.bi-playstation::before { content: map-get($bootstrap-icons-map, "playstation"); } +.bi-plus-slash-minus::before { content: map-get($bootstrap-icons-map, "plus-slash-minus"); } +.bi-projector-fill::before { content: map-get($bootstrap-icons-map, "projector-fill"); } +.bi-projector::before { content: map-get($bootstrap-icons-map, "projector"); } +.bi-qr-code-scan::before { content: map-get($bootstrap-icons-map, "qr-code-scan"); } +.bi-qr-code::before { content: map-get($bootstrap-icons-map, "qr-code"); } +.bi-quora::before { content: map-get($bootstrap-icons-map, "quora"); } +.bi-quote::before { content: map-get($bootstrap-icons-map, "quote"); } +.bi-robot::before { content: map-get($bootstrap-icons-map, "robot"); } +.bi-send-check-fill::before { content: map-get($bootstrap-icons-map, "send-check-fill"); } +.bi-send-check::before { content: map-get($bootstrap-icons-map, "send-check"); } +.bi-send-dash-fill::before { content: map-get($bootstrap-icons-map, "send-dash-fill"); } +.bi-send-dash::before { content: map-get($bootstrap-icons-map, "send-dash"); } +.bi-send-exclamation-1::before { content: map-get($bootstrap-icons-map, "send-exclamation-1"); } +.bi-send-exclamation-fill::before { content: map-get($bootstrap-icons-map, "send-exclamation-fill"); } +.bi-send-exclamation::before { content: map-get($bootstrap-icons-map, "send-exclamation"); } +.bi-send-fill::before { content: map-get($bootstrap-icons-map, "send-fill"); } +.bi-send-plus-fill::before { content: map-get($bootstrap-icons-map, "send-plus-fill"); } +.bi-send-plus::before { content: map-get($bootstrap-icons-map, "send-plus"); } +.bi-send-slash-fill::before { content: map-get($bootstrap-icons-map, "send-slash-fill"); } +.bi-send-slash::before { content: map-get($bootstrap-icons-map, "send-slash"); } +.bi-send-x-fill::before { content: map-get($bootstrap-icons-map, "send-x-fill"); } +.bi-send-x::before { content: map-get($bootstrap-icons-map, "send-x"); } +.bi-send::before { content: map-get($bootstrap-icons-map, "send"); } +.bi-steam::before { content: map-get($bootstrap-icons-map, "steam"); } +.bi-terminal-dash-1::before { content: map-get($bootstrap-icons-map, "terminal-dash-1"); } +.bi-terminal-dash::before { content: map-get($bootstrap-icons-map, "terminal-dash"); } +.bi-terminal-plus::before { content: map-get($bootstrap-icons-map, "terminal-plus"); } +.bi-terminal-split::before { content: map-get($bootstrap-icons-map, "terminal-split"); } +.bi-ticket-detailed-fill::before { content: map-get($bootstrap-icons-map, "ticket-detailed-fill"); } +.bi-ticket-detailed::before { content: map-get($bootstrap-icons-map, "ticket-detailed"); } +.bi-ticket-fill::before { content: map-get($bootstrap-icons-map, "ticket-fill"); } +.bi-ticket-perforated-fill::before { content: map-get($bootstrap-icons-map, "ticket-perforated-fill"); } +.bi-ticket-perforated::before { content: map-get($bootstrap-icons-map, "ticket-perforated"); } +.bi-ticket::before { content: map-get($bootstrap-icons-map, "ticket"); } +.bi-tiktok::before { content: map-get($bootstrap-icons-map, "tiktok"); } +.bi-window-dash::before { content: map-get($bootstrap-icons-map, "window-dash"); } +.bi-window-desktop::before { content: map-get($bootstrap-icons-map, "window-desktop"); } +.bi-window-fullscreen::before { content: map-get($bootstrap-icons-map, "window-fullscreen"); } +.bi-window-plus::before { content: map-get($bootstrap-icons-map, "window-plus"); } +.bi-window-split::before { content: map-get($bootstrap-icons-map, "window-split"); } +.bi-window-stack::before { content: map-get($bootstrap-icons-map, "window-stack"); } +.bi-window-x::before { content: map-get($bootstrap-icons-map, "window-x"); } +.bi-xbox::before { content: map-get($bootstrap-icons-map, "xbox"); } +.bi-ethernet::before { content: map-get($bootstrap-icons-map, "ethernet"); } +.bi-hdmi-fill::before { content: map-get($bootstrap-icons-map, "hdmi-fill"); } +.bi-hdmi::before { content: map-get($bootstrap-icons-map, "hdmi"); } +.bi-usb-c-fill::before { content: map-get($bootstrap-icons-map, "usb-c-fill"); } +.bi-usb-c::before { content: map-get($bootstrap-icons-map, "usb-c"); } +.bi-usb-fill::before { content: map-get($bootstrap-icons-map, "usb-fill"); } +.bi-usb-plug-fill::before { content: map-get($bootstrap-icons-map, "usb-plug-fill"); } +.bi-usb-plug::before { content: map-get($bootstrap-icons-map, "usb-plug"); } +.bi-usb-symbol::before { content: map-get($bootstrap-icons-map, "usb-symbol"); } +.bi-usb::before { content: map-get($bootstrap-icons-map, "usb"); } +.bi-boombox-fill::before { content: map-get($bootstrap-icons-map, "boombox-fill"); } +.bi-displayport-1::before { content: map-get($bootstrap-icons-map, "displayport-1"); } +.bi-displayport::before { content: map-get($bootstrap-icons-map, "displayport"); } +.bi-gpu-card::before { content: map-get($bootstrap-icons-map, "gpu-card"); } +.bi-memory::before { content: map-get($bootstrap-icons-map, "memory"); } +.bi-modem-fill::before { content: map-get($bootstrap-icons-map, "modem-fill"); } +.bi-modem::before { content: map-get($bootstrap-icons-map, "modem"); } +.bi-motherboard-fill::before { content: map-get($bootstrap-icons-map, "motherboard-fill"); } +.bi-motherboard::before { content: map-get($bootstrap-icons-map, "motherboard"); } +.bi-optical-audio-fill::before { content: map-get($bootstrap-icons-map, "optical-audio-fill"); } +.bi-optical-audio::before { content: map-get($bootstrap-icons-map, "optical-audio"); } +.bi-pci-card::before { content: map-get($bootstrap-icons-map, "pci-card"); } +.bi-router-fill::before { content: map-get($bootstrap-icons-map, "router-fill"); } +.bi-router::before { content: map-get($bootstrap-icons-map, "router"); } +.bi-ssd-fill::before { content: map-get($bootstrap-icons-map, "ssd-fill"); } +.bi-ssd::before { content: map-get($bootstrap-icons-map, "ssd"); } +.bi-thunderbolt-fill::before { content: map-get($bootstrap-icons-map, "thunderbolt-fill"); } +.bi-thunderbolt::before { content: map-get($bootstrap-icons-map, "thunderbolt"); } +.bi-usb-drive-fill::before { content: map-get($bootstrap-icons-map, "usb-drive-fill"); } +.bi-usb-drive::before { content: map-get($bootstrap-icons-map, "usb-drive"); } +.bi-usb-micro-fill::before { content: map-get($bootstrap-icons-map, "usb-micro-fill"); } +.bi-usb-micro::before { content: map-get($bootstrap-icons-map, "usb-micro"); } +.bi-usb-mini-fill::before { content: map-get($bootstrap-icons-map, "usb-mini-fill"); } +.bi-usb-mini::before { content: map-get($bootstrap-icons-map, "usb-mini"); } +.bi-cloud-haze2::before { content: map-get($bootstrap-icons-map, "cloud-haze2"); } +.bi-device-hdd-fill::before { content: map-get($bootstrap-icons-map, "device-hdd-fill"); } +.bi-device-hdd::before { content: map-get($bootstrap-icons-map, "device-hdd"); } +.bi-device-ssd-fill::before { content: map-get($bootstrap-icons-map, "device-ssd-fill"); } +.bi-device-ssd::before { content: map-get($bootstrap-icons-map, "device-ssd"); } +.bi-displayport-fill::before { content: map-get($bootstrap-icons-map, "displayport-fill"); } +.bi-mortarboard-fill::before { content: map-get($bootstrap-icons-map, "mortarboard-fill"); } +.bi-mortarboard::before { content: map-get($bootstrap-icons-map, "mortarboard"); } +.bi-terminal-x::before { content: map-get($bootstrap-icons-map, "terminal-x"); } +.bi-arrow-through-heart-fill::before { content: map-get($bootstrap-icons-map, "arrow-through-heart-fill"); } +.bi-arrow-through-heart::before { content: map-get($bootstrap-icons-map, "arrow-through-heart"); } +.bi-badge-sd-fill::before { content: map-get($bootstrap-icons-map, "badge-sd-fill"); } +.bi-badge-sd::before { content: map-get($bootstrap-icons-map, "badge-sd"); } +.bi-bag-heart-fill::before { content: map-get($bootstrap-icons-map, "bag-heart-fill"); } +.bi-bag-heart::before { content: map-get($bootstrap-icons-map, "bag-heart"); } +.bi-balloon-fill::before { content: map-get($bootstrap-icons-map, "balloon-fill"); } +.bi-balloon-heart-fill::before { content: map-get($bootstrap-icons-map, "balloon-heart-fill"); } +.bi-balloon-heart::before { content: map-get($bootstrap-icons-map, "balloon-heart"); } +.bi-balloon::before { content: map-get($bootstrap-icons-map, "balloon"); } +.bi-box2-fill::before { content: map-get($bootstrap-icons-map, "box2-fill"); } +.bi-box2-heart-fill::before { content: map-get($bootstrap-icons-map, "box2-heart-fill"); } +.bi-box2-heart::before { content: map-get($bootstrap-icons-map, "box2-heart"); } +.bi-box2::before { content: map-get($bootstrap-icons-map, "box2"); } +.bi-braces-asterisk::before { content: map-get($bootstrap-icons-map, "braces-asterisk"); } +.bi-calendar-heart-fill::before { content: map-get($bootstrap-icons-map, "calendar-heart-fill"); } +.bi-calendar-heart::before { content: map-get($bootstrap-icons-map, "calendar-heart"); } +.bi-calendar2-heart-fill::before { content: map-get($bootstrap-icons-map, "calendar2-heart-fill"); } +.bi-calendar2-heart::before { content: map-get($bootstrap-icons-map, "calendar2-heart"); } +.bi-chat-heart-fill::before { content: map-get($bootstrap-icons-map, "chat-heart-fill"); } +.bi-chat-heart::before { content: map-get($bootstrap-icons-map, "chat-heart"); } +.bi-chat-left-heart-fill::before { content: map-get($bootstrap-icons-map, "chat-left-heart-fill"); } +.bi-chat-left-heart::before { content: map-get($bootstrap-icons-map, "chat-left-heart"); } +.bi-chat-right-heart-fill::before { content: map-get($bootstrap-icons-map, "chat-right-heart-fill"); } +.bi-chat-right-heart::before { content: map-get($bootstrap-icons-map, "chat-right-heart"); } +.bi-chat-square-heart-fill::before { content: map-get($bootstrap-icons-map, "chat-square-heart-fill"); } +.bi-chat-square-heart::before { content: map-get($bootstrap-icons-map, "chat-square-heart"); } +.bi-clipboard-check-fill::before { content: map-get($bootstrap-icons-map, "clipboard-check-fill"); } +.bi-clipboard-data-fill::before { content: map-get($bootstrap-icons-map, "clipboard-data-fill"); } +.bi-clipboard-fill::before { content: map-get($bootstrap-icons-map, "clipboard-fill"); } +.bi-clipboard-heart-fill::before { content: map-get($bootstrap-icons-map, "clipboard-heart-fill"); } +.bi-clipboard-heart::before { content: map-get($bootstrap-icons-map, "clipboard-heart"); } +.bi-clipboard-minus-fill::before { content: map-get($bootstrap-icons-map, "clipboard-minus-fill"); } +.bi-clipboard-plus-fill::before { content: map-get($bootstrap-icons-map, "clipboard-plus-fill"); } +.bi-clipboard-pulse::before { content: map-get($bootstrap-icons-map, "clipboard-pulse"); } +.bi-clipboard-x-fill::before { content: map-get($bootstrap-icons-map, "clipboard-x-fill"); } +.bi-clipboard2-check-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-check-fill"); } +.bi-clipboard2-check::before { content: map-get($bootstrap-icons-map, "clipboard2-check"); } +.bi-clipboard2-data-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-data-fill"); } +.bi-clipboard2-data::before { content: map-get($bootstrap-icons-map, "clipboard2-data"); } +.bi-clipboard2-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-fill"); } +.bi-clipboard2-heart-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-heart-fill"); } +.bi-clipboard2-heart::before { content: map-get($bootstrap-icons-map, "clipboard2-heart"); } +.bi-clipboard2-minus-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-minus-fill"); } +.bi-clipboard2-minus::before { content: map-get($bootstrap-icons-map, "clipboard2-minus"); } +.bi-clipboard2-plus-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-plus-fill"); } +.bi-clipboard2-plus::before { content: map-get($bootstrap-icons-map, "clipboard2-plus"); } +.bi-clipboard2-pulse-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-pulse-fill"); } +.bi-clipboard2-pulse::before { content: map-get($bootstrap-icons-map, "clipboard2-pulse"); } +.bi-clipboard2-x-fill::before { content: map-get($bootstrap-icons-map, "clipboard2-x-fill"); } +.bi-clipboard2-x::before { content: map-get($bootstrap-icons-map, "clipboard2-x"); } +.bi-clipboard2::before { content: map-get($bootstrap-icons-map, "clipboard2"); } +.bi-emoji-kiss-fill::before { content: map-get($bootstrap-icons-map, "emoji-kiss-fill"); } +.bi-emoji-kiss::before { content: map-get($bootstrap-icons-map, "emoji-kiss"); } +.bi-envelope-heart-fill::before { content: map-get($bootstrap-icons-map, "envelope-heart-fill"); } +.bi-envelope-heart::before { content: map-get($bootstrap-icons-map, "envelope-heart"); } +.bi-envelope-open-heart-fill::before { content: map-get($bootstrap-icons-map, "envelope-open-heart-fill"); } +.bi-envelope-open-heart::before { content: map-get($bootstrap-icons-map, "envelope-open-heart"); } +.bi-envelope-paper-fill::before { content: map-get($bootstrap-icons-map, "envelope-paper-fill"); } +.bi-envelope-paper-heart-fill::before { content: map-get($bootstrap-icons-map, "envelope-paper-heart-fill"); } +.bi-envelope-paper-heart::before { content: map-get($bootstrap-icons-map, "envelope-paper-heart"); } +.bi-envelope-paper::before { content: map-get($bootstrap-icons-map, "envelope-paper"); } +.bi-filetype-aac::before { content: map-get($bootstrap-icons-map, "filetype-aac"); } +.bi-filetype-ai::before { content: map-get($bootstrap-icons-map, "filetype-ai"); } +.bi-filetype-bmp::before { content: map-get($bootstrap-icons-map, "filetype-bmp"); } +.bi-filetype-cs::before { content: map-get($bootstrap-icons-map, "filetype-cs"); } +.bi-filetype-css::before { content: map-get($bootstrap-icons-map, "filetype-css"); } +.bi-filetype-csv::before { content: map-get($bootstrap-icons-map, "filetype-csv"); } +.bi-filetype-doc::before { content: map-get($bootstrap-icons-map, "filetype-doc"); } +.bi-filetype-docx::before { content: map-get($bootstrap-icons-map, "filetype-docx"); } +.bi-filetype-exe::before { content: map-get($bootstrap-icons-map, "filetype-exe"); } +.bi-filetype-gif::before { content: map-get($bootstrap-icons-map, "filetype-gif"); } +.bi-filetype-heic::before { content: map-get($bootstrap-icons-map, "filetype-heic"); } +.bi-filetype-html::before { content: map-get($bootstrap-icons-map, "filetype-html"); } +.bi-filetype-java::before { content: map-get($bootstrap-icons-map, "filetype-java"); } +.bi-filetype-jpg::before { content: map-get($bootstrap-icons-map, "filetype-jpg"); } +.bi-filetype-js::before { content: map-get($bootstrap-icons-map, "filetype-js"); } +.bi-filetype-jsx::before { content: map-get($bootstrap-icons-map, "filetype-jsx"); } +.bi-filetype-key::before { content: map-get($bootstrap-icons-map, "filetype-key"); } +.bi-filetype-m4p::before { content: map-get($bootstrap-icons-map, "filetype-m4p"); } +.bi-filetype-md::before { content: map-get($bootstrap-icons-map, "filetype-md"); } +.bi-filetype-mdx::before { content: map-get($bootstrap-icons-map, "filetype-mdx"); } +.bi-filetype-mov::before { content: map-get($bootstrap-icons-map, "filetype-mov"); } +.bi-filetype-mp3::before { content: map-get($bootstrap-icons-map, "filetype-mp3"); } +.bi-filetype-mp4::before { content: map-get($bootstrap-icons-map, "filetype-mp4"); } +.bi-filetype-otf::before { content: map-get($bootstrap-icons-map, "filetype-otf"); } +.bi-filetype-pdf::before { content: map-get($bootstrap-icons-map, "filetype-pdf"); } +.bi-filetype-php::before { content: map-get($bootstrap-icons-map, "filetype-php"); } +.bi-filetype-png::before { content: map-get($bootstrap-icons-map, "filetype-png"); } +.bi-filetype-ppt-1::before { content: map-get($bootstrap-icons-map, "filetype-ppt-1"); } +.bi-filetype-ppt::before { content: map-get($bootstrap-icons-map, "filetype-ppt"); } +.bi-filetype-psd::before { content: map-get($bootstrap-icons-map, "filetype-psd"); } +.bi-filetype-py::before { content: map-get($bootstrap-icons-map, "filetype-py"); } +.bi-filetype-raw::before { content: map-get($bootstrap-icons-map, "filetype-raw"); } +.bi-filetype-rb::before { content: map-get($bootstrap-icons-map, "filetype-rb"); } +.bi-filetype-sass::before { content: map-get($bootstrap-icons-map, "filetype-sass"); } +.bi-filetype-scss::before { content: map-get($bootstrap-icons-map, "filetype-scss"); } +.bi-filetype-sh::before { content: map-get($bootstrap-icons-map, "filetype-sh"); } +.bi-filetype-svg::before { content: map-get($bootstrap-icons-map, "filetype-svg"); } +.bi-filetype-tiff::before { content: map-get($bootstrap-icons-map, "filetype-tiff"); } +.bi-filetype-tsx::before { content: map-get($bootstrap-icons-map, "filetype-tsx"); } +.bi-filetype-ttf::before { content: map-get($bootstrap-icons-map, "filetype-ttf"); } +.bi-filetype-txt::before { content: map-get($bootstrap-icons-map, "filetype-txt"); } +.bi-filetype-wav::before { content: map-get($bootstrap-icons-map, "filetype-wav"); } +.bi-filetype-woff::before { content: map-get($bootstrap-icons-map, "filetype-woff"); } +.bi-filetype-xls-1::before { content: map-get($bootstrap-icons-map, "filetype-xls-1"); } +.bi-filetype-xls::before { content: map-get($bootstrap-icons-map, "filetype-xls"); } +.bi-filetype-xml::before { content: map-get($bootstrap-icons-map, "filetype-xml"); } +.bi-filetype-yml::before { content: map-get($bootstrap-icons-map, "filetype-yml"); } +.bi-heart-arrow::before { content: map-get($bootstrap-icons-map, "heart-arrow"); } +.bi-heart-pulse-fill::before { content: map-get($bootstrap-icons-map, "heart-pulse-fill"); } +.bi-heart-pulse::before { content: map-get($bootstrap-icons-map, "heart-pulse"); } +.bi-heartbreak-fill::before { content: map-get($bootstrap-icons-map, "heartbreak-fill"); } +.bi-heartbreak::before { content: map-get($bootstrap-icons-map, "heartbreak"); } +.bi-hearts::before { content: map-get($bootstrap-icons-map, "hearts"); } +.bi-hospital-fill::before { content: map-get($bootstrap-icons-map, "hospital-fill"); } +.bi-hospital::before { content: map-get($bootstrap-icons-map, "hospital"); } +.bi-house-heart-fill::before { content: map-get($bootstrap-icons-map, "house-heart-fill"); } +.bi-house-heart::before { content: map-get($bootstrap-icons-map, "house-heart"); } +.bi-incognito::before { content: map-get($bootstrap-icons-map, "incognito"); } +.bi-magnet-fill::before { content: map-get($bootstrap-icons-map, "magnet-fill"); } +.bi-magnet::before { content: map-get($bootstrap-icons-map, "magnet"); } +.bi-person-heart::before { content: map-get($bootstrap-icons-map, "person-heart"); } +.bi-person-hearts::before { content: map-get($bootstrap-icons-map, "person-hearts"); } +.bi-phone-flip::before { content: map-get($bootstrap-icons-map, "phone-flip"); } +.bi-plugin::before { content: map-get($bootstrap-icons-map, "plugin"); } +.bi-postage-fill::before { content: map-get($bootstrap-icons-map, "postage-fill"); } +.bi-postage-heart-fill::before { content: map-get($bootstrap-icons-map, "postage-heart-fill"); } +.bi-postage-heart::before { content: map-get($bootstrap-icons-map, "postage-heart"); } +.bi-postage::before { content: map-get($bootstrap-icons-map, "postage"); } +.bi-postcard-fill::before { content: map-get($bootstrap-icons-map, "postcard-fill"); } +.bi-postcard-heart-fill::before { content: map-get($bootstrap-icons-map, "postcard-heart-fill"); } +.bi-postcard-heart::before { content: map-get($bootstrap-icons-map, "postcard-heart"); } +.bi-postcard::before { content: map-get($bootstrap-icons-map, "postcard"); } +.bi-search-heart-fill::before { content: map-get($bootstrap-icons-map, "search-heart-fill"); } +.bi-search-heart::before { content: map-get($bootstrap-icons-map, "search-heart"); } +.bi-sliders2-vertical::before { content: map-get($bootstrap-icons-map, "sliders2-vertical"); } +.bi-sliders2::before { content: map-get($bootstrap-icons-map, "sliders2"); } +.bi-trash3-fill::before { content: map-get($bootstrap-icons-map, "trash3-fill"); } +.bi-trash3::before { content: map-get($bootstrap-icons-map, "trash3"); } +.bi-valentine::before { content: map-get($bootstrap-icons-map, "valentine"); } +.bi-valentine2::before { content: map-get($bootstrap-icons-map, "valentine2"); } +.bi-wrench-adjustable-circle-fill::before { content: map-get($bootstrap-icons-map, "wrench-adjustable-circle-fill"); } +.bi-wrench-adjustable-circle::before { content: map-get($bootstrap-icons-map, "wrench-adjustable-circle"); } +.bi-wrench-adjustable::before { content: map-get($bootstrap-icons-map, "wrench-adjustable"); } +.bi-filetype-json::before { content: map-get($bootstrap-icons-map, "filetype-json"); } +.bi-filetype-pptx::before { content: map-get($bootstrap-icons-map, "filetype-pptx"); } +.bi-filetype-xlsx::before { content: map-get($bootstrap-icons-map, "filetype-xlsx"); } +.bi-1-circle-1::before { content: map-get($bootstrap-icons-map, "1-circle-1"); } +.bi-1-circle-fill-1::before { content: map-get($bootstrap-icons-map, "1-circle-fill-1"); } +.bi-1-circle-fill::before { content: map-get($bootstrap-icons-map, "1-circle-fill"); } +.bi-1-circle::before { content: map-get($bootstrap-icons-map, "1-circle"); } +.bi-1-square-fill::before { content: map-get($bootstrap-icons-map, "1-square-fill"); } +.bi-1-square::before { content: map-get($bootstrap-icons-map, "1-square"); } +.bi-2-circle-1::before { content: map-get($bootstrap-icons-map, "2-circle-1"); } +.bi-2-circle-fill-1::before { content: map-get($bootstrap-icons-map, "2-circle-fill-1"); } +.bi-2-circle-fill::before { content: map-get($bootstrap-icons-map, "2-circle-fill"); } +.bi-2-circle::before { content: map-get($bootstrap-icons-map, "2-circle"); } +.bi-2-square-fill::before { content: map-get($bootstrap-icons-map, "2-square-fill"); } +.bi-2-square::before { content: map-get($bootstrap-icons-map, "2-square"); } +.bi-3-circle-1::before { content: map-get($bootstrap-icons-map, "3-circle-1"); } +.bi-3-circle-fill-1::before { content: map-get($bootstrap-icons-map, "3-circle-fill-1"); } +.bi-3-circle-fill::before { content: map-get($bootstrap-icons-map, "3-circle-fill"); } +.bi-3-circle::before { content: map-get($bootstrap-icons-map, "3-circle"); } +.bi-3-square-fill::before { content: map-get($bootstrap-icons-map, "3-square-fill"); } +.bi-3-square::before { content: map-get($bootstrap-icons-map, "3-square"); } +.bi-4-circle-1::before { content: map-get($bootstrap-icons-map, "4-circle-1"); } +.bi-4-circle-fill-1::before { content: map-get($bootstrap-icons-map, "4-circle-fill-1"); } +.bi-4-circle-fill::before { content: map-get($bootstrap-icons-map, "4-circle-fill"); } +.bi-4-circle::before { content: map-get($bootstrap-icons-map, "4-circle"); } +.bi-4-square-fill::before { content: map-get($bootstrap-icons-map, "4-square-fill"); } +.bi-4-square::before { content: map-get($bootstrap-icons-map, "4-square"); } +.bi-5-circle-1::before { content: map-get($bootstrap-icons-map, "5-circle-1"); } +.bi-5-circle-fill-1::before { content: map-get($bootstrap-icons-map, "5-circle-fill-1"); } +.bi-5-circle-fill::before { content: map-get($bootstrap-icons-map, "5-circle-fill"); } +.bi-5-circle::before { content: map-get($bootstrap-icons-map, "5-circle"); } +.bi-5-square-fill::before { content: map-get($bootstrap-icons-map, "5-square-fill"); } +.bi-5-square::before { content: map-get($bootstrap-icons-map, "5-square"); } +.bi-6-circle-1::before { content: map-get($bootstrap-icons-map, "6-circle-1"); } +.bi-6-circle-fill-1::before { content: map-get($bootstrap-icons-map, "6-circle-fill-1"); } +.bi-6-circle-fill::before { content: map-get($bootstrap-icons-map, "6-circle-fill"); } +.bi-6-circle::before { content: map-get($bootstrap-icons-map, "6-circle"); } +.bi-6-square-fill::before { content: map-get($bootstrap-icons-map, "6-square-fill"); } +.bi-6-square::before { content: map-get($bootstrap-icons-map, "6-square"); } +.bi-7-circle-1::before { content: map-get($bootstrap-icons-map, "7-circle-1"); } +.bi-7-circle-fill-1::before { content: map-get($bootstrap-icons-map, "7-circle-fill-1"); } +.bi-7-circle-fill::before { content: map-get($bootstrap-icons-map, "7-circle-fill"); } +.bi-7-circle::before { content: map-get($bootstrap-icons-map, "7-circle"); } +.bi-7-square-fill::before { content: map-get($bootstrap-icons-map, "7-square-fill"); } +.bi-7-square::before { content: map-get($bootstrap-icons-map, "7-square"); } +.bi-8-circle-1::before { content: map-get($bootstrap-icons-map, "8-circle-1"); } +.bi-8-circle-fill-1::before { content: map-get($bootstrap-icons-map, "8-circle-fill-1"); } +.bi-8-circle-fill::before { content: map-get($bootstrap-icons-map, "8-circle-fill"); } +.bi-8-circle::before { content: map-get($bootstrap-icons-map, "8-circle"); } +.bi-8-square-fill::before { content: map-get($bootstrap-icons-map, "8-square-fill"); } +.bi-8-square::before { content: map-get($bootstrap-icons-map, "8-square"); } +.bi-9-circle-1::before { content: map-get($bootstrap-icons-map, "9-circle-1"); } +.bi-9-circle-fill-1::before { content: map-get($bootstrap-icons-map, "9-circle-fill-1"); } +.bi-9-circle-fill::before { content: map-get($bootstrap-icons-map, "9-circle-fill"); } +.bi-9-circle::before { content: map-get($bootstrap-icons-map, "9-circle"); } +.bi-9-square-fill::before { content: map-get($bootstrap-icons-map, "9-square-fill"); } +.bi-9-square::before { content: map-get($bootstrap-icons-map, "9-square"); } +.bi-airplane-engines-fill::before { content: map-get($bootstrap-icons-map, "airplane-engines-fill"); } +.bi-airplane-engines::before { content: map-get($bootstrap-icons-map, "airplane-engines"); } +.bi-airplane-fill::before { content: map-get($bootstrap-icons-map, "airplane-fill"); } +.bi-airplane::before { content: map-get($bootstrap-icons-map, "airplane"); } +.bi-alexa::before { content: map-get($bootstrap-icons-map, "alexa"); } +.bi-alipay::before { content: map-get($bootstrap-icons-map, "alipay"); } +.bi-android::before { content: map-get($bootstrap-icons-map, "android"); } +.bi-android2::before { content: map-get($bootstrap-icons-map, "android2"); } +.bi-box-fill::before { content: map-get($bootstrap-icons-map, "box-fill"); } +.bi-box-seam-fill::before { content: map-get($bootstrap-icons-map, "box-seam-fill"); } +.bi-browser-chrome::before { content: map-get($bootstrap-icons-map, "browser-chrome"); } +.bi-browser-edge::before { content: map-get($bootstrap-icons-map, "browser-edge"); } +.bi-browser-firefox::before { content: map-get($bootstrap-icons-map, "browser-firefox"); } +.bi-browser-safari::before { content: map-get($bootstrap-icons-map, "browser-safari"); } +.bi-c-circle-1::before { content: map-get($bootstrap-icons-map, "c-circle-1"); } +.bi-c-circle-fill-1::before { content: map-get($bootstrap-icons-map, "c-circle-fill-1"); } +.bi-c-circle-fill::before { content: map-get($bootstrap-icons-map, "c-circle-fill"); } +.bi-c-circle::before { content: map-get($bootstrap-icons-map, "c-circle"); } +.bi-c-square-fill::before { content: map-get($bootstrap-icons-map, "c-square-fill"); } +.bi-c-square::before { content: map-get($bootstrap-icons-map, "c-square"); } +.bi-capsule-pill::before { content: map-get($bootstrap-icons-map, "capsule-pill"); } +.bi-capsule::before { content: map-get($bootstrap-icons-map, "capsule"); } +.bi-car-front-fill::before { content: map-get($bootstrap-icons-map, "car-front-fill"); } +.bi-car-front::before { content: map-get($bootstrap-icons-map, "car-front"); } +.bi-cassette-fill::before { content: map-get($bootstrap-icons-map, "cassette-fill"); } +.bi-cassette::before { content: map-get($bootstrap-icons-map, "cassette"); } +.bi-cc-circle-1::before { content: map-get($bootstrap-icons-map, "cc-circle-1"); } +.bi-cc-circle-fill-1::before { content: map-get($bootstrap-icons-map, "cc-circle-fill-1"); } +.bi-cc-circle-fill::before { content: map-get($bootstrap-icons-map, "cc-circle-fill"); } +.bi-cc-circle::before { content: map-get($bootstrap-icons-map, "cc-circle"); } +.bi-cc-square-fill::before { content: map-get($bootstrap-icons-map, "cc-square-fill"); } +.bi-cc-square::before { content: map-get($bootstrap-icons-map, "cc-square"); } +.bi-cup-hot-fill::before { content: map-get($bootstrap-icons-map, "cup-hot-fill"); } +.bi-cup-hot::before { content: map-get($bootstrap-icons-map, "cup-hot"); } +.bi-currency-rupee::before { content: map-get($bootstrap-icons-map, "currency-rupee"); } +.bi-dropbox::before { content: map-get($bootstrap-icons-map, "dropbox"); } +.bi-escape::before { content: map-get($bootstrap-icons-map, "escape"); } +.bi-fast-forward-btn-fill::before { content: map-get($bootstrap-icons-map, "fast-forward-btn-fill"); } +.bi-fast-forward-btn::before { content: map-get($bootstrap-icons-map, "fast-forward-btn"); } +.bi-fast-forward-circle-fill::before { content: map-get($bootstrap-icons-map, "fast-forward-circle-fill"); } +.bi-fast-forward-circle::before { content: map-get($bootstrap-icons-map, "fast-forward-circle"); } +.bi-fast-forward-fill::before { content: map-get($bootstrap-icons-map, "fast-forward-fill"); } +.bi-fast-forward::before { content: map-get($bootstrap-icons-map, "fast-forward"); } +.bi-filetype-sql::before { content: map-get($bootstrap-icons-map, "filetype-sql"); } +.bi-fire::before { content: map-get($bootstrap-icons-map, "fire"); } +.bi-google-play::before { content: map-get($bootstrap-icons-map, "google-play"); } +.bi-h-circle-1::before { content: map-get($bootstrap-icons-map, "h-circle-1"); } +.bi-h-circle-fill-1::before { content: map-get($bootstrap-icons-map, "h-circle-fill-1"); } +.bi-h-circle-fill::before { content: map-get($bootstrap-icons-map, "h-circle-fill"); } +.bi-h-circle::before { content: map-get($bootstrap-icons-map, "h-circle"); } +.bi-h-square-fill::before { content: map-get($bootstrap-icons-map, "h-square-fill"); } +.bi-h-square::before { content: map-get($bootstrap-icons-map, "h-square"); } +.bi-indent::before { content: map-get($bootstrap-icons-map, "indent"); } +.bi-lungs-fill::before { content: map-get($bootstrap-icons-map, "lungs-fill"); } +.bi-lungs::before { content: map-get($bootstrap-icons-map, "lungs"); } +.bi-microsoft-teams::before { content: map-get($bootstrap-icons-map, "microsoft-teams"); } +.bi-p-circle-1::before { content: map-get($bootstrap-icons-map, "p-circle-1"); } +.bi-p-circle-fill-1::before { content: map-get($bootstrap-icons-map, "p-circle-fill-1"); } +.bi-p-circle-fill::before { content: map-get($bootstrap-icons-map, "p-circle-fill"); } +.bi-p-circle::before { content: map-get($bootstrap-icons-map, "p-circle"); } +.bi-p-square-fill::before { content: map-get($bootstrap-icons-map, "p-square-fill"); } +.bi-p-square::before { content: map-get($bootstrap-icons-map, "p-square"); } +.bi-pass-fill::before { content: map-get($bootstrap-icons-map, "pass-fill"); } +.bi-pass::before { content: map-get($bootstrap-icons-map, "pass"); } +.bi-prescription::before { content: map-get($bootstrap-icons-map, "prescription"); } +.bi-prescription2::before { content: map-get($bootstrap-icons-map, "prescription2"); } +.bi-r-circle-1::before { content: map-get($bootstrap-icons-map, "r-circle-1"); } +.bi-r-circle-fill-1::before { content: map-get($bootstrap-icons-map, "r-circle-fill-1"); } +.bi-r-circle-fill::before { content: map-get($bootstrap-icons-map, "r-circle-fill"); } +.bi-r-circle::before { content: map-get($bootstrap-icons-map, "r-circle"); } +.bi-r-square-fill::before { content: map-get($bootstrap-icons-map, "r-square-fill"); } +.bi-r-square::before { content: map-get($bootstrap-icons-map, "r-square"); } +.bi-repeat-1::before { content: map-get($bootstrap-icons-map, "repeat-1"); } +.bi-repeat::before { content: map-get($bootstrap-icons-map, "repeat"); } +.bi-rewind-btn-fill::before { content: map-get($bootstrap-icons-map, "rewind-btn-fill"); } +.bi-rewind-btn::before { content: map-get($bootstrap-icons-map, "rewind-btn"); } +.bi-rewind-circle-fill::before { content: map-get($bootstrap-icons-map, "rewind-circle-fill"); } +.bi-rewind-circle::before { content: map-get($bootstrap-icons-map, "rewind-circle"); } +.bi-rewind-fill::before { content: map-get($bootstrap-icons-map, "rewind-fill"); } +.bi-rewind::before { content: map-get($bootstrap-icons-map, "rewind"); } +.bi-train-freight-front-fill::before { content: map-get($bootstrap-icons-map, "train-freight-front-fill"); } +.bi-train-freight-front::before { content: map-get($bootstrap-icons-map, "train-freight-front"); } +.bi-train-front-fill::before { content: map-get($bootstrap-icons-map, "train-front-fill"); } +.bi-train-front::before { content: map-get($bootstrap-icons-map, "train-front"); } +.bi-train-lightrail-front-fill::before { content: map-get($bootstrap-icons-map, "train-lightrail-front-fill"); } +.bi-train-lightrail-front::before { content: map-get($bootstrap-icons-map, "train-lightrail-front"); } +.bi-truck-front-fill::before { content: map-get($bootstrap-icons-map, "truck-front-fill"); } +.bi-truck-front::before { content: map-get($bootstrap-icons-map, "truck-front"); } +.bi-ubuntu::before { content: map-get($bootstrap-icons-map, "ubuntu"); } +.bi-unindent::before { content: map-get($bootstrap-icons-map, "unindent"); } +.bi-unity::before { content: map-get($bootstrap-icons-map, "unity"); } +.bi-universal-access-circle::before { content: map-get($bootstrap-icons-map, "universal-access-circle"); } +.bi-universal-access::before { content: map-get($bootstrap-icons-map, "universal-access"); } +.bi-virus::before { content: map-get($bootstrap-icons-map, "virus"); } +.bi-virus2::before { content: map-get($bootstrap-icons-map, "virus2"); } +.bi-wechat::before { content: map-get($bootstrap-icons-map, "wechat"); } +.bi-yelp::before { content: map-get($bootstrap-icons-map, "yelp"); } +.bi-sign-stop-fill::before { content: map-get($bootstrap-icons-map, "sign-stop-fill"); } +.bi-sign-stop-lights-fill::before { content: map-get($bootstrap-icons-map, "sign-stop-lights-fill"); } +.bi-sign-stop-lights::before { content: map-get($bootstrap-icons-map, "sign-stop-lights"); } +.bi-sign-stop::before { content: map-get($bootstrap-icons-map, "sign-stop"); } +.bi-sign-turn-left-fill::before { content: map-get($bootstrap-icons-map, "sign-turn-left-fill"); } +.bi-sign-turn-left::before { content: map-get($bootstrap-icons-map, "sign-turn-left"); } +.bi-sign-turn-right-fill::before { content: map-get($bootstrap-icons-map, "sign-turn-right-fill"); } +.bi-sign-turn-right::before { content: map-get($bootstrap-icons-map, "sign-turn-right"); } +.bi-sign-turn-slight-left-fill::before { content: map-get($bootstrap-icons-map, "sign-turn-slight-left-fill"); } +.bi-sign-turn-slight-left::before { content: map-get($bootstrap-icons-map, "sign-turn-slight-left"); } +.bi-sign-turn-slight-right-fill::before { content: map-get($bootstrap-icons-map, "sign-turn-slight-right-fill"); } +.bi-sign-turn-slight-right::before { content: map-get($bootstrap-icons-map, "sign-turn-slight-right"); } +.bi-sign-yield-fill::before { content: map-get($bootstrap-icons-map, "sign-yield-fill"); } +.bi-sign-yield::before { content: map-get($bootstrap-icons-map, "sign-yield"); } +.bi-ev-station-fill::before { content: map-get($bootstrap-icons-map, "ev-station-fill"); } +.bi-ev-station::before { content: map-get($bootstrap-icons-map, "ev-station"); } +.bi-fuel-pump-diesel-fill::before { content: map-get($bootstrap-icons-map, "fuel-pump-diesel-fill"); } +.bi-fuel-pump-diesel::before { content: map-get($bootstrap-icons-map, "fuel-pump-diesel"); } +.bi-fuel-pump-fill::before { content: map-get($bootstrap-icons-map, "fuel-pump-fill"); } +.bi-fuel-pump::before { content: map-get($bootstrap-icons-map, "fuel-pump"); } +.bi-0-circle-fill::before { content: map-get($bootstrap-icons-map, "0-circle-fill"); } +.bi-0-circle::before { content: map-get($bootstrap-icons-map, "0-circle"); } +.bi-0-square-fill::before { content: map-get($bootstrap-icons-map, "0-square-fill"); } +.bi-0-square::before { content: map-get($bootstrap-icons-map, "0-square"); } +.bi-rocket-fill::before { content: map-get($bootstrap-icons-map, "rocket-fill"); } +.bi-rocket-takeoff-fill::before { content: map-get($bootstrap-icons-map, "rocket-takeoff-fill"); } +.bi-rocket-takeoff::before { content: map-get($bootstrap-icons-map, "rocket-takeoff"); } +.bi-rocket::before { content: map-get($bootstrap-icons-map, "rocket"); } +.bi-stripe::before { content: map-get($bootstrap-icons-map, "stripe"); } +.bi-subscript::before { content: map-get($bootstrap-icons-map, "subscript"); } +.bi-superscript::before { content: map-get($bootstrap-icons-map, "superscript"); } +.bi-trello::before { content: map-get($bootstrap-icons-map, "trello"); } +.bi-envelope-at-fill::before { content: map-get($bootstrap-icons-map, "envelope-at-fill"); } +.bi-envelope-at::before { content: map-get($bootstrap-icons-map, "envelope-at"); } +.bi-regex::before { content: map-get($bootstrap-icons-map, "regex"); } +.bi-text-wrap::before { content: map-get($bootstrap-icons-map, "text-wrap"); } +.bi-sign-dead-end-fill::before { content: map-get($bootstrap-icons-map, "sign-dead-end-fill"); } +.bi-sign-dead-end::before { content: map-get($bootstrap-icons-map, "sign-dead-end"); } +.bi-sign-do-not-enter-fill::before { content: map-get($bootstrap-icons-map, "sign-do-not-enter-fill"); } +.bi-sign-do-not-enter::before { content: map-get($bootstrap-icons-map, "sign-do-not-enter"); } +.bi-sign-intersection-fill::before { content: map-get($bootstrap-icons-map, "sign-intersection-fill"); } +.bi-sign-intersection-side-fill::before { content: map-get($bootstrap-icons-map, "sign-intersection-side-fill"); } +.bi-sign-intersection-side::before { content: map-get($bootstrap-icons-map, "sign-intersection-side"); } +.bi-sign-intersection-t-fill::before { content: map-get($bootstrap-icons-map, "sign-intersection-t-fill"); } +.bi-sign-intersection-t::before { content: map-get($bootstrap-icons-map, "sign-intersection-t"); } +.bi-sign-intersection-y-fill::before { content: map-get($bootstrap-icons-map, "sign-intersection-y-fill"); } +.bi-sign-intersection-y::before { content: map-get($bootstrap-icons-map, "sign-intersection-y"); } +.bi-sign-intersection::before { content: map-get($bootstrap-icons-map, "sign-intersection"); } +.bi-sign-merge-left-fill::before { content: map-get($bootstrap-icons-map, "sign-merge-left-fill"); } +.bi-sign-merge-left::before { content: map-get($bootstrap-icons-map, "sign-merge-left"); } +.bi-sign-merge-right-fill::before { content: map-get($bootstrap-icons-map, "sign-merge-right-fill"); } +.bi-sign-merge-right::before { content: map-get($bootstrap-icons-map, "sign-merge-right"); } +.bi-sign-no-left-turn-fill::before { content: map-get($bootstrap-icons-map, "sign-no-left-turn-fill"); } +.bi-sign-no-left-turn::before { content: map-get($bootstrap-icons-map, "sign-no-left-turn"); } +.bi-sign-no-parking-fill::before { content: map-get($bootstrap-icons-map, "sign-no-parking-fill"); } +.bi-sign-no-parking::before { content: map-get($bootstrap-icons-map, "sign-no-parking"); } +.bi-sign-no-right-turn-fill::before { content: map-get($bootstrap-icons-map, "sign-no-right-turn-fill"); } +.bi-sign-no-right-turn::before { content: map-get($bootstrap-icons-map, "sign-no-right-turn"); } +.bi-sign-railroad-fill::before { content: map-get($bootstrap-icons-map, "sign-railroad-fill"); } +.bi-sign-railroad::before { content: map-get($bootstrap-icons-map, "sign-railroad"); } +.bi-building-add::before { content: map-get($bootstrap-icons-map, "building-add"); } +.bi-building-check::before { content: map-get($bootstrap-icons-map, "building-check"); } +.bi-building-dash::before { content: map-get($bootstrap-icons-map, "building-dash"); } +.bi-building-down::before { content: map-get($bootstrap-icons-map, "building-down"); } +.bi-building-exclamation::before { content: map-get($bootstrap-icons-map, "building-exclamation"); } +.bi-building-fill-add::before { content: map-get($bootstrap-icons-map, "building-fill-add"); } +.bi-building-fill-check::before { content: map-get($bootstrap-icons-map, "building-fill-check"); } +.bi-building-fill-dash::before { content: map-get($bootstrap-icons-map, "building-fill-dash"); } +.bi-building-fill-down::before { content: map-get($bootstrap-icons-map, "building-fill-down"); } +.bi-building-fill-exclamation::before { content: map-get($bootstrap-icons-map, "building-fill-exclamation"); } +.bi-building-fill-gear::before { content: map-get($bootstrap-icons-map, "building-fill-gear"); } +.bi-building-fill-lock::before { content: map-get($bootstrap-icons-map, "building-fill-lock"); } +.bi-building-fill-slash::before { content: map-get($bootstrap-icons-map, "building-fill-slash"); } +.bi-building-fill-up::before { content: map-get($bootstrap-icons-map, "building-fill-up"); } +.bi-building-fill-x::before { content: map-get($bootstrap-icons-map, "building-fill-x"); } +.bi-building-fill::before { content: map-get($bootstrap-icons-map, "building-fill"); } +.bi-building-gear::before { content: map-get($bootstrap-icons-map, "building-gear"); } +.bi-building-lock::before { content: map-get($bootstrap-icons-map, "building-lock"); } +.bi-building-slash::before { content: map-get($bootstrap-icons-map, "building-slash"); } +.bi-building-up::before { content: map-get($bootstrap-icons-map, "building-up"); } +.bi-building-x::before { content: map-get($bootstrap-icons-map, "building-x"); } +.bi-buildings-fill::before { content: map-get($bootstrap-icons-map, "buildings-fill"); } +.bi-buildings::before { content: map-get($bootstrap-icons-map, "buildings"); } +.bi-bus-front-fill::before { content: map-get($bootstrap-icons-map, "bus-front-fill"); } +.bi-bus-front::before { content: map-get($bootstrap-icons-map, "bus-front"); } +.bi-ev-front-fill::before { content: map-get($bootstrap-icons-map, "ev-front-fill"); } +.bi-ev-front::before { content: map-get($bootstrap-icons-map, "ev-front"); } +.bi-globe-americas::before { content: map-get($bootstrap-icons-map, "globe-americas"); } +.bi-globe-asia-australia::before { content: map-get($bootstrap-icons-map, "globe-asia-australia"); } +.bi-globe-central-south-asia::before { content: map-get($bootstrap-icons-map, "globe-central-south-asia"); } +.bi-globe-europe-africa::before { content: map-get($bootstrap-icons-map, "globe-europe-africa"); } +.bi-house-add-fill::before { content: map-get($bootstrap-icons-map, "house-add-fill"); } +.bi-house-add::before { content: map-get($bootstrap-icons-map, "house-add"); } +.bi-house-check-fill::before { content: map-get($bootstrap-icons-map, "house-check-fill"); } +.bi-house-check::before { content: map-get($bootstrap-icons-map, "house-check"); } +.bi-house-dash-fill::before { content: map-get($bootstrap-icons-map, "house-dash-fill"); } +.bi-house-dash::before { content: map-get($bootstrap-icons-map, "house-dash"); } +.bi-house-down-fill::before { content: map-get($bootstrap-icons-map, "house-down-fill"); } +.bi-house-down::before { content: map-get($bootstrap-icons-map, "house-down"); } +.bi-house-exclamation-fill::before { content: map-get($bootstrap-icons-map, "house-exclamation-fill"); } +.bi-house-exclamation::before { content: map-get($bootstrap-icons-map, "house-exclamation"); } +.bi-house-gear-fill::before { content: map-get($bootstrap-icons-map, "house-gear-fill"); } +.bi-house-gear::before { content: map-get($bootstrap-icons-map, "house-gear"); } +.bi-house-lock-fill::before { content: map-get($bootstrap-icons-map, "house-lock-fill"); } +.bi-house-lock::before { content: map-get($bootstrap-icons-map, "house-lock"); } +.bi-house-slash-fill::before { content: map-get($bootstrap-icons-map, "house-slash-fill"); } +.bi-house-slash::before { content: map-get($bootstrap-icons-map, "house-slash"); } +.bi-house-up-fill::before { content: map-get($bootstrap-icons-map, "house-up-fill"); } +.bi-house-up::before { content: map-get($bootstrap-icons-map, "house-up"); } +.bi-house-x-fill::before { content: map-get($bootstrap-icons-map, "house-x-fill"); } +.bi-house-x::before { content: map-get($bootstrap-icons-map, "house-x"); } +.bi-person-add::before { content: map-get($bootstrap-icons-map, "person-add"); } +.bi-person-down::before { content: map-get($bootstrap-icons-map, "person-down"); } +.bi-person-exclamation::before { content: map-get($bootstrap-icons-map, "person-exclamation"); } +.bi-person-fill-add::before { content: map-get($bootstrap-icons-map, "person-fill-add"); } +.bi-person-fill-check::before { content: map-get($bootstrap-icons-map, "person-fill-check"); } +.bi-person-fill-dash::before { content: map-get($bootstrap-icons-map, "person-fill-dash"); } +.bi-person-fill-down::before { content: map-get($bootstrap-icons-map, "person-fill-down"); } +.bi-person-fill-exclamation::before { content: map-get($bootstrap-icons-map, "person-fill-exclamation"); } +.bi-person-fill-gear::before { content: map-get($bootstrap-icons-map, "person-fill-gear"); } +.bi-person-fill-lock::before { content: map-get($bootstrap-icons-map, "person-fill-lock"); } +.bi-person-fill-slash::before { content: map-get($bootstrap-icons-map, "person-fill-slash"); } +.bi-person-fill-up::before { content: map-get($bootstrap-icons-map, "person-fill-up"); } +.bi-person-fill-x::before { content: map-get($bootstrap-icons-map, "person-fill-x"); } +.bi-person-gear::before { content: map-get($bootstrap-icons-map, "person-gear"); } +.bi-person-lock::before { content: map-get($bootstrap-icons-map, "person-lock"); } +.bi-person-slash::before { content: map-get($bootstrap-icons-map, "person-slash"); } +.bi-person-up::before { content: map-get($bootstrap-icons-map, "person-up"); } +.bi-scooter::before { content: map-get($bootstrap-icons-map, "scooter"); } +.bi-taxi-front-fill::before { content: map-get($bootstrap-icons-map, "taxi-front-fill"); } +.bi-taxi-front::before { content: map-get($bootstrap-icons-map, "taxi-front"); } +.bi-amd::before { content: map-get($bootstrap-icons-map, "amd"); } +.bi-database-add::before { content: map-get($bootstrap-icons-map, "database-add"); } +.bi-database-check::before { content: map-get($bootstrap-icons-map, "database-check"); } +.bi-database-dash::before { content: map-get($bootstrap-icons-map, "database-dash"); } +.bi-database-down::before { content: map-get($bootstrap-icons-map, "database-down"); } +.bi-database-exclamation::before { content: map-get($bootstrap-icons-map, "database-exclamation"); } +.bi-database-fill-add::before { content: map-get($bootstrap-icons-map, "database-fill-add"); } +.bi-database-fill-check::before { content: map-get($bootstrap-icons-map, "database-fill-check"); } +.bi-database-fill-dash::before { content: map-get($bootstrap-icons-map, "database-fill-dash"); } +.bi-database-fill-down::before { content: map-get($bootstrap-icons-map, "database-fill-down"); } +.bi-database-fill-exclamation::before { content: map-get($bootstrap-icons-map, "database-fill-exclamation"); } +.bi-database-fill-gear::before { content: map-get($bootstrap-icons-map, "database-fill-gear"); } +.bi-database-fill-lock::before { content: map-get($bootstrap-icons-map, "database-fill-lock"); } +.bi-database-fill-slash::before { content: map-get($bootstrap-icons-map, "database-fill-slash"); } +.bi-database-fill-up::before { content: map-get($bootstrap-icons-map, "database-fill-up"); } +.bi-database-fill-x::before { content: map-get($bootstrap-icons-map, "database-fill-x"); } +.bi-database-fill::before { content: map-get($bootstrap-icons-map, "database-fill"); } +.bi-database-gear::before { content: map-get($bootstrap-icons-map, "database-gear"); } +.bi-database-lock::before { content: map-get($bootstrap-icons-map, "database-lock"); } +.bi-database-slash::before { content: map-get($bootstrap-icons-map, "database-slash"); } +.bi-database-up::before { content: map-get($bootstrap-icons-map, "database-up"); } +.bi-database-x::before { content: map-get($bootstrap-icons-map, "database-x"); } +.bi-database::before { content: map-get($bootstrap-icons-map, "database"); } +.bi-houses-fill::before { content: map-get($bootstrap-icons-map, "houses-fill"); } +.bi-houses::before { content: map-get($bootstrap-icons-map, "houses"); } +.bi-nvidia::before { content: map-get($bootstrap-icons-map, "nvidia"); } +.bi-person-vcard-fill::before { content: map-get($bootstrap-icons-map, "person-vcard-fill"); } +.bi-person-vcard::before { content: map-get($bootstrap-icons-map, "person-vcard"); } +.bi-sina-weibo::before { content: map-get($bootstrap-icons-map, "sina-weibo"); } +.bi-tencent-qq::before { content: map-get($bootstrap-icons-map, "tencent-qq"); } +.bi-wikipedia::before { content: map-get($bootstrap-icons-map, "wikipedia"); } diff --git a/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff b/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff new file mode 100644 index 0000000..bfb8665 Binary files /dev/null and b/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff differ diff --git a/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 b/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 new file mode 100644 index 0000000..4df0df2 Binary files /dev/null and b/src/assets/vendor/bootstrap-icons/fonts/bootstrap-icons.woff2 differ diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.css b/src/assets/vendor/bootstrap/css/bootstrap-grid.css new file mode 100644 index 0000000..4691f79 --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.css @@ -0,0 +1,4124 @@ +/*! + * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-right: calc(var(--bs-gutter-x) * 0.5); + padding-left: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-left: 8.33333333%; +} + +.offset-2 { + margin-left: 16.66666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.33333333%; +} + +.offset-5 { + margin-left: 41.66666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.33333333%; +} + +.offset-8 { + margin-left: 66.66666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.33333333%; +} + +.offset-11 { + margin-left: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.33333333%; + } + .offset-sm-2 { + margin-left: 16.66666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.33333333%; + } + .offset-sm-5 { + margin-left: 41.66666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.33333333%; + } + .offset-sm-8 { + margin-left: 66.66666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.33333333%; + } + .offset-sm-11 { + margin-left: 91.66666667%; + } + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.33333333%; + } + .offset-md-2 { + margin-left: 16.66666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.33333333%; + } + .offset-md-5 { + margin-left: 41.66666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.33333333%; + } + .offset-md-8 { + margin-left: 66.66666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.33333333%; + } + .offset-md-11 { + margin-left: 91.66666667%; + } + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.33333333%; + } + .offset-lg-2 { + margin-left: 16.66666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.33333333%; + } + .offset-lg-5 { + margin-left: 41.66666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.33333333%; + } + .offset-lg-8 { + margin-left: 66.66666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.33333333%; + } + .offset-lg-11 { + margin-left: 91.66666667%; + } + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.33333333%; + } + .offset-xl-2 { + margin-left: 16.66666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.33333333%; + } + .offset-xl-5 { + margin-left: 41.66666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.33333333%; + } + .offset-xl-8 { + margin-left: 66.66666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.33333333%; + } + .offset-xl-11 { + margin-left: 91.66666667%; + } + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-left: 0; + } + .offset-xxl-1 { + margin-left: 8.33333333%; + } + .offset-xxl-2 { + margin-left: 16.66666667%; + } + .offset-xxl-3 { + margin-left: 25%; + } + .offset-xxl-4 { + margin-left: 33.33333333%; + } + .offset-xxl-5 { + margin-left: 41.66666667%; + } + .offset-xxl-6 { + margin-left: 50%; + } + .offset-xxl-7 { + margin-left: 58.33333333%; + } + .offset-xxl-8 { + margin-left: 66.66666667%; + } + .offset-xxl-9 { + margin-left: 75%; + } + .offset-xxl-10 { + margin-left: 83.33333333%; + } + .offset-xxl-11 { + margin-left: 91.66666667%; + } + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-right: 0 !important; + margin-left: 0 !important; +} + +.mx-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; +} + +.mx-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; +} + +.mx-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; +} + +.mx-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; +} + +.mx-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; +} + +.mx-auto { + margin-right: auto !important; + margin-left: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-right: 0 !important; +} + +.me-1 { + margin-right: 0.25rem !important; +} + +.me-2 { + margin-right: 0.5rem !important; +} + +.me-3 { + margin-right: 1rem !important; +} + +.me-4 { + margin-right: 1.5rem !important; +} + +.me-5 { + margin-right: 3rem !important; +} + +.me-auto { + margin-right: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-left: 0 !important; +} + +.ms-1 { + margin-left: 0.25rem !important; +} + +.ms-2 { + margin-left: 0.5rem !important; +} + +.ms-3 { + margin-left: 1rem !important; +} + +.ms-4 { + margin-left: 1.5rem !important; +} + +.ms-5 { + margin-left: 3rem !important; +} + +.ms-auto { + margin-left: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-right: 0 !important; + padding-left: 0 !important; +} + +.px-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; +} + +.px-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; +} + +.px-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; +} + +.px-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; +} + +.px-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-right: 0 !important; +} + +.pe-1 { + padding-right: 0.25rem !important; +} + +.pe-2 { + padding-right: 0.5rem !important; +} + +.pe-3 { + padding-right: 1rem !important; +} + +.pe-4 { + padding-right: 1.5rem !important; +} + +.pe-5 { + padding-right: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-left: 0 !important; +} + +.ps-1 { + padding-left: 0.25rem !important; +} + +.ps-2 { + padding-left: 0.5rem !important; +} + +.ps-3 { + padding-left: 1rem !important; +} + +.ps-4 { + padding-left: 1.5rem !important; +} + +.ps-5 { + padding-left: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-sm-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-sm-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-sm-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-sm-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-sm-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-sm-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-right: 0 !important; + } + .me-sm-1 { + margin-right: 0.25rem !important; + } + .me-sm-2 { + margin-right: 0.5rem !important; + } + .me-sm-3 { + margin-right: 1rem !important; + } + .me-sm-4 { + margin-right: 1.5rem !important; + } + .me-sm-5 { + margin-right: 3rem !important; + } + .me-sm-auto { + margin-right: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-left: 0 !important; + } + .ms-sm-1 { + margin-left: 0.25rem !important; + } + .ms-sm-2 { + margin-left: 0.5rem !important; + } + .ms-sm-3 { + margin-left: 1rem !important; + } + .ms-sm-4 { + margin-left: 1.5rem !important; + } + .ms-sm-5 { + margin-left: 3rem !important; + } + .ms-sm-auto { + margin-left: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-sm-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-sm-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-sm-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-sm-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-sm-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-right: 0 !important; + } + .pe-sm-1 { + padding-right: 0.25rem !important; + } + .pe-sm-2 { + padding-right: 0.5rem !important; + } + .pe-sm-3 { + padding-right: 1rem !important; + } + .pe-sm-4 { + padding-right: 1.5rem !important; + } + .pe-sm-5 { + padding-right: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-left: 0 !important; + } + .ps-sm-1 { + padding-left: 0.25rem !important; + } + .ps-sm-2 { + padding-left: 0.5rem !important; + } + .ps-sm-3 { + padding-left: 1rem !important; + } + .ps-sm-4 { + padding-left: 1.5rem !important; + } + .ps-sm-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-md-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-md-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-md-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-md-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-md-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-md-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-right: 0 !important; + } + .me-md-1 { + margin-right: 0.25rem !important; + } + .me-md-2 { + margin-right: 0.5rem !important; + } + .me-md-3 { + margin-right: 1rem !important; + } + .me-md-4 { + margin-right: 1.5rem !important; + } + .me-md-5 { + margin-right: 3rem !important; + } + .me-md-auto { + margin-right: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-left: 0 !important; + } + .ms-md-1 { + margin-left: 0.25rem !important; + } + .ms-md-2 { + margin-left: 0.5rem !important; + } + .ms-md-3 { + margin-left: 1rem !important; + } + .ms-md-4 { + margin-left: 1.5rem !important; + } + .ms-md-5 { + margin-left: 3rem !important; + } + .ms-md-auto { + margin-left: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-md-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-md-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-md-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-md-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-md-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-right: 0 !important; + } + .pe-md-1 { + padding-right: 0.25rem !important; + } + .pe-md-2 { + padding-right: 0.5rem !important; + } + .pe-md-3 { + padding-right: 1rem !important; + } + .pe-md-4 { + padding-right: 1.5rem !important; + } + .pe-md-5 { + padding-right: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-left: 0 !important; + } + .ps-md-1 { + padding-left: 0.25rem !important; + } + .ps-md-2 { + padding-left: 0.5rem !important; + } + .ps-md-3 { + padding-left: 1rem !important; + } + .ps-md-4 { + padding-left: 1.5rem !important; + } + .ps-md-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-lg-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-lg-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-lg-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-lg-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-lg-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-lg-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-right: 0 !important; + } + .me-lg-1 { + margin-right: 0.25rem !important; + } + .me-lg-2 { + margin-right: 0.5rem !important; + } + .me-lg-3 { + margin-right: 1rem !important; + } + .me-lg-4 { + margin-right: 1.5rem !important; + } + .me-lg-5 { + margin-right: 3rem !important; + } + .me-lg-auto { + margin-right: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-left: 0 !important; + } + .ms-lg-1 { + margin-left: 0.25rem !important; + } + .ms-lg-2 { + margin-left: 0.5rem !important; + } + .ms-lg-3 { + margin-left: 1rem !important; + } + .ms-lg-4 { + margin-left: 1.5rem !important; + } + .ms-lg-5 { + margin-left: 3rem !important; + } + .ms-lg-auto { + margin-left: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-lg-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-lg-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-lg-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-lg-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-lg-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-right: 0 !important; + } + .pe-lg-1 { + padding-right: 0.25rem !important; + } + .pe-lg-2 { + padding-right: 0.5rem !important; + } + .pe-lg-3 { + padding-right: 1rem !important; + } + .pe-lg-4 { + padding-right: 1.5rem !important; + } + .pe-lg-5 { + padding-right: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-left: 0 !important; + } + .ps-lg-1 { + padding-left: 0.25rem !important; + } + .ps-lg-2 { + padding-left: 0.5rem !important; + } + .ps-lg-3 { + padding-left: 1rem !important; + } + .ps-lg-4 { + padding-left: 1.5rem !important; + } + .ps-lg-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-right: 0 !important; + } + .me-xl-1 { + margin-right: 0.25rem !important; + } + .me-xl-2 { + margin-right: 0.5rem !important; + } + .me-xl-3 { + margin-right: 1rem !important; + } + .me-xl-4 { + margin-right: 1.5rem !important; + } + .me-xl-5 { + margin-right: 3rem !important; + } + .me-xl-auto { + margin-right: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-left: 0 !important; + } + .ms-xl-1 { + margin-left: 0.25rem !important; + } + .ms-xl-2 { + margin-left: 0.5rem !important; + } + .ms-xl-3 { + margin-left: 1rem !important; + } + .ms-xl-4 { + margin-left: 1.5rem !important; + } + .ms-xl-5 { + margin-left: 3rem !important; + } + .ms-xl-auto { + margin-left: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-right: 0 !important; + } + .pe-xl-1 { + padding-right: 0.25rem !important; + } + .pe-xl-2 { + padding-right: 0.5rem !important; + } + .pe-xl-3 { + padding-right: 1rem !important; + } + .pe-xl-4 { + padding-right: 1.5rem !important; + } + .pe-xl-5 { + padding-right: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-left: 0 !important; + } + .ps-xl-1 { + padding-left: 0.25rem !important; + } + .ps-xl-2 { + padding-left: 0.5rem !important; + } + .ps-xl-3 { + padding-left: 1rem !important; + } + .ps-xl-4 { + padding-left: 1.5rem !important; + } + .ps-xl-5 { + padding-left: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-right: 0 !important; + margin-left: 0 !important; + } + .mx-xxl-1 { + margin-right: 0.25rem !important; + margin-left: 0.25rem !important; + } + .mx-xxl-2 { + margin-right: 0.5rem !important; + margin-left: 0.5rem !important; + } + .mx-xxl-3 { + margin-right: 1rem !important; + margin-left: 1rem !important; + } + .mx-xxl-4 { + margin-right: 1.5rem !important; + margin-left: 1.5rem !important; + } + .mx-xxl-5 { + margin-right: 3rem !important; + margin-left: 3rem !important; + } + .mx-xxl-auto { + margin-right: auto !important; + margin-left: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-right: 0 !important; + } + .me-xxl-1 { + margin-right: 0.25rem !important; + } + .me-xxl-2 { + margin-right: 0.5rem !important; + } + .me-xxl-3 { + margin-right: 1rem !important; + } + .me-xxl-4 { + margin-right: 1.5rem !important; + } + .me-xxl-5 { + margin-right: 3rem !important; + } + .me-xxl-auto { + margin-right: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-left: 0 !important; + } + .ms-xxl-1 { + margin-left: 0.25rem !important; + } + .ms-xxl-2 { + margin-left: 0.5rem !important; + } + .ms-xxl-3 { + margin-left: 1rem !important; + } + .ms-xxl-4 { + margin-left: 1.5rem !important; + } + .ms-xxl-5 { + margin-left: 3rem !important; + } + .ms-xxl-auto { + margin-left: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-right: 0 !important; + padding-left: 0 !important; + } + .px-xxl-1 { + padding-right: 0.25rem !important; + padding-left: 0.25rem !important; + } + .px-xxl-2 { + padding-right: 0.5rem !important; + padding-left: 0.5rem !important; + } + .px-xxl-3 { + padding-right: 1rem !important; + padding-left: 1rem !important; + } + .px-xxl-4 { + padding-right: 1.5rem !important; + padding-left: 1.5rem !important; + } + .px-xxl-5 { + padding-right: 3rem !important; + padding-left: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-right: 0 !important; + } + .pe-xxl-1 { + padding-right: 0.25rem !important; + } + .pe-xxl-2 { + padding-right: 0.5rem !important; + } + .pe-xxl-3 { + padding-right: 1rem !important; + } + .pe-xxl-4 { + padding-right: 1.5rem !important; + } + .pe-xxl-5 { + padding-right: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-left: 0 !important; + } + .ps-xxl-1 { + padding-left: 0.25rem !important; + } + .ps-xxl-2 { + padding-left: 0.5rem !important; + } + .ps-xxl-3 { + padding-left: 1rem !important; + } + .ps-xxl-4 { + padding-left: 1.5rem !important; + } + .ps-xxl-5 { + padding-left: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} + +/*# sourceMappingURL=bootstrap-grid.css.map */ \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.css.map b/src/assets/vendor/bootstrap/css/bootstrap-grid.css.map new file mode 100644 index 0000000..ab69ccd --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"AACE;;;;;EAAA;ACDF;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC4PI,yBALI;EDrPR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;EAIA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,wBAAA;EACA,8BAAA;EAEA,wBAAA;EAEA,0BAAA;AEEF;;ACnEE;;;;;;;ECHA,qBAAA;EACA,gBAAA;EACA,WAAA;EACA,6CAAA;EACA,4CAAA;EACA,kBAAA;EACA,iBAAA;AFgFF;;AG1BI;EF5CE;IACE,gBG6ae;EJnWrB;AACF;AGhCI;EF5CE;IACE,gBG6ae;EJ9VrB;AACF;AGrCI;EF5CE;IACE,gBG6ae;EJzVrB;AACF;AG1CI;EF5CE;IACE,iBG6ae;EJpVrB;AACF;AG/CI;EF5CE;IACE,iBG6ae;EJ/UrB;AACF;AK9GE;ECAA,qBAAA;EACA,gBAAA;EACA,aAAA;EACA,eAAA;EAEA,yCAAA;EACA,6CAAA;EACA,4CAAA;ANgHF;AKpHI;ECSF,sBAAA;EAIA,cAAA;EACA,WAAA;EACA,eAAA;EACA,6CAAA;EACA,4CAAA;EACA,8BAAA;AN2GF;;AM5DM;EACE,YAAA;AN+DR;;AM5DM;EApCJ,cAAA;EACA,WAAA;ANoGF;;AMtFE;EACE,cAAA;EACA,WAAA;ANyFJ;;AM3FE;EACE,cAAA;EACA,UAAA;AN8FJ;;AMhGE;EACE,cAAA;EACA,qBAAA;ANmGJ;;AMrGE;EACE,cAAA;EACA,UAAA;ANwGJ;;AM1GE;EACE,cAAA;EACA,UAAA;AN6GJ;;AM/GE;EACE,cAAA;EACA,qBAAA;ANkHJ;;AMnFM;EAhDJ,cAAA;EACA,WAAA;ANuIF;;AMlFU;EAhEN,cAAA;EACA,kBAAA;ANsJJ;;AMvFU;EAhEN,cAAA;EACA,mBAAA;AN2JJ;;AM5FU;EAhEN,cAAA;EACA,UAAA;ANgKJ;;AMjGU;EAhEN,cAAA;EACA,mBAAA;ANqKJ;;AMtGU;EAhEN,cAAA;EACA,mBAAA;AN0KJ;;AM3GU;EAhEN,cAAA;EACA,UAAA;AN+KJ;;AMhHU;EAhEN,cAAA;EACA,mBAAA;ANoLJ;;AMrHU;EAhEN,cAAA;EACA,mBAAA;ANyLJ;;AM1HU;EAhEN,cAAA;EACA,UAAA;AN8LJ;;AM/HU;EAhEN,cAAA;EACA,mBAAA;ANmMJ;;AMpIU;EAhEN,cAAA;EACA,mBAAA;ANwMJ;;AMzIU;EAhEN,cAAA;EACA,WAAA;AN6MJ;;AMtIY;EAxDV,wBAAA;ANkMF;;AM1IY;EAxDV,yBAAA;ANsMF;;AM9IY;EAxDV,gBAAA;AN0MF;;AMlJY;EAxDV,yBAAA;AN8MF;;AMtJY;EAxDV,yBAAA;ANkNF;;AM1JY;EAxDV,gBAAA;ANsNF;;AM9JY;EAxDV,yBAAA;AN0NF;;AMlKY;EAxDV,yBAAA;AN8NF;;AMtKY;EAxDV,gBAAA;ANkOF;;AM1KY;EAxDV,yBAAA;ANsOF;;AM9KY;EAxDV,yBAAA;AN0OF;;AMvKQ;;EAEE,gBAAA;AN0KV;;AMvKQ;;EAEE,gBAAA;AN0KV;;AMjLQ;;EAEE,sBAAA;ANoLV;;AMjLQ;;EAEE,sBAAA;ANoLV;;AM3LQ;;EAEE,qBAAA;AN8LV;;AM3LQ;;EAEE,qBAAA;AN8LV;;AMrMQ;;EAEE,mBAAA;ANwMV;;AMrMQ;;EAEE,mBAAA;ANwMV;;AM/MQ;;EAEE,qBAAA;ANkNV;;AM/MQ;;EAEE,qBAAA;ANkNV;;AMzNQ;;EAEE,mBAAA;AN4NV;;AMzNQ;;EAEE,mBAAA;AN4NV;;AGtRI;EGUE;IACE,YAAA;ENgRN;EM7QI;IApCJ,cAAA;IACA,WAAA;ENoTA;EMtSA;IACE,cAAA;IACA,WAAA;ENwSF;EM1SA;IACE,cAAA;IACA,UAAA;EN4SF;EM9SA;IACE,cAAA;IACA,qBAAA;ENgTF;EMlTA;IACE,cAAA;IACA,UAAA;ENoTF;EMtTA;IACE,cAAA;IACA,UAAA;ENwTF;EM1TA;IACE,cAAA;IACA,qBAAA;EN4TF;EM7RI;IAhDJ,cAAA;IACA,WAAA;ENgVA;EM3RQ;IAhEN,cAAA;IACA,kBAAA;EN8VF;EM/RQ;IAhEN,cAAA;IACA,mBAAA;ENkWF;EMnSQ;IAhEN,cAAA;IACA,UAAA;ENsWF;EMvSQ;IAhEN,cAAA;IACA,mBAAA;EN0WF;EM3SQ;IAhEN,cAAA;IACA,mBAAA;EN8WF;EM/SQ;IAhEN,cAAA;IACA,UAAA;ENkXF;EMnTQ;IAhEN,cAAA;IACA,mBAAA;ENsXF;EMvTQ;IAhEN,cAAA;IACA,mBAAA;EN0XF;EM3TQ;IAhEN,cAAA;IACA,UAAA;EN8XF;EM/TQ;IAhEN,cAAA;IACA,mBAAA;ENkYF;EMnUQ;IAhEN,cAAA;IACA,mBAAA;ENsYF;EMvUQ;IAhEN,cAAA;IACA,WAAA;EN0YF;EMnUU;IAxDV,cAAA;EN8XA;EMtUU;IAxDV,wBAAA;ENiYA;EMzUU;IAxDV,yBAAA;ENoYA;EM5UU;IAxDV,gBAAA;ENuYA;EM/UU;IAxDV,yBAAA;EN0YA;EMlVU;IAxDV,yBAAA;EN6YA;EMrVU;IAxDV,gBAAA;ENgZA;EMxVU;IAxDV,yBAAA;ENmZA;EM3VU;IAxDV,yBAAA;ENsZA;EM9VU;IAxDV,gBAAA;ENyZA;EMjWU;IAxDV,yBAAA;EN4ZA;EMpWU;IAxDV,yBAAA;EN+ZA;EM5VM;;IAEE,gBAAA;EN8VR;EM3VM;;IAEE,gBAAA;EN6VR;EMpWM;;IAEE,sBAAA;ENsWR;EMnWM;;IAEE,sBAAA;ENqWR;EM5WM;;IAEE,qBAAA;EN8WR;EM3WM;;IAEE,qBAAA;EN6WR;EMpXM;;IAEE,mBAAA;ENsXR;EMnXM;;IAEE,mBAAA;ENqXR;EM5XM;;IAEE,qBAAA;EN8XR;EM3XM;;IAEE,qBAAA;EN6XR;EMpYM;;IAEE,mBAAA;ENsYR;EMnYM;;IAEE,mBAAA;ENqYR;AACF;AGhcI;EGUE;IACE,YAAA;ENybN;EMtbI;IApCJ,cAAA;IACA,WAAA;EN6dA;EM/cA;IACE,cAAA;IACA,WAAA;ENidF;EMndA;IACE,cAAA;IACA,UAAA;ENqdF;EMvdA;IACE,cAAA;IACA,qBAAA;ENydF;EM3dA;IACE,cAAA;IACA,UAAA;EN6dF;EM/dA;IACE,cAAA;IACA,UAAA;ENieF;EMneA;IACE,cAAA;IACA,qBAAA;ENqeF;EMtcI;IAhDJ,cAAA;IACA,WAAA;ENyfA;EMpcQ;IAhEN,cAAA;IACA,kBAAA;ENugBF;EMxcQ;IAhEN,cAAA;IACA,mBAAA;EN2gBF;EM5cQ;IAhEN,cAAA;IACA,UAAA;EN+gBF;EMhdQ;IAhEN,cAAA;IACA,mBAAA;ENmhBF;EMpdQ;IAhEN,cAAA;IACA,mBAAA;ENuhBF;EMxdQ;IAhEN,cAAA;IACA,UAAA;EN2hBF;EM5dQ;IAhEN,cAAA;IACA,mBAAA;EN+hBF;EMheQ;IAhEN,cAAA;IACA,mBAAA;ENmiBF;EMpeQ;IAhEN,cAAA;IACA,UAAA;ENuiBF;EMxeQ;IAhEN,cAAA;IACA,mBAAA;EN2iBF;EM5eQ;IAhEN,cAAA;IACA,mBAAA;EN+iBF;EMhfQ;IAhEN,cAAA;IACA,WAAA;ENmjBF;EM5eU;IAxDV,cAAA;ENuiBA;EM/eU;IAxDV,wBAAA;EN0iBA;EMlfU;IAxDV,yBAAA;EN6iBA;EMrfU;IAxDV,gBAAA;ENgjBA;EMxfU;IAxDV,yBAAA;ENmjBA;EM3fU;IAxDV,yBAAA;ENsjBA;EM9fU;IAxDV,gBAAA;ENyjBA;EMjgBU;IAxDV,yBAAA;EN4jBA;EMpgBU;IAxDV,yBAAA;EN+jBA;EMvgBU;IAxDV,gBAAA;ENkkBA;EM1gBU;IAxDV,yBAAA;ENqkBA;EM7gBU;IAxDV,yBAAA;ENwkBA;EMrgBM;;IAEE,gBAAA;ENugBR;EMpgBM;;IAEE,gBAAA;ENsgBR;EM7gBM;;IAEE,sBAAA;EN+gBR;EM5gBM;;IAEE,sBAAA;EN8gBR;EMrhBM;;IAEE,qBAAA;ENuhBR;EMphBM;;IAEE,qBAAA;ENshBR;EM7hBM;;IAEE,mBAAA;EN+hBR;EM5hBM;;IAEE,mBAAA;EN8hBR;EMriBM;;IAEE,qBAAA;ENuiBR;EMpiBM;;IAEE,qBAAA;ENsiBR;EM7iBM;;IAEE,mBAAA;EN+iBR;EM5iBM;;IAEE,mBAAA;EN8iBR;AACF;AGzmBI;EGUE;IACE,YAAA;ENkmBN;EM/lBI;IApCJ,cAAA;IACA,WAAA;ENsoBA;EMxnBA;IACE,cAAA;IACA,WAAA;EN0nBF;EM5nBA;IACE,cAAA;IACA,UAAA;EN8nBF;EMhoBA;IACE,cAAA;IACA,qBAAA;ENkoBF;EMpoBA;IACE,cAAA;IACA,UAAA;ENsoBF;EMxoBA;IACE,cAAA;IACA,UAAA;EN0oBF;EM5oBA;IACE,cAAA;IACA,qBAAA;EN8oBF;EM/mBI;IAhDJ,cAAA;IACA,WAAA;ENkqBA;EM7mBQ;IAhEN,cAAA;IACA,kBAAA;ENgrBF;EMjnBQ;IAhEN,cAAA;IACA,mBAAA;ENorBF;EMrnBQ;IAhEN,cAAA;IACA,UAAA;ENwrBF;EMznBQ;IAhEN,cAAA;IACA,mBAAA;EN4rBF;EM7nBQ;IAhEN,cAAA;IACA,mBAAA;ENgsBF;EMjoBQ;IAhEN,cAAA;IACA,UAAA;ENosBF;EMroBQ;IAhEN,cAAA;IACA,mBAAA;ENwsBF;EMzoBQ;IAhEN,cAAA;IACA,mBAAA;EN4sBF;EM7oBQ;IAhEN,cAAA;IACA,UAAA;ENgtBF;EMjpBQ;IAhEN,cAAA;IACA,mBAAA;ENotBF;EMrpBQ;IAhEN,cAAA;IACA,mBAAA;ENwtBF;EMzpBQ;IAhEN,cAAA;IACA,WAAA;EN4tBF;EMrpBU;IAxDV,cAAA;ENgtBA;EMxpBU;IAxDV,wBAAA;ENmtBA;EM3pBU;IAxDV,yBAAA;ENstBA;EM9pBU;IAxDV,gBAAA;ENytBA;EMjqBU;IAxDV,yBAAA;EN4tBA;EMpqBU;IAxDV,yBAAA;EN+tBA;EMvqBU;IAxDV,gBAAA;ENkuBA;EM1qBU;IAxDV,yBAAA;ENquBA;EM7qBU;IAxDV,yBAAA;ENwuBA;EMhrBU;IAxDV,gBAAA;EN2uBA;EMnrBU;IAxDV,yBAAA;EN8uBA;EMtrBU;IAxDV,yBAAA;ENivBA;EM9qBM;;IAEE,gBAAA;ENgrBR;EM7qBM;;IAEE,gBAAA;EN+qBR;EMtrBM;;IAEE,sBAAA;ENwrBR;EMrrBM;;IAEE,sBAAA;ENurBR;EM9rBM;;IAEE,qBAAA;ENgsBR;EM7rBM;;IAEE,qBAAA;EN+rBR;EMtsBM;;IAEE,mBAAA;ENwsBR;EMrsBM;;IAEE,mBAAA;ENusBR;EM9sBM;;IAEE,qBAAA;ENgtBR;EM7sBM;;IAEE,qBAAA;EN+sBR;EMttBM;;IAEE,mBAAA;ENwtBR;EMrtBM;;IAEE,mBAAA;ENutBR;AACF;AGlxBI;EGUE;IACE,YAAA;EN2wBN;EMxwBI;IApCJ,cAAA;IACA,WAAA;EN+yBA;EMjyBA;IACE,cAAA;IACA,WAAA;ENmyBF;EMryBA;IACE,cAAA;IACA,UAAA;ENuyBF;EMzyBA;IACE,cAAA;IACA,qBAAA;EN2yBF;EM7yBA;IACE,cAAA;IACA,UAAA;EN+yBF;EMjzBA;IACE,cAAA;IACA,UAAA;ENmzBF;EMrzBA;IACE,cAAA;IACA,qBAAA;ENuzBF;EMxxBI;IAhDJ,cAAA;IACA,WAAA;EN20BA;EMtxBQ;IAhEN,cAAA;IACA,kBAAA;ENy1BF;EM1xBQ;IAhEN,cAAA;IACA,mBAAA;EN61BF;EM9xBQ;IAhEN,cAAA;IACA,UAAA;ENi2BF;EMlyBQ;IAhEN,cAAA;IACA,mBAAA;ENq2BF;EMtyBQ;IAhEN,cAAA;IACA,mBAAA;ENy2BF;EM1yBQ;IAhEN,cAAA;IACA,UAAA;EN62BF;EM9yBQ;IAhEN,cAAA;IACA,mBAAA;ENi3BF;EMlzBQ;IAhEN,cAAA;IACA,mBAAA;ENq3BF;EMtzBQ;IAhEN,cAAA;IACA,UAAA;ENy3BF;EM1zBQ;IAhEN,cAAA;IACA,mBAAA;EN63BF;EM9zBQ;IAhEN,cAAA;IACA,mBAAA;ENi4BF;EMl0BQ;IAhEN,cAAA;IACA,WAAA;ENq4BF;EM9zBU;IAxDV,cAAA;ENy3BA;EMj0BU;IAxDV,wBAAA;EN43BA;EMp0BU;IAxDV,yBAAA;EN+3BA;EMv0BU;IAxDV,gBAAA;ENk4BA;EM10BU;IAxDV,yBAAA;ENq4BA;EM70BU;IAxDV,yBAAA;ENw4BA;EMh1BU;IAxDV,gBAAA;EN24BA;EMn1BU;IAxDV,yBAAA;EN84BA;EMt1BU;IAxDV,yBAAA;ENi5BA;EMz1BU;IAxDV,gBAAA;ENo5BA;EM51BU;IAxDV,yBAAA;ENu5BA;EM/1BU;IAxDV,yBAAA;EN05BA;EMv1BM;;IAEE,gBAAA;ENy1BR;EMt1BM;;IAEE,gBAAA;ENw1BR;EM/1BM;;IAEE,sBAAA;ENi2BR;EM91BM;;IAEE,sBAAA;ENg2BR;EMv2BM;;IAEE,qBAAA;ENy2BR;EMt2BM;;IAEE,qBAAA;ENw2BR;EM/2BM;;IAEE,mBAAA;ENi3BR;EM92BM;;IAEE,mBAAA;ENg3BR;EMv3BM;;IAEE,qBAAA;ENy3BR;EMt3BM;;IAEE,qBAAA;ENw3BR;EM/3BM;;IAEE,mBAAA;ENi4BR;EM93BM;;IAEE,mBAAA;ENg4BR;AACF;AG37BI;EGUE;IACE,YAAA;ENo7BN;EMj7BI;IApCJ,cAAA;IACA,WAAA;ENw9BA;EM18BA;IACE,cAAA;IACA,WAAA;EN48BF;EM98BA;IACE,cAAA;IACA,UAAA;ENg9BF;EMl9BA;IACE,cAAA;IACA,qBAAA;ENo9BF;EMt9BA;IACE,cAAA;IACA,UAAA;ENw9BF;EM19BA;IACE,cAAA;IACA,UAAA;EN49BF;EM99BA;IACE,cAAA;IACA,qBAAA;ENg+BF;EMj8BI;IAhDJ,cAAA;IACA,WAAA;ENo/BA;EM/7BQ;IAhEN,cAAA;IACA,kBAAA;ENkgCF;EMn8BQ;IAhEN,cAAA;IACA,mBAAA;ENsgCF;EMv8BQ;IAhEN,cAAA;IACA,UAAA;EN0gCF;EM38BQ;IAhEN,cAAA;IACA,mBAAA;EN8gCF;EM/8BQ;IAhEN,cAAA;IACA,mBAAA;ENkhCF;EMn9BQ;IAhEN,cAAA;IACA,UAAA;ENshCF;EMv9BQ;IAhEN,cAAA;IACA,mBAAA;EN0hCF;EM39BQ;IAhEN,cAAA;IACA,mBAAA;EN8hCF;EM/9BQ;IAhEN,cAAA;IACA,UAAA;ENkiCF;EMn+BQ;IAhEN,cAAA;IACA,mBAAA;ENsiCF;EMv+BQ;IAhEN,cAAA;IACA,mBAAA;EN0iCF;EM3+BQ;IAhEN,cAAA;IACA,WAAA;EN8iCF;EMv+BU;IAxDV,cAAA;ENkiCA;EM1+BU;IAxDV,wBAAA;ENqiCA;EM7+BU;IAxDV,yBAAA;ENwiCA;EMh/BU;IAxDV,gBAAA;EN2iCA;EMn/BU;IAxDV,yBAAA;EN8iCA;EMt/BU;IAxDV,yBAAA;ENijCA;EMz/BU;IAxDV,gBAAA;ENojCA;EM5/BU;IAxDV,yBAAA;ENujCA;EM//BU;IAxDV,yBAAA;EN0jCA;EMlgCU;IAxDV,gBAAA;EN6jCA;EMrgCU;IAxDV,yBAAA;ENgkCA;EMxgCU;IAxDV,yBAAA;ENmkCA;EMhgCM;;IAEE,gBAAA;ENkgCR;EM//BM;;IAEE,gBAAA;ENigCR;EMxgCM;;IAEE,sBAAA;EN0gCR;EMvgCM;;IAEE,sBAAA;ENygCR;EMhhCM;;IAEE,qBAAA;ENkhCR;EM/gCM;;IAEE,qBAAA;ENihCR;EMxhCM;;IAEE,mBAAA;EN0hCR;EMvhCM;;IAEE,mBAAA;ENyhCR;EMhiCM;;IAEE,qBAAA;ENkiCR;EM/hCM;;IAEE,qBAAA;ENiiCR;EMxiCM;;IAEE,mBAAA;EN0iCR;EMviCM;;IAEE,mBAAA;ENyiCR;AACF;AOjmCQ;EAOI,0BAAA;AP6lCZ;;AOpmCQ;EAOI,gCAAA;APimCZ;;AOxmCQ;EAOI,yBAAA;APqmCZ;;AO5mCQ;EAOI,wBAAA;APymCZ;;AOhnCQ;EAOI,yBAAA;AP6mCZ;;AOpnCQ;EAOI,6BAAA;APinCZ;;AOxnCQ;EAOI,8BAAA;APqnCZ;;AO5nCQ;EAOI,wBAAA;APynCZ;;AOhoCQ;EAOI,+BAAA;AP6nCZ;;AOpoCQ;EAOI,wBAAA;APioCZ;;AOxoCQ;EAOI,yBAAA;APqoCZ;;AO5oCQ;EAOI,8BAAA;APyoCZ;;AOhpCQ;EAOI,iCAAA;AP6oCZ;;AOppCQ;EAOI,sCAAA;APipCZ;;AOxpCQ;EAOI,yCAAA;APqpCZ;;AO5pCQ;EAOI,uBAAA;APypCZ;;AOhqCQ;EAOI,uBAAA;AP6pCZ;;AOpqCQ;EAOI,yBAAA;APiqCZ;;AOxqCQ;EAOI,yBAAA;APqqCZ;;AO5qCQ;EAOI,0BAAA;APyqCZ;;AOhrCQ;EAOI,4BAAA;AP6qCZ;;AOprCQ;EAOI,kCAAA;APirCZ;;AOxrCQ;EAOI,sCAAA;APqrCZ;;AO5rCQ;EAOI,oCAAA;APyrCZ;;AOhsCQ;EAOI,kCAAA;AP6rCZ;;AOpsCQ;EAOI,yCAAA;APisCZ;;AOxsCQ;EAOI,wCAAA;APqsCZ;;AO5sCQ;EAOI,wCAAA;APysCZ;;AOhtCQ;EAOI,kCAAA;AP6sCZ;;AOptCQ;EAOI,gCAAA;APitCZ;;AOxtCQ;EAOI,8BAAA;APqtCZ;;AO5tCQ;EAOI,gCAAA;APytCZ;;AOhuCQ;EAOI,+BAAA;AP6tCZ;;AOpuCQ;EAOI,oCAAA;APiuCZ;;AOxuCQ;EAOI,kCAAA;APquCZ;;AO5uCQ;EAOI,gCAAA;APyuCZ;;AOhvCQ;EAOI,uCAAA;AP6uCZ;;AOpvCQ;EAOI,sCAAA;APivCZ;;AOxvCQ;EAOI,iCAAA;APqvCZ;;AO5vCQ;EAOI,2BAAA;APyvCZ;;AOhwCQ;EAOI,iCAAA;AP6vCZ;;AOpwCQ;EAOI,+BAAA;APiwCZ;;AOxwCQ;EAOI,6BAAA;APqwCZ;;AO5wCQ;EAOI,+BAAA;APywCZ;;AOhxCQ;EAOI,8BAAA;AP6wCZ;;AOpxCQ;EAOI,oBAAA;APixCZ;;AOxxCQ;EAOI,mBAAA;APqxCZ;;AO5xCQ;EAOI,mBAAA;APyxCZ;;AOhyCQ;EAOI,mBAAA;AP6xCZ;;AOpyCQ;EAOI,mBAAA;APiyCZ;;AOxyCQ;EAOI,mBAAA;APqyCZ;;AO5yCQ;EAOI,mBAAA;APyyCZ;;AOhzCQ;EAOI,mBAAA;AP6yCZ;;AOpzCQ;EAOI,oBAAA;APizCZ;;AOxzCQ;EAOI,0BAAA;APqzCZ;;AO5zCQ;EAOI,yBAAA;APyzCZ;;AOh0CQ;EAOI,uBAAA;AP6zCZ;;AOp0CQ;EAOI,yBAAA;APi0CZ;;AOx0CQ;EAOI,uBAAA;APq0CZ;;AO50CQ;EAOI,uBAAA;APy0CZ;;AOh1CQ;EAOI,0BAAA;EAAA,yBAAA;AP80CZ;;AOr1CQ;EAOI,gCAAA;EAAA,+BAAA;APm1CZ;;AO11CQ;EAOI,+BAAA;EAAA,8BAAA;APw1CZ;;AO/1CQ;EAOI,6BAAA;EAAA,4BAAA;AP61CZ;;AOp2CQ;EAOI,+BAAA;EAAA,8BAAA;APk2CZ;;AOz2CQ;EAOI,6BAAA;EAAA,4BAAA;APu2CZ;;AO92CQ;EAOI,6BAAA;EAAA,4BAAA;AP42CZ;;AOn3CQ;EAOI,wBAAA;EAAA,2BAAA;APi3CZ;;AOx3CQ;EAOI,8BAAA;EAAA,iCAAA;APs3CZ;;AO73CQ;EAOI,6BAAA;EAAA,gCAAA;AP23CZ;;AOl4CQ;EAOI,2BAAA;EAAA,8BAAA;APg4CZ;;AOv4CQ;EAOI,6BAAA;EAAA,gCAAA;APq4CZ;;AO54CQ;EAOI,2BAAA;EAAA,8BAAA;AP04CZ;;AOj5CQ;EAOI,2BAAA;EAAA,8BAAA;AP+4CZ;;AOt5CQ;EAOI,wBAAA;APm5CZ;;AO15CQ;EAOI,8BAAA;APu5CZ;;AO95CQ;EAOI,6BAAA;AP25CZ;;AOl6CQ;EAOI,2BAAA;AP+5CZ;;AOt6CQ;EAOI,6BAAA;APm6CZ;;AO16CQ;EAOI,2BAAA;APu6CZ;;AO96CQ;EAOI,2BAAA;AP26CZ;;AOl7CQ;EAOI,0BAAA;AP+6CZ;;AOt7CQ;EAOI,gCAAA;APm7CZ;;AO17CQ;EAOI,+BAAA;APu7CZ;;AO97CQ;EAOI,6BAAA;AP27CZ;;AOl8CQ;EAOI,+BAAA;AP+7CZ;;AOt8CQ;EAOI,6BAAA;APm8CZ;;AO18CQ;EAOI,6BAAA;APu8CZ;;AO98CQ;EAOI,2BAAA;AP28CZ;;AOl9CQ;EAOI,iCAAA;AP+8CZ;;AOt9CQ;EAOI,gCAAA;APm9CZ;;AO19CQ;EAOI,8BAAA;APu9CZ;;AO99CQ;EAOI,gCAAA;AP29CZ;;AOl+CQ;EAOI,8BAAA;AP+9CZ;;AOt+CQ;EAOI,8BAAA;APm+CZ;;AO1+CQ;EAOI,yBAAA;APu+CZ;;AO9+CQ;EAOI,+BAAA;AP2+CZ;;AOl/CQ;EAOI,8BAAA;AP++CZ;;AOt/CQ;EAOI,4BAAA;APm/CZ;;AO1/CQ;EAOI,8BAAA;APu/CZ;;AO9/CQ;EAOI,4BAAA;AP2/CZ;;AOlgDQ;EAOI,4BAAA;AP+/CZ;;AOtgDQ;EAOI,qBAAA;APmgDZ;;AO1gDQ;EAOI,2BAAA;APugDZ;;AO9gDQ;EAOI,0BAAA;AP2gDZ;;AOlhDQ;EAOI,wBAAA;AP+gDZ;;AOthDQ;EAOI,0BAAA;APmhDZ;;AO1hDQ;EAOI,wBAAA;APuhDZ;;AO9hDQ;EAOI,2BAAA;EAAA,0BAAA;AP4hDZ;;AOniDQ;EAOI,iCAAA;EAAA,gCAAA;APiiDZ;;AOxiDQ;EAOI,gCAAA;EAAA,+BAAA;APsiDZ;;AO7iDQ;EAOI,8BAAA;EAAA,6BAAA;AP2iDZ;;AOljDQ;EAOI,gCAAA;EAAA,+BAAA;APgjDZ;;AOvjDQ;EAOI,8BAAA;EAAA,6BAAA;APqjDZ;;AO5jDQ;EAOI,yBAAA;EAAA,4BAAA;AP0jDZ;;AOjkDQ;EAOI,+BAAA;EAAA,kCAAA;AP+jDZ;;AOtkDQ;EAOI,8BAAA;EAAA,iCAAA;APokDZ;;AO3kDQ;EAOI,4BAAA;EAAA,+BAAA;APykDZ;;AOhlDQ;EAOI,8BAAA;EAAA,iCAAA;AP8kDZ;;AOrlDQ;EAOI,4BAAA;EAAA,+BAAA;APmlDZ;;AO1lDQ;EAOI,yBAAA;APulDZ;;AO9lDQ;EAOI,+BAAA;AP2lDZ;;AOlmDQ;EAOI,8BAAA;AP+lDZ;;AOtmDQ;EAOI,4BAAA;APmmDZ;;AO1mDQ;EAOI,8BAAA;APumDZ;;AO9mDQ;EAOI,4BAAA;AP2mDZ;;AOlnDQ;EAOI,2BAAA;AP+mDZ;;AOtnDQ;EAOI,iCAAA;APmnDZ;;AO1nDQ;EAOI,gCAAA;APunDZ;;AO9nDQ;EAOI,8BAAA;AP2nDZ;;AOloDQ;EAOI,gCAAA;AP+nDZ;;AOtoDQ;EAOI,8BAAA;APmoDZ;;AO1oDQ;EAOI,4BAAA;APuoDZ;;AO9oDQ;EAOI,kCAAA;AP2oDZ;;AOlpDQ;EAOI,iCAAA;AP+oDZ;;AOtpDQ;EAOI,+BAAA;APmpDZ;;AO1pDQ;EAOI,iCAAA;APupDZ;;AO9pDQ;EAOI,+BAAA;AP2pDZ;;AOlqDQ;EAOI,0BAAA;AP+pDZ;;AOtqDQ;EAOI,gCAAA;APmqDZ;;AO1qDQ;EAOI,+BAAA;APuqDZ;;AO9qDQ;EAOI,6BAAA;AP2qDZ;;AOlrDQ;EAOI,+BAAA;AP+qDZ;;AOtrDQ;EAOI,6BAAA;APmrDZ;;AG7rDI;EIGI;IAOI,0BAAA;EPwrDV;EO/rDM;IAOI,gCAAA;EP2rDV;EOlsDM;IAOI,yBAAA;EP8rDV;EOrsDM;IAOI,wBAAA;EPisDV;EOxsDM;IAOI,yBAAA;EPosDV;EO3sDM;IAOI,6BAAA;EPusDV;EO9sDM;IAOI,8BAAA;EP0sDV;EOjtDM;IAOI,wBAAA;EP6sDV;EOptDM;IAOI,+BAAA;EPgtDV;EOvtDM;IAOI,wBAAA;EPmtDV;EO1tDM;IAOI,yBAAA;EPstDV;EO7tDM;IAOI,8BAAA;EPytDV;EOhuDM;IAOI,iCAAA;EP4tDV;EOnuDM;IAOI,sCAAA;EP+tDV;EOtuDM;IAOI,yCAAA;EPkuDV;EOzuDM;IAOI,uBAAA;EPquDV;EO5uDM;IAOI,uBAAA;EPwuDV;EO/uDM;IAOI,yBAAA;EP2uDV;EOlvDM;IAOI,yBAAA;EP8uDV;EOrvDM;IAOI,0BAAA;EPivDV;EOxvDM;IAOI,4BAAA;EPovDV;EO3vDM;IAOI,kCAAA;EPuvDV;EO9vDM;IAOI,sCAAA;EP0vDV;EOjwDM;IAOI,oCAAA;EP6vDV;EOpwDM;IAOI,kCAAA;EPgwDV;EOvwDM;IAOI,yCAAA;EPmwDV;EO1wDM;IAOI,wCAAA;EPswDV;EO7wDM;IAOI,wCAAA;EPywDV;EOhxDM;IAOI,kCAAA;EP4wDV;EOnxDM;IAOI,gCAAA;EP+wDV;EOtxDM;IAOI,8BAAA;EPkxDV;EOzxDM;IAOI,gCAAA;EPqxDV;EO5xDM;IAOI,+BAAA;EPwxDV;EO/xDM;IAOI,oCAAA;EP2xDV;EOlyDM;IAOI,kCAAA;EP8xDV;EOryDM;IAOI,gCAAA;EPiyDV;EOxyDM;IAOI,uCAAA;EPoyDV;EO3yDM;IAOI,sCAAA;EPuyDV;EO9yDM;IAOI,iCAAA;EP0yDV;EOjzDM;IAOI,2BAAA;EP6yDV;EOpzDM;IAOI,iCAAA;EPgzDV;EOvzDM;IAOI,+BAAA;EPmzDV;EO1zDM;IAOI,6BAAA;EPszDV;EO7zDM;IAOI,+BAAA;EPyzDV;EOh0DM;IAOI,8BAAA;EP4zDV;EOn0DM;IAOI,oBAAA;EP+zDV;EOt0DM;IAOI,mBAAA;EPk0DV;EOz0DM;IAOI,mBAAA;EPq0DV;EO5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;EP8lEV;EOrmEM;IAOI,kCAAA;EPimEV;EOxmEM;IAOI,iCAAA;EPomEV;EO3mEM;IAOI,+BAAA;EPumEV;EO9mEM;IAOI,iCAAA;EP0mEV;EOjnEM;IAOI,+BAAA;EP6mEV;EOpnEM;IAOI,0BAAA;EPgnEV;EOvnEM;IAOI,gCAAA;EPmnEV;EO1nEM;IAOI,+BAAA;EPsnEV;EO7nEM;IAOI,6BAAA;EPynEV;EOhoEM;IAOI,+BAAA;EP4nEV;EOnoEM;IAOI,6BAAA;EP+nEV;AACF;AG1oEI;EIGI;IAOI,0BAAA;EPooEV;EO3oEM;IAOI,gCAAA;EPuoEV;EO9oEM;IAOI,yBAAA;EP0oEV;EOjpEM;IAOI,wBAAA;EP6oEV;EOppEM;IAOI,yBAAA;EPgpEV;EOvpEM;IAOI,6BAAA;EPmpEV;EO1pEM;IAOI,8BAAA;EPspEV;EO7pEM;IAOI,wBAAA;EPypEV;EOhqEM;IAOI,+BAAA;EP4pEV;EOnqEM;IAOI,wBAAA;EP+pEV;EOtqEM;IAOI,yBAAA;EPkqEV;EOzqEM;IAOI,8BAAA;EPqqEV;EO5qEM;IAOI,iCAAA;EPwqEV;EO/qEM;IAOI,sCAAA;EP2qEV;EOlrEM;IAOI,yCAAA;EP8qEV;EOrrEM;IAOI,uBAAA;EPirEV;EOxrEM;IAOI,uBAAA;EPorEV;EO3rEM;IAOI,yBAAA;EPurEV;EO9rEM;IAOI,yBAAA;EP0rEV;EOjsEM;IAOI,0BAAA;EP6rEV;EOpsEM;IAOI,4BAAA;EPgsEV;EOvsEM;IAOI,kCAAA;EPmsEV;EO1sEM;IAOI,sCAAA;EPssEV;EO7sEM;IAOI,oCAAA;EPysEV;EOhtEM;IAOI,kCAAA;EP4sEV;EOntEM;IAOI,yCAAA;EP+sEV;EOttEM;IAOI,wCAAA;EPktEV;EOztEM;IAOI,wCAAA;EPqtEV;EO5tEM;IAOI,kCAAA;EPwtEV;EO/tEM;IAOI,gCAAA;EP2tEV;EOluEM;IAOI,8BAAA;EP8tEV;EOruEM;IAOI,gCAAA;EPiuEV;EOxuEM;IAOI,+BAAA;EPouEV;EO3uEM;IAOI,oCAAA;EPuuEV;EO9uEM;IAOI,kCAAA;EP0uEV;EOjvEM;IAOI,gCAAA;EP6uEV;EOpvEM;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gFV;EO7gFM;IAOI,+BAAA;EPygFV;EOhhFM;IAOI,8BAAA;EP4gFV;EOnhFM;IAOI,4BAAA;EP+gFV;EOthFM;IAOI,8BAAA;EPkhFV;EOzhFM;IAOI,4BAAA;EPqhFV;EO5hFM;IAOI,2BAAA;EPwhFV;EO/hFM;IAOI,iCAAA;EP2hFV;EOliFM;IAOI,gCAAA;EP8hFV;EOriFM;IAOI,8BAAA;EPiiFV;EOxiFM;IAOI,gCAAA;EPoiFV;EO3iFM;IAOI,8BAAA;EPuiFV;EO9iFM;IAOI,4BAAA;EP0iFV;EOjjFM;IAOI,kCAAA;EP6iFV;EOpjFM;IAOI,iCAAA;EPgjFV;EOvjFM;IAOI,+BAAA;EPmjFV;EO1jFM;IAOI,iCAAA;EPsjFV;EO7jFM;IAOI,+BAAA;EPyjFV;EOhkFM;IAOI,0BAAA;EP4jFV;EOnkFM;IAOI,gCAAA;EP+jFV;EOtkFM;IAOI,+BAAA;EPkkFV;EOzkFM;IAOI,6BAAA;EPqkFV;EO5kFM;IAOI,+BAAA;EPwkFV;EO/kFM;IAOI,6BAAA;EP2kFV;AACF;AGtlFI;EIGI;IAOI,0BAAA;EPglFV;EOvlFM;IAOI,gCAAA;EPmlFV;EO1lFM;IAOI,yBAAA;EPslFV;EO7lFM;IAOI,wBAAA;EPylFV;EOhmFM;IAOI,yBAAA;EP4lFV;EOnmFM;IAOI,6BAAA;EP+lFV;EOtmFM;IAOI,8BAAA;EPkmFV;EOzmFM;IAOI,wBAAA;EPqmFV;EO5mFM;IAOI,+BAAA;EPwmFV;EO/mFM;IAOI,wBAAA;EP2mFV;EOlnFM;IAOI,yBAAA;EP8mFV;EOrnFM;IAOI,8BAAA;EPinFV;EOxnFM;IAOI,iCAAA;EPonFV;EO3nFM;IAOI,sCAAA;EPunFV;EO9nFM;IAOI,yCAAA;EP0nFV;EOjoFM;IAOI,uBAAA;EP6nFV;EOpoFM;IAOI,uBAAA;EPgoFV;EOvoFM;IAOI,yBAAA;EPmoFV;EO1oFM;IAOI,yBAAA;EPsoFV;EO7oFM;IAOI,0BAAA;EPyoFV;EOhpFM;IAOI,4BAAA;EP4oFV;EOnpFM;IAOI,kCAAA;EP+oFV;EOtpFM;IAOI,sCAAA;EPkpFV;EOzpFM;IAOI,oCAAA;EPqpFV;EO5pFM;IAOI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AA;EPgkGV;EOvkGM;IAOI,sCAAA;EPmkGV;EO1kGM;IAOI,yCAAA;EPskGV;EO7kGM;IAOI,uBAAA;EPykGV;EOhlGM;IAOI,uBAAA;EP4kGV;EOnlGM;IAOI,yBAAA;EP+kGV;EOtlGM;IAOI,yBAAA;EPklGV;EOzlGM;IAOI,0BAAA;EPqlGV;EO5lGM;IAOI,4BAAA;EPwlGV;EO/lGM;IAOI,kCAAA;EP2lGV;EOlmGM;IAOI,sCAAA;EP8lGV;EOrmGM;IAOI,oCAAA;EPimGV;EOxmGM;IAOI,kCAAA;EPomGV;EO3mGM;IAOI,yCAAA;EPumGV;EO9mGM;IAOI,wCAAA;EP0mGV;EOjnGM;IAOI,wCAAA;EP6mGV;EOpnGM;IAOI,kCAAA;EPgnGV;EOvnGM;IAOI,gCAAA;EPmnGV;EO1nGM;IAOI,8BAAA;EPsnGV;EO7nGM;IAOI,gCAAA;EPynGV;EOhoGM;IAOI,+BAAA;EP4nGV;EOnoGM;IAOI,oCAAA;EP+nGV;EOtoGM;IAOI,kCAAA;EPkoGV;EOzoGM;IAOI,gCAAA;EPqoGV;EO5oGM;IAOI,uCAAA;EPwoGV;EO/oGM;IAOI,sCAAA;EP2oGV;EOlpGM;IAOI,iCAAA;EP8oGV;EOrpGM;IAOI,2BAAA;EPipGV;EOxpGM;IAOI,iCAAA;EPopGV;EO3pGM;IAOI,+BAAA;EPupGV;EO9pGM;IAOI,6BAAA;EP0pGV;EOjqGM;IAOI,+BAAA;EP6pGV;EOpqGM;IAOI,8BAAA;EPgqGV;EOvqGM;IAOI,oBAAA;EPmqGV;EO1qGM;IAOI,mBAAA;EPsqGV;EO7qGM;IAOI,mBAAA;EPyqGV;EOhrGM;IAOI,mBAAA;EP4qGV;EOnrGM;IAOI,mBAAA;EP+qGV;EOtrGM;IAOI,mBAAA;EPkrGV;EOzrGM;IAOI,mBAAA;EPqrGV;EO5rGM;IAOI,mBAAA;EPwrGV;EO/rGM;IAOI,oBAAA;EP2rGV;EOlsGM;IAOI,0BAAA;EP8rGV;EOrsGM;IAOI,yBAAA;EPisGV;EOxsGM;IAOI,uBAAA;EPosGV;EO3sGM;IAOI,yBAAA;EPusGV;EO9sGM;IAOI,uBAAA;EP0sGV;EOjtGM;IAOI,uBAAA;EP6sGV;EOptGM;IAOI,0BA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Pw+GV;EO/+GM;IAOI,gCAAA;EP2+GV;EOl/GM;IAOI,yBAAA;EP8+GV;EOr/GM;IAOI,wBAAA;EPi/GV;EOx/GM;IAOI,yBAAA;EPo/GV;EO3/GM;IAOI,6BAAA;EPu/GV;EO9/GM;IAOI,8BAAA;EP0/GV;EOjgHM;IAOI,wBAAA;EP6/GV;EOpgHM;IAOI,+BAAA;EPggHV;EOvgHM;IAOI,wBAAA;EPmgHV;EO1gHM;IAOI,yBAAA;EPsgHV;EO7gHM;IAOI,8BAAA;EPygHV;EOhhHM;IAOI,iCAAA;EP4gHV;EOnhHM;IAOI,sCAAA;EP+gHV;EOthHM;IAOI,yCAAA;EPkhHV;EOzhHM;IAOI,uBAAA;EPqhHV;EO5hHM;IAOI,uBAAA;EPwhHV;EO/hHM;IAOI,yBAAA;EP2hHV;EOliHM;IAOI,yBAAA;EP8hHV;EOriHM;IAOI,0BAAA;EPiiHV;EOxiHM;IAOI,4BAAA;EPoiHV;EO3iHM;IAOI,kCAAA;EPuiHV;EO9iHM;IAOI,sCAAA;EP0iHV;EOjjHM;IAOI,oCAAA;EP6iHV;EOpjHM;IAOI,kCAAA;EPgjHV;EOvjHM;IAOI,yCAAA;EPmjHV;EO1jHM;IAOI,wCAAA;EPsjHV;EO7jHM;IAOI,wCAAA;EPyjHV;EOhkHM;IAOI,kCAAA;EP4jHV;EOnkHM;IAOI,gCAAA;EP+jHV;EOtkHM;IAOI,8BAAA;EPkkHV;EOzkHM;IAOI,gCAAA;EPqkHV;EO5kHM;IAOI,+BAAA;EPwkHV;EO/kHM;IAOI,oCAAA;EP2kHV;EOllHM;IAOI,kCAAA;EP8kHV;EOrlHM;IAOI,gCAAA;EPilHV;EOxlHM;IAOI,uCAAA;EPolHV;EO3lHM;IAOI,sCAAA;EPulHV;EO9lHM;IAOI,iCAAA;EP0lHV;EOjmHM;IAOI,2BAAA;EP6lHV;EOpmHM;IAOI,iCAAA;EPgmHV;EOvmHM;IAOI,+BAAA;EPmmHV;EO1mHM;IAOI,6BAAA;EPsmHV;EO7mHM;IAOI,+BAAA;EPymHV;EOhnHM;IAOI,8BAAA;EP4mHV;EOnnHM;IAOI,oBAAA;EP+mHV;EOtnHM;IAOI,mBAAA;EPknHV;EOznHM;IAOI,mBAAA;EPqnHV;EO5nHM;IAOI,mBAAA;E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","file":"bootstrap-grid.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css b/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css new file mode 100644 index 0000000..5a0a77e --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-right:0!important;margin-left:0!important}.mx-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-3{margin-right:1rem!important;margin-left:1rem!important}.mx-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-5{margin-right:3rem!important;margin-left:3rem!important}.mx-auto{margin-right:auto!important;margin-left:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-right:0!important}.me-1{margin-right:.25rem!important}.me-2{margin-right:.5rem!important}.me-3{margin-right:1rem!important}.me-4{margin-right:1.5rem!important}.me-5{margin-right:3rem!important}.me-auto{margin-right:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-left:0!important}.ms-1{margin-left:.25rem!important}.ms-2{margin-left:.5rem!important}.ms-3{margin-left:1rem!important}.ms-4{margin-left:1.5rem!important}.ms-5{margin-left:3rem!important}.ms-auto{margin-left:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-right:0!important;padding-left:0!important}.px-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-3{padding-right:1rem!important;padding-left:1rem!important}.px-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-5{padding-right:3rem!important;padding-left:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-right:0!important}.pe-1{padding-right:.25rem!important}.pe-2{padding-right:.5rem!important}.pe-3{padding-right:1rem!important}.pe-4{padding-right:1.5rem!important}.pe-5{padding-right:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-left:0!important}.ps-1{padding-left:.25rem!important}.ps-2{padding-left:.5rem!important}.ps-3{padding-left:1rem!important}.ps-4{padding-left:1.5rem!important}.ps-5{padding-left:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-right:0!important;margin-left:0!important}.mx-sm-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-sm-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-sm-3{margin-right:1rem!important;margin-left:1rem!important}.mx-sm-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-sm-5{margin-right:3rem!important;margin-left:3rem!important}.mx-sm-auto{margin-right:auto!important;margin-left:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-right:0!important}.me-sm-1{margin-right:.25rem!important}.me-sm-2{margin-right:.5rem!important}.me-sm-3{margin-right:1rem!important}.me-sm-4{margin-right:1.5rem!important}.me-sm-5{margin-right:3rem!important}.me-sm-auto{margin-right:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-left:0!important}.ms-sm-1{margin-left:.25rem!important}.ms-sm-2{margin-left:.5rem!important}.ms-sm-3{margin-left:1rem!important}.ms-sm-4{margin-left:1.5rem!important}.ms-sm-5{margin-left:3rem!important}.ms-sm-auto{margin-left:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-right:0!important;padding-left:0!important}.px-sm-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-sm-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-sm-3{padding-right:1rem!important;padding-left:1rem!important}.px-sm-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-sm-5{padding-right:3rem!important;padding-left:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-right:0!important}.pe-sm-1{padding-right:.25rem!important}.pe-sm-2{padding-right:.5rem!important}.pe-sm-3{padding-right:1rem!important}.pe-sm-4{padding-right:1.5rem!important}.pe-sm-5{padding-right:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-left:0!important}.ps-sm-1{padding-left:.25rem!important}.ps-sm-2{padding-left:.5rem!important}.ps-sm-3{padding-left:1rem!important}.ps-sm-4{padding-left:1.5rem!important}.ps-sm-5{padding-left:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-right:0!important;margin-left:0!important}.mx-md-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-md-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-md-3{margin-right:1rem!important;margin-left:1rem!important}.mx-md-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-md-5{margin-right:3rem!important;margin-left:3rem!important}.mx-md-auto{margin-right:auto!important;margin-left:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-right:0!important}.me-md-1{margin-right:.25rem!important}.me-md-2{margin-right:.5rem!important}.me-md-3{margin-right:1rem!important}.me-md-4{margin-right:1.5rem!important}.me-md-5{margin-right:3rem!important}.me-md-auto{margin-right:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-left:0!important}.ms-md-1{margin-left:.25rem!important}.ms-md-2{margin-left:.5rem!important}.ms-md-3{margin-left:1rem!important}.ms-md-4{margin-left:1.5rem!important}.ms-md-5{margin-left:3rem!important}.ms-md-auto{margin-left:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-right:0!important;padding-left:0!important}.px-md-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-md-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-md-3{padding-right:1rem!important;padding-left:1rem!important}.px-md-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-md-5{padding-right:3rem!important;padding-left:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-right:0!important}.pe-md-1{padding-right:.25rem!important}.pe-md-2{padding-right:.5rem!important}.pe-md-3{padding-right:1rem!important}.pe-md-4{padding-right:1.5rem!important}.pe-md-5{padding-right:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-left:0!important}.ps-md-1{padding-left:.25rem!important}.ps-md-2{padding-left:.5rem!important}.ps-md-3{padding-left:1rem!important}.ps-md-4{padding-left:1.5rem!important}.ps-md-5{padding-left:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-right:0!important;margin-left:0!important}.mx-lg-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-lg-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-lg-3{margin-right:1rem!important;margin-left:1rem!important}.mx-lg-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-lg-5{margin-right:3rem!important;margin-left:3rem!important}.mx-lg-auto{margin-right:auto!important;margin-left:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-right:0!important}.me-lg-1{margin-right:.25rem!important}.me-lg-2{margin-right:.5rem!important}.me-lg-3{margin-right:1rem!important}.me-lg-4{margin-right:1.5rem!important}.me-lg-5{margin-right:3rem!important}.me-lg-auto{margin-right:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-left:0!important}.ms-lg-1{margin-left:.25rem!important}.ms-lg-2{margin-left:.5rem!important}.ms-lg-3{margin-left:1rem!important}.ms-lg-4{margin-left:1.5rem!important}.ms-lg-5{margin-left:3rem!important}.ms-lg-auto{margin-left:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-right:0!important;padding-left:0!important}.px-lg-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-lg-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-lg-3{padding-right:1rem!important;padding-left:1rem!important}.px-lg-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-lg-5{padding-right:3rem!important;padding-left:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-right:0!important}.pe-lg-1{padding-right:.25rem!important}.pe-lg-2{padding-right:.5rem!important}.pe-lg-3{padding-right:1rem!important}.pe-lg-4{padding-right:1.5rem!important}.pe-lg-5{padding-right:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-left:0!important}.ps-lg-1{padding-left:.25rem!important}.ps-lg-2{padding-left:.5rem!important}.ps-lg-3{padding-left:1rem!important}.ps-lg-4{padding-left:1.5rem!important}.ps-lg-5{padding-left:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-right:0!important;margin-left:0!important}.mx-xl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xl-auto{margin-right:auto!important;margin-left:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-right:0!important}.me-xl-1{margin-right:.25rem!important}.me-xl-2{margin-right:.5rem!important}.me-xl-3{margin-right:1rem!important}.me-xl-4{margin-right:1.5rem!important}.me-xl-5{margin-right:3rem!important}.me-xl-auto{margin-right:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-left:0!important}.ms-xl-1{margin-left:.25rem!important}.ms-xl-2{margin-left:.5rem!important}.ms-xl-3{margin-left:1rem!important}.ms-xl-4{margin-left:1.5rem!important}.ms-xl-5{margin-left:3rem!important}.ms-xl-auto{margin-left:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-right:0!important;padding-left:0!important}.px-xl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-right:0!important}.pe-xl-1{padding-right:.25rem!important}.pe-xl-2{padding-right:.5rem!important}.pe-xl-3{padding-right:1rem!important}.pe-xl-4{padding-right:1.5rem!important}.pe-xl-5{padding-right:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-left:0!important}.ps-xl-1{padding-left:.25rem!important}.ps-xl-2{padding-left:.5rem!important}.ps-xl-3{padding-left:1rem!important}.ps-xl-4{padding-left:1.5rem!important}.ps-xl-5{padding-left:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-right:0!important;margin-left:0!important}.mx-xxl-1{margin-right:.25rem!important;margin-left:.25rem!important}.mx-xxl-2{margin-right:.5rem!important;margin-left:.5rem!important}.mx-xxl-3{margin-right:1rem!important;margin-left:1rem!important}.mx-xxl-4{margin-right:1.5rem!important;margin-left:1.5rem!important}.mx-xxl-5{margin-right:3rem!important;margin-left:3rem!important}.mx-xxl-auto{margin-right:auto!important;margin-left:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-right:0!important}.me-xxl-1{margin-right:.25rem!important}.me-xxl-2{margin-right:.5rem!important}.me-xxl-3{margin-right:1rem!important}.me-xxl-4{margin-right:1.5rem!important}.me-xxl-5{margin-right:3rem!important}.me-xxl-auto{margin-right:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-left:0!important}.ms-xxl-1{margin-left:.25rem!important}.ms-xxl-2{margin-left:.5rem!important}.ms-xxl-3{margin-left:1rem!important}.ms-xxl-4{margin-left:1.5rem!important}.ms-xxl-5{margin-left:3rem!important}.ms-xxl-auto{margin-left:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-right:0!important;padding-left:0!important}.px-xxl-1{padding-right:.25rem!important;padding-left:.25rem!important}.px-xxl-2{padding-right:.5rem!important;padding-left:.5rem!important}.px-xxl-3{padding-right:1rem!important;padding-left:1rem!important}.px-xxl-4{padding-right:1.5rem!important;padding-left:1.5rem!important}.px-xxl-5{padding-right:3rem!important;padding-left:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-right:0!important}.pe-xxl-1{padding-right:.25rem!important}.pe-xxl-2{padding-right:.5rem!important}.pe-xxl-3{padding-right:1rem!important}.pe-xxl-4{padding-right:1.5rem!important}.pe-xxl-5{padding-right:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-left:0!important}.ps-xxl-1{padding-left:.25rem!important}.ps-xxl-2{padding-left:.5rem!important}.ps-xxl-3{padding-left:1rem!important}.ps-xxl-4{padding-left:1.5rem!important}.ps-xxl-5{padding-left:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.min.css.map */ \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css.map b/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css.map new file mode 100644 index 0000000..63cfa34 --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css new file mode 100644 index 0000000..d8613e8 --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css @@ -0,0 +1,4123 @@ +/*! + * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +.container, +.container-fluid, +.container-xxl, +.container-xl, +.container-lg, +.container-md, +.container-sm { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + width: 100%; + padding-left: calc(var(--bs-gutter-x) * 0.5); + padding-right: calc(var(--bs-gutter-x) * 0.5); + margin-left: auto; + margin-right: auto; +} + +@media (min-width: 576px) { + .container-sm, .container { + max-width: 540px; + } +} +@media (min-width: 768px) { + .container-md, .container-sm, .container { + max-width: 720px; + } +} +@media (min-width: 992px) { + .container-lg, .container-md, .container-sm, .container { + max-width: 960px; + } +} +@media (min-width: 1200px) { + .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1140px; + } +} +@media (min-width: 1400px) { + .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { + max-width: 1320px; + } +} +.row { + --bs-gutter-x: 1.5rem; + --bs-gutter-y: 0; + display: flex; + flex-wrap: wrap; + margin-top: calc(-1 * var(--bs-gutter-y)); + margin-left: calc(-0.5 * var(--bs-gutter-x)); + margin-right: calc(-0.5 * var(--bs-gutter-x)); +} +.row > * { + box-sizing: border-box; + flex-shrink: 0; + width: 100%; + max-width: 100%; + padding-left: calc(var(--bs-gutter-x) * 0.5); + padding-right: calc(var(--bs-gutter-x) * 0.5); + margin-top: var(--bs-gutter-y); +} + +.col { + flex: 1 0 0%; +} + +.row-cols-auto > * { + flex: 0 0 auto; + width: auto; +} + +.row-cols-1 > * { + flex: 0 0 auto; + width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 auto; + width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; +} + +.row-cols-4 > * { + flex: 0 0 auto; + width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 auto; + width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; +} + +.col-1 { + flex: 0 0 auto; + width: 8.33333333%; +} + +.col-2 { + flex: 0 0 auto; + width: 16.66666667%; +} + +.col-3 { + flex: 0 0 auto; + width: 25%; +} + +.col-4 { + flex: 0 0 auto; + width: 33.33333333%; +} + +.col-5 { + flex: 0 0 auto; + width: 41.66666667%; +} + +.col-6 { + flex: 0 0 auto; + width: 50%; +} + +.col-7 { + flex: 0 0 auto; + width: 58.33333333%; +} + +.col-8 { + flex: 0 0 auto; + width: 66.66666667%; +} + +.col-9 { + flex: 0 0 auto; + width: 75%; +} + +.col-10 { + flex: 0 0 auto; + width: 83.33333333%; +} + +.col-11 { + flex: 0 0 auto; + width: 91.66666667%; +} + +.col-12 { + flex: 0 0 auto; + width: 100%; +} + +.offset-1 { + margin-right: 8.33333333%; +} + +.offset-2 { + margin-right: 16.66666667%; +} + +.offset-3 { + margin-right: 25%; +} + +.offset-4 { + margin-right: 33.33333333%; +} + +.offset-5 { + margin-right: 41.66666667%; +} + +.offset-6 { + margin-right: 50%; +} + +.offset-7 { + margin-right: 58.33333333%; +} + +.offset-8 { + margin-right: 66.66666667%; +} + +.offset-9 { + margin-right: 75%; +} + +.offset-10 { + margin-right: 83.33333333%; +} + +.offset-11 { + margin-right: 91.66666667%; +} + +.g-0, +.gx-0 { + --bs-gutter-x: 0; +} + +.g-0, +.gy-0 { + --bs-gutter-y: 0; +} + +.g-1, +.gx-1 { + --bs-gutter-x: 0.25rem; +} + +.g-1, +.gy-1 { + --bs-gutter-y: 0.25rem; +} + +.g-2, +.gx-2 { + --bs-gutter-x: 0.5rem; +} + +.g-2, +.gy-2 { + --bs-gutter-y: 0.5rem; +} + +.g-3, +.gx-3 { + --bs-gutter-x: 1rem; +} + +.g-3, +.gy-3 { + --bs-gutter-y: 1rem; +} + +.g-4, +.gx-4 { + --bs-gutter-x: 1.5rem; +} + +.g-4, +.gy-4 { + --bs-gutter-y: 1.5rem; +} + +.g-5, +.gx-5 { + --bs-gutter-x: 3rem; +} + +.g-5, +.gy-5 { + --bs-gutter-y: 3rem; +} + +@media (min-width: 576px) { + .col-sm { + flex: 1 0 0%; + } + .row-cols-sm-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-sm-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + } + .col-sm-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-sm-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-sm-3 { + flex: 0 0 auto; + width: 25%; + } + .col-sm-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-sm-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-sm-6 { + flex: 0 0 auto; + width: 50%; + } + .col-sm-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-sm-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-sm-9 { + flex: 0 0 auto; + width: 75%; + } + .col-sm-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-sm-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-sm-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-sm-0 { + margin-right: 0; + } + .offset-sm-1 { + margin-right: 8.33333333%; + } + .offset-sm-2 { + margin-right: 16.66666667%; + } + .offset-sm-3 { + margin-right: 25%; + } + .offset-sm-4 { + margin-right: 33.33333333%; + } + .offset-sm-5 { + margin-right: 41.66666667%; + } + .offset-sm-6 { + margin-right: 50%; + } + .offset-sm-7 { + margin-right: 58.33333333%; + } + .offset-sm-8 { + margin-right: 66.66666667%; + } + .offset-sm-9 { + margin-right: 75%; + } + .offset-sm-10 { + margin-right: 83.33333333%; + } + .offset-sm-11 { + margin-right: 91.66666667%; + } + .g-sm-0, +.gx-sm-0 { + --bs-gutter-x: 0; + } + .g-sm-0, +.gy-sm-0 { + --bs-gutter-y: 0; + } + .g-sm-1, +.gx-sm-1 { + --bs-gutter-x: 0.25rem; + } + .g-sm-1, +.gy-sm-1 { + --bs-gutter-y: 0.25rem; + } + .g-sm-2, +.gx-sm-2 { + --bs-gutter-x: 0.5rem; + } + .g-sm-2, +.gy-sm-2 { + --bs-gutter-y: 0.5rem; + } + .g-sm-3, +.gx-sm-3 { + --bs-gutter-x: 1rem; + } + .g-sm-3, +.gy-sm-3 { + --bs-gutter-y: 1rem; + } + .g-sm-4, +.gx-sm-4 { + --bs-gutter-x: 1.5rem; + } + .g-sm-4, +.gy-sm-4 { + --bs-gutter-y: 1.5rem; + } + .g-sm-5, +.gx-sm-5 { + --bs-gutter-x: 3rem; + } + .g-sm-5, +.gy-sm-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 768px) { + .col-md { + flex: 1 0 0%; + } + .row-cols-md-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-md-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-md-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + } + .col-md-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-md-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-md-3 { + flex: 0 0 auto; + width: 25%; + } + .col-md-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-md-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-md-6 { + flex: 0 0 auto; + width: 50%; + } + .col-md-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-md-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-md-9 { + flex: 0 0 auto; + width: 75%; + } + .col-md-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-md-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-md-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-md-0 { + margin-right: 0; + } + .offset-md-1 { + margin-right: 8.33333333%; + } + .offset-md-2 { + margin-right: 16.66666667%; + } + .offset-md-3 { + margin-right: 25%; + } + .offset-md-4 { + margin-right: 33.33333333%; + } + .offset-md-5 { + margin-right: 41.66666667%; + } + .offset-md-6 { + margin-right: 50%; + } + .offset-md-7 { + margin-right: 58.33333333%; + } + .offset-md-8 { + margin-right: 66.66666667%; + } + .offset-md-9 { + margin-right: 75%; + } + .offset-md-10 { + margin-right: 83.33333333%; + } + .offset-md-11 { + margin-right: 91.66666667%; + } + .g-md-0, +.gx-md-0 { + --bs-gutter-x: 0; + } + .g-md-0, +.gy-md-0 { + --bs-gutter-y: 0; + } + .g-md-1, +.gx-md-1 { + --bs-gutter-x: 0.25rem; + } + .g-md-1, +.gy-md-1 { + --bs-gutter-y: 0.25rem; + } + .g-md-2, +.gx-md-2 { + --bs-gutter-x: 0.5rem; + } + .g-md-2, +.gy-md-2 { + --bs-gutter-y: 0.5rem; + } + .g-md-3, +.gx-md-3 { + --bs-gutter-x: 1rem; + } + .g-md-3, +.gy-md-3 { + --bs-gutter-y: 1rem; + } + .g-md-4, +.gx-md-4 { + --bs-gutter-x: 1.5rem; + } + .g-md-4, +.gy-md-4 { + --bs-gutter-y: 1.5rem; + } + .g-md-5, +.gx-md-5 { + --bs-gutter-x: 3rem; + } + .g-md-5, +.gy-md-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 992px) { + .col-lg { + flex: 1 0 0%; + } + .row-cols-lg-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-lg-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + } + .col-lg-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-lg-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-lg-3 { + flex: 0 0 auto; + width: 25%; + } + .col-lg-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-lg-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-lg-6 { + flex: 0 0 auto; + width: 50%; + } + .col-lg-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-lg-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-lg-9 { + flex: 0 0 auto; + width: 75%; + } + .col-lg-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-lg-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-lg-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-lg-0 { + margin-right: 0; + } + .offset-lg-1 { + margin-right: 8.33333333%; + } + .offset-lg-2 { + margin-right: 16.66666667%; + } + .offset-lg-3 { + margin-right: 25%; + } + .offset-lg-4 { + margin-right: 33.33333333%; + } + .offset-lg-5 { + margin-right: 41.66666667%; + } + .offset-lg-6 { + margin-right: 50%; + } + .offset-lg-7 { + margin-right: 58.33333333%; + } + .offset-lg-8 { + margin-right: 66.66666667%; + } + .offset-lg-9 { + margin-right: 75%; + } + .offset-lg-10 { + margin-right: 83.33333333%; + } + .offset-lg-11 { + margin-right: 91.66666667%; + } + .g-lg-0, +.gx-lg-0 { + --bs-gutter-x: 0; + } + .g-lg-0, +.gy-lg-0 { + --bs-gutter-y: 0; + } + .g-lg-1, +.gx-lg-1 { + --bs-gutter-x: 0.25rem; + } + .g-lg-1, +.gy-lg-1 { + --bs-gutter-y: 0.25rem; + } + .g-lg-2, +.gx-lg-2 { + --bs-gutter-x: 0.5rem; + } + .g-lg-2, +.gy-lg-2 { + --bs-gutter-y: 0.5rem; + } + .g-lg-3, +.gx-lg-3 { + --bs-gutter-x: 1rem; + } + .g-lg-3, +.gy-lg-3 { + --bs-gutter-y: 1rem; + } + .g-lg-4, +.gx-lg-4 { + --bs-gutter-x: 1.5rem; + } + .g-lg-4, +.gy-lg-4 { + --bs-gutter-y: 1.5rem; + } + .g-lg-5, +.gx-lg-5 { + --bs-gutter-x: 3rem; + } + .g-lg-5, +.gy-lg-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1200px) { + .col-xl { + flex: 1 0 0%; + } + .row-cols-xl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xl-0 { + margin-right: 0; + } + .offset-xl-1 { + margin-right: 8.33333333%; + } + .offset-xl-2 { + margin-right: 16.66666667%; + } + .offset-xl-3 { + margin-right: 25%; + } + .offset-xl-4 { + margin-right: 33.33333333%; + } + .offset-xl-5 { + margin-right: 41.66666667%; + } + .offset-xl-6 { + margin-right: 50%; + } + .offset-xl-7 { + margin-right: 58.33333333%; + } + .offset-xl-8 { + margin-right: 66.66666667%; + } + .offset-xl-9 { + margin-right: 75%; + } + .offset-xl-10 { + margin-right: 83.33333333%; + } + .offset-xl-11 { + margin-right: 91.66666667%; + } + .g-xl-0, +.gx-xl-0 { + --bs-gutter-x: 0; + } + .g-xl-0, +.gy-xl-0 { + --bs-gutter-y: 0; + } + .g-xl-1, +.gx-xl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xl-1, +.gy-xl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xl-2, +.gx-xl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xl-2, +.gy-xl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xl-3, +.gx-xl-3 { + --bs-gutter-x: 1rem; + } + .g-xl-3, +.gy-xl-3 { + --bs-gutter-y: 1rem; + } + .g-xl-4, +.gx-xl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xl-4, +.gy-xl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xl-5, +.gx-xl-5 { + --bs-gutter-x: 3rem; + } + .g-xl-5, +.gy-xl-5 { + --bs-gutter-y: 3rem; + } +} +@media (min-width: 1400px) { + .col-xxl { + flex: 1 0 0%; + } + .row-cols-xxl-auto > * { + flex: 0 0 auto; + width: auto; + } + .row-cols-xxl-1 > * { + flex: 0 0 auto; + width: 100%; + } + .row-cols-xxl-2 > * { + flex: 0 0 auto; + width: 50%; + } + .row-cols-xxl-3 > * { + flex: 0 0 auto; + width: 33.3333333333%; + } + .row-cols-xxl-4 > * { + flex: 0 0 auto; + width: 25%; + } + .row-cols-xxl-5 > * { + flex: 0 0 auto; + width: 20%; + } + .row-cols-xxl-6 > * { + flex: 0 0 auto; + width: 16.6666666667%; + } + .col-xxl-auto { + flex: 0 0 auto; + width: auto; + } + .col-xxl-1 { + flex: 0 0 auto; + width: 8.33333333%; + } + .col-xxl-2 { + flex: 0 0 auto; + width: 16.66666667%; + } + .col-xxl-3 { + flex: 0 0 auto; + width: 25%; + } + .col-xxl-4 { + flex: 0 0 auto; + width: 33.33333333%; + } + .col-xxl-5 { + flex: 0 0 auto; + width: 41.66666667%; + } + .col-xxl-6 { + flex: 0 0 auto; + width: 50%; + } + .col-xxl-7 { + flex: 0 0 auto; + width: 58.33333333%; + } + .col-xxl-8 { + flex: 0 0 auto; + width: 66.66666667%; + } + .col-xxl-9 { + flex: 0 0 auto; + width: 75%; + } + .col-xxl-10 { + flex: 0 0 auto; + width: 83.33333333%; + } + .col-xxl-11 { + flex: 0 0 auto; + width: 91.66666667%; + } + .col-xxl-12 { + flex: 0 0 auto; + width: 100%; + } + .offset-xxl-0 { + margin-right: 0; + } + .offset-xxl-1 { + margin-right: 8.33333333%; + } + .offset-xxl-2 { + margin-right: 16.66666667%; + } + .offset-xxl-3 { + margin-right: 25%; + } + .offset-xxl-4 { + margin-right: 33.33333333%; + } + .offset-xxl-5 { + margin-right: 41.66666667%; + } + .offset-xxl-6 { + margin-right: 50%; + } + .offset-xxl-7 { + margin-right: 58.33333333%; + } + .offset-xxl-8 { + margin-right: 66.66666667%; + } + .offset-xxl-9 { + margin-right: 75%; + } + .offset-xxl-10 { + margin-right: 83.33333333%; + } + .offset-xxl-11 { + margin-right: 91.66666667%; + } + .g-xxl-0, +.gx-xxl-0 { + --bs-gutter-x: 0; + } + .g-xxl-0, +.gy-xxl-0 { + --bs-gutter-y: 0; + } + .g-xxl-1, +.gx-xxl-1 { + --bs-gutter-x: 0.25rem; + } + .g-xxl-1, +.gy-xxl-1 { + --bs-gutter-y: 0.25rem; + } + .g-xxl-2, +.gx-xxl-2 { + --bs-gutter-x: 0.5rem; + } + .g-xxl-2, +.gy-xxl-2 { + --bs-gutter-y: 0.5rem; + } + .g-xxl-3, +.gx-xxl-3 { + --bs-gutter-x: 1rem; + } + .g-xxl-3, +.gy-xxl-3 { + --bs-gutter-y: 1rem; + } + .g-xxl-4, +.gx-xxl-4 { + --bs-gutter-x: 1.5rem; + } + .g-xxl-4, +.gy-xxl-4 { + --bs-gutter-y: 1.5rem; + } + .g-xxl-5, +.gx-xxl-5 { + --bs-gutter-x: 3rem; + } + .g-xxl-5, +.gy-xxl-5 { + --bs-gutter-y: 3rem; + } +} +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +.d-none { + display: none !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.justify-content-evenly { + justify-content: space-evenly !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +.order-first { + order: -1 !important; +} + +.order-0 { + order: 0 !important; +} + +.order-1 { + order: 1 !important; +} + +.order-2 { + order: 2 !important; +} + +.order-3 { + order: 3 !important; +} + +.order-4 { + order: 4 !important; +} + +.order-5 { + order: 5 !important; +} + +.order-last { + order: 6 !important; +} + +.m-0 { + margin: 0 !important; +} + +.m-1 { + margin: 0.25rem !important; +} + +.m-2 { + margin: 0.5rem !important; +} + +.m-3 { + margin: 1rem !important; +} + +.m-4 { + margin: 1.5rem !important; +} + +.m-5 { + margin: 3rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mx-0 { + margin-left: 0 !important; + margin-right: 0 !important; +} + +.mx-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; +} + +.mx-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; +} + +.mx-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; +} + +.mx-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; +} + +.mx-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; +} + +.mx-auto { + margin-left: auto !important; + margin-right: auto !important; +} + +.my-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; +} + +.my-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; +} + +.my-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; +} + +.my-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; +} + +.my-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; +} + +.my-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; +} + +.my-auto { + margin-top: auto !important; + margin-bottom: auto !important; +} + +.mt-0 { + margin-top: 0 !important; +} + +.mt-1 { + margin-top: 0.25rem !important; +} + +.mt-2 { + margin-top: 0.5rem !important; +} + +.mt-3 { + margin-top: 1rem !important; +} + +.mt-4 { + margin-top: 1.5rem !important; +} + +.mt-5 { + margin-top: 3rem !important; +} + +.mt-auto { + margin-top: auto !important; +} + +.me-0 { + margin-left: 0 !important; +} + +.me-1 { + margin-left: 0.25rem !important; +} + +.me-2 { + margin-left: 0.5rem !important; +} + +.me-3 { + margin-left: 1rem !important; +} + +.me-4 { + margin-left: 1.5rem !important; +} + +.me-5 { + margin-left: 3rem !important; +} + +.me-auto { + margin-left: auto !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.mb-1 { + margin-bottom: 0.25rem !important; +} + +.mb-2 { + margin-bottom: 0.5rem !important; +} + +.mb-3 { + margin-bottom: 1rem !important; +} + +.mb-4 { + margin-bottom: 1.5rem !important; +} + +.mb-5 { + margin-bottom: 3rem !important; +} + +.mb-auto { + margin-bottom: auto !important; +} + +.ms-0 { + margin-right: 0 !important; +} + +.ms-1 { + margin-right: 0.25rem !important; +} + +.ms-2 { + margin-right: 0.5rem !important; +} + +.ms-3 { + margin-right: 1rem !important; +} + +.ms-4 { + margin-right: 1.5rem !important; +} + +.ms-5 { + margin-right: 3rem !important; +} + +.ms-auto { + margin-right: auto !important; +} + +.p-0 { + padding: 0 !important; +} + +.p-1 { + padding: 0.25rem !important; +} + +.p-2 { + padding: 0.5rem !important; +} + +.p-3 { + padding: 1rem !important; +} + +.p-4 { + padding: 1.5rem !important; +} + +.p-5 { + padding: 3rem !important; +} + +.px-0 { + padding-left: 0 !important; + padding-right: 0 !important; +} + +.px-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; +} + +.px-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; +} + +.px-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; +} + +.px-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; +} + +.px-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; +} + +.py-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; +} + +.py-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; +} + +.py-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; +} + +.py-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; +} + +.py-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; +} + +.py-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; +} + +.pt-0 { + padding-top: 0 !important; +} + +.pt-1 { + padding-top: 0.25rem !important; +} + +.pt-2 { + padding-top: 0.5rem !important; +} + +.pt-3 { + padding-top: 1rem !important; +} + +.pt-4 { + padding-top: 1.5rem !important; +} + +.pt-5 { + padding-top: 3rem !important; +} + +.pe-0 { + padding-left: 0 !important; +} + +.pe-1 { + padding-left: 0.25rem !important; +} + +.pe-2 { + padding-left: 0.5rem !important; +} + +.pe-3 { + padding-left: 1rem !important; +} + +.pe-4 { + padding-left: 1.5rem !important; +} + +.pe-5 { + padding-left: 3rem !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.pb-1 { + padding-bottom: 0.25rem !important; +} + +.pb-2 { + padding-bottom: 0.5rem !important; +} + +.pb-3 { + padding-bottom: 1rem !important; +} + +.pb-4 { + padding-bottom: 1.5rem !important; +} + +.pb-5 { + padding-bottom: 3rem !important; +} + +.ps-0 { + padding-right: 0 !important; +} + +.ps-1 { + padding-right: 0.25rem !important; +} + +.ps-2 { + padding-right: 0.5rem !important; +} + +.ps-3 { + padding-right: 1rem !important; +} + +.ps-4 { + padding-right: 1.5rem !important; +} + +.ps-5 { + padding-right: 3rem !important; +} + +@media (min-width: 576px) { + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-grid { + display: grid !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } + .d-sm-none { + display: none !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .justify-content-sm-evenly { + justify-content: space-evenly !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } + .order-sm-first { + order: -1 !important; + } + .order-sm-0 { + order: 0 !important; + } + .order-sm-1 { + order: 1 !important; + } + .order-sm-2 { + order: 2 !important; + } + .order-sm-3 { + order: 3 !important; + } + .order-sm-4 { + order: 4 !important; + } + .order-sm-5 { + order: 5 !important; + } + .order-sm-last { + order: 6 !important; + } + .m-sm-0 { + margin: 0 !important; + } + .m-sm-1 { + margin: 0.25rem !important; + } + .m-sm-2 { + margin: 0.5rem !important; + } + .m-sm-3 { + margin: 1rem !important; + } + .m-sm-4 { + margin: 1.5rem !important; + } + .m-sm-5 { + margin: 3rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mx-sm-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .mx-sm-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .mx-sm-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .mx-sm-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .mx-sm-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .mx-sm-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .mx-sm-auto { + margin-left: auto !important; + margin-right: auto !important; + } + .my-sm-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-sm-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-sm-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-sm-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-sm-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-sm-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-sm-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-sm-0 { + margin-top: 0 !important; + } + .mt-sm-1 { + margin-top: 0.25rem !important; + } + .mt-sm-2 { + margin-top: 0.5rem !important; + } + .mt-sm-3 { + margin-top: 1rem !important; + } + .mt-sm-4 { + margin-top: 1.5rem !important; + } + .mt-sm-5 { + margin-top: 3rem !important; + } + .mt-sm-auto { + margin-top: auto !important; + } + .me-sm-0 { + margin-left: 0 !important; + } + .me-sm-1 { + margin-left: 0.25rem !important; + } + .me-sm-2 { + margin-left: 0.5rem !important; + } + .me-sm-3 { + margin-left: 1rem !important; + } + .me-sm-4 { + margin-left: 1.5rem !important; + } + .me-sm-5 { + margin-left: 3rem !important; + } + .me-sm-auto { + margin-left: auto !important; + } + .mb-sm-0 { + margin-bottom: 0 !important; + } + .mb-sm-1 { + margin-bottom: 0.25rem !important; + } + .mb-sm-2 { + margin-bottom: 0.5rem !important; + } + .mb-sm-3 { + margin-bottom: 1rem !important; + } + .mb-sm-4 { + margin-bottom: 1.5rem !important; + } + .mb-sm-5 { + margin-bottom: 3rem !important; + } + .mb-sm-auto { + margin-bottom: auto !important; + } + .ms-sm-0 { + margin-right: 0 !important; + } + .ms-sm-1 { + margin-right: 0.25rem !important; + } + .ms-sm-2 { + margin-right: 0.5rem !important; + } + .ms-sm-3 { + margin-right: 1rem !important; + } + .ms-sm-4 { + margin-right: 1.5rem !important; + } + .ms-sm-5 { + margin-right: 3rem !important; + } + .ms-sm-auto { + margin-right: auto !important; + } + .p-sm-0 { + padding: 0 !important; + } + .p-sm-1 { + padding: 0.25rem !important; + } + .p-sm-2 { + padding: 0.5rem !important; + } + .p-sm-3 { + padding: 1rem !important; + } + .p-sm-4 { + padding: 1.5rem !important; + } + .p-sm-5 { + padding: 3rem !important; + } + .px-sm-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .px-sm-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .px-sm-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-sm-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .px-sm-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .px-sm-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .py-sm-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-sm-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-sm-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-sm-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-sm-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-sm-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-sm-0 { + padding-top: 0 !important; + } + .pt-sm-1 { + padding-top: 0.25rem !important; + } + .pt-sm-2 { + padding-top: 0.5rem !important; + } + .pt-sm-3 { + padding-top: 1rem !important; + } + .pt-sm-4 { + padding-top: 1.5rem !important; + } + .pt-sm-5 { + padding-top: 3rem !important; + } + .pe-sm-0 { + padding-left: 0 !important; + } + .pe-sm-1 { + padding-left: 0.25rem !important; + } + .pe-sm-2 { + padding-left: 0.5rem !important; + } + .pe-sm-3 { + padding-left: 1rem !important; + } + .pe-sm-4 { + padding-left: 1.5rem !important; + } + .pe-sm-5 { + padding-left: 3rem !important; + } + .pb-sm-0 { + padding-bottom: 0 !important; + } + .pb-sm-1 { + padding-bottom: 0.25rem !important; + } + .pb-sm-2 { + padding-bottom: 0.5rem !important; + } + .pb-sm-3 { + padding-bottom: 1rem !important; + } + .pb-sm-4 { + padding-bottom: 1.5rem !important; + } + .pb-sm-5 { + padding-bottom: 3rem !important; + } + .ps-sm-0 { + padding-right: 0 !important; + } + .ps-sm-1 { + padding-right: 0.25rem !important; + } + .ps-sm-2 { + padding-right: 0.5rem !important; + } + .ps-sm-3 { + padding-right: 1rem !important; + } + .ps-sm-4 { + padding-right: 1.5rem !important; + } + .ps-sm-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 768px) { + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-grid { + display: grid !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } + .d-md-none { + display: none !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .justify-content-md-evenly { + justify-content: space-evenly !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } + .order-md-first { + order: -1 !important; + } + .order-md-0 { + order: 0 !important; + } + .order-md-1 { + order: 1 !important; + } + .order-md-2 { + order: 2 !important; + } + .order-md-3 { + order: 3 !important; + } + .order-md-4 { + order: 4 !important; + } + .order-md-5 { + order: 5 !important; + } + .order-md-last { + order: 6 !important; + } + .m-md-0 { + margin: 0 !important; + } + .m-md-1 { + margin: 0.25rem !important; + } + .m-md-2 { + margin: 0.5rem !important; + } + .m-md-3 { + margin: 1rem !important; + } + .m-md-4 { + margin: 1.5rem !important; + } + .m-md-5 { + margin: 3rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mx-md-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .mx-md-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .mx-md-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .mx-md-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .mx-md-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .mx-md-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .mx-md-auto { + margin-left: auto !important; + margin-right: auto !important; + } + .my-md-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-md-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-md-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-md-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-md-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-md-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-md-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-md-0 { + margin-top: 0 !important; + } + .mt-md-1 { + margin-top: 0.25rem !important; + } + .mt-md-2 { + margin-top: 0.5rem !important; + } + .mt-md-3 { + margin-top: 1rem !important; + } + .mt-md-4 { + margin-top: 1.5rem !important; + } + .mt-md-5 { + margin-top: 3rem !important; + } + .mt-md-auto { + margin-top: auto !important; + } + .me-md-0 { + margin-left: 0 !important; + } + .me-md-1 { + margin-left: 0.25rem !important; + } + .me-md-2 { + margin-left: 0.5rem !important; + } + .me-md-3 { + margin-left: 1rem !important; + } + .me-md-4 { + margin-left: 1.5rem !important; + } + .me-md-5 { + margin-left: 3rem !important; + } + .me-md-auto { + margin-left: auto !important; + } + .mb-md-0 { + margin-bottom: 0 !important; + } + .mb-md-1 { + margin-bottom: 0.25rem !important; + } + .mb-md-2 { + margin-bottom: 0.5rem !important; + } + .mb-md-3 { + margin-bottom: 1rem !important; + } + .mb-md-4 { + margin-bottom: 1.5rem !important; + } + .mb-md-5 { + margin-bottom: 3rem !important; + } + .mb-md-auto { + margin-bottom: auto !important; + } + .ms-md-0 { + margin-right: 0 !important; + } + .ms-md-1 { + margin-right: 0.25rem !important; + } + .ms-md-2 { + margin-right: 0.5rem !important; + } + .ms-md-3 { + margin-right: 1rem !important; + } + .ms-md-4 { + margin-right: 1.5rem !important; + } + .ms-md-5 { + margin-right: 3rem !important; + } + .ms-md-auto { + margin-right: auto !important; + } + .p-md-0 { + padding: 0 !important; + } + .p-md-1 { + padding: 0.25rem !important; + } + .p-md-2 { + padding: 0.5rem !important; + } + .p-md-3 { + padding: 1rem !important; + } + .p-md-4 { + padding: 1.5rem !important; + } + .p-md-5 { + padding: 3rem !important; + } + .px-md-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .px-md-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .px-md-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-md-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .px-md-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .px-md-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .py-md-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-md-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-md-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-md-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-md-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-md-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-md-0 { + padding-top: 0 !important; + } + .pt-md-1 { + padding-top: 0.25rem !important; + } + .pt-md-2 { + padding-top: 0.5rem !important; + } + .pt-md-3 { + padding-top: 1rem !important; + } + .pt-md-4 { + padding-top: 1.5rem !important; + } + .pt-md-5 { + padding-top: 3rem !important; + } + .pe-md-0 { + padding-left: 0 !important; + } + .pe-md-1 { + padding-left: 0.25rem !important; + } + .pe-md-2 { + padding-left: 0.5rem !important; + } + .pe-md-3 { + padding-left: 1rem !important; + } + .pe-md-4 { + padding-left: 1.5rem !important; + } + .pe-md-5 { + padding-left: 3rem !important; + } + .pb-md-0 { + padding-bottom: 0 !important; + } + .pb-md-1 { + padding-bottom: 0.25rem !important; + } + .pb-md-2 { + padding-bottom: 0.5rem !important; + } + .pb-md-3 { + padding-bottom: 1rem !important; + } + .pb-md-4 { + padding-bottom: 1.5rem !important; + } + .pb-md-5 { + padding-bottom: 3rem !important; + } + .ps-md-0 { + padding-right: 0 !important; + } + .ps-md-1 { + padding-right: 0.25rem !important; + } + .ps-md-2 { + padding-right: 0.5rem !important; + } + .ps-md-3 { + padding-right: 1rem !important; + } + .ps-md-4 { + padding-right: 1.5rem !important; + } + .ps-md-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 992px) { + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-grid { + display: grid !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } + .d-lg-none { + display: none !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .justify-content-lg-evenly { + justify-content: space-evenly !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } + .order-lg-first { + order: -1 !important; + } + .order-lg-0 { + order: 0 !important; + } + .order-lg-1 { + order: 1 !important; + } + .order-lg-2 { + order: 2 !important; + } + .order-lg-3 { + order: 3 !important; + } + .order-lg-4 { + order: 4 !important; + } + .order-lg-5 { + order: 5 !important; + } + .order-lg-last { + order: 6 !important; + } + .m-lg-0 { + margin: 0 !important; + } + .m-lg-1 { + margin: 0.25rem !important; + } + .m-lg-2 { + margin: 0.5rem !important; + } + .m-lg-3 { + margin: 1rem !important; + } + .m-lg-4 { + margin: 1.5rem !important; + } + .m-lg-5 { + margin: 3rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mx-lg-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .mx-lg-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .mx-lg-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .mx-lg-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .mx-lg-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .mx-lg-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .mx-lg-auto { + margin-left: auto !important; + margin-right: auto !important; + } + .my-lg-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-lg-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-lg-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-lg-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-lg-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-lg-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-lg-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-lg-0 { + margin-top: 0 !important; + } + .mt-lg-1 { + margin-top: 0.25rem !important; + } + .mt-lg-2 { + margin-top: 0.5rem !important; + } + .mt-lg-3 { + margin-top: 1rem !important; + } + .mt-lg-4 { + margin-top: 1.5rem !important; + } + .mt-lg-5 { + margin-top: 3rem !important; + } + .mt-lg-auto { + margin-top: auto !important; + } + .me-lg-0 { + margin-left: 0 !important; + } + .me-lg-1 { + margin-left: 0.25rem !important; + } + .me-lg-2 { + margin-left: 0.5rem !important; + } + .me-lg-3 { + margin-left: 1rem !important; + } + .me-lg-4 { + margin-left: 1.5rem !important; + } + .me-lg-5 { + margin-left: 3rem !important; + } + .me-lg-auto { + margin-left: auto !important; + } + .mb-lg-0 { + margin-bottom: 0 !important; + } + .mb-lg-1 { + margin-bottom: 0.25rem !important; + } + .mb-lg-2 { + margin-bottom: 0.5rem !important; + } + .mb-lg-3 { + margin-bottom: 1rem !important; + } + .mb-lg-4 { + margin-bottom: 1.5rem !important; + } + .mb-lg-5 { + margin-bottom: 3rem !important; + } + .mb-lg-auto { + margin-bottom: auto !important; + } + .ms-lg-0 { + margin-right: 0 !important; + } + .ms-lg-1 { + margin-right: 0.25rem !important; + } + .ms-lg-2 { + margin-right: 0.5rem !important; + } + .ms-lg-3 { + margin-right: 1rem !important; + } + .ms-lg-4 { + margin-right: 1.5rem !important; + } + .ms-lg-5 { + margin-right: 3rem !important; + } + .ms-lg-auto { + margin-right: auto !important; + } + .p-lg-0 { + padding: 0 !important; + } + .p-lg-1 { + padding: 0.25rem !important; + } + .p-lg-2 { + padding: 0.5rem !important; + } + .p-lg-3 { + padding: 1rem !important; + } + .p-lg-4 { + padding: 1.5rem !important; + } + .p-lg-5 { + padding: 3rem !important; + } + .px-lg-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .px-lg-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .px-lg-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-lg-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .px-lg-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .px-lg-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .py-lg-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-lg-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-lg-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-lg-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-lg-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-lg-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-lg-0 { + padding-top: 0 !important; + } + .pt-lg-1 { + padding-top: 0.25rem !important; + } + .pt-lg-2 { + padding-top: 0.5rem !important; + } + .pt-lg-3 { + padding-top: 1rem !important; + } + .pt-lg-4 { + padding-top: 1.5rem !important; + } + .pt-lg-5 { + padding-top: 3rem !important; + } + .pe-lg-0 { + padding-left: 0 !important; + } + .pe-lg-1 { + padding-left: 0.25rem !important; + } + .pe-lg-2 { + padding-left: 0.5rem !important; + } + .pe-lg-3 { + padding-left: 1rem !important; + } + .pe-lg-4 { + padding-left: 1.5rem !important; + } + .pe-lg-5 { + padding-left: 3rem !important; + } + .pb-lg-0 { + padding-bottom: 0 !important; + } + .pb-lg-1 { + padding-bottom: 0.25rem !important; + } + .pb-lg-2 { + padding-bottom: 0.5rem !important; + } + .pb-lg-3 { + padding-bottom: 1rem !important; + } + .pb-lg-4 { + padding-bottom: 1.5rem !important; + } + .pb-lg-5 { + padding-bottom: 3rem !important; + } + .ps-lg-0 { + padding-right: 0 !important; + } + .ps-lg-1 { + padding-right: 0.25rem !important; + } + .ps-lg-2 { + padding-right: 0.5rem !important; + } + .ps-lg-3 { + padding-right: 1rem !important; + } + .ps-lg-4 { + padding-right: 1.5rem !important; + } + .ps-lg-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 1200px) { + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-grid { + display: grid !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } + .d-xl-none { + display: none !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .justify-content-xl-evenly { + justify-content: space-evenly !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } + .order-xl-first { + order: -1 !important; + } + .order-xl-0 { + order: 0 !important; + } + .order-xl-1 { + order: 1 !important; + } + .order-xl-2 { + order: 2 !important; + } + .order-xl-3 { + order: 3 !important; + } + .order-xl-4 { + order: 4 !important; + } + .order-xl-5 { + order: 5 !important; + } + .order-xl-last { + order: 6 !important; + } + .m-xl-0 { + margin: 0 !important; + } + .m-xl-1 { + margin: 0.25rem !important; + } + .m-xl-2 { + margin: 0.5rem !important; + } + .m-xl-3 { + margin: 1rem !important; + } + .m-xl-4 { + margin: 1.5rem !important; + } + .m-xl-5 { + margin: 3rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mx-xl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .mx-xl-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .mx-xl-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .mx-xl-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .mx-xl-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .mx-xl-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .mx-xl-auto { + margin-left: auto !important; + margin-right: auto !important; + } + .my-xl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xl-0 { + margin-top: 0 !important; + } + .mt-xl-1 { + margin-top: 0.25rem !important; + } + .mt-xl-2 { + margin-top: 0.5rem !important; + } + .mt-xl-3 { + margin-top: 1rem !important; + } + .mt-xl-4 { + margin-top: 1.5rem !important; + } + .mt-xl-5 { + margin-top: 3rem !important; + } + .mt-xl-auto { + margin-top: auto !important; + } + .me-xl-0 { + margin-left: 0 !important; + } + .me-xl-1 { + margin-left: 0.25rem !important; + } + .me-xl-2 { + margin-left: 0.5rem !important; + } + .me-xl-3 { + margin-left: 1rem !important; + } + .me-xl-4 { + margin-left: 1.5rem !important; + } + .me-xl-5 { + margin-left: 3rem !important; + } + .me-xl-auto { + margin-left: auto !important; + } + .mb-xl-0 { + margin-bottom: 0 !important; + } + .mb-xl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xl-3 { + margin-bottom: 1rem !important; + } + .mb-xl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xl-5 { + margin-bottom: 3rem !important; + } + .mb-xl-auto { + margin-bottom: auto !important; + } + .ms-xl-0 { + margin-right: 0 !important; + } + .ms-xl-1 { + margin-right: 0.25rem !important; + } + .ms-xl-2 { + margin-right: 0.5rem !important; + } + .ms-xl-3 { + margin-right: 1rem !important; + } + .ms-xl-4 { + margin-right: 1.5rem !important; + } + .ms-xl-5 { + margin-right: 3rem !important; + } + .ms-xl-auto { + margin-right: auto !important; + } + .p-xl-0 { + padding: 0 !important; + } + .p-xl-1 { + padding: 0.25rem !important; + } + .p-xl-2 { + padding: 0.5rem !important; + } + .p-xl-3 { + padding: 1rem !important; + } + .p-xl-4 { + padding: 1.5rem !important; + } + .p-xl-5 { + padding: 3rem !important; + } + .px-xl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .px-xl-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .px-xl-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-xl-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .px-xl-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .px-xl-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .py-xl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xl-0 { + padding-top: 0 !important; + } + .pt-xl-1 { + padding-top: 0.25rem !important; + } + .pt-xl-2 { + padding-top: 0.5rem !important; + } + .pt-xl-3 { + padding-top: 1rem !important; + } + .pt-xl-4 { + padding-top: 1.5rem !important; + } + .pt-xl-5 { + padding-top: 3rem !important; + } + .pe-xl-0 { + padding-left: 0 !important; + } + .pe-xl-1 { + padding-left: 0.25rem !important; + } + .pe-xl-2 { + padding-left: 0.5rem !important; + } + .pe-xl-3 { + padding-left: 1rem !important; + } + .pe-xl-4 { + padding-left: 1.5rem !important; + } + .pe-xl-5 { + padding-left: 3rem !important; + } + .pb-xl-0 { + padding-bottom: 0 !important; + } + .pb-xl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xl-3 { + padding-bottom: 1rem !important; + } + .pb-xl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xl-5 { + padding-bottom: 3rem !important; + } + .ps-xl-0 { + padding-right: 0 !important; + } + .ps-xl-1 { + padding-right: 0.25rem !important; + } + .ps-xl-2 { + padding-right: 0.5rem !important; + } + .ps-xl-3 { + padding-right: 1rem !important; + } + .ps-xl-4 { + padding-right: 1.5rem !important; + } + .ps-xl-5 { + padding-right: 3rem !important; + } +} +@media (min-width: 1400px) { + .d-xxl-inline { + display: inline !important; + } + .d-xxl-inline-block { + display: inline-block !important; + } + .d-xxl-block { + display: block !important; + } + .d-xxl-grid { + display: grid !important; + } + .d-xxl-table { + display: table !important; + } + .d-xxl-table-row { + display: table-row !important; + } + .d-xxl-table-cell { + display: table-cell !important; + } + .d-xxl-flex { + display: flex !important; + } + .d-xxl-inline-flex { + display: inline-flex !important; + } + .d-xxl-none { + display: none !important; + } + .flex-xxl-fill { + flex: 1 1 auto !important; + } + .flex-xxl-row { + flex-direction: row !important; + } + .flex-xxl-column { + flex-direction: column !important; + } + .flex-xxl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xxl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xxl-grow-0 { + flex-grow: 0 !important; + } + .flex-xxl-grow-1 { + flex-grow: 1 !important; + } + .flex-xxl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xxl-shrink-1 { + flex-shrink: 1 !important; + } + .flex-xxl-wrap { + flex-wrap: wrap !important; + } + .flex-xxl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xxl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .justify-content-xxl-start { + justify-content: flex-start !important; + } + .justify-content-xxl-end { + justify-content: flex-end !important; + } + .justify-content-xxl-center { + justify-content: center !important; + } + .justify-content-xxl-between { + justify-content: space-between !important; + } + .justify-content-xxl-around { + justify-content: space-around !important; + } + .justify-content-xxl-evenly { + justify-content: space-evenly !important; + } + .align-items-xxl-start { + align-items: flex-start !important; + } + .align-items-xxl-end { + align-items: flex-end !important; + } + .align-items-xxl-center { + align-items: center !important; + } + .align-items-xxl-baseline { + align-items: baseline !important; + } + .align-items-xxl-stretch { + align-items: stretch !important; + } + .align-content-xxl-start { + align-content: flex-start !important; + } + .align-content-xxl-end { + align-content: flex-end !important; + } + .align-content-xxl-center { + align-content: center !important; + } + .align-content-xxl-between { + align-content: space-between !important; + } + .align-content-xxl-around { + align-content: space-around !important; + } + .align-content-xxl-stretch { + align-content: stretch !important; + } + .align-self-xxl-auto { + align-self: auto !important; + } + .align-self-xxl-start { + align-self: flex-start !important; + } + .align-self-xxl-end { + align-self: flex-end !important; + } + .align-self-xxl-center { + align-self: center !important; + } + .align-self-xxl-baseline { + align-self: baseline !important; + } + .align-self-xxl-stretch { + align-self: stretch !important; + } + .order-xxl-first { + order: -1 !important; + } + .order-xxl-0 { + order: 0 !important; + } + .order-xxl-1 { + order: 1 !important; + } + .order-xxl-2 { + order: 2 !important; + } + .order-xxl-3 { + order: 3 !important; + } + .order-xxl-4 { + order: 4 !important; + } + .order-xxl-5 { + order: 5 !important; + } + .order-xxl-last { + order: 6 !important; + } + .m-xxl-0 { + margin: 0 !important; + } + .m-xxl-1 { + margin: 0.25rem !important; + } + .m-xxl-2 { + margin: 0.5rem !important; + } + .m-xxl-3 { + margin: 1rem !important; + } + .m-xxl-4 { + margin: 1.5rem !important; + } + .m-xxl-5 { + margin: 3rem !important; + } + .m-xxl-auto { + margin: auto !important; + } + .mx-xxl-0 { + margin-left: 0 !important; + margin-right: 0 !important; + } + .mx-xxl-1 { + margin-left: 0.25rem !important; + margin-right: 0.25rem !important; + } + .mx-xxl-2 { + margin-left: 0.5rem !important; + margin-right: 0.5rem !important; + } + .mx-xxl-3 { + margin-left: 1rem !important; + margin-right: 1rem !important; + } + .mx-xxl-4 { + margin-left: 1.5rem !important; + margin-right: 1.5rem !important; + } + .mx-xxl-5 { + margin-left: 3rem !important; + margin-right: 3rem !important; + } + .mx-xxl-auto { + margin-left: auto !important; + margin-right: auto !important; + } + .my-xxl-0 { + margin-top: 0 !important; + margin-bottom: 0 !important; + } + .my-xxl-1 { + margin-top: 0.25rem !important; + margin-bottom: 0.25rem !important; + } + .my-xxl-2 { + margin-top: 0.5rem !important; + margin-bottom: 0.5rem !important; + } + .my-xxl-3 { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } + .my-xxl-4 { + margin-top: 1.5rem !important; + margin-bottom: 1.5rem !important; + } + .my-xxl-5 { + margin-top: 3rem !important; + margin-bottom: 3rem !important; + } + .my-xxl-auto { + margin-top: auto !important; + margin-bottom: auto !important; + } + .mt-xxl-0 { + margin-top: 0 !important; + } + .mt-xxl-1 { + margin-top: 0.25rem !important; + } + .mt-xxl-2 { + margin-top: 0.5rem !important; + } + .mt-xxl-3 { + margin-top: 1rem !important; + } + .mt-xxl-4 { + margin-top: 1.5rem !important; + } + .mt-xxl-5 { + margin-top: 3rem !important; + } + .mt-xxl-auto { + margin-top: auto !important; + } + .me-xxl-0 { + margin-left: 0 !important; + } + .me-xxl-1 { + margin-left: 0.25rem !important; + } + .me-xxl-2 { + margin-left: 0.5rem !important; + } + .me-xxl-3 { + margin-left: 1rem !important; + } + .me-xxl-4 { + margin-left: 1.5rem !important; + } + .me-xxl-5 { + margin-left: 3rem !important; + } + .me-xxl-auto { + margin-left: auto !important; + } + .mb-xxl-0 { + margin-bottom: 0 !important; + } + .mb-xxl-1 { + margin-bottom: 0.25rem !important; + } + .mb-xxl-2 { + margin-bottom: 0.5rem !important; + } + .mb-xxl-3 { + margin-bottom: 1rem !important; + } + .mb-xxl-4 { + margin-bottom: 1.5rem !important; + } + .mb-xxl-5 { + margin-bottom: 3rem !important; + } + .mb-xxl-auto { + margin-bottom: auto !important; + } + .ms-xxl-0 { + margin-right: 0 !important; + } + .ms-xxl-1 { + margin-right: 0.25rem !important; + } + .ms-xxl-2 { + margin-right: 0.5rem !important; + } + .ms-xxl-3 { + margin-right: 1rem !important; + } + .ms-xxl-4 { + margin-right: 1.5rem !important; + } + .ms-xxl-5 { + margin-right: 3rem !important; + } + .ms-xxl-auto { + margin-right: auto !important; + } + .p-xxl-0 { + padding: 0 !important; + } + .p-xxl-1 { + padding: 0.25rem !important; + } + .p-xxl-2 { + padding: 0.5rem !important; + } + .p-xxl-3 { + padding: 1rem !important; + } + .p-xxl-4 { + padding: 1.5rem !important; + } + .p-xxl-5 { + padding: 3rem !important; + } + .px-xxl-0 { + padding-left: 0 !important; + padding-right: 0 !important; + } + .px-xxl-1 { + padding-left: 0.25rem !important; + padding-right: 0.25rem !important; + } + .px-xxl-2 { + padding-left: 0.5rem !important; + padding-right: 0.5rem !important; + } + .px-xxl-3 { + padding-left: 1rem !important; + padding-right: 1rem !important; + } + .px-xxl-4 { + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; + } + .px-xxl-5 { + padding-left: 3rem !important; + padding-right: 3rem !important; + } + .py-xxl-0 { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .py-xxl-1 { + padding-top: 0.25rem !important; + padding-bottom: 0.25rem !important; + } + .py-xxl-2 { + padding-top: 0.5rem !important; + padding-bottom: 0.5rem !important; + } + .py-xxl-3 { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + } + .py-xxl-4 { + padding-top: 1.5rem !important; + padding-bottom: 1.5rem !important; + } + .py-xxl-5 { + padding-top: 3rem !important; + padding-bottom: 3rem !important; + } + .pt-xxl-0 { + padding-top: 0 !important; + } + .pt-xxl-1 { + padding-top: 0.25rem !important; + } + .pt-xxl-2 { + padding-top: 0.5rem !important; + } + .pt-xxl-3 { + padding-top: 1rem !important; + } + .pt-xxl-4 { + padding-top: 1.5rem !important; + } + .pt-xxl-5 { + padding-top: 3rem !important; + } + .pe-xxl-0 { + padding-left: 0 !important; + } + .pe-xxl-1 { + padding-left: 0.25rem !important; + } + .pe-xxl-2 { + padding-left: 0.5rem !important; + } + .pe-xxl-3 { + padding-left: 1rem !important; + } + .pe-xxl-4 { + padding-left: 1.5rem !important; + } + .pe-xxl-5 { + padding-left: 3rem !important; + } + .pb-xxl-0 { + padding-bottom: 0 !important; + } + .pb-xxl-1 { + padding-bottom: 0.25rem !important; + } + .pb-xxl-2 { + padding-bottom: 0.5rem !important; + } + .pb-xxl-3 { + padding-bottom: 1rem !important; + } + .pb-xxl-4 { + padding-bottom: 1.5rem !important; + } + .pb-xxl-5 { + padding-bottom: 3rem !important; + } + .ps-xxl-0 { + padding-right: 0 !important; + } + .ps-xxl-1 { + padding-right: 0.25rem !important; + } + .ps-xxl-2 { + padding-right: 0.5rem !important; + } + .ps-xxl-3 { + padding-right: 1rem !important; + } + .ps-xxl-4 { + padding-right: 1.5rem !important; + } + .ps-xxl-5 { + padding-right: 3rem !important; + } +} +@media print { + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-grid { + display: grid !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } + .d-print-none { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap-grid.rtl.css.map */ \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css.map b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css.map new file mode 100644 index 0000000..f479a7d --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-grid.css","../../scss/_containers.scss","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_variables.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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IGI;IAOI,0BAAA;EPwrDV;EO/rDM;IAOI,gCAAA;EP2rDV;EOlsDM;IAOI,yBAAA;EP8rDV;EOrsDM;IAOI,wBAAA;EPisDV;EOxsDM;IAOI,yBAAA;EPosDV;EO3sDM;IAOI,6BAAA;EPusDV;EO9sDM;IAOI,8BAAA;EP0sDV;EOjtDM;IAOI,wBAAA;EP6sDV;EOptDM;IAOI,+BAAA;EPgtDV;EOvtDM;IAOI,wBAAA;EPmtDV;EO1tDM;IAOI,yBAAA;EPstDV;EO7tDM;IAOI,8BAAA;EPytDV;EOhuDM;IAOI,iCAAA;EP4tDV;EOnuDM;IAOI,sCAAA;EP+tDV;EOtuDM;IAOI,yCAAA;EPkuDV;EOzuDM;IAOI,uBAAA;EPquDV;EO5uDM;IAOI,uBAAA;EPwuDV;EO/uDM;IAOI,yBAAA;EP2uDV;EOlvDM;IAOI,yBAAA;EP8uDV;EOrvDM;IAOI,0BAAA;EPivDV;EOxvDM;IAOI,4BAAA;EPovDV;EO3vDM;IAOI,kCAAA;EPuvDV;EO9vDM;IAOI,sCAAA;EP0vDV;EOjwDM;IAOI,oCAAA;EP6vDV;EOpwDM;IAOI,kCAAA;EPgwDV;EOvwDM;IAOI,yCAAA;EPmwDV;EO1wDM;IAOI,wCAAA;EPswDV;EO7wDM;IAOI,wCAAA;EPywDV;EOhxDM;IAOI,kCAAA;EP4wDV;EOnxDM;IAOI,gCAAA;EP+wDV;EOtxDM;IAOI,8BAAA;EPkxDV;EOzxDM;IAOI,gCAAA;EPqxDV;EO5xDM;IAOI,+BAAA;EPwxDV;EO/xDM;IAOI,oCAAA;EP2xDV;EOlyDM;IAOI,kCAAA;EP8xDV;EOryDM;IAOI,gCAAA;EPiyDV;EOxyDM;IAOI,uCAAA;EPoyDV;EO3yDM;IAOI,sCAAA;EPuyDV;EO9yDM;IAOI,iCAAA;EP0yDV;EOjzDM;IAOI,2BAAA;EP6yDV;EOpzDM;IAOI,iCAAA;EPgzDV;EOvzDM;IAOI,+BAAA;EPmzDV;EO1zDM;IAOI,6BAAA;EPszDV;EO7zDM;IAOI,+BAAA;EPyzDV;EOh0DM;IAOI,8BAAA;EP4zDV;EOn0DM;IAOI,oBAAA;EP+zDV;EOt0DM;IAOI,mBAAA;EPk0DV;EOz0DM;IAOI,mBAAA;EPq0DV;EO5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;EP8lEV;EOrmEM;IAOI,kCAAA;EPimEV;EOxmEM;IAOI,iCAAA;EPomEV;EO3mEM;IAOI,+BAAA;EPumEV;EO9mEM;IAOI,iCAAA;EP0mEV;EOjnEM;IAOI,+BAAA;EP6mEV;EOpnEM;IAOI,2BAAA;EPgnEV;EOvnEM;IAOI,iCAAA;EPmnEV;EO1nEM;IAOI,gCAAA;EPsnEV;EO7nEM;IAOI,8BAAA;EPynEV;EOhoEM;IAOI,gCAAA;EP4nEV;EOnoEM;IAOI,8BAAA;EP+nEV;AACF;AG1oEI;EIGI;IAOI,0BAAA;EPooEV;EO3oEM;IAOI,gCAAA;EPuoEV;EO9oEM;IAOI,yBAAA;EP0oEV;EOjpEM;IAOI,wBAAA;EP6oEV;EOppEM;IAOI,yBAAA;EPgpEV;EOvpEM;IAOI,6BAAA;EPmpEV;EO1pEM;IAOI,8BAAA;EPspEV;EO7pEM;IAOI,wBAAA;EPypEV;EOhqEM;IAOI,+BAAA;EP4pEV;EOnqEM;IAOI,wBAAA;EP+pEV;EOtqEM;IAOI,yBAAA;EPkqEV;EOzqEM;IAOI,8BAAA;EPqqEV;EO5qEM;IAOI,iCAAA;EPwqEV;EO/qEM;IAOI,sCAAA;EP2qEV;EOlrEM;IAOI,yCAAA;EP8qEV;EOrrEM;IAOI,uBAAA;EPirEV;EOxrEM;IAOI,uBAAA;EPorEV;EO3rEM;IAOI,yBAAA;EPurEV;EO9rEM;IAOI,yBAAA;EP0rEV;EOjsEM;IAOI,0BAAA;EP6rEV;EOpsEM;IAOI,4BAAA;EPgsEV;EOvsEM;IAOI,kCAAA;EPmsEV;EO1sEM;IAOI,sCAAA;EPssEV;EO7sEM;IAOI,oCAAA;EPysEV;EOhtEM;IAOI,kCAAA;EP4sEV;EOntEM;IAOI,yCAAA;EP+sEV;EOttEM;IAOI,wCAAA;EPktEV;EOztEM;IAOI,wCAAA;EPqtEV;EO5tEM;IAOI,kCAAA;EPwtEV;EO/tEM;IAOI,gCAAA;EP2tEV;EOluEM;IAOI,8BAAA;EP8tEV;EOruEM;IAOI,gCAAA;EPiuEV;EOxuEM;IAOI,+BAAA;EPouEV;EO3uEM;IAOI,oCAAA;EPuuEV;EO9uEM;IAOI,kCAAA;EP0uEV;EOjvEM;IAOI,gCAAA;EP6uEV;EOpvEM;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gFV;EO7gFM;IAOI,+BAAA;EPygFV;EOhhFM;IAOI,8BAAA;EP4gFV;EOnhFM;IAOI,4BAAA;EP+gFV;EOthFM;IAOI,8BAAA;EPkhFV;EOzhFM;IAOI,4BAAA;EPqhFV;EO5hFM;IAOI,0BAAA;EPwhFV;EO/hFM;IAOI,gCAAA;EP2hFV;EOliFM;IAOI,+BAAA;EP8hFV;EOriFM;IAOI,6BAAA;EPiiFV;EOxiFM;IAOI,+BAAA;EPoiFV;EO3iFM;IAOI,6BAAA;EPuiFV;EO9iFM;IAOI,4BAAA;EP0iFV;EOjjFM;IAOI,kCAAA;EP6iFV;EOpjFM;IAOI,iCAAA;EPgjFV;EOvjFM;IAOI,+BAAA;EPmjFV;EO1jFM;IAOI,iCAAA;EPsjFV;EO7jFM;IAOI,+BAAA;EPyjFV;EOhkFM;IAOI,2BAAA;EP4jFV;EOnkFM;IAOI,iCAAA;EP+jFV;EOtkFM;IAOI,gCAAA;EPkkFV;EOzkFM;IAOI,8BAAA;EPqkFV;EO5kFM;IAOI,gCAAA;EPwkFV;EO/kFM;IAOI,8BAAA;EP2kFV;AACF;AGtlFI;EIGI;IAOI,0BAAA;EPglFV;EOvlFM;IAOI,gCAAA;EPmlFV;EO1lFM;IAOI,yBAAA;EPslFV;EO7lFM;IAOI,wBAAA;EPylFV;EOhmFM;IAOI,yBAAA;EP4lFV;EOnmFM;IAOI,6BAAA;EP+lFV;EOtmFM;IAOI,8BAAA;EPkmFV;EOzmFM;IAOI,wBAAA;EPqmFV;EO5mFM;IAOI,+BAAA;EPwmFV;EO/mFM;IAOI,wBAAA;EP2mFV;EOlnFM;IAOI,yBAAA;EP8mFV;EOrnFM;IAOI,8BAAA;EPinFV;EOxnFM;IAOI,iCAAA;EPonFV;EO3nFM;IAOI,sCAAA;EPunFV;EO9nFM;IAOI,yCAAA;EP0nFV;EOjoFM;IAOI,uBAAA;EP6nFV;EOpoFM;IAOI,uBAAA;EPgoFV;EOvoFM;IAOI,yBAAA;EPmoFV;EO1oFM;IAOI,yBAAA;EPsoFV;EO7oFM;IAOI,0BAAA;EPyoFV;EOhpFM;IAOI,4BAAA;EP4oFV;EOnpFM;IAOI,kCAAA;EP+oFV;EOtpFM;IAOI,sCAAA;EPkpFV;EOzpFM;IAOI,oCAAA;EPqpFV;EO5pFM;IAOI,kCAAA;EPwpFV;EO/pFM;IAOI,yCAAA;EP2pFV;EOlqFM;IAOI,wCAAA;EP8pFV;EOrqFM;IAOI,wCAAA;EPiqFV;EOxqFM;IAOI,kCAAA;EPoqFV;EO3qFM;IAOI,gCAAA;EPuqFV;EO9qFM;IAOI,8BAAA;EP0qFV;EOjrFM;IAOI,gCAAA;EP6qFV;EOprFM;IAOI,+BAAA;EPgrFV;EOvrFM;IAOI,oCAAA;EPmrFV;EO1rFM;IAOI,kCAAA;EPsrFV;EO7rFM;IAOI,gCAAA;EPyrFV;EOhsFM;IAOI,uCAAA;EP4rFV;EOnsFM;IAOI,sCAAA;EP+rFV;EOtsFM;IAOI,iCAAA;EPksFV;EOzsFM;IAOI,2BAAA;EPqsFV;EO5sFM;IAOI,iCAAA;EPwsFV;EO/sFM;IAOI,+BAAA;EP2sFV;EOltFM;IAOI,6BAAA;EP8sFV;EOrtFM;IAOI,+BAAA;EPitFV;EOxtFM;IAOI,8BAAA;EPotFV;EO3tFM;IAOI,oBAAA;EPutFV;EO9tFM;IAOI,mBAAA;EP0tFV;EOjuFM;IAOI,mBAAA;EP6tFV;EOpuFM;IAOI,mBAAA;EPguFV;EOvuFM;IAOI,mBAAA;EPmuFV;EO1uFM;IAOI,mBAAA;EPsuFV;EO7uFM;IAOI,mBAAA;EPyuFV;EOhvFM;IAOI,mBAAA;EP4uFV;EOnvFM;IAOI,oBAAA;EP+uFV;EOtvFM;IAOI,0BAAA;EPkvFV;EOzvFM;IAOI,yBAAA;EPqvFV;EO5vFM;IAOI,uBAAA;EPwvFV;EO/vFM;IAOI,yBAAA;EP2vFV;EOlwFM;IAOI,uBAAA;EP8vFV;EOrwFM;IAOI,uBAAA;EPiwFV;EOxwFM;IAOI,yBAAA;IAAA,0BAAA;EPqwFV;EO5wFM;IAOI,+BAAA;IAAA,gCAAA;EPywFV;EOhxFM;IAOI,8BAAA;IAAA,+BAAA;EP6wFV;EOpxFM;IAOI,4BAAA;IAAA,6BAAA;EPixFV;EOxxFM;IAOI,8BAAA;IAAA,+BAAA;EPqxFV;EO5xFM;IAOI,4BAAA;IAAA,6BAAA;EPyxFV;EOhyFM;IAOI,4BAAA;IAAA,6BAAA;EP6xFV;EOpyFM;IAOI,wBAAA;IAAA,2BAAA;EPiyFV;EOxyFM;IAOI,8BAAA;IAAA,iCAAA;EPqyFV;EO5yFM;IAOI,6BAAA;IAAA,gCAAA;EPyyFV;EOhzFM;IAOI,2BAAA;IAAA,8BAAA;EP6yFV;EOpzFM;IAOI,6BAAA;IAAA,gCAAA;EPizFV;EOxzFM;IAOI,2BAAA;IAAA,8BAAA;EPqzFV;EO5zFM;IAOI,2BAAA;IAAA,8BAAA;EPyzFV;EOh0FM;IAOI,wBAAA;EP4zFV;EOn0FM;IAOI,8BAAA;EP+zFV;EOt0FM;IAOI,6BAAA;EPk0FV;EOz0FM;IAOI,2BAAA;EPq0FV;EO50FM;IAOI,6BAAA;EPw0FV;EO/0FM;IAOI,2BAAA;EP20FV;EOl1FM;IAOI,2BAAA;EP80FV;EOr1FM;IAOI,yBAAA;EPi1FV;EOx1FM;IAOI,+BAAA;EPo1FV;EO31FM;IAOI,8BAAA;EPu1FV;EO91FM;IAOI,4BAAA;EP01FV;EOj2FM;IAOI,8BAAA;EP61FV;EOp2FM;IAOI,4BAAA;EPg2FV;EOv2FM;IAOI,4BAAA;EPm2FV;EO12FM;IAOI,2BAAA;EPs2FV;EO72FM;IAOI,iCAAA;EPy2FV;EOh3FM;IAOI,gCAAA;EP42FV;EOn3FM;IAOI,8BAAA;EP+2FV;EOt3FM;IAOI,gCAAA;EPk3FV;EOz3FM;IAOI,8BAAA;EPq3FV;EO53FM;IAOI,8BAAA;EPw3FV;EO/3FM;IAOI,0BAAA;EP23FV;EOl4FM;IAOI,gCAAA;EP83FV;EOr4FM;IAOI,+BAAA;EPi4FV;EOx4FM;IAOI,6BAAA;EPo4FV;EO34FM;IAOI,+BAAA;EPu4FV;EO94FM;IAOI,6BAAA;EP04FV;EOj5FM;IAOI,6BAAA;EP64FV;EOp5FM;IAOI,qBAAA;EPg5FV;EOv5FM;IAOI,2BAAA;EPm5FV;EO15FM;IAOI,0BAAA;EPs5FV;EO75FM;IAOI,wBAAA;EPy5FV;EOh6FM;IAOI,0BAAA;EP45FV;EOn6FM;IAOI,wBAAA;EP+5FV;EOt6FM;IAOI,0BAAA;IAAA,2BAAA;EPm6FV;EO16FM;IAOI,gCAAA;IAAA,iCAAA;EPu6FV;EO96FM;IAOI,+BAAA;IAAA,gCAAA;EP26FV;EOl7FM;IAOI,6BAAA;IAAA,8BAAA;EP+6FV;EOt7FM;IAOI,+BAAA;IAAA,gCAAA;EPm7FV;EO17FM;IAOI,6BAAA;IAAA,8BAAA;EPu7FV;EO97FM;IAOI,yBAAA;IAAA,4BAAA;EP27FV;EOl8FM;IAOI,+BAAA;IAAA,kCAAA;EP+7FV;EOt8FM;IAOI,8BAAA;IAAA,iCAAA;EPm8FV;EO18FM;IAOI,4BAAA;IAAA,+BAAA;EPu8FV;EO98FM;IAOI,8BAAA;IAAA,iCAAA;EP28FV;EOl9FM;IAOI,4BAAA;IAAA,+BAAA;EP+8FV;EOt9FM;IAOI,yBAAA;EPk9FV;EOz9FM;IAOI,+BAAA;EPq9FV;EO59FM;IAOI,8BAAA;EPw9FV;EO/9FM;IAOI,4BAAA;EP29FV;EOl+FM;IAOI,8BAAA;EP89FV;EOr+FM;IAOI,4BAAA;EPi+FV;EOx+FM;IAOI,0BAAA;EPo+FV;EO3+FM;IAOI,gCAAA;EPu+FV;EO9+FM;IAOI,+BAAA;EP0+FV;EOj/FM;IAOI,6BAAA;EP6+FV;EOp/FM;IAOI,+BAAA;EPg/FV;EOv/FM;IAOI,6BAAA;EPm/FV;EO1/FM;IAOI,4BAAA;EPs/FV;EO7/FM;IAOI,kCAAA;EPy/FV;EOhgGM;IAOI,iCAAA;EP4/FV;EOngGM;IAOI,+BAAA;EP+/FV;EOtgGM;IAOI,iCAAA;EPkgGV;EOzgGM;IAOI,+BAAA;EPqgGV;EO5gGM;IAOI,2BAAA;EPwgGV;EO/gGM;IAOI,iCAAA;EP2gGV;EOlhGM;IAOI,gCAAA;EP8gGV;EOrhGM;IAOI,8BAAA;EPihGV;EOxhGM;IAOI,gCAAA;EPohGV;EO3hGM;IAOI,8BAAA;EPuhGV;AACF;AGliGI;EIGI;IAOI,0BAAA;EP4hGV;EOniGM;IAOI,gCAAA;EP+hGV;EOtiGM;IAOI,yBAAA;EPkiGV;EOziGM;IAOI,wBAAA;EPqiGV;EO5iGM;IAOI,yBAAA;EPwiGV;EO/iGM;IAOI,6BAAA;EP2iGV;EOljGM;IAOI,8BAAA;EP8iGV;EOrjGM;IAOI,wBAAA;EPijGV;EOxjGM;IAOI,+BAAA;EPojGV;EO3jGM;IAOI,wBAAA;EPujGV;EO9jGM;IAOI,yBAAA;EP0jGV;EOjkGM;IAOI,8BAAA;EP6jGV;EOpkGM;IAOI,iCAAA;EPgkGV;EOvkGM;IAOI,sCAAA;EPmkGV;EO1kGM;IAOI,yCAAA;EPskGV;EO7kGM;IAOI,uBAAA;EPykGV;EOhlGM;IAOI,uBAAA;EP4kGV;EOnlGM;IAOI,yBAAA;EP+kGV;EOtlGM;IAOI,yBAAA;EPklGV;EOzlGM;IAOI,0BAAA;EPqlGV;EO5lGM;IAOI,4BAAA;EPwlGV;EO/lGM;IAOI,kCAAA;EP2lGV;EOlmGM;IAOI,sCAAA;EP8lGV;EOrmGM;IAOI,oCAAA;EPimGV;EOxmGM;IAOI,kCAAA;EPomGV;EO3mGM;IAOI,yCAAA;EPumGV;EO9mGM;IAOI,wCAAA;EP0mGV;EOjnGM;IAOI,wCAAA;EP6mGV;EOpnGM;IAOI,kCAAA;EPgnGV;EOvnGM;IAOI,gCAAA;EPmnGV;EO1nGM;IAOI,8BAAA;EPsnGV;EO7nGM;IAOI,gCAAA;EPynGV;EOhoGM;IAOI,+BAAA;EP4nGV;EOnoGM;IAOI,oCAAA;EP+nGV;EOtoGM;IAOI,kCAAA;EPkoGV;EOzoGM;IAOI,gCAAA;EPqoGV;EO5oGM;IAOI,uCAAA;EPwoGV;EO/oGM;IAOI,sCAAA;EP2oGV;EOlpGM;IAOI,iCAAA;EP8oGV;EOrpGM;IAOI,2BAAA;EPipGV;EOxpGM;IAOI,iCAAA;EPopGV;EO3pGM;IAOI,+BAAA;EPupGV;EO9pGM;IAOI,6BAAA;EP0pGV;EOjqGM;IAOI,+BAAA;EP6pGV;EOpqGM;IAOI,8BAAA;EPgqGV;EOvqGM;IAOI,oBAAA;EPmqGV;EO1qGM;IAOI,mBAAA;EPsqGV;EO7qGM;IAOI,mBAAA;EPyqGV;EOhrGM;IAOI,mBAAA;EP4qGV;EOnrGM;IAOI,mBAAA;EP+qGV;EOtrGM;IAOI,mBAAA;EPkrGV;EOzrGM;IAOI,mBAAA;EPqrGV;EO5rGM;IAOI,mBAAA;EPwrGV;EO/rGM;IAOI,oBAAA;EP2rGV;EOlsGM;IAOI,0BAAA;EP8rGV;EOrsGM;IAOI,yBAAA;EPisGV;EOxsGM;IAOI,uBAAA;EPosGV;EO3sGM;IAOI,yBAAA;EPusGV;EO9sGM;IAOI,uBAAA;EP0sGV;EOjtGM;IAOI,uBAAA;EP6sGV;EOptGM;IAOI,yBA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Pw+GV;EO/+GM;IAOI,gCAAA;EP2+GV;EOl/GM;IAOI,yBAAA;EP8+GV;EOr/GM;IAOI,wBAAA;EPi/GV;EOx/GM;IAOI,yBAAA;EPo/GV;EO3/GM;IAOI,6BAAA;EPu/GV;EO9/GM;IAOI,8BAAA;EP0/GV;EOjgHM;IAOI,wBAAA;EP6/GV;EOpgHM;IAOI,+BAAA;EPggHV;EOvgHM;IAOI,wBAAA;EPmgHV;EO1gHM;IAOI,yBAAA;EPsgHV;EO7gHM;IAOI,8BAAA;EPygHV;EOhhHM;IAOI,iCAAA;EP4gHV;EOnhHM;IAOI,sCAAA;EP+gHV;EOthHM;IAOI,yCAAA;EPkhHV;EOzhHM;IAOI,uBAAA;EPqhHV;EO5hHM;IAOI,uBAAA;EPwhHV;EO/hHM;IAOI,yBAAA;EP2hHV;EOliHM;IAOI,yBAAA;EP8hHV;EOriHM;IAOI,0BAAA;EPiiHV;EOxiHM;IAOI,4BAAA;EPoiHV;EO3iHM;IAOI,kCAAA;EPuiHV;EO9iHM;IAOI,sCAAA;EP0iHV;EOjjHM;IAOI,oCAAA;EP6iHV;EOpjHM;IAOI,kCAAA;EPgjHV;EOvjHM;IAOI,yCAAA;EPmjHV;EO1jHM;IAOI,wCAAA;EPsjHV;EO7jHM;IAOI,wCAAA;EPyjHV;EOhkHM;IAOI,kCAAA;EP4jHV;EOnkHM;IAOI,gCAAA;EP+jHV;EOtkHM;IAOI,8BAAA;EPkkHV;EOzkHM;IAOI,gCAAA;EPqkHV;EO5kHM;IAOI,+BAAA;EPwkHV;EO/kHM;IAOI,oCAAA;EP2kHV;EOllHM;IAOI,kCAAA;EP8kHV;EOrlHM;IAOI,gCAAA;EPilHV;EOxlHM;IAOI,uCAAA;EPolHV;EO3lHM;IAOI,sCAAA;EPulHV;EO9lHM;IAOI,iCAAA;EP0lHV;EOjmHM;IAOI,2BAAA;EP6lHV;EOpmHM;IAOI,iCAAA;EPgmHV;EOvmHM;IAOI,+BAAA;EPmmHV;EO1mHM;IAOI,6BAAA;EPsmHV;EO7mHM;IAOI,+BAAA;EPymHV;EOhnHM;IAOI,8BAAA;EP4mHV;EOnnHM;IAOI,oBAAA;EP+mHV;EOtnHM;IAOI,mBAAA;EPknHV;EOznHM;IAOI,mBAAA;EPqnHV;EO5nHM;IAOI,mBAAA;E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","file":"bootstrap-grid.rtl.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-right: auto;\n margin-left: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-left: 8.33333333%;\n}\n\n.offset-2 {\n margin-left: 16.66666667%;\n}\n\n.offset-3 {\n margin-left: 25%;\n}\n\n.offset-4 {\n margin-left: 33.33333333%;\n}\n\n.offset-5 {\n margin-left: 41.66666667%;\n}\n\n.offset-6 {\n margin-left: 50%;\n}\n\n.offset-7 {\n margin-left: 58.33333333%;\n}\n\n.offset-8 {\n margin-left: 66.66666667%;\n}\n\n.offset-9 {\n margin-left: 75%;\n}\n\n.offset-10 {\n margin-left: 83.33333333%;\n}\n\n.offset-11 {\n margin-left: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-left: 0;\n }\n .offset-sm-1 {\n margin-left: 8.33333333%;\n }\n .offset-sm-2 {\n margin-left: 16.66666667%;\n }\n .offset-sm-3 {\n margin-left: 25%;\n }\n .offset-sm-4 {\n margin-left: 33.33333333%;\n }\n .offset-sm-5 {\n margin-left: 41.66666667%;\n }\n .offset-sm-6 {\n margin-left: 50%;\n }\n .offset-sm-7 {\n margin-left: 58.33333333%;\n }\n .offset-sm-8 {\n margin-left: 66.66666667%;\n }\n .offset-sm-9 {\n margin-left: 75%;\n }\n .offset-sm-10 {\n margin-left: 83.33333333%;\n }\n .offset-sm-11 {\n margin-left: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-left: 0;\n }\n .offset-md-1 {\n margin-left: 8.33333333%;\n }\n .offset-md-2 {\n margin-left: 16.66666667%;\n }\n .offset-md-3 {\n margin-left: 25%;\n }\n .offset-md-4 {\n margin-left: 33.33333333%;\n }\n .offset-md-5 {\n margin-left: 41.66666667%;\n }\n .offset-md-6 {\n margin-left: 50%;\n }\n .offset-md-7 {\n margin-left: 58.33333333%;\n }\n .offset-md-8 {\n margin-left: 66.66666667%;\n }\n .offset-md-9 {\n margin-left: 75%;\n }\n .offset-md-10 {\n margin-left: 83.33333333%;\n }\n .offset-md-11 {\n margin-left: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-left: 0;\n }\n .offset-lg-1 {\n margin-left: 8.33333333%;\n }\n .offset-lg-2 {\n margin-left: 16.66666667%;\n }\n .offset-lg-3 {\n margin-left: 25%;\n }\n .offset-lg-4 {\n margin-left: 33.33333333%;\n }\n .offset-lg-5 {\n margin-left: 41.66666667%;\n }\n .offset-lg-6 {\n margin-left: 50%;\n }\n .offset-lg-7 {\n margin-left: 58.33333333%;\n }\n .offset-lg-8 {\n margin-left: 66.66666667%;\n }\n .offset-lg-9 {\n margin-left: 75%;\n }\n .offset-lg-10 {\n margin-left: 83.33333333%;\n }\n .offset-lg-11 {\n margin-left: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-left: 0;\n }\n .offset-xl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xl-3 {\n margin-left: 25%;\n }\n .offset-xl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xl-6 {\n margin-left: 50%;\n }\n .offset-xl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xl-9 {\n margin-left: 75%;\n }\n .offset-xl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xl-11 {\n margin-left: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-left: 0;\n }\n .offset-xxl-1 {\n margin-left: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-left: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-left: 25%;\n }\n .offset-xxl-4 {\n margin-left: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-left: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-left: 50%;\n }\n .offset-xxl-7 {\n margin-left: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-left: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-left: 75%;\n }\n .offset-xxl-10 {\n margin-left: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-left: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n}\n\n.mx-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n}\n\n.mx-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n}\n\n.mx-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n}\n\n.mx-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n}\n\n.mx-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n}\n\n.mx-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-right: 0 !important;\n}\n\n.me-1 {\n margin-right: 0.25rem !important;\n}\n\n.me-2 {\n margin-right: 0.5rem !important;\n}\n\n.me-3 {\n margin-right: 1rem !important;\n}\n\n.me-4 {\n margin-right: 1.5rem !important;\n}\n\n.me-5 {\n margin-right: 3rem !important;\n}\n\n.me-auto {\n margin-right: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-left: 0 !important;\n}\n\n.ms-1 {\n margin-left: 0.25rem !important;\n}\n\n.ms-2 {\n margin-left: 0.5rem !important;\n}\n\n.ms-3 {\n margin-left: 1rem !important;\n}\n\n.ms-4 {\n margin-left: 1.5rem !important;\n}\n\n.ms-5 {\n margin-left: 3rem !important;\n}\n\n.ms-auto {\n margin-left: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n}\n\n.px-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n}\n\n.px-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n}\n\n.px-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n}\n\n.px-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n}\n\n.px-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-right: 0 !important;\n}\n\n.pe-1 {\n padding-right: 0.25rem !important;\n}\n\n.pe-2 {\n padding-right: 0.5rem !important;\n}\n\n.pe-3 {\n padding-right: 1rem !important;\n}\n\n.pe-4 {\n padding-right: 1.5rem !important;\n}\n\n.pe-5 {\n padding-right: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-left: 0 !important;\n}\n\n.ps-1 {\n padding-left: 0.25rem !important;\n}\n\n.ps-2 {\n padding-left: 0.5rem !important;\n}\n\n.ps-3 {\n padding-left: 1rem !important;\n}\n\n.ps-4 {\n padding-left: 1.5rem !important;\n}\n\n.ps-5 {\n padding-left: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-sm-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-sm-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-sm-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-right: 0 !important;\n }\n .me-sm-1 {\n margin-right: 0.25rem !important;\n }\n .me-sm-2 {\n margin-right: 0.5rem !important;\n }\n .me-sm-3 {\n margin-right: 1rem !important;\n }\n .me-sm-4 {\n margin-right: 1.5rem !important;\n }\n .me-sm-5 {\n margin-right: 3rem !important;\n }\n .me-sm-auto {\n margin-right: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-left: 0 !important;\n }\n .ms-sm-1 {\n margin-left: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-left: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-left: 1rem !important;\n }\n .ms-sm-4 {\n margin-left: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-left: 3rem !important;\n }\n .ms-sm-auto {\n margin-left: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-sm-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-sm-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-sm-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-sm-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-sm-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-right: 0 !important;\n }\n .pe-sm-1 {\n padding-right: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-right: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-right: 1rem !important;\n }\n .pe-sm-4 {\n padding-right: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-right: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-left: 0 !important;\n }\n .ps-sm-1 {\n padding-left: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-left: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-left: 1rem !important;\n }\n .ps-sm-4 {\n padding-left: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-md-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-md-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-md-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-md-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-md-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-md-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-right: 0 !important;\n }\n .me-md-1 {\n margin-right: 0.25rem !important;\n }\n .me-md-2 {\n margin-right: 0.5rem !important;\n }\n .me-md-3 {\n margin-right: 1rem !important;\n }\n .me-md-4 {\n margin-right: 1.5rem !important;\n }\n .me-md-5 {\n margin-right: 3rem !important;\n }\n .me-md-auto {\n margin-right: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-left: 0 !important;\n }\n .ms-md-1 {\n margin-left: 0.25rem !important;\n }\n .ms-md-2 {\n margin-left: 0.5rem !important;\n }\n .ms-md-3 {\n margin-left: 1rem !important;\n }\n .ms-md-4 {\n margin-left: 1.5rem !important;\n }\n .ms-md-5 {\n margin-left: 3rem !important;\n }\n .ms-md-auto {\n margin-left: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-md-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-md-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-md-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-md-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-md-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-right: 0 !important;\n }\n .pe-md-1 {\n padding-right: 0.25rem !important;\n }\n .pe-md-2 {\n padding-right: 0.5rem !important;\n }\n .pe-md-3 {\n padding-right: 1rem !important;\n }\n .pe-md-4 {\n padding-right: 1.5rem !important;\n }\n .pe-md-5 {\n padding-right: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-left: 0 !important;\n }\n .ps-md-1 {\n padding-left: 0.25rem !important;\n }\n .ps-md-2 {\n padding-left: 0.5rem !important;\n }\n .ps-md-3 {\n padding-left: 1rem !important;\n }\n .ps-md-4 {\n padding-left: 1.5rem !important;\n }\n .ps-md-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-lg-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-lg-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-lg-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-right: 0 !important;\n }\n .me-lg-1 {\n margin-right: 0.25rem !important;\n }\n .me-lg-2 {\n margin-right: 0.5rem !important;\n }\n .me-lg-3 {\n margin-right: 1rem !important;\n }\n .me-lg-4 {\n margin-right: 1.5rem !important;\n }\n .me-lg-5 {\n margin-right: 3rem !important;\n }\n .me-lg-auto {\n margin-right: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-left: 0 !important;\n }\n .ms-lg-1 {\n margin-left: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-left: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-left: 1rem !important;\n }\n .ms-lg-4 {\n margin-left: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-left: 3rem !important;\n }\n .ms-lg-auto {\n margin-left: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-lg-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-lg-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-lg-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-lg-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-lg-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-right: 0 !important;\n }\n .pe-lg-1 {\n padding-right: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-right: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-right: 1rem !important;\n }\n .pe-lg-4 {\n padding-right: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-right: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-left: 0 !important;\n }\n .ps-lg-1 {\n padding-left: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-left: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-left: 1rem !important;\n }\n .ps-lg-4 {\n padding-left: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-right: 0 !important;\n }\n .me-xl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xl-3 {\n margin-right: 1rem !important;\n }\n .me-xl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xl-5 {\n margin-right: 3rem !important;\n }\n .me-xl-auto {\n margin-right: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-left: 0 !important;\n }\n .ms-xl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-left: 1rem !important;\n }\n .ms-xl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-left: 3rem !important;\n }\n .ms-xl-auto {\n margin-left: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-right: 0 !important;\n }\n .pe-xl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-right: 1rem !important;\n }\n .pe-xl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-right: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-left: 0 !important;\n }\n .ps-xl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-left: 1rem !important;\n }\n .ps-xl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-left: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-right: 0 !important;\n margin-left: 0 !important;\n }\n .mx-xxl-1 {\n margin-right: 0.25rem !important;\n margin-left: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-right: 0.5rem !important;\n margin-left: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-right: 1rem !important;\n margin-left: 1rem !important;\n }\n .mx-xxl-4 {\n margin-right: 1.5rem !important;\n margin-left: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-right: 3rem !important;\n margin-left: 3rem !important;\n }\n .mx-xxl-auto {\n margin-right: auto !important;\n margin-left: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-right: 0 !important;\n }\n .me-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-right: 1rem !important;\n }\n .me-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-right: 3rem !important;\n }\n .me-xxl-auto {\n margin-right: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-left: 0 !important;\n }\n .ms-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-left: 1rem !important;\n }\n .ms-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-left: 3rem !important;\n }\n .ms-xxl-auto {\n margin-left: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-right: 0 !important;\n padding-left: 0 !important;\n }\n .px-xxl-1 {\n padding-right: 0.25rem !important;\n padding-left: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-right: 0.5rem !important;\n padding-left: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-right: 1rem !important;\n padding-left: 1rem !important;\n }\n .px-xxl-4 {\n padding-right: 1.5rem !important;\n padding-left: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-right: 3rem !important;\n padding-left: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-right: 0 !important;\n }\n .pe-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-right: 1rem !important;\n }\n .pe-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-right: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-left: 0 !important;\n }\n .ps-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-left: 1rem !important;\n }\n .ps-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-left: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=bootstrap-grid.css.map */\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Variables\n//\n// Variables should follow the `$component-state-property-size` formula for\n// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.\n\n// Color system\n\n// scss-docs-start gray-color-variables\n$white: #fff !default;\n$gray-100: #f8f9fa !default;\n$gray-200: #e9ecef !default;\n$gray-300: #dee2e6 !default;\n$gray-400: #ced4da !default;\n$gray-500: #adb5bd !default;\n$gray-600: #6c757d !default;\n$gray-700: #495057 !default;\n$gray-800: #343a40 !default;\n$gray-900: #212529 !default;\n$black: #000 !default;\n// scss-docs-end gray-color-variables\n\n// fusv-disable\n// scss-docs-start gray-colors-map\n$grays: (\n \"100\": $gray-100,\n \"200\": $gray-200,\n \"300\": $gray-300,\n \"400\": $gray-400,\n \"500\": $gray-500,\n \"600\": $gray-600,\n \"700\": $gray-700,\n \"800\": $gray-800,\n \"900\": $gray-900\n) !default;\n// scss-docs-end gray-colors-map\n// fusv-enable\n\n// scss-docs-start color-variables\n$blue: #0d6efd !default;\n$indigo: #6610f2 !default;\n$purple: #6f42c1 !default;\n$pink: #d63384 !default;\n$red: #dc3545 !default;\n$orange: #fd7e14 !default;\n$yellow: #ffc107 !default;\n$green: #198754 !default;\n$teal: #20c997 !default;\n$cyan: #0dcaf0 !default;\n// scss-docs-end color-variables\n\n// scss-docs-start colors-map\n$colors: (\n \"blue\": $blue,\n \"indigo\": $indigo,\n \"purple\": $purple,\n \"pink\": $pink,\n \"red\": $red,\n \"orange\": $orange,\n \"yellow\": $yellow,\n \"green\": $green,\n \"teal\": $teal,\n \"cyan\": $cyan,\n \"black\": $black,\n \"white\": $white,\n \"gray\": $gray-600,\n \"gray-dark\": $gray-800\n) !default;\n// scss-docs-end colors-map\n\n// The contrast ratio to reach against white, to determine if color changes from \"light\" to \"dark\". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.\n// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast\n$min-contrast-ratio: 4.5 !default;\n\n// Customize the light and dark text colors for use in our color contrast function.\n$color-contrast-dark: $black !default;\n$color-contrast-light: $white !default;\n\n// fusv-disable\n$blue-100: tint-color($blue, 80%) !default;\n$blue-200: tint-color($blue, 60%) !default;\n$blue-300: tint-color($blue, 40%) !default;\n$blue-400: tint-color($blue, 20%) !default;\n$blue-500: $blue !default;\n$blue-600: shade-color($blue, 20%) !default;\n$blue-700: shade-color($blue, 40%) !default;\n$blue-800: shade-color($blue, 60%) !default;\n$blue-900: shade-color($blue, 80%) !default;\n\n$indigo-100: tint-color($indigo, 80%) !default;\n$indigo-200: tint-color($indigo, 60%) !default;\n$indigo-300: tint-color($indigo, 40%) !default;\n$indigo-400: tint-color($indigo, 20%) !default;\n$indigo-500: $indigo !default;\n$indigo-600: shade-color($indigo, 20%) !default;\n$indigo-700: shade-color($indigo, 40%) !default;\n$indigo-800: shade-color($indigo, 60%) !default;\n$indigo-900: shade-color($indigo, 80%) !default;\n\n$purple-100: tint-color($purple, 80%) !default;\n$purple-200: tint-color($purple, 60%) !default;\n$purple-300: tint-color($purple, 40%) !default;\n$purple-400: tint-color($purple, 20%) !default;\n$purple-500: $purple !default;\n$purple-600: shade-color($purple, 20%) !default;\n$purple-700: shade-color($purple, 40%) !default;\n$purple-800: shade-color($purple, 60%) !default;\n$purple-900: shade-color($purple, 80%) !default;\n\n$pink-100: tint-color($pink, 80%) !default;\n$pink-200: tint-color($pink, 60%) !default;\n$pink-300: tint-color($pink, 40%) !default;\n$pink-400: tint-color($pink, 20%) !default;\n$pink-500: $pink !default;\n$pink-600: shade-color($pink, 20%) !default;\n$pink-700: shade-color($pink, 40%) !default;\n$pink-800: shade-color($pink, 60%) !default;\n$pink-900: shade-color($pink, 80%) !default;\n\n$red-100: tint-color($red, 80%) !default;\n$red-200: tint-color($red, 60%) !default;\n$red-300: tint-color($red, 40%) !default;\n$red-400: tint-color($red, 20%) !default;\n$red-500: $red !default;\n$red-600: shade-color($red, 20%) !default;\n$red-700: shade-color($red, 40%) !default;\n$red-800: shade-color($red, 60%) !default;\n$red-900: shade-color($red, 80%) !default;\n\n$orange-100: tint-color($orange, 80%) !default;\n$orange-200: tint-color($orange, 60%) !default;\n$orange-300: tint-color($orange, 40%) !default;\n$orange-400: tint-color($orange, 20%) !default;\n$orange-500: $orange !default;\n$orange-600: shade-color($orange, 20%) !default;\n$orange-700: shade-color($orange, 40%) !default;\n$orange-800: shade-color($orange, 60%) !default;\n$orange-900: shade-color($orange, 80%) !default;\n\n$yellow-100: tint-color($yellow, 80%) !default;\n$yellow-200: tint-color($yellow, 60%) !default;\n$yellow-300: tint-color($yellow, 40%) !default;\n$yellow-400: tint-color($yellow, 20%) !default;\n$yellow-500: $yellow !default;\n$yellow-600: shade-color($yellow, 20%) !default;\n$yellow-700: shade-color($yellow, 40%) !default;\n$yellow-800: shade-color($yellow, 60%) !default;\n$yellow-900: shade-color($yellow, 80%) !default;\n\n$green-100: tint-color($green, 80%) !default;\n$green-200: tint-color($green, 60%) !default;\n$green-300: tint-color($green, 40%) !default;\n$green-400: tint-color($green, 20%) !default;\n$green-500: $green !default;\n$green-600: shade-color($green, 20%) !default;\n$green-700: shade-color($green, 40%) !default;\n$green-800: shade-color($green, 60%) !default;\n$green-900: shade-color($green, 80%) !default;\n\n$teal-100: tint-color($teal, 80%) !default;\n$teal-200: tint-color($teal, 60%) !default;\n$teal-300: tint-color($teal, 40%) !default;\n$teal-400: tint-color($teal, 20%) !default;\n$teal-500: $teal !default;\n$teal-600: shade-color($teal, 20%) !default;\n$teal-700: shade-color($teal, 40%) !default;\n$teal-800: shade-color($teal, 60%) !default;\n$teal-900: shade-color($teal, 80%) !default;\n\n$cyan-100: tint-color($cyan, 80%) !default;\n$cyan-200: tint-color($cyan, 60%) !default;\n$cyan-300: tint-color($cyan, 40%) !default;\n$cyan-400: tint-color($cyan, 20%) !default;\n$cyan-500: $cyan !default;\n$cyan-600: shade-color($cyan, 20%) !default;\n$cyan-700: shade-color($cyan, 40%) !default;\n$cyan-800: shade-color($cyan, 60%) !default;\n$cyan-900: shade-color($cyan, 80%) !default;\n\n$blues: (\n \"blue-100\": $blue-100,\n \"blue-200\": $blue-200,\n \"blue-300\": $blue-300,\n \"blue-400\": $blue-400,\n \"blue-500\": $blue-500,\n \"blue-600\": $blue-600,\n \"blue-700\": $blue-700,\n \"blue-800\": $blue-800,\n \"blue-900\": $blue-900\n) !default;\n\n$indigos: (\n \"indigo-100\": $indigo-100,\n \"indigo-200\": $indigo-200,\n \"indigo-300\": $indigo-300,\n \"indigo-400\": $indigo-400,\n \"indigo-500\": $indigo-500,\n \"indigo-600\": $indigo-600,\n \"indigo-700\": $indigo-700,\n \"indigo-800\": $indigo-800,\n \"indigo-900\": $indigo-900\n) !default;\n\n$purples: (\n \"purple-100\": $purple-100,\n \"purple-200\": $purple-200,\n \"purple-300\": $purple-300,\n \"purple-400\": $purple-400,\n \"purple-500\": $purple-500,\n \"purple-600\": $purple-600,\n \"purple-700\": $purple-700,\n \"purple-800\": $purple-800,\n \"purple-900\": $purple-900\n) !default;\n\n$pinks: (\n \"pink-100\": $pink-100,\n \"pink-200\": $pink-200,\n \"pink-300\": $pink-300,\n \"pink-400\": $pink-400,\n \"pink-500\": $pink-500,\n \"pink-600\": $pink-600,\n \"pink-700\": $pink-700,\n \"pink-800\": $pink-800,\n \"pink-900\": $pink-900\n) !default;\n\n$reds: (\n \"red-100\": $red-100,\n \"red-200\": $red-200,\n \"red-300\": $red-300,\n \"red-400\": $red-400,\n \"red-500\": $red-500,\n \"red-600\": $red-600,\n \"red-700\": $red-700,\n \"red-800\": $red-800,\n \"red-900\": $red-900\n) !default;\n\n$oranges: (\n \"orange-100\": $orange-100,\n \"orange-200\": $orange-200,\n \"orange-300\": $orange-300,\n \"orange-400\": $orange-400,\n \"orange-500\": $orange-500,\n \"orange-600\": $orange-600,\n \"orange-700\": $orange-700,\n \"orange-800\": $orange-800,\n \"orange-900\": $orange-900\n) !default;\n\n$yellows: (\n \"yellow-100\": $yellow-100,\n \"yellow-200\": $yellow-200,\n \"yellow-300\": $yellow-300,\n \"yellow-400\": $yellow-400,\n \"yellow-500\": $yellow-500,\n \"yellow-600\": $yellow-600,\n \"yellow-700\": $yellow-700,\n \"yellow-800\": $yellow-800,\n \"yellow-900\": $yellow-900\n) !default;\n\n$greens: (\n \"green-100\": $green-100,\n \"green-200\": $green-200,\n \"green-300\": $green-300,\n \"green-400\": $green-400,\n \"green-500\": $green-500,\n \"green-600\": $green-600,\n \"green-700\": $green-700,\n \"green-800\": $green-800,\n \"green-900\": $green-900\n) !default;\n\n$teals: (\n \"teal-100\": $teal-100,\n \"teal-200\": $teal-200,\n \"teal-300\": $teal-300,\n \"teal-400\": $teal-400,\n \"teal-500\": $teal-500,\n \"teal-600\": $teal-600,\n \"teal-700\": $teal-700,\n \"teal-800\": $teal-800,\n \"teal-900\": $teal-900\n) !default;\n\n$cyans: (\n \"cyan-100\": $cyan-100,\n \"cyan-200\": $cyan-200,\n \"cyan-300\": $cyan-300,\n \"cyan-400\": $cyan-400,\n \"cyan-500\": $cyan-500,\n \"cyan-600\": $cyan-600,\n \"cyan-700\": $cyan-700,\n \"cyan-800\": $cyan-800,\n \"cyan-900\": $cyan-900\n) !default;\n// fusv-enable\n\n// scss-docs-start theme-color-variables\n$primary: $blue !default;\n$secondary: $gray-600 !default;\n$success: $green !default;\n$info: $cyan !default;\n$warning: $yellow !default;\n$danger: $red !default;\n$light: $gray-100 !default;\n$dark: $gray-900 !default;\n// scss-docs-end theme-color-variables\n\n// scss-docs-start theme-colors-map\n$theme-colors: (\n \"primary\": $primary,\n \"secondary\": $secondary,\n \"success\": $success,\n \"info\": $info,\n \"warning\": $warning,\n \"danger\": $danger,\n \"light\": $light,\n \"dark\": $dark\n) !default;\n// scss-docs-end theme-colors-map\n\n// Characters which are escaped by the escape-svg function\n$escaped-characters: (\n (\"<\", \"%3c\"),\n (\">\", \"%3e\"),\n (\"#\", \"%23\"),\n (\"(\", \"%28\"),\n (\")\", \"%29\"),\n) !default;\n\n// Options\n//\n// Quickly modify global styling by enabling or disabling optional features.\n\n$enable-caret: true !default;\n$enable-rounded: true !default;\n$enable-shadows: false !default;\n$enable-gradients: false !default;\n$enable-transitions: true !default;\n$enable-reduced-motion: true !default;\n$enable-smooth-scroll: true !default;\n$enable-grid-classes: true !default;\n$enable-container-classes: true !default;\n$enable-cssgrid: false !default;\n$enable-button-pointers: true !default;\n$enable-rfs: true !default;\n$enable-validation-icons: true !default;\n$enable-negative-margins: false !default;\n$enable-deprecation-messages: true !default;\n$enable-important-utilities: true !default;\n\n// Prefix for :root CSS variables\n\n$variable-prefix: bs- !default; // Deprecated in v5.2.0 for the shorter `$prefix`\n$prefix: $variable-prefix !default;\n\n// Gradient\n//\n// The gradient which is added to components if `$enable-gradients` is `true`\n// This gradient is also added to elements with `.bg-gradient`\n// scss-docs-start variable-gradient\n$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;\n// scss-docs-end variable-gradient\n\n// Spacing\n//\n// Control the default styling of most Bootstrap elements by modifying these\n// variables. Mostly focused on spacing.\n// You can add more entries to the $spacers map, should you need more variation.\n\n// scss-docs-start spacer-variables-maps\n$spacer: 1rem !default;\n$spacers: (\n 0: 0,\n 1: $spacer * .25,\n 2: $spacer * .5,\n 3: $spacer,\n 4: $spacer * 1.5,\n 5: $spacer * 3,\n) !default;\n// scss-docs-end spacer-variables-maps\n\n// Position\n//\n// Define the edge positioning anchors of the position utilities.\n\n// scss-docs-start position-map\n$position-values: (\n 0: 0,\n 50: 50%,\n 100: 100%\n) !default;\n// scss-docs-end position-map\n\n// Body\n//\n// Settings for the `` element.\n\n$body-bg: $white !default;\n$body-color: $gray-900 !default;\n$body-text-align: null !default;\n\n// Links\n//\n// Style anchor elements.\n\n$link-color: $primary !default;\n$link-decoration: underline !default;\n$link-shade-percentage: 20% !default;\n$link-hover-color: shift-color($link-color, $link-shade-percentage) !default;\n$link-hover-decoration: null !default;\n\n$stretched-link-pseudo-element: after !default;\n$stretched-link-z-index: 1 !default;\n\n// Paragraphs\n//\n// Style p element.\n\n$paragraph-margin-bottom: 1rem !default;\n\n\n// Grid breakpoints\n//\n// Define the minimum dimensions at which your layout will change,\n// adapting to different screen sizes, for use in media queries.\n\n// scss-docs-start grid-breakpoints\n$grid-breakpoints: (\n xs: 0,\n sm: 576px,\n md: 768px,\n lg: 992px,\n xl: 1200px,\n xxl: 1400px\n) !default;\n// scss-docs-end grid-breakpoints\n\n@include _assert-ascending($grid-breakpoints, \"$grid-breakpoints\");\n@include _assert-starts-at-zero($grid-breakpoints, \"$grid-breakpoints\");\n\n\n// Grid containers\n//\n// Define the maximum width of `.container` for different screen sizes.\n\n// scss-docs-start container-max-widths\n$container-max-widths: (\n sm: 540px,\n md: 720px,\n lg: 960px,\n xl: 1140px,\n xxl: 1320px\n) !default;\n// scss-docs-end container-max-widths\n\n@include _assert-ascending($container-max-widths, \"$container-max-widths\");\n\n\n// Grid columns\n//\n// Set the number of columns and specify the width of the gutters.\n\n$grid-columns: 12 !default;\n$grid-gutter-width: 1.5rem !default;\n$grid-row-columns: 6 !default;\n\n// Container padding\n\n$container-padding-x: $grid-gutter-width !default;\n\n\n// Components\n//\n// Define common padding and border radius sizes and more.\n\n// scss-docs-start border-variables\n$border-width: 1px !default;\n$border-widths: (\n 1: 1px,\n 2: 2px,\n 3: 3px,\n 4: 4px,\n 5: 5px\n) !default;\n\n$border-style: solid !default;\n$border-color: $gray-300 !default;\n$border-color-translucent: rgba($black, .175) !default;\n// scss-docs-end border-variables\n\n// scss-docs-start border-radius-variables\n$border-radius: .375rem !default;\n$border-radius-sm: .25rem !default;\n$border-radius-lg: .5rem !default;\n$border-radius-xl: 1rem !default;\n$border-radius-2xl: 2rem !default;\n$border-radius-pill: 50rem !default;\n// scss-docs-end border-radius-variables\n\n// scss-docs-start box-shadow-variables\n$box-shadow: 0 .5rem 1rem rgba($black, .15) !default;\n$box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default;\n$box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default;\n$box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default;\n// scss-docs-end box-shadow-variables\n\n$component-active-color: $white !default;\n$component-active-bg: $primary !default;\n\n// scss-docs-start caret-variables\n$caret-width: .3em !default;\n$caret-vertical-align: $caret-width * .85 !default;\n$caret-spacing: $caret-width * .85 !default;\n// scss-docs-end caret-variables\n\n$transition-base: all .2s ease-in-out !default;\n$transition-fade: opacity .15s linear !default;\n// scss-docs-start collapse-transition\n$transition-collapse: height .35s ease !default;\n$transition-collapse-width: width .35s ease !default;\n// scss-docs-end collapse-transition\n\n// stylelint-disable function-disallowed-list\n// scss-docs-start aspect-ratios\n$aspect-ratios: (\n \"1x1\": 100%,\n \"4x3\": calc(3 / 4 * 100%),\n \"16x9\": calc(9 / 16 * 100%),\n \"21x9\": calc(9 / 21 * 100%)\n) !default;\n// scss-docs-end aspect-ratios\n// stylelint-enable function-disallowed-list\n\n// Typography\n//\n// Font, line-height, and color for body text, headings, and more.\n\n// scss-docs-start font-variables\n// stylelint-disable value-keyword-case\n$font-family-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\" !default;\n$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace !default;\n// stylelint-enable value-keyword-case\n$font-family-base: var(--#{$prefix}font-sans-serif) !default;\n$font-family-code: var(--#{$prefix}font-monospace) !default;\n\n// $font-size-root affects the value of `rem`, which is used for as well font sizes, paddings, and margins\n// $font-size-base affects the font size of the body text\n$font-size-root: null !default;\n$font-size-base: 1rem !default; // Assumes the browser default, typically `16px`\n$font-size-sm: $font-size-base * .875 !default;\n$font-size-lg: $font-size-base * 1.25 !default;\n\n$font-weight-lighter: lighter !default;\n$font-weight-light: 300 !default;\n$font-weight-normal: 400 !default;\n$font-weight-semibold: 600 !default;\n$font-weight-bold: 700 !default;\n$font-weight-bolder: bolder !default;\n\n$font-weight-base: $font-weight-normal !default;\n\n$line-height-base: 1.5 !default;\n$line-height-sm: 1.25 !default;\n$line-height-lg: 2 !default;\n\n$h1-font-size: $font-size-base * 2.5 !default;\n$h2-font-size: $font-size-base * 2 !default;\n$h3-font-size: $font-size-base * 1.75 !default;\n$h4-font-size: $font-size-base * 1.5 !default;\n$h5-font-size: $font-size-base * 1.25 !default;\n$h6-font-size: $font-size-base !default;\n// scss-docs-end font-variables\n\n// scss-docs-start font-sizes\n$font-sizes: (\n 1: $h1-font-size,\n 2: $h2-font-size,\n 3: $h3-font-size,\n 4: $h4-font-size,\n 5: $h5-font-size,\n 6: $h6-font-size\n) !default;\n// scss-docs-end font-sizes\n\n// scss-docs-start headings-variables\n$headings-margin-bottom: $spacer * .5 !default;\n$headings-font-family: null !default;\n$headings-font-style: null !default;\n$headings-font-weight: 500 !default;\n$headings-line-height: 1.2 !default;\n$headings-color: null !default;\n// scss-docs-end headings-variables\n\n// scss-docs-start display-headings\n$display-font-sizes: (\n 1: 5rem,\n 2: 4.5rem,\n 3: 4rem,\n 4: 3.5rem,\n 5: 3rem,\n 6: 2.5rem\n) !default;\n\n$display-font-family: null !default;\n$display-font-style: null !default;\n$display-font-weight: 300 !default;\n$display-line-height: $headings-line-height !default;\n// scss-docs-end display-headings\n\n// scss-docs-start type-variables\n$lead-font-size: $font-size-base * 1.25 !default;\n$lead-font-weight: 300 !default;\n\n$small-font-size: .875em !default;\n\n$sub-sup-font-size: .75em !default;\n\n$text-muted: $gray-600 !default;\n\n$initialism-font-size: $small-font-size !default;\n\n$blockquote-margin-y: $spacer !default;\n$blockquote-font-size: $font-size-base * 1.25 !default;\n$blockquote-footer-color: $gray-600 !default;\n$blockquote-footer-font-size: $small-font-size !default;\n\n$hr-margin-y: $spacer !default;\n$hr-color: inherit !default;\n\n// fusv-disable\n$hr-bg-color: null !default; // Deprecated in v5.2.0\n$hr-height: null !default; // Deprecated in v5.2.0\n// fusv-enable\n\n$hr-border-color: null !default; // Allows for inherited colors\n$hr-border-width: $border-width !default;\n$hr-opacity: .25 !default;\n\n$legend-margin-bottom: .5rem !default;\n$legend-font-size: 1.5rem !default;\n$legend-font-weight: null !default;\n\n$dt-font-weight: $font-weight-bold !default;\n\n$list-inline-padding: .5rem !default;\n\n$mark-padding: .1875em !default;\n$mark-bg: $yellow-100 !default;\n// scss-docs-end type-variables\n\n\n// Tables\n//\n// Customizes the `.table` component with basic values, each used across all table variations.\n\n// scss-docs-start table-variables\n$table-cell-padding-y: .5rem !default;\n$table-cell-padding-x: .5rem !default;\n$table-cell-padding-y-sm: .25rem !default;\n$table-cell-padding-x-sm: .25rem !default;\n\n$table-cell-vertical-align: top !default;\n\n$table-color: var(--#{$prefix}body-color) !default;\n$table-bg: transparent !default;\n$table-accent-bg: transparent !default;\n\n$table-th-font-weight: null !default;\n\n$table-striped-color: $table-color !default;\n$table-striped-bg-factor: .05 !default;\n$table-striped-bg: rgba($black, $table-striped-bg-factor) !default;\n\n$table-active-color: $table-color !default;\n$table-active-bg-factor: .1 !default;\n$table-active-bg: rgba($black, $table-active-bg-factor) !default;\n\n$table-hover-color: $table-color !default;\n$table-hover-bg-factor: .075 !default;\n$table-hover-bg: rgba($black, $table-hover-bg-factor) !default;\n\n$table-border-factor: .1 !default;\n$table-border-width: $border-width !default;\n$table-border-color: var(--#{$prefix}border-color) !default;\n\n$table-striped-order: odd !default;\n$table-striped-columns-order: even !default;\n\n$table-group-separator-color: currentcolor !default;\n\n$table-caption-color: $text-muted !default;\n\n$table-bg-scale: -80% !default;\n// scss-docs-end table-variables\n\n// scss-docs-start table-loop\n$table-variants: (\n \"primary\": shift-color($primary, $table-bg-scale),\n \"secondary\": shift-color($secondary, $table-bg-scale),\n \"success\": shift-color($success, $table-bg-scale),\n \"info\": shift-color($info, $table-bg-scale),\n \"warning\": shift-color($warning, $table-bg-scale),\n \"danger\": shift-color($danger, $table-bg-scale),\n \"light\": $light,\n \"dark\": $dark,\n) !default;\n// scss-docs-end table-loop\n\n\n// Buttons + Forms\n//\n// Shared variables that are reassigned to `$input-` and `$btn-` specific variables.\n\n// scss-docs-start input-btn-variables\n$input-btn-padding-y: .375rem !default;\n$input-btn-padding-x: .75rem !default;\n$input-btn-font-family: null !default;\n$input-btn-font-size: $font-size-base !default;\n$input-btn-line-height: $line-height-base !default;\n\n$input-btn-focus-width: .25rem !default;\n$input-btn-focus-color-opacity: .25 !default;\n$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default;\n$input-btn-focus-blur: 0 !default;\n$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default;\n\n$input-btn-padding-y-sm: .25rem !default;\n$input-btn-padding-x-sm: .5rem !default;\n$input-btn-font-size-sm: $font-size-sm !default;\n\n$input-btn-padding-y-lg: .5rem !default;\n$input-btn-padding-x-lg: 1rem !default;\n$input-btn-font-size-lg: $font-size-lg !default;\n\n$input-btn-border-width: $border-width !default;\n// scss-docs-end input-btn-variables\n\n\n// Buttons\n//\n// For each of Bootstrap's buttons, define text, background, and border color.\n\n// scss-docs-start btn-variables\n$btn-padding-y: $input-btn-padding-y !default;\n$btn-padding-x: $input-btn-padding-x !default;\n$btn-font-family: $input-btn-font-family !default;\n$btn-font-size: $input-btn-font-size !default;\n$btn-line-height: $input-btn-line-height !default;\n$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping\n\n$btn-padding-y-sm: $input-btn-padding-y-sm !default;\n$btn-padding-x-sm: $input-btn-padding-x-sm !default;\n$btn-font-size-sm: $input-btn-font-size-sm !default;\n\n$btn-padding-y-lg: $input-btn-padding-y-lg !default;\n$btn-padding-x-lg: $input-btn-padding-x-lg !default;\n$btn-font-size-lg: $input-btn-font-size-lg !default;\n\n$btn-border-width: $input-btn-border-width !default;\n\n$btn-font-weight: $font-weight-normal !default;\n$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;\n$btn-focus-width: $input-btn-focus-width !default;\n$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$btn-disabled-opacity: .65 !default;\n$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;\n\n$btn-link-color: var(--#{$prefix}link-color) !default;\n$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$btn-link-disabled-color: $gray-600 !default;\n\n// Allows for customizing button radius independently from global border radius\n$btn-border-radius: $border-radius !default;\n$btn-border-radius-sm: $border-radius-sm !default;\n$btn-border-radius-lg: $border-radius-lg !default;\n\n$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$btn-hover-bg-shade-amount: 15% !default;\n$btn-hover-bg-tint-amount: 15% !default;\n$btn-hover-border-shade-amount: 20% !default;\n$btn-hover-border-tint-amount: 10% !default;\n$btn-active-bg-shade-amount: 20% !default;\n$btn-active-bg-tint-amount: 20% !default;\n$btn-active-border-shade-amount: 25% !default;\n$btn-active-border-tint-amount: 10% !default;\n// scss-docs-end btn-variables\n\n\n// Forms\n\n// scss-docs-start form-text-variables\n$form-text-margin-top: .25rem !default;\n$form-text-font-size: $small-font-size !default;\n$form-text-font-style: null !default;\n$form-text-font-weight: null !default;\n$form-text-color: $text-muted !default;\n// scss-docs-end form-text-variables\n\n// scss-docs-start form-label-variables\n$form-label-margin-bottom: .5rem !default;\n$form-label-font-size: null !default;\n$form-label-font-style: null !default;\n$form-label-font-weight: null !default;\n$form-label-color: null !default;\n// scss-docs-end form-label-variables\n\n// scss-docs-start form-input-variables\n$input-padding-y: $input-btn-padding-y !default;\n$input-padding-x: $input-btn-padding-x !default;\n$input-font-family: $input-btn-font-family !default;\n$input-font-size: $input-btn-font-size !default;\n$input-font-weight: $font-weight-base !default;\n$input-line-height: $input-btn-line-height !default;\n\n$input-padding-y-sm: $input-btn-padding-y-sm !default;\n$input-padding-x-sm: $input-btn-padding-x-sm !default;\n$input-font-size-sm: $input-btn-font-size-sm !default;\n\n$input-padding-y-lg: $input-btn-padding-y-lg !default;\n$input-padding-x-lg: $input-btn-padding-x-lg !default;\n$input-font-size-lg: $input-btn-font-size-lg !default;\n\n$input-bg: $body-bg !default;\n$input-disabled-color: null !default;\n$input-disabled-bg: $gray-200 !default;\n$input-disabled-border-color: null !default;\n\n$input-color: $body-color !default;\n$input-border-color: $gray-400 !default;\n$input-border-width: $input-btn-border-width !default;\n$input-box-shadow: $box-shadow-inset !default;\n\n$input-border-radius: $border-radius !default;\n$input-border-radius-sm: $border-radius-sm !default;\n$input-border-radius-lg: $border-radius-lg !default;\n\n$input-focus-bg: $input-bg !default;\n$input-focus-border-color: tint-color($component-active-bg, 50%) !default;\n$input-focus-color: $input-color !default;\n$input-focus-width: $input-btn-focus-width !default;\n$input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$input-placeholder-color: $gray-600 !default;\n$input-plaintext-color: $body-color !default;\n\n$input-height-border: $input-border-width * 2 !default;\n\n$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default;\n$input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default;\n$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default;\n\n$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default;\n$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default;\n$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default;\n\n$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$form-color-width: 3rem !default;\n// scss-docs-end form-input-variables\n\n// scss-docs-start form-check-variables\n$form-check-input-width: 1em !default;\n$form-check-min-height: $font-size-base * $line-height-base !default;\n$form-check-padding-start: $form-check-input-width + .5em !default;\n$form-check-margin-bottom: .125rem !default;\n$form-check-label-color: null !default;\n$form-check-label-cursor: null !default;\n$form-check-transition: null !default;\n\n$form-check-input-active-filter: brightness(90%) !default;\n\n$form-check-input-bg: $input-bg !default;\n$form-check-input-border: 1px solid rgba($black, .25) !default;\n$form-check-input-border-radius: .25em !default;\n$form-check-radio-border-radius: 50% !default;\n$form-check-input-focus-border: $input-focus-border-color !default;\n$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default;\n\n$form-check-input-checked-color: $component-active-color !default;\n$form-check-input-checked-bg-color: $component-active-bg !default;\n$form-check-input-checked-border-color: $form-check-input-checked-bg-color !default;\n$form-check-input-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-check-radio-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-indeterminate-color: $component-active-color !default;\n$form-check-input-indeterminate-bg-color: $component-active-bg !default;\n$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default;\n$form-check-input-indeterminate-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-check-input-disabled-opacity: .5 !default;\n$form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default;\n$form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default;\n\n$form-check-inline-margin-end: 1rem !default;\n// scss-docs-end form-check-variables\n\n// scss-docs-start form-switch-variables\n$form-switch-color: rgba($black, .25) !default;\n$form-switch-width: 2em !default;\n$form-switch-padding-start: $form-switch-width + .5em !default;\n$form-switch-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-border-radius: $form-switch-width !default;\n$form-switch-transition: background-position .15s ease-in-out !default;\n\n$form-switch-focus-color: $input-focus-border-color !default;\n$form-switch-focus-bg-image: url(\"data:image/svg+xml,\") !default;\n\n$form-switch-checked-color: $component-active-color !default;\n$form-switch-checked-bg-image: url(\"data:image/svg+xml,\") !default;\n$form-switch-checked-bg-position: right center !default;\n// scss-docs-end form-switch-variables\n\n// scss-docs-start input-group-variables\n$input-group-addon-padding-y: $input-padding-y !default;\n$input-group-addon-padding-x: $input-padding-x !default;\n$input-group-addon-font-weight: $input-font-weight !default;\n$input-group-addon-color: $input-color !default;\n$input-group-addon-bg: $gray-200 !default;\n$input-group-addon-border-color: $input-border-color !default;\n// scss-docs-end input-group-variables\n\n// scss-docs-start form-select-variables\n$form-select-padding-y: $input-padding-y !default;\n$form-select-padding-x: $input-padding-x !default;\n$form-select-font-family: $input-font-family !default;\n$form-select-font-size: $input-font-size !default;\n$form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image\n$form-select-font-weight: $input-font-weight !default;\n$form-select-line-height: $input-line-height !default;\n$form-select-color: $input-color !default;\n$form-select-bg: $input-bg !default;\n$form-select-disabled-color: null !default;\n$form-select-disabled-bg: $gray-200 !default;\n$form-select-disabled-border-color: $input-disabled-border-color !default;\n$form-select-bg-position: right $form-select-padding-x center !default;\n$form-select-bg-size: 16px 12px !default; // In pixels because image dimensions\n$form-select-indicator-color: $gray-800 !default;\n$form-select-indicator: url(\"data:image/svg+xml,\") !default;\n\n$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default;\n$form-select-feedback-icon-position: center right $form-select-indicator-padding !default;\n$form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default;\n\n$form-select-border-width: $input-border-width !default;\n$form-select-border-color: $input-border-color !default;\n$form-select-border-radius: $input-border-radius !default;\n$form-select-box-shadow: $box-shadow-inset !default;\n\n$form-select-focus-border-color: $input-focus-border-color !default;\n$form-select-focus-width: $input-focus-width !default;\n$form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default;\n\n$form-select-padding-y-sm: $input-padding-y-sm !default;\n$form-select-padding-x-sm: $input-padding-x-sm !default;\n$form-select-font-size-sm: $input-font-size-sm !default;\n$form-select-border-radius-sm: $input-border-radius-sm !default;\n\n$form-select-padding-y-lg: $input-padding-y-lg !default;\n$form-select-padding-x-lg: $input-padding-x-lg !default;\n$form-select-font-size-lg: $input-font-size-lg !default;\n$form-select-border-radius-lg: $input-border-radius-lg !default;\n\n$form-select-transition: $input-transition !default;\n// scss-docs-end form-select-variables\n\n// scss-docs-start form-range-variables\n$form-range-track-width: 100% !default;\n$form-range-track-height: .5rem !default;\n$form-range-track-cursor: pointer !default;\n$form-range-track-bg: $gray-300 !default;\n$form-range-track-border-radius: 1rem !default;\n$form-range-track-box-shadow: $box-shadow-inset !default;\n\n$form-range-thumb-width: 1rem !default;\n$form-range-thumb-height: $form-range-thumb-width !default;\n$form-range-thumb-bg: $component-active-bg !default;\n$form-range-thumb-border: 0 !default;\n$form-range-thumb-border-radius: 1rem !default;\n$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;\n$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;\n$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge\n$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;\n$form-range-thumb-disabled-bg: $gray-500 !default;\n$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n// scss-docs-end form-range-variables\n\n// scss-docs-start form-file-variables\n$form-file-button-color: $input-color !default;\n$form-file-button-bg: $input-group-addon-bg !default;\n$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default;\n// scss-docs-end form-file-variables\n\n// scss-docs-start form-floating-variables\n$form-floating-height: add(3.5rem, $input-height-border) !default;\n$form-floating-line-height: 1.25 !default;\n$form-floating-padding-x: $input-padding-x !default;\n$form-floating-padding-y: 1rem !default;\n$form-floating-input-padding-t: 1.625rem !default;\n$form-floating-input-padding-b: .625rem !default;\n$form-floating-label-opacity: .65 !default;\n$form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default;\n$form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default;\n// scss-docs-end form-floating-variables\n\n// Form validation\n\n// scss-docs-start form-feedback-variables\n$form-feedback-margin-top: $form-text-margin-top !default;\n$form-feedback-font-size: $form-text-font-size !default;\n$form-feedback-font-style: $form-text-font-style !default;\n$form-feedback-valid-color: $success !default;\n$form-feedback-invalid-color: $danger !default;\n\n$form-feedback-icon-valid-color: $form-feedback-valid-color !default;\n$form-feedback-icon-valid: url(\"data:image/svg+xml,\") !default;\n$form-feedback-icon-invalid-color: $form-feedback-invalid-color !default;\n$form-feedback-icon-invalid: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end form-feedback-variables\n\n// scss-docs-start form-validation-states\n$form-validation-states: (\n \"valid\": (\n \"color\": $form-feedback-valid-color,\n \"icon\": $form-feedback-icon-valid\n ),\n \"invalid\": (\n \"color\": $form-feedback-invalid-color,\n \"icon\": $form-feedback-icon-invalid\n )\n) !default;\n// scss-docs-end form-validation-states\n\n// Z-index master list\n//\n// Warning: Avoid customizing these values. They're used for a bird's eye view\n// of components dependent on the z-axis and are designed to all work together.\n\n// scss-docs-start zindex-stack\n$zindex-dropdown: 1000 !default;\n$zindex-sticky: 1020 !default;\n$zindex-fixed: 1030 !default;\n$zindex-offcanvas-backdrop: 1040 !default;\n$zindex-offcanvas: 1045 !default;\n$zindex-modal-backdrop: 1050 !default;\n$zindex-modal: 1055 !default;\n$zindex-popover: 1070 !default;\n$zindex-tooltip: 1080 !default;\n$zindex-toast: 1090 !default;\n// scss-docs-end zindex-stack\n\n\n// Navs\n\n// scss-docs-start nav-variables\n$nav-link-padding-y: .5rem !default;\n$nav-link-padding-x: 1rem !default;\n$nav-link-font-size: null !default;\n$nav-link-font-weight: null !default;\n$nav-link-color: var(--#{$prefix}link-color) !default;\n$nav-link-hover-color: var(--#{$prefix}link-hover-color) !default;\n$nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default;\n$nav-link-disabled-color: $gray-600 !default;\n\n$nav-tabs-border-color: $gray-300 !default;\n$nav-tabs-border-width: $border-width !default;\n$nav-tabs-border-radius: $border-radius !default;\n$nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default;\n$nav-tabs-link-active-color: $gray-700 !default;\n$nav-tabs-link-active-bg: $body-bg !default;\n$nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default;\n\n$nav-pills-border-radius: $border-radius !default;\n$nav-pills-link-active-color: $component-active-color !default;\n$nav-pills-link-active-bg: $component-active-bg !default;\n// scss-docs-end nav-variables\n\n\n// Navbar\n\n// scss-docs-start navbar-variables\n$navbar-padding-y: $spacer * .5 !default;\n$navbar-padding-x: null !default;\n\n$navbar-nav-link-padding-x: .5rem !default;\n\n$navbar-brand-font-size: $font-size-lg !default;\n// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link\n$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default;\n$navbar-brand-height: $navbar-brand-font-size * $line-height-base !default;\n$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default;\n$navbar-brand-margin-end: 1rem !default;\n\n$navbar-toggler-padding-y: .25rem !default;\n$navbar-toggler-padding-x: .75rem !default;\n$navbar-toggler-font-size: $font-size-lg !default;\n$navbar-toggler-border-radius: $btn-border-radius !default;\n$navbar-toggler-focus-width: $btn-focus-width !default;\n$navbar-toggler-transition: box-shadow .15s ease-in-out !default;\n\n$navbar-light-color: rgba($black, .55) !default;\n$navbar-light-hover-color: rgba($black, .7) !default;\n$navbar-light-active-color: rgba($black, .9) !default;\n$navbar-light-disabled-color: rgba($black, .3) !default;\n$navbar-light-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-light-toggler-border-color: rgba($black, .1) !default;\n$navbar-light-brand-color: $navbar-light-active-color !default;\n$navbar-light-brand-hover-color: $navbar-light-active-color !default;\n// scss-docs-end navbar-variables\n\n// scss-docs-start navbar-dark-variables\n$navbar-dark-color: rgba($white, .55) !default;\n$navbar-dark-hover-color: rgba($white, .75) !default;\n$navbar-dark-active-color: $white !default;\n$navbar-dark-disabled-color: rgba($white, .25) !default;\n$navbar-dark-toggler-icon-bg: url(\"data:image/svg+xml,\") !default;\n$navbar-dark-toggler-border-color: rgba($white, .1) !default;\n$navbar-dark-brand-color: $navbar-dark-active-color !default;\n$navbar-dark-brand-hover-color: $navbar-dark-active-color !default;\n// scss-docs-end navbar-dark-variables\n\n\n// Dropdowns\n//\n// Dropdown menu container and contents.\n\n// scss-docs-start dropdown-variables\n$dropdown-min-width: 10rem !default;\n$dropdown-padding-x: 0 !default;\n$dropdown-padding-y: .5rem !default;\n$dropdown-spacer: .125rem !default;\n$dropdown-font-size: $font-size-base !default;\n$dropdown-color: $body-color !default;\n$dropdown-bg: $white !default;\n$dropdown-border-color: var(--#{$prefix}border-color-translucent) !default;\n$dropdown-border-radius: $border-radius !default;\n$dropdown-border-width: $border-width !default;\n$dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default;\n$dropdown-divider-bg: $dropdown-border-color !default;\n$dropdown-divider-margin-y: $spacer * .5 !default;\n$dropdown-box-shadow: $box-shadow !default;\n\n$dropdown-link-color: $gray-900 !default;\n$dropdown-link-hover-color: shade-color($dropdown-link-color, 10%) !default;\n$dropdown-link-hover-bg: $gray-200 !default;\n\n$dropdown-link-active-color: $component-active-color !default;\n$dropdown-link-active-bg: $component-active-bg !default;\n\n$dropdown-link-disabled-color: $gray-500 !default;\n\n$dropdown-item-padding-y: $spacer * .25 !default;\n$dropdown-item-padding-x: $spacer !default;\n\n$dropdown-header-color: $gray-600 !default;\n$dropdown-header-padding-x: $dropdown-item-padding-x !default;\n$dropdown-header-padding-y: $dropdown-padding-y !default;\n// fusv-disable\n$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x !default; // Deprecated in v5.2.0\n// fusv-enable\n// scss-docs-end dropdown-variables\n\n// scss-docs-start dropdown-dark-variables\n$dropdown-dark-color: $gray-300 !default;\n$dropdown-dark-bg: $gray-800 !default;\n$dropdown-dark-border-color: $dropdown-border-color !default;\n$dropdown-dark-divider-bg: $dropdown-divider-bg !default;\n$dropdown-dark-box-shadow: null !default;\n$dropdown-dark-link-color: $dropdown-dark-color !default;\n$dropdown-dark-link-hover-color: $white !default;\n$dropdown-dark-link-hover-bg: rgba($white, .15) !default;\n$dropdown-dark-link-active-color: $dropdown-link-active-color !default;\n$dropdown-dark-link-active-bg: $dropdown-link-active-bg !default;\n$dropdown-dark-link-disabled-color: $gray-500 !default;\n$dropdown-dark-header-color: $gray-500 !default;\n// scss-docs-end dropdown-dark-variables\n\n\n// Pagination\n\n// scss-docs-start pagination-variables\n$pagination-padding-y: .375rem !default;\n$pagination-padding-x: .75rem !default;\n$pagination-padding-y-sm: .25rem !default;\n$pagination-padding-x-sm: .5rem !default;\n$pagination-padding-y-lg: .75rem !default;\n$pagination-padding-x-lg: 1.5rem !default;\n\n$pagination-font-size: $font-size-base !default;\n\n$pagination-color: var(--#{$prefix}link-color) !default;\n$pagination-bg: $white !default;\n$pagination-border-radius: $border-radius !default;\n$pagination-border-width: $border-width !default;\n$pagination-margin-start: ($pagination-border-width * -1) !default;\n$pagination-border-color: $gray-300 !default;\n\n$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-focus-bg: $gray-200 !default;\n$pagination-focus-box-shadow: $input-btn-focus-box-shadow !default;\n$pagination-focus-outline: 0 !default;\n\n$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;\n$pagination-hover-bg: $gray-200 !default;\n$pagination-hover-border-color: $gray-300 !default;\n\n$pagination-active-color: $component-active-color !default;\n$pagination-active-bg: $component-active-bg !default;\n$pagination-active-border-color: $pagination-active-bg !default;\n\n$pagination-disabled-color: $gray-600 !default;\n$pagination-disabled-bg: $white !default;\n$pagination-disabled-border-color: $gray-300 !default;\n\n$pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;\n\n$pagination-border-radius-sm: $border-radius-sm !default;\n$pagination-border-radius-lg: $border-radius-lg !default;\n// scss-docs-end pagination-variables\n\n\n// Placeholders\n\n// scss-docs-start placeholders\n$placeholder-opacity-max: .5 !default;\n$placeholder-opacity-min: .2 !default;\n// scss-docs-end placeholders\n\n// Cards\n\n// scss-docs-start card-variables\n$card-spacer-y: $spacer !default;\n$card-spacer-x: $spacer !default;\n$card-title-spacer-y: $spacer * .5 !default;\n$card-border-width: $border-width !default;\n$card-border-color: var(--#{$prefix}border-color-translucent) !default;\n$card-border-radius: $border-radius !default;\n$card-box-shadow: null !default;\n$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;\n$card-cap-padding-y: $card-spacer-y * .5 !default;\n$card-cap-padding-x: $card-spacer-x !default;\n$card-cap-bg: rgba($black, .03) !default;\n$card-cap-color: null !default;\n$card-height: null !default;\n$card-color: null !default;\n$card-bg: $white !default;\n$card-img-overlay-padding: $spacer !default;\n$card-group-margin: $grid-gutter-width * .5 !default;\n// scss-docs-end card-variables\n\n// Accordion\n\n// scss-docs-start accordion-variables\n$accordion-padding-y: 1rem !default;\n$accordion-padding-x: 1.25rem !default;\n$accordion-color: $body-color !default; // Sass variable because of $accordion-button-icon\n$accordion-bg: $body-bg !default;\n$accordion-border-width: $border-width !default;\n$accordion-border-color: var(--#{$prefix}border-color) !default;\n$accordion-border-radius: $border-radius !default;\n$accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default;\n\n$accordion-body-padding-y: $accordion-padding-y !default;\n$accordion-body-padding-x: $accordion-padding-x !default;\n\n$accordion-button-padding-y: $accordion-padding-y !default;\n$accordion-button-padding-x: $accordion-padding-x !default;\n$accordion-button-color: $accordion-color !default;\n$accordion-button-bg: var(--#{$prefix}accordion-bg) !default;\n$accordion-transition: $btn-transition, border-radius .15s ease !default;\n$accordion-button-active-bg: tint-color($component-active-bg, 90%) !default;\n$accordion-button-active-color: shade-color($primary, 10%) !default;\n\n$accordion-button-focus-border-color: $input-focus-border-color !default;\n$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;\n\n$accordion-icon-width: 1.25rem !default;\n$accordion-icon-color: $accordion-button-color !default;\n$accordion-icon-active-color: $accordion-button-active-color !default;\n$accordion-icon-transition: transform .2s ease-in-out !default;\n$accordion-icon-transform: rotate(-180deg) !default;\n\n$accordion-button-icon: url(\"data:image/svg+xml,\") !default;\n$accordion-button-active-icon: url(\"data:image/svg+xml,\") !default;\n// scss-docs-end accordion-variables\n\n// Tooltips\n\n// scss-docs-start tooltip-variables\n$tooltip-font-size: $font-size-sm !default;\n$tooltip-max-width: 200px !default;\n$tooltip-color: $white !default;\n$tooltip-bg: $black !default;\n$tooltip-border-radius: $border-radius !default;\n$tooltip-opacity: .9 !default;\n$tooltip-padding-y: $spacer * .25 !default;\n$tooltip-padding-x: $spacer * .5 !default;\n$tooltip-margin: null !default; // TODO: remove this in v6\n\n$tooltip-arrow-width: .8rem !default;\n$tooltip-arrow-height: .4rem !default;\n// fusv-disable\n$tooltip-arrow-color: null !default; // Deprecated in Bootstrap 5.2.0 for CSS variables\n// fusv-enable\n// scss-docs-end tooltip-variables\n\n// Form tooltips must come after regular tooltips\n// scss-docs-start tooltip-feedback-variables\n$form-feedback-tooltip-padding-y: $tooltip-padding-y !default;\n$form-feedback-tooltip-padding-x: $tooltip-padding-x !default;\n$form-feedback-tooltip-font-size: $tooltip-font-size !default;\n$form-feedback-tooltip-line-height: null !default;\n$form-feedback-tooltip-opacity: $tooltip-opacity !default;\n$form-feedback-tooltip-border-radius: $tooltip-border-radius !default;\n// scss-docs-end tooltip-feedback-variables\n\n\n// Popovers\n\n// scss-docs-start popover-variables\n$popover-font-size: $font-size-sm !default;\n$popover-bg: $white !default;\n$popover-max-width: 276px !default;\n$popover-border-width: $border-width !default;\n$popover-border-color: var(--#{$prefix}border-color-translucent) !default;\n$popover-border-radius: $border-radius-lg !default;\n$popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default;\n$popover-box-shadow: $box-shadow !default;\n\n$popover-header-font-size: $font-size-base !default;\n$popover-header-bg: shade-color($popover-bg, 6%) !default;\n$popover-header-color: $headings-color !default;\n$popover-header-padding-y: .5rem !default;\n$popover-header-padding-x: $spacer !default;\n\n$popover-body-color: $body-color !default;\n$popover-body-padding-y: $spacer !default;\n$popover-body-padding-x: $spacer !default;\n\n$popover-arrow-width: 1rem !default;\n$popover-arrow-height: .5rem !default;\n// scss-docs-end popover-variables\n\n// fusv-disable\n// Deprecated in Bootstrap 5.2.0 for CSS variables\n$popover-arrow-color: $popover-bg !default;\n$popover-arrow-outer-color: var(--#{$prefix}border-color-translucent) !default;\n// fusv-enable\n\n\n// Toasts\n\n// scss-docs-start toast-variables\n$toast-max-width: 350px !default;\n$toast-padding-x: .75rem !default;\n$toast-padding-y: .5rem !default;\n$toast-font-size: .875rem !default;\n$toast-color: null !default;\n$toast-background-color: rgba($white, .85) !default;\n$toast-border-width: $border-width !default;\n$toast-border-color: var(--#{$prefix}border-color-translucent) !default;\n$toast-border-radius: $border-radius !default;\n$toast-box-shadow: $box-shadow !default;\n$toast-spacing: $container-padding-x !default;\n\n$toast-header-color: $gray-600 !default;\n$toast-header-background-color: rgba($white, .85) !default;\n$toast-header-border-color: rgba($black, .05) !default;\n// scss-docs-end toast-variables\n\n\n// Badges\n\n// scss-docs-start badge-variables\n$badge-font-size: .75em !default;\n$badge-font-weight: $font-weight-bold !default;\n$badge-color: $white !default;\n$badge-padding-y: .35em !default;\n$badge-padding-x: .65em !default;\n$badge-border-radius: $border-radius !default;\n// scss-docs-end badge-variables\n\n\n// Modals\n\n// scss-docs-start modal-variables\n$modal-inner-padding: $spacer !default;\n\n$modal-footer-margin-between: .5rem !default;\n\n$modal-dialog-margin: .5rem !default;\n$modal-dialog-margin-y-sm-up: 1.75rem !default;\n\n$modal-title-line-height: $line-height-base !default;\n\n$modal-content-color: null !default;\n$modal-content-bg: $white !default;\n$modal-content-border-color: var(--#{$prefix}border-color-translucent) !default;\n$modal-content-border-width: $border-width !default;\n$modal-content-border-radius: $border-radius-lg !default;\n$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;\n$modal-content-box-shadow-xs: $box-shadow-sm !default;\n$modal-content-box-shadow-sm-up: $box-shadow !default;\n\n$modal-backdrop-bg: $black !default;\n$modal-backdrop-opacity: .5 !default;\n\n$modal-header-border-color: var(--#{$prefix}border-color) !default;\n$modal-header-border-width: $modal-content-border-width !default;\n$modal-header-padding-y: $modal-inner-padding !default;\n$modal-header-padding-x: $modal-inner-padding !default;\n$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility\n\n$modal-footer-bg: null !default;\n$modal-footer-border-color: $modal-header-border-color !default;\n$modal-footer-border-width: $modal-header-border-width !default;\n\n$modal-sm: 300px !default;\n$modal-md: 500px !default;\n$modal-lg: 800px !default;\n$modal-xl: 1140px !default;\n\n$modal-fade-transform: translate(0, -50px) !default;\n$modal-show-transform: none !default;\n$modal-transition: transform .3s ease-out !default;\n$modal-scale-transform: scale(1.02) !default;\n// scss-docs-end modal-variables\n\n\n// Alerts\n//\n// Define alert colors, border radius, and padding.\n\n// scss-docs-start alert-variables\n$alert-padding-y: $spacer !default;\n$alert-padding-x: $spacer !default;\n$alert-margin-bottom: 1rem !default;\n$alert-border-radius: $border-radius !default;\n$alert-link-font-weight: $font-weight-bold !default;\n$alert-border-width: $border-width !default;\n$alert-bg-scale: -80% !default;\n$alert-border-scale: -70% !default;\n$alert-color-scale: 40% !default;\n$alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side\n// scss-docs-end alert-variables\n\n\n// Progress bars\n\n// scss-docs-start progress-variables\n$progress-height: 1rem !default;\n$progress-font-size: $font-size-base * .75 !default;\n$progress-bg: $gray-200 !default;\n$progress-border-radius: $border-radius !default;\n$progress-box-shadow: $box-shadow-inset !default;\n$progress-bar-color: $white !default;\n$progress-bar-bg: $primary !default;\n$progress-bar-animation-timing: 1s linear infinite !default;\n$progress-bar-transition: width .6s ease !default;\n// scss-docs-end progress-variables\n\n\n// List group\n\n// scss-docs-start list-group-variables\n$list-group-color: $gray-900 !default;\n$list-group-bg: $white !default;\n$list-group-border-color: rgba($black, .125) !default;\n$list-group-border-width: $border-width !default;\n$list-group-border-radius: $border-radius !default;\n\n$list-group-item-padding-y: $spacer * .5 !default;\n$list-group-item-padding-x: $spacer !default;\n$list-group-item-bg-scale: -80% !default;\n$list-group-item-color-scale: 40% !default;\n\n$list-group-hover-bg: $gray-100 !default;\n$list-group-active-color: $component-active-color !default;\n$list-group-active-bg: $component-active-bg !default;\n$list-group-active-border-color: $list-group-active-bg !default;\n\n$list-group-disabled-color: $gray-600 !default;\n$list-group-disabled-bg: $list-group-bg !default;\n\n$list-group-action-color: $gray-700 !default;\n$list-group-action-hover-color: $list-group-action-color !default;\n\n$list-group-action-active-color: $body-color !default;\n$list-group-action-active-bg: $gray-200 !default;\n// scss-docs-end list-group-variables\n\n\n// Image thumbnails\n\n// scss-docs-start thumbnail-variables\n$thumbnail-padding: .25rem !default;\n$thumbnail-bg: $body-bg !default;\n$thumbnail-border-width: $border-width !default;\n$thumbnail-border-color: var(--#{$prefix}border-color) !default;\n$thumbnail-border-radius: $border-radius !default;\n$thumbnail-box-shadow: $box-shadow-sm !default;\n// scss-docs-end thumbnail-variables\n\n\n// Figures\n\n// scss-docs-start figure-variables\n$figure-caption-font-size: $small-font-size !default;\n$figure-caption-color: $gray-600 !default;\n// scss-docs-end figure-variables\n\n\n// Breadcrumbs\n\n// scss-docs-start breadcrumb-variables\n$breadcrumb-font-size: null !default;\n$breadcrumb-padding-y: 0 !default;\n$breadcrumb-padding-x: 0 !default;\n$breadcrumb-item-padding-x: .5rem !default;\n$breadcrumb-margin-bottom: 1rem !default;\n$breadcrumb-bg: null !default;\n$breadcrumb-divider-color: $gray-600 !default;\n$breadcrumb-active-color: $gray-600 !default;\n$breadcrumb-divider: quote(\"/\") !default;\n$breadcrumb-divider-flipped: $breadcrumb-divider !default;\n$breadcrumb-border-radius: null !default;\n// scss-docs-end breadcrumb-variables\n\n// Carousel\n\n// scss-docs-start carousel-variables\n$carousel-control-color: $white !default;\n$carousel-control-width: 15% !default;\n$carousel-control-opacity: .5 !default;\n$carousel-control-hover-opacity: .9 !default;\n$carousel-control-transition: opacity .15s ease !default;\n\n$carousel-indicator-width: 30px !default;\n$carousel-indicator-height: 3px !default;\n$carousel-indicator-hit-area-height: 10px !default;\n$carousel-indicator-spacer: 3px !default;\n$carousel-indicator-opacity: .5 !default;\n$carousel-indicator-active-bg: $white !default;\n$carousel-indicator-active-opacity: 1 !default;\n$carousel-indicator-transition: opacity .6s ease !default;\n\n$carousel-caption-width: 70% !default;\n$carousel-caption-color: $white !default;\n$carousel-caption-padding-y: 1.25rem !default;\n$carousel-caption-spacer: 1.25rem !default;\n\n$carousel-control-icon-width: 2rem !default;\n\n$carousel-control-prev-icon-bg: url(\"data:image/svg+xml,\") !default;\n$carousel-control-next-icon-bg: url(\"data:image/svg+xml,\") !default;\n\n$carousel-transition-duration: .6s !default;\n$carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`)\n// scss-docs-end carousel-variables\n\n// scss-docs-start carousel-dark-variables\n$carousel-dark-indicator-active-bg: $black !default;\n$carousel-dark-caption-color: $black !default;\n$carousel-dark-control-icon-filter: invert(1) grayscale(100) !default;\n// scss-docs-end carousel-dark-variables\n\n\n// Spinners\n\n// scss-docs-start spinner-variables\n$spinner-width: 2rem !default;\n$spinner-height: $spinner-width !default;\n$spinner-vertical-align: -.125em !default;\n$spinner-border-width: .25em !default;\n$spinner-animation-speed: .75s !default;\n\n$spinner-width-sm: 1rem !default;\n$spinner-height-sm: $spinner-width-sm !default;\n$spinner-border-width-sm: .2em !default;\n// scss-docs-end spinner-variables\n\n\n// Close\n\n// scss-docs-start close-variables\n$btn-close-width: 1em !default;\n$btn-close-height: $btn-close-width !default;\n$btn-close-padding-x: .25em !default;\n$btn-close-padding-y: $btn-close-padding-x !default;\n$btn-close-color: $black !default;\n$btn-close-bg: url(\"data:image/svg+xml,\") !default;\n$btn-close-focus-shadow: $input-btn-focus-box-shadow !default;\n$btn-close-opacity: .5 !default;\n$btn-close-hover-opacity: .75 !default;\n$btn-close-focus-opacity: 1 !default;\n$btn-close-disabled-opacity: .25 !default;\n$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default;\n// scss-docs-end close-variables\n\n\n// Offcanvas\n\n// scss-docs-start offcanvas-variables\n$offcanvas-padding-y: $modal-inner-padding !default;\n$offcanvas-padding-x: $modal-inner-padding !default;\n$offcanvas-horizontal-width: 400px !default;\n$offcanvas-vertical-height: 30vh !default;\n$offcanvas-transition-duration: .3s !default;\n$offcanvas-border-color: $modal-content-border-color !default;\n$offcanvas-border-width: $modal-content-border-width !default;\n$offcanvas-title-line-height: $modal-title-line-height !default;\n$offcanvas-bg-color: $modal-content-bg !default;\n$offcanvas-color: $modal-content-color !default;\n$offcanvas-box-shadow: $modal-content-box-shadow-xs !default;\n$offcanvas-backdrop-bg: $modal-backdrop-bg !default;\n$offcanvas-backdrop-opacity: $modal-backdrop-opacity !default;\n// scss-docs-end offcanvas-variables\n\n// Code\n\n$code-font-size: $small-font-size !default;\n$code-color: $pink !default;\n\n$kbd-padding-y: .1875rem !default;\n$kbd-padding-x: .375rem !default;\n$kbd-font-size: $code-font-size !default;\n$kbd-color: var(--#{$prefix}body-bg) !default;\n$kbd-bg: var(--#{$prefix}body-color) !default;\n$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6\n\n$pre-color: null !default;\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css new file mode 100644 index 0000000..2330c37 --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css @@ -0,0 +1,7 @@ +/*! + * Bootstrap Grid v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */:root{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-body-color-rgb:33,37,41;--bs-body-bg-rgb:255,255,255;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-bg:#fff;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-2xl:2rem;--bs-border-radius-pill:50rem;--bs-link-color:#0d6efd;--bs-link-hover-color:#0a58ca;--bs-code-color:#d63384;--bs-highlight-bg:#fff3cd}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--bs-gutter-x:1.5rem;--bs-gutter-y:0;width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-left:auto;margin-right:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1200px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1140px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{max-width:1320px}}.row{--bs-gutter-x:1.5rem;--bs-gutter-y:0;display:flex;flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-left:calc(-.5 * var(--bs-gutter-x));margin-right:calc(-.5 * var(--bs-gutter-x))}.row>*{box-sizing:border-box;flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x) * .5);padding-right:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x:0}.g-0,.gy-0{--bs-gutter-y:0}.g-1,.gx-1{--bs-gutter-x:0.25rem}.g-1,.gy-1{--bs-gutter-y:0.25rem}.g-2,.gx-2{--bs-gutter-x:0.5rem}.g-2,.gy-2{--bs-gutter-y:0.5rem}.g-3,.gx-3{--bs-gutter-x:1rem}.g-3,.gy-3{--bs-gutter-y:1rem}.g-4,.gx-4{--bs-gutter-x:1.5rem}.g-4,.gy-4{--bs-gutter-y:1.5rem}.g-5,.gx-5{--bs-gutter-x:3rem}.g-5,.gy-5{--bs-gutter-y:3rem}@media (min-width:576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x:0}.g-sm-0,.gy-sm-0{--bs-gutter-y:0}.g-sm-1,.gx-sm-1{--bs-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x:1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y:1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x:3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y:3rem}}@media (min-width:768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x:0}.g-md-0,.gy-md-0{--bs-gutter-y:0}.g-md-1,.gx-md-1{--bs-gutter-x:0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y:0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x:0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y:0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x:1rem}.g-md-3,.gy-md-3{--bs-gutter-y:1rem}.g-md-4,.gx-md-4{--bs-gutter-x:1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y:1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x:3rem}.g-md-5,.gy-md-5{--bs-gutter-y:3rem}}@media (min-width:992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x:0}.g-lg-0,.gy-lg-0{--bs-gutter-y:0}.g-lg-1,.gx-lg-1{--bs-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x:1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y:1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x:3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y:3rem}}@media (min-width:1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x:0}.g-xl-0,.gy-xl-0{--bs-gutter-y:0}.g-xl-1,.gx-xl-1{--bs-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x:1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y:1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x:3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y:3rem}}@media (min-width:1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x:0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y:0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x:3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y:3rem}}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-grid{display:grid!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}.d-none{display:none!important}.flex-fill{flex:1 1 auto!important}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.justify-content-evenly{justify-content:space-evenly!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}.order-first{order:-1!important}.order-0{order:0!important}.order-1{order:1!important}.order-2{order:2!important}.order-3{order:3!important}.order-4{order:4!important}.order-5{order:5!important}.order-last{order:6!important}.m-0{margin:0!important}.m-1{margin:.25rem!important}.m-2{margin:.5rem!important}.m-3{margin:1rem!important}.m-4{margin:1.5rem!important}.m-5{margin:3rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:3rem!important;margin-right:3rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-top:0!important;margin-bottom:0!important}.my-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-0{margin-top:0!important}.mt-1{margin-top:.25rem!important}.mt-2{margin-top:.5rem!important}.mt-3{margin-top:1rem!important}.mt-4{margin-top:1.5rem!important}.mt-5{margin-top:3rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:3rem!important}.me-auto{margin-left:auto!important}.mb-0{margin-bottom:0!important}.mb-1{margin-bottom:.25rem!important}.mb-2{margin-bottom:.5rem!important}.mb-3{margin-bottom:1rem!important}.mb-4{margin-bottom:1.5rem!important}.mb-5{margin-bottom:3rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:3rem!important}.ms-auto{margin-right:auto!important}.p-0{padding:0!important}.p-1{padding:.25rem!important}.p-2{padding:.5rem!important}.p-3{padding:1rem!important}.p-4{padding:1.5rem!important}.p-5{padding:3rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:3rem!important;padding-right:3rem!important}.py-0{padding-top:0!important;padding-bottom:0!important}.py-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-0{padding-top:0!important}.pt-1{padding-top:.25rem!important}.pt-2{padding-top:.5rem!important}.pt-3{padding-top:1rem!important}.pt-4{padding-top:1.5rem!important}.pt-5{padding-top:3rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:3rem!important}.pb-0{padding-bottom:0!important}.pb-1{padding-bottom:.25rem!important}.pb-2{padding-bottom:.5rem!important}.pb-3{padding-bottom:1rem!important}.pb-4{padding-bottom:1.5rem!important}.pb-5{padding-bottom:3rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:3rem!important}@media (min-width:576px){.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.justify-content-sm-evenly{justify-content:space-evenly!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}.order-sm-first{order:-1!important}.order-sm-0{order:0!important}.order-sm-1{order:1!important}.order-sm-2{order:2!important}.order-sm-3{order:3!important}.order-sm-4{order:4!important}.order-sm-5{order:5!important}.order-sm-last{order:6!important}.m-sm-0{margin:0!important}.m-sm-1{margin:.25rem!important}.m-sm-2{margin:.5rem!important}.m-sm-3{margin:1rem!important}.m-sm-4{margin:1.5rem!important}.m-sm-5{margin:3rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-top:0!important;margin-bottom:0!important}.my-sm-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-sm-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-sm-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-sm-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-sm-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-sm-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-sm-0{margin-top:0!important}.mt-sm-1{margin-top:.25rem!important}.mt-sm-2{margin-top:.5rem!important}.mt-sm-3{margin-top:1rem!important}.mt-sm-4{margin-top:1.5rem!important}.mt-sm-5{margin-top:3rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:3rem!important}.me-sm-auto{margin-left:auto!important}.mb-sm-0{margin-bottom:0!important}.mb-sm-1{margin-bottom:.25rem!important}.mb-sm-2{margin-bottom:.5rem!important}.mb-sm-3{margin-bottom:1rem!important}.mb-sm-4{margin-bottom:1.5rem!important}.mb-sm-5{margin-bottom:3rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:3rem!important}.ms-sm-auto{margin-right:auto!important}.p-sm-0{padding:0!important}.p-sm-1{padding:.25rem!important}.p-sm-2{padding:.5rem!important}.p-sm-3{padding:1rem!important}.p-sm-4{padding:1.5rem!important}.p-sm-5{padding:3rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:3rem!important;padding-right:3rem!important}.py-sm-0{padding-top:0!important;padding-bottom:0!important}.py-sm-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-sm-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-sm-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-sm-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-sm-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-sm-0{padding-top:0!important}.pt-sm-1{padding-top:.25rem!important}.pt-sm-2{padding-top:.5rem!important}.pt-sm-3{padding-top:1rem!important}.pt-sm-4{padding-top:1.5rem!important}.pt-sm-5{padding-top:3rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:3rem!important}.pb-sm-0{padding-bottom:0!important}.pb-sm-1{padding-bottom:.25rem!important}.pb-sm-2{padding-bottom:.5rem!important}.pb-sm-3{padding-bottom:1rem!important}.pb-sm-4{padding-bottom:1.5rem!important}.pb-sm-5{padding-bottom:3rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:3rem!important}}@media (min-width:768px){.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.justify-content-md-evenly{justify-content:space-evenly!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}.order-md-first{order:-1!important}.order-md-0{order:0!important}.order-md-1{order:1!important}.order-md-2{order:2!important}.order-md-3{order:3!important}.order-md-4{order:4!important}.order-md-5{order:5!important}.order-md-last{order:6!important}.m-md-0{margin:0!important}.m-md-1{margin:.25rem!important}.m-md-2{margin:.5rem!important}.m-md-3{margin:1rem!important}.m-md-4{margin:1.5rem!important}.m-md-5{margin:3rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:3rem!important;margin-right:3rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-top:0!important;margin-bottom:0!important}.my-md-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-md-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-md-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-md-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-md-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-md-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-md-0{margin-top:0!important}.mt-md-1{margin-top:.25rem!important}.mt-md-2{margin-top:.5rem!important}.mt-md-3{margin-top:1rem!important}.mt-md-4{margin-top:1.5rem!important}.mt-md-5{margin-top:3rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:3rem!important}.me-md-auto{margin-left:auto!important}.mb-md-0{margin-bottom:0!important}.mb-md-1{margin-bottom:.25rem!important}.mb-md-2{margin-bottom:.5rem!important}.mb-md-3{margin-bottom:1rem!important}.mb-md-4{margin-bottom:1.5rem!important}.mb-md-5{margin-bottom:3rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:3rem!important}.ms-md-auto{margin-right:auto!important}.p-md-0{padding:0!important}.p-md-1{padding:.25rem!important}.p-md-2{padding:.5rem!important}.p-md-3{padding:1rem!important}.p-md-4{padding:1.5rem!important}.p-md-5{padding:3rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:3rem!important;padding-right:3rem!important}.py-md-0{padding-top:0!important;padding-bottom:0!important}.py-md-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-md-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-md-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-md-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-md-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-md-0{padding-top:0!important}.pt-md-1{padding-top:.25rem!important}.pt-md-2{padding-top:.5rem!important}.pt-md-3{padding-top:1rem!important}.pt-md-4{padding-top:1.5rem!important}.pt-md-5{padding-top:3rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:3rem!important}.pb-md-0{padding-bottom:0!important}.pb-md-1{padding-bottom:.25rem!important}.pb-md-2{padding-bottom:.5rem!important}.pb-md-3{padding-bottom:1rem!important}.pb-md-4{padding-bottom:1.5rem!important}.pb-md-5{padding-bottom:3rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:3rem!important}}@media (min-width:992px){.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.justify-content-lg-evenly{justify-content:space-evenly!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}.order-lg-first{order:-1!important}.order-lg-0{order:0!important}.order-lg-1{order:1!important}.order-lg-2{order:2!important}.order-lg-3{order:3!important}.order-lg-4{order:4!important}.order-lg-5{order:5!important}.order-lg-last{order:6!important}.m-lg-0{margin:0!important}.m-lg-1{margin:.25rem!important}.m-lg-2{margin:.5rem!important}.m-lg-3{margin:1rem!important}.m-lg-4{margin:1.5rem!important}.m-lg-5{margin:3rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-top:0!important;margin-bottom:0!important}.my-lg-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-lg-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-lg-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-lg-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-lg-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-lg-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-lg-0{margin-top:0!important}.mt-lg-1{margin-top:.25rem!important}.mt-lg-2{margin-top:.5rem!important}.mt-lg-3{margin-top:1rem!important}.mt-lg-4{margin-top:1.5rem!important}.mt-lg-5{margin-top:3rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:3rem!important}.me-lg-auto{margin-left:auto!important}.mb-lg-0{margin-bottom:0!important}.mb-lg-1{margin-bottom:.25rem!important}.mb-lg-2{margin-bottom:.5rem!important}.mb-lg-3{margin-bottom:1rem!important}.mb-lg-4{margin-bottom:1.5rem!important}.mb-lg-5{margin-bottom:3rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:3rem!important}.ms-lg-auto{margin-right:auto!important}.p-lg-0{padding:0!important}.p-lg-1{padding:.25rem!important}.p-lg-2{padding:.5rem!important}.p-lg-3{padding:1rem!important}.p-lg-4{padding:1.5rem!important}.p-lg-5{padding:3rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:3rem!important;padding-right:3rem!important}.py-lg-0{padding-top:0!important;padding-bottom:0!important}.py-lg-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-lg-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-lg-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-lg-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-lg-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-lg-0{padding-top:0!important}.pt-lg-1{padding-top:.25rem!important}.pt-lg-2{padding-top:.5rem!important}.pt-lg-3{padding-top:1rem!important}.pt-lg-4{padding-top:1.5rem!important}.pt-lg-5{padding-top:3rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:3rem!important}.pb-lg-0{padding-bottom:0!important}.pb-lg-1{padding-bottom:.25rem!important}.pb-lg-2{padding-bottom:.5rem!important}.pb-lg-3{padding-bottom:1rem!important}.pb-lg-4{padding-bottom:1.5rem!important}.pb-lg-5{padding-bottom:3rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:3rem!important}}@media (min-width:1200px){.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.justify-content-xl-evenly{justify-content:space-evenly!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}.order-xl-first{order:-1!important}.order-xl-0{order:0!important}.order-xl-1{order:1!important}.order-xl-2{order:2!important}.order-xl-3{order:3!important}.order-xl-4{order:4!important}.order-xl-5{order:5!important}.order-xl-last{order:6!important}.m-xl-0{margin:0!important}.m-xl-1{margin:.25rem!important}.m-xl-2{margin:.5rem!important}.m-xl-3{margin:1rem!important}.m-xl-4{margin:1.5rem!important}.m-xl-5{margin:3rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-top:0!important;margin-bottom:0!important}.my-xl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xl-0{margin-top:0!important}.mt-xl-1{margin-top:.25rem!important}.mt-xl-2{margin-top:.5rem!important}.mt-xl-3{margin-top:1rem!important}.mt-xl-4{margin-top:1.5rem!important}.mt-xl-5{margin-top:3rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:3rem!important}.me-xl-auto{margin-left:auto!important}.mb-xl-0{margin-bottom:0!important}.mb-xl-1{margin-bottom:.25rem!important}.mb-xl-2{margin-bottom:.5rem!important}.mb-xl-3{margin-bottom:1rem!important}.mb-xl-4{margin-bottom:1.5rem!important}.mb-xl-5{margin-bottom:3rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:3rem!important}.ms-xl-auto{margin-right:auto!important}.p-xl-0{padding:0!important}.p-xl-1{padding:.25rem!important}.p-xl-2{padding:.5rem!important}.p-xl-3{padding:1rem!important}.p-xl-4{padding:1.5rem!important}.p-xl-5{padding:3rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xl-0{padding-top:0!important;padding-bottom:0!important}.py-xl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xl-0{padding-top:0!important}.pt-xl-1{padding-top:.25rem!important}.pt-xl-2{padding-top:.5rem!important}.pt-xl-3{padding-top:1rem!important}.pt-xl-4{padding-top:1.5rem!important}.pt-xl-5{padding-top:3rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:3rem!important}.pb-xl-0{padding-bottom:0!important}.pb-xl-1{padding-bottom:.25rem!important}.pb-xl-2{padding-bottom:.5rem!important}.pb-xl-3{padding-bottom:1rem!important}.pb-xl-4{padding-bottom:1.5rem!important}.pb-xl-5{padding-bottom:3rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:3rem!important}}@media (min-width:1400px){.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex:1 1 auto!important}.flex-xxl-row{flex-direction:row!important}.flex-xxl-column{flex-direction:column!important}.flex-xxl-row-reverse{flex-direction:row-reverse!important}.flex-xxl-column-reverse{flex-direction:column-reverse!important}.flex-xxl-grow-0{flex-grow:0!important}.flex-xxl-grow-1{flex-grow:1!important}.flex-xxl-shrink-0{flex-shrink:0!important}.flex-xxl-shrink-1{flex-shrink:1!important}.flex-xxl-wrap{flex-wrap:wrap!important}.flex-xxl-nowrap{flex-wrap:nowrap!important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xxl-start{justify-content:flex-start!important}.justify-content-xxl-end{justify-content:flex-end!important}.justify-content-xxl-center{justify-content:center!important}.justify-content-xxl-between{justify-content:space-between!important}.justify-content-xxl-around{justify-content:space-around!important}.justify-content-xxl-evenly{justify-content:space-evenly!important}.align-items-xxl-start{align-items:flex-start!important}.align-items-xxl-end{align-items:flex-end!important}.align-items-xxl-center{align-items:center!important}.align-items-xxl-baseline{align-items:baseline!important}.align-items-xxl-stretch{align-items:stretch!important}.align-content-xxl-start{align-content:flex-start!important}.align-content-xxl-end{align-content:flex-end!important}.align-content-xxl-center{align-content:center!important}.align-content-xxl-between{align-content:space-between!important}.align-content-xxl-around{align-content:space-around!important}.align-content-xxl-stretch{align-content:stretch!important}.align-self-xxl-auto{align-self:auto!important}.align-self-xxl-start{align-self:flex-start!important}.align-self-xxl-end{align-self:flex-end!important}.align-self-xxl-center{align-self:center!important}.align-self-xxl-baseline{align-self:baseline!important}.align-self-xxl-stretch{align-self:stretch!important}.order-xxl-first{order:-1!important}.order-xxl-0{order:0!important}.order-xxl-1{order:1!important}.order-xxl-2{order:2!important}.order-xxl-3{order:3!important}.order-xxl-4{order:4!important}.order-xxl-5{order:5!important}.order-xxl-last{order:6!important}.m-xxl-0{margin:0!important}.m-xxl-1{margin:.25rem!important}.m-xxl-2{margin:.5rem!important}.m-xxl-3{margin:1rem!important}.m-xxl-4{margin:1.5rem!important}.m-xxl-5{margin:3rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-top:0!important;margin-bottom:0!important}.my-xxl-1{margin-top:.25rem!important;margin-bottom:.25rem!important}.my-xxl-2{margin-top:.5rem!important;margin-bottom:.5rem!important}.my-xxl-3{margin-top:1rem!important;margin-bottom:1rem!important}.my-xxl-4{margin-top:1.5rem!important;margin-bottom:1.5rem!important}.my-xxl-5{margin-top:3rem!important;margin-bottom:3rem!important}.my-xxl-auto{margin-top:auto!important;margin-bottom:auto!important}.mt-xxl-0{margin-top:0!important}.mt-xxl-1{margin-top:.25rem!important}.mt-xxl-2{margin-top:.5rem!important}.mt-xxl-3{margin-top:1rem!important}.mt-xxl-4{margin-top:1.5rem!important}.mt-xxl-5{margin-top:3rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:3rem!important}.me-xxl-auto{margin-left:auto!important}.mb-xxl-0{margin-bottom:0!important}.mb-xxl-1{margin-bottom:.25rem!important}.mb-xxl-2{margin-bottom:.5rem!important}.mb-xxl-3{margin-bottom:1rem!important}.mb-xxl-4{margin-bottom:1.5rem!important}.mb-xxl-5{margin-bottom:3rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:3rem!important}.ms-xxl-auto{margin-right:auto!important}.p-xxl-0{padding:0!important}.p-xxl-1{padding:.25rem!important}.p-xxl-2{padding:.5rem!important}.p-xxl-3{padding:1rem!important}.p-xxl-4{padding:1.5rem!important}.p-xxl-5{padding:3rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:3rem!important;padding-right:3rem!important}.py-xxl-0{padding-top:0!important;padding-bottom:0!important}.py-xxl-1{padding-top:.25rem!important;padding-bottom:.25rem!important}.py-xxl-2{padding-top:.5rem!important;padding-bottom:.5rem!important}.py-xxl-3{padding-top:1rem!important;padding-bottom:1rem!important}.py-xxl-4{padding-top:1.5rem!important;padding-bottom:1.5rem!important}.py-xxl-5{padding-top:3rem!important;padding-bottom:3rem!important}.pt-xxl-0{padding-top:0!important}.pt-xxl-1{padding-top:.25rem!important}.pt-xxl-2{padding-top:.5rem!important}.pt-xxl-3{padding-top:1rem!important}.pt-xxl-4{padding-top:1.5rem!important}.pt-xxl-5{padding-top:3rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:3rem!important}.pb-xxl-0{padding-bottom:0!important}.pb-xxl-1{padding-bottom:.25rem!important}.pb-xxl-2{padding-bottom:.5rem!important}.pb-xxl-3{padding-bottom:1rem!important}.pb-xxl-4{padding-bottom:1.5rem!important}.pb-xxl-5{padding-bottom:3rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:3rem!important}}@media print{.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-grid{display:grid!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}.d-print-none{display:none!important}} +/*# sourceMappingURL=bootstrap-grid.rtl.min.css.map */ \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css.map b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css.map new file mode 100644 index 0000000..89689aa --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","../../scss/_containers.scss","dist/css/bootstrap-grid.rtl.css","../../scss/mixins/_container.scss","../../scss/mixins/_breakpoints.scss","../../scss/_grid.scss","../../scss/mixins/_grid.scss","../../scss/mixins/_utilities.scss","../../scss/utilities/_api.scss"],"names":[],"mappings":"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","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n@if $enable-container-classes {\n // Single container class with breakpoint max-widths\n .container,\n // 100% wide container at all breakpoints\n .container-fluid {\n @include make-container();\n }\n\n // Responsive containers that are 100% wide until a breakpoint\n @each $breakpoint, $container-max-width in $container-max-widths {\n .container-#{$breakpoint} {\n @extend .container-fluid;\n }\n\n @include media-breakpoint-up($breakpoint, $grid-breakpoints) {\n %responsive-container-#{$breakpoint} {\n max-width: $container-max-width;\n }\n\n // Extend each breakpoint which is smaller or equal to the current breakpoint\n $extend-breakpoint: true;\n\n @each $name, $width in $grid-breakpoints {\n @if ($extend-breakpoint) {\n .container#{breakpoint-infix($name, $grid-breakpoints)} {\n @extend %responsive-container-#{$breakpoint};\n }\n\n // Once the current breakpoint is reached, stop extending\n @if ($breakpoint == $name) {\n $extend-breakpoint: false;\n }\n }\n }\n }\n }\n}\n","/*!\n * Bootstrap Grid v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n.container,\n.container-fluid,\n.container-xxl,\n.container-xl,\n.container-lg,\n.container-md,\n.container-sm {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-left: auto;\n margin-right: auto;\n}\n\n@media (min-width: 576px) {\n .container-sm, .container {\n max-width: 540px;\n }\n}\n@media (min-width: 768px) {\n .container-md, .container-sm, .container {\n max-width: 720px;\n }\n}\n@media (min-width: 992px) {\n .container-lg, .container-md, .container-sm, .container {\n max-width: 960px;\n }\n}\n@media (min-width: 1200px) {\n .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1140px;\n }\n}\n@media (min-width: 1400px) {\n .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container {\n max-width: 1320px;\n }\n}\n.row {\n --bs-gutter-x: 1.5rem;\n --bs-gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n margin-top: calc(-1 * var(--bs-gutter-y));\n margin-left: calc(-0.5 * var(--bs-gutter-x));\n margin-right: calc(-0.5 * var(--bs-gutter-x));\n}\n.row > * {\n box-sizing: border-box;\n flex-shrink: 0;\n width: 100%;\n max-width: 100%;\n padding-left: calc(var(--bs-gutter-x) * 0.5);\n padding-right: calc(var(--bs-gutter-x) * 0.5);\n margin-top: var(--bs-gutter-y);\n}\n\n.col {\n flex: 1 0 0%;\n}\n\n.row-cols-auto > * {\n flex: 0 0 auto;\n width: auto;\n}\n\n.row-cols-1 > * {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.row-cols-2 > * {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.row-cols-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n}\n\n.row-cols-4 > * {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.row-cols-5 > * {\n flex: 0 0 auto;\n width: 20%;\n}\n\n.row-cols-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n}\n\n.col-auto {\n flex: 0 0 auto;\n width: auto;\n}\n\n.col-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n}\n\n.col-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n}\n\n.col-3 {\n flex: 0 0 auto;\n width: 25%;\n}\n\n.col-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n}\n\n.col-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n}\n\n.col-6 {\n flex: 0 0 auto;\n width: 50%;\n}\n\n.col-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n}\n\n.col-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n}\n\n.col-9 {\n flex: 0 0 auto;\n width: 75%;\n}\n\n.col-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n}\n\n.col-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n}\n\n.col-12 {\n flex: 0 0 auto;\n width: 100%;\n}\n\n.offset-1 {\n margin-right: 8.33333333%;\n}\n\n.offset-2 {\n margin-right: 16.66666667%;\n}\n\n.offset-3 {\n margin-right: 25%;\n}\n\n.offset-4 {\n margin-right: 33.33333333%;\n}\n\n.offset-5 {\n margin-right: 41.66666667%;\n}\n\n.offset-6 {\n margin-right: 50%;\n}\n\n.offset-7 {\n margin-right: 58.33333333%;\n}\n\n.offset-8 {\n margin-right: 66.66666667%;\n}\n\n.offset-9 {\n margin-right: 75%;\n}\n\n.offset-10 {\n margin-right: 83.33333333%;\n}\n\n.offset-11 {\n margin-right: 91.66666667%;\n}\n\n.g-0,\n.gx-0 {\n --bs-gutter-x: 0;\n}\n\n.g-0,\n.gy-0 {\n --bs-gutter-y: 0;\n}\n\n.g-1,\n.gx-1 {\n --bs-gutter-x: 0.25rem;\n}\n\n.g-1,\n.gy-1 {\n --bs-gutter-y: 0.25rem;\n}\n\n.g-2,\n.gx-2 {\n --bs-gutter-x: 0.5rem;\n}\n\n.g-2,\n.gy-2 {\n --bs-gutter-y: 0.5rem;\n}\n\n.g-3,\n.gx-3 {\n --bs-gutter-x: 1rem;\n}\n\n.g-3,\n.gy-3 {\n --bs-gutter-y: 1rem;\n}\n\n.g-4,\n.gx-4 {\n --bs-gutter-x: 1.5rem;\n}\n\n.g-4,\n.gy-4 {\n --bs-gutter-y: 1.5rem;\n}\n\n.g-5,\n.gx-5 {\n --bs-gutter-x: 3rem;\n}\n\n.g-5,\n.gy-5 {\n --bs-gutter-y: 3rem;\n}\n\n@media (min-width: 576px) {\n .col-sm {\n flex: 1 0 0%;\n }\n .row-cols-sm-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-sm-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-sm-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-sm-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-sm-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-sm-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-sm-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-sm-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-sm-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-sm-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-sm-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-sm-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-sm-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-sm-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-sm-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-sm-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-sm-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-sm-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-sm-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-sm-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-sm-0 {\n margin-right: 0;\n }\n .offset-sm-1 {\n margin-right: 8.33333333%;\n }\n .offset-sm-2 {\n margin-right: 16.66666667%;\n }\n .offset-sm-3 {\n margin-right: 25%;\n }\n .offset-sm-4 {\n margin-right: 33.33333333%;\n }\n .offset-sm-5 {\n margin-right: 41.66666667%;\n }\n .offset-sm-6 {\n margin-right: 50%;\n }\n .offset-sm-7 {\n margin-right: 58.33333333%;\n }\n .offset-sm-8 {\n margin-right: 66.66666667%;\n }\n .offset-sm-9 {\n margin-right: 75%;\n }\n .offset-sm-10 {\n margin-right: 83.33333333%;\n }\n .offset-sm-11 {\n margin-right: 91.66666667%;\n }\n .g-sm-0,\n.gx-sm-0 {\n --bs-gutter-x: 0;\n }\n .g-sm-0,\n.gy-sm-0 {\n --bs-gutter-y: 0;\n }\n .g-sm-1,\n.gx-sm-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-sm-1,\n.gy-sm-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-sm-2,\n.gx-sm-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-sm-2,\n.gy-sm-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-sm-3,\n.gx-sm-3 {\n --bs-gutter-x: 1rem;\n }\n .g-sm-3,\n.gy-sm-3 {\n --bs-gutter-y: 1rem;\n }\n .g-sm-4,\n.gx-sm-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-sm-4,\n.gy-sm-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-sm-5,\n.gx-sm-5 {\n --bs-gutter-x: 3rem;\n }\n .g-sm-5,\n.gy-sm-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 768px) {\n .col-md {\n flex: 1 0 0%;\n }\n .row-cols-md-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-md-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-md-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-md-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-md-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-md-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-md-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-md-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-md-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-md-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-md-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-md-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-md-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-md-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-md-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-md-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-md-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-md-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-md-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-md-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-md-0 {\n margin-right: 0;\n }\n .offset-md-1 {\n margin-right: 8.33333333%;\n }\n .offset-md-2 {\n margin-right: 16.66666667%;\n }\n .offset-md-3 {\n margin-right: 25%;\n }\n .offset-md-4 {\n margin-right: 33.33333333%;\n }\n .offset-md-5 {\n margin-right: 41.66666667%;\n }\n .offset-md-6 {\n margin-right: 50%;\n }\n .offset-md-7 {\n margin-right: 58.33333333%;\n }\n .offset-md-8 {\n margin-right: 66.66666667%;\n }\n .offset-md-9 {\n margin-right: 75%;\n }\n .offset-md-10 {\n margin-right: 83.33333333%;\n }\n .offset-md-11 {\n margin-right: 91.66666667%;\n }\n .g-md-0,\n.gx-md-0 {\n --bs-gutter-x: 0;\n }\n .g-md-0,\n.gy-md-0 {\n --bs-gutter-y: 0;\n }\n .g-md-1,\n.gx-md-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-md-1,\n.gy-md-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-md-2,\n.gx-md-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-md-2,\n.gy-md-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-md-3,\n.gx-md-3 {\n --bs-gutter-x: 1rem;\n }\n .g-md-3,\n.gy-md-3 {\n --bs-gutter-y: 1rem;\n }\n .g-md-4,\n.gx-md-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-md-4,\n.gy-md-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-md-5,\n.gx-md-5 {\n --bs-gutter-x: 3rem;\n }\n .g-md-5,\n.gy-md-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 992px) {\n .col-lg {\n flex: 1 0 0%;\n }\n .row-cols-lg-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-lg-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-lg-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-lg-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-lg-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-lg-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-lg-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-lg-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-lg-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-lg-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-lg-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-lg-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-lg-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-lg-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-lg-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-lg-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-lg-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-lg-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-lg-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-lg-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-lg-0 {\n margin-right: 0;\n }\n .offset-lg-1 {\n margin-right: 8.33333333%;\n }\n .offset-lg-2 {\n margin-right: 16.66666667%;\n }\n .offset-lg-3 {\n margin-right: 25%;\n }\n .offset-lg-4 {\n margin-right: 33.33333333%;\n }\n .offset-lg-5 {\n margin-right: 41.66666667%;\n }\n .offset-lg-6 {\n margin-right: 50%;\n }\n .offset-lg-7 {\n margin-right: 58.33333333%;\n }\n .offset-lg-8 {\n margin-right: 66.66666667%;\n }\n .offset-lg-9 {\n margin-right: 75%;\n }\n .offset-lg-10 {\n margin-right: 83.33333333%;\n }\n .offset-lg-11 {\n margin-right: 91.66666667%;\n }\n .g-lg-0,\n.gx-lg-0 {\n --bs-gutter-x: 0;\n }\n .g-lg-0,\n.gy-lg-0 {\n --bs-gutter-y: 0;\n }\n .g-lg-1,\n.gx-lg-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-lg-1,\n.gy-lg-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-lg-2,\n.gx-lg-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-lg-2,\n.gy-lg-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-lg-3,\n.gx-lg-3 {\n --bs-gutter-x: 1rem;\n }\n .g-lg-3,\n.gy-lg-3 {\n --bs-gutter-y: 1rem;\n }\n .g-lg-4,\n.gx-lg-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-lg-4,\n.gy-lg-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-lg-5,\n.gx-lg-5 {\n --bs-gutter-x: 3rem;\n }\n .g-lg-5,\n.gy-lg-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1200px) {\n .col-xl {\n flex: 1 0 0%;\n }\n .row-cols-xl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xl-0 {\n margin-right: 0;\n }\n .offset-xl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xl-3 {\n margin-right: 25%;\n }\n .offset-xl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xl-6 {\n margin-right: 50%;\n }\n .offset-xl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xl-9 {\n margin-right: 75%;\n }\n .offset-xl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xl-11 {\n margin-right: 91.66666667%;\n }\n .g-xl-0,\n.gx-xl-0 {\n --bs-gutter-x: 0;\n }\n .g-xl-0,\n.gy-xl-0 {\n --bs-gutter-y: 0;\n }\n .g-xl-1,\n.gx-xl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xl-1,\n.gy-xl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xl-2,\n.gx-xl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xl-2,\n.gy-xl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xl-3,\n.gx-xl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xl-3,\n.gy-xl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xl-4,\n.gx-xl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xl-4,\n.gy-xl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xl-5,\n.gx-xl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xl-5,\n.gy-xl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n@media (min-width: 1400px) {\n .col-xxl {\n flex: 1 0 0%;\n }\n .row-cols-xxl-auto > * {\n flex: 0 0 auto;\n width: auto;\n }\n .row-cols-xxl-1 > * {\n flex: 0 0 auto;\n width: 100%;\n }\n .row-cols-xxl-2 > * {\n flex: 0 0 auto;\n width: 50%;\n }\n .row-cols-xxl-3 > * {\n flex: 0 0 auto;\n width: 33.3333333333%;\n }\n .row-cols-xxl-4 > * {\n flex: 0 0 auto;\n width: 25%;\n }\n .row-cols-xxl-5 > * {\n flex: 0 0 auto;\n width: 20%;\n }\n .row-cols-xxl-6 > * {\n flex: 0 0 auto;\n width: 16.6666666667%;\n }\n .col-xxl-auto {\n flex: 0 0 auto;\n width: auto;\n }\n .col-xxl-1 {\n flex: 0 0 auto;\n width: 8.33333333%;\n }\n .col-xxl-2 {\n flex: 0 0 auto;\n width: 16.66666667%;\n }\n .col-xxl-3 {\n flex: 0 0 auto;\n width: 25%;\n }\n .col-xxl-4 {\n flex: 0 0 auto;\n width: 33.33333333%;\n }\n .col-xxl-5 {\n flex: 0 0 auto;\n width: 41.66666667%;\n }\n .col-xxl-6 {\n flex: 0 0 auto;\n width: 50%;\n }\n .col-xxl-7 {\n flex: 0 0 auto;\n width: 58.33333333%;\n }\n .col-xxl-8 {\n flex: 0 0 auto;\n width: 66.66666667%;\n }\n .col-xxl-9 {\n flex: 0 0 auto;\n width: 75%;\n }\n .col-xxl-10 {\n flex: 0 0 auto;\n width: 83.33333333%;\n }\n .col-xxl-11 {\n flex: 0 0 auto;\n width: 91.66666667%;\n }\n .col-xxl-12 {\n flex: 0 0 auto;\n width: 100%;\n }\n .offset-xxl-0 {\n margin-right: 0;\n }\n .offset-xxl-1 {\n margin-right: 8.33333333%;\n }\n .offset-xxl-2 {\n margin-right: 16.66666667%;\n }\n .offset-xxl-3 {\n margin-right: 25%;\n }\n .offset-xxl-4 {\n margin-right: 33.33333333%;\n }\n .offset-xxl-5 {\n margin-right: 41.66666667%;\n }\n .offset-xxl-6 {\n margin-right: 50%;\n }\n .offset-xxl-7 {\n margin-right: 58.33333333%;\n }\n .offset-xxl-8 {\n margin-right: 66.66666667%;\n }\n .offset-xxl-9 {\n margin-right: 75%;\n }\n .offset-xxl-10 {\n margin-right: 83.33333333%;\n }\n .offset-xxl-11 {\n margin-right: 91.66666667%;\n }\n .g-xxl-0,\n.gx-xxl-0 {\n --bs-gutter-x: 0;\n }\n .g-xxl-0,\n.gy-xxl-0 {\n --bs-gutter-y: 0;\n }\n .g-xxl-1,\n.gx-xxl-1 {\n --bs-gutter-x: 0.25rem;\n }\n .g-xxl-1,\n.gy-xxl-1 {\n --bs-gutter-y: 0.25rem;\n }\n .g-xxl-2,\n.gx-xxl-2 {\n --bs-gutter-x: 0.5rem;\n }\n .g-xxl-2,\n.gy-xxl-2 {\n --bs-gutter-y: 0.5rem;\n }\n .g-xxl-3,\n.gx-xxl-3 {\n --bs-gutter-x: 1rem;\n }\n .g-xxl-3,\n.gy-xxl-3 {\n --bs-gutter-y: 1rem;\n }\n .g-xxl-4,\n.gx-xxl-4 {\n --bs-gutter-x: 1.5rem;\n }\n .g-xxl-4,\n.gy-xxl-4 {\n --bs-gutter-y: 1.5rem;\n }\n .g-xxl-5,\n.gx-xxl-5 {\n --bs-gutter-x: 3rem;\n }\n .g-xxl-5,\n.gy-xxl-5 {\n --bs-gutter-y: 3rem;\n }\n}\n.d-inline {\n display: inline !important;\n}\n\n.d-inline-block {\n display: inline-block !important;\n}\n\n.d-block {\n display: block !important;\n}\n\n.d-grid {\n display: grid !important;\n}\n\n.d-table {\n display: table !important;\n}\n\n.d-table-row {\n display: table-row !important;\n}\n\n.d-table-cell {\n display: table-cell !important;\n}\n\n.d-flex {\n display: flex !important;\n}\n\n.d-inline-flex {\n display: inline-flex !important;\n}\n\n.d-none {\n display: none !important;\n}\n\n.flex-fill {\n flex: 1 1 auto !important;\n}\n\n.flex-row {\n flex-direction: row !important;\n}\n\n.flex-column {\n flex-direction: column !important;\n}\n\n.flex-row-reverse {\n flex-direction: row-reverse !important;\n}\n\n.flex-column-reverse {\n flex-direction: column-reverse !important;\n}\n\n.flex-grow-0 {\n flex-grow: 0 !important;\n}\n\n.flex-grow-1 {\n flex-grow: 1 !important;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0 !important;\n}\n\n.flex-shrink-1 {\n flex-shrink: 1 !important;\n}\n\n.flex-wrap {\n flex-wrap: wrap !important;\n}\n\n.flex-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.flex-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.justify-content-start {\n justify-content: flex-start !important;\n}\n\n.justify-content-end {\n justify-content: flex-end !important;\n}\n\n.justify-content-center {\n justify-content: center !important;\n}\n\n.justify-content-between {\n justify-content: space-between !important;\n}\n\n.justify-content-around {\n justify-content: space-around !important;\n}\n\n.justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.align-items-start {\n align-items: flex-start !important;\n}\n\n.align-items-end {\n align-items: flex-end !important;\n}\n\n.align-items-center {\n align-items: center !important;\n}\n\n.align-items-baseline {\n align-items: baseline !important;\n}\n\n.align-items-stretch {\n align-items: stretch !important;\n}\n\n.align-content-start {\n align-content: flex-start !important;\n}\n\n.align-content-end {\n align-content: flex-end !important;\n}\n\n.align-content-center {\n align-content: center !important;\n}\n\n.align-content-between {\n align-content: space-between !important;\n}\n\n.align-content-around {\n align-content: space-around !important;\n}\n\n.align-content-stretch {\n align-content: stretch !important;\n}\n\n.align-self-auto {\n align-self: auto !important;\n}\n\n.align-self-start {\n align-self: flex-start !important;\n}\n\n.align-self-end {\n align-self: flex-end !important;\n}\n\n.align-self-center {\n align-self: center !important;\n}\n\n.align-self-baseline {\n align-self: baseline !important;\n}\n\n.align-self-stretch {\n align-self: stretch !important;\n}\n\n.order-first {\n order: -1 !important;\n}\n\n.order-0 {\n order: 0 !important;\n}\n\n.order-1 {\n order: 1 !important;\n}\n\n.order-2 {\n order: 2 !important;\n}\n\n.order-3 {\n order: 3 !important;\n}\n\n.order-4 {\n order: 4 !important;\n}\n\n.order-5 {\n order: 5 !important;\n}\n\n.order-last {\n order: 6 !important;\n}\n\n.m-0 {\n margin: 0 !important;\n}\n\n.m-1 {\n margin: 0.25rem !important;\n}\n\n.m-2 {\n margin: 0.5rem !important;\n}\n\n.m-3 {\n margin: 1rem !important;\n}\n\n.m-4 {\n margin: 1.5rem !important;\n}\n\n.m-5 {\n margin: 3rem !important;\n}\n\n.m-auto {\n margin: auto !important;\n}\n\n.mx-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n.mx-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n}\n\n.mx-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n}\n\n.mx-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n}\n\n.mx-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n}\n\n.mx-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n}\n\n.mx-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n.my-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n}\n\n.my-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n}\n\n.my-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n}\n\n.my-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n}\n\n.my-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n}\n\n.my-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n}\n\n.my-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n}\n\n.mt-0 {\n margin-top: 0 !important;\n}\n\n.mt-1 {\n margin-top: 0.25rem !important;\n}\n\n.mt-2 {\n margin-top: 0.5rem !important;\n}\n\n.mt-3 {\n margin-top: 1rem !important;\n}\n\n.mt-4 {\n margin-top: 1.5rem !important;\n}\n\n.mt-5 {\n margin-top: 3rem !important;\n}\n\n.mt-auto {\n margin-top: auto !important;\n}\n\n.me-0 {\n margin-left: 0 !important;\n}\n\n.me-1 {\n margin-left: 0.25rem !important;\n}\n\n.me-2 {\n margin-left: 0.5rem !important;\n}\n\n.me-3 {\n margin-left: 1rem !important;\n}\n\n.me-4 {\n margin-left: 1.5rem !important;\n}\n\n.me-5 {\n margin-left: 3rem !important;\n}\n\n.me-auto {\n margin-left: auto !important;\n}\n\n.mb-0 {\n margin-bottom: 0 !important;\n}\n\n.mb-1 {\n margin-bottom: 0.25rem !important;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem !important;\n}\n\n.mb-3 {\n margin-bottom: 1rem !important;\n}\n\n.mb-4 {\n margin-bottom: 1.5rem !important;\n}\n\n.mb-5 {\n margin-bottom: 3rem !important;\n}\n\n.mb-auto {\n margin-bottom: auto !important;\n}\n\n.ms-0 {\n margin-right: 0 !important;\n}\n\n.ms-1 {\n margin-right: 0.25rem !important;\n}\n\n.ms-2 {\n margin-right: 0.5rem !important;\n}\n\n.ms-3 {\n margin-right: 1rem !important;\n}\n\n.ms-4 {\n margin-right: 1.5rem !important;\n}\n\n.ms-5 {\n margin-right: 3rem !important;\n}\n\n.ms-auto {\n margin-right: auto !important;\n}\n\n.p-0 {\n padding: 0 !important;\n}\n\n.p-1 {\n padding: 0.25rem !important;\n}\n\n.p-2 {\n padding: 0.5rem !important;\n}\n\n.p-3 {\n padding: 1rem !important;\n}\n\n.p-4 {\n padding: 1.5rem !important;\n}\n\n.p-5 {\n padding: 3rem !important;\n}\n\n.px-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n.px-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n}\n\n.px-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n}\n\n.px-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n}\n\n.px-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n}\n\n.px-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n}\n\n.py-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n}\n\n.py-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n}\n\n.py-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n}\n\n.py-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n}\n\n.py-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n}\n\n.py-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n}\n\n.pt-0 {\n padding-top: 0 !important;\n}\n\n.pt-1 {\n padding-top: 0.25rem !important;\n}\n\n.pt-2 {\n padding-top: 0.5rem !important;\n}\n\n.pt-3 {\n padding-top: 1rem !important;\n}\n\n.pt-4 {\n padding-top: 1.5rem !important;\n}\n\n.pt-5 {\n padding-top: 3rem !important;\n}\n\n.pe-0 {\n padding-left: 0 !important;\n}\n\n.pe-1 {\n padding-left: 0.25rem !important;\n}\n\n.pe-2 {\n padding-left: 0.5rem !important;\n}\n\n.pe-3 {\n padding-left: 1rem !important;\n}\n\n.pe-4 {\n padding-left: 1.5rem !important;\n}\n\n.pe-5 {\n padding-left: 3rem !important;\n}\n\n.pb-0 {\n padding-bottom: 0 !important;\n}\n\n.pb-1 {\n padding-bottom: 0.25rem !important;\n}\n\n.pb-2 {\n padding-bottom: 0.5rem !important;\n}\n\n.pb-3 {\n padding-bottom: 1rem !important;\n}\n\n.pb-4 {\n padding-bottom: 1.5rem !important;\n}\n\n.pb-5 {\n padding-bottom: 3rem !important;\n}\n\n.ps-0 {\n padding-right: 0 !important;\n}\n\n.ps-1 {\n padding-right: 0.25rem !important;\n}\n\n.ps-2 {\n padding-right: 0.5rem !important;\n}\n\n.ps-3 {\n padding-right: 1rem !important;\n}\n\n.ps-4 {\n padding-right: 1.5rem !important;\n}\n\n.ps-5 {\n padding-right: 3rem !important;\n}\n\n@media (min-width: 576px) {\n .d-sm-inline {\n display: inline !important;\n }\n .d-sm-inline-block {\n display: inline-block !important;\n }\n .d-sm-block {\n display: block !important;\n }\n .d-sm-grid {\n display: grid !important;\n }\n .d-sm-table {\n display: table !important;\n }\n .d-sm-table-row {\n display: table-row !important;\n }\n .d-sm-table-cell {\n display: table-cell !important;\n }\n .d-sm-flex {\n display: flex !important;\n }\n .d-sm-inline-flex {\n display: inline-flex !important;\n }\n .d-sm-none {\n display: none !important;\n }\n .flex-sm-fill {\n flex: 1 1 auto !important;\n }\n .flex-sm-row {\n flex-direction: row !important;\n }\n .flex-sm-column {\n flex-direction: column !important;\n }\n .flex-sm-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-sm-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-sm-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-sm-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-sm-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-sm-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-sm-wrap {\n flex-wrap: wrap !important;\n }\n .flex-sm-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-sm-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-sm-start {\n justify-content: flex-start !important;\n }\n .justify-content-sm-end {\n justify-content: flex-end !important;\n }\n .justify-content-sm-center {\n justify-content: center !important;\n }\n .justify-content-sm-between {\n justify-content: space-between !important;\n }\n .justify-content-sm-around {\n justify-content: space-around !important;\n }\n .justify-content-sm-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-sm-start {\n align-items: flex-start !important;\n }\n .align-items-sm-end {\n align-items: flex-end !important;\n }\n .align-items-sm-center {\n align-items: center !important;\n }\n .align-items-sm-baseline {\n align-items: baseline !important;\n }\n .align-items-sm-stretch {\n align-items: stretch !important;\n }\n .align-content-sm-start {\n align-content: flex-start !important;\n }\n .align-content-sm-end {\n align-content: flex-end !important;\n }\n .align-content-sm-center {\n align-content: center !important;\n }\n .align-content-sm-between {\n align-content: space-between !important;\n }\n .align-content-sm-around {\n align-content: space-around !important;\n }\n .align-content-sm-stretch {\n align-content: stretch !important;\n }\n .align-self-sm-auto {\n align-self: auto !important;\n }\n .align-self-sm-start {\n align-self: flex-start !important;\n }\n .align-self-sm-end {\n align-self: flex-end !important;\n }\n .align-self-sm-center {\n align-self: center !important;\n }\n .align-self-sm-baseline {\n align-self: baseline !important;\n }\n .align-self-sm-stretch {\n align-self: stretch !important;\n }\n .order-sm-first {\n order: -1 !important;\n }\n .order-sm-0 {\n order: 0 !important;\n }\n .order-sm-1 {\n order: 1 !important;\n }\n .order-sm-2 {\n order: 2 !important;\n }\n .order-sm-3 {\n order: 3 !important;\n }\n .order-sm-4 {\n order: 4 !important;\n }\n .order-sm-5 {\n order: 5 !important;\n }\n .order-sm-last {\n order: 6 !important;\n }\n .m-sm-0 {\n margin: 0 !important;\n }\n .m-sm-1 {\n margin: 0.25rem !important;\n }\n .m-sm-2 {\n margin: 0.5rem !important;\n }\n .m-sm-3 {\n margin: 1rem !important;\n }\n .m-sm-4 {\n margin: 1.5rem !important;\n }\n .m-sm-5 {\n margin: 3rem !important;\n }\n .m-sm-auto {\n margin: auto !important;\n }\n .mx-sm-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-sm-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-sm-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-sm-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-sm-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-sm-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-sm-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-sm-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-sm-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-sm-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-sm-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-sm-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-sm-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-sm-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-sm-0 {\n margin-top: 0 !important;\n }\n .mt-sm-1 {\n margin-top: 0.25rem !important;\n }\n .mt-sm-2 {\n margin-top: 0.5rem !important;\n }\n .mt-sm-3 {\n margin-top: 1rem !important;\n }\n .mt-sm-4 {\n margin-top: 1.5rem !important;\n }\n .mt-sm-5 {\n margin-top: 3rem !important;\n }\n .mt-sm-auto {\n margin-top: auto !important;\n }\n .me-sm-0 {\n margin-left: 0 !important;\n }\n .me-sm-1 {\n margin-left: 0.25rem !important;\n }\n .me-sm-2 {\n margin-left: 0.5rem !important;\n }\n .me-sm-3 {\n margin-left: 1rem !important;\n }\n .me-sm-4 {\n margin-left: 1.5rem !important;\n }\n .me-sm-5 {\n margin-left: 3rem !important;\n }\n .me-sm-auto {\n margin-left: auto !important;\n }\n .mb-sm-0 {\n margin-bottom: 0 !important;\n }\n .mb-sm-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-sm-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-sm-3 {\n margin-bottom: 1rem !important;\n }\n .mb-sm-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-sm-5 {\n margin-bottom: 3rem !important;\n }\n .mb-sm-auto {\n margin-bottom: auto !important;\n }\n .ms-sm-0 {\n margin-right: 0 !important;\n }\n .ms-sm-1 {\n margin-right: 0.25rem !important;\n }\n .ms-sm-2 {\n margin-right: 0.5rem !important;\n }\n .ms-sm-3 {\n margin-right: 1rem !important;\n }\n .ms-sm-4 {\n margin-right: 1.5rem !important;\n }\n .ms-sm-5 {\n margin-right: 3rem !important;\n }\n .ms-sm-auto {\n margin-right: auto !important;\n }\n .p-sm-0 {\n padding: 0 !important;\n }\n .p-sm-1 {\n padding: 0.25rem !important;\n }\n .p-sm-2 {\n padding: 0.5rem !important;\n }\n .p-sm-3 {\n padding: 1rem !important;\n }\n .p-sm-4 {\n padding: 1.5rem !important;\n }\n .p-sm-5 {\n padding: 3rem !important;\n }\n .px-sm-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-sm-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-sm-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-sm-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-sm-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-sm-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-sm-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-sm-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-sm-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-sm-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-sm-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-sm-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-sm-0 {\n padding-top: 0 !important;\n }\n .pt-sm-1 {\n padding-top: 0.25rem !important;\n }\n .pt-sm-2 {\n padding-top: 0.5rem !important;\n }\n .pt-sm-3 {\n padding-top: 1rem !important;\n }\n .pt-sm-4 {\n padding-top: 1.5rem !important;\n }\n .pt-sm-5 {\n padding-top: 3rem !important;\n }\n .pe-sm-0 {\n padding-left: 0 !important;\n }\n .pe-sm-1 {\n padding-left: 0.25rem !important;\n }\n .pe-sm-2 {\n padding-left: 0.5rem !important;\n }\n .pe-sm-3 {\n padding-left: 1rem !important;\n }\n .pe-sm-4 {\n padding-left: 1.5rem !important;\n }\n .pe-sm-5 {\n padding-left: 3rem !important;\n }\n .pb-sm-0 {\n padding-bottom: 0 !important;\n }\n .pb-sm-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-sm-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-sm-3 {\n padding-bottom: 1rem !important;\n }\n .pb-sm-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-sm-5 {\n padding-bottom: 3rem !important;\n }\n .ps-sm-0 {\n padding-right: 0 !important;\n }\n .ps-sm-1 {\n padding-right: 0.25rem !important;\n }\n .ps-sm-2 {\n padding-right: 0.5rem !important;\n }\n .ps-sm-3 {\n padding-right: 1rem !important;\n }\n .ps-sm-4 {\n padding-right: 1.5rem !important;\n }\n .ps-sm-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 768px) {\n .d-md-inline {\n display: inline !important;\n }\n .d-md-inline-block {\n display: inline-block !important;\n }\n .d-md-block {\n display: block !important;\n }\n .d-md-grid {\n display: grid !important;\n }\n .d-md-table {\n display: table !important;\n }\n .d-md-table-row {\n display: table-row !important;\n }\n .d-md-table-cell {\n display: table-cell !important;\n }\n .d-md-flex {\n display: flex !important;\n }\n .d-md-inline-flex {\n display: inline-flex !important;\n }\n .d-md-none {\n display: none !important;\n }\n .flex-md-fill {\n flex: 1 1 auto !important;\n }\n .flex-md-row {\n flex-direction: row !important;\n }\n .flex-md-column {\n flex-direction: column !important;\n }\n .flex-md-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-md-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-md-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-md-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-md-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-md-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-md-wrap {\n flex-wrap: wrap !important;\n }\n .flex-md-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-md-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-md-start {\n justify-content: flex-start !important;\n }\n .justify-content-md-end {\n justify-content: flex-end !important;\n }\n .justify-content-md-center {\n justify-content: center !important;\n }\n .justify-content-md-between {\n justify-content: space-between !important;\n }\n .justify-content-md-around {\n justify-content: space-around !important;\n }\n .justify-content-md-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-md-start {\n align-items: flex-start !important;\n }\n .align-items-md-end {\n align-items: flex-end !important;\n }\n .align-items-md-center {\n align-items: center !important;\n }\n .align-items-md-baseline {\n align-items: baseline !important;\n }\n .align-items-md-stretch {\n align-items: stretch !important;\n }\n .align-content-md-start {\n align-content: flex-start !important;\n }\n .align-content-md-end {\n align-content: flex-end !important;\n }\n .align-content-md-center {\n align-content: center !important;\n }\n .align-content-md-between {\n align-content: space-between !important;\n }\n .align-content-md-around {\n align-content: space-around !important;\n }\n .align-content-md-stretch {\n align-content: stretch !important;\n }\n .align-self-md-auto {\n align-self: auto !important;\n }\n .align-self-md-start {\n align-self: flex-start !important;\n }\n .align-self-md-end {\n align-self: flex-end !important;\n }\n .align-self-md-center {\n align-self: center !important;\n }\n .align-self-md-baseline {\n align-self: baseline !important;\n }\n .align-self-md-stretch {\n align-self: stretch !important;\n }\n .order-md-first {\n order: -1 !important;\n }\n .order-md-0 {\n order: 0 !important;\n }\n .order-md-1 {\n order: 1 !important;\n }\n .order-md-2 {\n order: 2 !important;\n }\n .order-md-3 {\n order: 3 !important;\n }\n .order-md-4 {\n order: 4 !important;\n }\n .order-md-5 {\n order: 5 !important;\n }\n .order-md-last {\n order: 6 !important;\n }\n .m-md-0 {\n margin: 0 !important;\n }\n .m-md-1 {\n margin: 0.25rem !important;\n }\n .m-md-2 {\n margin: 0.5rem !important;\n }\n .m-md-3 {\n margin: 1rem !important;\n }\n .m-md-4 {\n margin: 1.5rem !important;\n }\n .m-md-5 {\n margin: 3rem !important;\n }\n .m-md-auto {\n margin: auto !important;\n }\n .mx-md-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-md-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-md-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-md-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-md-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-md-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-md-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-md-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-md-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-md-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-md-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-md-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-md-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-md-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-md-0 {\n margin-top: 0 !important;\n }\n .mt-md-1 {\n margin-top: 0.25rem !important;\n }\n .mt-md-2 {\n margin-top: 0.5rem !important;\n }\n .mt-md-3 {\n margin-top: 1rem !important;\n }\n .mt-md-4 {\n margin-top: 1.5rem !important;\n }\n .mt-md-5 {\n margin-top: 3rem !important;\n }\n .mt-md-auto {\n margin-top: auto !important;\n }\n .me-md-0 {\n margin-left: 0 !important;\n }\n .me-md-1 {\n margin-left: 0.25rem !important;\n }\n .me-md-2 {\n margin-left: 0.5rem !important;\n }\n .me-md-3 {\n margin-left: 1rem !important;\n }\n .me-md-4 {\n margin-left: 1.5rem !important;\n }\n .me-md-5 {\n margin-left: 3rem !important;\n }\n .me-md-auto {\n margin-left: auto !important;\n }\n .mb-md-0 {\n margin-bottom: 0 !important;\n }\n .mb-md-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-md-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-md-3 {\n margin-bottom: 1rem !important;\n }\n .mb-md-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-md-5 {\n margin-bottom: 3rem !important;\n }\n .mb-md-auto {\n margin-bottom: auto !important;\n }\n .ms-md-0 {\n margin-right: 0 !important;\n }\n .ms-md-1 {\n margin-right: 0.25rem !important;\n }\n .ms-md-2 {\n margin-right: 0.5rem !important;\n }\n .ms-md-3 {\n margin-right: 1rem !important;\n }\n .ms-md-4 {\n margin-right: 1.5rem !important;\n }\n .ms-md-5 {\n margin-right: 3rem !important;\n }\n .ms-md-auto {\n margin-right: auto !important;\n }\n .p-md-0 {\n padding: 0 !important;\n }\n .p-md-1 {\n padding: 0.25rem !important;\n }\n .p-md-2 {\n padding: 0.5rem !important;\n }\n .p-md-3 {\n padding: 1rem !important;\n }\n .p-md-4 {\n padding: 1.5rem !important;\n }\n .p-md-5 {\n padding: 3rem !important;\n }\n .px-md-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-md-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-md-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-md-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-md-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-md-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-md-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-md-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-md-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-md-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-md-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-md-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-md-0 {\n padding-top: 0 !important;\n }\n .pt-md-1 {\n padding-top: 0.25rem !important;\n }\n .pt-md-2 {\n padding-top: 0.5rem !important;\n }\n .pt-md-3 {\n padding-top: 1rem !important;\n }\n .pt-md-4 {\n padding-top: 1.5rem !important;\n }\n .pt-md-5 {\n padding-top: 3rem !important;\n }\n .pe-md-0 {\n padding-left: 0 !important;\n }\n .pe-md-1 {\n padding-left: 0.25rem !important;\n }\n .pe-md-2 {\n padding-left: 0.5rem !important;\n }\n .pe-md-3 {\n padding-left: 1rem !important;\n }\n .pe-md-4 {\n padding-left: 1.5rem !important;\n }\n .pe-md-5 {\n padding-left: 3rem !important;\n }\n .pb-md-0 {\n padding-bottom: 0 !important;\n }\n .pb-md-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-md-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-md-3 {\n padding-bottom: 1rem !important;\n }\n .pb-md-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-md-5 {\n padding-bottom: 3rem !important;\n }\n .ps-md-0 {\n padding-right: 0 !important;\n }\n .ps-md-1 {\n padding-right: 0.25rem !important;\n }\n .ps-md-2 {\n padding-right: 0.5rem !important;\n }\n .ps-md-3 {\n padding-right: 1rem !important;\n }\n .ps-md-4 {\n padding-right: 1.5rem !important;\n }\n .ps-md-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 992px) {\n .d-lg-inline {\n display: inline !important;\n }\n .d-lg-inline-block {\n display: inline-block !important;\n }\n .d-lg-block {\n display: block !important;\n }\n .d-lg-grid {\n display: grid !important;\n }\n .d-lg-table {\n display: table !important;\n }\n .d-lg-table-row {\n display: table-row !important;\n }\n .d-lg-table-cell {\n display: table-cell !important;\n }\n .d-lg-flex {\n display: flex !important;\n }\n .d-lg-inline-flex {\n display: inline-flex !important;\n }\n .d-lg-none {\n display: none !important;\n }\n .flex-lg-fill {\n flex: 1 1 auto !important;\n }\n .flex-lg-row {\n flex-direction: row !important;\n }\n .flex-lg-column {\n flex-direction: column !important;\n }\n .flex-lg-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-lg-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-lg-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-lg-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-lg-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-lg-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-lg-wrap {\n flex-wrap: wrap !important;\n }\n .flex-lg-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-lg-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-lg-start {\n justify-content: flex-start !important;\n }\n .justify-content-lg-end {\n justify-content: flex-end !important;\n }\n .justify-content-lg-center {\n justify-content: center !important;\n }\n .justify-content-lg-between {\n justify-content: space-between !important;\n }\n .justify-content-lg-around {\n justify-content: space-around !important;\n }\n .justify-content-lg-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-lg-start {\n align-items: flex-start !important;\n }\n .align-items-lg-end {\n align-items: flex-end !important;\n }\n .align-items-lg-center {\n align-items: center !important;\n }\n .align-items-lg-baseline {\n align-items: baseline !important;\n }\n .align-items-lg-stretch {\n align-items: stretch !important;\n }\n .align-content-lg-start {\n align-content: flex-start !important;\n }\n .align-content-lg-end {\n align-content: flex-end !important;\n }\n .align-content-lg-center {\n align-content: center !important;\n }\n .align-content-lg-between {\n align-content: space-between !important;\n }\n .align-content-lg-around {\n align-content: space-around !important;\n }\n .align-content-lg-stretch {\n align-content: stretch !important;\n }\n .align-self-lg-auto {\n align-self: auto !important;\n }\n .align-self-lg-start {\n align-self: flex-start !important;\n }\n .align-self-lg-end {\n align-self: flex-end !important;\n }\n .align-self-lg-center {\n align-self: center !important;\n }\n .align-self-lg-baseline {\n align-self: baseline !important;\n }\n .align-self-lg-stretch {\n align-self: stretch !important;\n }\n .order-lg-first {\n order: -1 !important;\n }\n .order-lg-0 {\n order: 0 !important;\n }\n .order-lg-1 {\n order: 1 !important;\n }\n .order-lg-2 {\n order: 2 !important;\n }\n .order-lg-3 {\n order: 3 !important;\n }\n .order-lg-4 {\n order: 4 !important;\n }\n .order-lg-5 {\n order: 5 !important;\n }\n .order-lg-last {\n order: 6 !important;\n }\n .m-lg-0 {\n margin: 0 !important;\n }\n .m-lg-1 {\n margin: 0.25rem !important;\n }\n .m-lg-2 {\n margin: 0.5rem !important;\n }\n .m-lg-3 {\n margin: 1rem !important;\n }\n .m-lg-4 {\n margin: 1.5rem !important;\n }\n .m-lg-5 {\n margin: 3rem !important;\n }\n .m-lg-auto {\n margin: auto !important;\n }\n .mx-lg-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-lg-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-lg-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-lg-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-lg-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-lg-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-lg-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-lg-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-lg-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-lg-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-lg-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-lg-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-lg-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-lg-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-lg-0 {\n margin-top: 0 !important;\n }\n .mt-lg-1 {\n margin-top: 0.25rem !important;\n }\n .mt-lg-2 {\n margin-top: 0.5rem !important;\n }\n .mt-lg-3 {\n margin-top: 1rem !important;\n }\n .mt-lg-4 {\n margin-top: 1.5rem !important;\n }\n .mt-lg-5 {\n margin-top: 3rem !important;\n }\n .mt-lg-auto {\n margin-top: auto !important;\n }\n .me-lg-0 {\n margin-left: 0 !important;\n }\n .me-lg-1 {\n margin-left: 0.25rem !important;\n }\n .me-lg-2 {\n margin-left: 0.5rem !important;\n }\n .me-lg-3 {\n margin-left: 1rem !important;\n }\n .me-lg-4 {\n margin-left: 1.5rem !important;\n }\n .me-lg-5 {\n margin-left: 3rem !important;\n }\n .me-lg-auto {\n margin-left: auto !important;\n }\n .mb-lg-0 {\n margin-bottom: 0 !important;\n }\n .mb-lg-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-lg-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-lg-3 {\n margin-bottom: 1rem !important;\n }\n .mb-lg-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-lg-5 {\n margin-bottom: 3rem !important;\n }\n .mb-lg-auto {\n margin-bottom: auto !important;\n }\n .ms-lg-0 {\n margin-right: 0 !important;\n }\n .ms-lg-1 {\n margin-right: 0.25rem !important;\n }\n .ms-lg-2 {\n margin-right: 0.5rem !important;\n }\n .ms-lg-3 {\n margin-right: 1rem !important;\n }\n .ms-lg-4 {\n margin-right: 1.5rem !important;\n }\n .ms-lg-5 {\n margin-right: 3rem !important;\n }\n .ms-lg-auto {\n margin-right: auto !important;\n }\n .p-lg-0 {\n padding: 0 !important;\n }\n .p-lg-1 {\n padding: 0.25rem !important;\n }\n .p-lg-2 {\n padding: 0.5rem !important;\n }\n .p-lg-3 {\n padding: 1rem !important;\n }\n .p-lg-4 {\n padding: 1.5rem !important;\n }\n .p-lg-5 {\n padding: 3rem !important;\n }\n .px-lg-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-lg-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-lg-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-lg-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-lg-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-lg-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-lg-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-lg-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-lg-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-lg-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-lg-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-lg-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-lg-0 {\n padding-top: 0 !important;\n }\n .pt-lg-1 {\n padding-top: 0.25rem !important;\n }\n .pt-lg-2 {\n padding-top: 0.5rem !important;\n }\n .pt-lg-3 {\n padding-top: 1rem !important;\n }\n .pt-lg-4 {\n padding-top: 1.5rem !important;\n }\n .pt-lg-5 {\n padding-top: 3rem !important;\n }\n .pe-lg-0 {\n padding-left: 0 !important;\n }\n .pe-lg-1 {\n padding-left: 0.25rem !important;\n }\n .pe-lg-2 {\n padding-left: 0.5rem !important;\n }\n .pe-lg-3 {\n padding-left: 1rem !important;\n }\n .pe-lg-4 {\n padding-left: 1.5rem !important;\n }\n .pe-lg-5 {\n padding-left: 3rem !important;\n }\n .pb-lg-0 {\n padding-bottom: 0 !important;\n }\n .pb-lg-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-lg-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-lg-3 {\n padding-bottom: 1rem !important;\n }\n .pb-lg-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-lg-5 {\n padding-bottom: 3rem !important;\n }\n .ps-lg-0 {\n padding-right: 0 !important;\n }\n .ps-lg-1 {\n padding-right: 0.25rem !important;\n }\n .ps-lg-2 {\n padding-right: 0.5rem !important;\n }\n .ps-lg-3 {\n padding-right: 1rem !important;\n }\n .ps-lg-4 {\n padding-right: 1.5rem !important;\n }\n .ps-lg-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1200px) {\n .d-xl-inline {\n display: inline !important;\n }\n .d-xl-inline-block {\n display: inline-block !important;\n }\n .d-xl-block {\n display: block !important;\n }\n .d-xl-grid {\n display: grid !important;\n }\n .d-xl-table {\n display: table !important;\n }\n .d-xl-table-row {\n display: table-row !important;\n }\n .d-xl-table-cell {\n display: table-cell !important;\n }\n .d-xl-flex {\n display: flex !important;\n }\n .d-xl-inline-flex {\n display: inline-flex !important;\n }\n .d-xl-none {\n display: none !important;\n }\n .flex-xl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xl-row {\n flex-direction: row !important;\n }\n .flex-xl-column {\n flex-direction: column !important;\n }\n .flex-xl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xl-center {\n justify-content: center !important;\n }\n .justify-content-xl-between {\n justify-content: space-between !important;\n }\n .justify-content-xl-around {\n justify-content: space-around !important;\n }\n .justify-content-xl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xl-start {\n align-items: flex-start !important;\n }\n .align-items-xl-end {\n align-items: flex-end !important;\n }\n .align-items-xl-center {\n align-items: center !important;\n }\n .align-items-xl-baseline {\n align-items: baseline !important;\n }\n .align-items-xl-stretch {\n align-items: stretch !important;\n }\n .align-content-xl-start {\n align-content: flex-start !important;\n }\n .align-content-xl-end {\n align-content: flex-end !important;\n }\n .align-content-xl-center {\n align-content: center !important;\n }\n .align-content-xl-between {\n align-content: space-between !important;\n }\n .align-content-xl-around {\n align-content: space-around !important;\n }\n .align-content-xl-stretch {\n align-content: stretch !important;\n }\n .align-self-xl-auto {\n align-self: auto !important;\n }\n .align-self-xl-start {\n align-self: flex-start !important;\n }\n .align-self-xl-end {\n align-self: flex-end !important;\n }\n .align-self-xl-center {\n align-self: center !important;\n }\n .align-self-xl-baseline {\n align-self: baseline !important;\n }\n .align-self-xl-stretch {\n align-self: stretch !important;\n }\n .order-xl-first {\n order: -1 !important;\n }\n .order-xl-0 {\n order: 0 !important;\n }\n .order-xl-1 {\n order: 1 !important;\n }\n .order-xl-2 {\n order: 2 !important;\n }\n .order-xl-3 {\n order: 3 !important;\n }\n .order-xl-4 {\n order: 4 !important;\n }\n .order-xl-5 {\n order: 5 !important;\n }\n .order-xl-last {\n order: 6 !important;\n }\n .m-xl-0 {\n margin: 0 !important;\n }\n .m-xl-1 {\n margin: 0.25rem !important;\n }\n .m-xl-2 {\n margin: 0.5rem !important;\n }\n .m-xl-3 {\n margin: 1rem !important;\n }\n .m-xl-4 {\n margin: 1.5rem !important;\n }\n .m-xl-5 {\n margin: 3rem !important;\n }\n .m-xl-auto {\n margin: auto !important;\n }\n .mx-xl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xl-0 {\n margin-top: 0 !important;\n }\n .mt-xl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xl-3 {\n margin-top: 1rem !important;\n }\n .mt-xl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xl-5 {\n margin-top: 3rem !important;\n }\n .mt-xl-auto {\n margin-top: auto !important;\n }\n .me-xl-0 {\n margin-left: 0 !important;\n }\n .me-xl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xl-3 {\n margin-left: 1rem !important;\n }\n .me-xl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xl-5 {\n margin-left: 3rem !important;\n }\n .me-xl-auto {\n margin-left: auto !important;\n }\n .mb-xl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xl-auto {\n margin-bottom: auto !important;\n }\n .ms-xl-0 {\n margin-right: 0 !important;\n }\n .ms-xl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xl-3 {\n margin-right: 1rem !important;\n }\n .ms-xl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xl-5 {\n margin-right: 3rem !important;\n }\n .ms-xl-auto {\n margin-right: auto !important;\n }\n .p-xl-0 {\n padding: 0 !important;\n }\n .p-xl-1 {\n padding: 0.25rem !important;\n }\n .p-xl-2 {\n padding: 0.5rem !important;\n }\n .p-xl-3 {\n padding: 1rem !important;\n }\n .p-xl-4 {\n padding: 1.5rem !important;\n }\n .p-xl-5 {\n padding: 3rem !important;\n }\n .px-xl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xl-0 {\n padding-top: 0 !important;\n }\n .pt-xl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xl-3 {\n padding-top: 1rem !important;\n }\n .pt-xl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xl-5 {\n padding-top: 3rem !important;\n }\n .pe-xl-0 {\n padding-left: 0 !important;\n }\n .pe-xl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xl-3 {\n padding-left: 1rem !important;\n }\n .pe-xl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xl-5 {\n padding-left: 3rem !important;\n }\n .pb-xl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xl-0 {\n padding-right: 0 !important;\n }\n .ps-xl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xl-3 {\n padding-right: 1rem !important;\n }\n .ps-xl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xl-5 {\n padding-right: 3rem !important;\n }\n}\n@media (min-width: 1400px) {\n .d-xxl-inline {\n display: inline !important;\n }\n .d-xxl-inline-block {\n display: inline-block !important;\n }\n .d-xxl-block {\n display: block !important;\n }\n .d-xxl-grid {\n display: grid !important;\n }\n .d-xxl-table {\n display: table !important;\n }\n .d-xxl-table-row {\n display: table-row !important;\n }\n .d-xxl-table-cell {\n display: table-cell !important;\n }\n .d-xxl-flex {\n display: flex !important;\n }\n .d-xxl-inline-flex {\n display: inline-flex !important;\n }\n .d-xxl-none {\n display: none !important;\n }\n .flex-xxl-fill {\n flex: 1 1 auto !important;\n }\n .flex-xxl-row {\n flex-direction: row !important;\n }\n .flex-xxl-column {\n flex-direction: column !important;\n }\n .flex-xxl-row-reverse {\n flex-direction: row-reverse !important;\n }\n .flex-xxl-column-reverse {\n flex-direction: column-reverse !important;\n }\n .flex-xxl-grow-0 {\n flex-grow: 0 !important;\n }\n .flex-xxl-grow-1 {\n flex-grow: 1 !important;\n }\n .flex-xxl-shrink-0 {\n flex-shrink: 0 !important;\n }\n .flex-xxl-shrink-1 {\n flex-shrink: 1 !important;\n }\n .flex-xxl-wrap {\n flex-wrap: wrap !important;\n }\n .flex-xxl-nowrap {\n flex-wrap: nowrap !important;\n }\n .flex-xxl-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n }\n .justify-content-xxl-start {\n justify-content: flex-start !important;\n }\n .justify-content-xxl-end {\n justify-content: flex-end !important;\n }\n .justify-content-xxl-center {\n justify-content: center !important;\n }\n .justify-content-xxl-between {\n justify-content: space-between !important;\n }\n .justify-content-xxl-around {\n justify-content: space-around !important;\n }\n .justify-content-xxl-evenly {\n justify-content: space-evenly !important;\n }\n .align-items-xxl-start {\n align-items: flex-start !important;\n }\n .align-items-xxl-end {\n align-items: flex-end !important;\n }\n .align-items-xxl-center {\n align-items: center !important;\n }\n .align-items-xxl-baseline {\n align-items: baseline !important;\n }\n .align-items-xxl-stretch {\n align-items: stretch !important;\n }\n .align-content-xxl-start {\n align-content: flex-start !important;\n }\n .align-content-xxl-end {\n align-content: flex-end !important;\n }\n .align-content-xxl-center {\n align-content: center !important;\n }\n .align-content-xxl-between {\n align-content: space-between !important;\n }\n .align-content-xxl-around {\n align-content: space-around !important;\n }\n .align-content-xxl-stretch {\n align-content: stretch !important;\n }\n .align-self-xxl-auto {\n align-self: auto !important;\n }\n .align-self-xxl-start {\n align-self: flex-start !important;\n }\n .align-self-xxl-end {\n align-self: flex-end !important;\n }\n .align-self-xxl-center {\n align-self: center !important;\n }\n .align-self-xxl-baseline {\n align-self: baseline !important;\n }\n .align-self-xxl-stretch {\n align-self: stretch !important;\n }\n .order-xxl-first {\n order: -1 !important;\n }\n .order-xxl-0 {\n order: 0 !important;\n }\n .order-xxl-1 {\n order: 1 !important;\n }\n .order-xxl-2 {\n order: 2 !important;\n }\n .order-xxl-3 {\n order: 3 !important;\n }\n .order-xxl-4 {\n order: 4 !important;\n }\n .order-xxl-5 {\n order: 5 !important;\n }\n .order-xxl-last {\n order: 6 !important;\n }\n .m-xxl-0 {\n margin: 0 !important;\n }\n .m-xxl-1 {\n margin: 0.25rem !important;\n }\n .m-xxl-2 {\n margin: 0.5rem !important;\n }\n .m-xxl-3 {\n margin: 1rem !important;\n }\n .m-xxl-4 {\n margin: 1.5rem !important;\n }\n .m-xxl-5 {\n margin: 3rem !important;\n }\n .m-xxl-auto {\n margin: auto !important;\n }\n .mx-xxl-0 {\n margin-left: 0 !important;\n margin-right: 0 !important;\n }\n .mx-xxl-1 {\n margin-left: 0.25rem !important;\n margin-right: 0.25rem !important;\n }\n .mx-xxl-2 {\n margin-left: 0.5rem !important;\n margin-right: 0.5rem !important;\n }\n .mx-xxl-3 {\n margin-left: 1rem !important;\n margin-right: 1rem !important;\n }\n .mx-xxl-4 {\n margin-left: 1.5rem !important;\n margin-right: 1.5rem !important;\n }\n .mx-xxl-5 {\n margin-left: 3rem !important;\n margin-right: 3rem !important;\n }\n .mx-xxl-auto {\n margin-left: auto !important;\n margin-right: auto !important;\n }\n .my-xxl-0 {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n .my-xxl-1 {\n margin-top: 0.25rem !important;\n margin-bottom: 0.25rem !important;\n }\n .my-xxl-2 {\n margin-top: 0.5rem !important;\n margin-bottom: 0.5rem !important;\n }\n .my-xxl-3 {\n margin-top: 1rem !important;\n margin-bottom: 1rem !important;\n }\n .my-xxl-4 {\n margin-top: 1.5rem !important;\n margin-bottom: 1.5rem !important;\n }\n .my-xxl-5 {\n margin-top: 3rem !important;\n margin-bottom: 3rem !important;\n }\n .my-xxl-auto {\n margin-top: auto !important;\n margin-bottom: auto !important;\n }\n .mt-xxl-0 {\n margin-top: 0 !important;\n }\n .mt-xxl-1 {\n margin-top: 0.25rem !important;\n }\n .mt-xxl-2 {\n margin-top: 0.5rem !important;\n }\n .mt-xxl-3 {\n margin-top: 1rem !important;\n }\n .mt-xxl-4 {\n margin-top: 1.5rem !important;\n }\n .mt-xxl-5 {\n margin-top: 3rem !important;\n }\n .mt-xxl-auto {\n margin-top: auto !important;\n }\n .me-xxl-0 {\n margin-left: 0 !important;\n }\n .me-xxl-1 {\n margin-left: 0.25rem !important;\n }\n .me-xxl-2 {\n margin-left: 0.5rem !important;\n }\n .me-xxl-3 {\n margin-left: 1rem !important;\n }\n .me-xxl-4 {\n margin-left: 1.5rem !important;\n }\n .me-xxl-5 {\n margin-left: 3rem !important;\n }\n .me-xxl-auto {\n margin-left: auto !important;\n }\n .mb-xxl-0 {\n margin-bottom: 0 !important;\n }\n .mb-xxl-1 {\n margin-bottom: 0.25rem !important;\n }\n .mb-xxl-2 {\n margin-bottom: 0.5rem !important;\n }\n .mb-xxl-3 {\n margin-bottom: 1rem !important;\n }\n .mb-xxl-4 {\n margin-bottom: 1.5rem !important;\n }\n .mb-xxl-5 {\n margin-bottom: 3rem !important;\n }\n .mb-xxl-auto {\n margin-bottom: auto !important;\n }\n .ms-xxl-0 {\n margin-right: 0 !important;\n }\n .ms-xxl-1 {\n margin-right: 0.25rem !important;\n }\n .ms-xxl-2 {\n margin-right: 0.5rem !important;\n }\n .ms-xxl-3 {\n margin-right: 1rem !important;\n }\n .ms-xxl-4 {\n margin-right: 1.5rem !important;\n }\n .ms-xxl-5 {\n margin-right: 3rem !important;\n }\n .ms-xxl-auto {\n margin-right: auto !important;\n }\n .p-xxl-0 {\n padding: 0 !important;\n }\n .p-xxl-1 {\n padding: 0.25rem !important;\n }\n .p-xxl-2 {\n padding: 0.5rem !important;\n }\n .p-xxl-3 {\n padding: 1rem !important;\n }\n .p-xxl-4 {\n padding: 1.5rem !important;\n }\n .p-xxl-5 {\n padding: 3rem !important;\n }\n .px-xxl-0 {\n padding-left: 0 !important;\n padding-right: 0 !important;\n }\n .px-xxl-1 {\n padding-left: 0.25rem !important;\n padding-right: 0.25rem !important;\n }\n .px-xxl-2 {\n padding-left: 0.5rem !important;\n padding-right: 0.5rem !important;\n }\n .px-xxl-3 {\n padding-left: 1rem !important;\n padding-right: 1rem !important;\n }\n .px-xxl-4 {\n padding-left: 1.5rem !important;\n padding-right: 1.5rem !important;\n }\n .px-xxl-5 {\n padding-left: 3rem !important;\n padding-right: 3rem !important;\n }\n .py-xxl-0 {\n padding-top: 0 !important;\n padding-bottom: 0 !important;\n }\n .py-xxl-1 {\n padding-top: 0.25rem !important;\n padding-bottom: 0.25rem !important;\n }\n .py-xxl-2 {\n padding-top: 0.5rem !important;\n padding-bottom: 0.5rem !important;\n }\n .py-xxl-3 {\n padding-top: 1rem !important;\n padding-bottom: 1rem !important;\n }\n .py-xxl-4 {\n padding-top: 1.5rem !important;\n padding-bottom: 1.5rem !important;\n }\n .py-xxl-5 {\n padding-top: 3rem !important;\n padding-bottom: 3rem !important;\n }\n .pt-xxl-0 {\n padding-top: 0 !important;\n }\n .pt-xxl-1 {\n padding-top: 0.25rem !important;\n }\n .pt-xxl-2 {\n padding-top: 0.5rem !important;\n }\n .pt-xxl-3 {\n padding-top: 1rem !important;\n }\n .pt-xxl-4 {\n padding-top: 1.5rem !important;\n }\n .pt-xxl-5 {\n padding-top: 3rem !important;\n }\n .pe-xxl-0 {\n padding-left: 0 !important;\n }\n .pe-xxl-1 {\n padding-left: 0.25rem !important;\n }\n .pe-xxl-2 {\n padding-left: 0.5rem !important;\n }\n .pe-xxl-3 {\n padding-left: 1rem !important;\n }\n .pe-xxl-4 {\n padding-left: 1.5rem !important;\n }\n .pe-xxl-5 {\n padding-left: 3rem !important;\n }\n .pb-xxl-0 {\n padding-bottom: 0 !important;\n }\n .pb-xxl-1 {\n padding-bottom: 0.25rem !important;\n }\n .pb-xxl-2 {\n padding-bottom: 0.5rem !important;\n }\n .pb-xxl-3 {\n padding-bottom: 1rem !important;\n }\n .pb-xxl-4 {\n padding-bottom: 1.5rem !important;\n }\n .pb-xxl-5 {\n padding-bottom: 3rem !important;\n }\n .ps-xxl-0 {\n padding-right: 0 !important;\n }\n .ps-xxl-1 {\n padding-right: 0.25rem !important;\n }\n .ps-xxl-2 {\n padding-right: 0.5rem !important;\n }\n .ps-xxl-3 {\n padding-right: 1rem !important;\n }\n .ps-xxl-4 {\n padding-right: 1.5rem !important;\n }\n .ps-xxl-5 {\n padding-right: 3rem !important;\n }\n}\n@media print {\n .d-print-inline {\n display: inline !important;\n }\n .d-print-inline-block {\n display: inline-block !important;\n }\n .d-print-block {\n display: block !important;\n }\n .d-print-grid {\n display: grid !important;\n }\n .d-print-table {\n display: table !important;\n }\n .d-print-table-row {\n display: table-row !important;\n }\n .d-print-table-cell {\n display: table-cell !important;\n }\n .d-print-flex {\n display: flex !important;\n }\n .d-print-inline-flex {\n display: inline-flex !important;\n }\n .d-print-none {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap-grid.rtl.css.map */","// Container mixins\n\n@mixin make-container($gutter: $container-padding-x) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n width: 100%;\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-right: auto;\n margin-left: auto;\n}\n","// Breakpoint viewport sizes and media queries.\n//\n// Breakpoints are defined as a map of (name: minimum width), order from small to large:\n//\n// (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px)\n//\n// The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default.\n\n// Name of the next breakpoint, or null for the last breakpoint.\n//\n// >> breakpoint-next(sm)\n// md\n// >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// md\n// >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl xxl))\n// md\n@function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) {\n $n: index($breakpoint-names, $name);\n @if not $n {\n @error \"breakpoint `#{$name}` not found in `#{$breakpoints}`\";\n }\n @return if($n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null);\n}\n\n// Minimum breakpoint width. Null for the smallest (first) breakpoint.\n//\n// >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 576px\n@function breakpoint-min($name, $breakpoints: $grid-breakpoints) {\n $min: map-get($breakpoints, $name);\n @return if($min != 0, $min, null);\n}\n\n// Maximum breakpoint width.\n// The maximum value is reduced by 0.02px to work around the limitations of\n// `min-` and `max-` prefixes and viewports with fractional widths.\n// See https://www.w3.org/TR/mediaqueries-4/#mq-min-max\n// Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari.\n// See https://bugs.webkit.org/show_bug.cgi?id=178261\n//\n// >> breakpoint-max(md, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// 767.98px\n@function breakpoint-max($name, $breakpoints: $grid-breakpoints) {\n $max: map-get($breakpoints, $name);\n @return if($max and $max > 0, $max - .02, null);\n}\n\n// Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front.\n// Useful for making responsive utilities.\n//\n// >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"\" (Returns a blank string)\n// >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px, xxl: 1400px))\n// \"-sm\"\n@function breakpoint-infix($name, $breakpoints: $grid-breakpoints) {\n @return if(breakpoint-min($name, $breakpoints) == null, \"\", \"-#{$name}\");\n}\n\n// Media of at least the minimum breakpoint width. No query for the smallest breakpoint.\n// Makes the @content apply to the given breakpoint and wider.\n@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n @if $min {\n @media (min-width: $min) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media of at most the maximum breakpoint width. No query for the largest breakpoint.\n// Makes the @content apply to the given breakpoint and narrower.\n@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) {\n $max: breakpoint-max($name, $breakpoints);\n @if $max {\n @media (max-width: $max) {\n @content;\n }\n } @else {\n @content;\n }\n}\n\n// Media that spans multiple breakpoint widths.\n// Makes the @content apply between the min and max breakpoints\n@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($lower, $breakpoints);\n $max: breakpoint-max($upper, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($lower, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($upper, $breakpoints) {\n @content;\n }\n }\n}\n\n// Media between the breakpoint's minimum and maximum widths.\n// No minimum for the smallest breakpoint, and no maximum for the largest one.\n// Makes the @content apply only to the given breakpoint, not viewports any wider or narrower.\n@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) {\n $min: breakpoint-min($name, $breakpoints);\n $next: breakpoint-next($name, $breakpoints);\n $max: breakpoint-max($next, $breakpoints);\n\n @if $min != null and $max != null {\n @media (min-width: $min) and (max-width: $max) {\n @content;\n }\n } @else if $max == null {\n @include media-breakpoint-up($name, $breakpoints) {\n @content;\n }\n } @else if $min == null {\n @include media-breakpoint-down($next, $breakpoints) {\n @content;\n }\n }\n}\n","// Row\n//\n// Rows contain your columns.\n\n@if $enable-grid-classes {\n .row {\n @include make-row();\n\n > * {\n @include make-col-ready();\n }\n }\n}\n\n@if $enable-cssgrid {\n .grid {\n display: grid;\n grid-template-rows: repeat(var(--#{$prefix}rows, 1), 1fr);\n grid-template-columns: repeat(var(--#{$prefix}columns, #{$grid-columns}), 1fr);\n gap: var(--#{$prefix}gap, #{$grid-gutter-width});\n\n @include make-cssgrid();\n }\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n@if $enable-grid-classes {\n @include make-grid-columns();\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n@mixin make-row($gutter: $grid-gutter-width) {\n --#{$prefix}gutter-x: #{$gutter};\n --#{$prefix}gutter-y: 0;\n display: flex;\n flex-wrap: wrap;\n // TODO: Revisit calc order after https://github.com/react-bootstrap/react-bootstrap/issues/6039 is fixed\n margin-top: calc(-1 * var(--#{$prefix}gutter-y)); // stylelint-disable-line function-disallowed-list\n margin-right: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n margin-left: calc(-.5 * var(--#{$prefix}gutter-x)); // stylelint-disable-line function-disallowed-list\n}\n\n@mixin make-col-ready() {\n // Add box sizing if only the grid is loaded\n box-sizing: if(variable-exists(include-column-box-sizing) and $include-column-box-sizing, border-box, null);\n // Prevent columns from becoming too narrow when at smaller grid tiers by\n // always setting `width: 100%;`. This works because we set the width\n // later on to override this initial width.\n flex-shrink: 0;\n width: 100%;\n max-width: 100%; // Prevent `.col-auto`, `.col` (& responsive variants) from breaking out the grid\n padding-right: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n padding-left: calc(var(--#{$prefix}gutter-x) * .5); // stylelint-disable-line function-disallowed-list\n margin-top: var(--#{$prefix}gutter-y);\n}\n\n@mixin make-col($size: false, $columns: $grid-columns) {\n @if $size {\n flex: 0 0 auto;\n width: percentage(divide($size, $columns));\n\n } @else {\n flex: 1 1 0;\n max-width: 100%;\n }\n}\n\n@mixin make-col-auto() {\n flex: 0 0 auto;\n width: auto;\n}\n\n@mixin make-col-offset($size, $columns: $grid-columns) {\n $num: divide($size, $columns);\n margin-left: if($num == 0, 0, percentage($num));\n}\n\n// Row columns\n//\n// Specify on a parent element(e.g., .row) to force immediate children into NN\n// number of columns. Supports wrapping to new lines, but does not do a Masonry\n// style grid.\n@mixin row-cols($count) {\n > * {\n flex: 0 0 auto;\n width: divide(100%, $count);\n }\n}\n\n// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `$grid-columns`.\n\n@mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n // Provide basic `.col-{bp}` classes for equal-width flexbox columns\n .col#{$infix} {\n flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4\n }\n\n .row-cols#{$infix}-auto > * {\n @include make-col-auto();\n }\n\n @if $grid-row-columns > 0 {\n @for $i from 1 through $grid-row-columns {\n .row-cols#{$infix}-#{$i} {\n @include row-cols($i);\n }\n }\n }\n\n .col#{$infix}-auto {\n @include make-col-auto();\n }\n\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .col#{$infix}-#{$i} {\n @include make-col($i, $columns);\n }\n }\n\n // `$columns - 1` because offsetting by the width of an entire row isn't possible\n @for $i from 0 through ($columns - 1) {\n @if not ($infix == \"\" and $i == 0) { // Avoid emitting useless .offset-0\n .offset#{$infix}-#{$i} {\n @include make-col-offset($i, $columns);\n }\n }\n }\n }\n\n // Gutters\n //\n // Make use of `.g-*`, `.gx-*` or `.gy-*` utilities to change spacing between the columns.\n @each $key, $value in $gutters {\n .g#{$infix}-#{$key},\n .gx#{$infix}-#{$key} {\n --#{$prefix}gutter-x: #{$value};\n }\n\n .g#{$infix}-#{$key},\n .gy#{$infix}-#{$key} {\n --#{$prefix}gutter-y: #{$value};\n }\n }\n }\n }\n}\n\n@mixin make-cssgrid($columns: $grid-columns, $breakpoints: $grid-breakpoints) {\n @each $breakpoint in map-keys($breakpoints) {\n $infix: breakpoint-infix($breakpoint, $breakpoints);\n\n @include media-breakpoint-up($breakpoint, $breakpoints) {\n @if $columns > 0 {\n @for $i from 1 through $columns {\n .g-col#{$infix}-#{$i} {\n grid-column: auto / span $i;\n }\n }\n\n // Start with `1` because `0` is and invalid value.\n // Ends with `$columns - 1` because offsetting by the width of an entire row isn't possible.\n @for $i from 1 through ($columns - 1) {\n .g-start#{$infix}-#{$i} {\n grid-column-start: $i;\n }\n }\n }\n }\n }\n}\n","// Utility generator\n// Used to generate utilities & print utilities\n@mixin generate-utility($utility, $infix, $is-rfs-media-query: false) {\n $values: map-get($utility, values);\n\n // If the values are a list or string, convert it into a map\n @if type-of($values) == \"string\" or type-of(nth($values, 1)) != \"list\" {\n $values: zip($values, $values);\n }\n\n @each $key, $value in $values {\n $properties: map-get($utility, property);\n\n // Multiple properties are possible, for example with vertical or horizontal margins or paddings\n @if type-of($properties) == \"string\" {\n $properties: append((), $properties);\n }\n\n // Use custom class if present\n $property-class: if(map-has-key($utility, class), map-get($utility, class), nth($properties, 1));\n $property-class: if($property-class == null, \"\", $property-class);\n\n // Use custom CSS variable name if present, otherwise default to `class`\n $css-variable-name: if(map-has-key($utility, css-variable-name), map-get($utility, css-variable-name), map-get($utility, class));\n\n // State params to generate pseudo-classes\n $state: if(map-has-key($utility, state), map-get($utility, state), ());\n\n $infix: if($property-class == \"\" and str-slice($infix, 1, 1) == \"-\", str-slice($infix, 2), $infix);\n\n // Don't prefix if value key is null (e.g. with shadow class)\n $property-class-modifier: if($key, if($property-class == \"\" and $infix == \"\", \"\", \"-\") + $key, \"\");\n\n @if map-get($utility, rfs) {\n // Inside the media query\n @if $is-rfs-media-query {\n $val: rfs-value($value);\n\n // Do not render anything if fluid and non fluid values are the same\n $value: if($val == rfs-fluid-value($value), null, $val);\n }\n @else {\n $value: rfs-fluid-value($value);\n }\n }\n\n $is-css-var: map-get($utility, css-var);\n $is-local-vars: map-get($utility, local-vars);\n $is-rtl: map-get($utility, rtl);\n\n @if $value != null {\n @if $is-rtl == false {\n /* rtl:begin:remove */\n }\n\n @if $is-css-var {\n .#{$property-class + $infix + $property-class-modifier} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n --#{$prefix}#{$css-variable-name}: #{$value};\n }\n }\n } @else {\n .#{$property-class + $infix + $property-class-modifier} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n\n @each $pseudo in $state {\n .#{$property-class + $infix + $property-class-modifier}-#{$pseudo}:#{$pseudo} {\n @each $property in $properties {\n @if $is-local-vars {\n @each $local-var, $variable in $is-local-vars {\n --#{$prefix}#{$local-var}: #{$variable};\n }\n }\n #{$property}: $value if($enable-important-utilities, !important, null);\n }\n }\n }\n }\n\n @if $is-rtl == false {\n /* rtl:end:remove */\n }\n }\n }\n}\n","// Loop over each breakpoint\n@each $breakpoint in map-keys($grid-breakpoints) {\n\n // Generate media query if needed\n @include media-breakpoint-up($breakpoint) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix);\n }\n }\n }\n}\n\n// RFS rescaling\n@media (min-width: $rfs-mq-value) {\n @each $breakpoint in map-keys($grid-breakpoints) {\n $infix: breakpoint-infix($breakpoint, $grid-breakpoints);\n\n @if (map-get($grid-breakpoints, $breakpoint) < $rfs-breakpoint) {\n // Loop over each utility property\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Only proceed if responsive media queries are enabled or if it's the base media query\n @if type-of($utility) == \"map\" and map-get($utility, rfs) and (map-get($utility, responsive) or $infix == \"\") {\n @include generate-utility($utility, $infix, true);\n }\n }\n }\n }\n}\n\n\n// Print utilities\n@media print {\n @each $key, $utility in $utilities {\n // The utility can be disabled with `false`, thus check if the utility is a map first\n // Then check if the utility needs print styles\n @if type-of($utility) == \"map\" and map-get($utility, print) == true {\n @include generate-utility($utility, \"-print\");\n }\n }\n}\n"]} \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-reboot.css b/src/assets/vendor/bootstrap/css/bootstrap-reboot.css new file mode 100644 index 0000000..ccf9628 --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-reboot.css @@ -0,0 +1,488 @@ +/*! + * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/) + * Copyright 2011-2022 The Bootstrap Authors + * Copyright 2011-2022 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --bs-blue: #0d6efd; + --bs-indigo: #6610f2; + --bs-purple: #6f42c1; + --bs-pink: #d63384; + --bs-red: #dc3545; + --bs-orange: #fd7e14; + --bs-yellow: #ffc107; + --bs-green: #198754; + --bs-teal: #20c997; + --bs-cyan: #0dcaf0; + --bs-black: #000; + --bs-white: #fff; + --bs-gray: #6c757d; + --bs-gray-dark: #343a40; + --bs-gray-100: #f8f9fa; + --bs-gray-200: #e9ecef; + --bs-gray-300: #dee2e6; + --bs-gray-400: #ced4da; + --bs-gray-500: #adb5bd; + --bs-gray-600: #6c757d; + --bs-gray-700: #495057; + --bs-gray-800: #343a40; + --bs-gray-900: #212529; + --bs-primary: #0d6efd; + --bs-secondary: #6c757d; + --bs-success: #198754; + --bs-info: #0dcaf0; + --bs-warning: #ffc107; + --bs-danger: #dc3545; + --bs-light: #f8f9fa; + --bs-dark: #212529; + --bs-primary-rgb: 13, 110, 253; + --bs-secondary-rgb: 108, 117, 125; + --bs-success-rgb: 25, 135, 84; + --bs-info-rgb: 13, 202, 240; + --bs-warning-rgb: 255, 193, 7; + --bs-danger-rgb: 220, 53, 69; + --bs-light-rgb: 248, 249, 250; + --bs-dark-rgb: 33, 37, 41; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --bs-body-color-rgb: 33, 37, 41; + --bs-body-bg-rgb: 255, 255, 255; + --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); + --bs-body-font-family: var(--bs-font-sans-serif); + --bs-body-font-size: 1rem; + --bs-body-font-weight: 400; + --bs-body-line-height: 1.5; + --bs-body-color: #212529; + --bs-body-bg: #fff; + --bs-border-width: 1px; + --bs-border-style: solid; + --bs-border-color: #dee2e6; + --bs-border-color-translucent: rgba(0, 0, 0, 0.175); + --bs-border-radius: 0.375rem; + --bs-border-radius-sm: 0.25rem; + --bs-border-radius-lg: 0.5rem; + --bs-border-radius-xl: 1rem; + --bs-border-radius-2xl: 2rem; + --bs-border-radius-pill: 50rem; + --bs-link-color: #0d6efd; + --bs-link-hover-color: #0a58ca; + --bs-code-color: #d63384; + --bs-highlight-bg: #fff3cd; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +@media (prefers-reduced-motion: no-preference) { + :root { + scroll-behavior: smooth; + } +} + +body { + margin: 0; + font-family: var(--bs-body-font-family); + font-size: var(--bs-body-font-size); + font-weight: var(--bs-body-font-weight); + line-height: var(--bs-body-line-height); + color: var(--bs-body-color); + text-align: var(--bs-body-text-align); + background-color: var(--bs-body-bg); + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +hr { + margin: 1rem 0; + color: inherit; + border: 0; + border-top: 1px solid; + opacity: 0.25; +} + +h6, h5, h4, h3, h2, h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; +} + +h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1 { + font-size: 2.5rem; + } +} + +h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2 { + font-size: 2rem; + } +} + +h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3 { + font-size: 1.75rem; + } +} + +h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4 { + font-size: 1.5rem; + } +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title] { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + cursor: help; + -webkit-text-decoration-skip-ink: none; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul { + padding-left: 2rem; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: 0.5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 0.875em; +} + +mark { + padding: 0.1875em; + background-color: var(--bs-highlight-bg); +} + +sub, +sup { + position: relative; + font-size: 0.75em; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +a { + color: var(--bs-link-color); + text-decoration: underline; +} +a:hover { + color: var(--bs-link-hover-color); +} + +a:not([href]):not([class]), a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: var(--bs-font-monospace); + font-size: 1em; +} + +pre { + display: block; + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + font-size: 0.875em; +} +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +code { + font-size: 0.875em; + color: var(--bs-code-color); + word-wrap: break-word; +} +a > code { + color: inherit; +} + +kbd { + padding: 0.1875rem 0.375rem; + font-size: 0.875em; + color: var(--bs-body-bg); + background-color: var(--bs-body-color); + border-radius: 0.25rem; +} +kbd kbd { + padding: 0; + font-size: 1em; +} + +figure { + margin: 0 0 1rem; +} + +img, +svg { + vertical-align: middle; +} + +table { + caption-side: bottom; + border-collapse: collapse; +} + +caption { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: #6c757d; + text-align: left; +} + +th { + text-align: inherit; + text-align: -webkit-match-parent; +} + +thead, +tbody, +tfoot, +tr, +td, +th { + border-color: inherit; + border-style: solid; + border-width: 0; +} + +label { + display: inline-block; +} + +button { + border-radius: 0; +} + +button:focus:not(:focus-visible) { + outline: 0; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +select { + text-transform: none; +} + +[role=button] { + cursor: pointer; +} + +select { + word-wrap: normal; +} +select:disabled { + opacity: 1; +} + +[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { + display: none !important; +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} +button:not(:disabled), +[type=button]:not(:disabled), +[type=reset]:not(:disabled), +[type=submit]:not(:disabled) { + cursor: pointer; +} + +::-moz-focus-inner { + padding: 0; + border-style: none; +} + +textarea { + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; +} +@media (min-width: 1200px) { + legend { + font-size: 1.5rem; + } +} +legend + * { + clear: left; +} + +::-webkit-datetime-edit-fields-wrapper, +::-webkit-datetime-edit-text, +::-webkit-datetime-edit-minute, +::-webkit-datetime-edit-hour-field, +::-webkit-datetime-edit-day-field, +::-webkit-datetime-edit-month-field, +::-webkit-datetime-edit-year-field { + padding: 0; +} + +::-webkit-inner-spin-button { + height: auto; +} + +[type=search] { + outline-offset: -2px; + -webkit-appearance: textfield; +} + +/* rtl:raw: +[type="tel"], +[type="url"], +[type="email"], +[type="number"] { + direction: ltr; +} +*/ +::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-color-swatch-wrapper { + padding: 0; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +::file-selector-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +iframe { + border: 0; +} + +summary { + display: list-item; + cursor: pointer; +} + +progress { + vertical-align: baseline; +} + +[hidden] { + display: none !important; +} + +/*# sourceMappingURL=bootstrap-reboot.css.map */ \ No newline at end of file diff --git a/src/assets/vendor/bootstrap/css/bootstrap-reboot.css.map b/src/assets/vendor/bootstrap/css/bootstrap-reboot.css.map new file mode 100644 index 0000000..d52609e --- /dev/null +++ b/src/assets/vendor/bootstrap/css/bootstrap-reboot.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["../../scss/mixins/_banner.scss","../../scss/_root.scss","../../scss/vendor/_rfs.scss","bootstrap-reboot.css","../../scss/_reboot.scss","../../scss/_variables.scss","../../scss/mixins/_border-radius.scss"],"names":[],"mappings":"AACE;;;;;EAAA;ACDF;EAQI,kBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,kBAAA;EAAA,iBAAA;EAAA,oBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAAA,kBAAA;EAAA,gBAAA;EAAA,gBAAA;EAAA,kBAAA;EAAA,uBAAA;EAIA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAAA,sBAAA;EAIA,qBAAA;EAAA,uBAAA;EAAA,qBAAA;EAAA,kBAAA;EAAA,qBAAA;EAAA,oBAAA;EAAA,mBAAA;EAAA,kBAAA;EAIA,8BAAA;EAAA,iCAAA;EAAA,6BAAA;EAAA,2BAAA;EAAA,6BAAA;EAAA,4BAAA;EAAA,6BAAA;EAAA,yBAAA;EAGF,6BAAA;EACA,uBAAA;EACA,+BAAA;EACA,+BAAA;EAMA,qNAAA;EACA,yGAAA;EACA,yFAAA;EAOA,gDAAA;EC4PI,yBALI;EDrPR,0BAAA;EACA,0BAAA;EACA,wBAAA;EAIA,kBAAA;EAIA,sBAAA;EACA,wBAAA;EACA,0BAAA;EACA,mDAAA;EAEA,4BAAA;EACA,8BAAA;EACA,6BAAA;EACA,2BAAA;EACA,4BAAA;EACA,8BAAA;EAGA,wBAAA;EACA,8BAAA;EAEA,wBAAA;EAEA,0BAAA;AEEF;;AC1DA;;;EAGE,sBAAA;AD6DF;;AC9CI;EANJ;IAOM,uBAAA;EDkDJ;AACF;;ACrCA;EACE,SAAA;EACA,uCAAA;EFmPI,mCALI;EE5OR,uCAAA;EACA,uCAAA;EACA,2BAAA;EACA,qCAAA;EACA,mCAAA;EACA,8BAAA;EACA,6CAAA;ADwCF;;AC/BA;EACE,cAAA;EACA,cCijB4B;EDhjB5B,SAAA;EACA,qBAAA;EACA,aCujB4B;AFrhB9B;;ACxBA;EACE,aAAA;EACA,qBCwf4B;EDrf5B,gBCwf4B;EDvf5B,gBCwf4B;AF/d9B;;ACrBA;EF6MQ,iCAAA;ACpLR;ADkBI;EE3CJ;IFoNQ,iBAAA;ECvLN;AACF;;ACzBA;EFwMQ,iCAAA;AC3KR;ADSI;EEtCJ;IF+MQ,eAAA;EC9KN;AACF;;AC7BA;EFmMQ,+BAAA;AClKR;ADAI;EEjCJ;IF0MQ,kBAAA;ECrKN;AACF;;ACjCA;EF8LQ,iCAAA;ACzJR;ADTI;EE5BJ;IFqMQ,iBAAA;EC5JN;AACF;;ACrCA;EFqLM,kBALI;ACvIV;;ACpCA;EFgLM,eALI;ACnIV;;AC7BA;EACE,aAAA;EACA,mBCmS0B;AFnQ5B;;ACtBA;EACE,yCAAA;EAAA,iCAAA;EACA,YAAA;EACA,sCAAA;EAAA,8BAAA;ADyBF;;ACnBA;EACE,mBAAA;EACA,kBAAA;EACA,oBAAA;ADsBF;;AChBA;;EAEE,kBAAA;ADmBF;;AChBA;;;EAGE,aAAA;EACA,mBAAA;ADmBF;;AChBA;;;;EAIE,gBAAA;ADmBF;;AChBA;EACE,gBC6X4B;AF1W9B;;ACdA;EACE,qBAAA;EACA,cAAA;ADiBF;;ACXA;EACE,gBAAA;ADcF;;ACNA;;EAEE,mBCsW4B;AF7V9B;;ACDA;EFmFM,kBALI;ACzEV;;ACEA;EACE,iBC+a4B;ED9a5B,wCAAA;ADCF;;ACQA;;EAEE,kBAAA;EF+DI,iBALI;EExDR,cAAA;EACA,wBAAA;ADLF;;ACQA;EAAM,eAAA;ADJN;;ACKA;EAAM,WAAA;ADDN;;ACMA;EACE,2BAAA;EACA,0BCqKwC;AFxK1C;ACKE;EACE,iCAAA;ADHJ;;ACcE;EAEE,cAAA;EACA,qBAAA;ADZJ;;ACmBA;;;;EAIE,qCCkR4B;EH7PxB,cALI;AC/BV;;ACuBA;EACE,cAAA;EACA,aAAA;EACA,mBAAA;EACA,cAAA;EFSI,kBALI;ACvBV;ACwBE;EFII,kBALI;EEGN,cAAA;EACA,kBAAA;ADtBJ;;AC0BA;EFHM,kBALI;EEUR,2BAAA;EACA,qBAAA;ADvBF;AC0BE;EACE,cAAA;ADxBJ;;AC4BA;EACE,2BAAA;EFfI,kBALI;EEsBR,wBCuyCkC;EDtyClC,sCCuyCkC;EC3kDhC,sBAAA;AH4QJ;AC2BE;EACE,UAAA;EFtBE,cALI;ACGV;;ACmCA;EACE,gBAAA;ADhCF;;ACsCA;;EAEE,sBAAA;ADnCF;;AC2CA;EACE,oBAAA;EACA,yBAAA;ADxCF;;AC2CA;EACE,mBCsT4B;EDrT5B,sBCqT4B;EDpT5B,cCjVS;EDkVT,gBAAA;ADxCF;;AC+CA;EAEE,mBAAA;EACA,gCAAA;AD7CF;;ACgDA;;;;;;EAME,qBAAA;EACA,mBAAA;EACA,eAAA;AD7CF;;ACqDA;EACE,qBAAA;ADlDF;;ACwDA;EAEE,gBAAA;ADtDF;;AC8DA;EACE,UAAA;AD3DF;;ACgEA;;;;;EAKE,SAAA;EACA,oBAAA;EFrHI,kBALI;EE4HR,oBAAA;AD7DF;;ACiEA;;EAEE,oBAAA;AD9DF;;ACmEA;EACE,eAAA;ADhEF;;ACmEA;EAGE,iBAAA;ADlEF;ACqEE;EACE,UAAA;ADnEJ;;AC0EA;EACE,wBAAA;ADvEF;;AC+EA;;;;EAIE,0BAAA;AD5EF;AC+EI;;;;EACE,eAAA;AD1EN;;ACiFA;EACE,UAAA;EACA,kBAAA;AD9EF;;ACmFA;EACE,gBAAA;ADhFF;;AC0FA;EACE,YAAA;EACA,UAAA;EACA,SAAA;EACA,SAAA;ADvFF;;AC+FA;EACE,WAAA;EACA,WAAA;EACA,UAAA;EACA,qBC8I4B;EHxVtB,iCAAA;EE6MN,oBAAA;AD7FF;ADlRI;EEwWJ;IF/LQ,iBAAA;EC6GN;AACF;AC0FE;EACE,WAAA;ADxFJ;;AC+FA;;;;;;;EAOE,UAAA;AD5FF;;AC+FA;EACE,YAAA;AD5FF;;ACqGA;EACE,oBAAA;EACA,6BAAA;ADlGF;;AC0GA;;;;;;;CAAA;AAWA;EACE,wBAAA;AD1GF;;AC+GA;EACE,UAAA;AD5GF;;ACmHA;EACE,aAAA;EACA,0BAAA;ADhHF;;AC8GA;EACE,aAAA;EACA,0BAAA;ADhHF;;ACqHA;EACE,qBAAA;ADlHF;;ACuHA;EACE,SAAA;ADpHF;;AC2HA;EACE,kBAAA;EACA,eAAA;ADxHF;;ACgIA;EACE,wBAAA;AD7HF;;ACqIA;EACE,wBAAA;ADlIF","file":"bootstrap-reboot.css","sourcesContent":["@mixin bsBanner($file) {\n /*!\n * Bootstrap #{$file} v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n}\n\n",":root {\n // Note: Custom variable values only support SassScript inside `#{}`.\n\n // Colors\n //\n // Generate palettes for full colors, grays, and theme colors.\n\n @each $color, $value in $colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $grays {\n --#{$prefix}gray-#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors {\n --#{$prefix}#{$color}: #{$value};\n }\n\n @each $color, $value in $theme-colors-rgb {\n --#{$prefix}#{$color}-rgb: #{$value};\n }\n\n --#{$prefix}white-rgb: #{to-rgb($white)};\n --#{$prefix}black-rgb: #{to-rgb($black)};\n --#{$prefix}body-color-rgb: #{to-rgb($body-color)};\n --#{$prefix}body-bg-rgb: #{to-rgb($body-bg)};\n\n // Fonts\n\n // Note: Use `inspect` for lists so that quoted items keep the quotes.\n // See https://github.com/sass/sass/issues/2383#issuecomment-336349172\n --#{$prefix}font-sans-serif: #{inspect($font-family-sans-serif)};\n --#{$prefix}font-monospace: #{inspect($font-family-monospace)};\n --#{$prefix}gradient: #{$gradient};\n\n // Root and body\n // scss-docs-start root-body-variables\n @if $font-size-root != null {\n --#{$prefix}root-font-size: #{$font-size-root};\n }\n --#{$prefix}body-font-family: #{$font-family-base};\n @include rfs($font-size-base, --#{$prefix}body-font-size);\n --#{$prefix}body-font-weight: #{$font-weight-base};\n --#{$prefix}body-line-height: #{$line-height-base};\n --#{$prefix}body-color: #{$body-color};\n @if $body-text-align != null {\n --#{$prefix}body-text-align: #{$body-text-align};\n }\n --#{$prefix}body-bg: #{$body-bg};\n // scss-docs-end root-body-variables\n\n // scss-docs-start root-border-var\n --#{$prefix}border-width: #{$border-width};\n --#{$prefix}border-style: #{$border-style};\n --#{$prefix}border-color: #{$border-color};\n --#{$prefix}border-color-translucent: #{$border-color-translucent};\n\n --#{$prefix}border-radius: #{$border-radius};\n --#{$prefix}border-radius-sm: #{$border-radius-sm};\n --#{$prefix}border-radius-lg: #{$border-radius-lg};\n --#{$prefix}border-radius-xl: #{$border-radius-xl};\n --#{$prefix}border-radius-2xl: #{$border-radius-2xl};\n --#{$prefix}border-radius-pill: #{$border-radius-pill};\n // scss-docs-end root-border-var\n\n --#{$prefix}link-color: #{$link-color};\n --#{$prefix}link-hover-color: #{$link-hover-color};\n\n --#{$prefix}code-color: #{$code-color};\n\n --#{$prefix}highlight-bg: #{$mark-bg};\n}\n","// stylelint-disable property-blacklist, scss/dollar-variable-default\n\n// SCSS RFS mixin\n//\n// Automated responsive values for font sizes, paddings, margins and much more\n//\n// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)\n\n// Configuration\n\n// Base value\n$rfs-base-value: 1.25rem !default;\n$rfs-unit: rem !default;\n\n@if $rfs-unit != rem and $rfs-unit != px {\n @error \"`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.\";\n}\n\n// Breakpoint at where values start decreasing if screen width is smaller\n$rfs-breakpoint: 1200px !default;\n$rfs-breakpoint-unit: px !default;\n\n@if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem {\n @error \"`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.\";\n}\n\n// Resize values based on screen height and width\n$rfs-two-dimensional: false !default;\n\n// Factor of decrease\n$rfs-factor: 10 !default;\n\n@if type-of($rfs-factor) != number or $rfs-factor <= 1 {\n @error \"`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.\";\n}\n\n// Mode. Possibilities: \"min-media-query\", \"max-media-query\"\n$rfs-mode: min-media-query !default;\n\n// Generate enable or disable classes. Possibilities: false, \"enable\" or \"disable\"\n$rfs-class: false !default;\n\n// 1 rem = $rfs-rem-value px\n$rfs-rem-value: 16 !default;\n\n// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14\n$rfs-safari-iframe-resize-bug-fix: false !default;\n\n// Disable RFS by setting $enable-rfs to false\n$enable-rfs: true !default;\n\n// Cache $rfs-base-value unit\n$rfs-base-value-unit: unit($rfs-base-value);\n\n@function divide($dividend, $divisor, $precision: 10) {\n $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);\n $dividend: abs($dividend);\n $divisor: abs($divisor);\n @if $dividend == 0 {\n @return 0;\n }\n @if $divisor == 0 {\n @error \"Cannot divide by 0\";\n }\n $remainder: $dividend;\n $result: 0;\n $factor: 10;\n @while ($remainder > 0 and $precision >= 0) {\n $quotient: 0;\n @while ($remainder >= $divisor) {\n $remainder: $remainder - $divisor;\n $quotient: $quotient + 1;\n }\n $result: $result * 10 + $quotient;\n $factor: $factor * .1;\n $remainder: $remainder * 10;\n $precision: $precision - 1;\n @if ($precision < 0 and $remainder >= $divisor * 5) {\n $result: $result + 1;\n }\n }\n $result: $result * $factor * $sign;\n $dividend-unit: unit($dividend);\n $divisor-unit: unit($divisor);\n $unit-map: (\n \"px\": 1px,\n \"rem\": 1rem,\n \"em\": 1em,\n \"%\": 1%\n );\n @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {\n $result: $result * map-get($unit-map, $dividend-unit);\n }\n @return $result;\n}\n\n// Remove px-unit from $rfs-base-value for calculations\n@if $rfs-base-value-unit == px {\n $rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);\n}\n@else if $rfs-base-value-unit == rem {\n $rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));\n}\n\n// Cache $rfs-breakpoint unit to prevent multiple calls\n$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);\n\n// Remove unit from $rfs-breakpoint for calculations\n@if $rfs-breakpoint-unit-cache == px {\n $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);\n}\n@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == \"em\" {\n $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));\n}\n\n// Calculate the media query value\n$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});\n$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);\n$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);\n\n// Internal mixin used to determine which media query needs to be used\n@mixin _rfs-media-query {\n @if $rfs-two-dimensional {\n @if $rfs-mode == max-media-query {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {\n @content;\n }\n }\n }\n @else {\n @media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {\n @content;\n }\n }\n}\n\n// Internal mixin that adds disable classes to the selector if needed.\n@mixin _rfs-rule {\n @if $rfs-class == disable and $rfs-mode == max-media-query {\n // Adding an extra class increases specificity, which prevents the media query to override the property\n &,\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @else if $rfs-class == enable and $rfs-mode == min-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n @else {\n @content;\n }\n}\n\n// Internal mixin that adds enable classes to the selector if needed.\n@mixin _rfs-media-query-rule {\n\n @if $rfs-class == enable {\n @if $rfs-mode == min-media-query {\n @content;\n }\n\n @include _rfs-media-query {\n .enable-rfs &,\n &.enable-rfs {\n @content;\n }\n }\n }\n @else {\n @if $rfs-class == disable and $rfs-mode == min-media-query {\n .disable-rfs &,\n &.disable-rfs {\n @content;\n }\n }\n @include _rfs-media-query {\n @content;\n }\n }\n}\n\n// Helper function to get the formatted non-responsive value\n@function rfs-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n @if $unit == px {\n // Convert to rem if needed\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);\n }\n @else if $unit == rem {\n // Convert to px if needed\n $val: $val + ' ' + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);\n }\n @else {\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n $val: $val + ' ' + $value;\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// Helper function to get the responsive value calculated by RFS\n@function rfs-fluid-value($values) {\n // Convert to list\n $values: if(type-of($values) != list, ($values,), $values);\n\n $val: '';\n\n // Loop over each value and calculate value\n @each $value in $values {\n @if $value == 0 {\n $val: $val + ' 0';\n }\n\n @else {\n // Cache $value unit\n $unit: if(type-of($value) == \"number\", unit($value), false);\n\n // If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value\n @if not $unit or $unit != px and $unit != rem {\n $val: $val + ' ' + $value;\n }\n\n @else {\n // Remove unit from $value for calculations\n $value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));\n\n // Only add the media query if the value is greater than the minimum value\n @if abs($value) <= $rfs-base-value or not $enable-rfs {\n $val: $val + ' ' + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);\n }\n @else {\n // Calculate the minimum value\n $value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);\n\n // Calculate difference between $value and the minimum value\n $value-diff: abs($value) - $value-min;\n\n // Base value formatting\n $min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);\n\n // Use negative value if needed\n $min-width: if($value < 0, -$min-width, $min-width);\n\n // Use `vmin` if two-dimensional is enabled\n $variable-unit: if($rfs-two-dimensional, vmin, vw);\n\n // Calculate the variable width between 0 and $rfs-breakpoint\n $variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};\n\n // Return the calculated value\n $val: $val + ' calc(' + $min-width + if($value < 0, ' - ', ' + ') + $variable-width + ')';\n }\n }\n }\n }\n\n // Remove first space\n @return unquote(str-slice($val, 2));\n}\n\n// RFS mixin\n@mixin rfs($values, $property: font-size) {\n @if $values != null {\n $val: rfs-value($values);\n $fluidVal: rfs-fluid-value($values);\n\n // Do not print the media query if responsive & non-responsive values are the same\n @if $val == $fluidVal {\n #{$property}: $val;\n }\n @else {\n @include _rfs-rule {\n #{$property}: if($rfs-mode == max-media-query, $val, $fluidVal);\n\n // Include safari iframe resize fix if needed\n min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);\n }\n\n @include _rfs-media-query-rule {\n #{$property}: if($rfs-mode == max-media-query, $fluidVal, $val);\n }\n }\n }\n}\n\n// Shorthand helper mixins\n@mixin font-size($value) {\n @include rfs($value);\n}\n\n@mixin padding($value) {\n @include rfs($value, padding);\n}\n\n@mixin padding-top($value) {\n @include rfs($value, padding-top);\n}\n\n@mixin padding-right($value) {\n @include rfs($value, padding-right);\n}\n\n@mixin padding-bottom($value) {\n @include rfs($value, padding-bottom);\n}\n\n@mixin padding-left($value) {\n @include rfs($value, padding-left);\n}\n\n@mixin margin($value) {\n @include rfs($value, margin);\n}\n\n@mixin margin-top($value) {\n @include rfs($value, margin-top);\n}\n\n@mixin margin-right($value) {\n @include rfs($value, margin-right);\n}\n\n@mixin margin-bottom($value) {\n @include rfs($value, margin-bottom);\n}\n\n@mixin margin-left($value) {\n @include rfs($value, margin-left);\n}\n","/*!\n * Bootstrap Reboot v5.2.3 (https://getbootstrap.com/)\n * Copyright 2011-2022 The Bootstrap Authors\n * Copyright 2011-2022 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n --bs-blue: #0d6efd;\n --bs-indigo: #6610f2;\n --bs-purple: #6f42c1;\n --bs-pink: #d63384;\n --bs-red: #dc3545;\n --bs-orange: #fd7e14;\n --bs-yellow: #ffc107;\n --bs-green: #198754;\n --bs-teal: #20c997;\n --bs-cyan: #0dcaf0;\n --bs-black: #000;\n --bs-white: #fff;\n --bs-gray: #6c757d;\n --bs-gray-dark: #343a40;\n --bs-gray-100: #f8f9fa;\n --bs-gray-200: #e9ecef;\n --bs-gray-300: #dee2e6;\n --bs-gray-400: #ced4da;\n --bs-gray-500: #adb5bd;\n --bs-gray-600: #6c757d;\n --bs-gray-700: #495057;\n --bs-gray-800: #343a40;\n --bs-gray-900: #212529;\n --bs-primary: #0d6efd;\n --bs-secondary: #6c757d;\n --bs-success: #198754;\n --bs-info: #0dcaf0;\n --bs-warning: #ffc107;\n --bs-danger: #dc3545;\n --bs-light: #f8f9fa;\n --bs-dark: #212529;\n --bs-primary-rgb: 13, 110, 253;\n --bs-secondary-rgb: 108, 117, 125;\n --bs-success-rgb: 25, 135, 84;\n --bs-info-rgb: 13, 202, 240;\n --bs-warning-rgb: 255, 193, 7;\n --bs-danger-rgb: 220, 53, 69;\n --bs-light-rgb: 248, 249, 250;\n --bs-dark-rgb: 33, 37, 41;\n --bs-white-rgb: 255, 255, 255;\n --bs-black-rgb: 0, 0, 0;\n --bs-body-color-rgb: 33, 37, 41;\n --bs-body-bg-rgb: 255, 255, 255;\n --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", \"Noto Sans\", \"Liberation Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n --bs-body-font-family: var(--bs-font-sans-serif);\n --bs-body-font-size: 1rem;\n --bs-body-font-weight: 400;\n --bs-body-line-height: 1.5;\n --bs-body-color: #212529;\n --bs-body-bg: #fff;\n --bs-border-width: 1px;\n --bs-border-style: solid;\n --bs-border-color: #dee2e6;\n --bs-border-color-translucent: rgba(0, 0, 0, 0.175);\n --bs-border-radius: 0.375rem;\n --bs-border-radius-sm: 0.25rem;\n --bs-border-radius-lg: 0.5rem;\n --bs-border-radius-xl: 1rem;\n --bs-border-radius-2xl: 2rem;\n --bs-border-radius-pill: 50rem;\n --bs-link-color: #0d6efd;\n --bs-link-hover-color: #0a58ca;\n --bs-code-color: #d63384;\n --bs-highlight-bg: #fff3cd;\n}\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n :root {\n scroll-behavior: smooth;\n }\n}\n\nbody {\n margin: 0;\n font-family: var(--bs-body-font-family);\n font-size: var(--bs-body-font-size);\n font-weight: var(--bs-body-font-weight);\n line-height: var(--bs-body-line-height);\n color: var(--bs-body-color);\n text-align: var(--bs-body-text-align);\n background-color: var(--bs-body-bg);\n -webkit-text-size-adjust: 100%;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\nhr {\n margin: 1rem 0;\n color: inherit;\n border: 0;\n border-top: 1px solid;\n opacity: 0.25;\n}\n\nh6, h5, h4, h3, h2, h1 {\n margin-top: 0;\n margin-bottom: 0.5rem;\n font-weight: 500;\n line-height: 1.2;\n}\n\nh1 {\n font-size: calc(1.375rem + 1.5vw);\n}\n@media (min-width: 1200px) {\n h1 {\n font-size: 2.5rem;\n }\n}\n\nh2 {\n font-size: calc(1.325rem + 0.9vw);\n}\n@media (min-width: 1200px) {\n h2 {\n font-size: 2rem;\n }\n}\n\nh3 {\n font-size: calc(1.3rem + 0.6vw);\n}\n@media (min-width: 1200px) {\n h3 {\n font-size: 1.75rem;\n }\n}\n\nh4 {\n font-size: calc(1.275rem + 0.3vw);\n}\n@media (min-width: 1200px) {\n h4 {\n font-size: 1.5rem;\n }\n}\n\nh5 {\n font-size: 1.25rem;\n}\n\nh6 {\n font-size: 1rem;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nabbr[title] {\n text-decoration: underline dotted;\n cursor: help;\n text-decoration-skip-ink: none;\n}\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: 700;\n}\n\ndd {\n margin-bottom: 0.5rem;\n margin-left: 0;\n}\n\nblockquote {\n margin: 0 0 1rem;\n}\n\nb,\nstrong {\n font-weight: bolder;\n}\n\nsmall {\n font-size: 0.875em;\n}\n\nmark {\n padding: 0.1875em;\n background-color: var(--bs-highlight-bg);\n}\n\nsub,\nsup {\n position: relative;\n font-size: 0.75em;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\na {\n color: var(--bs-link-color);\n text-decoration: underline;\n}\na:hover {\n color: var(--bs-link-hover-color);\n}\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n color: inherit;\n text-decoration: none;\n}\n\npre,\ncode,\nkbd,\nsamp {\n font-family: var(--bs-font-monospace);\n font-size: 1em;\n}\n\npre {\n display: block;\n margin-top: 0;\n margin-bottom: 1rem;\n overflow: auto;\n font-size: 0.875em;\n}\npre code {\n font-size: inherit;\n color: inherit;\n word-break: normal;\n}\n\ncode {\n font-size: 0.875em;\n color: var(--bs-code-color);\n word-wrap: break-word;\n}\na > code {\n color: inherit;\n}\n\nkbd {\n padding: 0.1875rem 0.375rem;\n font-size: 0.875em;\n color: var(--bs-body-bg);\n background-color: var(--bs-body-color);\n border-radius: 0.25rem;\n}\nkbd kbd {\n padding: 0;\n font-size: 1em;\n}\n\nfigure {\n margin: 0 0 1rem;\n}\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n color: #6c757d;\n text-align: left;\n}\n\nth {\n text-align: inherit;\n text-align: -webkit-match-parent;\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\nlabel {\n display: inline-block;\n}\n\nbutton {\n border-radius: 0;\n}\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\nbutton,\nselect {\n text-transform: none;\n}\n\n[role=button] {\n cursor: pointer;\n}\n\nselect {\n word-wrap: normal;\n}\nselect:disabled {\n opacity: 1;\n}\n\n[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator {\n display: none !important;\n}\n\nbutton,\n[type=button],\n[type=reset],\n[type=submit] {\n -webkit-appearance: button;\n}\nbutton:not(:disabled),\n[type=button]:not(:disabled),\n[type=reset]:not(:disabled),\n[type=submit]:not(:disabled) {\n cursor: pointer;\n}\n\n::-moz-focus-inner {\n padding: 0;\n border-style: none;\n}\n\ntextarea {\n resize: vertical;\n}\n\nfieldset {\n min-width: 0;\n padding: 0;\n margin: 0;\n border: 0;\n}\n\nlegend {\n float: left;\n width: 100%;\n padding: 0;\n margin-bottom: 0.5rem;\n font-size: calc(1.275rem + 0.3vw);\n line-height: inherit;\n}\n@media (min-width: 1200px) {\n legend {\n font-size: 1.5rem;\n }\n}\nlegend + * {\n clear: left;\n}\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n padding: 0;\n}\n\n::-webkit-inner-spin-button {\n height: auto;\n}\n\n[type=search] {\n outline-offset: -2px;\n -webkit-appearance: textfield;\n}\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n::-webkit-color-swatch-wrapper {\n padding: 0;\n}\n\n::file-selector-button {\n font: inherit;\n -webkit-appearance: button;\n}\n\noutput {\n display: inline-block;\n}\n\niframe {\n border: 0;\n}\n\nsummary {\n display: list-item;\n cursor: pointer;\n}\n\nprogress {\n vertical-align: baseline;\n}\n\n[hidden] {\n display: none !important;\n}\n\n/*# sourceMappingURL=bootstrap-reboot.css.map */\n","// stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix\n\n\n// Reboot\n//\n// Normalization of HTML elements, manually forked from Normalize.css to remove\n// styles targeting irrelevant browsers while applying new styles.\n//\n// Normalize is licensed MIT. https://github.com/necolas/normalize.css\n\n\n// Document\n//\n// Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`.\n\n*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n\n// Root\n//\n// Ability to the value of the root font sizes, affecting the value of `rem`.\n// null by default, thus nothing is generated.\n\n:root {\n @if $font-size-root != null {\n @include font-size(var(--#{$prefix}root-font-size));\n }\n\n @if $enable-smooth-scroll {\n @media (prefers-reduced-motion: no-preference) {\n scroll-behavior: smooth;\n }\n }\n}\n\n\n// Body\n//\n// 1. Remove the margin in all browsers.\n// 2. As a best practice, apply a default `background-color`.\n// 3. Prevent adjustments of font size after orientation changes in iOS.\n// 4. Change the default tap highlight to be completely transparent in iOS.\n\n// scss-docs-start reboot-body-rules\nbody {\n margin: 0; // 1\n font-family: var(--#{$prefix}body-font-family);\n @include font-size(var(--#{$prefix}body-font-size));\n font-weight: var(--#{$prefix}body-font-weight);\n line-height: var(--#{$prefix}body-line-height);\n color: var(--#{$prefix}body-color);\n text-align: var(--#{$prefix}body-text-align);\n background-color: var(--#{$prefix}body-bg); // 2\n -webkit-text-size-adjust: 100%; // 3\n -webkit-tap-highlight-color: rgba($black, 0); // 4\n}\n// scss-docs-end reboot-body-rules\n\n\n// Content grouping\n//\n// 1. Reset Firefox's gray color\n\nhr {\n margin: $hr-margin-y 0;\n color: $hr-color; // 1\n border: 0;\n border-top: $hr-border-width solid $hr-border-color;\n opacity: $hr-opacity;\n}\n\n\n// Typography\n//\n// 1. Remove top margins from headings\n// By default, `

`-`

` all receive top and bottom margins. We nuke the top\n// margin for easier control within type scales as it avoids margin collapsing.\n\n%heading {\n margin-top: 0; // 1\n margin-bottom: $headings-margin-bottom;\n font-family: $headings-font-family;\n font-style: $headings-font-style;\n font-weight: $headings-font-weight;\n line-height: $headings-line-height;\n color: $headings-color;\n}\n\nh1 {\n @extend %heading;\n @include font-size($h1-font-size);\n}\n\nh2 {\n @extend %heading;\n @include font-size($h2-font-size);\n}\n\nh3 {\n @extend %heading;\n @include font-size($h3-font-size);\n}\n\nh4 {\n @extend %heading;\n @include font-size($h4-font-size);\n}\n\nh5 {\n @extend %heading;\n @include font-size($h5-font-size);\n}\n\nh6 {\n @extend %heading;\n @include font-size($h6-font-size);\n}\n\n\n// Reset margins on paragraphs\n//\n// Similarly, the top margin on `

`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: var(--#{$prefix}link-color);\n text-decoration: $link-decoration;\n\n &:hover {\n color: var(--#{$prefix}link-hover-color);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `` alignment by inheriting `text-align`.\n// 3. Fix alignment for Safari\n\nth {\n font-weight: $table-th-font-weight; // 1\n text-align: inherit; // 2\n text-align: -webkit-match-parent; // 3\n}\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n border-color: inherit;\n border-style: solid;\n border-width: 0;\n}\n\n\n// Forms\n//\n// 1. Allow labels to use `margin` for spacing.\n\nlabel {\n display: inline-block; // 1\n}\n\n// Remove the default `border-radius` that macOS Chrome adds.\n// See https://github.com/twbs/bootstrap/issues/24093\n\nbutton {\n // stylelint-disable-next-line property-disallowed-list\n border-radius: 0;\n}\n\n// Explicitly remove focus outline in Chromium when it shouldn't be\n// visible (e.g. as result of mouse click or touch tap). It already\n// should be doing this automatically, but seems to currently be\n// confused and applies its very visible two-tone outline anyway.\n\nbutton:focus:not(:focus-visible) {\n outline: 0;\n}\n\n// 1. Remove the margin in Firefox and Safari\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n margin: 0; // 1\n font-family: inherit;\n @include font-size(inherit);\n line-height: inherit;\n}\n\n// Remove the inheritance of text transform in Firefox\nbutton,\nselect {\n text-transform: none;\n}\n// Set the cursor for non-`\n \n \n

\n
"; + + var GlightboxInit = function () { + function GlightboxInit() { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + + _classCallCheck(this, GlightboxInit); + + this.customOptions = options; + this.settings = extend(defaults, options); + this.effectsClasses = this.getAnimationClasses(); + this.videoPlayers = {}; + this.apiEvents = []; + this.fullElementsList = false; + } + + _createClass(GlightboxInit, [{ + key: "init", + value: function init() { + var _this = this; + + var selector = this.getSelector(); + + if (selector) { + this.baseEvents = addEvent('click', { + onElement: selector, + withCallback: function withCallback(e, target) { + e.preventDefault(); + + _this.open(target); + } + }); + } + + this.elements = this.getElements(); + } + }, { + key: "open", + value: function open() { + var element = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var startAt = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + + if (this.elements.length === 0) { + return false; + } + + this.activeSlide = null; + this.prevActiveSlideIndex = null; + this.prevActiveSlide = null; + var index = isNumber(startAt) ? startAt : this.settings.startAt; + + if (isNode(element)) { + var gallery = element.getAttribute('data-gallery'); + + if (gallery) { + this.fullElementsList = this.elements; + this.elements = this.getGalleryElements(this.elements, gallery); + } + + if (isNil(index)) { + index = this.getElementIndex(element); + + if (index < 0) { + index = 0; + } + } + } + + if (!isNumber(index)) { + index = 0; + } + + this.build(); + + animateElement(this.overlay, this.settings.openEffect === 'none' ? 'none' : this.settings.cssEfects.fade["in"]); + + var body = document.body; + var scrollBar = window.innerWidth - document.documentElement.clientWidth; + + if (scrollBar > 0) { + var styleSheet = document.createElement('style'); + styleSheet.type = 'text/css'; + styleSheet.className = 'gcss-styles'; + styleSheet.innerText = ".gscrollbar-fixer {margin-right: ".concat(scrollBar, "px}"); + document.head.appendChild(styleSheet); + + addClass(body, 'gscrollbar-fixer'); + } + + addClass(body, 'glightbox-open'); + + addClass(html, 'glightbox-open'); + + if (isMobile$1) { + addClass(document.body, 'glightbox-mobile'); + + this.settings.slideEffect = 'slide'; + } + + this.showSlide(index, true); + + if (this.elements.length === 1) { + addClass(this.prevButton, 'glightbox-button-hidden'); + + addClass(this.nextButton, 'glightbox-button-hidden'); + } else { + removeClass(this.prevButton, 'glightbox-button-hidden'); + + removeClass(this.nextButton, 'glightbox-button-hidden'); + } + + this.lightboxOpen = true; + this.trigger('open'); + + if (isFunction(this.settings.onOpen)) { + this.settings.onOpen(); + } + + if (isTouch$1 && this.settings.touchNavigation) { + touchNavigation(this); + } + + if (this.settings.keyboardNavigation) { + keyboardNavigation(this); + } + } + }, { + key: "openAt", + value: function openAt() { + var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + this.open(null, index); + } + }, { + key: "showSlide", + value: function showSlide() { + var _this2 = this; + + var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var first = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + + show(this.loader); + + this.index = parseInt(index); + var current = this.slidesContainer.querySelector('.current'); + + if (current) { + removeClass(current, 'current'); + } + + this.slideAnimateOut(); + var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; + + if (hasClass(slideNode, 'loaded')) { + this.slideAnimateIn(slideNode, first); + + hide(this.loader); + } else { + show(this.loader); + + var slide = this.elements[index]; + var slideData = { + index: this.index, + slide: slideNode, + slideNode: slideNode, + slideConfig: slide.slideConfig, + slideIndex: this.index, + trigger: slide.node, + player: null + }; + this.trigger('slide_before_load', slideData); + slide.instance.setContent(slideNode, function () { + hide(_this2.loader); + + _this2.resize(); + + _this2.slideAnimateIn(slideNode, first); + + _this2.trigger('slide_after_load', slideData); + }); + } + + this.slideDescription = slideNode.querySelector('.gslide-description'); + this.slideDescriptionContained = this.slideDescription && hasClass(this.slideDescription.parentNode, 'gslide-media'); + + if (this.settings.preload) { + this.preloadSlide(index + 1); + this.preloadSlide(index - 1); + } + + this.updateNavigationClasses(); + this.activeSlide = slideNode; + } + }, { + key: "preloadSlide", + value: function preloadSlide(index) { + var _this3 = this; + + if (index < 0 || index > this.elements.length - 1) { + return false; + } + + if (isNil(this.elements[index])) { + return false; + } + + var slideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; + + if (hasClass(slideNode, 'loaded')) { + return false; + } + + var slide = this.elements[index]; + var type = slide.type; + var slideData = { + index: index, + slide: slideNode, + slideNode: slideNode, + slideConfig: slide.slideConfig, + slideIndex: index, + trigger: slide.node, + player: null + }; + this.trigger('slide_before_load', slideData); + + if (type === 'video' || type === 'external') { + setTimeout(function () { + slide.instance.setContent(slideNode, function () { + _this3.trigger('slide_after_load', slideData); + }); + }, 200); + } else { + slide.instance.setContent(slideNode, function () { + _this3.trigger('slide_after_load', slideData); + }); + } + } + }, { + key: "prevSlide", + value: function prevSlide() { + this.goToSlide(this.index - 1); + } + }, { + key: "nextSlide", + value: function nextSlide() { + this.goToSlide(this.index + 1); + } + }, { + key: "goToSlide", + value: function goToSlide() { + var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + this.prevActiveSlide = this.activeSlide; + this.prevActiveSlideIndex = this.index; + + if (!this.loop() && (index < 0 || index > this.elements.length - 1)) { + return false; + } + + if (index < 0) { + index = this.elements.length - 1; + } else if (index >= this.elements.length) { + index = 0; + } + + this.showSlide(index); + } + }, { + key: "insertSlide", + value: function insertSlide() { + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : -1; + + if (index < 0) { + index = this.elements.length; + } + + var slide = new Slide(config, this, index); + var data = slide.getConfig(); + + var slideInfo = extend({}, data); + + var newSlide = slide.create(); + var totalSlides = this.elements.length - 1; + slideInfo.index = index; + slideInfo.node = false; + slideInfo.instance = slide; + slideInfo.slideConfig = data; + this.elements.splice(index, 0, slideInfo); + var addedSlideNode = null; + var addedSlidePlayer = null; + + if (this.slidesContainer) { + if (index > totalSlides) { + this.slidesContainer.appendChild(newSlide); + } else { + var existingSlide = this.slidesContainer.querySelectorAll('.gslide')[index]; + this.slidesContainer.insertBefore(newSlide, existingSlide); + } + + if (this.settings.preload && this.index == 0 && index == 0 || this.index - 1 == index || this.index + 1 == index) { + this.preloadSlide(index); + } + + if (this.index === 0 && index === 0) { + this.index = 1; + } + + this.updateNavigationClasses(); + addedSlideNode = this.slidesContainer.querySelectorAll('.gslide')[index]; + addedSlidePlayer = this.getSlidePlayerInstance(index); + slideInfo.slideNode = addedSlideNode; + } + + this.trigger('slide_inserted', { + index: index, + slide: addedSlideNode, + slideNode: addedSlideNode, + slideConfig: data, + slideIndex: index, + trigger: null, + player: addedSlidePlayer + }); + + if (isFunction(this.settings.slideInserted)) { + this.settings.slideInserted({ + index: index, + slide: addedSlideNode, + player: addedSlidePlayer + }); + } + } + }, { + key: "removeSlide", + value: function removeSlide() { + var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : -1; + + if (index < 0 || index > this.elements.length - 1) { + return false; + } + + var slide = this.slidesContainer && this.slidesContainer.querySelectorAll('.gslide')[index]; + + if (slide) { + if (this.getActiveSlideIndex() == index) { + if (index == this.elements.length - 1) { + this.prevSlide(); + } else { + this.nextSlide(); + } + } + + slide.parentNode.removeChild(slide); + } + + this.elements.splice(index, 1); + this.trigger('slide_removed', index); + + if (isFunction(this.settings.slideRemoved)) { + this.settings.slideRemoved(index); + } + } + }, { + key: "slideAnimateIn", + value: function slideAnimateIn(slide, first) { + var _this4 = this; + + var slideMedia = slide.querySelector('.gslide-media'); + var slideDesc = slide.querySelector('.gslide-description'); + var prevData = { + index: this.prevActiveSlideIndex, + slide: this.prevActiveSlide, + slideNode: this.prevActiveSlide, + slideIndex: this.prevActiveSlide, + slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, + trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, + player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) + }; + var nextData = { + index: this.index, + slide: this.activeSlide, + slideNode: this.activeSlide, + slideConfig: this.elements[this.index].slideConfig, + slideIndex: this.index, + trigger: this.elements[this.index].node, + player: this.getSlidePlayerInstance(this.index) + }; + + if (slideMedia.offsetWidth > 0 && slideDesc) { + hide(slideDesc); + + slideDesc.style.display = ''; + } + + removeClass(slide, this.effectsClasses); + + if (first) { + animateElement(slide, this.settings.cssEfects[this.settings.openEffect]["in"], function () { + if (_this4.settings.autoplayVideos) { + _this4.slidePlayerPlay(slide); + } + + _this4.trigger('slide_changed', { + prev: prevData, + current: nextData + }); + + if (isFunction(_this4.settings.afterSlideChange)) { + _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); + } + }); + } else { + var effectName = this.settings.slideEffect; + var animIn = effectName !== 'none' ? this.settings.cssEfects[effectName]["in"] : effectName; + + if (this.prevActiveSlideIndex > this.index) { + if (this.settings.slideEffect == 'slide') { + animIn = this.settings.cssEfects.slideBack["in"]; + } + } + + animateElement(slide, animIn, function () { + if (_this4.settings.autoplayVideos) { + _this4.slidePlayerPlay(slide); + } + + _this4.trigger('slide_changed', { + prev: prevData, + current: nextData + }); + + if (isFunction(_this4.settings.afterSlideChange)) { + _this4.settings.afterSlideChange.apply(_this4, [prevData, nextData]); + } + }); + } + + setTimeout(function () { + _this4.resize(slide); + }, 100); + + addClass(slide, 'current'); + } + }, { + key: "slideAnimateOut", + value: function slideAnimateOut() { + if (!this.prevActiveSlide) { + return false; + } + + var prevSlide = this.prevActiveSlide; + + removeClass(prevSlide, this.effectsClasses); + + addClass(prevSlide, 'prev'); + + var animation = this.settings.slideEffect; + var animOut = animation !== 'none' ? this.settings.cssEfects[animation].out : animation; + this.slidePlayerPause(prevSlide); + this.trigger('slide_before_change', { + prev: { + index: this.prevActiveSlideIndex, + slide: this.prevActiveSlide, + slideNode: this.prevActiveSlide, + slideIndex: this.prevActiveSlideIndex, + slideConfig: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].slideConfig, + trigger: isNil(this.prevActiveSlideIndex) ? null : this.elements[this.prevActiveSlideIndex].node, + player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) + }, + current: { + index: this.index, + slide: this.activeSlide, + slideNode: this.activeSlide, + slideIndex: this.index, + slideConfig: this.elements[this.index].slideConfig, + trigger: this.elements[this.index].node, + player: this.getSlidePlayerInstance(this.index) + } + }); + + if (isFunction(this.settings.beforeSlideChange)) { + this.settings.beforeSlideChange.apply(this, [{ + index: this.prevActiveSlideIndex, + slide: this.prevActiveSlide, + player: this.getSlidePlayerInstance(this.prevActiveSlideIndex) + }, { + index: this.index, + slide: this.activeSlide, + player: this.getSlidePlayerInstance(this.index) + }]); + } + + if (this.prevActiveSlideIndex > this.index && this.settings.slideEffect == 'slide') { + animOut = this.settings.cssEfects.slideBack.out; + } + + animateElement(prevSlide, animOut, function () { + var container = prevSlide.querySelector('.ginner-container'); + var media = prevSlide.querySelector('.gslide-media'); + var desc = prevSlide.querySelector('.gslide-description'); + container.style.transform = ''; + media.style.transform = ''; + + removeClass(media, 'greset'); + + media.style.opacity = ''; + + if (desc) { + desc.style.opacity = ''; + } + + removeClass(prevSlide, 'prev'); + }); + } + }, { + key: "getAllPlayers", + value: function getAllPlayers() { + return this.videoPlayers; + } + }, { + key: "getSlidePlayerInstance", + value: function getSlidePlayerInstance(index) { + var id = 'gvideo' + index; + var videoPlayers = this.getAllPlayers(); + + if (has(videoPlayers, id) && videoPlayers[id]) { + return videoPlayers[id]; + } + + return false; + } + }, { + key: "stopSlideVideo", + value: function stopSlideVideo(slide) { + if (isNode(slide)) { + var node = slide.querySelector('.gvideo-wrapper'); + + if (node) { + slide = node.getAttribute('data-index'); + } + } + + console.log('stopSlideVideo is deprecated, use slidePlayerPause'); + var player = this.getSlidePlayerInstance(slide); + + if (player && player.playing) { + player.pause(); + } + } + }, { + key: "slidePlayerPause", + value: function slidePlayerPause(slide) { + if (isNode(slide)) { + var node = slide.querySelector('.gvideo-wrapper'); + + if (node) { + slide = node.getAttribute('data-index'); + } + } + + var player = this.getSlidePlayerInstance(slide); + + if (player && player.playing) { + player.pause(); + } + } + }, { + key: "playSlideVideo", + value: function playSlideVideo(slide) { + if (isNode(slide)) { + var node = slide.querySelector('.gvideo-wrapper'); + + if (node) { + slide = node.getAttribute('data-index'); + } + } + + console.log('playSlideVideo is deprecated, use slidePlayerPlay'); + var player = this.getSlidePlayerInstance(slide); + + if (player && !player.playing) { + player.play(); + } + } + }, { + key: "slidePlayerPlay", + value: function slidePlayerPlay(slide) { + var _this$settings$plyr$c; + + if (isMobile$1 && !((_this$settings$plyr$c = this.settings.plyr.config) !== null && _this$settings$plyr$c !== void 0 && _this$settings$plyr$c.muted)) { + return; + } + + if (isNode(slide)) { + var node = slide.querySelector('.gvideo-wrapper'); + + if (node) { + slide = node.getAttribute('data-index'); + } + } + + var player = this.getSlidePlayerInstance(slide); + + if (player && !player.playing) { + player.play(); + + if (this.settings.autofocusVideos) { + player.elements.container.focus(); + } + } + } + }, { + key: "setElements", + value: function setElements(elements) { + var _this5 = this; + + this.settings.elements = false; + var newElements = []; + + if (elements && elements.length) { + each(elements, function (el, i) { + var slide = new Slide(el, _this5, i); + var data = slide.getConfig(); + + var slideInfo = extend({}, data); + + slideInfo.slideConfig = data; + slideInfo.instance = slide; + slideInfo.index = i; + newElements.push(slideInfo); + }); + } + + this.elements = newElements; + + if (this.lightboxOpen) { + this.slidesContainer.innerHTML = ''; + + if (this.elements.length) { + each(this.elements, function () { + var slide = createHTML(_this5.settings.slideHTML); + + _this5.slidesContainer.appendChild(slide); + }); + + this.showSlide(0, true); + } + } + } + }, { + key: "getElementIndex", + value: function getElementIndex(node) { + var index = false; + + each(this.elements, function (el, i) { + if (has(el, 'node') && el.node == node) { + index = i; + return true; + } + }); + + return index; + } + }, { + key: "getElements", + value: function getElements() { + var _this6 = this; + + var list = []; + this.elements = this.elements ? this.elements : []; + + if (!isNil(this.settings.elements) && isArray(this.settings.elements) && this.settings.elements.length) { + each(this.settings.elements, function (el, i) { + var slide = new Slide(el, _this6, i); + var elData = slide.getConfig(); + + var slideInfo = extend({}, elData); + + slideInfo.node = false; + slideInfo.index = i; + slideInfo.instance = slide; + slideInfo.slideConfig = elData; + list.push(slideInfo); + }); + } + + var nodes = false; + var selector = this.getSelector(); + + if (selector) { + nodes = document.querySelectorAll(this.getSelector()); + } + + if (!nodes) { + return list; + } + + each(nodes, function (el, i) { + var slide = new Slide(el, _this6, i); + var elData = slide.getConfig(); + + var slideInfo = extend({}, elData); + + slideInfo.node = el; + slideInfo.index = i; + slideInfo.instance = slide; + slideInfo.slideConfig = elData; + slideInfo.gallery = el.getAttribute('data-gallery'); + list.push(slideInfo); + }); + + return list; + } + }, { + key: "getGalleryElements", + value: function getGalleryElements(list, gallery) { + return list.filter(function (el) { + return el.gallery == gallery; + }); + } + }, { + key: "getSelector", + value: function getSelector() { + if (this.settings.elements) { + return false; + } + + if (this.settings.selector && this.settings.selector.substring(0, 5) == 'data-') { + return "*[".concat(this.settings.selector, "]"); + } + + return this.settings.selector; + } + }, { + key: "getActiveSlide", + value: function getActiveSlide() { + return this.slidesContainer.querySelectorAll('.gslide')[this.index]; + } + }, { + key: "getActiveSlideIndex", + value: function getActiveSlideIndex() { + return this.index; + } + }, { + key: "getAnimationClasses", + value: function getAnimationClasses() { + var effects = []; + + for (var key in this.settings.cssEfects) { + if (this.settings.cssEfects.hasOwnProperty(key)) { + var effect = this.settings.cssEfects[key]; + effects.push("g".concat(effect["in"])); + effects.push("g".concat(effect.out)); + } + } + + return effects.join(' '); + } + }, { + key: "build", + value: function build() { + var _this7 = this; + + if (this.built) { + return false; + } + + var children = document.body.childNodes; + var bodyChildElms = []; + + each(children, function (el) { + if (el.parentNode == document.body && el.nodeName.charAt(0) !== '#' && el.hasAttribute && !el.hasAttribute('aria-hidden')) { + bodyChildElms.push(el); + el.setAttribute('aria-hidden', 'true'); + } + }); + + var nextSVG = has(this.settings.svg, 'next') ? this.settings.svg.next : ''; + var prevSVG = has(this.settings.svg, 'prev') ? this.settings.svg.prev : ''; + var closeSVG = has(this.settings.svg, 'close') ? this.settings.svg.close : ''; + var lightboxHTML = this.settings.lightboxHTML; + lightboxHTML = lightboxHTML.replace(/{nextSVG}/g, nextSVG); + lightboxHTML = lightboxHTML.replace(/{prevSVG}/g, prevSVG); + lightboxHTML = lightboxHTML.replace(/{closeSVG}/g, closeSVG); + lightboxHTML = createHTML(lightboxHTML); + document.body.appendChild(lightboxHTML); + var modal = document.getElementById('glightbox-body'); + this.modal = modal; + var closeButton = modal.querySelector('.gclose'); + this.prevButton = modal.querySelector('.gprev'); + this.nextButton = modal.querySelector('.gnext'); + this.overlay = modal.querySelector('.goverlay'); + this.loader = modal.querySelector('.gloader'); + this.slidesContainer = document.getElementById('glightbox-slider'); + this.bodyHiddenChildElms = bodyChildElms; + this.events = {}; + + addClass(this.modal, 'glightbox-' + this.settings.skin); + + if (this.settings.closeButton && closeButton) { + this.events['close'] = addEvent('click', { + onElement: closeButton, + withCallback: function withCallback(e, target) { + e.preventDefault(); + + _this7.close(); + } + }); + } + + if (closeButton && !this.settings.closeButton) { + closeButton.parentNode.removeChild(closeButton); + } + + if (this.nextButton) { + this.events['next'] = addEvent('click', { + onElement: this.nextButton, + withCallback: function withCallback(e, target) { + e.preventDefault(); + + _this7.nextSlide(); + } + }); + } + + if (this.prevButton) { + this.events['prev'] = addEvent('click', { + onElement: this.prevButton, + withCallback: function withCallback(e, target) { + e.preventDefault(); + + _this7.prevSlide(); + } + }); + } + + if (this.settings.closeOnOutsideClick) { + this.events['outClose'] = addEvent('click', { + onElement: modal, + withCallback: function withCallback(e, target) { + if (!_this7.preventOutsideClick && !hasClass(document.body, 'glightbox-mobile') && !closest(e.target, '.ginner-container')) { + if (!closest(e.target, '.gbtn') && !hasClass(e.target, 'gnext') && !hasClass(e.target, 'gprev')) { + _this7.close(); + } + } + } + }); + } + + each(this.elements, function (slide, i) { + _this7.slidesContainer.appendChild(slide.instance.create()); + + slide.slideNode = _this7.slidesContainer.querySelectorAll('.gslide')[i]; + }); + + if (isTouch$1) { + addClass(document.body, 'glightbox-touch'); + } + + this.events['resize'] = addEvent('resize', { + onElement: window, + withCallback: function withCallback() { + _this7.resize(); + } + }); + this.built = true; + } + }, { + key: "resize", + value: function resize() { + var slide = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + slide = !slide ? this.activeSlide : slide; + + if (!slide || hasClass(slide, 'zoomed')) { + return; + } + + var winSize = windowSize(); + + var video = slide.querySelector('.gvideo-wrapper'); + var image = slide.querySelector('.gslide-image'); + var description = this.slideDescription; + var winWidth = winSize.width; + var winHeight = winSize.height; + + if (winWidth <= 768) { + addClass(document.body, 'glightbox-mobile'); + } else { + removeClass(document.body, 'glightbox-mobile'); + } + + if (!video && !image) { + return; + } + + var descriptionResize = false; + + if (description && (hasClass(description, 'description-bottom') || hasClass(description, 'description-top')) && !hasClass(description, 'gabsolute')) { + descriptionResize = true; + } + + if (image) { + if (winWidth <= 768) { + var imgNode = image.querySelector('img'); + } else if (descriptionResize) { + var descHeight = description.offsetHeight; + + var _imgNode = image.querySelector('img'); + + _imgNode.setAttribute('style', "max-height: calc(100vh - ".concat(descHeight, "px)")); + + description.setAttribute('style', "max-width: ".concat(_imgNode.offsetWidth, "px;")); + } + } + + if (video) { + var ratio = has(this.settings.plyr.config, 'ratio') ? this.settings.plyr.config.ratio : ''; + + if (!ratio) { + var containerWidth = video.clientWidth; + var containerHeight = video.clientHeight; + var divisor = containerWidth / containerHeight; + ratio = "".concat(containerWidth / divisor, ":").concat(containerHeight / divisor); + } + + var videoRatio = ratio.split(':'); + var videoWidth = this.settings.videosWidth; + var maxWidth = this.settings.videosWidth; + + if (isNumber(videoWidth) || videoWidth.indexOf('px') !== -1) { + maxWidth = parseInt(videoWidth); + } else { + if (videoWidth.indexOf('vw') !== -1) { + maxWidth = winWidth * parseInt(videoWidth) / 100; + } else if (videoWidth.indexOf('vh') !== -1) { + maxWidth = winHeight * parseInt(videoWidth) / 100; + } else if (videoWidth.indexOf('%') !== -1) { + maxWidth = winWidth * parseInt(videoWidth) / 100; + } else { + maxWidth = parseInt(video.clientWidth); + } + } + + var maxHeight = maxWidth / (parseInt(videoRatio[0]) / parseInt(videoRatio[1])); + maxHeight = Math.floor(maxHeight); + + if (descriptionResize) { + winHeight = winHeight - description.offsetHeight; + } + + if (maxWidth > winWidth || maxHeight > winHeight || winHeight < maxHeight && winWidth > maxWidth) { + var vwidth = video.offsetWidth; + var vheight = video.offsetHeight; + + var _ratio = winHeight / vheight; + + var vsize = { + width: vwidth * _ratio, + height: vheight * _ratio + }; + video.parentNode.setAttribute('style', "max-width: ".concat(vsize.width, "px")); + + if (descriptionResize) { + description.setAttribute('style', "max-width: ".concat(vsize.width, "px;")); + } + } else { + video.parentNode.style.maxWidth = "".concat(videoWidth); + + if (descriptionResize) { + description.setAttribute('style', "max-width: ".concat(videoWidth, ";")); + } + } + } + } + }, { + key: "reload", + value: function reload() { + this.init(); + } + }, { + key: "updateNavigationClasses", + value: function updateNavigationClasses() { + var loop = this.loop(); + + removeClass(this.nextButton, 'disabled'); + + removeClass(this.prevButton, 'disabled'); + + if (this.index == 0 && this.elements.length - 1 == 0) { + addClass(this.prevButton, 'disabled'); + + addClass(this.nextButton, 'disabled'); + } else if (this.index === 0 && !loop) { + addClass(this.prevButton, 'disabled'); + } else if (this.index === this.elements.length - 1 && !loop) { + addClass(this.nextButton, 'disabled'); + } + } + }, { + key: "loop", + value: function loop() { + var loop = has(this.settings, 'loopAtEnd') ? this.settings.loopAtEnd : null; + loop = has(this.settings, 'loop') ? this.settings.loop : loop; + return loop; + } + }, { + key: "close", + value: function close() { + var _this8 = this; + + if (!this.lightboxOpen) { + if (this.events) { + for (var key in this.events) { + if (this.events.hasOwnProperty(key)) { + this.events[key].destroy(); + } + } + + this.events = null; + } + + return false; + } + + if (this.closing) { + return false; + } + + this.closing = true; + this.slidePlayerPause(this.activeSlide); + + if (this.fullElementsList) { + this.elements = this.fullElementsList; + } + + if (this.bodyHiddenChildElms.length) { + each(this.bodyHiddenChildElms, function (el) { + el.removeAttribute('aria-hidden'); + }); + } + + addClass(this.modal, 'glightbox-closing'); + + animateElement(this.overlay, this.settings.openEffect == 'none' ? 'none' : this.settings.cssEfects.fade.out); + + animateElement(this.activeSlide, this.settings.cssEfects[this.settings.closeEffect].out, function () { + _this8.activeSlide = null; + _this8.prevActiveSlideIndex = null; + _this8.prevActiveSlide = null; + _this8.built = false; + + if (_this8.events) { + for (var _key in _this8.events) { + if (_this8.events.hasOwnProperty(_key)) { + _this8.events[_key].destroy(); + } + } + + _this8.events = null; + } + + var body = document.body; + + removeClass(html, 'glightbox-open'); + + removeClass(body, 'glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer'); + + _this8.modal.parentNode.removeChild(_this8.modal); + + _this8.trigger('close'); + + if (isFunction(_this8.settings.onClose)) { + _this8.settings.onClose(); + } + + var styles = document.querySelector('.gcss-styles'); + + if (styles) { + styles.parentNode.removeChild(styles); + } + + _this8.lightboxOpen = false; + _this8.closing = null; + }); + } + }, { + key: "destroy", + value: function destroy() { + this.close(); + this.clearAllEvents(); + + if (this.baseEvents) { + this.baseEvents.destroy(); + } + } + }, { + key: "on", + value: function on(evt, callback) { + var once = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; + + if (!evt || !isFunction(callback)) { + throw new TypeError('Event name and callback must be defined'); + } + + this.apiEvents.push({ + evt: evt, + once: once, + callback: callback + }); + } + }, { + key: "once", + value: function once(evt, callback) { + this.on(evt, callback, true); + } + }, { + key: "trigger", + value: function trigger(eventName) { + var _this9 = this; + + var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var onceTriggered = []; + + each(this.apiEvents, function (event, i) { + var evt = event.evt, + once = event.once, + callback = event.callback; + + if (evt == eventName) { + callback(data); + + if (once) { + onceTriggered.push(i); + } + } + }); + + if (onceTriggered.length) { + each(onceTriggered, function (i) { + return _this9.apiEvents.splice(i, 1); + }); + } + } + }, { + key: "clearAllEvents", + value: function clearAllEvents() { + this.apiEvents.splice(0, this.apiEvents.length); + } + }, { + key: "version", + value: function version() { + return _version; + } + }]); + + return GlightboxInit; + }(); + + function glightbox () { + var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + var instance = new GlightboxInit(options); + instance.init(); + return instance; + } + + return glightbox; + +}))); diff --git a/src/assets/vendor/glightbox/js/glightbox.min.js b/src/assets/vendor/glightbox/js/glightbox.min.js new file mode 100644 index 0000000..997908b --- /dev/null +++ b/src/assets/vendor/glightbox/js/glightbox.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).GLightbox=t()}(this,(function(){"use strict";function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n=e[s]=e[s]||[],l={all:n,evt:null,found:null};return t&&i&&P(n)>0&&o(n,(function(e,n){if(e.eventName==t&&e.fn.toString()==i.toString())return l.found=!0,l.evt=n,!1})),l}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=t.onElement,n=t.withCallback,s=t.avoidDuplicate,l=void 0===s||s,a=t.once,h=void 0!==a&&a,d=t.useCapture,c=void 0!==d&&d,u=arguments.length>2?arguments[2]:void 0,g=i||[];function v(e){T(n)&&n.call(u,e,this),h&&v.destroy()}return C(g)&&(g=document.querySelectorAll(g)),v.destroy=function(){o(g,(function(t){var i=r(t,e,v);i.found&&i.all.splice(i.evt,1),t.removeEventListener&&t.removeEventListener(e,v,c)}))},o(g,(function(t){var i=r(t,e,v);(t.addEventListener&&l&&!i.found||!l)&&(t.addEventListener(e,v,c),i.all.push({eventName:e,fn:v}))})),v}function h(e,t){o(t.split(" "),(function(t){return e.classList.add(t)}))}function d(e,t){o(t.split(" "),(function(t){return e.classList.remove(t)}))}function c(e,t){return e.classList.contains(t)}function u(e,t){for(;e!==document.body;){if(!(e=e.parentElement))return!1;if("function"==typeof e.matches?e.matches(t):e.msMatchesSelector(t))return e}}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||""===t)return!1;if("none"===t)return T(i)&&i(),!1;var n=x(),s=t.split(" ");o(s,(function(t){h(e,"g"+t)})),a(n,{onElement:e,avoidDuplicate:!1,once:!0,withCallback:function(e,t){o(s,(function(e){d(t,"g"+e)})),T(i)&&i()}})}function v(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(""===t)return e.style.webkitTransform="",e.style.MozTransform="",e.style.msTransform="",e.style.OTransform="",e.style.transform="",!1;e.style.webkitTransform=t,e.style.MozTransform=t,e.style.msTransform=t,e.style.OTransform=t,e.style.transform=t}function f(e){e.style.display="block"}function p(e){e.style.display="none"}function m(e){var t=document.createDocumentFragment(),i=document.createElement("div");for(i.innerHTML=e;i.firstChild;)t.appendChild(i.firstChild);return t}function y(){return{width:window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,height:window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight}}function x(){var e,t=document.createElement("fakeelement"),i={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}function b(e,t,i,n){if(e())t();else{var s;i||(i=100);var l=setInterval((function(){e()&&(clearInterval(l),s&&clearTimeout(s),t())}),i);n&&(s=setTimeout((function(){clearInterval(l)}),n))}}function S(e,t,i){if(I(e))console.error("Inject assets error");else if(T(t)&&(i=t,t=!1),C(t)&&t in window)T(i)&&i();else{var n;if(-1!==e.indexOf(".css")){if((n=document.querySelectorAll('link[href="'+e+'"]'))&&n.length>0)return void(T(i)&&i());var s=document.getElementsByTagName("head")[0],l=s.querySelectorAll('link[rel="stylesheet"]'),o=document.createElement("link");return o.rel="stylesheet",o.type="text/css",o.href=e,o.media="all",l?s.insertBefore(o,l[0]):s.appendChild(o),void(T(i)&&i())}if((n=document.querySelectorAll('script[src="'+e+'"]'))&&n.length>0){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}}else{var r=document.createElement("script");r.type="text/javascript",r.src=e,r.onload=function(){if(T(i)){if(C(t))return b((function(){return void 0!==window[t]}),(function(){i()})),!1;i()}},document.body.appendChild(r)}}}function w(){return"navigator"in window&&window.navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(Android)|(PlayBook)|(BB10)|(BlackBerry)|(Opera Mini)|(IEMobile)|(webOS)|(MeeGo)/i)}function T(e){return"function"==typeof e}function C(e){return"string"==typeof e}function k(e){return!(!e||!e.nodeType||1!=e.nodeType)}function E(e){return Array.isArray(e)}function A(e){return e&&e.length&&isFinite(e.length)}function L(t){return"object"===e(t)&&null!=t&&!T(t)&&!E(t)}function I(e){return null==e}function O(e,t){return null!==e&&hasOwnProperty.call(e,t)}function P(e){if(L(e)){if(e.keys)return e.keys().length;var t=0;for(var i in e)O(e,i)&&t++;return t}return e.length}function M(e){return!isNaN(parseFloat(e))&&isFinite(e)}function z(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1,t=document.querySelectorAll(".gbtn[data-taborder]:not(.disabled)");if(!t.length)return!1;if(1==t.length)return t[0];"string"==typeof e&&(e=parseInt(e));var i=[];o(t,(function(e){i.push(e.getAttribute("data-taborder"))}));var n=Math.max.apply(Math,i.map((function(e){return parseInt(e)}))),s=e<0?1:e+1;s>n&&(s="1");var l=i.filter((function(e){return e>=parseInt(s)})),r=l.sort()[0];return document.querySelector('.gbtn[data-taborder="'.concat(r,'"]'))}function X(e){if(e.events.hasOwnProperty("keyboard"))return!1;e.events.keyboard=a("keydown",{onElement:window,withCallback:function(t,i){var n=(t=t||window.event).keyCode;if(9==n){var s=document.querySelector(".gbtn.focused");if(!s){var l=!(!document.activeElement||!document.activeElement.nodeName)&&document.activeElement.nodeName.toLocaleLowerCase();if("input"==l||"textarea"==l||"button"==l)return}t.preventDefault();var o=document.querySelectorAll(".gbtn[data-taborder]");if(!o||o.length<=0)return;if(!s){var r=z();return void(r&&(r.focus(),h(r,"focused")))}var a=z(s.getAttribute("data-taborder"));d(s,"focused"),a&&(a.focus(),h(a,"focused"))}39==n&&e.nextSlide(),37==n&&e.prevSlide(),27==n&&e.close()}})}function Y(e){return Math.sqrt(e.x*e.x+e.y*e.y)}function q(e,t){var i=function(e,t){var i=Y(e)*Y(t);if(0===i)return 0;var n=function(e,t){return e.x*t.x+e.y*t.y}(e,t)/i;return n>1&&(n=1),Math.acos(n)}(e,t);return function(e,t){return e.x*t.y-t.x*e.y}(e,t)>0&&(i*=-1),180*i/Math.PI}var N=function(){function e(i){t(this,e),this.handlers=[],this.el=i}return n(e,[{key:"add",value:function(e){this.handlers.push(e)}},{key:"del",value:function(e){e||(this.handlers=[]);for(var t=this.handlers.length;t>=0;t--)this.handlers[t]===e&&this.handlers.splice(t,1)}},{key:"dispatch",value:function(){for(var e=0,t=this.handlers.length;e=0)console.log("ignore drag for this touched element",e.target.nodeName.toLowerCase());else{this.now=Date.now(),this.x1=e.touches[0].pageX,this.y1=e.touches[0].pageY,this.delta=this.now-(this.last||this.now),this.touchStart.dispatch(e,this.element),null!==this.preTapPosition.x&&(this.isDoubleTap=this.delta>0&&this.delta<=250&&Math.abs(this.preTapPosition.x-this.x1)<30&&Math.abs(this.preTapPosition.y-this.y1)<30,this.isDoubleTap&&clearTimeout(this.singleTapTimeout)),this.preTapPosition.x=this.x1,this.preTapPosition.y=this.y1,this.last=this.now;var t=this.preV;if(e.touches.length>1){this._cancelLongTap(),this._cancelSingleTap();var i={x:e.touches[1].pageX-this.x1,y:e.touches[1].pageY-this.y1};t.x=i.x,t.y=i.y,this.pinchStartLen=Y(t),this.multipointStart.dispatch(e,this.element)}this._preventTap=!1,this.longTapTimeout=setTimeout(function(){this.longTap.dispatch(e,this.element),this._preventTap=!0}.bind(this),750)}}}},{key:"move",value:function(e){if(e.touches){var t=this.preV,i=e.touches.length,n=e.touches[0].pageX,s=e.touches[0].pageY;if(this.isDoubleTap=!1,i>1){var l=e.touches[1].pageX,o=e.touches[1].pageY,r={x:e.touches[1].pageX-n,y:e.touches[1].pageY-s};null!==t.x&&(this.pinchStartLen>0&&(e.zoom=Y(r)/this.pinchStartLen,this.pinch.dispatch(e,this.element)),e.angle=q(r,t),this.rotate.dispatch(e,this.element)),t.x=r.x,t.y=r.y,null!==this.x2&&null!==this.sx2?(e.deltaX=(n-this.x2+l-this.sx2)/2,e.deltaY=(s-this.y2+o-this.sy2)/2):(e.deltaX=0,e.deltaY=0),this.twoFingerPressMove.dispatch(e,this.element),this.sx2=l,this.sy2=o}else{if(null!==this.x2){e.deltaX=n-this.x2,e.deltaY=s-this.y2;var a=Math.abs(this.x1-this.x2),h=Math.abs(this.y1-this.y2);(a>10||h>10)&&(this._preventTap=!0)}else e.deltaX=0,e.deltaY=0;this.pressMove.dispatch(e,this.element)}this.touchMove.dispatch(e,this.element),this._cancelLongTap(),this.x2=n,this.y2=s,i>1&&e.preventDefault()}}},{key:"end",value:function(e){if(e.changedTouches){this._cancelLongTap();var t=this;e.touches.length<2&&(this.multipointEnd.dispatch(e,this.element),this.sx2=this.sy2=null),this.x2&&Math.abs(this.x1-this.x2)>30||this.y2&&Math.abs(this.y1-this.y2)>30?(e.direction=this._swipeDirection(this.x1,this.x2,this.y1,this.y2),this.swipeTimeout=setTimeout((function(){t.swipe.dispatch(e,t.element)}),0)):(this.tapTimeout=setTimeout((function(){t._preventTap||t.tap.dispatch(e,t.element),t.isDoubleTap&&(t.doubleTap.dispatch(e,t.element),t.isDoubleTap=!1)}),0),t.isDoubleTap||(t.singleTapTimeout=setTimeout((function(){t.singleTap.dispatch(e,t.element)}),250))),this.touchEnd.dispatch(e,this.element),this.preV.x=0,this.preV.y=0,this.zoom=1,this.pinchStartLen=null,this.x1=this.x2=this.y1=this.y2=null}}},{key:"cancelAll",value:function(){this._preventTap=!0,clearTimeout(this.singleTapTimeout),clearTimeout(this.tapTimeout),clearTimeout(this.longTapTimeout),clearTimeout(this.swipeTimeout)}},{key:"cancel",value:function(e){this.cancelAll(),this.touchCancel.dispatch(e,this.element)}},{key:"_cancelLongTap",value:function(){clearTimeout(this.longTapTimeout)}},{key:"_cancelSingleTap",value:function(){clearTimeout(this.singleTapTimeout)}},{key:"_swipeDirection",value:function(e,t,i,n){return Math.abs(e-t)>=Math.abs(i-n)?e-t>0?"Left":"Right":i-n>0?"Up":"Down"}},{key:"on",value:function(e,t){this[e]&&this[e].add(t)}},{key:"off",value:function(e,t){this[e]&&this[e].del(t)}},{key:"destroy",value:function(){return this.singleTapTimeout&&clearTimeout(this.singleTapTimeout),this.tapTimeout&&clearTimeout(this.tapTimeout),this.longTapTimeout&&clearTimeout(this.longTapTimeout),this.swipeTimeout&&clearTimeout(this.swipeTimeout),this.element.removeEventListener("touchstart",this.start),this.element.removeEventListener("touchmove",this.move),this.element.removeEventListener("touchend",this.end),this.element.removeEventListener("touchcancel",this.cancel),this.rotate.del(),this.touchStart.del(),this.multipointStart.del(),this.multipointEnd.del(),this.pinch.del(),this.swipe.del(),this.tap.del(),this.doubleTap.del(),this.longTap.del(),this.singleTap.del(),this.pressMove.del(),this.twoFingerPressMove.del(),this.touchMove.del(),this.touchEnd.del(),this.touchCancel.del(),this.preV=this.pinchStartLen=this.zoom=this.isDoubleTap=this.delta=this.last=this.now=this.tapTimeout=this.singleTapTimeout=this.longTapTimeout=this.swipeTimeout=this.x1=this.x2=this.y1=this.y2=this.preTapPosition=this.rotate=this.touchStart=this.multipointStart=this.multipointEnd=this.pinch=this.swipe=this.tap=this.doubleTap=this.longTap=this.singleTap=this.pressMove=this.touchMove=this.touchEnd=this.touchCancel=this.twoFingerPressMove=null,window.removeEventListener("scroll",this._cancelAllHandler),null}}]),e}();function W(e){var t=function(){var e,t=document.createElement("fakeelement"),i={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in i)if(void 0!==t.style[e])return i[e]}(),i=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,n=c(e,"gslide-media")?e:e.querySelector(".gslide-media"),s=u(n,".ginner-container"),l=e.querySelector(".gslide-description");i>769&&(n=s),h(n,"greset"),v(n,"translate3d(0, 0, 0)"),a(t,{onElement:n,once:!0,withCallback:function(e,t){d(n,"greset")}}),n.style.opacity="",l&&(l.style.opacity="")}function B(e){if(e.events.hasOwnProperty("touch"))return!1;var t,i,n,s=y(),l=s.width,o=s.height,r=!1,a=null,g=null,f=null,p=!1,m=1,x=1,b=!1,S=!1,w=null,T=null,C=null,k=null,E=0,A=0,L=!1,I=!1,O={},P={},M=0,z=0,X=document.getElementById("glightbox-slider"),Y=document.querySelector(".goverlay"),q=new _(X,{touchStart:function(t){if(r=!0,(c(t.targetTouches[0].target,"ginner-container")||u(t.targetTouches[0].target,".gslide-desc")||"a"==t.targetTouches[0].target.nodeName.toLowerCase())&&(r=!1),u(t.targetTouches[0].target,".gslide-inline")&&!c(t.targetTouches[0].target.parentNode,"gslide-inline")&&(r=!1),r){if(P=t.targetTouches[0],O.pageX=t.targetTouches[0].pageX,O.pageY=t.targetTouches[0].pageY,M=t.targetTouches[0].clientX,z=t.targetTouches[0].clientY,a=e.activeSlide,g=a.querySelector(".gslide-media"),n=a.querySelector(".gslide-inline"),f=null,c(g,"gslide-image")&&(f=g.querySelector("img")),(window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth)>769&&(g=a.querySelector(".ginner-container")),d(Y,"greset"),t.pageX>20&&t.pageXo){var a=O.pageX-P.pageX;if(Math.abs(a)<=13)return!1}p=!0;var h,d=s.targetTouches[0].clientX,c=s.targetTouches[0].clientY,u=M-d,m=z-c;if(Math.abs(u)>Math.abs(m)?(L=!1,I=!0):(I=!1,L=!0),t=P.pageX-O.pageX,E=100*t/l,i=P.pageY-O.pageY,A=100*i/o,L&&f&&(h=1-Math.abs(i)/o,Y.style.opacity=h,e.settings.touchFollowAxis&&(E=0)),I&&(h=1-Math.abs(t)/l,g.style.opacity=h,e.settings.touchFollowAxis&&(A=0)),!f)return v(g,"translate3d(".concat(E,"%, 0, 0)"));v(g,"translate3d(".concat(E,"%, ").concat(A,"%, 0)"))}},touchEnd:function(){if(r){if(p=!1,S||b)return C=w,void(k=T);var t=Math.abs(parseInt(A)),i=Math.abs(parseInt(E));if(!(t>29&&f))return t<29&&i<25?(h(Y,"greset"),Y.style.opacity=1,W(g)):void 0;e.close()}},multipointEnd:function(){setTimeout((function(){b=!1}),50)},multipointStart:function(){b=!0,m=x||1},pinch:function(e){if(!f||p)return!1;b=!0,f.scaleX=f.scaleY=m*e.zoom;var t=m*e.zoom;if(S=!0,t<=1)return S=!1,t=1,k=null,C=null,w=null,T=null,void f.setAttribute("style","");t>4.5&&(t=4.5),f.style.transform="scale3d(".concat(t,", ").concat(t,", 1)"),x=t},pressMove:function(e){if(S&&!b){var t=P.pageX-O.pageX,i=P.pageY-O.pageY;C&&(t+=C),k&&(i+=k),w=t,T=i;var n="translate3d(".concat(t,"px, ").concat(i,"px, 0)");x&&(n+=" scale3d(".concat(x,", ").concat(x,", 1)")),v(f,n)}},swipe:function(t){if(!S)if(b)b=!1;else{if("Left"==t.direction){if(e.index==e.elements.length-1)return W(g);e.nextSlide()}if("Right"==t.direction){if(0==e.index)return W(g);e.prevSlide()}}}});e.events.touch=q}var H=function(){function e(i,n){var s=this,l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(t(this,e),this.img=i,this.slide=n,this.onclose=l,this.img.setZoomEvents)return!1;this.active=!1,this.zoomedIn=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.img.addEventListener("mousedown",(function(e){return s.dragStart(e)}),!1),this.img.addEventListener("mouseup",(function(e){return s.dragEnd(e)}),!1),this.img.addEventListener("mousemove",(function(e){return s.drag(e)}),!1),this.img.addEventListener("click",(function(e){return s.slide.classList.contains("dragging-nav")?(s.zoomOut(),!1):s.zoomedIn?void(s.zoomedIn&&!s.dragging&&s.zoomOut()):s.zoomIn()}),!1),this.img.setZoomEvents=!0}return n(e,[{key:"zoomIn",value:function(){var e=this.widowWidth();if(!(this.zoomedIn||e<=768)){var t=this.img;if(t.setAttribute("data-style",t.getAttribute("style")),t.style.maxWidth=t.naturalWidth+"px",t.style.maxHeight=t.naturalHeight+"px",t.naturalWidth>e){var i=e/2-t.naturalWidth/2;this.setTranslate(this.img.parentNode,i,0)}this.slide.classList.add("zoomed"),this.zoomedIn=!0}}},{key:"zoomOut",value:function(){this.img.parentNode.setAttribute("style",""),this.img.setAttribute("style",this.img.getAttribute("data-style")),this.slide.classList.remove("zoomed"),this.zoomedIn=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.onclose&&"function"==typeof this.onclose&&this.onclose()}},{key:"dragStart",value:function(e){e.preventDefault(),this.zoomedIn?("touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset),e.target===this.img&&(this.active=!0,this.img.classList.add("dragging"))):this.active=!1}},{key:"dragEnd",value:function(e){var t=this;e.preventDefault(),this.initialX=this.currentX,this.initialY=this.currentY,this.active=!1,setTimeout((function(){t.dragging=!1,t.img.isDragging=!1,t.img.classList.remove("dragging")}),100)}},{key:"drag",value:function(e){this.active&&(e.preventDefault(),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.img.isDragging=!0,this.dragging=!0,this.setTranslate(this.img,this.currentX,this.currentY))}},{key:"onMove",value:function(e){if(this.zoomedIn){var t=e.clientX-this.img.naturalWidth/2,i=e.clientY-this.img.naturalHeight/2;this.setTranslate(this.img,t,i)}}},{key:"setTranslate",value:function(e,t,i){e.style.transform="translate3d("+t+"px, "+i+"px, 0)"}},{key:"widowWidth",value:function(){return window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth}}]),e}(),V=function(){function e(){var i=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e);var s=n.dragEl,l=n.toleranceX,o=void 0===l?40:l,r=n.toleranceY,a=void 0===r?65:r,h=n.slide,d=void 0===h?null:h,c=n.instance,u=void 0===c?null:c;this.el=s,this.active=!1,this.dragging=!1,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.direction=null,this.lastDirection=null,this.toleranceX=o,this.toleranceY=a,this.toleranceReached=!1,this.dragContainer=this.el,this.slide=d,this.instance=u,this.el.addEventListener("mousedown",(function(e){return i.dragStart(e)}),!1),this.el.addEventListener("mouseup",(function(e){return i.dragEnd(e)}),!1),this.el.addEventListener("mousemove",(function(e){return i.drag(e)}),!1)}return n(e,[{key:"dragStart",value:function(e){if(this.slide.classList.contains("zoomed"))this.active=!1;else{"touchstart"===e.type?(this.initialX=e.touches[0].clientX-this.xOffset,this.initialY=e.touches[0].clientY-this.yOffset):(this.initialX=e.clientX-this.xOffset,this.initialY=e.clientY-this.yOffset);var t=e.target.nodeName.toLowerCase();e.target.classList.contains("nodrag")||u(e.target,".nodrag")||-1!==["input","select","textarea","button","a"].indexOf(t)?this.active=!1:(e.preventDefault(),(e.target===this.el||"img"!==t&&u(e.target,".gslide-inline"))&&(this.active=!0,this.el.classList.add("dragging"),this.dragContainer=u(e.target,".ginner-container")))}}},{key:"dragEnd",value:function(e){var t=this;e&&e.preventDefault(),this.initialX=0,this.initialY=0,this.currentX=null,this.currentY=null,this.initialX=null,this.initialY=null,this.xOffset=0,this.yOffset=0,this.active=!1,this.doSlideChange&&(this.instance.preventOutsideClick=!0,"right"==this.doSlideChange&&this.instance.prevSlide(),"left"==this.doSlideChange&&this.instance.nextSlide()),this.doSlideClose&&this.instance.close(),this.toleranceReached||this.setTranslate(this.dragContainer,0,0,!0),setTimeout((function(){t.instance.preventOutsideClick=!1,t.toleranceReached=!1,t.lastDirection=null,t.dragging=!1,t.el.isDragging=!1,t.el.classList.remove("dragging"),t.slide.classList.remove("dragging-nav"),t.dragContainer.style.transform="",t.dragContainer.style.transition=""}),100)}},{key:"drag",value:function(e){if(this.active){e.preventDefault(),this.slide.classList.add("dragging-nav"),"touchmove"===e.type?(this.currentX=e.touches[0].clientX-this.initialX,this.currentY=e.touches[0].clientY-this.initialY):(this.currentX=e.clientX-this.initialX,this.currentY=e.clientY-this.initialY),this.xOffset=this.currentX,this.yOffset=this.currentY,this.el.isDragging=!0,this.dragging=!0,this.doSlideChange=!1,this.doSlideClose=!1;var t=Math.abs(this.currentX),i=Math.abs(this.currentY);if(t>0&&t>=Math.abs(this.currentY)&&(!this.lastDirection||"x"==this.lastDirection)){this.yOffset=0,this.lastDirection="x",this.setTranslate(this.dragContainer,this.currentX,0);var n=this.shouldChange();if(!this.instance.settings.dragAutoSnap&&n&&(this.doSlideChange=n),this.instance.settings.dragAutoSnap&&n)return this.instance.preventOutsideClick=!0,this.toleranceReached=!0,this.active=!1,this.instance.preventOutsideClick=!0,this.dragEnd(null),"right"==n&&this.instance.prevSlide(),void("left"==n&&this.instance.nextSlide())}if(this.toleranceY>0&&i>0&&i>=t&&(!this.lastDirection||"y"==this.lastDirection)){this.xOffset=0,this.lastDirection="y",this.setTranslate(this.dragContainer,0,this.currentY);var s=this.shouldClose();return!this.instance.settings.dragAutoSnap&&s&&(this.doSlideClose=!0),void(this.instance.settings.dragAutoSnap&&s&&this.instance.close())}}}},{key:"shouldChange",value:function(){var e=!1;if(Math.abs(this.currentX)>=this.toleranceX){var t=this.currentX>0?"right":"left";("left"==t&&this.slide!==this.slide.parentNode.lastChild||"right"==t&&this.slide!==this.slide.parentNode.firstChild)&&(e=t)}return e}},{key:"shouldClose",value:function(){var e=!1;return Math.abs(this.currentY)>=this.toleranceY&&(e=!0),e}},{key:"setTranslate",value:function(e,t,i){var n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];e.style.transition=n?"all .2s ease":"",e.style.transform="translate3d(".concat(t,"px, ").concat(i,"px, 0)")}}]),e}();function j(e,t,i,n){var s=e.querySelector(".gslide-media"),l=new Image,o="gSlideTitle_"+i,r="gSlideDesc_"+i;l.addEventListener("load",(function(){T(n)&&n()}),!1),l.src=t.href,""!=t.sizes&&""!=t.srcset&&(l.sizes=t.sizes,l.srcset=t.srcset),l.alt="",I(t.alt)||""===t.alt||(l.alt=t.alt),""!==t.title&&l.setAttribute("aria-labelledby",o),""!==t.description&&l.setAttribute("aria-describedby",r),t.hasOwnProperty("_hasCustomWidth")&&t._hasCustomWidth&&(l.style.width=t.width),t.hasOwnProperty("_hasCustomHeight")&&t._hasCustomHeight&&(l.style.height=t.height),s.insertBefore(l,s.firstChild)}function F(e,t,i,n){var s=this,l=e.querySelector(".ginner-container"),o="gvideo"+i,r=e.querySelector(".gslide-media"),a=this.getAllPlayers();h(l,"gvideo-container"),r.insertBefore(m('
'),r.firstChild);var d=e.querySelector(".gvideo-wrapper");S(this.settings.plyr.css,"Plyr");var c=t.href,u=null==t?void 0:t.videoProvider,g=!1;r.style.maxWidth=t.width,S(this.settings.plyr.js,"Plyr",(function(){if(!u&&c.match(/vimeo\.com\/([0-9]*)/)&&(u="vimeo"),!u&&(c.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||c.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||c.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))&&(u="youtube"),"local"===u||!u){u="local";var l='")}var r=g||m('
'));h(d,"".concat(u,"-video gvideo")),d.appendChild(r),d.setAttribute("data-id",o),d.setAttribute("data-index",i);var v=O(s.settings.plyr,"config")?s.settings.plyr.config:{},f=new Plyr("#"+o,v);f.on("ready",(function(e){a[o]=e.detail.plyr,T(n)&&n()})),b((function(){return e.querySelector("iframe")&&"true"==e.querySelector("iframe").dataset.ready}),(function(){s.resize(e)})),f.on("enterfullscreen",R),f.on("exitfullscreen",R)}))}function R(e){var t=u(e.target,".gslide-media");"enterfullscreen"===e.type&&h(t,"fullscreen"),"exitfullscreen"===e.type&&d(t,"fullscreen")}function G(e,t,i,n){var s,l=this,o=e.querySelector(".gslide-media"),r=!(!O(t,"href")||!t.href)&&t.href.split("#").pop().trim(),d=!(!O(t,"content")||!t.content)&&t.content;if(d&&(C(d)&&(s=m('
'.concat(d,"
"))),k(d))){"none"==d.style.display&&(d.style.display="block");var c=document.createElement("div");c.className="ginlined-content",c.appendChild(d),s=c}if(r){var u=document.getElementById(r);if(!u)return!1;var g=u.cloneNode(!0);g.style.height=t.height,g.style.maxWidth=t.width,h(g,"ginlined-content"),s=g}if(!s)return console.error("Unable to append inline slide content",t),!1;o.style.height=t.height,o.style.width=t.width,o.appendChild(s),this.events["inlineclose"+r]=a("click",{onElement:o.querySelectorAll(".gtrigger-close"),withCallback:function(e){e.preventDefault(),l.close()}}),T(n)&&n()}function Z(e,t,i,n){var s=e.querySelector(".gslide-media"),l=function(e){var t=e.url,i=e.allow,n=e.callback,s=e.appendTo,l=document.createElement("iframe");return l.className="vimeo-video gvideo",l.src=t,l.style.width="100%",l.style.height="100%",i&&l.setAttribute("allow",i),l.onload=function(){l.onload=null,h(l,"node-ready"),T(n)&&n()},s&&s.appendChild(l),l}({url:t.href,callback:n});s.parentNode.style.maxWidth=t.width,s.parentNode.style.height=t.height,s.appendChild(l)}var U=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.defaults={href:"",sizes:"",srcset:"",title:"",type:"",videoProvider:"",description:"",alt:"",descPosition:"bottom",effect:"",width:"",height:"",content:!1,zoomable:!0,draggable:!0},L(i)&&(this.defaults=l(this.defaults,i))}return n(e,[{key:"sourceType",value:function(e){var t=e;if(null!==(e=e.toLowerCase()).match(/\.(jpeg|jpg|jpe|gif|png|apn|webp|avif|svg)/))return"image";if(e.match(/(youtube\.com|youtube-nocookie\.com)\/watch\?v=([a-zA-Z0-9\-_]+)/)||e.match(/youtu\.be\/([a-zA-Z0-9\-_]+)/)||e.match(/(youtube\.com|youtube-nocookie\.com)\/embed\/([a-zA-Z0-9\-_]+)/))return"video";if(e.match(/vimeo\.com\/([0-9]*)/))return"video";if(null!==e.match(/\.(mp4|ogg|webm|mov)/))return"video";if(null!==e.match(/\.(mp3|wav|wma|aac|ogg)/))return"audio";if(e.indexOf("#")>-1&&""!==t.split("#").pop().trim())return"inline";return e.indexOf("goajax=true")>-1?"ajax":"external"}},{key:"parseConfig",value:function(e,t){var i=this,n=l({descPosition:t.descPosition},this.defaults);if(L(e)&&!k(e)){O(e,"type")||(O(e,"content")&&e.content?e.type="inline":O(e,"href")&&(e.type=this.sourceType(e.href)));var s=l(n,e);return this.setSize(s,t),s}var r="",a=e.getAttribute("data-glightbox"),h=e.nodeName.toLowerCase();if("a"===h&&(r=e.href),"img"===h&&(r=e.src,n.alt=e.alt),n.href=r,o(n,(function(s,l){O(t,l)&&"width"!==l&&(n[l]=t[l]);var o=e.dataset[l];I(o)||(n[l]=i.sanitizeValue(o))})),n.content&&(n.type="inline"),!n.type&&r&&(n.type=this.sourceType(r)),I(a)){if(!n.title&&"a"==h){var d=e.title;I(d)||""===d||(n.title=d)}if(!n.title&&"img"==h){var c=e.alt;I(c)||""===c||(n.title=c)}}else{var u=[];o(n,(function(e,t){u.push(";\\s?"+t)})),u=u.join("\\s?:|"),""!==a.trim()&&o(n,(function(e,t){var s=a,l=new RegExp("s?"+t+"s?:s?(.*?)("+u+"s?:|$)"),o=s.match(l);if(o&&o.length&&o[1]){var r=o[1].trim().replace(/;\s*$/,"");n[t]=i.sanitizeValue(r)}}))}if(n.description&&"."===n.description.substring(0,1)){var g;try{g=document.querySelector(n.description).innerHTML}catch(e){if(!(e instanceof DOMException))throw e}g&&(n.description=g)}if(!n.description){var v=e.querySelector(".glightbox-desc");v&&(n.description=v.innerHTML)}return this.setSize(n,t,e),this.slideConfig=n,n}},{key:"setSize",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,n="video"==e.type?this.checkSize(t.videosWidth):this.checkSize(t.width),s=this.checkSize(t.height);return e.width=O(e,"width")&&""!==e.width?this.checkSize(e.width):n,e.height=O(e,"height")&&""!==e.height?this.checkSize(e.height):s,i&&"image"==e.type&&(e._hasCustomWidth=!!i.dataset.width,e._hasCustomHeight=!!i.dataset.height),e}},{key:"checkSize",value:function(e){return M(e)?"".concat(e,"px"):e}},{key:"sanitizeValue",value:function(e){return"true"!==e&&"false"!==e?e:"true"===e}}]),e}(),$=function(){function e(i,n,s){t(this,e),this.element=i,this.instance=n,this.index=s}return n(e,[{key:"setContent",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(c(t,"loaded"))return!1;var n=this.instance.settings,s=this.slideConfig,l=w();T(n.beforeSlideLoad)&&n.beforeSlideLoad({index:this.index,slide:t,player:!1});var o=s.type,r=s.descPosition,a=t.querySelector(".gslide-media"),d=t.querySelector(".gslide-title"),u=t.querySelector(".gslide-desc"),g=t.querySelector(".gdesc-inner"),v=i,f="gSlideTitle_"+this.index,p="gSlideDesc_"+this.index;if(T(n.afterSlideLoad)&&(v=function(){T(i)&&i(),n.afterSlideLoad({index:e.index,slide:t,player:e.instance.getSlidePlayerInstance(e.index)})}),""==s.title&&""==s.description?g&&g.parentNode.parentNode.removeChild(g.parentNode):(d&&""!==s.title?(d.id=f,d.innerHTML=s.title):d.parentNode.removeChild(d),u&&""!==s.description?(u.id=p,l&&n.moreLength>0?(s.smallDescription=this.slideShortDesc(s.description,n.moreLength,n.moreText),u.innerHTML=s.smallDescription,this.descriptionEvents(u,s)):u.innerHTML=s.description):u.parentNode.removeChild(u),h(a.parentNode,"desc-".concat(r)),h(g.parentNode,"description-".concat(r))),h(a,"gslide-".concat(o)),h(t,"loaded"),"video"!==o){if("external"!==o)return"inline"===o?(G.apply(this.instance,[t,s,this.index,v]),void(s.draggable&&new V({dragEl:t.querySelector(".gslide-inline"),toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:this.instance}))):void("image"!==o?T(v)&&v():j(t,s,this.index,(function(){var i=t.querySelector("img");s.draggable&&new V({dragEl:i,toleranceX:n.dragToleranceX,toleranceY:n.dragToleranceY,slide:t,instance:e.instance}),s.zoomable&&i.naturalWidth>i.offsetWidth&&(h(i,"zoomable"),new H(i,t,(function(){e.instance.resize()}))),T(v)&&v()})));Z.apply(this,[t,s,this.index,v])}else F.apply(this.instance,[t,s,this.index,v])}},{key:"slideShortDesc",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:50,i=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=document.createElement("div");n.innerHTML=e;var s=n.innerText,l=i;if((e=s.trim()).length<=t)return e;var o=e.substr(0,t-1);return l?(n=null,o+'... '+i+""):o}},{key:"descriptionEvents",value:function(e,t){var i=this,n=e.querySelector(".desc-more");if(!n)return!1;a("click",{onElement:n,withCallback:function(e,n){e.preventDefault();var s=document.body,l=u(n,".gslide-desc");if(!l)return!1;l.innerHTML=t.description,h(s,"gdesc-open");var o=a("click",{onElement:[s,u(l,".gslide-description")],withCallback:function(e,n){"a"!==e.target.nodeName.toLowerCase()&&(d(s,"gdesc-open"),h(s,"gdesc-closed"),l.innerHTML=t.smallDescription,i.descriptionEvents(l,t),setTimeout((function(){d(s,"gdesc-closed")}),400),o.destroy())}})}})}},{key:"create",value:function(){return m(this.instance.settings.slideHTML)}},{key:"getConfig",value:function(){k(this.element)||this.element.hasOwnProperty("draggable")||(this.element.draggable=this.instance.settings.draggable);var e=new U(this.instance.settings.slideExtraAttributes);return this.slideConfig=e.parseConfig(this.element,this.instance.settings),this.slideConfig}}]),e}(),J=w(),K=null!==w()||void 0!==document.createTouch||"ontouchstart"in window||"onmsgesturechange"in window||navigator.msMaxTouchPoints,Q=document.getElementsByTagName("html")[0],ee={selector:".glightbox",elements:null,skin:"clean",theme:"clean",closeButton:!0,startAt:null,autoplayVideos:!0,autofocusVideos:!0,descPosition:"bottom",width:"900px",height:"506px",videosWidth:"960px",beforeSlideChange:null,afterSlideChange:null,beforeSlideLoad:null,afterSlideLoad:null,slideInserted:null,slideRemoved:null,slideExtraAttributes:null,onOpen:null,onClose:null,loop:!1,zoomable:!0,draggable:!0,dragAutoSnap:!1,dragToleranceX:40,dragToleranceY:65,preload:!0,oneSlidePerOpen:!1,touchNavigation:!0,touchFollowAxis:!0,keyboardNavigation:!0,closeOnOutsideClick:!0,plugins:!1,plyr:{css:"https://cdn.plyr.io/3.6.12/plyr.css",js:"https://cdn.plyr.io/3.6.12/plyr.js",config:{ratio:"16:9",fullscreen:{enabled:!0,iosNative:!0},youtube:{noCookie:!0,rel:0,showinfo:0,iv_load_policy:3},vimeo:{byline:!1,portrait:!1,title:!1,transparent:!1}}},openEffect:"zoom",closeEffect:"zoom",slideEffect:"slide",moreText:"See more",moreLength:60,cssEfects:{fade:{in:"fadeIn",out:"fadeOut"},zoom:{in:"zoomIn",out:"zoomOut"},slide:{in:"slideInRight",out:"slideOutLeft"},slideBack:{in:"slideInLeft",out:"slideOutRight"},none:{in:"none",out:"none"}},svg:{close:'',next:' ',prev:''},slideHTML:'
\n
\n
\n
\n
\n
\n
\n

\n
\n
\n
\n
\n
\n
',lightboxHTML:''},te=function(){function e(){var i=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t(this,e),this.customOptions=i,this.settings=l(ee,i),this.effectsClasses=this.getAnimationClasses(),this.videoPlayers={},this.apiEvents=[],this.fullElementsList=!1}return n(e,[{key:"init",value:function(){var e=this,t=this.getSelector();t&&(this.baseEvents=a("click",{onElement:t,withCallback:function(t,i){t.preventDefault(),e.open(i)}})),this.elements=this.getElements()}},{key:"open",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(0===this.elements.length)return!1;this.activeSlide=null,this.prevActiveSlideIndex=null,this.prevActiveSlide=null;var i=M(t)?t:this.settings.startAt;if(k(e)){var n=e.getAttribute("data-gallery");n&&(this.fullElementsList=this.elements,this.elements=this.getGalleryElements(this.elements,n)),I(i)&&(i=this.getElementIndex(e))<0&&(i=0)}M(i)||(i=0),this.build(),g(this.overlay,"none"===this.settings.openEffect?"none":this.settings.cssEfects.fade.in);var s=document.body,l=window.innerWidth-document.documentElement.clientWidth;if(l>0){var o=document.createElement("style");o.type="text/css",o.className="gcss-styles",o.innerText=".gscrollbar-fixer {margin-right: ".concat(l,"px}"),document.head.appendChild(o),h(s,"gscrollbar-fixer")}h(s,"glightbox-open"),h(Q,"glightbox-open"),J&&(h(document.body,"glightbox-mobile"),this.settings.slideEffect="slide"),this.showSlide(i,!0),1===this.elements.length?(h(this.prevButton,"glightbox-button-hidden"),h(this.nextButton,"glightbox-button-hidden")):(d(this.prevButton,"glightbox-button-hidden"),d(this.nextButton,"glightbox-button-hidden")),this.lightboxOpen=!0,this.trigger("open"),T(this.settings.onOpen)&&this.settings.onOpen(),K&&this.settings.touchNavigation&&B(this),this.settings.keyboardNavigation&&X(this)}},{key:"openAt",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;this.open(null,e)}},{key:"showSlide",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];f(this.loader),this.index=parseInt(t);var n=this.slidesContainer.querySelector(".current");n&&d(n,"current"),this.slideAnimateOut();var s=this.slidesContainer.querySelectorAll(".gslide")[t];if(c(s,"loaded"))this.slideAnimateIn(s,i),p(this.loader);else{f(this.loader);var l=this.elements[t],o={index:this.index,slide:s,slideNode:s,slideConfig:l.slideConfig,slideIndex:this.index,trigger:l.node,player:null};this.trigger("slide_before_load",o),l.instance.setContent(s,(function(){p(e.loader),e.resize(),e.slideAnimateIn(s,i),e.trigger("slide_after_load",o)}))}this.slideDescription=s.querySelector(".gslide-description"),this.slideDescriptionContained=this.slideDescription&&c(this.slideDescription.parentNode,"gslide-media"),this.settings.preload&&(this.preloadSlide(t+1),this.preloadSlide(t-1)),this.updateNavigationClasses(),this.activeSlide=s}},{key:"preloadSlide",value:function(e){var t=this;if(e<0||e>this.elements.length-1)return!1;if(I(this.elements[e]))return!1;var i=this.slidesContainer.querySelectorAll(".gslide")[e];if(c(i,"loaded"))return!1;var n=this.elements[e],s=n.type,l={index:e,slide:i,slideNode:i,slideConfig:n.slideConfig,slideIndex:e,trigger:n.node,player:null};this.trigger("slide_before_load",l),"video"===s||"external"===s?setTimeout((function(){n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}),200):n.instance.setContent(i,(function(){t.trigger("slide_after_load",l)}))}},{key:"prevSlide",value:function(){this.goToSlide(this.index-1)}},{key:"nextSlide",value:function(){this.goToSlide(this.index+1)}},{key:"goToSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this.prevActiveSlide=this.activeSlide,this.prevActiveSlideIndex=this.index,!this.loop()&&(e<0||e>this.elements.length-1))return!1;e<0?e=this.elements.length-1:e>=this.elements.length&&(e=0),this.showSlide(e)}},{key:"insertSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;t<0&&(t=this.elements.length);var i=new $(e,this,t),n=i.getConfig(),s=l({},n),o=i.create(),r=this.elements.length-1;s.index=t,s.node=!1,s.instance=i,s.slideConfig=n,this.elements.splice(t,0,s);var a=null,h=null;if(this.slidesContainer){if(t>r)this.slidesContainer.appendChild(o);else{var d=this.slidesContainer.querySelectorAll(".gslide")[t];this.slidesContainer.insertBefore(o,d)}(this.settings.preload&&0==this.index&&0==t||this.index-1==t||this.index+1==t)&&this.preloadSlide(t),0===this.index&&0===t&&(this.index=1),this.updateNavigationClasses(),a=this.slidesContainer.querySelectorAll(".gslide")[t],h=this.getSlidePlayerInstance(t),s.slideNode=a}this.trigger("slide_inserted",{index:t,slide:a,slideNode:a,slideConfig:n,slideIndex:t,trigger:null,player:h}),T(this.settings.slideInserted)&&this.settings.slideInserted({index:t,slide:a,player:h})}},{key:"removeSlide",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:-1;if(e<0||e>this.elements.length-1)return!1;var t=this.slidesContainer&&this.slidesContainer.querySelectorAll(".gslide")[e];t&&(this.getActiveSlideIndex()==e&&(e==this.elements.length-1?this.prevSlide():this.nextSlide()),t.parentNode.removeChild(t)),this.elements.splice(e,1),this.trigger("slide_removed",e),T(this.settings.slideRemoved)&&this.settings.slideRemoved(e)}},{key:"slideAnimateIn",value:function(e,t){var i=this,n=e.querySelector(".gslide-media"),s=e.querySelector(".gslide-description"),l={index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlide,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},o={index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideConfig:this.elements[this.index].slideConfig,slideIndex:this.index,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)};if(n.offsetWidth>0&&s&&(p(s),s.style.display=""),d(e,this.effectsClasses),t)g(e,this.settings.cssEfects[this.settings.openEffect].in,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}));else{var r=this.settings.slideEffect,a="none"!==r?this.settings.cssEfects[r].in:r;this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(a=this.settings.cssEfects.slideBack.in),g(e,a,(function(){i.settings.autoplayVideos&&i.slidePlayerPlay(e),i.trigger("slide_changed",{prev:l,current:o}),T(i.settings.afterSlideChange)&&i.settings.afterSlideChange.apply(i,[l,o])}))}setTimeout((function(){i.resize(e)}),100),h(e,"current")}},{key:"slideAnimateOut",value:function(){if(!this.prevActiveSlide)return!1;var e=this.prevActiveSlide;d(e,this.effectsClasses),h(e,"prev");var t=this.settings.slideEffect,i="none"!==t?this.settings.cssEfects[t].out:t;this.slidePlayerPause(e),this.trigger("slide_before_change",{prev:{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,slideNode:this.prevActiveSlide,slideIndex:this.prevActiveSlideIndex,slideConfig:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].slideConfig,trigger:I(this.prevActiveSlideIndex)?null:this.elements[this.prevActiveSlideIndex].node,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},current:{index:this.index,slide:this.activeSlide,slideNode:this.activeSlide,slideIndex:this.index,slideConfig:this.elements[this.index].slideConfig,trigger:this.elements[this.index].node,player:this.getSlidePlayerInstance(this.index)}}),T(this.settings.beforeSlideChange)&&this.settings.beforeSlideChange.apply(this,[{index:this.prevActiveSlideIndex,slide:this.prevActiveSlide,player:this.getSlidePlayerInstance(this.prevActiveSlideIndex)},{index:this.index,slide:this.activeSlide,player:this.getSlidePlayerInstance(this.index)}]),this.prevActiveSlideIndex>this.index&&"slide"==this.settings.slideEffect&&(i=this.settings.cssEfects.slideBack.out),g(e,i,(function(){var t=e.querySelector(".ginner-container"),i=e.querySelector(".gslide-media"),n=e.querySelector(".gslide-description");t.style.transform="",i.style.transform="",d(i,"greset"),i.style.opacity="",n&&(n.style.opacity=""),d(e,"prev")}))}},{key:"getAllPlayers",value:function(){return this.videoPlayers}},{key:"getSlidePlayerInstance",value:function(e){var t="gvideo"+e,i=this.getAllPlayers();return!(!O(i,t)||!i[t])&&i[t]}},{key:"stopSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("stopSlideVideo is deprecated, use slidePlayerPause");var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"slidePlayerPause",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}var i=this.getSlidePlayerInstance(e);i&&i.playing&&i.pause()}},{key:"playSlideVideo",value:function(e){if(k(e)){var t=e.querySelector(".gvideo-wrapper");t&&(e=t.getAttribute("data-index"))}console.log("playSlideVideo is deprecated, use slidePlayerPlay");var i=this.getSlidePlayerInstance(e);i&&!i.playing&&i.play()}},{key:"slidePlayerPlay",value:function(e){var t;if(!J||null!==(t=this.settings.plyr.config)&&void 0!==t&&t.muted){if(k(e)){var i=e.querySelector(".gvideo-wrapper");i&&(e=i.getAttribute("data-index"))}var n=this.getSlidePlayerInstance(e);n&&!n.playing&&(n.play(),this.settings.autofocusVideos&&n.elements.container.focus())}}},{key:"setElements",value:function(e){var t=this;this.settings.elements=!1;var i=[];e&&e.length&&o(e,(function(e,n){var s=new $(e,t,n),o=s.getConfig(),r=l({},o);r.slideConfig=o,r.instance=s,r.index=n,i.push(r)})),this.elements=i,this.lightboxOpen&&(this.slidesContainer.innerHTML="",this.elements.length&&(o(this.elements,(function(){var e=m(t.settings.slideHTML);t.slidesContainer.appendChild(e)})),this.showSlide(0,!0)))}},{key:"getElementIndex",value:function(e){var t=!1;return o(this.elements,(function(i,n){if(O(i,"node")&&i.node==e)return t=n,!0})),t}},{key:"getElements",value:function(){var e=this,t=[];this.elements=this.elements?this.elements:[],!I(this.settings.elements)&&E(this.settings.elements)&&this.settings.elements.length&&o(this.settings.elements,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=!1,r.index=n,r.instance=s,r.slideConfig=o,t.push(r)}));var i=!1;return this.getSelector()&&(i=document.querySelectorAll(this.getSelector())),i?(o(i,(function(i,n){var s=new $(i,e,n),o=s.getConfig(),r=l({},o);r.node=i,r.index=n,r.instance=s,r.slideConfig=o,r.gallery=i.getAttribute("data-gallery"),t.push(r)})),t):t}},{key:"getGalleryElements",value:function(e,t){return e.filter((function(e){return e.gallery==t}))}},{key:"getSelector",value:function(){return!this.settings.elements&&(this.settings.selector&&"data-"==this.settings.selector.substring(0,5)?"*[".concat(this.settings.selector,"]"):this.settings.selector)}},{key:"getActiveSlide",value:function(){return this.slidesContainer.querySelectorAll(".gslide")[this.index]}},{key:"getActiveSlideIndex",value:function(){return this.index}},{key:"getAnimationClasses",value:function(){var e=[];for(var t in this.settings.cssEfects)if(this.settings.cssEfects.hasOwnProperty(t)){var i=this.settings.cssEfects[t];e.push("g".concat(i.in)),e.push("g".concat(i.out))}return e.join(" ")}},{key:"build",value:function(){var e=this;if(this.built)return!1;var t=document.body.childNodes,i=[];o(t,(function(e){e.parentNode==document.body&&"#"!==e.nodeName.charAt(0)&&e.hasAttribute&&!e.hasAttribute("aria-hidden")&&(i.push(e),e.setAttribute("aria-hidden","true"))}));var n=O(this.settings.svg,"next")?this.settings.svg.next:"",s=O(this.settings.svg,"prev")?this.settings.svg.prev:"",l=O(this.settings.svg,"close")?this.settings.svg.close:"",r=this.settings.lightboxHTML;r=m(r=(r=(r=r.replace(/{nextSVG}/g,n)).replace(/{prevSVG}/g,s)).replace(/{closeSVG}/g,l)),document.body.appendChild(r);var d=document.getElementById("glightbox-body");this.modal=d;var g=d.querySelector(".gclose");this.prevButton=d.querySelector(".gprev"),this.nextButton=d.querySelector(".gnext"),this.overlay=d.querySelector(".goverlay"),this.loader=d.querySelector(".gloader"),this.slidesContainer=document.getElementById("glightbox-slider"),this.bodyHiddenChildElms=i,this.events={},h(this.modal,"glightbox-"+this.settings.skin),this.settings.closeButton&&g&&(this.events.close=a("click",{onElement:g,withCallback:function(t,i){t.preventDefault(),e.close()}})),g&&!this.settings.closeButton&&g.parentNode.removeChild(g),this.nextButton&&(this.events.next=a("click",{onElement:this.nextButton,withCallback:function(t,i){t.preventDefault(),e.nextSlide()}})),this.prevButton&&(this.events.prev=a("click",{onElement:this.prevButton,withCallback:function(t,i){t.preventDefault(),e.prevSlide()}})),this.settings.closeOnOutsideClick&&(this.events.outClose=a("click",{onElement:d,withCallback:function(t,i){e.preventOutsideClick||c(document.body,"glightbox-mobile")||u(t.target,".ginner-container")||u(t.target,".gbtn")||c(t.target,"gnext")||c(t.target,"gprev")||e.close()}})),o(this.elements,(function(t,i){e.slidesContainer.appendChild(t.instance.create()),t.slideNode=e.slidesContainer.querySelectorAll(".gslide")[i]})),K&&h(document.body,"glightbox-touch"),this.events.resize=a("resize",{onElement:window,withCallback:function(){e.resize()}}),this.built=!0}},{key:"resize",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;if((e=e||this.activeSlide)&&!c(e,"zoomed")){var t=y(),i=e.querySelector(".gvideo-wrapper"),n=e.querySelector(".gslide-image"),s=this.slideDescription,l=t.width,o=t.height;if(l<=768?h(document.body,"glightbox-mobile"):d(document.body,"glightbox-mobile"),i||n){var r=!1;if(s&&(c(s,"description-bottom")||c(s,"description-top"))&&!c(s,"gabsolute")&&(r=!0),n)if(l<=768)n.querySelector("img");else if(r){var a=s.offsetHeight,u=n.querySelector("img");u.setAttribute("style","max-height: calc(100vh - ".concat(a,"px)")),s.setAttribute("style","max-width: ".concat(u.offsetWidth,"px;"))}if(i){var g=O(this.settings.plyr.config,"ratio")?this.settings.plyr.config.ratio:"";if(!g){var v=i.clientWidth,f=i.clientHeight,p=v/f;g="".concat(v/p,":").concat(f/p)}var m=g.split(":"),x=this.settings.videosWidth,b=this.settings.videosWidth,S=(b=M(x)||-1!==x.indexOf("px")?parseInt(x):-1!==x.indexOf("vw")?l*parseInt(x)/100:-1!==x.indexOf("vh")?o*parseInt(x)/100:-1!==x.indexOf("%")?l*parseInt(x)/100:parseInt(i.clientWidth))/(parseInt(m[0])/parseInt(m[1]));if(S=Math.floor(S),r&&(o-=s.offsetHeight),b>l||S>o||ob){var w=i.offsetWidth,T=i.offsetHeight,C=o/T,k={width:w*C,height:T*C};i.parentNode.setAttribute("style","max-width: ".concat(k.width,"px")),r&&s.setAttribute("style","max-width: ".concat(k.width,"px;"))}else i.parentNode.style.maxWidth="".concat(x),r&&s.setAttribute("style","max-width: ".concat(x,";"))}}}}},{key:"reload",value:function(){this.init()}},{key:"updateNavigationClasses",value:function(){var e=this.loop();d(this.nextButton,"disabled"),d(this.prevButton,"disabled"),0==this.index&&this.elements.length-1==0?(h(this.prevButton,"disabled"),h(this.nextButton,"disabled")):0!==this.index||e?this.index!==this.elements.length-1||e||h(this.nextButton,"disabled"):h(this.prevButton,"disabled")}},{key:"loop",value:function(){var e=O(this.settings,"loopAtEnd")?this.settings.loopAtEnd:null;return e=O(this.settings,"loop")?this.settings.loop:e,e}},{key:"close",value:function(){var e=this;if(!this.lightboxOpen){if(this.events){for(var t in this.events)this.events.hasOwnProperty(t)&&this.events[t].destroy();this.events=null}return!1}if(this.closing)return!1;this.closing=!0,this.slidePlayerPause(this.activeSlide),this.fullElementsList&&(this.elements=this.fullElementsList),this.bodyHiddenChildElms.length&&o(this.bodyHiddenChildElms,(function(e){e.removeAttribute("aria-hidden")})),h(this.modal,"glightbox-closing"),g(this.overlay,"none"==this.settings.openEffect?"none":this.settings.cssEfects.fade.out),g(this.activeSlide,this.settings.cssEfects[this.settings.closeEffect].out,(function(){if(e.activeSlide=null,e.prevActiveSlideIndex=null,e.prevActiveSlide=null,e.built=!1,e.events){for(var t in e.events)e.events.hasOwnProperty(t)&&e.events[t].destroy();e.events=null}var i=document.body;d(Q,"glightbox-open"),d(i,"glightbox-open touching gdesc-open glightbox-touch glightbox-mobile gscrollbar-fixer"),e.modal.parentNode.removeChild(e.modal),e.trigger("close"),T(e.settings.onClose)&&e.settings.onClose();var n=document.querySelector(".gcss-styles");n&&n.parentNode.removeChild(n),e.lightboxOpen=!1,e.closing=null}))}},{key:"destroy",value:function(){this.close(),this.clearAllEvents(),this.baseEvents&&this.baseEvents.destroy()}},{key:"on",value:function(e,t){var i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!e||!T(t))throw new TypeError("Event name and callback must be defined");this.apiEvents.push({evt:e,once:i,callback:t})}},{key:"once",value:function(e,t){this.on(e,t,!0)}},{key:"trigger",value:function(e){var t=this,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,n=[];o(this.apiEvents,(function(t,s){var l=t.evt,o=t.once,r=t.callback;l==e&&(r(i),o&&n.push(s))})),n.length&&o(n,(function(e){return t.apiEvents.splice(e,1)}))}},{key:"clearAllEvents",value:function(){this.apiEvents.splice(0,this.apiEvents.length)}},{key:"version",value:function(){return"3.1.0"}}]),e}();return function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=new te(e);return t.init(),t}})); \ No newline at end of file diff --git a/src/assets/vendor/isotope-layout/isotope.pkgd.js b/src/assets/vendor/isotope-layout/isotope.pkgd.js new file mode 100644 index 0000000..fde0071 --- /dev/null +++ b/src/assets/vendor/isotope-layout/isotope.pkgd.js @@ -0,0 +1,3563 @@ +/*! + * Isotope PACKAGED v3.0.6 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * https://isotope.metafizzy.co + * Copyright 2010-2018 Metafizzy + */ + +/** + * Bridget makes jQuery widgets + * v2.0.1 + * MIT license + */ + +/* jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'jquery-bridget/jquery-bridget',[ 'jquery' ], function( jQuery ) { + return factory( window, jQuery ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('jquery') + ); + } else { + // browser global + window.jQueryBridget = factory( + window, + window.jQuery + ); + } + +}( window, function factory( window, jQuery ) { +'use strict'; + +// ----- utils ----- // + +var arraySlice = Array.prototype.slice; + +// helper function for logging errors +// $.error breaks jQuery chaining +var console = window.console; +var logError = typeof console == 'undefined' ? function() {} : + function( message ) { + console.error( message ); + }; + +// ----- jQueryBridget ----- // + +function jQueryBridget( namespace, PluginClass, $ ) { + $ = $ || jQuery || window.jQuery; + if ( !$ ) { + return; + } + + // add option method -> $().plugin('option', {...}) + if ( !PluginClass.prototype.option ) { + // option setter + PluginClass.prototype.option = function( opts ) { + // bail out if not an object + if ( !$.isPlainObject( opts ) ){ + return; + } + this.options = $.extend( true, this.options, opts ); + }; + } + + // make jQuery plugin + $.fn[ namespace ] = function( arg0 /*, arg1 */ ) { + if ( typeof arg0 == 'string' ) { + // method call $().plugin( 'methodName', { options } ) + // shift arguments by 1 + var args = arraySlice.call( arguments, 1 ); + return methodCall( this, arg0, args ); + } + // just $().plugin({ options }) + plainCall( this, arg0 ); + return this; + }; + + // $().plugin('methodName') + function methodCall( $elems, methodName, args ) { + var returnValue; + var pluginMethodStr = '$().' + namespace + '("' + methodName + '")'; + + $elems.each( function( i, elem ) { + // get instance + var instance = $.data( elem, namespace ); + if ( !instance ) { + logError( namespace + ' not initialized. Cannot call methods, i.e. ' + + pluginMethodStr ); + return; + } + + var method = instance[ methodName ]; + if ( !method || methodName.charAt(0) == '_' ) { + logError( pluginMethodStr + ' is not a valid method' ); + return; + } + + // apply method, get return value + var value = method.apply( instance, args ); + // set return value if value is returned, use only first value + returnValue = returnValue === undefined ? value : returnValue; + }); + + return returnValue !== undefined ? returnValue : $elems; + } + + function plainCall( $elems, options ) { + $elems.each( function( i, elem ) { + var instance = $.data( elem, namespace ); + if ( instance ) { + // set options & init + instance.option( options ); + instance._init(); + } else { + // initialize new instance + instance = new PluginClass( elem, options ); + $.data( elem, namespace, instance ); + } + }); + } + + updateJQuery( $ ); + +} + +// ----- updateJQuery ----- // + +// set $.bridget for v1 backwards compatibility +function updateJQuery( $ ) { + if ( !$ || ( $ && $.bridget ) ) { + return; + } + $.bridget = jQueryBridget; +} + +updateJQuery( jQuery || window.jQuery ); + +// ----- ----- // + +return jQueryBridget; + +})); + +/** + * EvEmitter v1.1.0 + * Lil' event emitter + * MIT License + */ + +/* jshint unused: true, undef: true, strict: true */ + +( function( global, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, window */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'ev-emitter/ev-emitter',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory(); + } else { + // Browser globals + global.EvEmitter = factory(); + } + +}( typeof window != 'undefined' ? window : this, function() { + + + +function EvEmitter() {} + +var proto = EvEmitter.prototype; + +proto.on = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // set events hash + var events = this._events = this._events || {}; + // set listeners array + var listeners = events[ eventName ] = events[ eventName ] || []; + // only add once + if ( listeners.indexOf( listener ) == -1 ) { + listeners.push( listener ); + } + + return this; +}; + +proto.once = function( eventName, listener ) { + if ( !eventName || !listener ) { + return; + } + // add event + this.on( eventName, listener ); + // set once flag + // set onceEvents hash + var onceEvents = this._onceEvents = this._onceEvents || {}; + // set onceListeners object + var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {}; + // set flag + onceListeners[ listener ] = true; + + return this; +}; + +proto.off = function( eventName, listener ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + var index = listeners.indexOf( listener ); + if ( index != -1 ) { + listeners.splice( index, 1 ); + } + + return this; +}; + +proto.emitEvent = function( eventName, args ) { + var listeners = this._events && this._events[ eventName ]; + if ( !listeners || !listeners.length ) { + return; + } + // copy over to avoid interference if .off() in listener + listeners = listeners.slice(0); + args = args || []; + // once stuff + var onceListeners = this._onceEvents && this._onceEvents[ eventName ]; + + for ( var i=0; i < listeners.length; i++ ) { + var listener = listeners[i] + var isOnce = onceListeners && onceListeners[ listener ]; + if ( isOnce ) { + // remove listener + // remove before trigger to prevent recursion + this.off( eventName, listener ); + // unset once flag + delete onceListeners[ listener ]; + } + // trigger listener + listener.apply( this, args ); + } + + return this; +}; + +proto.allOff = function() { + delete this._events; + delete this._onceEvents; +}; + +return EvEmitter; + +})); + +/*! + * getSize v2.0.3 + * measure size of elements + * MIT license + */ + +/* jshint browser: true, strict: true, undef: true, unused: true */ +/* globals console: false */ + +( function( window, factory ) { + /* jshint strict: false */ /* globals define, module */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'get-size/get-size',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.getSize = factory(); + } + +})( window, function factory() { +'use strict'; + +// -------------------------- helpers -------------------------- // + +// get a number from a string, not a percentage +function getStyleSize( value ) { + var num = parseFloat( value ); + // not a percent like '100%', and a number + var isValid = value.indexOf('%') == -1 && !isNaN( num ); + return isValid && num; +} + +function noop() {} + +var logError = typeof console == 'undefined' ? noop : + function( message ) { + console.error( message ); + }; + +// -------------------------- measurements -------------------------- // + +var measurements = [ + 'paddingLeft', + 'paddingRight', + 'paddingTop', + 'paddingBottom', + 'marginLeft', + 'marginRight', + 'marginTop', + 'marginBottom', + 'borderLeftWidth', + 'borderRightWidth', + 'borderTopWidth', + 'borderBottomWidth' +]; + +var measurementsLength = measurements.length; + +function getZeroSize() { + var size = { + width: 0, + height: 0, + innerWidth: 0, + innerHeight: 0, + outerWidth: 0, + outerHeight: 0 + }; + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + size[ measurement ] = 0; + } + return size; +} + +// -------------------------- getStyle -------------------------- // + +/** + * getStyle, get style of element, check for Firefox bug + * https://bugzilla.mozilla.org/show_bug.cgi?id=548397 + */ +function getStyle( elem ) { + var style = getComputedStyle( elem ); + if ( !style ) { + logError( 'Style returned ' + style + + '. Are you running this code in a hidden iframe on Firefox? ' + + 'See https://bit.ly/getsizebug1' ); + } + return style; +} + +// -------------------------- setup -------------------------- // + +var isSetup = false; + +var isBoxSizeOuter; + +/** + * setup + * check isBoxSizerOuter + * do on first getSize() rather than on page load for Firefox bug + */ +function setup() { + // setup once + if ( isSetup ) { + return; + } + isSetup = true; + + // -------------------------- box sizing -------------------------- // + + /** + * Chrome & Safari measure the outer-width on style.width on border-box elems + * IE11 & Firefox<29 measures the inner-width + */ + var div = document.createElement('div'); + div.style.width = '200px'; + div.style.padding = '1px 2px 3px 4px'; + div.style.borderStyle = 'solid'; + div.style.borderWidth = '1px 2px 3px 4px'; + div.style.boxSizing = 'border-box'; + + var body = document.body || document.documentElement; + body.appendChild( div ); + var style = getStyle( div ); + // round value for browser zoom. desandro/masonry#928 + isBoxSizeOuter = Math.round( getStyleSize( style.width ) ) == 200; + getSize.isBoxSizeOuter = isBoxSizeOuter; + + body.removeChild( div ); +} + +// -------------------------- getSize -------------------------- // + +function getSize( elem ) { + setup(); + + // use querySeletor if elem is string + if ( typeof elem == 'string' ) { + elem = document.querySelector( elem ); + } + + // do not proceed on non-objects + if ( !elem || typeof elem != 'object' || !elem.nodeType ) { + return; + } + + var style = getStyle( elem ); + + // if hidden, everything is 0 + if ( style.display == 'none' ) { + return getZeroSize(); + } + + var size = {}; + size.width = elem.offsetWidth; + size.height = elem.offsetHeight; + + var isBorderBox = size.isBorderBox = style.boxSizing == 'border-box'; + + // get all measurements + for ( var i=0; i < measurementsLength; i++ ) { + var measurement = measurements[i]; + var value = style[ measurement ]; + var num = parseFloat( value ); + // any 'auto', 'medium' value will be 0 + size[ measurement ] = !isNaN( num ) ? num : 0; + } + + var paddingWidth = size.paddingLeft + size.paddingRight; + var paddingHeight = size.paddingTop + size.paddingBottom; + var marginWidth = size.marginLeft + size.marginRight; + var marginHeight = size.marginTop + size.marginBottom; + var borderWidth = size.borderLeftWidth + size.borderRightWidth; + var borderHeight = size.borderTopWidth + size.borderBottomWidth; + + var isBorderBoxSizeOuter = isBorderBox && isBoxSizeOuter; + + // overwrite width and height if we can get it from style + var styleWidth = getStyleSize( style.width ); + if ( styleWidth !== false ) { + size.width = styleWidth + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingWidth + borderWidth ); + } + + var styleHeight = getStyleSize( style.height ); + if ( styleHeight !== false ) { + size.height = styleHeight + + // add padding and border unless it's already including it + ( isBorderBoxSizeOuter ? 0 : paddingHeight + borderHeight ); + } + + size.innerWidth = size.width - ( paddingWidth + borderWidth ); + size.innerHeight = size.height - ( paddingHeight + borderHeight ); + + size.outerWidth = size.width + marginWidth; + size.outerHeight = size.height + marginHeight; + + return size; +} + +return getSize; + +}); + +/** + * matchesSelector v2.0.2 + * matchesSelector( element, '.selector' ) + * MIT license + */ + +/*jshint browser: true, strict: true, undef: true, unused: true */ + +( function( window, factory ) { + /*global define: false, module: false */ + 'use strict'; + // universal module definition + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'desandro-matches-selector/matches-selector',factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory(); + } else { + // browser global + window.matchesSelector = factory(); + } + +}( window, function factory() { + 'use strict'; + + var matchesMethod = ( function() { + var ElemProto = window.Element.prototype; + // check for the standard method name first + if ( ElemProto.matches ) { + return 'matches'; + } + // check un-prefixed + if ( ElemProto.matchesSelector ) { + return 'matchesSelector'; + } + // check vendor prefixes + var prefixes = [ 'webkit', 'moz', 'ms', 'o' ]; + + for ( var i=0; i < prefixes.length; i++ ) { + var prefix = prefixes[i]; + var method = prefix + 'MatchesSelector'; + if ( ElemProto[ method ] ) { + return method; + } + } + })(); + + return function matchesSelector( elem, selector ) { + return elem[ matchesMethod ]( selector ); + }; + +})); + +/** + * Fizzy UI utils v2.0.7 + * MIT license + */ + +/*jshint browser: true, undef: true, unused: true, strict: true */ + +( function( window, factory ) { + // universal module definition + /*jshint strict: false */ /*globals define, module, require */ + + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'fizzy-ui-utils/utils',[ + 'desandro-matches-selector/matches-selector' + ], function( matchesSelector ) { + return factory( window, matchesSelector ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('desandro-matches-selector') + ); + } else { + // browser global + window.fizzyUIUtils = factory( + window, + window.matchesSelector + ); + } + +}( window, function factory( window, matchesSelector ) { + + + +var utils = {}; + +// ----- extend ----- // + +// extends objects +utils.extend = function( a, b ) { + for ( var prop in b ) { + a[ prop ] = b[ prop ]; + } + return a; +}; + +// ----- modulo ----- // + +utils.modulo = function( num, div ) { + return ( ( num % div ) + div ) % div; +}; + +// ----- makeArray ----- // + +var arraySlice = Array.prototype.slice; + +// turn element or nodeList into an array +utils.makeArray = function( obj ) { + if ( Array.isArray( obj ) ) { + // use object if already an array + return obj; + } + // return empty array if undefined or null. #6 + if ( obj === null || obj === undefined ) { + return []; + } + + var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number'; + if ( isArrayLike ) { + // convert nodeList to array + return arraySlice.call( obj ); + } + + // array of single index + return [ obj ]; +}; + +// ----- removeFrom ----- // + +utils.removeFrom = function( ary, obj ) { + var index = ary.indexOf( obj ); + if ( index != -1 ) { + ary.splice( index, 1 ); + } +}; + +// ----- getParent ----- // + +utils.getParent = function( elem, selector ) { + while ( elem.parentNode && elem != document.body ) { + elem = elem.parentNode; + if ( matchesSelector( elem, selector ) ) { + return elem; + } + } +}; + +// ----- getQueryElement ----- // + +// use element as selector string +utils.getQueryElement = function( elem ) { + if ( typeof elem == 'string' ) { + return document.querySelector( elem ); + } + return elem; +}; + +// ----- handleEvent ----- // + +// enable .ontype to trigger from .addEventListener( elem, 'type' ) +utils.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +// ----- filterFindElements ----- // + +utils.filterFindElements = function( elems, selector ) { + // make array of elems + elems = utils.makeArray( elems ); + var ffElems = []; + + elems.forEach( function( elem ) { + // check that elem is an actual element + if ( !( elem instanceof HTMLElement ) ) { + return; + } + // add elem if no selector + if ( !selector ) { + ffElems.push( elem ); + return; + } + // filter & find items if we have a selector + // filter + if ( matchesSelector( elem, selector ) ) { + ffElems.push( elem ); + } + // find children + var childElems = elem.querySelectorAll( selector ); + // concat childElems to filterFound array + for ( var i=0; i < childElems.length; i++ ) { + ffElems.push( childElems[i] ); + } + }); + + return ffElems; +}; + +// ----- debounceMethod ----- // + +utils.debounceMethod = function( _class, methodName, threshold ) { + threshold = threshold || 100; + // original method + var method = _class.prototype[ methodName ]; + var timeoutName = methodName + 'Timeout'; + + _class.prototype[ methodName ] = function() { + var timeout = this[ timeoutName ]; + clearTimeout( timeout ); + + var args = arguments; + var _this = this; + this[ timeoutName ] = setTimeout( function() { + method.apply( _this, args ); + delete _this[ timeoutName ]; + }, threshold ); + }; +}; + +// ----- docReady ----- // + +utils.docReady = function( callback ) { + var readyState = document.readyState; + if ( readyState == 'complete' || readyState == 'interactive' ) { + // do async to allow for other scripts to run. metafizzy/flickity#441 + setTimeout( callback ); + } else { + document.addEventListener( 'DOMContentLoaded', callback ); + } +}; + +// ----- htmlInit ----- // + +// http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/ +utils.toDashed = function( str ) { + return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) { + return $1 + '-' + $2; + }).toLowerCase(); +}; + +var console = window.console; +/** + * allow user to initialize classes via [data-namespace] or .js-namespace class + * htmlInit( Widget, 'widgetName' ) + * options are parsed from data-namespace-options + */ +utils.htmlInit = function( WidgetClass, namespace ) { + utils.docReady( function() { + var dashedNamespace = utils.toDashed( namespace ); + var dataAttr = 'data-' + dashedNamespace; + var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' ); + var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace ); + var elems = utils.makeArray( dataAttrElems ) + .concat( utils.makeArray( jsDashElems ) ); + var dataOptionsAttr = dataAttr + '-options'; + var jQuery = window.jQuery; + + elems.forEach( function( elem ) { + var attr = elem.getAttribute( dataAttr ) || + elem.getAttribute( dataOptionsAttr ); + var options; + try { + options = attr && JSON.parse( attr ); + } catch ( error ) { + // log error, do not initialize + if ( console ) { + console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className + + ': ' + error ); + } + return; + } + // initialize + var instance = new WidgetClass( elem, options ); + // make available via $().data('namespace') + if ( jQuery ) { + jQuery.data( elem, namespace, instance ); + } + }); + + }); +}; + +// ----- ----- // + +return utils; + +})); + +/** + * Outlayer Item + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/item',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size' + ], + factory + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + require('ev-emitter'), + require('get-size') + ); + } else { + // browser global + window.Outlayer = {}; + window.Outlayer.Item = factory( + window.EvEmitter, + window.getSize + ); + } + +}( window, function factory( EvEmitter, getSize ) { +'use strict'; + +// ----- helpers ----- // + +function isEmptyObj( obj ) { + for ( var prop in obj ) { + return false; + } + prop = null; + return true; +} + +// -------------------------- CSS3 support -------------------------- // + + +var docElemStyle = document.documentElement.style; + +var transitionProperty = typeof docElemStyle.transition == 'string' ? + 'transition' : 'WebkitTransition'; +var transformProperty = typeof docElemStyle.transform == 'string' ? + 'transform' : 'WebkitTransform'; + +var transitionEndEvent = { + WebkitTransition: 'webkitTransitionEnd', + transition: 'transitionend' +}[ transitionProperty ]; + +// cache all vendor properties that could have vendor prefix +var vendorProperties = { + transform: transformProperty, + transition: transitionProperty, + transitionDuration: transitionProperty + 'Duration', + transitionProperty: transitionProperty + 'Property', + transitionDelay: transitionProperty + 'Delay' +}; + +// -------------------------- Item -------------------------- // + +function Item( element, layout ) { + if ( !element ) { + return; + } + + this.element = element; + // parent layout class, i.e. Masonry, Isotope, or Packery + this.layout = layout; + this.position = { + x: 0, + y: 0 + }; + + this._create(); +} + +// inherit EvEmitter +var proto = Item.prototype = Object.create( EvEmitter.prototype ); +proto.constructor = Item; + +proto._create = function() { + // transition objects + this._transn = { + ingProperties: {}, + clean: {}, + onEnd: {} + }; + + this.css({ + position: 'absolute' + }); +}; + +// trigger specified handler for event type +proto.handleEvent = function( event ) { + var method = 'on' + event.type; + if ( this[ method ] ) { + this[ method ]( event ); + } +}; + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * apply CSS styles to element + * @param {Object} style + */ +proto.css = function( style ) { + var elemStyle = this.element.style; + + for ( var prop in style ) { + // use vendor property if available + var supportedProp = vendorProperties[ prop ] || prop; + elemStyle[ supportedProp ] = style[ prop ]; + } +}; + + // measure position, and sets it +proto.getPosition = function() { + var style = getComputedStyle( this.element ); + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + var xValue = style[ isOriginLeft ? 'left' : 'right' ]; + var yValue = style[ isOriginTop ? 'top' : 'bottom' ]; + var x = parseFloat( xValue ); + var y = parseFloat( yValue ); + // convert percent to pixels + var layoutSize = this.layout.size; + if ( xValue.indexOf('%') != -1 ) { + x = ( x / 100 ) * layoutSize.width; + } + if ( yValue.indexOf('%') != -1 ) { + y = ( y / 100 ) * layoutSize.height; + } + // clean up 'auto' or other non-integer values + x = isNaN( x ) ? 0 : x; + y = isNaN( y ) ? 0 : y; + // remove padding from measurement + x -= isOriginLeft ? layoutSize.paddingLeft : layoutSize.paddingRight; + y -= isOriginTop ? layoutSize.paddingTop : layoutSize.paddingBottom; + + this.position.x = x; + this.position.y = y; +}; + +// set settled position, apply padding +proto.layoutPosition = function() { + var layoutSize = this.layout.size; + var style = {}; + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + + // x + var xPadding = isOriginLeft ? 'paddingLeft' : 'paddingRight'; + var xProperty = isOriginLeft ? 'left' : 'right'; + var xResetProperty = isOriginLeft ? 'right' : 'left'; + + var x = this.position.x + layoutSize[ xPadding ]; + // set in percentage or pixels + style[ xProperty ] = this.getXValue( x ); + // reset other property + style[ xResetProperty ] = ''; + + // y + var yPadding = isOriginTop ? 'paddingTop' : 'paddingBottom'; + var yProperty = isOriginTop ? 'top' : 'bottom'; + var yResetProperty = isOriginTop ? 'bottom' : 'top'; + + var y = this.position.y + layoutSize[ yPadding ]; + // set in percentage or pixels + style[ yProperty ] = this.getYValue( y ); + // reset other property + style[ yResetProperty ] = ''; + + this.css( style ); + this.emitEvent( 'layout', [ this ] ); +}; + +proto.getXValue = function( x ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && !isHorizontal ? + ( ( x / this.layout.size.width ) * 100 ) + '%' : x + 'px'; +}; + +proto.getYValue = function( y ) { + var isHorizontal = this.layout._getOption('horizontal'); + return this.layout.options.percentPosition && isHorizontal ? + ( ( y / this.layout.size.height ) * 100 ) + '%' : y + 'px'; +}; + +proto._transitionTo = function( x, y ) { + this.getPosition(); + // get current x & y from top/left + var curX = this.position.x; + var curY = this.position.y; + + var didNotMove = x == this.position.x && y == this.position.y; + + // save end position + this.setPosition( x, y ); + + // if did not move and not transitioning, just go to layout + if ( didNotMove && !this.isTransitioning ) { + this.layoutPosition(); + return; + } + + var transX = x - curX; + var transY = y - curY; + var transitionStyle = {}; + transitionStyle.transform = this.getTranslate( transX, transY ); + + this.transition({ + to: transitionStyle, + onTransitionEnd: { + transform: this.layoutPosition + }, + isCleaning: true + }); +}; + +proto.getTranslate = function( x, y ) { + // flip cooridinates if origin on right or bottom + var isOriginLeft = this.layout._getOption('originLeft'); + var isOriginTop = this.layout._getOption('originTop'); + x = isOriginLeft ? x : -x; + y = isOriginTop ? y : -y; + return 'translate3d(' + x + 'px, ' + y + 'px, 0)'; +}; + +// non transition + transform support +proto.goTo = function( x, y ) { + this.setPosition( x, y ); + this.layoutPosition(); +}; + +proto.moveTo = proto._transitionTo; + +proto.setPosition = function( x, y ) { + this.position.x = parseFloat( x ); + this.position.y = parseFloat( y ); +}; + +// ----- transition ----- // + +/** + * @param {Object} style - CSS + * @param {Function} onTransitionEnd + */ + +// non transition, just trigger callback +proto._nonTransition = function( args ) { + this.css( args.to ); + if ( args.isCleaning ) { + this._removeStyles( args.to ); + } + for ( var prop in args.onTransitionEnd ) { + args.onTransitionEnd[ prop ].call( this ); + } +}; + +/** + * proper transition + * @param {Object} args - arguments + * @param {Object} to - style to transition to + * @param {Object} from - style to start transition from + * @param {Boolean} isCleaning - removes transition styles after transition + * @param {Function} onTransitionEnd - callback + */ +proto.transition = function( args ) { + // redirect to nonTransition if no transition duration + if ( !parseFloat( this.layout.options.transitionDuration ) ) { + this._nonTransition( args ); + return; + } + + var _transition = this._transn; + // keep track of onTransitionEnd callback by css property + for ( var prop in args.onTransitionEnd ) { + _transition.onEnd[ prop ] = args.onTransitionEnd[ prop ]; + } + // keep track of properties that are transitioning + for ( prop in args.to ) { + _transition.ingProperties[ prop ] = true; + // keep track of properties to clean up when transition is done + if ( args.isCleaning ) { + _transition.clean[ prop ] = true; + } + } + + // set from styles + if ( args.from ) { + this.css( args.from ); + // force redraw. http://blog.alexmaccaw.com/css-transitions + var h = this.element.offsetHeight; + // hack for JSHint to hush about unused var + h = null; + } + // enable transition + this.enableTransition( args.to ); + // set styles that are transitioning + this.css( args.to ); + + this.isTransitioning = true; + +}; + +// dash before all cap letters, including first for +// WebkitTransform => -webkit-transform +function toDashedAll( str ) { + return str.replace( /([A-Z])/g, function( $1 ) { + return '-' + $1.toLowerCase(); + }); +} + +var transitionProps = 'opacity,' + toDashedAll( transformProperty ); + +proto.enableTransition = function(/* style */) { + // HACK changing transitionProperty during a transition + // will cause transition to jump + if ( this.isTransitioning ) { + return; + } + + // make `transition: foo, bar, baz` from style object + // HACK un-comment this when enableTransition can work + // while a transition is happening + // var transitionValues = []; + // for ( var prop in style ) { + // // dash-ify camelCased properties like WebkitTransition + // prop = vendorProperties[ prop ] || prop; + // transitionValues.push( toDashedAll( prop ) ); + // } + // munge number to millisecond, to match stagger + var duration = this.layout.options.transitionDuration; + duration = typeof duration == 'number' ? duration + 'ms' : duration; + // enable transition styles + this.css({ + transitionProperty: transitionProps, + transitionDuration: duration, + transitionDelay: this.staggerDelay || 0 + }); + // listen for transition end event + this.element.addEventListener( transitionEndEvent, this, false ); +}; + +// ----- events ----- // + +proto.onwebkitTransitionEnd = function( event ) { + this.ontransitionend( event ); +}; + +proto.onotransitionend = function( event ) { + this.ontransitionend( event ); +}; + +// properties that I munge to make my life easier +var dashedVendorProperties = { + '-webkit-transform': 'transform' +}; + +proto.ontransitionend = function( event ) { + // disregard bubbled events from children + if ( event.target !== this.element ) { + return; + } + var _transition = this._transn; + // get property name of transitioned property, convert to prefix-free + var propertyName = dashedVendorProperties[ event.propertyName ] || event.propertyName; + + // remove property that has completed transitioning + delete _transition.ingProperties[ propertyName ]; + // check if any properties are still transitioning + if ( isEmptyObj( _transition.ingProperties ) ) { + // all properties have completed transitioning + this.disableTransition(); + } + // clean style + if ( propertyName in _transition.clean ) { + // clean up style + this.element.style[ event.propertyName ] = ''; + delete _transition.clean[ propertyName ]; + } + // trigger onTransitionEnd callback + if ( propertyName in _transition.onEnd ) { + var onTransitionEnd = _transition.onEnd[ propertyName ]; + onTransitionEnd.call( this ); + delete _transition.onEnd[ propertyName ]; + } + + this.emitEvent( 'transitionEnd', [ this ] ); +}; + +proto.disableTransition = function() { + this.removeTransitionStyles(); + this.element.removeEventListener( transitionEndEvent, this, false ); + this.isTransitioning = false; +}; + +/** + * removes style property from element + * @param {Object} style +**/ +proto._removeStyles = function( style ) { + // clean up transition styles + var cleanStyle = {}; + for ( var prop in style ) { + cleanStyle[ prop ] = ''; + } + this.css( cleanStyle ); +}; + +var cleanTransitionStyle = { + transitionProperty: '', + transitionDuration: '', + transitionDelay: '' +}; + +proto.removeTransitionStyles = function() { + // remove transition + this.css( cleanTransitionStyle ); +}; + +// ----- stagger ----- // + +proto.stagger = function( delay ) { + delay = isNaN( delay ) ? 0 : delay; + this.staggerDelay = delay + 'ms'; +}; + +// ----- show/hide/remove ----- // + +// remove element from DOM +proto.removeElem = function() { + this.element.parentNode.removeChild( this.element ); + // remove display: none + this.css({ display: '' }); + this.emitEvent( 'remove', [ this ] ); +}; + +proto.remove = function() { + // just remove element if no transition support or no transition + if ( !transitionProperty || !parseFloat( this.layout.options.transitionDuration ) ) { + this.removeElem(); + return; + } + + // start transition + this.once( 'transitionEnd', function() { + this.removeElem(); + }); + this.hide(); +}; + +proto.reveal = function() { + delete this.isHidden; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('visibleStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onRevealTransitionEnd; + + this.transition({ + from: options.hiddenStyle, + to: options.visibleStyle, + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onRevealTransitionEnd = function() { + // check if still visible + // during transition, item may have been hidden + if ( !this.isHidden ) { + this.emitEvent('reveal'); + } +}; + +/** + * get style property use for hide/reveal transition end + * @param {String} styleProperty - hiddenStyle/visibleStyle + * @returns {String} + */ +proto.getHideRevealTransitionEndProperty = function( styleProperty ) { + var optionStyle = this.layout.options[ styleProperty ]; + // use opacity + if ( optionStyle.opacity ) { + return 'opacity'; + } + // get first property + for ( var prop in optionStyle ) { + return prop; + } +}; + +proto.hide = function() { + // set flag + this.isHidden = true; + // remove display: none + this.css({ display: '' }); + + var options = this.layout.options; + + var onTransitionEnd = {}; + var transitionEndProperty = this.getHideRevealTransitionEndProperty('hiddenStyle'); + onTransitionEnd[ transitionEndProperty ] = this.onHideTransitionEnd; + + this.transition({ + from: options.visibleStyle, + to: options.hiddenStyle, + // keep hidden stuff hidden + isCleaning: true, + onTransitionEnd: onTransitionEnd + }); +}; + +proto.onHideTransitionEnd = function() { + // check if still hidden + // during transition, item may have been un-hidden + if ( this.isHidden ) { + this.css({ display: 'none' }); + this.emitEvent('hide'); + } +}; + +proto.destroy = function() { + this.css({ + position: '', + left: '', + right: '', + top: '', + bottom: '', + transition: '', + transform: '' + }); +}; + +return Item; + +})); + +/*! + * Outlayer v2.1.1 + * the brains and guts of a layout library + * MIT license + */ + +( function( window, factory ) { + 'use strict'; + // universal module definition + /* jshint strict: false */ /* globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD - RequireJS + define( 'outlayer/outlayer',[ + 'ev-emitter/ev-emitter', + 'get-size/get-size', + 'fizzy-ui-utils/utils', + './item' + ], + function( EvEmitter, getSize, utils, Item ) { + return factory( window, EvEmitter, getSize, utils, Item); + } + ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS - Browserify, Webpack + module.exports = factory( + window, + require('ev-emitter'), + require('get-size'), + require('fizzy-ui-utils'), + require('./item') + ); + } else { + // browser global + window.Outlayer = factory( + window, + window.EvEmitter, + window.getSize, + window.fizzyUIUtils, + window.Outlayer.Item + ); + } + +}( window, function factory( window, EvEmitter, getSize, utils, Item ) { +'use strict'; + +// ----- vars ----- // + +var console = window.console; +var jQuery = window.jQuery; +var noop = function() {}; + +// -------------------------- Outlayer -------------------------- // + +// globally unique identifiers +var GUID = 0; +// internal store of all Outlayer intances +var instances = {}; + + +/** + * @param {Element, String} element + * @param {Object} options + * @constructor + */ +function Outlayer( element, options ) { + var queryElement = utils.getQueryElement( element ); + if ( !queryElement ) { + if ( console ) { + console.error( 'Bad element for ' + this.constructor.namespace + + ': ' + ( queryElement || element ) ); + } + return; + } + this.element = queryElement; + // add jQuery + if ( jQuery ) { + this.$element = jQuery( this.element ); + } + + // options + this.options = utils.extend( {}, this.constructor.defaults ); + this.option( options ); + + // add id for Outlayer.getFromElement + var id = ++GUID; + this.element.outlayerGUID = id; // expando + instances[ id ] = this; // associate via id + + // kick it off + this._create(); + + var isInitLayout = this._getOption('initLayout'); + if ( isInitLayout ) { + this.layout(); + } +} + +// settings are for internal use only +Outlayer.namespace = 'outlayer'; +Outlayer.Item = Item; + +// default options +Outlayer.defaults = { + containerStyle: { + position: 'relative' + }, + initLayout: true, + originLeft: true, + originTop: true, + resize: true, + resizeContainer: true, + // item options + transitionDuration: '0.4s', + hiddenStyle: { + opacity: 0, + transform: 'scale(0.001)' + }, + visibleStyle: { + opacity: 1, + transform: 'scale(1)' + } +}; + +var proto = Outlayer.prototype; +// inherit EvEmitter +utils.extend( proto, EvEmitter.prototype ); + +/** + * set options + * @param {Object} opts + */ +proto.option = function( opts ) { + utils.extend( this.options, opts ); +}; + +/** + * get backwards compatible option value, check old name + */ +proto._getOption = function( option ) { + var oldOption = this.constructor.compatOptions[ option ]; + return oldOption && this.options[ oldOption ] !== undefined ? + this.options[ oldOption ] : this.options[ option ]; +}; + +Outlayer.compatOptions = { + // currentName: oldName + initLayout: 'isInitLayout', + horizontal: 'isHorizontal', + layoutInstant: 'isLayoutInstant', + originLeft: 'isOriginLeft', + originTop: 'isOriginTop', + resize: 'isResizeBound', + resizeContainer: 'isResizingContainer' +}; + +proto._create = function() { + // get items from children + this.reloadItems(); + // elements that affect layout, but are not laid out + this.stamps = []; + this.stamp( this.options.stamp ); + // set container style + utils.extend( this.element.style, this.options.containerStyle ); + + // bind resize method + var canBindResize = this._getOption('resize'); + if ( canBindResize ) { + this.bindResize(); + } +}; + +// goes through all children again and gets bricks in proper order +proto.reloadItems = function() { + // collection of item elements + this.items = this._itemize( this.element.children ); +}; + + +/** + * turn elements into Outlayer.Items to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - collection of new Outlayer Items + */ +proto._itemize = function( elems ) { + + var itemElems = this._filterFindItemElements( elems ); + var Item = this.constructor.Item; + + // create new Outlayer Items for collection + var items = []; + for ( var i=0; i < itemElems.length; i++ ) { + var elem = itemElems[i]; + var item = new Item( elem, this ); + items.push( item ); + } + + return items; +}; + +/** + * get item elements to be used in layout + * @param {Array or NodeList or HTMLElement} elems + * @returns {Array} items - item elements + */ +proto._filterFindItemElements = function( elems ) { + return utils.filterFindElements( elems, this.options.itemSelector ); +}; + +/** + * getter method for getting item elements + * @returns {Array} elems - collection of item elements + */ +proto.getItemElements = function() { + return this.items.map( function( item ) { + return item.element; + }); +}; + +// ----- init & layout ----- // + +/** + * lays out all items + */ +proto.layout = function() { + this._resetLayout(); + this._manageStamps(); + + // don't animate first layout + var layoutInstant = this._getOption('layoutInstant'); + var isInstant = layoutInstant !== undefined ? + layoutInstant : !this._isLayoutInited; + this.layoutItems( this.items, isInstant ); + + // flag for initalized + this._isLayoutInited = true; +}; + +// _init is alias for layout +proto._init = proto.layout; + +/** + * logic before any new layout + */ +proto._resetLayout = function() { + this.getSize(); +}; + + +proto.getSize = function() { + this.size = getSize( this.element ); +}; + +/** + * get measurement from option, for columnWidth, rowHeight, gutter + * if option is String -> get element from selector string, & get size of element + * if option is Element -> get size of element + * else use option as a number + * + * @param {String} measurement + * @param {String} size - width or height + * @private + */ +proto._getMeasurement = function( measurement, size ) { + var option = this.options[ measurement ]; + var elem; + if ( !option ) { + // default to 0 + this[ measurement ] = 0; + } else { + // use option as an element + if ( typeof option == 'string' ) { + elem = this.element.querySelector( option ); + } else if ( option instanceof HTMLElement ) { + elem = option; + } + // use size of element, if element + this[ measurement ] = elem ? getSize( elem )[ size ] : option; + } +}; + +/** + * layout a collection of item elements + * @api public + */ +proto.layoutItems = function( items, isInstant ) { + items = this._getItemsForLayout( items ); + + this._layoutItems( items, isInstant ); + + this._postLayout(); +}; + +/** + * get the items to be laid out + * you may want to skip over some items + * @param {Array} items + * @returns {Array} items + */ +proto._getItemsForLayout = function( items ) { + return items.filter( function( item ) { + return !item.isIgnored; + }); +}; + +/** + * layout items + * @param {Array} items + * @param {Boolean} isInstant + */ +proto._layoutItems = function( items, isInstant ) { + this._emitCompleteOnItems( 'layout', items ); + + if ( !items || !items.length ) { + // no items, emit event with empty array + return; + } + + var queue = []; + + items.forEach( function( item ) { + // get x/y object from method + var position = this._getItemLayoutPosition( item ); + // enqueue + position.item = item; + position.isInstant = isInstant || item.isLayoutInstant; + queue.push( position ); + }, this ); + + this._processLayoutQueue( queue ); +}; + +/** + * get item layout position + * @param {Outlayer.Item} item + * @returns {Object} x and y position + */ +proto._getItemLayoutPosition = function( /* item */ ) { + return { + x: 0, + y: 0 + }; +}; + +/** + * iterate over array and position each item + * Reason being - separating this logic prevents 'layout invalidation' + * thx @paul_irish + * @param {Array} queue + */ +proto._processLayoutQueue = function( queue ) { + this.updateStagger(); + queue.forEach( function( obj, i ) { + this._positionItem( obj.item, obj.x, obj.y, obj.isInstant, i ); + }, this ); +}; + +// set stagger from option in milliseconds number +proto.updateStagger = function() { + var stagger = this.options.stagger; + if ( stagger === null || stagger === undefined ) { + this.stagger = 0; + return; + } + this.stagger = getMilliseconds( stagger ); + return this.stagger; +}; + +/** + * Sets position of item in DOM + * @param {Outlayer.Item} item + * @param {Number} x - horizontal position + * @param {Number} y - vertical position + * @param {Boolean} isInstant - disables transitions + */ +proto._positionItem = function( item, x, y, isInstant, i ) { + if ( isInstant ) { + // if not transition, just set CSS + item.goTo( x, y ); + } else { + item.stagger( i * this.stagger ); + item.moveTo( x, y ); + } +}; + +/** + * Any logic you want to do after each layout, + * i.e. size the container + */ +proto._postLayout = function() { + this.resizeContainer(); +}; + +proto.resizeContainer = function() { + var isResizingContainer = this._getOption('resizeContainer'); + if ( !isResizingContainer ) { + return; + } + var size = this._getContainerSize(); + if ( size ) { + this._setContainerMeasure( size.width, true ); + this._setContainerMeasure( size.height, false ); + } +}; + +/** + * Sets width or height of container if returned + * @returns {Object} size + * @param {Number} width + * @param {Number} height + */ +proto._getContainerSize = noop; + +/** + * @param {Number} measure - size of width or height + * @param {Boolean} isWidth + */ +proto._setContainerMeasure = function( measure, isWidth ) { + if ( measure === undefined ) { + return; + } + + var elemSize = this.size; + // add padding and border width if border box + if ( elemSize.isBorderBox ) { + measure += isWidth ? elemSize.paddingLeft + elemSize.paddingRight + + elemSize.borderLeftWidth + elemSize.borderRightWidth : + elemSize.paddingBottom + elemSize.paddingTop + + elemSize.borderTopWidth + elemSize.borderBottomWidth; + } + + measure = Math.max( measure, 0 ); + this.element.style[ isWidth ? 'width' : 'height' ] = measure + 'px'; +}; + +/** + * emit eventComplete on a collection of items events + * @param {String} eventName + * @param {Array} items - Outlayer.Items + */ +proto._emitCompleteOnItems = function( eventName, items ) { + var _this = this; + function onComplete() { + _this.dispatchEvent( eventName + 'Complete', null, [ items ] ); + } + + var count = items.length; + if ( !items || !count ) { + onComplete(); + return; + } + + var doneCount = 0; + function tick() { + doneCount++; + if ( doneCount == count ) { + onComplete(); + } + } + + // bind callback + items.forEach( function( item ) { + item.once( eventName, tick ); + }); +}; + +/** + * emits events via EvEmitter and jQuery events + * @param {String} type - name of event + * @param {Event} event - original event + * @param {Array} args - extra arguments + */ +proto.dispatchEvent = function( type, event, args ) { + // add original event to arguments + var emitArgs = event ? [ event ].concat( args ) : args; + this.emitEvent( type, emitArgs ); + + if ( jQuery ) { + // set this.$element + this.$element = this.$element || jQuery( this.element ); + if ( event ) { + // create jQuery event + var $event = jQuery.Event( event ); + $event.type = type; + this.$element.trigger( $event, args ); + } else { + // just trigger with type if no event available + this.$element.trigger( type, args ); + } + } +}; + +// -------------------------- ignore & stamps -------------------------- // + + +/** + * keep item in collection, but do not lay it out + * ignored items do not get skipped in layout + * @param {Element} elem + */ +proto.ignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + item.isIgnored = true; + } +}; + +/** + * return item to layout collection + * @param {Element} elem + */ +proto.unignore = function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + delete item.isIgnored; + } +}; + +/** + * adds elements to stamps + * @param {NodeList, Array, Element, or String} elems + */ +proto.stamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ) { + return; + } + + this.stamps = this.stamps.concat( elems ); + // ignore + elems.forEach( this.ignore, this ); +}; + +/** + * removes elements to stamps + * @param {NodeList, Array, or Element} elems + */ +proto.unstamp = function( elems ) { + elems = this._find( elems ); + if ( !elems ){ + return; + } + + elems.forEach( function( elem ) { + // filter out removed stamp elements + utils.removeFrom( this.stamps, elem ); + this.unignore( elem ); + }, this ); +}; + +/** + * finds child elements + * @param {NodeList, Array, Element, or String} elems + * @returns {Array} elems + */ +proto._find = function( elems ) { + if ( !elems ) { + return; + } + // if string, use argument as selector string + if ( typeof elems == 'string' ) { + elems = this.element.querySelectorAll( elems ); + } + elems = utils.makeArray( elems ); + return elems; +}; + +proto._manageStamps = function() { + if ( !this.stamps || !this.stamps.length ) { + return; + } + + this._getBoundingRect(); + + this.stamps.forEach( this._manageStamp, this ); +}; + +// update boundingLeft / Top +proto._getBoundingRect = function() { + // get bounding rect for container element + var boundingRect = this.element.getBoundingClientRect(); + var size = this.size; + this._boundingRect = { + left: boundingRect.left + size.paddingLeft + size.borderLeftWidth, + top: boundingRect.top + size.paddingTop + size.borderTopWidth, + right: boundingRect.right - ( size.paddingRight + size.borderRightWidth ), + bottom: boundingRect.bottom - ( size.paddingBottom + size.borderBottomWidth ) + }; +}; + +/** + * @param {Element} stamp +**/ +proto._manageStamp = noop; + +/** + * get x/y position of element relative to container element + * @param {Element} elem + * @returns {Object} offset - has left, top, right, bottom + */ +proto._getElementOffset = function( elem ) { + var boundingRect = elem.getBoundingClientRect(); + var thisRect = this._boundingRect; + var size = getSize( elem ); + var offset = { + left: boundingRect.left - thisRect.left - size.marginLeft, + top: boundingRect.top - thisRect.top - size.marginTop, + right: thisRect.right - boundingRect.right - size.marginRight, + bottom: thisRect.bottom - boundingRect.bottom - size.marginBottom + }; + return offset; +}; + +// -------------------------- resize -------------------------- // + +// enable event handlers for listeners +// i.e. resize -> onresize +proto.handleEvent = utils.handleEvent; + +/** + * Bind layout to window resizing + */ +proto.bindResize = function() { + window.addEventListener( 'resize', this ); + this.isResizeBound = true; +}; + +/** + * Unbind layout to window resizing + */ +proto.unbindResize = function() { + window.removeEventListener( 'resize', this ); + this.isResizeBound = false; +}; + +proto.onresize = function() { + this.resize(); +}; + +utils.debounceMethod( Outlayer, 'onresize', 100 ); + +proto.resize = function() { + // don't trigger if size did not change + // or if resize was unbound. See #9 + if ( !this.isResizeBound || !this.needsResizeLayout() ) { + return; + } + + this.layout(); +}; + +/** + * check if layout is needed post layout + * @returns Boolean + */ +proto.needsResizeLayout = function() { + var size = getSize( this.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.size && size; + return hasSizes && size.innerWidth !== this.size.innerWidth; +}; + +// -------------------------- methods -------------------------- // + +/** + * add items to Outlayer instance + * @param {Array or NodeList or Element} elems + * @returns {Array} items - Outlayer.Items +**/ +proto.addItems = function( elems ) { + var items = this._itemize( elems ); + // add items to collection + if ( items.length ) { + this.items = this.items.concat( items ); + } + return items; +}; + +/** + * Layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ +proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // layout and reveal just the new items + this.layoutItems( items, true ); + this.reveal( items ); +}; + +/** + * Layout prepended elements + * @param {Array or NodeList or Element} elems + */ +proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // add items to beginning of collection + var previousItems = this.items.slice(0); + this.items = items.concat( previousItems ); + // start new layout + this._resetLayout(); + this._manageStamps(); + // layout new stuff without transition + this.layoutItems( items, true ); + this.reveal( items ); + // layout previous items + this.layoutItems( previousItems ); +}; + +/** + * reveal a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.reveal = function( items ) { + this._emitCompleteOnItems( 'reveal', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.reveal(); + }); +}; + +/** + * hide a collection of items + * @param {Array of Outlayer.Items} items + */ +proto.hide = function( items ) { + this._emitCompleteOnItems( 'hide', items ); + if ( !items || !items.length ) { + return; + } + var stagger = this.updateStagger(); + items.forEach( function( item, i ) { + item.stagger( i * stagger ); + item.hide(); + }); +}; + +/** + * reveal item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.revealItemElements = function( elems ) { + var items = this.getItems( elems ); + this.reveal( items ); +}; + +/** + * hide item elements + * @param {Array}, {Element}, {NodeList} items + */ +proto.hideItemElements = function( elems ) { + var items = this.getItems( elems ); + this.hide( items ); +}; + +/** + * get Outlayer.Item, given an Element + * @param {Element} elem + * @param {Function} callback + * @returns {Outlayer.Item} item + */ +proto.getItem = function( elem ) { + // loop through items to get the one that matches + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + if ( item.element == elem ) { + // return item + return item; + } + } +}; + +/** + * get collection of Outlayer.Items, given Elements + * @param {Array} elems + * @returns {Array} items - Outlayer.Items + */ +proto.getItems = function( elems ) { + elems = utils.makeArray( elems ); + var items = []; + elems.forEach( function( elem ) { + var item = this.getItem( elem ); + if ( item ) { + items.push( item ); + } + }, this ); + + return items; +}; + +/** + * remove element(s) from instance and DOM + * @param {Array or NodeList or Element} elems + */ +proto.remove = function( elems ) { + var removeItems = this.getItems( elems ); + + this._emitCompleteOnItems( 'remove', removeItems ); + + // bail if no items to remove + if ( !removeItems || !removeItems.length ) { + return; + } + + removeItems.forEach( function( item ) { + item.remove(); + // remove item from collection + utils.removeFrom( this.items, item ); + }, this ); +}; + +// ----- destroy ----- // + +// remove and disable Outlayer instance +proto.destroy = function() { + // clean up dynamic styles + var style = this.element.style; + style.height = ''; + style.position = ''; + style.width = ''; + // destroy items + this.items.forEach( function( item ) { + item.destroy(); + }); + + this.unbindResize(); + + var id = this.element.outlayerGUID; + delete instances[ id ]; // remove reference to instance by id + delete this.element.outlayerGUID; + // remove data for jQuery + if ( jQuery ) { + jQuery.removeData( this.element, this.constructor.namespace ); + } + +}; + +// -------------------------- data -------------------------- // + +/** + * get Outlayer instance from element + * @param {Element} elem + * @returns {Outlayer} + */ +Outlayer.data = function( elem ) { + elem = utils.getQueryElement( elem ); + var id = elem && elem.outlayerGUID; + return id && instances[ id ]; +}; + + +// -------------------------- create Outlayer class -------------------------- // + +/** + * create a layout class + * @param {String} namespace + */ +Outlayer.create = function( namespace, options ) { + // sub-class Outlayer + var Layout = subclass( Outlayer ); + // apply new options and compatOptions + Layout.defaults = utils.extend( {}, Outlayer.defaults ); + utils.extend( Layout.defaults, options ); + Layout.compatOptions = utils.extend( {}, Outlayer.compatOptions ); + + Layout.namespace = namespace; + + Layout.data = Outlayer.data; + + // sub-class Item + Layout.Item = subclass( Item ); + + // -------------------------- declarative -------------------------- // + + utils.htmlInit( Layout, namespace ); + + // -------------------------- jQuery bridge -------------------------- // + + // make into jQuery plugin + if ( jQuery && jQuery.bridget ) { + jQuery.bridget( namespace, Layout ); + } + + return Layout; +}; + +function subclass( Parent ) { + function SubClass() { + Parent.apply( this, arguments ); + } + + SubClass.prototype = Object.create( Parent.prototype ); + SubClass.prototype.constructor = SubClass; + + return SubClass; +} + +// ----- helpers ----- // + +// how many milliseconds are in each unit +var msUnits = { + ms: 1, + s: 1000 +}; + +// munge time-like parameter into millisecond number +// '0.4s' -> 40 +function getMilliseconds( time ) { + if ( typeof time == 'number' ) { + return time; + } + var matches = time.match( /(^\d*\.?\d*)(\w*)/ ); + var num = matches && matches[1]; + var unit = matches && matches[2]; + if ( !num.length ) { + return 0; + } + num = parseFloat( num ); + var mult = msUnits[ unit ] || 1; + return num * mult; +} + +// ----- fin ----- // + +// back in global +Outlayer.Item = Item; + +return Outlayer; + +})); + +/** + * Isotope Item +**/ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope-layout/js/item',[ + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.Item = factory( + window.Outlayer + ); + } + +}( window, function factory( Outlayer ) { +'use strict'; + +// -------------------------- Item -------------------------- // + +// sub-class Outlayer Item +function Item() { + Outlayer.Item.apply( this, arguments ); +} + +var proto = Item.prototype = Object.create( Outlayer.Item.prototype ); + +var _create = proto._create; +proto._create = function() { + // assign id, used for original-order sorting + this.id = this.layout.itemGUID++; + _create.call( this ); + this.sortData = {}; +}; + +proto.updateSortData = function() { + if ( this.isIgnored ) { + return; + } + // default sorters + this.sortData.id = this.id; + // for backward compatibility + this.sortData['original-order'] = this.id; + this.sortData.random = Math.random(); + // go thru getSortData obj and apply the sorters + var getSortData = this.layout.options.getSortData; + var sorters = this.layout._sorters; + for ( var key in getSortData ) { + var sorter = sorters[ key ]; + this.sortData[ key ] = sorter( this.element, this ); + } +}; + +var _destroy = proto.destroy; +proto.destroy = function() { + // call super + _destroy.apply( this, arguments ); + // reset display, #741 + this.css({ + display: '' + }); +}; + +return Item; + +})); + +/** + * Isotope LayoutMode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope-layout/js/layout-mode',[ + 'get-size/get-size', + 'outlayer/outlayer' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('get-size'), + require('outlayer') + ); + } else { + // browser global + window.Isotope = window.Isotope || {}; + window.Isotope.LayoutMode = factory( + window.getSize, + window.Outlayer + ); + } + +}( window, function factory( getSize, Outlayer ) { + 'use strict'; + + // layout mode class + function LayoutMode( isotope ) { + this.isotope = isotope; + // link properties + if ( isotope ) { + this.options = isotope.options[ this.namespace ]; + this.element = isotope.element; + this.items = isotope.filteredItems; + this.size = isotope.size; + } + } + + var proto = LayoutMode.prototype; + + /** + * some methods should just defer to default Outlayer method + * and reference the Isotope instance as `this` + **/ + var facadeMethods = [ + '_resetLayout', + '_getItemLayoutPosition', + '_manageStamp', + '_getContainerSize', + '_getElementOffset', + 'needsResizeLayout', + '_getOption' + ]; + + facadeMethods.forEach( function( methodName ) { + proto[ methodName ] = function() { + return Outlayer.prototype[ methodName ].apply( this.isotope, arguments ); + }; + }); + + // ----- ----- // + + // for horizontal layout modes, check vertical size + proto.needsVerticalResizeLayout = function() { + // don't trigger if size did not change + var size = getSize( this.isotope.element ); + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var hasSizes = this.isotope.size && size; + return hasSizes && size.innerHeight != this.isotope.size.innerHeight; + }; + + // ----- measurements ----- // + + proto._getMeasurement = function() { + this.isotope._getMeasurement.apply( this, arguments ); + }; + + proto.getColumnWidth = function() { + this.getSegmentSize( 'column', 'Width' ); + }; + + proto.getRowHeight = function() { + this.getSegmentSize( 'row', 'Height' ); + }; + + /** + * get columnWidth or rowHeight + * segment: 'column' or 'row' + * size 'Width' or 'Height' + **/ + proto.getSegmentSize = function( segment, size ) { + var segmentName = segment + size; + var outerSize = 'outer' + size; + // columnWidth / outerWidth // rowHeight / outerHeight + this._getMeasurement( segmentName, outerSize ); + // got rowHeight or columnWidth, we can chill + if ( this[ segmentName ] ) { + return; + } + // fall back to item of first element + var firstItemSize = this.getFirstItemSize(); + this[ segmentName ] = firstItemSize && firstItemSize[ outerSize ] || + // or size of container + this.isotope.size[ 'inner' + size ]; + }; + + proto.getFirstItemSize = function() { + var firstItem = this.isotope.filteredItems[0]; + return firstItem && firstItem.element && getSize( firstItem.element ); + }; + + // ----- methods that should reference isotope ----- // + + proto.layout = function() { + this.isotope.layout.apply( this.isotope, arguments ); + }; + + proto.getSize = function() { + this.isotope.getSize(); + this.size = this.isotope.size; + }; + + // -------------------------- create -------------------------- // + + LayoutMode.modes = {}; + + LayoutMode.create = function( namespace, options ) { + + function Mode() { + LayoutMode.apply( this, arguments ); + } + + Mode.prototype = Object.create( proto ); + Mode.prototype.constructor = Mode; + + // default options + if ( options ) { + Mode.options = options; + } + + Mode.prototype.namespace = namespace; + // register in Isotope + LayoutMode.modes[ namespace ] = Mode; + + return Mode; + }; + + return LayoutMode; + +})); + +/*! + * Masonry v4.2.1 + * Cascading grid layout library + * https://masonry.desandro.com + * MIT License + * by David DeSandro + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'masonry-layout/masonry',[ + 'outlayer/outlayer', + 'get-size/get-size' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('outlayer'), + require('get-size') + ); + } else { + // browser global + window.Masonry = factory( + window.Outlayer, + window.getSize + ); + } + +}( window, function factory( Outlayer, getSize ) { + + + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var Masonry = Outlayer.create('masonry'); + // isFitWidth -> fitWidth + Masonry.compatOptions.fitWidth = 'isFitWidth'; + + var proto = Masonry.prototype; + + proto._resetLayout = function() { + this.getSize(); + this._getMeasurement( 'columnWidth', 'outerWidth' ); + this._getMeasurement( 'gutter', 'outerWidth' ); + this.measureColumns(); + + // reset column Y + this.colYs = []; + for ( var i=0; i < this.cols; i++ ) { + this.colYs.push( 0 ); + } + + this.maxY = 0; + this.horizontalColIndex = 0; + }; + + proto.measureColumns = function() { + this.getContainerWidth(); + // if columnWidth is 0, default to outerWidth of first item + if ( !this.columnWidth ) { + var firstItem = this.items[0]; + var firstItemElem = firstItem && firstItem.element; + // columnWidth fall back to item of first element + this.columnWidth = firstItemElem && getSize( firstItemElem ).outerWidth || + // if first elem has no width, default to size of container + this.containerWidth; + } + + var columnWidth = this.columnWidth += this.gutter; + + // calculate columns + var containerWidth = this.containerWidth + this.gutter; + var cols = containerWidth / columnWidth; + // fix rounding errors, typically with gutters + var excess = columnWidth - containerWidth % columnWidth; + // if overshoot is less than a pixel, round up, otherwise floor it + var mathMethod = excess && excess < 1 ? 'round' : 'floor'; + cols = Math[ mathMethod ]( cols ); + this.cols = Math.max( cols, 1 ); + }; + + proto.getContainerWidth = function() { + // container is parent if fit width + var isFitWidth = this._getOption('fitWidth'); + var container = isFitWidth ? this.element.parentNode : this.element; + // check that this.size and size are there + // IE8 triggers resize on body size change, so they might not be + var size = getSize( container ); + this.containerWidth = size && size.innerWidth; + }; + + proto._getItemLayoutPosition = function( item ) { + item.getSize(); + // how many columns does this brick span + var remainder = item.size.outerWidth % this.columnWidth; + var mathMethod = remainder && remainder < 1 ? 'round' : 'ceil'; + // round if off by 1 pixel, otherwise use ceil + var colSpan = Math[ mathMethod ]( item.size.outerWidth / this.columnWidth ); + colSpan = Math.min( colSpan, this.cols ); + // use horizontal or top column position + var colPosMethod = this.options.horizontalOrder ? + '_getHorizontalColPosition' : '_getTopColPosition'; + var colPosition = this[ colPosMethod ]( colSpan, item ); + // position the brick + var position = { + x: this.columnWidth * colPosition.col, + y: colPosition.y + }; + // apply setHeight to necessary columns + var setHeight = colPosition.y + item.size.outerHeight; + var setMax = colSpan + colPosition.col; + for ( var i = colPosition.col; i < setMax; i++ ) { + this.colYs[i] = setHeight; + } + + return position; + }; + + proto._getTopColPosition = function( colSpan ) { + var colGroup = this._getTopColGroup( colSpan ); + // get the minimum Y value from the columns + var minimumY = Math.min.apply( Math, colGroup ); + + return { + col: colGroup.indexOf( minimumY ), + y: minimumY, + }; + }; + + /** + * @param {Number} colSpan - number of columns the element spans + * @returns {Array} colGroup + */ + proto._getTopColGroup = function( colSpan ) { + if ( colSpan < 2 ) { + // if brick spans only one column, use all the column Ys + return this.colYs; + } + + var colGroup = []; + // how many different places could this brick fit horizontally + var groupCount = this.cols + 1 - colSpan; + // for each group potential horizontal position + for ( var i = 0; i < groupCount; i++ ) { + colGroup[i] = this._getColGroupY( i, colSpan ); + } + return colGroup; + }; + + proto._getColGroupY = function( col, colSpan ) { + if ( colSpan < 2 ) { + return this.colYs[ col ]; + } + // make an array of colY values for that one group + var groupColYs = this.colYs.slice( col, col + colSpan ); + // and get the max value of the array + return Math.max.apply( Math, groupColYs ); + }; + + // get column position based on horizontal index. #873 + proto._getHorizontalColPosition = function( colSpan, item ) { + var col = this.horizontalColIndex % this.cols; + var isOver = colSpan > 1 && col + colSpan > this.cols; + // shift to next row if item can't fit on current row + col = isOver ? 0 : col; + // don't let zero-size items take up space + var hasSize = item.size.outerWidth && item.size.outerHeight; + this.horizontalColIndex = hasSize ? col + colSpan : this.horizontalColIndex; + + return { + col: col, + y: this._getColGroupY( col, colSpan ), + }; + }; + + proto._manageStamp = function( stamp ) { + var stampSize = getSize( stamp ); + var offset = this._getElementOffset( stamp ); + // get the columns that this stamp affects + var isOriginLeft = this._getOption('originLeft'); + var firstX = isOriginLeft ? offset.left : offset.right; + var lastX = firstX + stampSize.outerWidth; + var firstCol = Math.floor( firstX / this.columnWidth ); + firstCol = Math.max( 0, firstCol ); + var lastCol = Math.floor( lastX / this.columnWidth ); + // lastCol should not go over if multiple of columnWidth #425 + lastCol -= lastX % this.columnWidth ? 0 : 1; + lastCol = Math.min( this.cols - 1, lastCol ); + // set colYs to bottom of the stamp + + var isOriginTop = this._getOption('originTop'); + var stampMaxY = ( isOriginTop ? offset.top : offset.bottom ) + + stampSize.outerHeight; + for ( var i = firstCol; i <= lastCol; i++ ) { + this.colYs[i] = Math.max( stampMaxY, this.colYs[i] ); + } + }; + + proto._getContainerSize = function() { + this.maxY = Math.max.apply( Math, this.colYs ); + var size = { + height: this.maxY + }; + + if ( this._getOption('fitWidth') ) { + size.width = this._getContainerFitWidth(); + } + + return size; + }; + + proto._getContainerFitWidth = function() { + var unusedCols = 0; + // count unused columns + var i = this.cols; + while ( --i ) { + if ( this.colYs[i] !== 0 ) { + break; + } + unusedCols++; + } + // fit container to columns that have been used + return ( this.cols - unusedCols ) * this.columnWidth - this.gutter; + }; + + proto.needsResizeLayout = function() { + var previousWidth = this.containerWidth; + this.getContainerWidth(); + return previousWidth != this.containerWidth; + }; + + return Masonry; + +})); + +/*! + * Masonry layout mode + * sub-classes Masonry + * https://masonry.desandro.com + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope-layout/js/layout-modes/masonry',[ + '../layout-mode', + 'masonry-layout/masonry' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode'), + require('masonry-layout') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode, + window.Masonry + ); + } + +}( window, function factory( LayoutMode, Masonry ) { +'use strict'; + +// -------------------------- masonryDefinition -------------------------- // + + // create an Outlayer layout class + var MasonryMode = LayoutMode.create('masonry'); + + var proto = MasonryMode.prototype; + + var keepModeMethods = { + _getElementOffset: true, + layout: true, + _getMeasurement: true + }; + + // inherit Masonry prototype + for ( var method in Masonry.prototype ) { + // do not inherit mode methods + if ( !keepModeMethods[ method ] ) { + proto[ method ] = Masonry.prototype[ method ]; + } + } + + var measureColumns = proto.measureColumns; + proto.measureColumns = function() { + // set items, used if measuring first item + this.items = this.isotope.filteredItems; + measureColumns.call( this ); + }; + + // point to mode options for fitWidth + var _getOption = proto._getOption; + proto._getOption = function( option ) { + if ( option == 'fitWidth' ) { + return this.options.isFitWidth !== undefined ? + this.options.isFitWidth : this.options.fitWidth; + } + return _getOption.apply( this.isotope, arguments ); + }; + + return MasonryMode; + +})); + +/** + * fitRows layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope-layout/js/layout-modes/fit-rows',[ + '../layout-mode' + ], + factory ); + } else if ( typeof exports == 'object' ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var FitRows = LayoutMode.create('fitRows'); + +var proto = FitRows.prototype; + +proto._resetLayout = function() { + this.x = 0; + this.y = 0; + this.maxY = 0; + this._getMeasurement( 'gutter', 'outerWidth' ); +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + + var itemWidth = item.size.outerWidth + this.gutter; + // if this element cannot fit in the current row + var containerWidth = this.isotope.size.innerWidth + this.gutter; + if ( this.x !== 0 && itemWidth + this.x > containerWidth ) { + this.x = 0; + this.y = this.maxY; + } + + var position = { + x: this.x, + y: this.y + }; + + this.maxY = Math.max( this.maxY, this.y + item.size.outerHeight ); + this.x += itemWidth; + + return position; +}; + +proto._getContainerSize = function() { + return { height: this.maxY }; +}; + +return FitRows; + +})); + +/** + * vertical layout mode + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( 'isotope-layout/js/layout-modes/vertical',[ + '../layout-mode' + ], + factory ); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + require('../layout-mode') + ); + } else { + // browser global + factory( + window.Isotope.LayoutMode + ); + } + +}( window, function factory( LayoutMode ) { +'use strict'; + +var Vertical = LayoutMode.create( 'vertical', { + horizontalAlignment: 0 +}); + +var proto = Vertical.prototype; + +proto._resetLayout = function() { + this.y = 0; +}; + +proto._getItemLayoutPosition = function( item ) { + item.getSize(); + var x = ( this.isotope.size.innerWidth - item.size.outerWidth ) * + this.options.horizontalAlignment; + var y = this.y; + this.y += item.size.outerHeight; + return { x: x, y: y }; +}; + +proto._getContainerSize = function() { + return { height: this.y }; +}; + +return Vertical; + +})); + +/*! + * Isotope v3.0.6 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * https://isotope.metafizzy.co + * Copyright 2010-2018 Metafizzy + */ + +( function( window, factory ) { + // universal module definition + /* jshint strict: false */ /*globals define, module, require */ + if ( typeof define == 'function' && define.amd ) { + // AMD + define( [ + 'outlayer/outlayer', + 'get-size/get-size', + 'desandro-matches-selector/matches-selector', + 'fizzy-ui-utils/utils', + 'isotope-layout/js/item', + 'isotope-layout/js/layout-mode', + // include default layout modes + 'isotope-layout/js/layout-modes/masonry', + 'isotope-layout/js/layout-modes/fit-rows', + 'isotope-layout/js/layout-modes/vertical' + ], + function( Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ) { + return factory( window, Outlayer, getSize, matchesSelector, utils, Item, LayoutMode ); + }); + } else if ( typeof module == 'object' && module.exports ) { + // CommonJS + module.exports = factory( + window, + require('outlayer'), + require('get-size'), + require('desandro-matches-selector'), + require('fizzy-ui-utils'), + require('isotope-layout/js/item'), + require('isotope-layout/js/layout-mode'), + // include default layout modes + require('isotope-layout/js/layout-modes/masonry'), + require('isotope-layout/js/layout-modes/fit-rows'), + require('isotope-layout/js/layout-modes/vertical') + ); + } else { + // browser global + window.Isotope = factory( + window, + window.Outlayer, + window.getSize, + window.matchesSelector, + window.fizzyUIUtils, + window.Isotope.Item, + window.Isotope.LayoutMode + ); + } + +}( window, function factory( window, Outlayer, getSize, matchesSelector, utils, + Item, LayoutMode ) { + + + +// -------------------------- vars -------------------------- // + +var jQuery = window.jQuery; + +// -------------------------- helpers -------------------------- // + +var trim = String.prototype.trim ? + function( str ) { + return str.trim(); + } : + function( str ) { + return str.replace( /^\s+|\s+$/g, '' ); + }; + +// -------------------------- isotopeDefinition -------------------------- // + + // create an Outlayer layout class + var Isotope = Outlayer.create( 'isotope', { + layoutMode: 'masonry', + isJQueryFiltering: true, + sortAscending: true + }); + + Isotope.Item = Item; + Isotope.LayoutMode = LayoutMode; + + var proto = Isotope.prototype; + + proto._create = function() { + this.itemGUID = 0; + // functions that sort items + this._sorters = {}; + this._getSorters(); + // call super + Outlayer.prototype._create.call( this ); + + // create layout modes + this.modes = {}; + // start filteredItems with all items + this.filteredItems = this.items; + // keep of track of sortBys + this.sortHistory = [ 'original-order' ]; + // create from registered layout modes + for ( var name in LayoutMode.modes ) { + this._initLayoutMode( name ); + } + }; + + proto.reloadItems = function() { + // reset item ID counter + this.itemGUID = 0; + // call super + Outlayer.prototype.reloadItems.call( this ); + }; + + proto._itemize = function() { + var items = Outlayer.prototype._itemize.apply( this, arguments ); + // assign ID for original-order + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + item.id = this.itemGUID++; + } + this._updateItemsSortData( items ); + return items; + }; + + + // -------------------------- layout -------------------------- // + + proto._initLayoutMode = function( name ) { + var Mode = LayoutMode.modes[ name ]; + // set mode options + // HACK extend initial options, back-fill in default options + var initialOpts = this.options[ name ] || {}; + this.options[ name ] = Mode.options ? + utils.extend( Mode.options, initialOpts ) : initialOpts; + // init layout mode instance + this.modes[ name ] = new Mode( this ); + }; + + + proto.layout = function() { + // if first time doing layout, do all magic + if ( !this._isLayoutInited && this._getOption('initLayout') ) { + this.arrange(); + return; + } + this._layout(); + }; + + // private method to be used in layout() & magic() + proto._layout = function() { + // don't animate first layout + var isInstant = this._getIsInstant(); + // layout flow + this._resetLayout(); + this._manageStamps(); + this.layoutItems( this.filteredItems, isInstant ); + + // flag for initalized + this._isLayoutInited = true; + }; + + // filter + sort + layout + proto.arrange = function( opts ) { + // set any options pass + this.option( opts ); + this._getIsInstant(); + // filter, sort, and layout + + // filter + var filtered = this._filter( this.items ); + this.filteredItems = filtered.matches; + + this._bindArrangeComplete(); + + if ( this._isInstant ) { + this._noTransition( this._hideReveal, [ filtered ] ); + } else { + this._hideReveal( filtered ); + } + + this._sort(); + this._layout(); + }; + // alias to _init for main plugin method + proto._init = proto.arrange; + + proto._hideReveal = function( filtered ) { + this.reveal( filtered.needReveal ); + this.hide( filtered.needHide ); + }; + + // HACK + // Don't animate/transition first layout + // Or don't animate/transition other layouts + proto._getIsInstant = function() { + var isLayoutInstant = this._getOption('layoutInstant'); + var isInstant = isLayoutInstant !== undefined ? isLayoutInstant : + !this._isLayoutInited; + this._isInstant = isInstant; + return isInstant; + }; + + // listen for layoutComplete, hideComplete and revealComplete + // to trigger arrangeComplete + proto._bindArrangeComplete = function() { + // listen for 3 events to trigger arrangeComplete + var isLayoutComplete, isHideComplete, isRevealComplete; + var _this = this; + function arrangeParallelCallback() { + if ( isLayoutComplete && isHideComplete && isRevealComplete ) { + _this.dispatchEvent( 'arrangeComplete', null, [ _this.filteredItems ] ); + } + } + this.once( 'layoutComplete', function() { + isLayoutComplete = true; + arrangeParallelCallback(); + }); + this.once( 'hideComplete', function() { + isHideComplete = true; + arrangeParallelCallback(); + }); + this.once( 'revealComplete', function() { + isRevealComplete = true; + arrangeParallelCallback(); + }); + }; + + // -------------------------- filter -------------------------- // + + proto._filter = function( items ) { + var filter = this.options.filter; + filter = filter || '*'; + var matches = []; + var hiddenMatched = []; + var visibleUnmatched = []; + + var test = this._getFilterTest( filter ); + + // test each item + for ( var i=0; i < items.length; i++ ) { + var item = items[i]; + if ( item.isIgnored ) { + continue; + } + // add item to either matched or unmatched group + var isMatched = test( item ); + // item.isFilterMatched = isMatched; + // add to matches if its a match + if ( isMatched ) { + matches.push( item ); + } + // add to additional group if item needs to be hidden or revealed + if ( isMatched && item.isHidden ) { + hiddenMatched.push( item ); + } else if ( !isMatched && !item.isHidden ) { + visibleUnmatched.push( item ); + } + } + + // return collections of items to be manipulated + return { + matches: matches, + needReveal: hiddenMatched, + needHide: visibleUnmatched + }; + }; + + // get a jQuery, function, or a matchesSelector test given the filter + proto._getFilterTest = function( filter ) { + if ( jQuery && this.options.isJQueryFiltering ) { + // use jQuery + return function( item ) { + return jQuery( item.element ).is( filter ); + }; + } + if ( typeof filter == 'function' ) { + // use filter as function + return function( item ) { + return filter( item.element ); + }; + } + // default, use filter as selector string + return function( item ) { + return matchesSelector( item.element, filter ); + }; + }; + + // -------------------------- sorting -------------------------- // + + /** + * @params {Array} elems + * @public + */ + proto.updateSortData = function( elems ) { + // get items + var items; + if ( elems ) { + elems = utils.makeArray( elems ); + items = this.getItems( elems ); + } else { + // update all items if no elems provided + items = this.items; + } + + this._getSorters(); + this._updateItemsSortData( items ); + }; + + proto._getSorters = function() { + var getSortData = this.options.getSortData; + for ( var key in getSortData ) { + var sorter = getSortData[ key ]; + this._sorters[ key ] = mungeSorter( sorter ); + } + }; + + /** + * @params {Array} items - of Isotope.Items + * @private + */ + proto._updateItemsSortData = function( items ) { + // do not update if no items + var len = items && items.length; + + for ( var i=0; len && i < len; i++ ) { + var item = items[i]; + item.updateSortData(); + } + }; + + // ----- munge sorter ----- // + + // encapsulate this, as we just need mungeSorter + // other functions in here are just for munging + var mungeSorter = ( function() { + // add a magic layer to sorters for convienent shorthands + // `.foo-bar` will use the text of .foo-bar querySelector + // `[foo-bar]` will use attribute + // you can also add parser + // `.foo-bar parseInt` will parse that as a number + function mungeSorter( sorter ) { + // if not a string, return function or whatever it is + if ( typeof sorter != 'string' ) { + return sorter; + } + // parse the sorter string + var args = trim( sorter ).split(' '); + var query = args[0]; + // check if query looks like [an-attribute] + var attrMatch = query.match( /^\[(.+)\]$/ ); + var attr = attrMatch && attrMatch[1]; + var getValue = getValueGetter( attr, query ); + // use second argument as a parser + var parser = Isotope.sortDataParsers[ args[1] ]; + // parse the value, if there was a parser + sorter = parser ? function( elem ) { + return elem && parser( getValue( elem ) ); + } : + // otherwise just return value + function( elem ) { + return elem && getValue( elem ); + }; + + return sorter; + } + + // get an attribute getter, or get text of the querySelector + function getValueGetter( attr, query ) { + // if query looks like [foo-bar], get attribute + if ( attr ) { + return function getAttribute( elem ) { + return elem.getAttribute( attr ); + }; + } + + // otherwise, assume its a querySelector, and get its text + return function getChildText( elem ) { + var child = elem.querySelector( query ); + return child && child.textContent; + }; + } + + return mungeSorter; + })(); + + // parsers used in getSortData shortcut strings + Isotope.sortDataParsers = { + 'parseInt': function( val ) { + return parseInt( val, 10 ); + }, + 'parseFloat': function( val ) { + return parseFloat( val ); + } + }; + + // ----- sort method ----- // + + // sort filteredItem order + proto._sort = function() { + if ( !this.options.sortBy ) { + return; + } + // keep track of sortBy History + var sortBys = utils.makeArray( this.options.sortBy ); + if ( !this._getIsSameSortBy( sortBys ) ) { + // concat all sortBy and sortHistory, add to front, oldest goes in last + this.sortHistory = sortBys.concat( this.sortHistory ); + } + // sort magic + var itemSorter = getItemSorter( this.sortHistory, this.options.sortAscending ); + this.filteredItems.sort( itemSorter ); + }; + + // check if sortBys is same as start of sortHistory + proto._getIsSameSortBy = function( sortBys ) { + for ( var i=0; i < sortBys.length; i++ ) { + if ( sortBys[i] != this.sortHistory[i] ) { + return false; + } + } + return true; + }; + + // returns a function used for sorting + function getItemSorter( sortBys, sortAsc ) { + return function sorter( itemA, itemB ) { + // cycle through all sortKeys + for ( var i = 0; i < sortBys.length; i++ ) { + var sortBy = sortBys[i]; + var a = itemA.sortData[ sortBy ]; + var b = itemB.sortData[ sortBy ]; + if ( a > b || a < b ) { + // if sortAsc is an object, use the value given the sortBy key + var isAscending = sortAsc[ sortBy ] !== undefined ? sortAsc[ sortBy ] : sortAsc; + var direction = isAscending ? 1 : -1; + return ( a > b ? 1 : -1 ) * direction; + } + } + return 0; + }; + } + + // -------------------------- methods -------------------------- // + + // get layout mode + proto._mode = function() { + var layoutMode = this.options.layoutMode; + var mode = this.modes[ layoutMode ]; + if ( !mode ) { + // TODO console.error + throw new Error( 'No layout mode: ' + layoutMode ); + } + // HACK sync mode's options + // any options set after init for layout mode need to be synced + mode.options = this.options[ layoutMode ]; + return mode; + }; + + proto._resetLayout = function() { + // trigger original reset layout + Outlayer.prototype._resetLayout.call( this ); + this._mode()._resetLayout(); + }; + + proto._getItemLayoutPosition = function( item ) { + return this._mode()._getItemLayoutPosition( item ); + }; + + proto._manageStamp = function( stamp ) { + this._mode()._manageStamp( stamp ); + }; + + proto._getContainerSize = function() { + return this._mode()._getContainerSize(); + }; + + proto.needsResizeLayout = function() { + return this._mode().needsResizeLayout(); + }; + + // -------------------------- adding & removing -------------------------- // + + // HEADS UP overwrites default Outlayer appended + proto.appended = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // add to filteredItems + this.filteredItems = this.filteredItems.concat( filteredItems ); + }; + + // HEADS UP overwrites default Outlayer prepended + proto.prepended = function( elems ) { + var items = this._itemize( elems ); + if ( !items.length ) { + return; + } + // start new layout + this._resetLayout(); + this._manageStamps(); + // filter, layout, reveal new items + var filteredItems = this._filterRevealAdded( items ); + // layout previous items + this.layoutItems( this.filteredItems ); + // add to items and filteredItems + this.filteredItems = filteredItems.concat( this.filteredItems ); + this.items = items.concat( this.items ); + }; + + proto._filterRevealAdded = function( items ) { + var filtered = this._filter( items ); + this.hide( filtered.needHide ); + // reveal all new items + this.reveal( filtered.matches ); + // layout new items, no transition + this.layoutItems( filtered.matches, true ); + return filtered.matches; + }; + + /** + * Filter, sort, and layout newly-appended item elements + * @param {Array or NodeList or Element} elems + */ + proto.insert = function( elems ) { + var items = this.addItems( elems ); + if ( !items.length ) { + return; + } + // append item elements + var i, item; + var len = items.length; + for ( i=0; i < len; i++ ) { + item = items[i]; + this.element.appendChild( item.element ); + } + // filter new stuff + var filteredInsertItems = this._filter( items ).matches; + // set flag + for ( i=0; i < len; i++ ) { + items[i].isLayoutInstant = true; + } + this.arrange(); + // reset flag + for ( i=0; i < len; i++ ) { + delete items[i].isLayoutInstant; + } + this.reveal( filteredInsertItems ); + }; + + var _remove = proto.remove; + proto.remove = function( elems ) { + elems = utils.makeArray( elems ); + var removeItems = this.getItems( elems ); + // do regular thing + _remove.call( this, elems ); + // bail if no items to remove + var len = removeItems && removeItems.length; + // remove elems from filteredItems + for ( var i=0; len && i < len; i++ ) { + var item = removeItems[i]; + // remove item from collection + utils.removeFrom( this.filteredItems, item ); + } + }; + + proto.shuffle = function() { + // update random sortData + for ( var i=0; i < this.items.length; i++ ) { + var item = this.items[i]; + item.sortData.random = Math.random(); + } + this.options.sortBy = 'random'; + this._sort(); + this._layout(); + }; + + /** + * trigger fn without transition + * kind of hacky to have this in the first place + * @param {Function} fn + * @param {Array} args + * @returns ret + * @private + */ + proto._noTransition = function( fn, args ) { + // save transitionDuration before disabling + var transitionDuration = this.options.transitionDuration; + // disable transition + this.options.transitionDuration = 0; + // do it + var returnValue = fn.apply( this, args ); + // re-enable transition for reveal + this.options.transitionDuration = transitionDuration; + return returnValue; + }; + + // ----- helper methods ----- // + + /** + * getter method for getting filtered item elements + * @returns {Array} elems - collection of item elements + */ + proto.getFilteredItemElements = function() { + return this.filteredItems.map( function( item ) { + return item.element; + }); + }; + + // ----- ----- // + + return Isotope; + +})); + diff --git a/src/assets/vendor/isotope-layout/isotope.pkgd.min.js b/src/assets/vendor/isotope-layout/isotope.pkgd.min.js new file mode 100644 index 0000000..7ca671c --- /dev/null +++ b/src/assets/vendor/isotope-layout/isotope.pkgd.min.js @@ -0,0 +1,12 @@ +/*! + * Isotope PACKAGED v3.0.6 + * + * Licensed GPLv3 for open source use + * or Isotope Commercial License for commercial use + * + * https://isotope.metafizzy.co + * Copyright 2010-2018 Metafizzy + */ + +!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,s,a){function u(t,e,o){var n,s="$()."+i+'("'+e+'")';return t.each(function(t,u){var h=a.data(u,i);if(!h)return void r(i+" not initialized. Cannot call methods, i.e. "+s);var d=h[e];if(!d||"_"==e.charAt(0))return void r(s+" is not a valid method");var l=d.apply(h,o);n=void 0===n?l:n}),void 0!==n?n:t}function h(t,e){t.each(function(t,o){var n=a.data(o,i);n?(n.option(e),n._init()):(n=new s(o,e),a.data(o,i,n))})}a=a||e||t.jQuery,a&&(s.prototype.option||(s.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=n.call(arguments,1);return u(this,t,e)}return h(this,t),this},o(a))}function o(t){!t||t&&t.bridget||(t.bridget=i)}var n=Array.prototype.slice,s=t.console,r="undefined"==typeof s?function(){}:function(t){s.error(t)};return o(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},o=i[t]=i[t]||[];return o.indexOf(e)==-1&&o.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},o=i[t]=i[t]||{};return o[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var o=i.indexOf(e);return o!=-1&&i.splice(o,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var o=this._onceEvents&&this._onceEvents[t],n=0;n
`),i.append(r)),r}Object.keys(j).forEach((e=>{Object.keys(j[e]).forEach((t=>{V.prototype[t]=j[e][t]}))})),V.use([function(e){let{swiper:t,on:s,emit:a}=e;const i=r();let n=null,l=null;const o=()=>{t&&!t.destroyed&&t.initialized&&(a("beforeResize"),a("resize"))},d=()=>{t&&!t.destroyed&&t.initialized&&a("orientationchange")};s("init",(()=>{t.params.resizeObserver&&void 0!==i.ResizeObserver?t&&!t.destroyed&&t.initialized&&(n=new ResizeObserver((e=>{l=i.requestAnimationFrame((()=>{const{width:s,height:a}=t;let i=s,r=a;e.forEach((e=>{let{contentBoxSize:s,contentRect:a,target:n}=e;n&&n!==t.el||(i=a?a.width:(s[0]||s).inlineSize,r=a?a.height:(s[0]||s).blockSize)})),i===s&&r===a||o()}))})),n.observe(t.el)):(i.addEventListener("resize",o),i.addEventListener("orientationchange",d))})),s("destroy",(()=>{l&&i.cancelAnimationFrame(l),n&&n.unobserve&&t.el&&(n.unobserve(t.el),n=null),i.removeEventListener("resize",o),i.removeEventListener("orientationchange",d)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=[],l=r(),o=function(e,t){void 0===t&&(t={});const s=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(1===e.length)return void i("observerUpdate",e[0]);const t=function(){i("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(t):l.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),n.push(s)};s({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(t.params.observer){if(t.params.observeParents){const e=t.$el.parents();for(let t=0;t{n.forEach((e=>{e.disconnect()})),n.splice(0,n.length)}))}]);const re=[function(e){let t,{swiper:s,extendParams:a,on:i,emit:r}=e;function n(e,t){const a=s.params.virtual;if(a.cache&&s.virtual.cache[t])return s.virtual.cache[t];const i=a.renderSlide?d(a.renderSlide.call(s,e,t)):d(`
${e}
`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",t),a.cache&&(s.virtual.cache[t]=i),i}function l(e){const{slidesPerView:t,slidesPerGroup:a,centeredSlides:i}=s.params,{addSlidesBefore:l,addSlidesAfter:o}=s.params.virtual,{from:d,to:c,slides:p,slidesGrid:u,offset:h}=s.virtual;s.params.cssMode||s.updateActiveIndex();const m=s.activeIndex||0;let f,g,v;f=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",i?(g=Math.floor(t/2)+a+o,v=Math.floor(t/2)+a+l):(g=t+(a-1)+o,v=a+l);const w=Math.max((m||0)-v,0),b=Math.min((m||0)+g,p.length-1),x=(s.slidesGrid[w]||0)-(s.slidesGrid[0]||0);function y(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),s.lazy&&s.params.lazy.enabled&&s.lazy.load(),r("virtualUpdate")}if(Object.assign(s.virtual,{from:w,to:b,offset:x,slidesGrid:s.slidesGrid}),d===w&&c===b&&!e)return s.slidesGrid!==u&&x!==h&&s.slides.css(f,`${x}px`),s.updateProgress(),void r("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:x,from:w,to:b,slides:function(){const e=[];for(let t=w;t<=b;t+=1)e.push(p[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?y():r("virtualUpdate"));const E=[],C=[];if(e)s.$wrapperEl.find(`.${s.params.slideClass}`).remove();else for(let e=d;e<=c;e+=1)(eb)&&s.$wrapperEl.find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`).remove();for(let t=0;t=w&&t<=b&&(void 0===c||e?C.push(t):(t>c&&C.push(t),t{s.$wrapperEl.append(n(p[e],e))})),E.sort(((e,t)=>t-e)).forEach((e=>{s.$wrapperEl.prepend(n(p[e],e))})),s.$wrapperEl.children(".swiper-slide").css(f,`${x}px`),y()}a({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),s.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},i("beforeInit",(()=>{s.params.virtual.enabled&&(s.virtual.slides=s.params.virtual.slides,s.classNames.push(`${s.params.containerModifierClass}virtual`),s.params.watchSlidesProgress=!0,s.originalParams.watchSlidesProgress=!0,s.params.initialSlide||l())})),i("setTranslate",(()=>{s.params.virtual.enabled&&(s.params.cssMode&&!s._immediateVirtual?(clearTimeout(t),t=setTimeout((()=>{l()}),100)):l())})),i("init update resize",(()=>{s.params.virtual.enabled&&s.params.cssMode&&v(s.wrapperEl,"--swiper-virtual-size",`${s.virtualSize}px`)})),Object.assign(s.virtual,{appendSlide:function(e){if("object"==typeof e&&"length"in e)for(let t=0;t{const a=e[s],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),t[parseInt(s,10)+i]=a})),s.virtual.cache=t}l(!0),s.slideTo(a,0)},removeSlide:function(e){if(null==e)return;let t=s.activeIndex;if(Array.isArray(e))for(let a=e.length-1;a>=0;a-=1)s.virtual.slides.splice(e[a],1),s.params.virtual.cache&&delete s.virtual.cache[e[a]],e[a]0&&0===t.$el.parents(`.${t.params.slideActiveClass}`).length)return;const a=t.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=o.innerWidth,l=o.innerHeight,d=t.$el.offset();s&&(d.left-=t.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let t=0;t=0&&s[0]<=n&&s[1]>=0&&s[1]<=l){if(0===s[0]&&0===s[1])continue;e=!0}}if(!e)return}t.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&t.slideNext(),((d||p)&&!s||(c||u)&&s)&&t.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&t.slideNext(),(d||h)&&t.slidePrev()),n("keyPress",i)}}function p(){t.keyboard.enabled||(d(l).on("keydown",c),t.keyboard.enabled=!0)}function u(){t.keyboard.enabled&&(d(l).off("keydown",c),t.keyboard.enabled=!1)}t.keyboard={enabled:!1},s({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),i("init",(()=>{t.params.keyboard.enabled&&p()})),i("destroy",(()=>{t.keyboard.enabled&&u()})),Object.assign(t.keyboard,{enable:p,disable:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();let l;s({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),t.mousewheel={enabled:!1};let o,c=u();const h=[];function m(){t.enabled&&(t.mouseEntered=!0)}function f(){t.enabled&&(t.mouseEntered=!1)}function g(e){return!(t.params.mousewheel.thresholdDelta&&e.delta=6&&u()-c<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),i("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),i("scroll",e.raw)),c=(new n.Date).getTime(),!1)))}function v(e){let s=e,a=!0;if(!t.enabled)return;const r=t.params.mousewheel;t.params.cssMode&&s.preventDefault();let n=t.$el;if("container"!==t.params.mousewheel.eventsTarget&&(n=d(t.params.mousewheel.eventsTarget)),!t.mouseEntered&&!n[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let c=0;const m=t.rtlTranslate?-1:1,f=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(t.isHorizontal()){if(!(Math.abs(f.pixelX)>Math.abs(f.pixelY)))return!0;c=-f.pixelX*m}else{if(!(Math.abs(f.pixelY)>Math.abs(f.pixelX)))return!0;c=-f.pixelY}else c=Math.abs(f.pixelX)>Math.abs(f.pixelY)?-f.pixelX*m:-f.pixelY;if(0===c)return!0;r.invert&&(c=-c);let v=t.getTranslate()+c*r.sensitivity;if(v>=t.minTranslate()&&(v=t.minTranslate()),v<=t.maxTranslate()&&(v=t.maxTranslate()),a=!!t.params.loop||!(v===t.minTranslate()||v===t.maxTranslate()),a&&t.params.nested&&s.stopPropagation(),t.params.freeMode&&t.params.freeMode.enabled){const e={time:u(),delta:Math.abs(c),direction:Math.sign(c)},a=o&&e.time=t.minTranslate()&&(n=t.minTranslate()),n<=t.maxTranslate()&&(n=t.maxTranslate()),t.setTransition(0),t.setTranslate(n),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses(),(!d&&t.isBeginning||!u&&t.isEnd)&&t.updateSlidesClasses(),t.params.freeMode.sticky){clearTimeout(l),l=void 0,h.length>=15&&h.shift();const s=h.length?h[h.length-1]:void 0,a=h[0];if(h.push(e),s&&(e.delta>s.delta||e.direction!==s.direction))h.splice(0);else if(h.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const s=c>0?.8:.2;o=e,h.splice(0),l=p((()=>{t.slideToClosest(t.params.speed,!0,void 0,s)}),0)}l||(l=p((()=>{o=e,h.splice(0),t.slideToClosest(t.params.speed,!0,void 0,.5)}),500))}if(a||i("scroll",s),t.params.autoplay&&t.params.autoplayDisableOnInteraction&&t.autoplay.stop(),n===t.minTranslate()||n===t.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(c),direction:Math.sign(c),raw:e};h.length>=2&&h.shift();const a=h.length?h[h.length-1]:void 0;if(h.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&g(s):g(s),function(e){const s=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&s.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function w(e){let s=t.$el;"container"!==t.params.mousewheel.eventsTarget&&(s=d(t.params.mousewheel.eventsTarget)),s[e]("mouseenter",m),s[e]("mouseleave",f),s[e]("wheel",v)}function b(){return t.params.cssMode?(t.wrapperEl.removeEventListener("wheel",v),!0):!t.mousewheel.enabled&&(w("on"),t.mousewheel.enabled=!0,!0)}function x(){return t.params.cssMode?(t.wrapperEl.addEventListener(event,v),!0):!!t.mousewheel.enabled&&(w("off"),t.mousewheel.enabled=!1,!0)}a("init",(()=>{!t.params.mousewheel.enabled&&t.params.cssMode&&x(),t.params.mousewheel.enabled&&b()})),a("destroy",(()=>{t.params.cssMode&&b(),t.mousewheel.enabled&&x()})),Object.assign(t.mousewheel,{enable:b,disable:x})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;function r(e){let s;return e&&(s=d(e),t.params.uniqueNavElements&&"string"==typeof e&&s.length>1&&1===t.$el.find(e).length&&(s=t.$el.find(e))),s}function n(e,s){const a=t.params.navigation;e&&e.length>0&&(e[s?"addClass":"removeClass"](a.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=s),t.params.watchOverflow&&t.enabled&&e[t.isLocked?"addClass":"removeClass"](a.lockClass))}function l(){if(t.params.loop)return;const{$nextEl:e,$prevEl:s}=t.navigation;n(s,t.isBeginning&&!t.params.rewind),n(e,t.isEnd&&!t.params.rewind)}function o(e){e.preventDefault(),(!t.isBeginning||t.params.loop||t.params.rewind)&&(t.slidePrev(),i("navigationPrev"))}function c(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&(t.slideNext(),i("navigationNext"))}function p(){const e=t.params.navigation;if(t.params.navigation=F(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;const s=r(e.nextEl),a=r(e.prevEl);s&&s.length>0&&s.on("click",c),a&&a.length>0&&a.on("click",o),Object.assign(t.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),t.enabled||(s&&s.addClass(e.lockClass),a&&a.addClass(e.lockClass))}function u(){const{$nextEl:e,$prevEl:s}=t.navigation;e&&e.length&&(e.off("click",c),e.removeClass(t.params.navigation.disabledClass)),s&&s.length&&(s.off("click",o),s.removeClass(t.params.navigation.disabledClass))}s({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock",navigationDisabledClass:"swiper-navigation-disabled"}}),t.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},a("init",(()=>{!1===t.params.navigation.enabled?h():(p(),l())})),a("toEdge fromEdge lock unlock",(()=>{l()})),a("destroy",(()=>{u()})),a("enable disable",(()=>{const{$nextEl:e,$prevEl:s}=t.navigation;e&&e[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass),s&&s[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass)})),a("click",((e,s)=>{const{$nextEl:a,$prevEl:r}=t.navigation,n=s.target;if(t.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(a)){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===n||t.pagination.el.contains(n)))return;let e;a?e=a.hasClass(t.params.navigation.hiddenClass):r&&(e=r.hasClass(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),a&&a.toggleClass(t.params.navigation.hiddenClass),r&&r.toggleClass(t.params.navigation.hiddenClass)}}));const h=()=>{t.$el.addClass(t.params.navigation.navigationDisabledClass),u()};Object.assign(t.navigation,{enable:()=>{t.$el.removeClass(t.params.navigation.navigationDisabledClass),p(),l()},disable:h,update:l,init:p,destroy:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const r="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`,paginationDisabledClass:`${r}-disabled`}}),t.pagination={el:null,$el:null,bullets:[]};let l=0;function o(){return!t.params.pagination.el||!t.pagination.el||!t.pagination.$el||0===t.pagination.$el.length}function c(e,s){const{bulletActiveClass:a}=t.params.pagination;e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function p(){const e=t.rtl,s=t.params.pagination;if(o())return;const a=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,r=t.pagination.$el;let p;const u=t.params.loop?Math.ceil((a-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(p=Math.ceil((t.activeIndex-t.loopedSlides)/t.params.slidesPerGroup),p>a-1-2*t.loopedSlides&&(p-=a-2*t.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==t.params.paginationType&&(p=u+p)):p=void 0!==t.snapIndex?t.snapIndex:t.activeIndex||0,"bullets"===s.type&&t.pagination.bullets&&t.pagination.bullets.length>0){const a=t.pagination.bullets;let i,o,u;if(s.dynamicBullets&&(n=a.eq(0)[t.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(t.isHorizontal()?"width":"height",n*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==t.previousIndex&&(l+=p-(t.previousIndex-t.loopedSlides||0),l>s.dynamicMainBullets-1?l=s.dynamicMainBullets-1:l<0&&(l=0)),i=Math.max(p-l,0),o=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(o+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),r.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=o&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&c(t,"prev"),a===o&&c(t,"next"))}));else{const e=a.eq(p),r=e.index();if(e.addClass(s.bulletActiveClass),s.dynamicBullets){const e=a.eq(i),n=a.eq(o);for(let e=i;e<=o;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(t.params.loop)if(r>=a.length){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else c(e,"prev"),c(n,"next");else c(e,"prev"),c(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),r=(n*i-n)/2-u*n,l=e?"right":"left";a.css(t.isHorizontal()?l:"top",`${r}px`)}}if("fraction"===s.type&&(r.find(U(s.currentClass)).text(s.formatFractionCurrent(p+1)),r.find(U(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let e;e=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,n=1;"horizontal"===e?i=a:n=a,r.find(U(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`).transition(t.params.speed)}"custom"===s.type&&s.renderCustom?(r.html(s.renderCustom(t,p+1,u)),i("paginationRender",r[0])):i("paginationUpdate",r[0]),t.params.watchOverflow&&t.enabled&&r[t.isLocked?"addClass":"removeClass"](s.lockClass)}function u(){const e=t.params.pagination;if(o())return;const s=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,a=t.pagination.$el;let r="";if("bullets"===e.type){let i=t.params.loop?Math.ceil((s-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;t.params.freeMode&&t.params.freeMode.enabled&&!t.params.loop&&i>s&&(i=s);for(let s=0;s`;a.html(r),t.pagination.bullets=a.find(U(e.bulletClass))}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(t,e.currentClass,e.totalClass):` / `,a.html(r)),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(t,e.progressbarFillClass):``,a.html(r)),"custom"!==e.type&&i("paginationRender",t.pagination.$el[0])}function h(){t.params.pagination=F(t,t.originalParams.pagination,t.params.pagination,{el:"swiper-pagination"});const e=t.params.pagination;if(!e.el)return;let s=d(e.el);0!==s.length&&(t.params.uniqueNavElements&&"string"==typeof e.el&&s.length>1&&(s=t.$el.find(e.el),s.length>1&&(s=s.filter((e=>d(e).parents(".swiper")[0]===t.el)))),"bullets"===e.type&&e.clickable&&s.addClass(e.clickableClass),s.addClass(e.modifierClass+e.type),s.addClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(s.addClass(`${e.modifierClass}${e.type}-dynamic`),l=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&s.addClass(e.progressbarOppositeClass),e.clickable&&s.on("click",U(e.bulletClass),(function(e){e.preventDefault();let s=d(this).index()*t.params.slidesPerGroup;t.params.loop&&(s+=t.loopedSlides),t.slideTo(s)})),Object.assign(t.pagination,{$el:s,el:s[0]}),t.enabled||s.addClass(e.lockClass))}function m(){const e=t.params.pagination;if(o())return;const s=t.pagination.$el;s.removeClass(e.hiddenClass),s.removeClass(e.modifierClass+e.type),s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),t.pagination.bullets&&t.pagination.bullets.removeClass&&t.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&s.off("click",U(e.bulletClass))}a("init",(()=>{!1===t.params.pagination.enabled?f():(h(),u(),p())})),a("activeIndexChange",(()=>{(t.params.loop||void 0===t.snapIndex)&&p()})),a("snapIndexChange",(()=>{t.params.loop||p()})),a("slidesLengthChange",(()=>{t.params.loop&&(u(),p())})),a("snapGridLengthChange",(()=>{t.params.loop||(u(),p())})),a("destroy",(()=>{m()})),a("enable disable",(()=>{const{$el:e}=t.pagination;e&&e[t.enabled?"removeClass":"addClass"](t.params.pagination.lockClass)})),a("lock unlock",(()=>{p()})),a("click",((e,s)=>{const a=s.target,{$el:r}=t.pagination;if(t.params.pagination.el&&t.params.pagination.hideOnClick&&r&&r.length>0&&!d(a).hasClass(t.params.pagination.bulletClass)){if(t.navigation&&(t.navigation.nextEl&&a===t.navigation.nextEl||t.navigation.prevEl&&a===t.navigation.prevEl))return;const e=r.hasClass(t.params.pagination.hiddenClass);i(!0===e?"paginationShow":"paginationHide"),r.toggleClass(t.params.pagination.hiddenClass)}}));const f=()=>{t.$el.addClass(t.params.pagination.paginationDisabledClass),t.pagination.$el&&t.pagination.$el.addClass(t.params.pagination.paginationDisabledClass),m()};Object.assign(t.pagination,{enable:()=>{t.$el.removeClass(t.params.pagination.paginationDisabledClass),t.pagination.$el&&t.pagination.$el.removeClass(t.params.pagination.paginationDisabledClass),h(),u(),p()},disable:f,render:u,update:p,init:h,destroy:m})},function(e){let{swiper:t,extendParams:s,on:i,emit:r}=e;const n=a();let l,o,c,u,h=!1,m=null,f=null;function g(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e,rtlTranslate:s,progress:a}=t,{$dragEl:i,$el:r}=e,n=t.params.scrollbar;let l=o,d=(c-o)*a;s?(d=-d,d>0?(l=o-d,d=0):-d+o>c&&(l=c+d)):d<0?(l=o+d,d=0):d+o>c&&(l=c-d),t.isHorizontal()?(i.transform(`translate3d(${d}px, 0, 0)`),i[0].style.width=`${l}px`):(i.transform(`translate3d(0px, ${d}px, 0)`),i[0].style.height=`${l}px`),n.hide&&(clearTimeout(m),r[0].style.opacity=1,m=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function v(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e}=t,{$dragEl:s,$el:a}=e;s[0].style.width="",s[0].style.height="",c=t.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,u=t.size/(t.virtualSize+t.params.slidesOffsetBefore-(t.params.centeredSlides?t.snapGrid[0]:0)),o="auto"===t.params.scrollbar.dragSize?c*u:parseInt(t.params.scrollbar.dragSize,10),t.isHorizontal()?s[0].style.width=`${o}px`:s[0].style.height=`${o}px`,a[0].style.display=u>=1?"none":"",t.params.scrollbar.hide&&(a[0].style.opacity=0),t.params.watchOverflow&&t.enabled&&e.$el[t.isLocked?"addClass":"removeClass"](t.params.scrollbar.lockClass)}function w(e){return t.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY}function b(e){const{scrollbar:s,rtlTranslate:a}=t,{$el:i}=s;let r;r=(w(e)-i.offset()[t.isHorizontal()?"left":"top"]-(null!==l?l:o/2))/(c-o),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const n=t.minTranslate()+(t.maxTranslate()-t.minTranslate())*r;t.updateProgress(n),t.setTranslate(n),t.updateActiveIndex(),t.updateSlidesClasses()}function x(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n,$dragEl:o}=a;h=!0,l=e.target===o[0]||e.target===o?w(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),i.transition(100),o.transition(100),b(e),clearTimeout(f),n.transition(0),s.hide&&n.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),r("scrollbarDragStart",e)}function y(e){const{scrollbar:s,$wrapperEl:a}=t,{$el:i,$dragEl:n}=s;h&&(e.preventDefault?e.preventDefault():e.returnValue=!1,b(e),a.transition(0),i.transition(0),n.transition(0),r("scrollbarDragMove",e))}function E(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n}=a;h&&(h=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),i.transition("")),s.hide&&(clearTimeout(f),f=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),r("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())}function C(e){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:r,support:l}=t,o=s.$el;if(!o)return;const d=o[0],c=!(!l.passiveListener||!r.passiveListeners)&&{passive:!1,capture:!1},p=!(!l.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};if(!d)return;const u="on"===e?"addEventListener":"removeEventListener";l.touch?(d[u](a.start,x,c),d[u](a.move,y,c),d[u](a.end,E,p)):(d[u](i.start,x,c),n[u](i.move,y,c),n[u](i.end,E,p))}function T(){const{scrollbar:e,$el:s}=t;t.params.scrollbar=F(t,t.originalParams.scrollbar,t.params.scrollbar,{el:"swiper-scrollbar"});const a=t.params.scrollbar;if(!a.el)return;let i=d(a.el);t.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el)),i.addClass(t.isHorizontal()?a.horizontalClass:a.verticalClass);let r=i.find(`.${t.params.scrollbar.dragClass}`);0===r.length&&(r=d(`
`),i.append(r)),Object.assign(e,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&t.params.scrollbar.el&&t.scrollbar.el&&C("on"),i&&i[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)}function $(){const e=t.params.scrollbar,s=t.scrollbar.$el;s&&s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass),t.params.scrollbar.el&&t.scrollbar.el&&C("off")}s({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag",scrollbarDisabledClass:"swiper-scrollbar-disabled",horizontalClass:"swiper-scrollbar-horizontal",verticalClass:"swiper-scrollbar-vertical"}}),t.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},i("init",(()=>{!1===t.params.scrollbar.enabled?S():(T(),v(),g())})),i("update resize observerUpdate lock unlock",(()=>{v()})),i("setTranslate",(()=>{g()})),i("setTransition",((e,s)=>{!function(e){t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)}(s)})),i("enable disable",(()=>{const{$el:e}=t.scrollbar;e&&e[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)})),i("destroy",(()=>{$()}));const S=()=>{t.$el.addClass(t.params.scrollbar.scrollbarDisabledClass),t.scrollbar.$el&&t.scrollbar.$el.addClass(t.params.scrollbar.scrollbarDisabledClass),$()};Object.assign(t.scrollbar,{enable:()=>{t.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass),t.scrollbar.$el&&t.scrollbar.$el.removeClass(t.params.scrollbar.scrollbarDisabledClass),T(),v(),g()},disable:S,updateSize:v,setTranslate:g,init:T,destroy:$})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({parallax:{enabled:!1}});const i=(e,s)=>{const{rtl:a}=t,i=d(e),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):t.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},r=()=>{const{$el:e,slides:s,progress:a,snapGrid:r}=t;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,a)})),s.each(((e,s)=>{let n=e.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(n+=Math.ceil(s/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,n)}))}))};a("beforeInit",(()=>{t.params.parallax.enabled&&(t.params.watchSlidesProgress=!0,t.originalParams.watchSlidesProgress=!0)})),a("init",(()=>{t.params.parallax.enabled&&r()})),a("setTranslate",(()=>{t.params.parallax.enabled&&r()})),a("setTransition",((e,s)=>{t.params.parallax.enabled&&function(e){void 0===e&&(e=t.params.speed);const{$el:s}=t;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t=>{const s=d(t);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),s.transition(a)}))}(s)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();s({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l,o,c,p=1,u=!1;const m={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},f={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},g={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let v=1;function w(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function b(e){const s=t.support,a=t.params.zoom;if(o=!1,c=!1,!s.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;o=!0,m.scaleStart=w(e)}m.$slideEl&&m.$slideEl.length||(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`),0===m.$slideEl.length&&(m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`),m.maxRatio=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==m.$imageWrapEl.length)?(m.$imageEl&&m.$imageEl.transition(0),u=!0):m.$imageEl=void 0}function x(e){const s=t.support,a=t.params.zoom,i=t.zoom;if(!s.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;c=!0,m.scaleMove=w(e)}m.$imageEl&&0!==m.$imageEl.length?(s.gestures?i.scale=e.scale*p:i.scale=m.scaleMove/m.scaleStart*p,i.scale>m.maxRatio&&(i.scale=m.maxRatio-1+(i.scale-m.maxRatio+1)**.5),i.scalef.touchesStart.x))return void(f.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(f.minY)===Math.floor(f.startY)&&f.touchesCurrent.yf.touchesStart.y))return void(f.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),f.isMoved=!0,f.currentX=f.touchesCurrent.x-f.touchesStart.x+f.startX,f.currentY=f.touchesCurrent.y-f.touchesStart.y+f.startY,f.currentXf.maxX&&(f.currentX=f.maxX-1+(f.currentX-f.maxX+1)**.8),f.currentYf.maxY&&(f.currentY=f.maxY-1+(f.currentY-f.maxY+1)**.8),g.prevPositionX||(g.prevPositionX=f.touchesCurrent.x),g.prevPositionY||(g.prevPositionY=f.touchesCurrent.y),g.prevTime||(g.prevTime=Date.now()),g.x=(f.touchesCurrent.x-g.prevPositionX)/(Date.now()-g.prevTime)/2,g.y=(f.touchesCurrent.y-g.prevPositionY)/(Date.now()-g.prevTime)/2,Math.abs(f.touchesCurrent.x-g.prevPositionX)<2&&(g.x=0),Math.abs(f.touchesCurrent.y-g.prevPositionY)<2&&(g.y=0),g.prevPositionX=f.touchesCurrent.x,g.prevPositionY=f.touchesCurrent.y,g.prevTime=Date.now(),m.$imageWrapEl.transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}}function C(){const e=t.zoom;m.$slideEl&&t.previousIndex!==t.activeIndex&&(m.$imageEl&&m.$imageEl.transform("translate3d(0,0,0) scale(1)"),m.$imageWrapEl&&m.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,p=1,m.$slideEl=void 0,m.$imageEl=void 0,m.$imageWrapEl=void 0)}function T(e){const s=t.zoom,a=t.params.zoom;if(m.$slideEl||(e&&e.target&&(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`)),m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`)),!m.$imageEl||0===m.$imageEl.length||!m.$imageWrapEl||0===m.$imageWrapEl.length)return;let i,r,l,o,c,u,h,g,v,w,b,x,y,E,C,T,$,S;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),m.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===f.touchesStart.x&&e?(i="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,r="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(i=f.touchesStart.x,r=f.touchesStart.y),s.scale=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,p=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,e?($=m.$slideEl[0].offsetWidth,S=m.$slideEl[0].offsetHeight,l=m.$slideEl.offset().left+n.scrollX,o=m.$slideEl.offset().top+n.scrollY,c=l+$/2-i,u=o+S/2-r,v=m.$imageEl[0].offsetWidth,w=m.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),C=-y,T=-E,h=c*s.scale,g=u*s.scale,hC&&(h=C),gT&&(g=T)):(h=0,g=0),m.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${g}px,0)`),m.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function $(){const e=t.zoom,s=t.params.zoom;m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex),m.$imageEl=m.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${s.containerClass}`)),m.$imageEl&&0!==m.$imageEl.length&&m.$imageWrapEl&&0!==m.$imageWrapEl.length&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,p=1,m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),m.$slideEl.removeClass(`${s.zoomedSlideClass}`),m.$slideEl=void 0)}function S(e){const s=t.zoom;s.scale&&1!==s.scale?$():T(e)}function M(){const e=t.support;return{passiveListener:!("touchstart"!==t.touchEvents.start||!e.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!e.passiveListener||{passive:!1,capture:!0}}}function P(){return`.${t.params.slideClass}`}function k(e){const{passiveListener:s}=M(),a=P();t.$wrapperEl[e]("gesturestart",a,b,s),t.$wrapperEl[e]("gesturechange",a,x,s),t.$wrapperEl[e]("gestureend",a,y,s)}function z(){l||(l=!0,k("on"))}function L(){l&&(l=!1,k("off"))}function O(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const s=t.support,{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.on(t.touchEvents.start,z,a),t.$wrapperEl.on(t.touchEvents.end,L,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.on(t.touchEvents.start,r,b,a),t.$wrapperEl.on(t.touchEvents.move,r,x,i),t.$wrapperEl.on(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.on(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.on(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}function I(){const e=t.zoom;if(!e.enabled)return;const s=t.support;e.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.off(t.touchEvents.start,z,a),t.$wrapperEl.off(t.touchEvents.end,L,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.off(t.touchEvents.start,r,b,a),t.$wrapperEl.off(t.touchEvents.move,r,x,i),t.$wrapperEl.off(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.off(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.off(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}Object.defineProperty(t.zoom,"scale",{get:()=>v,set(e){if(v!==e){const t=m.$imageEl?m.$imageEl[0]:void 0,s=m.$slideEl?m.$slideEl[0]:void 0;i("zoomChange",e,t,s)}v=e}}),a("init",(()=>{t.params.zoom.enabled&&O()})),a("destroy",(()=>{I()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;m.$imageEl&&0!==m.$imageEl.length&&(f.isTouched||(s.android&&e.cancelable&&e.preventDefault(),f.isTouched=!0,f.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(!f.isTouched||!f.isMoved)return f.isTouched=!1,void(f.isMoved=!1);f.isTouched=!1,f.isMoved=!1;let s=300,a=300;const i=g.x*s,r=f.currentX+i,n=g.y*a,l=f.currentY+n;0!==g.x&&(s=Math.abs((r-f.currentX)/g.x)),0!==g.y&&(a=Math.abs((l-f.currentY)/g.y));const o=Math.max(s,a);f.currentX=r,f.currentY=l;const d=f.width*e.scale,c=f.height*e.scale;f.minX=Math.min(m.slideWidth/2-d/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-c/2,0),f.maxY=-f.minY,f.currentX=Math.max(Math.min(f.currentX,f.maxX),f.minX),f.currentY=Math.max(Math.min(f.currentY,f.maxY),f.minY),m.$imageWrapEl.transition(o).transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&S(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&C()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&C()})),Object.assign(t.zoom,{enable:O,disable:I,in:T,out:$,toggle:S})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;s({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),t.lazy={};let n=!1,l=!1;function o(e,s){void 0===s&&(s=!0);const a=t.params.lazy;if(void 0===e)return;if(0===t.slides.length)return;const r=t.virtual&&t.params.virtual.enabled?t.$wrapperEl.children(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`):t.slides.eq(e),n=r.find(`.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})`);!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||n.push(r[0]),0!==n.length&&n.each((e=>{const n=d(e);n.addClass(a.loadingClass);const l=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");t.loadImage(n[0],c||l,p,u,!1,(()=>{if(null!=t&&t&&(!t||t.params)&&!t.destroyed){if(l?(n.css("background-image",`url("${l}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(a.loadedClass).removeClass(a.loadingClass),r.find(`.${a.preloaderClass}`).remove(),t.params.loop&&s){const e=r.attr("data-swiper-slide-index");if(r.hasClass(t.params.slideDuplicateClass)){o(t.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})`).index(),!1)}else{o(t.$wrapperEl.children(`.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`).index(),!1)}}i("lazyImageReady",r[0],n[0]),t.params.autoHeight&&t.updateAutoHeight()}})),i("lazyImageLoad",r[0],n[0])}))}function c(){const{$wrapperEl:e,params:s,slides:a,activeIndex:i}=t,r=t.virtual&&s.virtual.enabled,n=s.lazy;let c=s.slidesPerView;function p(t){if(r){if(e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`).length)return!0}else if(a[t])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),l||(l=!0),t.params.watchSlidesProgress)e.children(`.${s.slideVisibleClass}`).each((e=>{o(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){const e=n.loadPrevNextAmount,t=Math.ceil(c),s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+t;e0&&o(u(t));const a=e.children(`.${s.slidePrevClass}`);a.length>0&&o(u(a))}}function p(){const e=r();if(!t||t.destroyed)return;const s=t.params.lazy.scrollingElement?d(t.params.lazy.scrollingElement):d(e),a=s[0]===e,i=a?e.innerWidth:s[0].offsetWidth,l=a?e.innerHeight:s[0].offsetHeight,o=t.$el.offset(),{rtlTranslate:u}=t;let h=!1;u&&(o.left-=t.$el[0].scrollLeft);const m=[[o.left,o.top],[o.left+t.width,o.top],[o.left,o.top+t.height],[o.left+t.width,o.top+t.height]];for(let e=0;e=0&&t[0]<=i&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==t.touchEvents.start||!t.support.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1};h?(c(),s.off("scroll",p,f)):n||(n=!0,s.on("scroll",p,f))}a("beforeInit",(()=>{t.params.lazy.enabled&&t.params.preloadImages&&(t.params.preloadImages=!1)})),a("init",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("scroll",(()=>{t.params.freeMode&&t.params.freeMode.enabled&&!t.params.freeMode.sticky&&c()})),a("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("transitionStart",(()=>{t.params.lazy.enabled&&(t.params.lazy.loadOnTransitionStart||!t.params.lazy.loadOnTransitionStart&&!l)&&(t.params.lazy.checkInView?p():c())})),a("transitionEnd",(()=>{t.params.lazy.enabled&&!t.params.lazy.loadOnTransitionStart&&(t.params.lazy.checkInView?p():c())})),a("slideChange",(()=>{const{lazy:e,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=t.params;e.enabled&&(s||a&&(i||0===r))&&c()})),a("destroy",(()=>{t.$el&&t.$el.find(`.${t.params.lazy.loadingClass}`).removeClass(t.params.lazy.loadingClass)})),Object.assign(t.lazy,{load:c,loadInSlide:o})},function(e){let{swiper:t,extendParams:s,on:a}=e;function i(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function r(){t.controller.control&&t.controller.spline&&(t.controller.spline=void 0,delete t.controller.spline)}s({controller:{control:void 0,inverse:!1,by:"slide"}}),t.controller={control:void 0},a("beforeInit",(()=>{t.controller.control=t.params.controller.control})),a("update",(()=>{r()})),a("resize",(()=>{r()})),a("observerUpdate",(()=>{r()})),a("setTranslate",((e,s,a)=>{t.controller.control&&t.controller.setTranslate(s,a)})),a("setTransition",((e,s,a)=>{t.controller.control&&t.controller.setTransition(s,a)})),Object.assign(t.controller,{setTranslate:function(e,s){const a=t.controller.control;let r,n;const l=t.constructor;function o(e){const s=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(e){t.controller.spline||(t.controller.spline=t.params.loop?new i(t.slidesGrid,e.slidesGrid):new i(t.snapGrid,e.snapGrid))}(e),n=-t.controller.spline.interpolate(-s)),n&&"container"!==t.params.controller.by||(r=(e.maxTranslate()-e.minTranslate())/(t.maxTranslate()-t.minTranslate()),n=(s-t.minTranslate())*r+e.minTranslate()),t.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,t),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(a))for(let e=0;e{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===t.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r{n(e),"BUTTON"!==e[0].tagName&&(o(e,"button"),e.on("keydown",m)),p(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)},w=()=>{t.a11y.clicked=!0},b=()=>{requestAnimationFrame((()=>{requestAnimationFrame((()=>{t.destroyed||(t.a11y.clicked=!1)}))}))},x=e=>{if(t.a11y.clicked)return;const s=e.target.closest(`.${t.params.slideClass}`);if(!s||!t.slides.includes(s))return;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||e.sourceCapabilities&&e.sourceCapabilities.firesTouchEvents||(t.isHorizontal()?t.el.scrollLeft=0:t.el.scrollTop=0,t.slideTo(t.slides.indexOf(s),0))},y=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&c(d(t.slides),e.itemRoleDescriptionMessage),e.slideRole&&o(d(t.slides),e.slideRole);const s=t.params.loop?t.slides.filter((e=>!e.classList.contains(t.params.slideDuplicateClass))).length:t.slides.length;e.slideLabelMessage&&t.slides.each(((a,i)=>{const r=d(a),n=t.params.loop?parseInt(r.attr("data-swiper-slide-index"),10):i;p(r,e.slideLabelMessage.replace(/\{\{index\}\}/,n+1).replace(/\{\{slidesLength\}\}/,s))}))},E=()=>{const e=t.params.a11y;t.$el.append(i);const s=t.$el;e.containerRoleDescriptionMessage&&c(s,e.containerRoleDescriptionMessage),e.containerMessage&&p(s,e.containerMessage);const a=t.$wrapperEl,r=e.id||a.attr("id")||`swiper-wrapper-${n=16,void 0===n&&(n=16),"x".repeat(n).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}`;var n;const l=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var o;let d,u;o=r,a.attr("id",o),function(e,t){e.attr("aria-live",t)}(a,l),y(),t.navigation&&t.navigation.$nextEl&&(d=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(u=t.navigation.$prevEl),d&&d.length&&v(d,r,e.nextSlideMessage),u&&u.length&&v(u,r,e.prevSlideMessage),g()&&t.pagination.$el.on("keydown",U(t.params.pagination.bulletClass),m),t.$el.on("focus",x,!0),t.$el.on("pointerdown",w,!0),t.$el.on("pointerup",b,!0)};a("beforeInit",(()=>{i=d(``)})),a("afterInit",(()=>{t.params.a11y.enabled&&E()})),a("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&y()})),a("fromEdge toEdge afterInit lock unlock",(()=>{t.params.a11y.enabled&&function(){if(t.params.loop||t.params.rewind||!t.navigation)return;const{$nextEl:e,$prevEl:s}=t.navigation;s&&s.length>0&&(t.isBeginning?(u(s),l(s)):(h(s),n(s))),e&&e.length>0&&(t.isEnd?(u(e),l(e)):(h(e),n(e)))}()})),a("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;f()&&t.pagination.bullets.each((s=>{const a=d(s);t.params.pagination.clickable&&(n(a),t.params.pagination.renderBullet||(o(a,"button"),p(a,e.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))),a.is(`.${t.params.pagination.bulletActiveClass}`)?a.attr("aria-current","true"):a.removeAttr("aria-current")}))}()})),a("destroy",(()=>{t.params.a11y.enabled&&function(){let e,s;i&&i.length>0&&i.remove(),t.navigation&&t.navigation.$nextEl&&(e=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(s=t.navigation.$prevEl),e&&e.off("keydown",m),s&&s.off("keydown",m),g()&&t.pagination.$el.off("keydown",U(t.params.pagination.bulletClass),m),t.$el.off("focus",x,!0),t.$el.off("pointerdown",w,!0),t.$el.off("pointerup",b,!0)}()}))},function(e){let{swiper:t,extendParams:s,on:a}=e;s({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let i=!1,n={};const l=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},d=(e,s)=>{const a=r();if(!i||!t.params.history.enabled)return;let n;n=t.params.url?new URL(t.params.url):a.location;const o=t.slides.eq(s);let d=l(o.attr("data-history"));if(t.params.history.root.length>0){let s=t.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${e}/${d}`}else n.pathname.includes(e)||(d=`${e}/${d}`);t.params.history.keepQuery&&(d+=n.search);const c=a.history.state;c&&c.value===d||(t.params.history.replaceState?a.history.replaceState({value:d},null,d):a.history.pushState({value:d},null,d))},c=(e,s,a)=>{if(s)for(let i=0,r=t.slides.length;i{n=o(t.params.url),c(t.params.speed,n.value,!1)};a("init",(()=>{t.params.history.enabled&&(()=>{const e=r();if(t.params.history){if(!e.history||!e.history.pushState)return t.params.history.enabled=!1,void(t.params.hashNavigation.enabled=!0);i=!0,n=o(t.params.url),(n.key||n.value)&&(c(0,n.value,t.params.runCallbacksOnInit),t.params.history.replaceState||e.addEventListener("popstate",p))}})()})),a("destroy",(()=>{t.params.history.enabled&&(()=>{const e=r();t.params.history.replaceState||e.removeEventListener("popstate",p)})()})),a("transitionEnd _freeModeNoMomentumRelease",(()=>{i&&d(t.params.history.key,t.activeIndex)})),a("slideChange",(()=>{i&&t.params.cssMode&&d(t.params.history.key,t.activeIndex)}))},function(e){let{swiper:t,extendParams:s,emit:i,on:n}=e,l=!1;const o=a(),c=r();s({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const p=()=>{i("hashChange");const e=o.location.hash.replace("#","");if(e!==t.slides.eq(t.activeIndex).attr("data-hash")){const s=t.$wrapperEl.children(`.${t.params.slideClass}[data-hash="${e}"]`).index();if(void 0===s)return;t.slideTo(s)}},u=()=>{if(l&&t.params.hashNavigation.enabled)if(t.params.hashNavigation.replaceState&&c.history&&c.history.replaceState)c.history.replaceState(null,null,`#${t.slides.eq(t.activeIndex).attr("data-hash")}`||""),i("hashSet");else{const e=t.slides.eq(t.activeIndex),s=e.attr("data-hash")||e.attr("data-history");o.location.hash=s||"",i("hashSet")}};n("init",(()=>{t.params.hashNavigation.enabled&&(()=>{if(!t.params.hashNavigation.enabled||t.params.history&&t.params.history.enabled)return;l=!0;const e=o.location.hash.replace("#","");if(e){const s=0;for(let a=0,i=t.slides.length;a{t.params.hashNavigation.enabled&&t.params.hashNavigation.watchState&&d(c).off("hashchange",p)})),n("transitionEnd _freeModeNoMomentumRelease",(()=>{l&&u()})),n("slideChange",(()=>{l&&t.params.cssMode&&u()}))},function(e){let t,{swiper:s,extendParams:i,on:r,emit:n}=e;function l(){if(!s.size)return s.autoplay.running=!1,void(s.autoplay.paused=!1);const e=s.slides.eq(s.activeIndex);let a=s.params.autoplay.delay;e.attr("data-swiper-autoplay")&&(a=e.attr("data-swiper-autoplay")||s.params.autoplay.delay),clearTimeout(t),t=p((()=>{let e;s.params.autoplay.reverseDirection?s.params.loop?(s.loopFix(),e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.isBeginning?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(s.slides.length-1,s.params.speed,!0,!0),n("autoplay")):(e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.params.loop?(s.loopFix(),e=s.slideNext(s.params.speed,!0,!0),n("autoplay")):s.isEnd?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(0,s.params.speed,!0,!0),n("autoplay")):(e=s.slideNext(s.params.speed,!0,!0),n("autoplay")),(s.params.cssMode&&s.autoplay.running||!1===e)&&l()}),a)}function o(){return void 0===t&&(!s.autoplay.running&&(s.autoplay.running=!0,n("autoplayStart"),l(),!0))}function d(){return!!s.autoplay.running&&(void 0!==t&&(t&&(clearTimeout(t),t=void 0),s.autoplay.running=!1,n("autoplayStop"),!0))}function c(e){s.autoplay.running&&(s.autoplay.paused||(t&&clearTimeout(t),s.autoplay.paused=!0,0!==e&&s.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].addEventListener(e,h)})):(s.autoplay.paused=!1,l())))}function u(){const e=a();"hidden"===e.visibilityState&&s.autoplay.running&&c(),"visible"===e.visibilityState&&s.autoplay.paused&&(l(),s.autoplay.paused=!1)}function h(e){s&&!s.destroyed&&s.$wrapperEl&&e.target===s.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)})),s.autoplay.paused=!1,s.autoplay.running?l():d())}function m(){s.params.autoplay.disableOnInteraction?d():(n("autoplayPause"),c()),["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)}))}function f(){s.params.autoplay.disableOnInteraction||(s.autoplay.paused=!1,n("autoplayResume"),l())}s.autoplay={running:!1,paused:!1},i({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),r("init",(()=>{if(s.params.autoplay.enabled){o();a().addEventListener("visibilitychange",u),s.params.autoplay.pauseOnMouseEnter&&(s.$el.on("mouseenter",m),s.$el.on("mouseleave",f))}})),r("beforeTransitionStart",((e,t,a)=>{s.autoplay.running&&(a||!s.params.autoplay.disableOnInteraction?s.autoplay.pause(t):d())})),r("sliderFirstMove",(()=>{s.autoplay.running&&(s.params.autoplay.disableOnInteraction?d():c())})),r("touchEnd",(()=>{s.params.cssMode&&s.autoplay.paused&&!s.params.autoplay.disableOnInteraction&&l()})),r("destroy",(()=>{s.$el.off("mouseenter",m),s.$el.off("mouseleave",f),s.autoplay.running&&d();a().removeEventListener("visibilitychange",u)})),Object.assign(s.autoplay,{pause:c,run:l,start:o,stop:d})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let i=!1,r=!1;function n(){const e=t.thumbs.swiper;if(!e||e.destroyed)return;const s=e.clickedIndex,a=e.clickedSlide;if(a&&d(a).hasClass(t.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=e.params.loop?parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10):s,t.params.loop){let e=t.activeIndex;t.slides.eq(e).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,e=t.activeIndex);const s=t.slides.eq(e).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=t.slides.eq(e).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-e1&&!t.params.centeredSlides&&(i=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(i=1),i=Math.floor(i),s.slides.removeClass(r),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e1?a:o:a-ot.previousIndex?"next":"prev"}else i=t.realIndex,r=i>t.previousIndex?"next":"prev";l&&(i+="next"===r?n:-1*n),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(i)<0&&(s.params.centeredSlides?i=i>o?i-Math.floor(a/2)+1:i+Math.floor(a/2)-1:i>o&&s.params.slidesPerGroup,s.slideTo(i,e?0:void 0))}}t.thumbs={swiper:null},a("beforeInit",(()=>{const{thumbs:e}=t.params;e&&e.swiper&&(l(),o(!0))})),a("slideChange update resize observerUpdate",(()=>{o()})),a("setTransition",((e,s)=>{const a=t.thumbs.swiper;a&&!a.destroyed&&a.setTransition(s)})),a("beforeDestroy",(()=>{const e=t.thumbs.swiper;e&&!e.destroyed&&r&&e.destroy()})),Object.assign(t.thumbs,{init:l,update:o})},function(e){let{swiper:t,extendParams:s,emit:a,once:i}=e;s({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(t,{freeMode:{onTouchStart:function(){const e=t.getTranslate();t.setTranslate(e),t.setTransition(0),t.touchEventsData.velocities.length=0,t.freeMode.onTouchEnd({currentPos:t.rtl?t.translate:-t.translate})},onTouchMove:function(){const{touchEventsData:e,touches:s}=t;0===e.velocities.length&&e.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:e.touchStartTime}),e.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function(e){let{currentPos:s}=e;const{params:r,$wrapperEl:n,rtlTranslate:l,snapGrid:o,touchEventsData:d}=t,c=u()-d.touchStartTime;if(s<-t.minTranslate())t.slideTo(t.activeIndex);else if(s>-t.maxTranslate())t.slides.length1){const e=d.velocities.pop(),s=d.velocities.pop(),a=e.position-s.position,i=e.time-s.time;t.velocity=a/i,t.velocity/=2,Math.abs(t.velocity)150||u()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=r.freeMode.momentumVelocityRatio,d.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;const s=t.velocity*e;let c=t.translate+s;l&&(c=-c);let p,h=!1;const m=20*Math.abs(t.velocity)*r.freeMode.momentumBounceRatio;let f;if(ct.minTranslate())r.freeMode.momentumBounce?(c-t.minTranslate()>m&&(c=t.minTranslate()+m),p=t.minTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.minTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(r.freeMode.sticky){let e;for(let t=0;t-c){e=t;break}c=Math.abs(o[e]-c){t.loopFix()})),0!==t.velocity){if(e=l?Math.abs((-c-t.translate)/t.velocity):Math.abs((c-t.translate)/t.velocity),r.freeMode.sticky){const s=Math.abs((l?-c:c)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s{t&&!t.destroyed&&d.allowMomentumBounce&&(a("momentumBounce"),t.setTransition(r.speed),setTimeout((()=>{t.setTranslate(p),n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(a("_freeModeNoMomentumRelease"),t.updateProgress(c),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(c),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode&&a("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||c>=r.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}}}})},function(e){let t,s,a,{swiper:i,extendParams:r}=e;r({grid:{rows:1,fill:"column"}}),i.grid={initSlides:e=>{const{slidesPerView:r}=i.params,{rows:n,fill:l}=i.params.grid;s=t/n,a=Math.floor(e/n),t=Math.floor(e/n)===e/n?e:Math.ceil(e/n)*n,"auto"!==r&&"row"===l&&(t=Math.max(t,r*n))},updateSlide:(e,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=i.params,{rows:c,fill:p}=i.params.grid;let u,h,m;if("row"===p&&o>1){const s=Math.floor(e/(o*c)),a=e-c*o*s,i=0===s?o:Math.min(Math.ceil((n-s*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+s*o,u=h+m*t/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(e/c),m=e-h*c,(h>a||h===a&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(e/s),h=e-m*s);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(e,s,a)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=i.params,{rows:o}=i.params.grid;if(i.virtualSize=(e+r)*t,i.virtualSize=Math.ceil(i.virtualSize/o)-r,i.$wrapperEl.css({[a("width")]:`${i.virtualSize+r}px`}),n){s.splice(0,s.length);const e=[];for(let t=0;t{const{slides:e}=t,s=t.params.fadeEffect;for(let a=0;a{const{transformEl:s}=t.params.fadeEffect;(s?t.slides.find(s):t.slides).transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}});const i=(e,t,s)=>{let a=s?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),i=s?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===a.length&&(a=d(`
`),e.append(a)),0===i.length&&(i=d(`
`),e.append(i)),a.length&&(a[0].style.opacity=Math.max(-t,0)),i.length&&(i[0].style.opacity=Math.max(t,0))};te({effect:"cube",swiper:t,on:a,setTranslate:()=>{const{$el:e,$wrapperEl:s,slides:a,width:r,height:n,rtlTranslate:l,size:o,browser:c}=t,p=t.params.cubeEffect,u=t.isHorizontal(),h=t.virtual&&t.params.virtual.enabled;let m,f=0;p.shadow&&(u?(m=s.find(".swiper-cube-shadow"),0===m.length&&(m=d('
'),s.append(m)),m.css({height:`${r}px`})):(m=e.find(".swiper-cube-shadow"),0===m.length&&(m=d('
'),e.append(m))));for(let e=0;e-1&&(f=90*s+90*d,l&&(f=90*-s-90*d)),t.transform(v),p.slideShadows&&i(t,d,u)}if(s.css({"-webkit-transform-origin":`50% 50% -${o/2}px`,"transform-origin":`50% 50% -${o/2}px`}),p.shadow)if(u)m.transform(`translate3d(0px, ${r/2+p.shadowOffset}px, ${-r/2}px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})`);else{const e=Math.abs(f)-90*Math.floor(Math.abs(f)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=p.shadowScale,a=p.shadowScale/t,i=p.shadowOffset;m.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-90deg)`)}const g=c.isSafari||c.isWebView?-o/2:0;s.transform(`translate3d(0px,0,${g}px) rotateX(${t.isHorizontal()?0:f}deg) rotateY(${t.isHorizontal()?-f:0}deg)`),s[0].style.setProperty("--swiper-cube-translate-z",`${g}px`)},setTransition:e=>{const{$el:s,slides:a}=t;a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.cubeEffect.shadow&&!t.isHorizontal()&&s.find(".swiper-cube-shadow").transition(e)},recreateShadows:()=>{const e=t.isHorizontal();t.slides.each((t=>{const s=Math.max(Math.min(t.progress,1),-1);i(d(t),s,e)}))},getEffectParams:()=>t.params.cubeEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}});const i=(e,s,a)=>{let i=t.isHorizontal()?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),r=t.isHorizontal()?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===i.length&&(i=ie(a,e,t.isHorizontal()?"left":"top")),0===r.length&&(r=ie(a,e,t.isHorizontal()?"right":"bottom")),i.length&&(i[0].style.opacity=Math.max(-s,0)),r.length&&(r[0].style.opacity=Math.max(s,0))};te({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect;for(let r=0;r{const{transformEl:s}=t.params.flipEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),ae({swiper:t,duration:e,transformEl:s})},recreateShadows:()=>{const e=t.params.flipEffect;t.slides.each((s=>{const a=d(s);let r=a[0].progress;t.params.flipEffect.limitRotation&&(r=Math.max(Math.min(s.progress,1),-1)),i(a,r,e)}))},getEffectParams:()=>t.params.flipEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),te({effect:"coverflow",swiper:t,on:a,setTranslate:()=>{const{width:e,height:s,slides:a,slidesSizesGrid:i}=t,r=t.params.coverflowEffect,n=t.isHorizontal(),l=t.translate,o=n?e/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e0?p:0),s.length&&(s[0].style.opacity=-p>0?-p:0)}}},setTransition:e=>{const{transformEl:s}=t.params.coverflowEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const i=e=>"string"==typeof e?e:`${e}px`;te({effect:"creative",swiper:t,on:a,setTranslate:()=>{const{slides:e,$wrapperEl:s,slidesSizesGrid:a}=t,r=t.params.creativeEffect,{progressMultiplier:n}=r,l=t.params.centeredSlides;if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${e}px))`)}for(let s=0;s0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),a[0].style.zIndex=-Math.abs(Math.round(o))+e.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=a.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=ie(r,a)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=se(r,a);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:e=>{const{transformEl:s}=t.params.creativeEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},perspective:()=>t.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cardsEffect:{slideShadows:!0,transformEl:null,rotate:!0,perSlideRotate:2,perSlideOffset:8}}),te({effect:"cards",swiper:t,on:a,setTranslate:()=>{const{slides:e,activeIndex:s}=t,a=t.params.cardsEffect,{startTranslate:i,isTouched:r}=t.touchEventsData,n=t.translate;for(let l=0;l0&&c<1&&(r||t.params.cssMode)&&n-1&&(r||t.params.cssMode)&&n>i;if(b||x){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!t.isHorizontal()){const e=h;h=u,u=e}const y=c<0?""+(1+(1-f)*c):""+(1-(1-f)*c),E=`\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${a.rotate?g:0}deg)\n scale(${y})\n `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=ie(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+e.length;se(a,o).transform(E)}},setTransition:e=>{const{transformEl:s}=t.params.cardsEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})}];return V.use(re),V})); +//# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/src/assets/vendor/swiper/swiper-bundle.min.js.map b/src/assets/vendor/swiper/swiper-bundle.min.js.map new file mode 100644 index 0000000..6398d24 --- /dev/null +++ b/src/assets/vendor/swiper/swiper-bundle.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"swiper-bundle.min.js","names":["isObject","obj","constructor","Object","extend","target","src","keys","forEach","key","length","ssrDocument","body","addEventListener","removeEventListener","activeElement","blur","nodeName","querySelector","querySelectorAll","getElementById","createEvent","initEvent","createElement","children","childNodes","style","setAttribute","getElementsByTagName","createElementNS","importNode","location","hash","host","hostname","href","origin","pathname","protocol","search","getDocument","doc","document","ssrWindow","navigator","userAgent","history","replaceState","pushState","go","back","CustomEvent","this","getComputedStyle","getPropertyValue","Image","Date","screen","setTimeout","clearTimeout","matchMedia","requestAnimationFrame","callback","cancelAnimationFrame","id","getWindow","win","window","Dom7","Array","items","super","proto","__proto__","defineProperty","get","set","value","makeReactive","arrayFlat","arr","res","el","isArray","push","arrayFilter","prototype","filter","call","$","selector","context","html","trim","indexOf","toCreate","tempParent","innerHTML","i","a","qsa","nodeType","uniqueArray","arrayUnique","fn","Methods","addClass","_len","arguments","classes","_key","classNames","map","c","split","classList","add","removeClass","_len2","_key2","remove","hasClass","_len4","_key4","className","contains","toggleClass","_len3","_key3","toggle","attr","attrs","getAttribute","attrName","removeAttr","removeAttribute","transform","duration","transitionDuration","on","_len5","args","_key5","eventType","targetSelector","listener","capture","handleLiveEvent","e","eventData","dom7EventData","unshift","is","apply","parents","k","handleEvent","undefined","events","j","event","dom7LiveListeners","proxyListener","dom7Listeners","off","_len6","_key6","handlers","handler","dom7proxy","splice","trigger","_len9","_key9","evt","detail","bubbles","cancelable","data","dataIndex","dispatchEvent","dom","fireCallBack","outerWidth","includeMargins","styles","offsetWidth","parseFloat","outerHeight","offsetHeight","offset","box","getBoundingClientRect","clientTop","clientLeft","scrollTop","scrollY","scrollLeft","scrollX","top","left","css","props","prop","each","index","text","textContent","compareWith","matches","webkitMatchesSelector","msMatchesSelector","child","previousSibling","eq","returnIndex","append","newChild","tempDiv","firstChild","appendChild","prepend","insertBefore","next","nextElementSibling","nextAll","nextEls","prev","previousElementSibling","prevAll","prevEls","parent","parentNode","closest","find","foundElements","found","removeChild","nextTick","delay","now","getTranslate","axis","matrix","curTransform","transformMatrix","curStyle","currentStyle","WebKitCSSMatrix","webkitTransform","replace","join","MozTransform","OTransform","MsTransform","msTransform","toString","m41","m42","o","slice","isNode","node","HTMLElement","to","noExtend","nextSource","keysArray","nextIndex","len","nextKey","desc","getOwnPropertyDescriptor","enumerable","__swiper__","setCSSProperty","varName","varValue","setProperty","animateCSSModeScroll","_ref","swiper","targetPosition","side","startPosition","translate","time","startTime","params","speed","wrapperEl","scrollSnapType","cssModeFrameID","dir","isOutOfBound","current","animate","getTime","progress","Math","max","min","easeProgress","cos","PI","currentPosition","scrollTo","overflow","support","deviceCached","browser","getSupport","smoothScroll","documentElement","touch","DocumentTouch","passiveListener","supportsPassive","opts","gestures","calcSupport","getDevice","overrides","_temp","platform","ua","device","ios","android","screenWidth","width","screenHeight","height","match","ipad","ipod","iphone","windows","macos","os","calcDevice","getBrowser","isSafari","toLowerCase","isWebView","test","calcBrowser","methodName","writable","eventsEmitter","priority","self","eventsListeners","destroyed","method","once","onceHandler","__emitterProxy","onAny","eventsAnyListeners","offAny","eventHandler","emit","update","updateSize","$el","clientWidth","clientHeight","isHorizontal","isVertical","parseInt","Number","isNaN","assign","size","updateSlides","getDirectionLabel","property","marginRight","getDirectionPropertyValue","label","$wrapperEl","swiperSize","rtlTranslate","rtl","wrongRTL","isVirtual","virtual","enabled","previousSlidesLength","slides","slideClass","slidesLength","snapGrid","slidesGrid","slidesSizesGrid","offsetBefore","slidesOffsetBefore","offsetAfter","slidesOffsetAfter","previousSnapGridLength","previousSlidesGridLength","spaceBetween","slidePosition","prevSlideSize","virtualSize","marginLeft","marginBottom","marginTop","centeredSlides","cssMode","gridEnabled","grid","rows","slideSize","initSlides","shouldResetSlideSize","slidesPerView","breakpoints","slide","updateSlide","slideStyles","currentTransform","currentWebKitTransform","roundLengths","paddingLeft","paddingRight","boxSizing","floor","swiperSlideSize","abs","slidesPerGroup","slidesPerGroupSkip","effect","setWrapperSize","updateWrapperSize","newSlidesGrid","slidesGridItem","_","slideIndex","centeredSlidesBounds","allSlidesSize","slideSizeValue","maxSnap","snap","centerInsufficientSlides","allSlidesOffset","snapIndex","addToSnapGrid","addToSlidesGrid","v","watchOverflow","checkOverflow","watchSlidesProgress","updateSlidesOffset","backFaceHiddenClass","containerModifierClass","hasClassBackfaceClassAdded","maxBackfaceHiddenSlides","updateAutoHeight","activeSlides","newHeight","setTransition","getSlideByIndex","visibleSlides","ceil","activeIndex","swiperSlideOffset","offsetLeft","offsetTop","updateSlidesProgress","offsetCenter","slideVisibleClass","visibleSlidesIndexes","slideOffset","slideProgress","minTranslate","originalSlideProgress","slideBefore","slideAfter","originalProgress","updateProgress","multiplier","translatesDiff","maxTranslate","isBeginning","isEnd","wasBeginning","wasEnd","autoHeight","updateSlidesClasses","realIndex","activeSlide","slideActiveClass","slideNextClass","slidePrevClass","slideDuplicateActiveClass","slideDuplicateNextClass","slideDuplicatePrevClass","loop","slideDuplicateClass","nextSlide","prevSlide","emitSlidesClasses","updateActiveIndex","newActiveIndex","previousIndex","previousRealIndex","previousSnapIndex","normalizeSlideIndex","skip","initialized","runCallbacksOnInit","updateClickedSlide","slideFound","clickedSlide","clickedIndex","slideToClickedSlide","virtualTranslate","currentTranslate","setTranslate","byController","newProgress","x","y","previousTranslate","translateTo","runCallbacks","translateBounds","internal","animating","preventInteractionOnTransition","newTranslate","isH","behavior","onTranslateToWrapperTransitionEnd","transitionEmit","direction","step","slideTo","initial","Error","indexAsNumber","isFinite","normalizedTranslate","normalizedGrid","normalizedGridNext","allowSlideNext","allowSlidePrev","transitionStart","transitionEnd","t","_immediateVirtual","_swiperImmediateVirtual","onSlideToWrapperTransitionEnd","slideToLoop","newIndex","loopedSlides","slideNext","perGroup","slidesPerGroupAuto","slidesPerViewDynamic","increment","loopPreventsSlide","loopFix","_clientLeft","rewind","slidePrev","normalize","val","normalizedSnapGrid","prevSnap","prevSnapIndex","prevIndex","lastIndex","slideReset","slideToClosest","threshold","currentSnap","slideToIndex","loopCreate","$selector","loopFillGroupWithBlank","blankSlidesNum","blankNode","slideBlankClass","loopAdditionalSlides","loopedSlidesLimit","prependSlides","appendSlides","cloneNode","diff","loopDestroy","onTouchStart","touchEventsData","touches","originalEvent","$targetEl","touchEventsTarget","isTouchEvent","type","which","button","isTouched","isMoved","swipingClassHasValue","noSwipingClass","eventPath","composedPath","path","shadowRoot","noSwipingSelector","isTargetShadow","noSwiping","base","__closestFrom","assignedSlot","getRootNode","closestElement","allowClick","swipeHandler","currentX","targetTouches","pageX","currentY","pageY","startX","startY","edgeSwipeDetection","iOSEdgeSwipeDetection","edgeSwipeThreshold","iOSEdgeSwipeThreshold","innerWidth","preventDefault","allowTouchCallbacks","isScrolling","startMoving","touchStartTime","swipeDirection","allowThresholdMove","focusableElements","shouldPreventDefault","allowTouchMove","touchStartPreventDefault","touchStartForcePreventDefault","isContentEditable","freeMode","onTouchMove","targetTouch","changedTouches","preventedByNestedSwiper","touchReleaseOnEdges","diffX","diffY","sqrt","touchAngle","atan2","touchMoveStopPropagation","nested","stopPropagation","startTranslate","allowMomentumBounce","grabCursor","setGrabCursor","touchRatio","disableParentSwiper","resistanceRatio","resistance","followFinger","onTouchEnd","touchEndTime","timeDiff","pathTree","lastClickTime","currentPos","stopIndex","groupSize","rewindFirstIndex","rewindLastIndex","ratio","longSwipesMs","longSwipes","longSwipesRatio","shortSwipes","navigation","nextEl","prevEl","onResize","setBreakpoint","autoplay","running","paused","run","onClick","preventClicks","preventClicksPropagation","stopImmediatePropagation","onScroll","dummyEventAttached","dummyEventListener","touchEvents","domMethod","swiperMethod","start","passiveListeners","passive","move","end","cancel","updateOnWindowResize","events$1","attachEvents","bind","detachEvents","isGridEnabled","addClasses","suffixes","entries","prefix","resultClasses","item","prepareClasses","autoheight","fill","centered","emitContainerClasses","removeClasses","defaults","init","initialSlide","resizeObserver","createElements","url","breakpointsBase","simulateTouch","uniqueNavElements","preloadImages","updateOnImagesReady","wrapperClass","_emitClasses","moduleExtendParams","allModulesParams","moduleParamName","moduleParams","auto","prototypes","transition","moving","isLocked","cursor","unsetGrabCursor","breakpoint","getBreakpoint","currentBreakpoint","breakpointParams","originalParams","wasMultiRow","isMultiRow","wasEnabled","wasModuleEnabled","isModuleEnabled","disable","enable","directionChanged","needsReLoop","changeDirection","isEnabled","containerEl","currentHeight","innerHeight","points","point","minRatio","substr","sort","b","wasLocked","lastSlideIndex","lastSlideRightEdge","images","loadImage","imageEl","srcset","sizes","checkForComplete","image","onReady","complete","onload","onerror","imagesLoaded","imagesToLoad","currentSrc","extendedDefaults","Swiper","swipers","newParams","modules","__modules__","mod","extendParams","swiperParams","passedParams","eventName","velocity","desktop","touchEventsTouch","touchEventsDesktop","clickTimeout","velocities","setProgress","cls","getSlideClasses","slideEl","updates","view","exact","spv","breakLoop","translateValue","translated","newDirection","needUpdate","currentDirection","changeLanguageDirection","mount","mounted","getWrapperSelector","options","getWrapper","wrapper","destroy","deleteInstance","cleanStyles","object","deleteProps","static","newDefaults","module","m","installModule","createElementIfNotDefined","checkProps","element","classesToSelector","appendSlide","observer","prependSlide","addSlide","activeIndexBuffer","baseLength","slidesBuffer","currentSlide","removeSlide","slidesIndexes","indexToRemove","removeAllSlides","effectInit","overwriteParams","perspective","recreateShadows","getEffectParams","requireUpdateOnVirtual","overwriteParamsResult","_s","slideShadows","effectTarget","effectParams","$slideEl","transformEl","effectVirtualTransitionEnd","allSlides","$transitionEndTarget","eventTriggered","triggerEvents","createShadow","shadowClass","$shadowContainer","$shadowEl","prototypeGroup","protoMethod","use","animationFrame","resizeHandler","orientationChangeHandler","ResizeObserver","newWidth","_ref2","contentBoxSize","contentRect","inlineSize","blockSize","observe","unobserve","observers","attach","MutationObserver","WebkitMutationObserver","mutations","observerUpdate","attributes","childList","characterData","observeParents","observeSlideChildren","containerParents","disconnect","cssModeTimeout","renderSlide","cache","force","addSlidesBefore","addSlidesAfter","from","previousFrom","previousTo","previousSlidesGrid","previousOffset","offsetProp","slidesAfter","slidesBefore","onRendered","lazy","load","renderExternal","slidesToRender","renderExternalUpdate","prependIndexes","appendIndexes","numberOfNewSlides","newCache","cachedIndex","$cachedEl","cachedElIndex","handle","kc","keyCode","charCode","pageUpDown","keyboard","isPageUp","isPageDown","isArrowLeft","isArrowRight","isArrowUp","isArrowDown","shiftKey","altKey","ctrlKey","metaKey","onlyInViewport","inView","swiperWidth","swiperHeight","windowWidth","windowHeight","swiperOffset","swiperCoord","returnValue","timeout","mousewheel","releaseOnEdges","invert","forceToAxis","sensitivity","eventsTarget","thresholdDelta","thresholdTime","lastEventBeforeSnap","lastScrollTime","recentWheelEvents","handleMouseEnter","mouseEntered","handleMouseLeave","animateSlider","newEvent","delta","raw","rtlFactor","sX","sY","pX","pY","wheelDelta","wheelDeltaY","wheelDeltaX","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","positions","sign","ignoreWheelEvents","position","sticky","shift","prevEvent","firstEvent","snapToThreshold","autoplayDisableOnInteraction","stop","releaseScroll","getEl","toggleEl","disabled","disabledClass","tagName","lockClass","$nextEl","$prevEl","onPrevClick","onNextClick","hideOnClick","hiddenClass","navigationDisabledClass","targetEl","pagination","clickable","isHidden","pfx","bulletSize","bulletElement","renderBullet","renderProgressbar","renderFraction","renderCustom","progressbarOpposite","dynamicBullets","dynamicMainBullets","formatFractionCurrent","number","formatFractionTotal","bulletClass","bulletActiveClass","modifierClass","currentClass","totalClass","progressbarFillClass","progressbarOppositeClass","clickableClass","horizontalClass","verticalClass","paginationDisabledClass","bullets","dynamicBulletIndex","isPaginationDisabled","setSideBullets","$bulletEl","total","paginationType","firstIndex","midIndex","suffix","bullet","$bullet","bulletIndex","$firstDisplayedBullet","$lastDisplayedBullet","dynamicBulletsLength","bulletsOffset","progressbarDirection","scale","scaleX","scaleY","render","paginationHTML","numberOfBullets","dragStartPos","dragSize","trackSize","divider","dragTimeout","scrollbar","$dragEl","newSize","newPos","hide","opacity","display","getPointerPosition","clientX","clientY","setDragPosition","positionRatio","onDragStart","onDragMove","onDragEnd","snapOnRelease","activeListener","eventMethod","$swiperEl","dragClass","dragEl","draggable","scrollbarDisabledClass","parallax","setTransform","p","currentOpacity","currentScale","_swiper","parallaxEl","$parallaxEl","parallaxDuration","zoom","maxRatio","containerClass","zoomedSlideClass","gesturesEnabled","fakeGestureTouched","fakeGestureMoved","isScaling","gesture","slideWidth","slideHeight","$imageEl","$imageWrapEl","minX","minY","maxX","maxY","touchesStart","touchesCurrent","prevPositionX","prevPositionY","prevTime","getDistanceBetweenTouches","x1","y1","x2","y2","onGestureStart","scaleStart","onGestureChange","scaleMove","onGestureEnd","scaledWidth","scaledHeight","onTransitionEnd","zoomIn","touchX","touchY","offsetX","offsetY","translateX","translateY","imageWidth","imageHeight","translateMinX","translateMinY","translateMaxX","translateMaxY","touchAction","zoomOut","zoomToggle","getListeners","activeListenerWithCapture","getSlideSelector","toggleGestures","slideSelector","enableGestures","disableGestures","momentumDurationX","momentumDurationY","momentumDistanceX","newPositionX","momentumDistanceY","newPositionY","momentumDuration","in","out","checkInView","loadPrevNext","loadPrevNextAmount","loadOnTransitionStart","scrollingElement","elementClass","loadingClass","loadedClass","preloaderClass","scrollHandlerAttached","initialImageLoaded","loadInSlide","loadInDuplicate","$images","background","$pictureEl","sourceEl","$source","slideOriginalIndex","slideExist","amount","maxIndex","minIndex","checkInViewOnLoad","$scrollElement","isWindow","scrollElementWidth","scrollElementHeight","LinearSpline","binarySearch","guess","array","i1","i3","interpolate","removeSpline","controller","control","spline","inverse","by","_t","controlled","controlledTranslate","setControlledTranslate","getInterpolateFunction","setControlledTransition","a11y","notificationClass","prevSlideMessage","nextSlideMessage","firstSlideMessage","lastSlideMessage","paginationBulletMessage","slideLabelMessage","containerMessage","containerRoleDescriptionMessage","itemRoleDescriptionMessage","slideRole","clicked","liveRegion","notify","message","notification","makeElFocusable","makeElNotFocusable","addElRole","role","addElRoleDescription","description","addElLabel","disableEl","enableEl","onEnterOrSpaceKey","click","hasPagination","hasClickablePagination","initNavEl","wrapperId","controls","addElControls","handlePointerDown","handlePointerUp","handleFocus","includes","isActive","isVisible","sourceCapabilities","firesTouchEvents","$containerEl","repeat","round","random","live","addElLive","updateNavigation","bulletEl","updatePagination","root","keepQuery","paths","slugify","getPathValues","urlOverride","URL","pathArray","part","setHistory","currentState","state","scrollToSlide","setHistoryPopState","hashNavigation","watchState","onHashChange","newHash","setHash","$activeSlideEl","autoplayResult","reverseDirection","stopOnLastSlide","pause","waitForTransition","onVisibilityChange","visibilityState","onMouseEnter","disableOnInteraction","onMouseLeave","pauseOnMouseEnter","thumbs","multipleActiveThumbs","autoScrollOffset","slideThumbActiveClass","thumbsContainerClass","swiperCreated","onThumbClick","thumbsSwiper","currentIndex","thumbsParams","SwiperClass","thumbsSwiperParams","thumbsToActivate","thumbActiveClass","useOffset","newThumbsIndex","currentThumbsIndex","prevThumbsIndex","nextThumbsIndex","momentum","momentumRatio","momentumBounce","momentumBounceRatio","momentumVelocityRatio","minimumVelocity","lastMoveEvent","pop","velocityEvent","distance","momentumDistance","newPosition","afterBouncePosition","doBounce","bounceAmount","needsLoopFix","moveDistance","currentSlideSize","slidesNumberEvenToRows","slidesPerRow","numFullColumns","newSlideOrderIndex","column","row","groupIndex","slideIndexInGroup","columnsInGroup","order","fadeEffect","crossFade","tx","ty","slideOpacity","cubeEffect","shadow","shadowOffset","shadowScale","createSlideShadows","shadowBefore","shadowAfter","$cubeShadowEl","wrapperRotate","slideAngle","tz","shadowAngle","sin","scale1","scale2","zFactor","flipEffect","limitRotation","rotateY","rotateX","zIndex","coverflowEffect","rotate","stretch","depth","modifier","center","centerOffset","offsetMultiplier","translateZ","slideTransform","$shadowBeforeEl","$shadowAfterEl","creativeEffect","limitProgress","shadowPerProgress","progressMultiplier","getTranslateValue","isCenteredSlides","margin","r","custom","translateString","rotateString","scaleString","opacityString","shadowOpacity","cardsEffect","perSlideRotate","perSlideOffset","tX","tY","tZ","tXAdd","isSwipeToNext","isSwipeToPrev","subProgress","prevY"],"sources":["../node_modules/ssr-window/ssr-window.esm.js","../node_modules/dom7/dom7.esm.js","../src/shared/dom.js","../src/shared/utils.js","../src/shared/get-support.js","../src/shared/get-device.js","../src/shared/get-browser.js","../src/core/events-emitter.js","../src/core/update/index.js","../src/core/update/updateSize.js","../src/core/update/updateSlides.js","../src/core/update/updateAutoHeight.js","../src/core/update/updateSlidesOffset.js","../src/core/update/updateSlidesProgress.js","../src/core/update/updateProgress.js","../src/core/update/updateSlidesClasses.js","../src/core/update/updateActiveIndex.js","../src/core/update/updateClickedSlide.js","../src/core/translate/index.js","../src/core/translate/getTranslate.js","../src/core/translate/setTranslate.js","../src/core/translate/minTranslate.js","../src/core/translate/maxTranslate.js","../src/core/translate/translateTo.js","../src/core/transition/transitionEmit.js","../src/core/slide/index.js","../src/core/slide/slideTo.js","../src/core/slide/slideToLoop.js","../src/core/slide/slideNext.js","../src/core/slide/slidePrev.js","../src/core/slide/slideReset.js","../src/core/slide/slideToClosest.js","../src/core/slide/slideToClickedSlide.js","../src/core/loop/index.js","../src/core/loop/loopCreate.js","../src/core/loop/loopFix.js","../src/core/loop/loopDestroy.js","../src/core/events/onTouchStart.js","../src/core/events/onTouchMove.js","../src/core/events/onTouchEnd.js","../src/core/events/onResize.js","../src/core/events/onClick.js","../src/core/events/onScroll.js","../src/core/events/index.js","../src/core/breakpoints/setBreakpoint.js","../src/core/classes/index.js","../src/core/classes/addClasses.js","../src/core/classes/removeClasses.js","../src/core/check-overflow/index.js","../src/core/defaults.js","../src/core/moduleExtendParams.js","../src/core/core.js","../src/core/transition/index.js","../src/core/transition/setTransition.js","../src/core/transition/transitionStart.js","../src/core/transition/transitionEnd.js","../src/core/grab-cursor/index.js","../src/core/grab-cursor/setGrabCursor.js","../src/core/grab-cursor/unsetGrabCursor.js","../src/core/breakpoints/index.js","../src/core/breakpoints/getBreakpoint.js","../src/core/images/index.js","../src/core/images/loadImage.js","../src/core/images/preloadImages.js","../src/shared/create-element-if-not-defined.js","../src/shared/classes-to-selector.js","../src/modules/manipulation/methods/appendSlide.js","../src/modules/manipulation/methods/prependSlide.js","../src/modules/manipulation/methods/addSlide.js","../src/modules/manipulation/methods/removeSlide.js","../src/modules/manipulation/methods/removeAllSlides.js","../src/shared/effect-init.js","../src/shared/effect-target.js","../src/shared/effect-virtual-transition-end.js","../src/shared/create-shadow.js","../src/core/modules/resize/resize.js","../src/core/modules/observer/observer.js","../src/swiper.js","../src/modules/virtual/virtual.js","../src/modules/keyboard/keyboard.js","../src/modules/mousewheel/mousewheel.js","../src/modules/navigation/navigation.js","../src/modules/pagination/pagination.js","../src/modules/scrollbar/scrollbar.js","../src/modules/parallax/parallax.js","../src/modules/zoom/zoom.js","../src/modules/lazy/lazy.js","../src/modules/controller/controller.js","../src/modules/a11y/a11y.js","../src/modules/history/history.js","../src/modules/hash-navigation/hash-navigation.js","../src/modules/autoplay/autoplay.js","../src/modules/thumbs/thumbs.js","../src/modules/free-mode/free-mode.js","../src/modules/grid/grid.js","../src/modules/manipulation/manipulation.js","../src/modules/effect-fade/effect-fade.js","../src/modules/effect-cube/effect-cube.js","../src/modules/effect-flip/effect-flip.js","../src/modules/effect-coverflow/effect-coverflow.js","../src/modules/effect-creative/effect-creative.js","../src/modules/effect-cards/effect-cards.js"],"sourcesContent":["/**\n * SSR Window 4.0.2\n * Better handling for window object in SSR environment\n * https://github.com/nolimits4web/ssr-window\n *\n * Copyright 2021, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: December 13, 2021\n */\n/* eslint-disable no-param-reassign */\nfunction isObject(obj) {\n return (obj !== null &&\n typeof obj === 'object' &&\n 'constructor' in obj &&\n obj.constructor === Object);\n}\nfunction extend(target = {}, src = {}) {\n Object.keys(src).forEach((key) => {\n if (typeof target[key] === 'undefined')\n target[key] = src[key];\n else if (isObject(src[key]) &&\n isObject(target[key]) &&\n Object.keys(src[key]).length > 0) {\n extend(target[key], src[key]);\n }\n });\n}\n\nconst ssrDocument = {\n body: {},\n addEventListener() { },\n removeEventListener() { },\n activeElement: {\n blur() { },\n nodeName: '',\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n getElementById() {\n return null;\n },\n createEvent() {\n return {\n initEvent() { },\n };\n },\n createElement() {\n return {\n children: [],\n childNodes: [],\n style: {},\n setAttribute() { },\n getElementsByTagName() {\n return [];\n },\n };\n },\n createElementNS() {\n return {};\n },\n importNode() {\n return null;\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n};\nfunction getDocument() {\n const doc = typeof document !== 'undefined' ? document : {};\n extend(doc, ssrDocument);\n return doc;\n}\n\nconst ssrWindow = {\n document: ssrDocument,\n navigator: {\n userAgent: '',\n },\n location: {\n hash: '',\n host: '',\n hostname: '',\n href: '',\n origin: '',\n pathname: '',\n protocol: '',\n search: '',\n },\n history: {\n replaceState() { },\n pushState() { },\n go() { },\n back() { },\n },\n CustomEvent: function CustomEvent() {\n return this;\n },\n addEventListener() { },\n removeEventListener() { },\n getComputedStyle() {\n return {\n getPropertyValue() {\n return '';\n },\n };\n },\n Image() { },\n Date() { },\n screen: {},\n setTimeout() { },\n clearTimeout() { },\n matchMedia() {\n return {};\n },\n requestAnimationFrame(callback) {\n if (typeof setTimeout === 'undefined') {\n callback();\n return null;\n }\n return setTimeout(callback, 0);\n },\n cancelAnimationFrame(id) {\n if (typeof setTimeout === 'undefined') {\n return;\n }\n clearTimeout(id);\n },\n};\nfunction getWindow() {\n const win = typeof window !== 'undefined' ? window : {};\n extend(win, ssrWindow);\n return win;\n}\n\nexport { extend, getDocument, getWindow, ssrDocument, ssrWindow };\n","/**\n * Dom7 4.0.4\n * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API\n * https://framework7.io/docs/dom7.html\n *\n * Copyright 2022, Vladimir Kharlampidi\n *\n * Licensed under MIT\n *\n * Released on: January 11, 2022\n */\nimport { getWindow, getDocument } from 'ssr-window';\n\n/* eslint-disable no-proto */\nfunction makeReactive(obj) {\n const proto = obj.__proto__;\n Object.defineProperty(obj, '__proto__', {\n get() {\n return proto;\n },\n\n set(value) {\n proto.__proto__ = value;\n }\n\n });\n}\n\nclass Dom7 extends Array {\n constructor(items) {\n if (typeof items === 'number') {\n super(items);\n } else {\n super(...(items || []));\n makeReactive(this);\n }\n }\n\n}\n\nfunction arrayFlat(arr = []) {\n const res = [];\n arr.forEach(el => {\n if (Array.isArray(el)) {\n res.push(...arrayFlat(el));\n } else {\n res.push(el);\n }\n });\n return res;\n}\nfunction arrayFilter(arr, callback) {\n return Array.prototype.filter.call(arr, callback);\n}\nfunction arrayUnique(arr) {\n const uniqueArray = [];\n\n for (let i = 0; i < arr.length; i += 1) {\n if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);\n }\n\n return uniqueArray;\n}\nfunction toCamelCase(string) {\n return string.toLowerCase().replace(/-(.)/g, (match, group) => group.toUpperCase());\n}\n\n// eslint-disable-next-line\n\nfunction qsa(selector, context) {\n if (typeof selector !== 'string') {\n return [selector];\n }\n\n const a = [];\n const res = context.querySelectorAll(selector);\n\n for (let i = 0; i < res.length; i += 1) {\n a.push(res[i]);\n }\n\n return a;\n}\n\nfunction $(selector, context) {\n const window = getWindow();\n const document = getDocument();\n let arr = [];\n\n if (!context && selector instanceof Dom7) {\n return selector;\n }\n\n if (!selector) {\n return new Dom7(arr);\n }\n\n if (typeof selector === 'string') {\n const html = selector.trim();\n\n if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {\n let toCreate = 'div';\n if (html.indexOf(' c.split(' ')));\n this.forEach(el => {\n el.classList.add(...classNames);\n });\n return this;\n}\n\nfunction removeClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n el.classList.remove(...classNames);\n });\n return this;\n}\n\nfunction toggleClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n this.forEach(el => {\n classNames.forEach(className => {\n el.classList.toggle(className);\n });\n });\n}\n\nfunction hasClass(...classes) {\n const classNames = arrayFlat(classes.map(c => c.split(' ')));\n return arrayFilter(this, el => {\n return classNames.filter(className => el.classList.contains(className)).length > 0;\n }).length > 0;\n}\n\nfunction attr(attrs, value) {\n if (arguments.length === 1 && typeof attrs === 'string') {\n // Get attr\n if (this[0]) return this[0].getAttribute(attrs);\n return undefined;\n } // Set attrs\n\n\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i].setAttribute(attrs, value);\n } else {\n // Object\n for (const attrName in attrs) {\n this[i][attrName] = attrs[attrName];\n this[i].setAttribute(attrName, attrs[attrName]);\n }\n }\n }\n\n return this;\n}\n\nfunction removeAttr(attr) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].removeAttribute(attr);\n }\n\n return this;\n}\n\nfunction prop(props, value) {\n if (arguments.length === 1 && typeof props === 'string') {\n // Get prop\n if (this[0]) return this[0][props];\n } else {\n // Set props\n for (let i = 0; i < this.length; i += 1) {\n if (arguments.length === 2) {\n // String\n this[i][props] = value;\n } else {\n // Object\n for (const propName in props) {\n this[i][propName] = props[propName];\n }\n }\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction data(key, value) {\n let el;\n\n if (typeof value === 'undefined') {\n el = this[0];\n if (!el) return undefined; // Get value\n\n if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {\n return el.dom7ElementDataStorage[key];\n }\n\n const dataKey = el.getAttribute(`data-${key}`);\n\n if (dataKey) {\n return dataKey;\n }\n\n return undefined;\n } // Set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n el = this[i];\n if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};\n el.dom7ElementDataStorage[key] = value;\n }\n\n return this;\n}\n\nfunction removeData(key) {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) {\n el.dom7ElementDataStorage[key] = null;\n delete el.dom7ElementDataStorage[key];\n }\n }\n}\n\nfunction dataset() {\n const el = this[0];\n if (!el) return undefined;\n const dataset = {}; // eslint-disable-line\n\n if (el.dataset) {\n for (const dataKey in el.dataset) {\n dataset[dataKey] = el.dataset[dataKey];\n }\n } else {\n for (let i = 0; i < el.attributes.length; i += 1) {\n const attr = el.attributes[i];\n\n if (attr.name.indexOf('data-') >= 0) {\n dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value;\n }\n }\n }\n\n for (const key in dataset) {\n if (dataset[key] === 'false') dataset[key] = false;else if (dataset[key] === 'true') dataset[key] = true;else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1;\n }\n\n return dataset;\n}\n\nfunction val(value) {\n if (typeof value === 'undefined') {\n // get value\n const el = this[0];\n if (!el) return undefined;\n\n if (el.multiple && el.nodeName.toLowerCase() === 'select') {\n const values = [];\n\n for (let i = 0; i < el.selectedOptions.length; i += 1) {\n values.push(el.selectedOptions[i].value);\n }\n\n return values;\n }\n\n return el.value;\n } // set value\n\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') {\n for (let j = 0; j < el.options.length; j += 1) {\n el.options[j].selected = value.indexOf(el.options[j].value) >= 0;\n }\n } else {\n el.value = value;\n }\n }\n\n return this;\n}\n\nfunction value(value) {\n return this.val(value);\n}\n\nfunction transform(transform) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transform = transform;\n }\n\n return this;\n}\n\nfunction transition(duration) {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.transitionDuration = typeof duration !== 'string' ? `${duration}ms` : duration;\n }\n\n return this;\n}\n\nfunction on(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n\n function handleLiveEvent(e) {\n const target = e.target;\n if (!target) return;\n const eventData = e.target.dom7EventData || [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n if ($(target).is(targetSelector)) listener.apply(target, eventData);else {\n const parents = $(target).parents(); // eslint-disable-line\n\n for (let k = 0; k < parents.length; k += 1) {\n if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData);\n }\n }\n }\n\n function handleEvent(e) {\n const eventData = e && e.target ? e.target.dom7EventData || [] : [];\n\n if (eventData.indexOf(e) < 0) {\n eventData.unshift(e);\n }\n\n listener.apply(this, eventData);\n }\n\n const events = eventType.split(' ');\n let j;\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (!targetSelector) {\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7Listeners) el.dom7Listeners = {};\n if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];\n el.dom7Listeners[event].push({\n listener,\n proxyListener: handleEvent\n });\n el.addEventListener(event, handleEvent, capture);\n }\n } else {\n // Live events\n for (j = 0; j < events.length; j += 1) {\n const event = events[j];\n if (!el.dom7LiveListeners) el.dom7LiveListeners = {};\n if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = [];\n el.dom7LiveListeners[event].push({\n listener,\n proxyListener: handleLiveEvent\n });\n el.addEventListener(event, handleLiveEvent, capture);\n }\n }\n }\n\n return this;\n}\n\nfunction off(...args) {\n let [eventType, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventType, listener, capture] = args;\n targetSelector = undefined;\n }\n\n if (!capture) capture = false;\n const events = eventType.split(' ');\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n let handlers;\n\n if (!targetSelector && el.dom7Listeners) {\n handlers = el.dom7Listeners[event];\n } else if (targetSelector && el.dom7LiveListeners) {\n handlers = el.dom7LiveListeners[event];\n }\n\n if (handlers && handlers.length) {\n for (let k = handlers.length - 1; k >= 0; k -= 1) {\n const handler = handlers[k];\n\n if (listener && handler.listener === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n } else if (!listener) {\n el.removeEventListener(event, handler.proxyListener, capture);\n handlers.splice(k, 1);\n }\n }\n }\n }\n }\n\n return this;\n}\n\nfunction once(...args) {\n const dom = this;\n let [eventName, targetSelector, listener, capture] = args;\n\n if (typeof args[1] === 'function') {\n [eventName, listener, capture] = args;\n targetSelector = undefined;\n }\n\n function onceHandler(...eventArgs) {\n listener.apply(this, eventArgs);\n dom.off(eventName, targetSelector, onceHandler, capture);\n\n if (onceHandler.dom7proxy) {\n delete onceHandler.dom7proxy;\n }\n }\n\n onceHandler.dom7proxy = listener;\n return dom.on(eventName, targetSelector, onceHandler, capture);\n}\n\nfunction trigger(...args) {\n const window = getWindow();\n const events = args[0].split(' ');\n const eventData = args[1];\n\n for (let i = 0; i < events.length; i += 1) {\n const event = events[i];\n\n for (let j = 0; j < this.length; j += 1) {\n const el = this[j];\n\n if (window.CustomEvent) {\n const evt = new window.CustomEvent(event, {\n detail: eventData,\n bubbles: true,\n cancelable: true\n });\n el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0);\n el.dispatchEvent(evt);\n el.dom7EventData = [];\n delete el.dom7EventData;\n }\n }\n }\n\n return this;\n}\n\nfunction transitionEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('transitionend', fireCallBack);\n }\n\n if (callback) {\n dom.on('transitionend', fireCallBack);\n }\n\n return this;\n}\n\nfunction animationEnd(callback) {\n const dom = this;\n\n function fireCallBack(e) {\n if (e.target !== this) return;\n callback.call(this, e);\n dom.off('animationend', fireCallBack);\n }\n\n if (callback) {\n dom.on('animationend', fireCallBack);\n }\n\n return this;\n}\n\nfunction width() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerWidth;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('width'));\n }\n\n return null;\n}\n\nfunction outerWidth(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));\n }\n\n return this[0].offsetWidth;\n }\n\n return null;\n}\n\nfunction height() {\n const window = getWindow();\n\n if (this[0] === window) {\n return window.innerHeight;\n }\n\n if (this.length > 0) {\n return parseFloat(this.css('height'));\n }\n\n return null;\n}\n\nfunction outerHeight(includeMargins) {\n if (this.length > 0) {\n if (includeMargins) {\n const styles = this.styles();\n return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));\n }\n\n return this[0].offsetHeight;\n }\n\n return null;\n}\n\nfunction offset() {\n if (this.length > 0) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n const box = el.getBoundingClientRect();\n const body = document.body;\n const clientTop = el.clientTop || body.clientTop || 0;\n const clientLeft = el.clientLeft || body.clientLeft || 0;\n const scrollTop = el === window ? window.scrollY : el.scrollTop;\n const scrollLeft = el === window ? window.scrollX : el.scrollLeft;\n return {\n top: box.top + scrollTop - clientTop,\n left: box.left + scrollLeft - clientLeft\n };\n }\n\n return null;\n}\n\nfunction hide() {\n for (let i = 0; i < this.length; i += 1) {\n this[i].style.display = 'none';\n }\n\n return this;\n}\n\nfunction show() {\n const window = getWindow();\n\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.style.display === 'none') {\n el.style.display = '';\n }\n\n if (window.getComputedStyle(el, null).getPropertyValue('display') === 'none') {\n // Still not visible\n el.style.display = 'block';\n }\n }\n\n return this;\n}\n\nfunction styles() {\n const window = getWindow();\n if (this[0]) return window.getComputedStyle(this[0], null);\n return {};\n}\n\nfunction css(props, value) {\n const window = getWindow();\n let i;\n\n if (arguments.length === 1) {\n if (typeof props === 'string') {\n // .css('width')\n if (this[0]) return window.getComputedStyle(this[0], null).getPropertyValue(props);\n } else {\n // .css({ width: '100px' })\n for (i = 0; i < this.length; i += 1) {\n for (const prop in props) {\n this[i].style[prop] = props[prop];\n }\n }\n\n return this;\n }\n }\n\n if (arguments.length === 2 && typeof props === 'string') {\n // .css('width', '100px')\n for (i = 0; i < this.length; i += 1) {\n this[i].style[props] = value;\n }\n\n return this;\n }\n\n return this;\n}\n\nfunction each(callback) {\n if (!callback) return this;\n this.forEach((el, index) => {\n callback.apply(el, [el, index]);\n });\n return this;\n}\n\nfunction filter(callback) {\n const result = arrayFilter(this, callback);\n return $(result);\n}\n\nfunction html(html) {\n if (typeof html === 'undefined') {\n return this[0] ? this[0].innerHTML : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].innerHTML = html;\n }\n\n return this;\n}\n\nfunction text(text) {\n if (typeof text === 'undefined') {\n return this[0] ? this[0].textContent.trim() : null;\n }\n\n for (let i = 0; i < this.length; i += 1) {\n this[i].textContent = text;\n }\n\n return this;\n}\n\nfunction is(selector) {\n const window = getWindow();\n const document = getDocument();\n const el = this[0];\n let compareWith;\n let i;\n if (!el || typeof selector === 'undefined') return false;\n\n if (typeof selector === 'string') {\n if (el.matches) return el.matches(selector);\n if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);\n if (el.msMatchesSelector) return el.msMatchesSelector(selector);\n compareWith = $(selector);\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n if (selector === document) {\n return el === document;\n }\n\n if (selector === window) {\n return el === window;\n }\n\n if (selector.nodeType || selector instanceof Dom7) {\n compareWith = selector.nodeType ? [selector] : selector;\n\n for (i = 0; i < compareWith.length; i += 1) {\n if (compareWith[i] === el) return true;\n }\n\n return false;\n }\n\n return false;\n}\n\nfunction index() {\n let child = this[0];\n let i;\n\n if (child) {\n i = 0; // eslint-disable-next-line\n\n while ((child = child.previousSibling) !== null) {\n if (child.nodeType === 1) i += 1;\n }\n\n return i;\n }\n\n return undefined;\n}\n\nfunction eq(index) {\n if (typeof index === 'undefined') return this;\n const length = this.length;\n\n if (index > length - 1) {\n return $([]);\n }\n\n if (index < 0) {\n const returnIndex = length + index;\n if (returnIndex < 0) return $([]);\n return $([this[returnIndex]]);\n }\n\n return $([this[index]]);\n}\n\nfunction append(...els) {\n let newChild;\n const document = getDocument();\n\n for (let k = 0; k < els.length; k += 1) {\n newChild = els[k];\n\n for (let i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n while (tempDiv.firstChild) {\n this[i].appendChild(tempDiv.firstChild);\n }\n } else if (newChild instanceof Dom7) {\n for (let j = 0; j < newChild.length; j += 1) {\n this[i].appendChild(newChild[j]);\n }\n } else {\n this[i].appendChild(newChild);\n }\n }\n }\n\n return this;\n}\n\nfunction appendTo(parent) {\n $(parent).append(this);\n return this;\n}\n\nfunction prepend(newChild) {\n const document = getDocument();\n let i;\n let j;\n\n for (i = 0; i < this.length; i += 1) {\n if (typeof newChild === 'string') {\n const tempDiv = document.createElement('div');\n tempDiv.innerHTML = newChild;\n\n for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {\n this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);\n }\n } else if (newChild instanceof Dom7) {\n for (j = 0; j < newChild.length; j += 1) {\n this[i].insertBefore(newChild[j], this[i].childNodes[0]);\n }\n } else {\n this[i].insertBefore(newChild, this[i].childNodes[0]);\n }\n }\n\n return this;\n}\n\nfunction prependTo(parent) {\n $(parent).prepend(this);\n return this;\n}\n\nfunction insertBefore(selector) {\n const before = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (before.length === 1) {\n before[0].parentNode.insertBefore(this[i], before[0]);\n } else if (before.length > 1) {\n for (let j = 0; j < before.length; j += 1) {\n before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]);\n }\n }\n }\n}\n\nfunction insertAfter(selector) {\n const after = $(selector);\n\n for (let i = 0; i < this.length; i += 1) {\n if (after.length === 1) {\n after[0].parentNode.insertBefore(this[i], after[0].nextSibling);\n } else if (after.length > 1) {\n for (let j = 0; j < after.length; j += 1) {\n after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling);\n }\n }\n }\n}\n\nfunction next(selector) {\n if (this.length > 0) {\n if (selector) {\n if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {\n return $([this[0].nextElementSibling]);\n }\n\n return $([]);\n }\n\n if (this[0].nextElementSibling) return $([this[0].nextElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction nextAll(selector) {\n const nextEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.nextElementSibling) {\n const next = el.nextElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(next).is(selector)) nextEls.push(next);\n } else nextEls.push(next);\n\n el = next;\n }\n\n return $(nextEls);\n}\n\nfunction prev(selector) {\n if (this.length > 0) {\n const el = this[0];\n\n if (selector) {\n if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {\n return $([el.previousElementSibling]);\n }\n\n return $([]);\n }\n\n if (el.previousElementSibling) return $([el.previousElementSibling]);\n return $([]);\n }\n\n return $([]);\n}\n\nfunction prevAll(selector) {\n const prevEls = [];\n let el = this[0];\n if (!el) return $([]);\n\n while (el.previousElementSibling) {\n const prev = el.previousElementSibling; // eslint-disable-line\n\n if (selector) {\n if ($(prev).is(selector)) prevEls.push(prev);\n } else prevEls.push(prev);\n\n el = prev;\n }\n\n return $(prevEls);\n}\n\nfunction siblings(selector) {\n return this.nextAll(selector).add(this.prevAll(selector));\n}\n\nfunction parent(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode !== null) {\n if (selector) {\n if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);\n } else {\n parents.push(this[i].parentNode);\n }\n }\n }\n\n return $(parents);\n}\n\nfunction parents(selector) {\n const parents = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n let parent = this[i].parentNode; // eslint-disable-line\n\n while (parent) {\n if (selector) {\n if ($(parent).is(selector)) parents.push(parent);\n } else {\n parents.push(parent);\n }\n\n parent = parent.parentNode;\n }\n }\n\n return $(parents);\n}\n\nfunction closest(selector) {\n let closest = this; // eslint-disable-line\n\n if (typeof selector === 'undefined') {\n return $([]);\n }\n\n if (!closest.is(selector)) {\n closest = closest.parents(selector).eq(0);\n }\n\n return closest;\n}\n\nfunction find(selector) {\n const foundElements = [];\n\n for (let i = 0; i < this.length; i += 1) {\n const found = this[i].querySelectorAll(selector);\n\n for (let j = 0; j < found.length; j += 1) {\n foundElements.push(found[j]);\n }\n }\n\n return $(foundElements);\n}\n\nfunction children(selector) {\n const children = []; // eslint-disable-line\n\n for (let i = 0; i < this.length; i += 1) {\n const childNodes = this[i].children;\n\n for (let j = 0; j < childNodes.length; j += 1) {\n if (!selector || $(childNodes[j]).is(selector)) {\n children.push(childNodes[j]);\n }\n }\n }\n\n return $(children);\n}\n\nfunction remove() {\n for (let i = 0; i < this.length; i += 1) {\n if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);\n }\n\n return this;\n}\n\nfunction detach() {\n return this.remove();\n}\n\nfunction add(...els) {\n const dom = this;\n let i;\n let j;\n\n for (i = 0; i < els.length; i += 1) {\n const toAdd = $(els[i]);\n\n for (j = 0; j < toAdd.length; j += 1) {\n dom.push(toAdd[j]);\n }\n }\n\n return dom;\n}\n\nfunction empty() {\n for (let i = 0; i < this.length; i += 1) {\n const el = this[i];\n\n if (el.nodeType === 1) {\n for (let j = 0; j < el.childNodes.length; j += 1) {\n if (el.childNodes[j].parentNode) {\n el.childNodes[j].parentNode.removeChild(el.childNodes[j]);\n }\n }\n\n el.textContent = '';\n }\n }\n\n return this;\n}\n\n// eslint-disable-next-line\n\nfunction scrollTo(...args) {\n const window = getWindow();\n let [left, top, duration, easing, callback] = args;\n\n if (args.length === 4 && typeof easing === 'function') {\n callback = easing;\n [left, top, duration, callback, easing] = args;\n }\n\n if (typeof easing === 'undefined') easing = 'swing';\n return this.each(function animate() {\n const el = this;\n let currentTop;\n let currentLeft;\n let maxTop;\n let maxLeft;\n let newTop;\n let newLeft;\n let scrollTop; // eslint-disable-line\n\n let scrollLeft; // eslint-disable-line\n\n let animateTop = top > 0 || top === 0;\n let animateLeft = left > 0 || left === 0;\n\n if (typeof easing === 'undefined') {\n easing = 'swing';\n }\n\n if (animateTop) {\n currentTop = el.scrollTop;\n\n if (!duration) {\n el.scrollTop = top;\n }\n }\n\n if (animateLeft) {\n currentLeft = el.scrollLeft;\n\n if (!duration) {\n el.scrollLeft = left;\n }\n }\n\n if (!duration) return;\n\n if (animateTop) {\n maxTop = el.scrollHeight - el.offsetHeight;\n newTop = Math.max(Math.min(top, maxTop), 0);\n }\n\n if (animateLeft) {\n maxLeft = el.scrollWidth - el.offsetWidth;\n newLeft = Math.max(Math.min(left, maxLeft), 0);\n }\n\n let startTime = null;\n if (animateTop && newTop === currentTop) animateTop = false;\n if (animateLeft && newLeft === currentLeft) animateLeft = false;\n\n function render(time = new Date().getTime()) {\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = easing === 'linear' ? progress : 0.5 - Math.cos(progress * Math.PI) / 2;\n let done;\n if (animateTop) scrollTop = currentTop + easeProgress * (newTop - currentTop);\n if (animateLeft) scrollLeft = currentLeft + easeProgress * (newLeft - currentLeft);\n\n if (animateTop && newTop > currentTop && scrollTop >= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateTop && newTop < currentTop && scrollTop <= newTop) {\n el.scrollTop = newTop;\n done = true;\n }\n\n if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) {\n el.scrollLeft = newLeft;\n done = true;\n }\n\n if (done) {\n if (callback) callback();\n return;\n }\n\n if (animateTop) el.scrollTop = scrollTop;\n if (animateLeft) el.scrollLeft = scrollLeft;\n window.requestAnimationFrame(render);\n }\n\n window.requestAnimationFrame(render);\n });\n} // scrollTop(top, duration, easing, callback) {\n\n\nfunction scrollTop(...args) {\n let [top, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [top, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof top === 'undefined') {\n if (dom.length > 0) return dom[0].scrollTop;\n return null;\n }\n\n return dom.scrollTo(undefined, top, duration, easing, callback);\n}\n\nfunction scrollLeft(...args) {\n let [left, duration, easing, callback] = args;\n\n if (args.length === 3 && typeof easing === 'function') {\n [left, duration, callback, easing] = args;\n }\n\n const dom = this;\n\n if (typeof left === 'undefined') {\n if (dom.length > 0) return dom[0].scrollLeft;\n return null;\n }\n\n return dom.scrollTo(left, undefined, duration, easing, callback);\n}\n\n// eslint-disable-next-line\n\nfunction animate(initialProps, initialParams) {\n const window = getWindow();\n const els = this;\n const a = {\n props: Object.assign({}, initialProps),\n params: Object.assign({\n duration: 300,\n easing: 'swing' // or 'linear'\n\n /* Callbacks\n begin(elements)\n complete(elements)\n progress(elements, complete, remaining, start, tweenValue)\n */\n\n }, initialParams),\n elements: els,\n animating: false,\n que: [],\n\n easingProgress(easing, progress) {\n if (easing === 'swing') {\n return 0.5 - Math.cos(progress * Math.PI) / 2;\n }\n\n if (typeof easing === 'function') {\n return easing(progress);\n }\n\n return progress;\n },\n\n stop() {\n if (a.frameId) {\n window.cancelAnimationFrame(a.frameId);\n }\n\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n a.que = [];\n },\n\n done(complete) {\n a.animating = false;\n a.elements.each(el => {\n const element = el;\n delete element.dom7AnimateInstance;\n });\n if (complete) complete(els);\n\n if (a.que.length > 0) {\n const que = a.que.shift();\n a.animate(que[0], que[1]);\n }\n },\n\n animate(props, params) {\n if (a.animating) {\n a.que.push([props, params]);\n return a;\n }\n\n const elements = []; // Define & Cache Initials & Units\n\n a.elements.each((el, index) => {\n let initialFullValue;\n let initialValue;\n let unit;\n let finalValue;\n let finalFullValue;\n if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a;\n elements[index] = {\n container: el\n };\n Object.keys(props).forEach(prop => {\n initialFullValue = window.getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.');\n initialValue = parseFloat(initialFullValue);\n unit = initialFullValue.replace(initialValue, '');\n finalValue = parseFloat(props[prop]);\n finalFullValue = props[prop] + unit;\n elements[index][prop] = {\n initialFullValue,\n initialValue,\n unit,\n finalValue,\n finalFullValue,\n currentValue: initialValue\n };\n });\n });\n let startTime = null;\n let time;\n let elementsDone = 0;\n let propsDone = 0;\n let done;\n let began = false;\n a.animating = true;\n\n function render() {\n time = new Date().getTime();\n let progress;\n let easeProgress; // let el;\n\n if (!began) {\n began = true;\n if (params.begin) params.begin(els);\n }\n\n if (startTime === null) {\n startTime = time;\n }\n\n if (params.progress) {\n // eslint-disable-next-line\n params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), startTime + params.duration - time < 0 ? 0 : startTime + params.duration - time, startTime);\n }\n\n elements.forEach(element => {\n const el = element;\n if (done || el.done) return;\n Object.keys(props).forEach(prop => {\n if (done || el.done) return;\n progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0);\n easeProgress = a.easingProgress(params.easing, progress);\n const {\n initialValue,\n finalValue,\n unit\n } = el[prop];\n el[prop].currentValue = initialValue + easeProgress * (finalValue - initialValue);\n const currentValue = el[prop].currentValue;\n\n if (finalValue > initialValue && currentValue >= finalValue || finalValue < initialValue && currentValue <= finalValue) {\n el.container.style[prop] = finalValue + unit;\n propsDone += 1;\n\n if (propsDone === Object.keys(props).length) {\n el.done = true;\n elementsDone += 1;\n }\n\n if (elementsDone === elements.length) {\n done = true;\n }\n }\n\n if (done) {\n a.done(params.complete);\n return;\n }\n\n el.container.style[prop] = currentValue + unit;\n });\n });\n if (done) return; // Then call\n\n a.frameId = window.requestAnimationFrame(render);\n }\n\n a.frameId = window.requestAnimationFrame(render);\n return a;\n }\n\n };\n\n if (a.elements.length === 0) {\n return els;\n }\n\n let animateInstance;\n\n for (let i = 0; i < a.elements.length; i += 1) {\n if (a.elements[i].dom7AnimateInstance) {\n animateInstance = a.elements[i].dom7AnimateInstance;\n } else a.elements[i].dom7AnimateInstance = a;\n }\n\n if (!animateInstance) {\n animateInstance = a;\n }\n\n if (initialProps === 'stop') {\n animateInstance.stop();\n } else {\n animateInstance.animate(a.props, a.params);\n }\n\n return els;\n}\n\nfunction stop() {\n const els = this;\n\n for (let i = 0; i < els.length; i += 1) {\n if (els[i].dom7AnimateInstance) {\n els[i].dom7AnimateInstance.stop();\n }\n }\n}\n\nconst noTrigger = 'resize scroll'.split(' ');\n\nfunction shortcut(name) {\n function eventHandler(...args) {\n if (typeof args[0] === 'undefined') {\n for (let i = 0; i < this.length; i += 1) {\n if (noTrigger.indexOf(name) < 0) {\n if (name in this[i]) this[i][name]();else {\n $(this[i]).trigger(name);\n }\n }\n }\n\n return this;\n }\n\n return this.on(name, ...args);\n }\n\n return eventHandler;\n}\n\nconst click = shortcut('click');\nconst blur = shortcut('blur');\nconst focus = shortcut('focus');\nconst focusin = shortcut('focusin');\nconst focusout = shortcut('focusout');\nconst keyup = shortcut('keyup');\nconst keydown = shortcut('keydown');\nconst keypress = shortcut('keypress');\nconst submit = shortcut('submit');\nconst change = shortcut('change');\nconst mousedown = shortcut('mousedown');\nconst mousemove = shortcut('mousemove');\nconst mouseup = shortcut('mouseup');\nconst mouseenter = shortcut('mouseenter');\nconst mouseleave = shortcut('mouseleave');\nconst mouseout = shortcut('mouseout');\nconst mouseover = shortcut('mouseover');\nconst touchstart = shortcut('touchstart');\nconst touchend = shortcut('touchend');\nconst touchmove = shortcut('touchmove');\nconst resize = shortcut('resize');\nconst scroll = shortcut('scroll');\n\nexport default $;\nexport { $, add, addClass, animate, animationEnd, append, appendTo, attr, blur, change, children, click, closest, css, data, dataset, detach, each, empty, eq, filter, find, focus, focusin, focusout, hasClass, height, hide, html, index, insertAfter, insertBefore, is, keydown, keypress, keyup, mousedown, mouseenter, mouseleave, mousemove, mouseout, mouseover, mouseup, next, nextAll, off, offset, on, once, outerHeight, outerWidth, parent, parents, prepend, prependTo, prev, prevAll, prop, remove, removeAttr, removeClass, removeData, resize, scroll, scrollLeft, scrollTo, scrollTop, show, siblings, stop, styles, submit, text, toggleClass, touchend, touchmove, touchstart, transform, transition, transitionEnd, trigger, val, value, width };\n","import {\n $,\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n} from 'dom7';\n\nconst Methods = {\n addClass,\n removeClass,\n hasClass,\n toggleClass,\n attr,\n removeAttr,\n transform,\n transition,\n on,\n off,\n trigger,\n transitionEnd,\n outerWidth,\n outerHeight,\n styles,\n offset,\n css,\n each,\n html,\n text,\n is,\n index,\n eq,\n append,\n prepend,\n next,\n nextAll,\n prev,\n prevAll,\n parent,\n parents,\n closest,\n find,\n children,\n filter,\n remove,\n};\n\nObject.keys(Methods).forEach((methodName) => {\n Object.defineProperty($.fn, methodName, { value: Methods[methodName], writable: true });\n});\n\nexport default $;\n","import { getWindow } from 'ssr-window';\n\nfunction deleteProps(obj) {\n const object = obj;\n Object.keys(object).forEach((key) => {\n try {\n object[key] = null;\n } catch (e) {\n // no getter for object\n }\n try {\n delete object[key];\n } catch (e) {\n // something got wrong\n }\n });\n}\nfunction nextTick(callback, delay = 0) {\n return setTimeout(callback, delay);\n}\nfunction now() {\n return Date.now();\n}\nfunction getComputedStyle(el) {\n const window = getWindow();\n let style;\n if (window.getComputedStyle) {\n style = window.getComputedStyle(el, null);\n }\n if (!style && el.currentStyle) {\n style = el.currentStyle;\n }\n if (!style) {\n style = el.style;\n }\n\n return style;\n}\nfunction getTranslate(el, axis = 'x') {\n const window = getWindow();\n let matrix;\n let curTransform;\n let transformMatrix;\n\n const curStyle = getComputedStyle(el, null);\n\n if (window.WebKitCSSMatrix) {\n curTransform = curStyle.transform || curStyle.webkitTransform;\n if (curTransform.split(',').length > 6) {\n curTransform = curTransform\n .split(', ')\n .map((a) => a.replace(',', '.'))\n .join(', ');\n }\n // Some old versions of Webkit choke when 'none' is passed; pass\n // empty string instead in this case\n transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);\n } else {\n transformMatrix =\n curStyle.MozTransform ||\n curStyle.OTransform ||\n curStyle.MsTransform ||\n curStyle.msTransform ||\n curStyle.transform ||\n curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');\n matrix = transformMatrix.toString().split(',');\n }\n\n if (axis === 'x') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[4]);\n }\n if (axis === 'y') {\n // Latest Chrome and webkits Fix\n if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42;\n // Crazy IE10 Matrix\n else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);\n // Normal Browsers\n else curTransform = parseFloat(matrix[5]);\n }\n return curTransform || 0;\n}\nfunction isObject(o) {\n return (\n typeof o === 'object' &&\n o !== null &&\n o.constructor &&\n Object.prototype.toString.call(o).slice(8, -1) === 'Object'\n );\n}\nfunction isNode(node) {\n // eslint-disable-next-line\n if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {\n return node instanceof HTMLElement;\n }\n return node && (node.nodeType === 1 || node.nodeType === 11);\n}\nfunction extend(...args) {\n const to = Object(args[0]);\n const noExtend = ['__proto__', 'constructor', 'prototype'];\n for (let i = 1; i < args.length; i += 1) {\n const nextSource = args[i];\n if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {\n const keysArray = Object.keys(Object(nextSource)).filter((key) => noExtend.indexOf(key) < 0);\n for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {\n const nextKey = keysArray[nextIndex];\n const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n if (desc !== undefined && desc.enumerable) {\n if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {\n to[nextKey] = {};\n if (nextSource[nextKey].__swiper__) {\n to[nextKey] = nextSource[nextKey];\n } else {\n extend(to[nextKey], nextSource[nextKey]);\n }\n } else {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n }\n return to;\n}\n\nfunction setCSSProperty(el, varName, varValue) {\n el.style.setProperty(varName, varValue);\n}\n\nfunction animateCSSModeScroll({ swiper, targetPosition, side }) {\n const window = getWindow();\n const startPosition = -swiper.translate;\n let startTime = null;\n let time;\n const duration = swiper.params.speed;\n\n swiper.wrapperEl.style.scrollSnapType = 'none';\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n\n const dir = targetPosition > startPosition ? 'next' : 'prev';\n\n const isOutOfBound = (current, target) => {\n return (dir === 'next' && current >= target) || (dir === 'prev' && current <= target);\n };\n\n const animate = () => {\n time = new Date().getTime();\n if (startTime === null) {\n startTime = time;\n }\n\n const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);\n const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;\n let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);\n\n if (isOutOfBound(currentPosition, targetPosition)) {\n currentPosition = targetPosition;\n }\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n if (isOutOfBound(currentPosition, targetPosition)) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.scrollSnapType = '';\n setTimeout(() => {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.scrollTo({\n [side]: currentPosition,\n });\n });\n window.cancelAnimationFrame(swiper.cssModeFrameID);\n return;\n }\n swiper.cssModeFrameID = window.requestAnimationFrame(animate);\n };\n animate();\n}\n\nexport {\n animateCSSModeScroll,\n deleteProps,\n nextTick,\n now,\n getTranslate,\n isObject,\n extend,\n getComputedStyle,\n setCSSProperty,\n};\n","import { getWindow, getDocument } from 'ssr-window';\n\nlet support;\n\nfunction calcSupport() {\n const window = getWindow();\n const document = getDocument();\n\n return {\n smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,\n\n touch: !!(\n 'ontouchstart' in window ||\n (window.DocumentTouch && document instanceof window.DocumentTouch)\n ),\n\n passiveListener: (function checkPassiveListener() {\n let supportsPassive = false;\n try {\n const opts = Object.defineProperty({}, 'passive', {\n // eslint-disable-next-line\n get() {\n supportsPassive = true;\n },\n });\n window.addEventListener('testPassiveListener', null, opts);\n } catch (e) {\n // No support\n }\n return supportsPassive;\n })(),\n\n gestures: (function checkGestures() {\n return 'ongesturestart' in window;\n })(),\n };\n}\n\nfunction getSupport() {\n if (!support) {\n support = calcSupport();\n }\n return support;\n}\n\nexport { getSupport };\n","import { getWindow } from 'ssr-window';\nimport { getSupport } from './get-support.js';\n\nlet deviceCached;\n\nfunction calcDevice({ userAgent } = {}) {\n const support = getSupport();\n const window = getWindow();\n const platform = window.navigator.platform;\n const ua = userAgent || window.navigator.userAgent;\n\n const device = {\n ios: false,\n android: false,\n };\n\n const screenWidth = window.screen.width;\n const screenHeight = window.screen.height;\n\n const android = ua.match(/(Android);?[\\s\\/]+([\\d.]+)?/); // eslint-disable-line\n let ipad = ua.match(/(iPad).*OS\\s([\\d_]+)/);\n const ipod = ua.match(/(iPod)(.*OS\\s([\\d_]+))?/);\n const iphone = !ipad && ua.match(/(iPhone\\sOS|iOS)\\s([\\d_]+)/);\n const windows = platform === 'Win32';\n let macos = platform === 'MacIntel';\n\n // iPadOs 13 fix\n const iPadScreens = [\n '1024x1366',\n '1366x1024',\n '834x1194',\n '1194x834',\n '834x1112',\n '1112x834',\n '768x1024',\n '1024x768',\n '820x1180',\n '1180x820',\n '810x1080',\n '1080x810',\n ];\n if (\n !ipad &&\n macos &&\n support.touch &&\n iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0\n ) {\n ipad = ua.match(/(Version)\\/([\\d.]+)/);\n if (!ipad) ipad = [0, 1, '13_0_0'];\n macos = false;\n }\n\n // Android\n if (android && !windows) {\n device.os = 'android';\n device.android = true;\n }\n if (ipad || iphone || ipod) {\n device.os = 'ios';\n device.ios = true;\n }\n\n // Export object\n return device;\n}\n\nfunction getDevice(overrides = {}) {\n if (!deviceCached) {\n deviceCached = calcDevice(overrides);\n }\n return deviceCached;\n}\n\nexport { getDevice };\n","import { getWindow } from 'ssr-window';\n\nlet browser;\n\nfunction calcBrowser() {\n const window = getWindow();\n function isSafari() {\n const ua = window.navigator.userAgent.toLowerCase();\n return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;\n }\n return {\n isSafari: isSafari(),\n isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent),\n };\n}\n\nfunction getBrowser() {\n if (!browser) {\n browser = calcBrowser();\n }\n return browser;\n}\n\nexport { getBrowser };\n","/* eslint-disable no-underscore-dangle */\n\nexport default {\n on(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n events.split(' ').forEach((event) => {\n if (!self.eventsListeners[event]) self.eventsListeners[event] = [];\n self.eventsListeners[event][method](handler);\n });\n return self;\n },\n\n once(events, handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n function onceHandler(...args) {\n self.off(events, onceHandler);\n if (onceHandler.__emitterProxy) {\n delete onceHandler.__emitterProxy;\n }\n handler.apply(self, args);\n }\n onceHandler.__emitterProxy = handler;\n return self.on(events, onceHandler, priority);\n },\n\n onAny(handler, priority) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (typeof handler !== 'function') return self;\n const method = priority ? 'unshift' : 'push';\n if (self.eventsAnyListeners.indexOf(handler) < 0) {\n self.eventsAnyListeners[method](handler);\n }\n return self;\n },\n\n offAny(handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsAnyListeners) return self;\n const index = self.eventsAnyListeners.indexOf(handler);\n if (index >= 0) {\n self.eventsAnyListeners.splice(index, 1);\n }\n return self;\n },\n\n off(events, handler) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n events.split(' ').forEach((event) => {\n if (typeof handler === 'undefined') {\n self.eventsListeners[event] = [];\n } else if (self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler, index) => {\n if (\n eventHandler === handler ||\n (eventHandler.__emitterProxy && eventHandler.__emitterProxy === handler)\n ) {\n self.eventsListeners[event].splice(index, 1);\n }\n });\n }\n });\n return self;\n },\n\n emit(...args) {\n const self = this;\n if (!self.eventsListeners || self.destroyed) return self;\n if (!self.eventsListeners) return self;\n let events;\n let data;\n let context;\n if (typeof args[0] === 'string' || Array.isArray(args[0])) {\n events = args[0];\n data = args.slice(1, args.length);\n context = self;\n } else {\n events = args[0].events;\n data = args[0].data;\n context = args[0].context || self;\n }\n data.unshift(context);\n const eventsArray = Array.isArray(events) ? events : events.split(' ');\n\n eventsArray.forEach((event) => {\n if (self.eventsAnyListeners && self.eventsAnyListeners.length) {\n self.eventsAnyListeners.forEach((eventHandler) => {\n eventHandler.apply(context, [event, ...data]);\n });\n }\n if (self.eventsListeners && self.eventsListeners[event]) {\n self.eventsListeners[event].forEach((eventHandler) => {\n eventHandler.apply(context, data);\n });\n }\n });\n return self;\n },\n};\n","import updateSize from './updateSize.js';\nimport updateSlides from './updateSlides.js';\nimport updateAutoHeight from './updateAutoHeight.js';\nimport updateSlidesOffset from './updateSlidesOffset.js';\nimport updateSlidesProgress from './updateSlidesProgress.js';\nimport updateProgress from './updateProgress.js';\nimport updateSlidesClasses from './updateSlidesClasses.js';\nimport updateActiveIndex from './updateActiveIndex.js';\nimport updateClickedSlide from './updateClickedSlide.js';\n\nexport default {\n updateSize,\n updateSlides,\n updateAutoHeight,\n updateSlidesOffset,\n updateSlidesProgress,\n updateProgress,\n updateSlidesClasses,\n updateActiveIndex,\n updateClickedSlide,\n};\n","export default function updateSize() {\n const swiper = this;\n let width;\n let height;\n const $el = swiper.$el;\n if (typeof swiper.params.width !== 'undefined' && swiper.params.width !== null) {\n width = swiper.params.width;\n } else {\n width = $el[0].clientWidth;\n }\n if (typeof swiper.params.height !== 'undefined' && swiper.params.height !== null) {\n height = swiper.params.height;\n } else {\n height = $el[0].clientHeight;\n }\n if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) {\n return;\n }\n\n // Subtract paddings\n width =\n width -\n parseInt($el.css('padding-left') || 0, 10) -\n parseInt($el.css('padding-right') || 0, 10);\n height =\n height -\n parseInt($el.css('padding-top') || 0, 10) -\n parseInt($el.css('padding-bottom') || 0, 10);\n\n if (Number.isNaN(width)) width = 0;\n if (Number.isNaN(height)) height = 0;\n\n Object.assign(swiper, {\n width,\n height,\n size: swiper.isHorizontal() ? width : height,\n });\n}\n","import { setCSSProperty } from '../../shared/utils.js';\n\nexport default function updateSlides() {\n const swiper = this;\n function getDirectionLabel(property) {\n if (swiper.isHorizontal()) {\n return property;\n }\n // prettier-ignore\n return {\n 'width': 'height',\n 'margin-top': 'margin-left',\n 'margin-bottom ': 'margin-right',\n 'margin-left': 'margin-top',\n 'margin-right': 'margin-bottom',\n 'padding-left': 'padding-top',\n 'padding-right': 'padding-bottom',\n 'marginRight': 'marginBottom',\n }[property];\n }\n function getDirectionPropertyValue(node, label) {\n return parseFloat(node.getPropertyValue(getDirectionLabel(label)) || 0);\n }\n\n const params = swiper.params;\n\n const { $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;\n const slides = $wrapperEl.children(`.${swiper.params.slideClass}`);\n const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;\n let snapGrid = [];\n const slidesGrid = [];\n const slidesSizesGrid = [];\n\n let offsetBefore = params.slidesOffsetBefore;\n if (typeof offsetBefore === 'function') {\n offsetBefore = params.slidesOffsetBefore.call(swiper);\n }\n\n let offsetAfter = params.slidesOffsetAfter;\n if (typeof offsetAfter === 'function') {\n offsetAfter = params.slidesOffsetAfter.call(swiper);\n }\n\n const previousSnapGridLength = swiper.snapGrid.length;\n const previousSlidesGridLength = swiper.slidesGrid.length;\n\n let spaceBetween = params.spaceBetween;\n let slidePosition = -offsetBefore;\n let prevSlideSize = 0;\n let index = 0;\n if (typeof swiperSize === 'undefined') {\n return;\n }\n if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {\n spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize;\n }\n\n swiper.virtualSize = -spaceBetween;\n\n // reset margins\n if (rtl) slides.css({ marginLeft: '', marginBottom: '', marginTop: '' });\n else slides.css({ marginRight: '', marginBottom: '', marginTop: '' });\n\n // reset cssMode offsets\n if (params.centeredSlides && params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', '');\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-after', '');\n }\n\n const gridEnabled = params.grid && params.grid.rows > 1 && swiper.grid;\n if (gridEnabled) {\n swiper.grid.initSlides(slidesLength);\n }\n\n // Calc slides\n let slideSize;\n\n const shouldResetSlideSize =\n params.slidesPerView === 'auto' &&\n params.breakpoints &&\n Object.keys(params.breakpoints).filter((key) => {\n return typeof params.breakpoints[key].slidesPerView !== 'undefined';\n }).length > 0;\n\n for (let i = 0; i < slidesLength; i += 1) {\n slideSize = 0;\n const slide = slides.eq(i);\n if (gridEnabled) {\n swiper.grid.updateSlide(i, slide, slidesLength, getDirectionLabel);\n }\n if (slide.css('display') === 'none') continue; // eslint-disable-line\n\n if (params.slidesPerView === 'auto') {\n if (shouldResetSlideSize) {\n slides[i].style[getDirectionLabel('width')] = ``;\n }\n const slideStyles = getComputedStyle(slide[0]);\n const currentTransform = slide[0].style.transform;\n const currentWebKitTransform = slide[0].style.webkitTransform;\n if (currentTransform) {\n slide[0].style.transform = 'none';\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = 'none';\n }\n if (params.roundLengths) {\n slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);\n } else {\n // eslint-disable-next-line\n const width = getDirectionPropertyValue(slideStyles, 'width');\n const paddingLeft = getDirectionPropertyValue(slideStyles, 'padding-left');\n const paddingRight = getDirectionPropertyValue(slideStyles, 'padding-right');\n const marginLeft = getDirectionPropertyValue(slideStyles, 'margin-left');\n const marginRight = getDirectionPropertyValue(slideStyles, 'margin-right');\n const boxSizing = slideStyles.getPropertyValue('box-sizing');\n if (boxSizing && boxSizing === 'border-box') {\n slideSize = width + marginLeft + marginRight;\n } else {\n const { clientWidth, offsetWidth } = slide[0];\n slideSize =\n width +\n paddingLeft +\n paddingRight +\n marginLeft +\n marginRight +\n (offsetWidth - clientWidth);\n }\n }\n if (currentTransform) {\n slide[0].style.transform = currentTransform;\n }\n if (currentWebKitTransform) {\n slide[0].style.webkitTransform = currentWebKitTransform;\n }\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n } else {\n slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;\n if (params.roundLengths) slideSize = Math.floor(slideSize);\n\n if (slides[i]) {\n slides[i].style[getDirectionLabel('width')] = `${slideSize}px`;\n }\n }\n if (slides[i]) {\n slides[i].swiperSlideSize = slideSize;\n }\n slidesSizesGrid.push(slideSize);\n\n if (params.centeredSlides) {\n slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;\n if (prevSlideSize === 0 && i !== 0)\n slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;\n if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n } else {\n if (params.roundLengths) slidePosition = Math.floor(slidePosition);\n if (\n (index - Math.min(swiper.params.slidesPerGroupSkip, index)) %\n swiper.params.slidesPerGroup ===\n 0\n )\n snapGrid.push(slidePosition);\n slidesGrid.push(slidePosition);\n slidePosition = slidePosition + slideSize + spaceBetween;\n }\n\n swiper.virtualSize += slideSize + spaceBetween;\n\n prevSlideSize = slideSize;\n\n index += 1;\n }\n swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;\n\n if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {\n $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` });\n }\n if (params.setWrapperSize) {\n $wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + params.spaceBetween}px`,\n });\n }\n\n if (gridEnabled) {\n swiper.grid.updateWrapperSize(slideSize, snapGrid, getDirectionLabel);\n }\n\n // Remove last grid elements depending on width\n if (!params.centeredSlides) {\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] <= swiper.virtualSize - swiperSize) {\n newSlidesGrid.push(slidesGridItem);\n }\n }\n snapGrid = newSlidesGrid;\n\n if (\n Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) >\n 1\n ) {\n snapGrid.push(swiper.virtualSize - swiperSize);\n }\n }\n if (snapGrid.length === 0) snapGrid = [0];\n\n if (params.spaceBetween !== 0) {\n const key = swiper.isHorizontal() && rtl ? 'marginLeft' : getDirectionLabel('marginRight');\n slides\n .filter((_, slideIndex) => {\n if (!params.cssMode) return true;\n if (slideIndex === slides.length - 1) {\n return false;\n }\n return true;\n })\n .css({ [key]: `${spaceBetween}px` });\n }\n\n if (params.centeredSlides && params.centeredSlidesBounds) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n const maxSnap = allSlidesSize - swiperSize;\n snapGrid = snapGrid.map((snap) => {\n if (snap < 0) return -offsetBefore;\n if (snap > maxSnap) return maxSnap + offsetAfter;\n return snap;\n });\n }\n\n if (params.centerInsufficientSlides) {\n let allSlidesSize = 0;\n slidesSizesGrid.forEach((slideSizeValue) => {\n allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);\n });\n allSlidesSize -= params.spaceBetween;\n if (allSlidesSize < swiperSize) {\n const allSlidesOffset = (swiperSize - allSlidesSize) / 2;\n snapGrid.forEach((snap, snapIndex) => {\n snapGrid[snapIndex] = snap - allSlidesOffset;\n });\n slidesGrid.forEach((snap, snapIndex) => {\n slidesGrid[snapIndex] = snap + allSlidesOffset;\n });\n }\n }\n\n Object.assign(swiper, {\n slides,\n snapGrid,\n slidesGrid,\n slidesSizesGrid,\n });\n\n if (params.centeredSlides && params.cssMode && !params.centeredSlidesBounds) {\n setCSSProperty(swiper.wrapperEl, '--swiper-centered-offset-before', `${-snapGrid[0]}px`);\n setCSSProperty(\n swiper.wrapperEl,\n '--swiper-centered-offset-after',\n `${swiper.size / 2 - slidesSizesGrid[slidesSizesGrid.length - 1] / 2}px`,\n );\n const addToSnapGrid = -swiper.snapGrid[0];\n const addToSlidesGrid = -swiper.slidesGrid[0];\n swiper.snapGrid = swiper.snapGrid.map((v) => v + addToSnapGrid);\n swiper.slidesGrid = swiper.slidesGrid.map((v) => v + addToSlidesGrid);\n }\n\n if (slidesLength !== previousSlidesLength) {\n swiper.emit('slidesLengthChange');\n }\n if (snapGrid.length !== previousSnapGridLength) {\n if (swiper.params.watchOverflow) swiper.checkOverflow();\n swiper.emit('snapGridLengthChange');\n }\n if (slidesGrid.length !== previousSlidesGridLength) {\n swiper.emit('slidesGridLengthChange');\n }\n\n if (params.watchSlidesProgress) {\n swiper.updateSlidesOffset();\n }\n\n if (!isVirtual && !params.cssMode && (params.effect === 'slide' || params.effect === 'fade')) {\n const backFaceHiddenClass = `${params.containerModifierClass}backface-hidden`;\n const hasClassBackfaceClassAdded = swiper.$el.hasClass(backFaceHiddenClass);\n if (slidesLength <= params.maxBackfaceHiddenSlides) {\n if (!hasClassBackfaceClassAdded) swiper.$el.addClass(backFaceHiddenClass);\n } else if (hasClassBackfaceClassAdded) {\n swiper.$el.removeClass(backFaceHiddenClass);\n }\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateAutoHeight(speed) {\n const swiper = this;\n const activeSlides = [];\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let newHeight = 0;\n let i;\n if (typeof speed === 'number') {\n swiper.setTransition(speed);\n } else if (speed === true) {\n swiper.setTransition(swiper.params.speed);\n }\n\n const getSlideByIndex = (index) => {\n if (isVirtual) {\n return swiper.slides.filter(\n (el) => parseInt(el.getAttribute('data-swiper-slide-index'), 10) === index,\n )[0];\n }\n return swiper.slides.eq(index)[0];\n };\n // Find slides currently in view\n if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {\n if (swiper.params.centeredSlides) {\n (swiper.visibleSlides || $([])).each((slide) => {\n activeSlides.push(slide);\n });\n } else {\n for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {\n const index = swiper.activeIndex + i;\n if (index > swiper.slides.length && !isVirtual) break;\n activeSlides.push(getSlideByIndex(index));\n }\n }\n } else {\n activeSlides.push(getSlideByIndex(swiper.activeIndex));\n }\n\n // Find new height from highest slide in view\n for (i = 0; i < activeSlides.length; i += 1) {\n if (typeof activeSlides[i] !== 'undefined') {\n const height = activeSlides[i].offsetHeight;\n newHeight = height > newHeight ? height : newHeight;\n }\n }\n\n // Update Height\n if (newHeight || newHeight === 0) swiper.$wrapperEl.css('height', `${newHeight}px`);\n}\n","export default function updateSlidesOffset() {\n const swiper = this;\n const slides = swiper.slides;\n for (let i = 0; i < slides.length; i += 1) {\n slides[i].swiperSlideOffset = swiper.isHorizontal()\n ? slides[i].offsetLeft\n : slides[i].offsetTop;\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateSlidesProgress(translate = (this && this.translate) || 0) {\n const swiper = this;\n const params = swiper.params;\n\n const { slides, rtlTranslate: rtl, snapGrid } = swiper;\n\n if (slides.length === 0) return;\n if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();\n\n let offsetCenter = -translate;\n if (rtl) offsetCenter = translate;\n\n // Visible Slides\n slides.removeClass(params.slideVisibleClass);\n\n swiper.visibleSlidesIndexes = [];\n swiper.visibleSlides = [];\n\n for (let i = 0; i < slides.length; i += 1) {\n const slide = slides[i];\n let slideOffset = slide.swiperSlideOffset;\n if (params.cssMode && params.centeredSlides) {\n slideOffset -= slides[0].swiperSlideOffset;\n }\n\n const slideProgress =\n (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slideOffset) /\n (slide.swiperSlideSize + params.spaceBetween);\n const originalSlideProgress =\n (offsetCenter -\n snapGrid[0] +\n (params.centeredSlides ? swiper.minTranslate() : 0) -\n slideOffset) /\n (slide.swiperSlideSize + params.spaceBetween);\n const slideBefore = -(offsetCenter - slideOffset);\n const slideAfter = slideBefore + swiper.slidesSizesGrid[i];\n const isVisible =\n (slideBefore >= 0 && slideBefore < swiper.size - 1) ||\n (slideAfter > 1 && slideAfter <= swiper.size) ||\n (slideBefore <= 0 && slideAfter >= swiper.size);\n if (isVisible) {\n swiper.visibleSlides.push(slide);\n swiper.visibleSlidesIndexes.push(i);\n slides.eq(i).addClass(params.slideVisibleClass);\n }\n slide.progress = rtl ? -slideProgress : slideProgress;\n slide.originalProgress = rtl ? -originalSlideProgress : originalSlideProgress;\n }\n swiper.visibleSlides = $(swiper.visibleSlides);\n}\n","export default function updateProgress(translate) {\n const swiper = this;\n if (typeof translate === 'undefined') {\n const multiplier = swiper.rtlTranslate ? -1 : 1;\n // eslint-disable-next-line\n translate = (swiper && swiper.translate && swiper.translate * multiplier) || 0;\n }\n const params = swiper.params;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n let { progress, isBeginning, isEnd } = swiper;\n const wasBeginning = isBeginning;\n const wasEnd = isEnd;\n if (translatesDiff === 0) {\n progress = 0;\n isBeginning = true;\n isEnd = true;\n } else {\n progress = (translate - swiper.minTranslate()) / translatesDiff;\n isBeginning = progress <= 0;\n isEnd = progress >= 1;\n }\n Object.assign(swiper, {\n progress,\n isBeginning,\n isEnd,\n });\n\n if (params.watchSlidesProgress || (params.centeredSlides && params.autoHeight))\n swiper.updateSlidesProgress(translate);\n\n if (isBeginning && !wasBeginning) {\n swiper.emit('reachBeginning toEdge');\n }\n if (isEnd && !wasEnd) {\n swiper.emit('reachEnd toEdge');\n }\n if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) {\n swiper.emit('fromEdge');\n }\n\n swiper.emit('progress', progress);\n}\n","export default function updateSlidesClasses() {\n const swiper = this;\n\n const { slides, params, $wrapperEl, activeIndex, realIndex } = swiper;\n const isVirtual = swiper.virtual && params.virtual.enabled;\n\n slides.removeClass(\n `${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`,\n );\n\n let activeSlide;\n if (isVirtual) {\n activeSlide = swiper.$wrapperEl.find(\n `.${params.slideClass}[data-swiper-slide-index=\"${activeIndex}\"]`,\n );\n } else {\n activeSlide = slides.eq(activeIndex);\n }\n\n // Active classes\n activeSlide.addClass(params.slideActiveClass);\n\n if (params.loop) {\n // Duplicate to all looped slides\n if (activeSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index=\"${realIndex}\"]`,\n )\n .addClass(params.slideDuplicateActiveClass);\n }\n }\n // Next Slide\n let nextSlide = activeSlide\n .nextAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slideNextClass);\n if (params.loop && nextSlide.length === 0) {\n nextSlide = slides.eq(0);\n nextSlide.addClass(params.slideNextClass);\n }\n // Prev Slide\n let prevSlide = activeSlide\n .prevAll(`.${params.slideClass}`)\n .eq(0)\n .addClass(params.slidePrevClass);\n if (params.loop && prevSlide.length === 0) {\n prevSlide = slides.eq(-1);\n prevSlide.addClass(params.slidePrevClass);\n }\n if (params.loop) {\n // Duplicate to all looped slides\n if (nextSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${nextSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicateNextClass);\n }\n if (prevSlide.hasClass(params.slideDuplicateClass)) {\n $wrapperEl\n .children(\n `.${params.slideClass}:not(.${\n params.slideDuplicateClass\n })[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n } else {\n $wrapperEl\n .children(\n `.${params.slideClass}.${\n params.slideDuplicateClass\n }[data-swiper-slide-index=\"${prevSlide.attr('data-swiper-slide-index')}\"]`,\n )\n .addClass(params.slideDuplicatePrevClass);\n }\n }\n swiper.emitSlidesClasses();\n}\n","export default function updateActiveIndex(newActiveIndex) {\n const swiper = this;\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n const {\n slidesGrid,\n snapGrid,\n params,\n activeIndex: previousIndex,\n realIndex: previousRealIndex,\n snapIndex: previousSnapIndex,\n } = swiper;\n let activeIndex = newActiveIndex;\n let snapIndex;\n if (typeof activeIndex === 'undefined') {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n translate >= slidesGrid[i] &&\n translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2\n ) {\n activeIndex = i;\n } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {\n activeIndex = i + 1;\n }\n } else if (translate >= slidesGrid[i]) {\n activeIndex = i;\n }\n }\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;\n }\n }\n if (snapGrid.indexOf(translate) >= 0) {\n snapIndex = snapGrid.indexOf(translate);\n } else {\n const skip = Math.min(params.slidesPerGroupSkip, activeIndex);\n snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup);\n }\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n if (activeIndex === previousIndex) {\n if (snapIndex !== previousSnapIndex) {\n swiper.snapIndex = snapIndex;\n swiper.emit('snapIndexChange');\n }\n return;\n }\n\n // Get real index\n const realIndex = parseInt(\n swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex,\n 10,\n );\n\n Object.assign(swiper, {\n snapIndex,\n realIndex,\n previousIndex,\n activeIndex,\n });\n swiper.emit('activeIndexChange');\n swiper.emit('snapIndexChange');\n if (previousRealIndex !== realIndex) {\n swiper.emit('realIndexChange');\n }\n if (swiper.initialized || swiper.params.runCallbacksOnInit) {\n swiper.emit('slideChange');\n }\n}\n","import $ from '../../shared/dom.js';\n\nexport default function updateClickedSlide(e) {\n const swiper = this;\n const params = swiper.params;\n const slide = $(e).closest(`.${params.slideClass}`)[0];\n let slideFound = false;\n let slideIndex;\n\n if (slide) {\n for (let i = 0; i < swiper.slides.length; i += 1) {\n if (swiper.slides[i] === slide) {\n slideFound = true;\n slideIndex = i;\n break;\n }\n }\n }\n\n if (slide && slideFound) {\n swiper.clickedSlide = slide;\n if (swiper.virtual && swiper.params.virtual.enabled) {\n swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);\n } else {\n swiper.clickedIndex = slideIndex;\n }\n } else {\n swiper.clickedSlide = undefined;\n swiper.clickedIndex = undefined;\n return;\n }\n if (\n params.slideToClickedSlide &&\n swiper.clickedIndex !== undefined &&\n swiper.clickedIndex !== swiper.activeIndex\n ) {\n swiper.slideToClickedSlide();\n }\n}\n","import getTranslate from './getTranslate.js';\nimport setTranslate from './setTranslate.js';\nimport minTranslate from './minTranslate.js';\nimport maxTranslate from './maxTranslate.js';\nimport translateTo from './translateTo.js';\n\nexport default {\n getTranslate,\n setTranslate,\n minTranslate,\n maxTranslate,\n translateTo,\n};\n","import { getTranslate } from '../../shared/utils.js';\n\nexport default function getSwiperTranslate(axis = this.isHorizontal() ? 'x' : 'y') {\n const swiper = this;\n\n const { params, rtlTranslate: rtl, translate, $wrapperEl } = swiper;\n\n if (params.virtualTranslate) {\n return rtl ? -translate : translate;\n }\n if (params.cssMode) {\n return translate;\n }\n\n let currentTranslate = getTranslate($wrapperEl[0], axis);\n if (rtl) currentTranslate = -currentTranslate;\n\n return currentTranslate || 0;\n}\n","export default function setTranslate(translate, byController) {\n const swiper = this;\n const { rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress } = swiper;\n let x = 0;\n let y = 0;\n const z = 0;\n\n if (swiper.isHorizontal()) {\n x = rtl ? -translate : translate;\n } else {\n y = translate;\n }\n\n if (params.roundLengths) {\n x = Math.floor(x);\n y = Math.floor(y);\n }\n\n if (params.cssMode) {\n wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y;\n } else if (!params.virtualTranslate) {\n $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`);\n }\n swiper.previousTranslate = swiper.translate;\n swiper.translate = swiper.isHorizontal() ? x : y;\n\n // Check if we need to update progress\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== progress) {\n swiper.updateProgress(translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, byController);\n}\n","export default function minTranslate() {\n return -this.snapGrid[0];\n}\n","export default function maxTranslate() {\n return -this.snapGrid[this.snapGrid.length - 1];\n}\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function translateTo(\n translate = 0,\n speed = this.params.speed,\n runCallbacks = true,\n translateBounds = true,\n internal,\n) {\n const swiper = this;\n\n const { params, wrapperEl } = swiper;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return false;\n }\n\n const minTranslate = swiper.minTranslate();\n const maxTranslate = swiper.maxTranslate();\n let newTranslate;\n if (translateBounds && translate > minTranslate) newTranslate = minTranslate;\n else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate;\n else newTranslate = translate;\n\n // Update progress\n swiper.updateProgress(newTranslate);\n\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n if (speed === 0) {\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate;\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: -newTranslate, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: -newTranslate,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n if (speed === 0) {\n swiper.setTransition(0);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionEnd');\n }\n } else {\n swiper.setTransition(speed);\n swiper.setTranslate(newTranslate);\n if (runCallbacks) {\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.emit('transitionStart');\n }\n if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onTranslateToWrapperTransitionEnd) {\n swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.onTranslateToWrapperTransitionEnd = null;\n delete swiper.onTranslateToWrapperTransitionEnd;\n if (runCallbacks) {\n swiper.emit('transitionEnd');\n }\n };\n }\n swiper.$wrapperEl[0].addEventListener(\n 'transitionend',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onTranslateToWrapperTransitionEnd,\n );\n }\n }\n\n return true;\n}\n","export default function transitionEmit({ swiper, runCallbacks, direction, step }) {\n const { activeIndex, previousIndex } = swiper;\n let dir = direction;\n if (!dir) {\n if (activeIndex > previousIndex) dir = 'next';\n else if (activeIndex < previousIndex) dir = 'prev';\n else dir = 'reset';\n }\n\n swiper.emit(`transition${step}`);\n\n if (runCallbacks && activeIndex !== previousIndex) {\n if (dir === 'reset') {\n swiper.emit(`slideResetTransition${step}`);\n return;\n }\n swiper.emit(`slideChangeTransition${step}`);\n if (dir === 'next') {\n swiper.emit(`slideNextTransition${step}`);\n } else {\n swiper.emit(`slidePrevTransition${step}`);\n }\n }\n}\n","import slideTo from './slideTo.js';\nimport slideToLoop from './slideToLoop.js';\nimport slideNext from './slideNext.js';\nimport slidePrev from './slidePrev.js';\nimport slideReset from './slideReset.js';\nimport slideToClosest from './slideToClosest.js';\nimport slideToClickedSlide from './slideToClickedSlide.js';\n\nexport default {\n slideTo,\n slideToLoop,\n slideNext,\n slidePrev,\n slideReset,\n slideToClosest,\n slideToClickedSlide,\n};\n","import { animateCSSModeScroll } from '../../shared/utils.js';\n\nexport default function slideTo(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n initial,\n) {\n if (typeof index !== 'number' && typeof index !== 'string') {\n throw new Error(\n `The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`,\n );\n }\n\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(\n `The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`,\n );\n }\n\n // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n index = indexAsNumber;\n }\n\n const swiper = this;\n let slideIndex = index;\n if (slideIndex < 0) slideIndex = 0;\n\n const {\n params,\n snapGrid,\n slidesGrid,\n previousIndex,\n activeIndex,\n rtlTranslate: rtl,\n wrapperEl,\n enabled,\n } = swiper;\n\n if (\n (swiper.animating && params.preventInteractionOnTransition) ||\n (!enabled && !internal && !initial)\n ) {\n return false;\n }\n\n const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex);\n let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup);\n if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;\n\n const translate = -snapGrid[snapIndex];\n\n // Normalize slideIndex\n if (params.normalizeSlideIndex) {\n for (let i = 0; i < slidesGrid.length; i += 1) {\n const normalizedTranslate = -Math.floor(translate * 100);\n const normalizedGrid = Math.floor(slidesGrid[i] * 100);\n const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100);\n if (typeof slidesGrid[i + 1] !== 'undefined') {\n if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2\n ) {\n slideIndex = i;\n } else if (\n normalizedTranslate >= normalizedGrid &&\n normalizedTranslate < normalizedGridNext\n ) {\n slideIndex = i + 1;\n }\n } else if (normalizedTranslate >= normalizedGrid) {\n slideIndex = i;\n }\n }\n }\n // Directions locks\n if (swiper.initialized && slideIndex !== activeIndex) {\n if (\n !swiper.allowSlideNext &&\n translate < swiper.translate &&\n translate < swiper.minTranslate()\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n translate > swiper.translate &&\n translate > swiper.maxTranslate()\n ) {\n if ((activeIndex || 0) !== slideIndex) return false;\n }\n }\n\n if (slideIndex !== (previousIndex || 0) && runCallbacks) {\n swiper.emit('beforeSlideChangeStart');\n }\n\n // Update progress\n swiper.updateProgress(translate);\n\n let direction;\n if (slideIndex > activeIndex) direction = 'next';\n else if (slideIndex < activeIndex) direction = 'prev';\n else direction = 'reset';\n\n // Update Index\n if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) {\n swiper.updateActiveIndex(slideIndex);\n // Update Height\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n swiper.updateSlidesClasses();\n if (params.effect !== 'slide') {\n swiper.setTranslate(translate);\n }\n if (direction !== 'reset') {\n swiper.transitionStart(runCallbacks, direction);\n swiper.transitionEnd(runCallbacks, direction);\n }\n return false;\n }\n if (params.cssMode) {\n const isH = swiper.isHorizontal();\n const t = rtl ? translate : -translate;\n if (speed === 0) {\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n if (isVirtual) {\n swiper.wrapperEl.style.scrollSnapType = 'none';\n swiper._immediateVirtual = true;\n }\n wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t;\n if (isVirtual) {\n requestAnimationFrame(() => {\n swiper.wrapperEl.style.scrollSnapType = '';\n swiper._swiperImmediateVirtual = false;\n });\n }\n } else {\n if (!swiper.support.smoothScroll) {\n animateCSSModeScroll({ swiper, targetPosition: t, side: isH ? 'left' : 'top' });\n return true;\n }\n wrapperEl.scrollTo({\n [isH ? 'left' : 'top']: t,\n behavior: 'smooth',\n });\n }\n return true;\n }\n\n swiper.setTransition(speed);\n swiper.setTranslate(translate);\n swiper.updateActiveIndex(slideIndex);\n swiper.updateSlidesClasses();\n swiper.emit('beforeTransitionStart', speed, internal);\n swiper.transitionStart(runCallbacks, direction);\n\n if (speed === 0) {\n swiper.transitionEnd(runCallbacks, direction);\n } else if (!swiper.animating) {\n swiper.animating = true;\n if (!swiper.onSlideToWrapperTransitionEnd) {\n swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {\n if (!swiper || swiper.destroyed) return;\n if (e.target !== this) return;\n swiper.$wrapperEl[0].removeEventListener(\n 'transitionend',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.$wrapperEl[0].removeEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n swiper.onSlideToWrapperTransitionEnd = null;\n delete swiper.onSlideToWrapperTransitionEnd;\n swiper.transitionEnd(runCallbacks, direction);\n };\n }\n swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);\n swiper.$wrapperEl[0].addEventListener(\n 'webkitTransitionEnd',\n swiper.onSlideToWrapperTransitionEnd,\n );\n }\n\n return true;\n}\n","export default function slideToLoop(\n index = 0,\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n) {\n if (typeof index === 'string') {\n /**\n * The `index` argument converted from `string` to `number`.\n * @type {number}\n */\n const indexAsNumber = parseInt(index, 10);\n\n /**\n * Determines whether the `index` argument is a valid `number`\n * after being converted from the `string` type.\n * @type {boolean}\n */\n const isValidNumber = isFinite(indexAsNumber);\n\n if (!isValidNumber) {\n throw new Error(\n `The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`,\n );\n }\n\n // Knowing that the converted `index` is a valid number,\n // we can update the original argument's value.\n index = indexAsNumber;\n }\n\n const swiper = this;\n let newIndex = index;\n if (swiper.params.loop) {\n newIndex += swiper.loopedSlides;\n }\n\n return swiper.slideTo(newIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideNext(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { animating, enabled, params } = swiper;\n if (!enabled) return swiper;\n let perGroup = params.slidesPerGroup;\n if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) {\n perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1);\n }\n const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup;\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n if (params.rewind && swiper.isEnd) {\n return swiper.slideTo(0, speed, runCallbacks, internal);\n }\n return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n const { params, animating, snapGrid, slidesGrid, rtlTranslate, enabled } = swiper;\n if (!enabled) return swiper;\n\n if (params.loop) {\n if (animating && params.loopPreventsSlide) return false;\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n }\n const translate = rtlTranslate ? swiper.translate : -swiper.translate;\n\n function normalize(val) {\n if (val < 0) return -Math.floor(Math.abs(val));\n return Math.floor(val);\n }\n const normalizedTranslate = normalize(translate);\n const normalizedSnapGrid = snapGrid.map((val) => normalize(val));\n\n let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];\n if (typeof prevSnap === 'undefined' && params.cssMode) {\n let prevSnapIndex;\n snapGrid.forEach((snap, snapIndex) => {\n if (normalizedTranslate >= snap) {\n // prevSnap = snap;\n prevSnapIndex = snapIndex;\n }\n });\n if (typeof prevSnapIndex !== 'undefined') {\n prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex];\n }\n }\n let prevIndex = 0;\n if (typeof prevSnap !== 'undefined') {\n prevIndex = slidesGrid.indexOf(prevSnap);\n if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;\n if (\n params.slidesPerView === 'auto' &&\n params.slidesPerGroup === 1 &&\n params.slidesPerGroupAuto\n ) {\n prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1;\n prevIndex = Math.max(prevIndex, 0);\n }\n }\n if (params.rewind && swiper.isBeginning) {\n const lastIndex =\n swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual\n ? swiper.virtual.slides.length - 1\n : swiper.slides.length - 1;\n return swiper.slideTo(lastIndex, speed, runCallbacks, internal);\n }\n return swiper.slideTo(prevIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideReset(speed = this.params.speed, runCallbacks = true, internal) {\n const swiper = this;\n return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);\n}\n","/* eslint no-unused-vars: \"off\" */\nexport default function slideToClosest(\n speed = this.params.speed,\n runCallbacks = true,\n internal,\n threshold = 0.5,\n) {\n const swiper = this;\n let index = swiper.activeIndex;\n const skip = Math.min(swiper.params.slidesPerGroupSkip, index);\n const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup);\n\n const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;\n\n if (translate >= swiper.snapGrid[snapIndex]) {\n // The current translate is on or after the current snap index, so the choice\n // is between the current index and the one after it.\n const currentSnap = swiper.snapGrid[snapIndex];\n const nextSnap = swiper.snapGrid[snapIndex + 1];\n if (translate - currentSnap > (nextSnap - currentSnap) * threshold) {\n index += swiper.params.slidesPerGroup;\n }\n } else {\n // The current translate is before the current snap index, so the choice\n // is between the current index and the one before it.\n const prevSnap = swiper.snapGrid[snapIndex - 1];\n const currentSnap = swiper.snapGrid[snapIndex];\n if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) {\n index -= swiper.params.slidesPerGroup;\n }\n }\n index = Math.max(index, 0);\n index = Math.min(index, swiper.slidesGrid.length - 1);\n\n return swiper.slideTo(index, speed, runCallbacks, internal);\n}\n","import $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function slideToClickedSlide() {\n const swiper = this;\n const { params, $wrapperEl } = swiper;\n\n const slidesPerView =\n params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;\n let slideToIndex = swiper.clickedIndex;\n let realIndex;\n if (params.loop) {\n if (swiper.animating) return;\n realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n if (params.centeredSlides) {\n if (\n slideToIndex < swiper.loopedSlides - slidesPerView / 2 ||\n slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2\n ) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else if (slideToIndex > swiper.slides.length - slidesPerView) {\n swiper.loopFix();\n slideToIndex = $wrapperEl\n .children(\n `.${params.slideClass}[data-swiper-slide-index=\"${realIndex}\"]:not(.${params.slideDuplicateClass})`,\n )\n .eq(0)\n .index();\n\n nextTick(() => {\n swiper.slideTo(slideToIndex);\n });\n } else {\n swiper.slideTo(slideToIndex);\n }\n } else {\n swiper.slideTo(slideToIndex);\n }\n}\n","import loopCreate from './loopCreate.js';\nimport loopFix from './loopFix.js';\nimport loopDestroy from './loopDestroy.js';\n\nexport default {\n loopCreate,\n loopFix,\n loopDestroy,\n};\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loopCreate() {\n const swiper = this;\n const document = getDocument();\n const { params, $wrapperEl } = swiper;\n // Remove duplicated slides\n const $selector =\n $wrapperEl.children().length > 0 ? $($wrapperEl.children()[0].parentNode) : $wrapperEl;\n $selector.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove();\n\n let slides = $selector.children(`.${params.slideClass}`);\n\n if (params.loopFillGroupWithBlank) {\n const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup);\n if (blankSlidesNum !== params.slidesPerGroup) {\n for (let i = 0; i < blankSlidesNum; i += 1) {\n const blankNode = $(document.createElement('div')).addClass(\n `${params.slideClass} ${params.slideBlankClass}`,\n );\n $selector.append(blankNode);\n }\n slides = $selector.children(`.${params.slideClass}`);\n }\n }\n\n if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;\n\n swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10));\n swiper.loopedSlides += params.loopAdditionalSlides;\n if (swiper.loopedSlides > slides.length && swiper.params.loopedSlidesLimit) {\n swiper.loopedSlides = slides.length;\n }\n\n const prependSlides = [];\n const appendSlides = [];\n\n slides.each((el, index) => {\n const slide = $(el);\n slide.attr('data-swiper-slide-index', index);\n });\n\n for (let i = 0; i < swiper.loopedSlides; i += 1) {\n const index = i - Math.floor(i / slides.length) * slides.length;\n appendSlides.push(slides.eq(index)[0]);\n prependSlides.unshift(slides.eq(slides.length - index - 1)[0]);\n }\n\n for (let i = 0; i < appendSlides.length; i += 1) {\n $selector.append($(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n for (let i = prependSlides.length - 1; i >= 0; i -= 1) {\n $selector.prepend($(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass));\n }\n}\n","export default function loopFix() {\n const swiper = this;\n\n swiper.emit('beforeLoopFix');\n\n const {\n activeIndex,\n slides,\n loopedSlides,\n allowSlidePrev,\n allowSlideNext,\n snapGrid,\n rtlTranslate: rtl,\n } = swiper;\n let newIndex;\n swiper.allowSlidePrev = true;\n swiper.allowSlideNext = true;\n\n const snapTranslate = -snapGrid[activeIndex];\n const diff = snapTranslate - swiper.getTranslate();\n\n // Fix For Negative Oversliding\n if (activeIndex < loopedSlides) {\n newIndex = slides.length - loopedSlides * 3 + activeIndex;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n } else if (activeIndex >= slides.length - loopedSlides) {\n // Fix For Positive Oversliding\n newIndex = -slides.length + activeIndex + loopedSlides;\n newIndex += loopedSlides;\n const slideChanged = swiper.slideTo(newIndex, 0, false, true);\n if (slideChanged && diff !== 0) {\n swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);\n }\n }\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n swiper.emit('loopFix');\n}\n","export default function loopDestroy() {\n const swiper = this;\n const { $wrapperEl, params, slides } = swiper;\n $wrapperEl\n .children(\n `.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`,\n )\n .remove();\n slides.removeAttr('data-swiper-slide-index');\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\n// Modified from https://stackoverflow.com/questions/54520554/custom-element-getrootnode-closest-function-crossing-multiple-parent-shadowd\nfunction closestElement(selector, base = this) {\n function __closestFrom(el) {\n if (!el || el === getDocument() || el === getWindow()) return null;\n if (el.assignedSlot) el = el.assignedSlot;\n const found = el.closest(selector);\n if (!found && !el.getRootNode) {\n return null;\n }\n return found || __closestFrom(el.getRootNode().host);\n }\n return __closestFrom(base);\n}\n\nexport default function onTouchStart(event) {\n const swiper = this;\n const document = getDocument();\n const window = getWindow();\n\n const data = swiper.touchEventsData;\n const { params, touches, enabled } = swiper;\n if (!enabled) return;\n\n if (swiper.animating && params.preventInteractionOnTransition) {\n return;\n }\n if (!swiper.animating && params.cssMode && params.loop) {\n swiper.loopFix();\n }\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n let $targetEl = $(e.target);\n\n if (params.touchEventsTarget === 'wrapper') {\n if (!$targetEl.closest(swiper.wrapperEl).length) return;\n }\n data.isTouchEvent = e.type === 'touchstart';\n if (!data.isTouchEvent && 'which' in e && e.which === 3) return;\n if (!data.isTouchEvent && 'button' in e && e.button > 0) return;\n if (data.isTouched && data.isMoved) return;\n\n // change target el for shadow root component\n const swipingClassHasValue = !!params.noSwipingClass && params.noSwipingClass !== '';\n // eslint-disable-next-line\n const eventPath = event.composedPath ? event.composedPath() : event.path;\n if (swipingClassHasValue && e.target && e.target.shadowRoot && eventPath) {\n $targetEl = $(eventPath[0]);\n }\n\n const noSwipingSelector = params.noSwipingSelector\n ? params.noSwipingSelector\n : `.${params.noSwipingClass}`;\n const isTargetShadow = !!(e.target && e.target.shadowRoot);\n\n // use closestElement for shadow root element to get the actual closest for nested shadow root element\n if (\n params.noSwiping &&\n (isTargetShadow\n ? closestElement(noSwipingSelector, $targetEl[0])\n : $targetEl.closest(noSwipingSelector)[0])\n ) {\n swiper.allowClick = true;\n return;\n }\n\n if (params.swipeHandler) {\n if (!$targetEl.closest(params.swipeHandler)[0]) return;\n }\n\n touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n const startX = touches.currentX;\n const startY = touches.currentY;\n\n // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore\n\n const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;\n const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;\n if (\n edgeSwipeDetection &&\n (startX <= edgeSwipeThreshold || startX >= window.innerWidth - edgeSwipeThreshold)\n ) {\n if (edgeSwipeDetection === 'prevent') {\n event.preventDefault();\n } else {\n return;\n }\n }\n\n Object.assign(data, {\n isTouched: true,\n isMoved: false,\n allowTouchCallbacks: true,\n isScrolling: undefined,\n startMoving: undefined,\n });\n\n touches.startX = startX;\n touches.startY = startY;\n data.touchStartTime = now();\n swiper.allowClick = true;\n swiper.updateSize();\n swiper.swipeDirection = undefined;\n if (params.threshold > 0) data.allowThresholdMove = false;\n if (e.type !== 'touchstart') {\n let preventDefault = true;\n if ($targetEl.is(data.focusableElements)) {\n preventDefault = false;\n if ($targetEl[0].nodeName === 'SELECT') {\n data.isTouched = false;\n }\n }\n if (\n document.activeElement &&\n $(document.activeElement).is(data.focusableElements) &&\n document.activeElement !== $targetEl[0]\n ) {\n document.activeElement.blur();\n }\n\n const shouldPreventDefault =\n preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;\n if (\n (params.touchStartForcePreventDefault || shouldPreventDefault) &&\n !$targetEl[0].isContentEditable\n ) {\n e.preventDefault();\n }\n }\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n swiper.freeMode &&\n swiper.animating &&\n !params.cssMode\n ) {\n swiper.freeMode.onTouchStart();\n }\n swiper.emit('touchStart', e);\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now } from '../../shared/utils.js';\n\nexport default function onTouchMove(event) {\n const document = getDocument();\n const swiper = this;\n const data = swiper.touchEventsData;\n const { params, touches, rtlTranslate: rtl, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (!data.isTouched) {\n if (data.startMoving && data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n return;\n }\n if (data.isTouchEvent && e.type !== 'touchmove') return;\n const targetTouch =\n e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]);\n const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX;\n const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY;\n if (e.preventedByNestedSwiper) {\n touches.startX = pageX;\n touches.startY = pageY;\n return;\n }\n if (!swiper.allowTouchMove) {\n if (!$(e.target).is(data.focusableElements)) {\n swiper.allowClick = false;\n }\n if (data.isTouched) {\n Object.assign(touches, {\n startX: pageX,\n startY: pageY,\n currentX: pageX,\n currentY: pageY,\n });\n data.touchStartTime = now();\n }\n return;\n }\n if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {\n if (swiper.isVertical()) {\n // Vertical\n if (\n (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) ||\n (pageY > touches.startY && swiper.translate >= swiper.minTranslate())\n ) {\n data.isTouched = false;\n data.isMoved = false;\n return;\n }\n } else if (\n (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) ||\n (pageX > touches.startX && swiper.translate >= swiper.minTranslate())\n ) {\n return;\n }\n }\n if (data.isTouchEvent && document.activeElement) {\n if (e.target === document.activeElement && $(e.target).is(data.focusableElements)) {\n data.isMoved = true;\n swiper.allowClick = false;\n return;\n }\n }\n if (data.allowTouchCallbacks) {\n swiper.emit('touchMove', e);\n }\n if (e.targetTouches && e.targetTouches.length > 1) return;\n\n touches.currentX = pageX;\n touches.currentY = pageY;\n\n const diffX = touches.currentX - touches.startX;\n const diffY = touches.currentY - touches.startY;\n if (swiper.params.threshold && Math.sqrt(diffX ** 2 + diffY ** 2) < swiper.params.threshold)\n return;\n\n if (typeof data.isScrolling === 'undefined') {\n let touchAngle;\n if (\n (swiper.isHorizontal() && touches.currentY === touches.startY) ||\n (swiper.isVertical() && touches.currentX === touches.startX)\n ) {\n data.isScrolling = false;\n } else {\n // eslint-disable-next-line\n if (diffX * diffX + diffY * diffY >= 25) {\n touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI;\n data.isScrolling = swiper.isHorizontal()\n ? touchAngle > params.touchAngle\n : 90 - touchAngle > params.touchAngle;\n }\n }\n }\n if (data.isScrolling) {\n swiper.emit('touchMoveOpposite', e);\n }\n if (typeof data.startMoving === 'undefined') {\n if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {\n data.startMoving = true;\n }\n }\n if (data.isScrolling) {\n data.isTouched = false;\n return;\n }\n if (!data.startMoving) {\n return;\n }\n swiper.allowClick = false;\n if (!params.cssMode && e.cancelable) {\n e.preventDefault();\n }\n if (params.touchMoveStopPropagation && !params.nested) {\n e.stopPropagation();\n }\n\n if (!data.isMoved) {\n if (params.loop && !params.cssMode) {\n swiper.loopFix();\n }\n data.startTranslate = swiper.getTranslate();\n swiper.setTransition(0);\n if (swiper.animating) {\n swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');\n }\n data.allowMomentumBounce = false;\n // Grab Cursor\n if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {\n swiper.setGrabCursor(true);\n }\n swiper.emit('sliderFirstMove', e);\n }\n swiper.emit('sliderMove', e);\n data.isMoved = true;\n\n let diff = swiper.isHorizontal() ? diffX : diffY;\n touches.diff = diff;\n\n diff *= params.touchRatio;\n if (rtl) diff = -diff;\n\n swiper.swipeDirection = diff > 0 ? 'prev' : 'next';\n data.currentTranslate = diff + data.startTranslate;\n\n let disableParentSwiper = true;\n let resistanceRatio = params.resistanceRatio;\n if (params.touchReleaseOnEdges) {\n resistanceRatio = 0;\n }\n if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.minTranslate() -\n 1 +\n (-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio;\n } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {\n disableParentSwiper = false;\n if (params.resistance)\n data.currentTranslate =\n swiper.maxTranslate() +\n 1 -\n (swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio;\n }\n\n if (disableParentSwiper) {\n e.preventedByNestedSwiper = true;\n }\n\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n swiper.swipeDirection === 'next' &&\n data.currentTranslate < data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (\n !swiper.allowSlidePrev &&\n swiper.swipeDirection === 'prev' &&\n data.currentTranslate > data.startTranslate\n ) {\n data.currentTranslate = data.startTranslate;\n }\n if (!swiper.allowSlidePrev && !swiper.allowSlideNext) {\n data.currentTranslate = data.startTranslate;\n }\n\n // Threshold\n if (params.threshold > 0) {\n if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {\n if (!data.allowThresholdMove) {\n data.allowThresholdMove = true;\n touches.startX = touches.currentX;\n touches.startY = touches.currentY;\n data.currentTranslate = data.startTranslate;\n touches.diff = swiper.isHorizontal()\n ? touches.currentX - touches.startX\n : touches.currentY - touches.startY;\n return;\n }\n } else {\n data.currentTranslate = data.startTranslate;\n return;\n }\n }\n\n if (!params.followFinger || params.cssMode) return;\n\n // Update active index in free mode\n if (\n (params.freeMode && params.freeMode.enabled && swiper.freeMode) ||\n params.watchSlidesProgress\n ) {\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n if (swiper.params.freeMode && params.freeMode.enabled && swiper.freeMode) {\n swiper.freeMode.onTouchMove();\n }\n // Update progress\n swiper.updateProgress(data.currentTranslate);\n // Update translate\n swiper.setTranslate(data.currentTranslate);\n}\n","import { now, nextTick } from '../../shared/utils.js';\n\nexport default function onTouchEnd(event) {\n const swiper = this;\n const data = swiper.touchEventsData;\n\n const { params, touches, rtlTranslate: rtl, slidesGrid, enabled } = swiper;\n if (!enabled) return;\n let e = event;\n if (e.originalEvent) e = e.originalEvent;\n if (data.allowTouchCallbacks) {\n swiper.emit('touchEnd', e);\n }\n data.allowTouchCallbacks = false;\n if (!data.isTouched) {\n if (data.isMoved && params.grabCursor) {\n swiper.setGrabCursor(false);\n }\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n // Return Grab Cursor\n if (\n params.grabCursor &&\n data.isMoved &&\n data.isTouched &&\n (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)\n ) {\n swiper.setGrabCursor(false);\n }\n\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n // Tap, doubleTap, Click\n if (swiper.allowClick) {\n const pathTree = e.path || (e.composedPath && e.composedPath());\n swiper.updateClickedSlide((pathTree && pathTree[0]) || e.target);\n swiper.emit('tap click', e);\n if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {\n swiper.emit('doubleTap doubleClick', e);\n }\n }\n\n data.lastClickTime = now();\n nextTick(() => {\n if (!swiper.destroyed) swiper.allowClick = true;\n });\n\n if (\n !data.isTouched ||\n !data.isMoved ||\n !swiper.swipeDirection ||\n touches.diff === 0 ||\n data.currentTranslate === data.startTranslate\n ) {\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n return;\n }\n data.isTouched = false;\n data.isMoved = false;\n data.startMoving = false;\n\n let currentPos;\n if (params.followFinger) {\n currentPos = rtl ? swiper.translate : -swiper.translate;\n } else {\n currentPos = -data.currentTranslate;\n }\n\n if (params.cssMode) {\n return;\n }\n\n if (swiper.params.freeMode && params.freeMode.enabled) {\n swiper.freeMode.onTouchEnd({ currentPos });\n return;\n }\n\n // Find current slide\n let stopIndex = 0;\n let groupSize = swiper.slidesSizesGrid[0];\n for (\n let i = 0;\n i < slidesGrid.length;\n i += i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup\n ) {\n const increment = i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (typeof slidesGrid[i + increment] !== 'undefined') {\n if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) {\n stopIndex = i;\n groupSize = slidesGrid[i + increment] - slidesGrid[i];\n }\n } else if (currentPos >= slidesGrid[i]) {\n stopIndex = i;\n groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];\n }\n }\n\n let rewindFirstIndex = null;\n let rewindLastIndex = null;\n if (params.rewind) {\n if (swiper.isBeginning) {\n rewindLastIndex =\n swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual\n ? swiper.virtual.slides.length - 1\n : swiper.slides.length - 1;\n } else if (swiper.isEnd) {\n rewindFirstIndex = 0;\n }\n }\n // Find current slide size\n const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;\n const increment = stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup;\n if (timeDiff > params.longSwipesMs) {\n // Long touches\n if (!params.longSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (swiper.swipeDirection === 'next') {\n if (ratio >= params.longSwipesRatio)\n swiper.slideTo(params.rewind && swiper.isEnd ? rewindFirstIndex : stopIndex + increment);\n else swiper.slideTo(stopIndex);\n }\n if (swiper.swipeDirection === 'prev') {\n if (ratio > 1 - params.longSwipesRatio) {\n swiper.slideTo(stopIndex + increment);\n } else if (\n rewindLastIndex !== null &&\n ratio < 0 &&\n Math.abs(ratio) > params.longSwipesRatio\n ) {\n swiper.slideTo(rewindLastIndex);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n } else {\n // Short swipes\n if (!params.shortSwipes) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n const isNavButtonTarget =\n swiper.navigation &&\n (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl);\n if (!isNavButtonTarget) {\n if (swiper.swipeDirection === 'next') {\n swiper.slideTo(rewindFirstIndex !== null ? rewindFirstIndex : stopIndex + increment);\n }\n if (swiper.swipeDirection === 'prev') {\n swiper.slideTo(rewindLastIndex !== null ? rewindLastIndex : stopIndex);\n }\n } else if (e.target === swiper.navigation.nextEl) {\n swiper.slideTo(stopIndex + increment);\n } else {\n swiper.slideTo(stopIndex);\n }\n }\n}\n","export default function onResize() {\n const swiper = this;\n\n const { params, el } = swiper;\n\n if (el && el.offsetWidth === 0) return;\n\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Save locks\n const { allowSlideNext, allowSlidePrev, snapGrid } = swiper;\n\n // Disable locks on resize\n swiper.allowSlideNext = true;\n swiper.allowSlidePrev = true;\n\n swiper.updateSize();\n swiper.updateSlides();\n\n swiper.updateSlidesClasses();\n if (\n (params.slidesPerView === 'auto' || params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.isBeginning &&\n !swiper.params.centeredSlides\n ) {\n swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n\n if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {\n swiper.autoplay.run();\n }\n // Return locks after resize\n swiper.allowSlidePrev = allowSlidePrev;\n swiper.allowSlideNext = allowSlideNext;\n\n if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n}\n","export default function onClick(e) {\n const swiper = this;\n if (!swiper.enabled) return;\n if (!swiper.allowClick) {\n if (swiper.params.preventClicks) e.preventDefault();\n if (swiper.params.preventClicksPropagation && swiper.animating) {\n e.stopPropagation();\n e.stopImmediatePropagation();\n }\n }\n}\n","export default function onScroll() {\n const swiper = this;\n const { wrapperEl, rtlTranslate, enabled } = swiper;\n if (!enabled) return;\n swiper.previousTranslate = swiper.translate;\n if (swiper.isHorizontal()) {\n swiper.translate = -wrapperEl.scrollLeft;\n } else {\n swiper.translate = -wrapperEl.scrollTop;\n }\n // eslint-disable-next-line\n if (swiper.translate === 0) swiper.translate = 0;\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n let newProgress;\n const translatesDiff = swiper.maxTranslate() - swiper.minTranslate();\n if (translatesDiff === 0) {\n newProgress = 0;\n } else {\n newProgress = (swiper.translate - swiper.minTranslate()) / translatesDiff;\n }\n if (newProgress !== swiper.progress) {\n swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate);\n }\n\n swiper.emit('setTranslate', swiper.translate, false);\n}\n","import { getDocument } from 'ssr-window';\n\nimport onTouchStart from './onTouchStart.js';\nimport onTouchMove from './onTouchMove.js';\nimport onTouchEnd from './onTouchEnd.js';\nimport onResize from './onResize.js';\nimport onClick from './onClick.js';\nimport onScroll from './onScroll.js';\n\nlet dummyEventAttached = false;\nfunction dummyEventListener() {}\n\nconst events = (swiper, method) => {\n const document = getDocument();\n const { params, touchEvents, el, wrapperEl, device, support } = swiper;\n const capture = !!params.nested;\n const domMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n const swiperMethod = method;\n\n // Touch Events\n if (!support.touch) {\n el[domMethod](touchEvents.start, swiper.onTouchStart, false);\n document[domMethod](touchEvents.move, swiper.onTouchMove, capture);\n document[domMethod](touchEvents.end, swiper.onTouchEnd, false);\n } else {\n const passiveListener =\n touchEvents.start === 'touchstart' && support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n el[domMethod](touchEvents.start, swiper.onTouchStart, passiveListener);\n el[domMethod](\n touchEvents.move,\n swiper.onTouchMove,\n support.passiveListener ? { passive: false, capture } : capture,\n );\n el[domMethod](touchEvents.end, swiper.onTouchEnd, passiveListener);\n if (touchEvents.cancel) {\n el[domMethod](touchEvents.cancel, swiper.onTouchEnd, passiveListener);\n }\n }\n // Prevent Links Clicks\n if (params.preventClicks || params.preventClicksPropagation) {\n el[domMethod]('click', swiper.onClick, true);\n }\n if (params.cssMode) {\n wrapperEl[domMethod]('scroll', swiper.onScroll);\n }\n\n // Resize handler\n if (params.updateOnWindowResize) {\n swiper[swiperMethod](\n device.ios || device.android\n ? 'resize orientationchange observerUpdate'\n : 'resize observerUpdate',\n onResize,\n true,\n );\n } else {\n swiper[swiperMethod]('observerUpdate', onResize, true);\n }\n};\n\nfunction attachEvents() {\n const swiper = this;\n const document = getDocument();\n const { params, support } = swiper;\n\n swiper.onTouchStart = onTouchStart.bind(swiper);\n swiper.onTouchMove = onTouchMove.bind(swiper);\n swiper.onTouchEnd = onTouchEnd.bind(swiper);\n\n if (params.cssMode) {\n swiper.onScroll = onScroll.bind(swiper);\n }\n\n swiper.onClick = onClick.bind(swiper);\n\n if (support.touch && !dummyEventAttached) {\n document.addEventListener('touchstart', dummyEventListener);\n dummyEventAttached = true;\n }\n\n events(swiper, 'on');\n}\n\nfunction detachEvents() {\n const swiper = this;\n events(swiper, 'off');\n}\n\nexport default {\n attachEvents,\n detachEvents,\n};\n","import { extend } from '../../shared/utils.js';\n\nconst isGridEnabled = (swiper, params) => {\n return swiper.grid && params.grid && params.grid.rows > 1;\n};\n\nexport default function setBreakpoint() {\n const swiper = this;\n const { activeIndex, initialized, loopedSlides = 0, params, $el } = swiper;\n const breakpoints = params.breakpoints;\n if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return;\n\n // Get breakpoint for window width and update parameters\n const breakpoint = swiper.getBreakpoint(breakpoints, swiper.params.breakpointsBase, swiper.el);\n\n if (!breakpoint || swiper.currentBreakpoint === breakpoint) return;\n\n const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;\n const breakpointParams = breakpointOnlyParams || swiper.originalParams;\n const wasMultiRow = isGridEnabled(swiper, params);\n const isMultiRow = isGridEnabled(swiper, breakpointParams);\n\n const wasEnabled = params.enabled;\n\n if (wasMultiRow && !isMultiRow) {\n $el.removeClass(\n `${params.containerModifierClass}grid ${params.containerModifierClass}grid-column`,\n );\n swiper.emitContainerClasses();\n } else if (!wasMultiRow && isMultiRow) {\n $el.addClass(`${params.containerModifierClass}grid`);\n if (\n (breakpointParams.grid.fill && breakpointParams.grid.fill === 'column') ||\n (!breakpointParams.grid.fill && params.grid.fill === 'column')\n ) {\n $el.addClass(`${params.containerModifierClass}grid-column`);\n }\n swiper.emitContainerClasses();\n }\n\n // Toggle navigation, pagination, scrollbar\n ['navigation', 'pagination', 'scrollbar'].forEach((prop) => {\n const wasModuleEnabled = params[prop] && params[prop].enabled;\n const isModuleEnabled = breakpointParams[prop] && breakpointParams[prop].enabled;\n if (wasModuleEnabled && !isModuleEnabled) {\n swiper[prop].disable();\n }\n if (!wasModuleEnabled && isModuleEnabled) {\n swiper[prop].enable();\n }\n });\n\n const directionChanged =\n breakpointParams.direction && breakpointParams.direction !== params.direction;\n const needsReLoop =\n params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);\n\n if (directionChanged && initialized) {\n swiper.changeDirection();\n }\n extend(swiper.params, breakpointParams);\n\n const isEnabled = swiper.params.enabled;\n\n Object.assign(swiper, {\n allowTouchMove: swiper.params.allowTouchMove,\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n });\n\n if (wasEnabled && !isEnabled) {\n swiper.disable();\n } else if (!wasEnabled && isEnabled) {\n swiper.enable();\n }\n\n swiper.currentBreakpoint = breakpoint;\n\n swiper.emit('_beforeBreakpoint', breakpointParams);\n\n if (needsReLoop && initialized) {\n swiper.loopDestroy();\n swiper.loopCreate();\n swiper.updateSlides();\n swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);\n }\n\n swiper.emit('breakpoint', breakpointParams);\n}\n","import addClasses from './addClasses.js';\nimport removeClasses from './removeClasses.js';\n\nexport default { addClasses, removeClasses };\n","function prepareClasses(entries, prefix) {\n const resultClasses = [];\n entries.forEach((item) => {\n if (typeof item === 'object') {\n Object.keys(item).forEach((classNames) => {\n if (item[classNames]) {\n resultClasses.push(prefix + classNames);\n }\n });\n } else if (typeof item === 'string') {\n resultClasses.push(prefix + item);\n }\n });\n return resultClasses;\n}\n\nexport default function addClasses() {\n const swiper = this;\n const { classNames, params, rtl, $el, device, support } = swiper;\n // prettier-ignore\n const suffixes = prepareClasses([\n 'initialized',\n params.direction,\n { 'pointer-events': !support.touch },\n { 'free-mode': swiper.params.freeMode && params.freeMode.enabled },\n { 'autoheight': params.autoHeight },\n { 'rtl': rtl },\n { 'grid': params.grid && params.grid.rows > 1 },\n { 'grid-column': params.grid && params.grid.rows > 1 && params.grid.fill === 'column' },\n { 'android': device.android },\n { 'ios': device.ios },\n { 'css-mode': params.cssMode },\n { 'centered': params.cssMode && params.centeredSlides },\n { 'watch-progress': params.watchSlidesProgress },\n ], params.containerModifierClass);\n classNames.push(...suffixes);\n $el.addClass([...classNames].join(' '));\n swiper.emitContainerClasses();\n}\n","export default function removeClasses() {\n const swiper = this;\n const { $el, classNames } = swiper;\n\n $el.removeClass(classNames.join(' '));\n swiper.emitContainerClasses();\n}\n","function checkOverflow() {\n const swiper = this;\n const { isLocked: wasLocked, params } = swiper;\n const { slidesOffsetBefore } = params;\n\n if (slidesOffsetBefore) {\n const lastSlideIndex = swiper.slides.length - 1;\n const lastSlideRightEdge =\n swiper.slidesGrid[lastSlideIndex] +\n swiper.slidesSizesGrid[lastSlideIndex] +\n slidesOffsetBefore * 2;\n swiper.isLocked = swiper.size > lastSlideRightEdge;\n } else {\n swiper.isLocked = swiper.snapGrid.length === 1;\n }\n if (params.allowSlideNext === true) {\n swiper.allowSlideNext = !swiper.isLocked;\n }\n if (params.allowSlidePrev === true) {\n swiper.allowSlidePrev = !swiper.isLocked;\n }\n\n if (wasLocked && wasLocked !== swiper.isLocked) {\n swiper.isEnd = false;\n }\n if (wasLocked !== swiper.isLocked) {\n swiper.emit(swiper.isLocked ? 'lock' : 'unlock');\n }\n}\n\nexport default { checkOverflow };\n","export default {\n init: true,\n direction: 'horizontal',\n touchEventsTarget: 'wrapper',\n initialSlide: 0,\n speed: 300,\n cssMode: false,\n updateOnWindowResize: true,\n resizeObserver: true,\n nested: false,\n createElements: false,\n enabled: true,\n focusableElements: 'input, select, option, textarea, button, video, label',\n\n // Overrides\n width: null,\n height: null,\n\n //\n preventInteractionOnTransition: false,\n\n // ssr\n userAgent: null,\n url: null,\n\n // To support iOS's swipe-to-go-back gesture (when being used in-app).\n edgeSwipeDetection: false,\n edgeSwipeThreshold: 20,\n\n // Autoheight\n autoHeight: false,\n\n // Set wrapper width\n setWrapperSize: false,\n\n // Virtual Translate\n virtualTranslate: false,\n\n // Effects\n effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'\n\n // Breakpoints\n breakpoints: undefined,\n breakpointsBase: 'window',\n\n // Slides grid\n spaceBetween: 0,\n slidesPerView: 1,\n slidesPerGroup: 1,\n slidesPerGroupSkip: 0,\n slidesPerGroupAuto: false,\n centeredSlides: false,\n centeredSlidesBounds: false,\n slidesOffsetBefore: 0, // in px\n slidesOffsetAfter: 0, // in px\n normalizeSlideIndex: true,\n centerInsufficientSlides: false,\n\n // Disable swiper and hide navigation when container not overflow\n watchOverflow: true,\n\n // Round length\n roundLengths: false,\n\n // Touches\n touchRatio: 1,\n touchAngle: 45,\n simulateTouch: true,\n shortSwipes: true,\n longSwipes: true,\n longSwipesRatio: 0.5,\n longSwipesMs: 300,\n followFinger: true,\n allowTouchMove: true,\n threshold: 0,\n touchMoveStopPropagation: false,\n touchStartPreventDefault: true,\n touchStartForcePreventDefault: false,\n touchReleaseOnEdges: false,\n\n // Unique Navigation Elements\n uniqueNavElements: true,\n\n // Resistance\n resistance: true,\n resistanceRatio: 0.85,\n\n // Progress\n watchSlidesProgress: false,\n\n // Cursor\n grabCursor: false,\n\n // Clicks\n preventClicks: true,\n preventClicksPropagation: true,\n slideToClickedSlide: false,\n\n // Images\n preloadImages: true,\n updateOnImagesReady: true,\n\n // loop\n loop: false,\n loopAdditionalSlides: 0,\n loopedSlides: null,\n loopedSlidesLimit: true,\n loopFillGroupWithBlank: false,\n loopPreventsSlide: true,\n\n // rewind\n rewind: false,\n\n // Swiping/no swiping\n allowSlidePrev: true,\n allowSlideNext: true,\n swipeHandler: null, // '.swipe-handler',\n noSwiping: true,\n noSwipingClass: 'swiper-no-swiping',\n noSwipingSelector: null,\n\n // Passive Listeners\n passiveListeners: true,\n\n maxBackfaceHiddenSlides: 10,\n\n // NS\n containerModifierClass: 'swiper-', // NEW\n slideClass: 'swiper-slide',\n slideBlankClass: 'swiper-slide-invisible-blank',\n slideActiveClass: 'swiper-slide-active',\n slideDuplicateActiveClass: 'swiper-slide-duplicate-active',\n slideVisibleClass: 'swiper-slide-visible',\n slideDuplicateClass: 'swiper-slide-duplicate',\n slideNextClass: 'swiper-slide-next',\n slideDuplicateNextClass: 'swiper-slide-duplicate-next',\n slidePrevClass: 'swiper-slide-prev',\n slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',\n wrapperClass: 'swiper-wrapper',\n\n // Callbacks\n runCallbacksOnInit: true,\n\n // Internals\n _emitClasses: false,\n};\n","import { extend } from '../shared/utils.js';\n\nexport default function moduleExtendParams(params, allModulesParams) {\n return function extendParams(obj = {}) {\n const moduleParamName = Object.keys(obj)[0];\n const moduleParams = obj[moduleParamName];\n if (typeof moduleParams !== 'object' || moduleParams === null) {\n extend(allModulesParams, obj);\n return;\n }\n if (\n ['navigation', 'pagination', 'scrollbar'].indexOf(moduleParamName) >= 0 &&\n params[moduleParamName] === true\n ) {\n params[moduleParamName] = { auto: true };\n }\n if (!(moduleParamName in params && 'enabled' in moduleParams)) {\n extend(allModulesParams, obj);\n return;\n }\n if (params[moduleParamName] === true) {\n params[moduleParamName] = { enabled: true };\n }\n if (typeof params[moduleParamName] === 'object' && !('enabled' in params[moduleParamName])) {\n params[moduleParamName].enabled = true;\n }\n if (!params[moduleParamName]) params[moduleParamName] = { enabled: false };\n extend(allModulesParams, obj);\n };\n}\n","/* eslint no-param-reassign: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport $ from '../shared/dom.js';\nimport { extend, now, deleteProps } from '../shared/utils.js';\nimport { getSupport } from '../shared/get-support.js';\nimport { getDevice } from '../shared/get-device.js';\nimport { getBrowser } from '../shared/get-browser.js';\n\nimport Resize from './modules/resize/resize.js';\nimport Observer from './modules/observer/observer.js';\n\nimport eventsEmitter from './events-emitter.js';\n\nimport update from './update/index.js';\nimport translate from './translate/index.js';\nimport transition from './transition/index.js';\nimport slide from './slide/index.js';\nimport loop from './loop/index.js';\nimport grabCursor from './grab-cursor/index.js';\nimport events from './events/index.js';\nimport breakpoints from './breakpoints/index.js';\nimport classes from './classes/index.js';\nimport images from './images/index.js';\nimport checkOverflow from './check-overflow/index.js';\n\nimport defaults from './defaults.js';\nimport moduleExtendParams from './moduleExtendParams.js';\n\nconst prototypes = {\n eventsEmitter,\n update,\n translate,\n transition,\n slide,\n loop,\n grabCursor,\n events,\n breakpoints,\n checkOverflow,\n classes,\n images,\n};\n\nconst extendedDefaults = {};\n\nclass Swiper {\n constructor(...args) {\n let el;\n let params;\n if (\n args.length === 1 &&\n args[0].constructor &&\n Object.prototype.toString.call(args[0]).slice(8, -1) === 'Object'\n ) {\n params = args[0];\n } else {\n [el, params] = args;\n }\n if (!params) params = {};\n\n params = extend({}, params);\n if (el && !params.el) params.el = el;\n\n if (params.el && $(params.el).length > 1) {\n const swipers = [];\n $(params.el).each((containerEl) => {\n const newParams = extend({}, params, { el: containerEl });\n swipers.push(new Swiper(newParams));\n });\n // eslint-disable-next-line no-constructor-return\n return swipers;\n }\n\n // Swiper Instance\n const swiper = this;\n swiper.__swiper__ = true;\n swiper.support = getSupport();\n swiper.device = getDevice({ userAgent: params.userAgent });\n swiper.browser = getBrowser();\n\n swiper.eventsListeners = {};\n swiper.eventsAnyListeners = [];\n swiper.modules = [...swiper.__modules__];\n if (params.modules && Array.isArray(params.modules)) {\n swiper.modules.push(...params.modules);\n }\n\n const allModulesParams = {};\n\n swiper.modules.forEach((mod) => {\n mod({\n swiper,\n extendParams: moduleExtendParams(params, allModulesParams),\n on: swiper.on.bind(swiper),\n once: swiper.once.bind(swiper),\n off: swiper.off.bind(swiper),\n emit: swiper.emit.bind(swiper),\n });\n });\n\n // Extend defaults with modules params\n const swiperParams = extend({}, defaults, allModulesParams);\n\n // Extend defaults with passed params\n swiper.params = extend({}, swiperParams, extendedDefaults, params);\n swiper.originalParams = extend({}, swiper.params);\n swiper.passedParams = extend({}, params);\n\n // add event listeners\n if (swiper.params && swiper.params.on) {\n Object.keys(swiper.params.on).forEach((eventName) => {\n swiper.on(eventName, swiper.params.on[eventName]);\n });\n }\n if (swiper.params && swiper.params.onAny) {\n swiper.onAny(swiper.params.onAny);\n }\n\n // Save Dom lib\n swiper.$ = $;\n\n // Extend Swiper\n Object.assign(swiper, {\n enabled: swiper.params.enabled,\n el,\n\n // Classes\n classNames: [],\n\n // Slides\n slides: $(),\n slidesGrid: [],\n snapGrid: [],\n slidesSizesGrid: [],\n\n // isDirection\n isHorizontal() {\n return swiper.params.direction === 'horizontal';\n },\n isVertical() {\n return swiper.params.direction === 'vertical';\n },\n\n // Indexes\n activeIndex: 0,\n realIndex: 0,\n\n //\n isBeginning: true,\n isEnd: false,\n\n // Props\n translate: 0,\n previousTranslate: 0,\n progress: 0,\n velocity: 0,\n animating: false,\n\n // Locks\n allowSlideNext: swiper.params.allowSlideNext,\n allowSlidePrev: swiper.params.allowSlidePrev,\n\n // Touch Events\n touchEvents: (function touchEvents() {\n const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel'];\n const desktop = ['pointerdown', 'pointermove', 'pointerup'];\n\n swiper.touchEventsTouch = {\n start: touch[0],\n move: touch[1],\n end: touch[2],\n cancel: touch[3],\n };\n swiper.touchEventsDesktop = {\n start: desktop[0],\n move: desktop[1],\n end: desktop[2],\n };\n return swiper.support.touch || !swiper.params.simulateTouch\n ? swiper.touchEventsTouch\n : swiper.touchEventsDesktop;\n })(),\n touchEventsData: {\n isTouched: undefined,\n isMoved: undefined,\n allowTouchCallbacks: undefined,\n touchStartTime: undefined,\n isScrolling: undefined,\n currentTranslate: undefined,\n startTranslate: undefined,\n allowThresholdMove: undefined,\n // Form elements to match\n focusableElements: swiper.params.focusableElements,\n // Last click time\n lastClickTime: now(),\n clickTimeout: undefined,\n // Velocities\n velocities: [],\n allowMomentumBounce: undefined,\n isTouchEvent: undefined,\n startMoving: undefined,\n },\n\n // Clicks\n allowClick: true,\n\n // Touches\n allowTouchMove: swiper.params.allowTouchMove,\n\n touches: {\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n diff: 0,\n },\n\n // Images\n imagesToLoad: [],\n imagesLoaded: 0,\n });\n\n swiper.emit('_swiper');\n\n // Init\n if (swiper.params.init) {\n swiper.init();\n }\n\n // Return app instance\n // eslint-disable-next-line no-constructor-return\n return swiper;\n }\n\n enable() {\n const swiper = this;\n if (swiper.enabled) return;\n swiper.enabled = true;\n if (swiper.params.grabCursor) {\n swiper.setGrabCursor();\n }\n swiper.emit('enable');\n }\n\n disable() {\n const swiper = this;\n if (!swiper.enabled) return;\n swiper.enabled = false;\n if (swiper.params.grabCursor) {\n swiper.unsetGrabCursor();\n }\n swiper.emit('disable');\n }\n\n setProgress(progress, speed) {\n const swiper = this;\n progress = Math.min(Math.max(progress, 0), 1);\n const min = swiper.minTranslate();\n const max = swiper.maxTranslate();\n const current = (max - min) * progress + min;\n swiper.translateTo(current, typeof speed === 'undefined' ? 0 : speed);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n\n emitContainerClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const cls = swiper.el.className.split(' ').filter((className) => {\n return (\n className.indexOf('swiper') === 0 ||\n className.indexOf(swiper.params.containerModifierClass) === 0\n );\n });\n swiper.emit('_containerClasses', cls.join(' '));\n }\n\n getSlideClasses(slideEl) {\n const swiper = this;\n if (swiper.destroyed) return '';\n\n return slideEl.className\n .split(' ')\n .filter((className) => {\n return (\n className.indexOf('swiper-slide') === 0 ||\n className.indexOf(swiper.params.slideClass) === 0\n );\n })\n .join(' ');\n }\n\n emitSlidesClasses() {\n const swiper = this;\n if (!swiper.params._emitClasses || !swiper.el) return;\n const updates = [];\n swiper.slides.each((slideEl) => {\n const classNames = swiper.getSlideClasses(slideEl);\n updates.push({ slideEl, classNames });\n swiper.emit('_slideClass', slideEl, classNames);\n });\n swiper.emit('_slideClasses', updates);\n }\n\n slidesPerViewDynamic(view = 'current', exact = false) {\n const swiper = this;\n const { params, slides, slidesGrid, slidesSizesGrid, size: swiperSize, activeIndex } = swiper;\n let spv = 1;\n if (params.centeredSlides) {\n let slideSize = slides[activeIndex].swiperSlideSize;\n let breakLoop;\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n if (slides[i] && !breakLoop) {\n slideSize += slides[i].swiperSlideSize;\n spv += 1;\n if (slideSize > swiperSize) breakLoop = true;\n }\n }\n } else {\n // eslint-disable-next-line\n if (view === 'current') {\n for (let i = activeIndex + 1; i < slides.length; i += 1) {\n const slideInView = exact\n ? slidesGrid[i] + slidesSizesGrid[i] - slidesGrid[activeIndex] < swiperSize\n : slidesGrid[i] - slidesGrid[activeIndex] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n } else {\n // previous\n for (let i = activeIndex - 1; i >= 0; i -= 1) {\n const slideInView = slidesGrid[activeIndex] - slidesGrid[i] < swiperSize;\n if (slideInView) {\n spv += 1;\n }\n }\n }\n }\n return spv;\n }\n\n update() {\n const swiper = this;\n if (!swiper || swiper.destroyed) return;\n const { snapGrid, params } = swiper;\n // Breakpoints\n if (params.breakpoints) {\n swiper.setBreakpoint();\n }\n swiper.updateSize();\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n\n function setTranslate() {\n const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;\n const newTranslate = Math.min(\n Math.max(translateValue, swiper.maxTranslate()),\n swiper.minTranslate(),\n );\n swiper.setTranslate(newTranslate);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n let translated;\n if (swiper.params.freeMode && swiper.params.freeMode.enabled) {\n setTranslate();\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n } else {\n if (\n (swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) &&\n swiper.isEnd &&\n !swiper.params.centeredSlides\n ) {\n translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);\n } else {\n translated = swiper.slideTo(swiper.activeIndex, 0, false, true);\n }\n if (!translated) {\n setTranslate();\n }\n }\n if (params.watchOverflow && snapGrid !== swiper.snapGrid) {\n swiper.checkOverflow();\n }\n swiper.emit('update');\n }\n\n changeDirection(newDirection, needUpdate = true) {\n const swiper = this;\n const currentDirection = swiper.params.direction;\n if (!newDirection) {\n // eslint-disable-next-line\n newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';\n }\n if (\n newDirection === currentDirection ||\n (newDirection !== 'horizontal' && newDirection !== 'vertical')\n ) {\n return swiper;\n }\n\n swiper.$el\n .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`)\n .addClass(`${swiper.params.containerModifierClass}${newDirection}`);\n swiper.emitContainerClasses();\n\n swiper.params.direction = newDirection;\n\n swiper.slides.each((slideEl) => {\n if (newDirection === 'vertical') {\n slideEl.style.width = '';\n } else {\n slideEl.style.height = '';\n }\n });\n\n swiper.emit('changeDirection');\n if (needUpdate) swiper.update();\n\n return swiper;\n }\n\n changeLanguageDirection(direction) {\n const swiper = this;\n if ((swiper.rtl && direction === 'rtl') || (!swiper.rtl && direction === 'ltr')) return;\n swiper.rtl = direction === 'rtl';\n swiper.rtlTranslate = swiper.params.direction === 'horizontal' && swiper.rtl;\n if (swiper.rtl) {\n swiper.$el.addClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'rtl';\n } else {\n swiper.$el.removeClass(`${swiper.params.containerModifierClass}rtl`);\n swiper.el.dir = 'ltr';\n }\n swiper.update();\n }\n\n mount(el) {\n const swiper = this;\n if (swiper.mounted) return true;\n\n // Find el\n const $el = $(el || swiper.params.el);\n el = $el[0];\n\n if (!el) {\n return false;\n }\n\n el.swiper = swiper;\n\n const getWrapperSelector = () => {\n return `.${(swiper.params.wrapperClass || '').trim().split(' ').join('.')}`;\n };\n\n const getWrapper = () => {\n if (el && el.shadowRoot && el.shadowRoot.querySelector) {\n const res = $(el.shadowRoot.querySelector(getWrapperSelector()));\n // Children needs to return slot items\n res.children = (options) => $el.children(options);\n return res;\n }\n if (!$el.children) {\n return $($el).children(getWrapperSelector());\n }\n return $el.children(getWrapperSelector());\n };\n // Find Wrapper\n let $wrapperEl = getWrapper();\n if ($wrapperEl.length === 0 && swiper.params.createElements) {\n const document = getDocument();\n const wrapper = document.createElement('div');\n $wrapperEl = $(wrapper);\n wrapper.className = swiper.params.wrapperClass;\n $el.append(wrapper);\n $el.children(`.${swiper.params.slideClass}`).each((slideEl) => {\n $wrapperEl.append(slideEl);\n });\n }\n\n Object.assign(swiper, {\n $el,\n el,\n $wrapperEl,\n wrapperEl: $wrapperEl[0],\n mounted: true,\n\n // RTL\n rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',\n rtlTranslate:\n swiper.params.direction === 'horizontal' &&\n (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),\n wrongRTL: $wrapperEl.css('display') === '-webkit-box',\n });\n\n return true;\n }\n\n init(el) {\n const swiper = this;\n if (swiper.initialized) return swiper;\n\n const mounted = swiper.mount(el);\n if (mounted === false) return swiper;\n\n swiper.emit('beforeInit');\n\n // Set breakpoint\n if (swiper.params.breakpoints) {\n swiper.setBreakpoint();\n }\n\n // Add Classes\n swiper.addClasses();\n\n // Create loop\n if (swiper.params.loop) {\n swiper.loopCreate();\n }\n\n // Update size\n swiper.updateSize();\n\n // Update slides\n swiper.updateSlides();\n\n if (swiper.params.watchOverflow) {\n swiper.checkOverflow();\n }\n\n // Set Grab Cursor\n if (swiper.params.grabCursor && swiper.enabled) {\n swiper.setGrabCursor();\n }\n\n if (swiper.params.preloadImages) {\n swiper.preloadImages();\n }\n\n // Slide To Initial Slide\n if (swiper.params.loop) {\n swiper.slideTo(\n swiper.params.initialSlide + swiper.loopedSlides,\n 0,\n swiper.params.runCallbacksOnInit,\n false,\n true,\n );\n } else {\n swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit, false, true);\n }\n\n // Attach events\n swiper.attachEvents();\n\n // Init Flag\n swiper.initialized = true;\n\n // Emit\n swiper.emit('init');\n swiper.emit('afterInit');\n\n return swiper;\n }\n\n destroy(deleteInstance = true, cleanStyles = true) {\n const swiper = this;\n const { params, $el, $wrapperEl, slides } = swiper;\n\n if (typeof swiper.params === 'undefined' || swiper.destroyed) {\n return null;\n }\n\n swiper.emit('beforeDestroy');\n\n // Init Flag\n swiper.initialized = false;\n\n // Detach events\n swiper.detachEvents();\n\n // Destroy loop\n if (params.loop) {\n swiper.loopDestroy();\n }\n\n // Cleanup styles\n if (cleanStyles) {\n swiper.removeClasses();\n $el.removeAttr('style');\n $wrapperEl.removeAttr('style');\n if (slides && slides.length) {\n slides\n .removeClass(\n [\n params.slideVisibleClass,\n params.slideActiveClass,\n params.slideNextClass,\n params.slidePrevClass,\n ].join(' '),\n )\n .removeAttr('style')\n .removeAttr('data-swiper-slide-index');\n }\n }\n\n swiper.emit('destroy');\n\n // Detach emitter events\n Object.keys(swiper.eventsListeners).forEach((eventName) => {\n swiper.off(eventName);\n });\n\n if (deleteInstance !== false) {\n swiper.$el[0].swiper = null;\n deleteProps(swiper);\n }\n swiper.destroyed = true;\n\n return null;\n }\n\n static extendDefaults(newDefaults) {\n extend(extendedDefaults, newDefaults);\n }\n\n static get extendedDefaults() {\n return extendedDefaults;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static installModule(mod) {\n if (!Swiper.prototype.__modules__) Swiper.prototype.__modules__ = [];\n const modules = Swiper.prototype.__modules__;\n\n if (typeof mod === 'function' && modules.indexOf(mod) < 0) {\n modules.push(mod);\n }\n }\n\n static use(module) {\n if (Array.isArray(module)) {\n module.forEach((m) => Swiper.installModule(m));\n return Swiper;\n }\n Swiper.installModule(module);\n return Swiper;\n }\n}\n\nObject.keys(prototypes).forEach((prototypeGroup) => {\n Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => {\n Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];\n });\n});\n\nSwiper.use([Resize, Observer]);\n\nexport default Swiper;\n","import setTransition from './setTransition.js';\nimport transitionStart from './transitionStart.js';\nimport transitionEnd from './transitionEnd.js';\n\nexport default {\n setTransition,\n transitionStart,\n transitionEnd,\n};\n","export default function setTransition(duration, byController) {\n const swiper = this;\n\n if (!swiper.params.cssMode) {\n swiper.$wrapperEl.transition(duration);\n }\n\n swiper.emit('setTransition', duration, byController);\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionStart(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n if (params.cssMode) return;\n if (params.autoHeight) {\n swiper.updateAutoHeight();\n }\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'Start' });\n}\n","import transitionEmit from './transitionEmit.js';\n\nexport default function transitionEnd(runCallbacks = true, direction) {\n const swiper = this;\n const { params } = swiper;\n swiper.animating = false;\n if (params.cssMode) return;\n swiper.setTransition(0);\n\n transitionEmit({ swiper, runCallbacks, direction, step: 'End' });\n}\n","import setGrabCursor from './setGrabCursor.js';\nimport unsetGrabCursor from './unsetGrabCursor.js';\n\nexport default {\n setGrabCursor,\n unsetGrabCursor,\n};\n","export default function setGrabCursor(moving) {\n const swiper = this;\n if (\n swiper.support.touch ||\n !swiper.params.simulateTouch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n )\n return;\n const el = swiper.params.touchEventsTarget === 'container' ? swiper.el : swiper.wrapperEl;\n el.style.cursor = 'move';\n el.style.cursor = moving ? 'grabbing' : 'grab';\n}\n","export default function unsetGrabCursor() {\n const swiper = this;\n if (\n swiper.support.touch ||\n (swiper.params.watchOverflow && swiper.isLocked) ||\n swiper.params.cssMode\n ) {\n return;\n }\n swiper[swiper.params.touchEventsTarget === 'container' ? 'el' : 'wrapperEl'].style.cursor = '';\n}\n","import setBreakpoint from './setBreakpoint.js';\nimport getBreakpoint from './getBreakpoint.js';\n\nexport default { setBreakpoint, getBreakpoint };\n","import { getWindow } from 'ssr-window';\n\nexport default function getBreakpoint(breakpoints, base = 'window', containerEl) {\n if (!breakpoints || (base === 'container' && !containerEl)) return undefined;\n let breakpoint = false;\n\n const window = getWindow();\n const currentHeight = base === 'window' ? window.innerHeight : containerEl.clientHeight;\n\n const points = Object.keys(breakpoints).map((point) => {\n if (typeof point === 'string' && point.indexOf('@') === 0) {\n const minRatio = parseFloat(point.substr(1));\n const value = currentHeight * minRatio;\n return { value, point };\n }\n return { value: point, point };\n });\n\n points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10));\n for (let i = 0; i < points.length; i += 1) {\n const { point, value } = points[i];\n if (base === 'window') {\n if (window.matchMedia(`(min-width: ${value}px)`).matches) {\n breakpoint = point;\n }\n } else if (value <= containerEl.clientWidth) {\n breakpoint = point;\n }\n }\n return breakpoint || 'max';\n}\n","import loadImage from './loadImage.js';\nimport preloadImages from './preloadImages.js';\n\nexport default {\n loadImage,\n preloadImages,\n};\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {\n const window = getWindow();\n let image;\n function onReady() {\n if (callback) callback();\n }\n const isPicture = $(imageEl).parent('picture')[0];\n\n if (!isPicture && (!imageEl.complete || !checkForComplete)) {\n if (src) {\n image = new window.Image();\n image.onload = onReady;\n image.onerror = onReady;\n if (sizes) {\n image.sizes = sizes;\n }\n if (srcset) {\n image.srcset = srcset;\n }\n if (src) {\n image.src = src;\n }\n } else {\n onReady();\n }\n } else {\n // image already loaded...\n onReady();\n }\n}\n","export default function preloadImages() {\n const swiper = this;\n swiper.imagesToLoad = swiper.$el.find('img');\n function onReady() {\n if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;\n if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;\n if (swiper.imagesLoaded === swiper.imagesToLoad.length) {\n if (swiper.params.updateOnImagesReady) swiper.update();\n swiper.emit('imagesReady');\n }\n }\n for (let i = 0; i < swiper.imagesToLoad.length; i += 1) {\n const imageEl = swiper.imagesToLoad[i];\n swiper.loadImage(\n imageEl,\n imageEl.currentSrc || imageEl.getAttribute('src'),\n imageEl.srcset || imageEl.getAttribute('srcset'),\n imageEl.sizes || imageEl.getAttribute('sizes'),\n true,\n onReady,\n );\n }\n}\n","import { getDocument } from 'ssr-window';\n\nexport default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {\n const document = getDocument();\n if (swiper.params.createElements) {\n Object.keys(checkProps).forEach((key) => {\n if (!params[key] && params.auto === true) {\n let element = swiper.$el.children(`.${checkProps[key]}`)[0];\n if (!element) {\n element = document.createElement('div');\n element.className = checkProps[key];\n swiper.$el.append(element);\n }\n params[key] = element;\n originalParams[key] = element;\n }\n });\n }\n return params;\n}\n","export default function classesToSelector(classes = '') {\n return `.${classes\n .trim()\n .replace(/([\\.:!\\/])/g, '\\\\$1') // eslint-disable-line\n .replace(/ /g, '.')}`;\n}\n","export default function appendSlide(slides) {\n const swiper = this;\n const { $wrapperEl, params } = swiper;\n if (params.loop) {\n swiper.loopDestroy();\n }\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n } else {\n $wrapperEl.append(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n}\n","export default function prependSlide(slides) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n if (params.loop) {\n swiper.loopDestroy();\n }\n let newActiveIndex = activeIndex + 1;\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.prepend(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n } else {\n $wrapperEl.prepend(slides);\n }\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n swiper.slideTo(newActiveIndex, 0, false);\n}\n","export default function addSlide(index, slides) {\n const swiper = this;\n const { $wrapperEl, params, activeIndex } = swiper;\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n const baseLength = swiper.slides.length;\n if (index <= 0) {\n swiper.prependSlide(slides);\n return;\n }\n if (index >= baseLength) {\n swiper.appendSlide(slides);\n return;\n }\n let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;\n\n const slidesBuffer = [];\n for (let i = baseLength - 1; i >= index; i -= 1) {\n const currentSlide = swiper.slides.eq(i);\n currentSlide.remove();\n slidesBuffer.unshift(currentSlide);\n }\n\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) $wrapperEl.append(slides[i]);\n }\n newActiveIndex =\n activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;\n } else {\n $wrapperEl.append(slides);\n }\n\n for (let i = 0; i < slidesBuffer.length; i += 1) {\n $wrapperEl.append(slidesBuffer[i]);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n if (!params.observer) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeSlide(slidesIndexes) {\n const swiper = this;\n const { params, $wrapperEl, activeIndex } = swiper;\n\n let activeIndexBuffer = activeIndex;\n if (params.loop) {\n activeIndexBuffer -= swiper.loopedSlides;\n swiper.loopDestroy();\n swiper.slides = $wrapperEl.children(`.${params.slideClass}`);\n }\n let newActiveIndex = activeIndexBuffer;\n let indexToRemove;\n\n if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) {\n for (let i = 0; i < slidesIndexes.length; i += 1) {\n indexToRemove = slidesIndexes[i];\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n }\n newActiveIndex = Math.max(newActiveIndex, 0);\n } else {\n indexToRemove = slidesIndexes;\n if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();\n if (indexToRemove < newActiveIndex) newActiveIndex -= 1;\n newActiveIndex = Math.max(newActiveIndex, 0);\n }\n\n if (params.loop) {\n swiper.loopCreate();\n }\n\n if (!params.observer) {\n swiper.update();\n }\n if (params.loop) {\n swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);\n } else {\n swiper.slideTo(newActiveIndex, 0, false);\n }\n}\n","export default function removeAllSlides() {\n const swiper = this;\n\n const slidesIndexes = [];\n for (let i = 0; i < swiper.slides.length; i += 1) {\n slidesIndexes.push(i);\n }\n swiper.removeSlide(slidesIndexes);\n}\n","export default function effectInit(params) {\n const {\n effect,\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams,\n perspective,\n recreateShadows,\n getEffectParams,\n } = params;\n\n on('beforeInit', () => {\n if (swiper.params.effect !== effect) return;\n swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);\n if (perspective && perspective()) {\n swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);\n }\n\n const overwriteParamsResult = overwriteParams ? overwriteParams() : {};\n\n Object.assign(swiper.params, overwriteParamsResult);\n Object.assign(swiper.originalParams, overwriteParamsResult);\n });\n on('setTranslate', () => {\n if (swiper.params.effect !== effect) return;\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n if (swiper.params.effect !== effect) return;\n setTransition(duration);\n });\n\n on('transitionEnd', () => {\n if (swiper.params.effect !== effect) return;\n if (recreateShadows) {\n if (!getEffectParams || !getEffectParams().slideShadows) return;\n // remove shadows\n swiper.slides.each((slideEl) => {\n const $slideEl = swiper.$(slideEl);\n $slideEl\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .remove();\n });\n // create new one\n recreateShadows();\n }\n });\n\n let requireUpdateOnVirtual;\n on('virtualUpdate', () => {\n if (swiper.params.effect !== effect) return;\n if (!swiper.slides.length) {\n requireUpdateOnVirtual = true;\n }\n requestAnimationFrame(() => {\n if (requireUpdateOnVirtual && swiper.slides && swiper.slides.length) {\n setTranslate();\n requireUpdateOnVirtual = false;\n }\n });\n });\n}\n","export default function effectTarget(effectParams, $slideEl) {\n if (effectParams.transformEl) {\n return $slideEl.find(effectParams.transformEl).css({\n 'backface-visibility': 'hidden',\n '-webkit-backface-visibility': 'hidden',\n });\n }\n return $slideEl;\n}\n","export default function effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides }) {\n const { slides, activeIndex, $wrapperEl } = swiper;\n if (swiper.params.virtualTranslate && duration !== 0) {\n let eventTriggered = false;\n let $transitionEndTarget;\n if (allSlides) {\n $transitionEndTarget = transformEl ? slides.find(transformEl) : slides;\n } else {\n $transitionEndTarget = transformEl\n ? slides.eq(activeIndex).find(transformEl)\n : slides.eq(activeIndex);\n }\n $transitionEndTarget.transitionEnd(() => {\n if (eventTriggered) return;\n if (!swiper || swiper.destroyed) return;\n eventTriggered = true;\n swiper.animating = false;\n const triggerEvents = ['webkitTransitionEnd', 'transitionend'];\n for (let i = 0; i < triggerEvents.length; i += 1) {\n $wrapperEl.trigger(triggerEvents[i]);\n }\n });\n }\n}\n","import $ from './dom.js';\n\nexport default function createShadow(params, $slideEl, side) {\n const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;\n const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;\n let $shadowEl = $shadowContainer.children(`.${shadowClass}`);\n\n if (!$shadowEl.length) {\n $shadowEl = $(`
`);\n $shadowContainer.append($shadowEl);\n }\n return $shadowEl;\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Resize({ swiper, on, emit }) {\n const window = getWindow();\n let observer = null;\n let animationFrame = null;\n\n const resizeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('beforeResize');\n emit('resize');\n };\n\n const createObserver = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n observer = new ResizeObserver((entries) => {\n animationFrame = window.requestAnimationFrame(() => {\n const { width, height } = swiper;\n let newWidth = width;\n let newHeight = height;\n entries.forEach(({ contentBoxSize, contentRect, target }) => {\n if (target && target !== swiper.el) return;\n newWidth = contentRect\n ? contentRect.width\n : (contentBoxSize[0] || contentBoxSize).inlineSize;\n newHeight = contentRect\n ? contentRect.height\n : (contentBoxSize[0] || contentBoxSize).blockSize;\n });\n if (newWidth !== width || newHeight !== height) {\n resizeHandler();\n }\n });\n });\n observer.observe(swiper.el);\n };\n\n const removeObserver = () => {\n if (animationFrame) {\n window.cancelAnimationFrame(animationFrame);\n }\n if (observer && observer.unobserve && swiper.el) {\n observer.unobserve(swiper.el);\n observer = null;\n }\n };\n\n const orientationChangeHandler = () => {\n if (!swiper || swiper.destroyed || !swiper.initialized) return;\n emit('orientationchange');\n };\n\n on('init', () => {\n if (swiper.params.resizeObserver && typeof window.ResizeObserver !== 'undefined') {\n createObserver();\n return;\n }\n window.addEventListener('resize', resizeHandler);\n window.addEventListener('orientationchange', orientationChangeHandler);\n });\n\n on('destroy', () => {\n removeObserver();\n window.removeEventListener('resize', resizeHandler);\n window.removeEventListener('orientationchange', orientationChangeHandler);\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function Observer({ swiper, extendParams, on, emit }) {\n const observers = [];\n const window = getWindow();\n const attach = (target, options = {}) => {\n const ObserverFunc = window.MutationObserver || window.WebkitMutationObserver;\n const observer = new ObserverFunc((mutations) => {\n // The observerUpdate event should only be triggered\n // once despite the number of mutations. Additional\n // triggers are redundant and are very costly\n if (mutations.length === 1) {\n emit('observerUpdate', mutations[0]);\n return;\n }\n const observerUpdate = function observerUpdate() {\n emit('observerUpdate', mutations[0]);\n };\n\n if (window.requestAnimationFrame) {\n window.requestAnimationFrame(observerUpdate);\n } else {\n window.setTimeout(observerUpdate, 0);\n }\n });\n\n observer.observe(target, {\n attributes: typeof options.attributes === 'undefined' ? true : options.attributes,\n childList: typeof options.childList === 'undefined' ? true : options.childList,\n characterData: typeof options.characterData === 'undefined' ? true : options.characterData,\n });\n\n observers.push(observer);\n };\n const init = () => {\n if (!swiper.params.observer) return;\n if (swiper.params.observeParents) {\n const containerParents = swiper.$el.parents();\n for (let i = 0; i < containerParents.length; i += 1) {\n attach(containerParents[i]);\n }\n }\n // Observe container\n attach(swiper.$el[0], {\n childList: swiper.params.observeSlideChildren,\n });\n\n // Observe wrapper\n attach(swiper.$wrapperEl[0], { attributes: false });\n };\n const destroy = () => {\n observers.forEach((observer) => {\n observer.disconnect();\n });\n observers.splice(0, observers.length);\n };\n\n extendParams({\n observer: false,\n observeParents: false,\n observeSlideChildren: false,\n });\n on('init', init);\n on('destroy', destroy);\n}\n","// Swiper Class\nimport Swiper from './core/core.js';\n\n//IMPORT_MODULES\n\nconst modules = [\n //INSTALL_MODULES\n];\n\nSwiper.use(modules);\n\n//EXPORT\n","import $ from '../../shared/dom.js';\nimport { setCSSProperty } from '../../shared/utils.js';\n\nexport default function Virtual({ swiper, extendParams, on, emit }) {\n extendParams({\n virtual: {\n enabled: false,\n slides: [],\n cache: true,\n renderSlide: null,\n renderExternal: null,\n renderExternalUpdate: true,\n addSlidesBefore: 0,\n addSlidesAfter: 0,\n },\n });\n\n let cssModeTimeout;\n\n swiper.virtual = {\n cache: {},\n from: undefined,\n to: undefined,\n slides: [],\n offset: 0,\n slidesGrid: [],\n };\n\n function renderSlide(slide, index) {\n const params = swiper.params.virtual;\n if (params.cache && swiper.virtual.cache[index]) {\n return swiper.virtual.cache[index];\n }\n const $slideEl = params.renderSlide\n ? $(params.renderSlide.call(swiper, slide, index))\n : $(\n `
${slide}
`,\n );\n if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);\n if (params.cache) swiper.virtual.cache[index] = $slideEl;\n return $slideEl;\n }\n\n function update(force) {\n const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params;\n const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual;\n const {\n from: previousFrom,\n to: previousTo,\n slides,\n slidesGrid: previousSlidesGrid,\n offset: previousOffset,\n } = swiper.virtual;\n if (!swiper.params.cssMode) {\n swiper.updateActiveIndex();\n }\n\n const activeIndex = swiper.activeIndex || 0;\n\n let offsetProp;\n if (swiper.rtlTranslate) offsetProp = 'right';\n else offsetProp = swiper.isHorizontal() ? 'left' : 'top';\n\n let slidesAfter;\n let slidesBefore;\n if (centeredSlides) {\n slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;\n slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;\n } else {\n slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesAfter;\n slidesBefore = slidesPerGroup + addSlidesBefore;\n }\n const from = Math.max((activeIndex || 0) - slidesBefore, 0);\n const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);\n const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);\n\n Object.assign(swiper.virtual, {\n from,\n to,\n offset,\n slidesGrid: swiper.slidesGrid,\n });\n\n function onRendered() {\n swiper.updateSlides();\n swiper.updateProgress();\n swiper.updateSlidesClasses();\n if (swiper.lazy && swiper.params.lazy.enabled) {\n swiper.lazy.load();\n }\n emit('virtualUpdate');\n }\n\n if (previousFrom === from && previousTo === to && !force) {\n if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {\n swiper.slides.css(offsetProp, `${offset}px`);\n }\n swiper.updateProgress();\n emit('virtualUpdate');\n return;\n }\n if (swiper.params.virtual.renderExternal) {\n swiper.params.virtual.renderExternal.call(swiper, {\n offset,\n from,\n to,\n slides: (function getSlides() {\n const slidesToRender = [];\n for (let i = from; i <= to; i += 1) {\n slidesToRender.push(slides[i]);\n }\n return slidesToRender;\n })(),\n });\n if (swiper.params.virtual.renderExternalUpdate) {\n onRendered();\n } else {\n emit('virtualUpdate');\n }\n return;\n }\n const prependIndexes = [];\n const appendIndexes = [];\n if (force) {\n swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove();\n } else {\n for (let i = previousFrom; i <= previousTo; i += 1) {\n if (i < from || i > to) {\n swiper.$wrapperEl\n .find(`.${swiper.params.slideClass}[data-swiper-slide-index=\"${i}\"]`)\n .remove();\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n if (i >= from && i <= to) {\n if (typeof previousTo === 'undefined' || force) {\n appendIndexes.push(i);\n } else {\n if (i > previousTo) appendIndexes.push(i);\n if (i < previousFrom) prependIndexes.push(i);\n }\n }\n }\n appendIndexes.forEach((index) => {\n swiper.$wrapperEl.append(renderSlide(slides[index], index));\n });\n prependIndexes\n .sort((a, b) => b - a)\n .forEach((index) => {\n swiper.$wrapperEl.prepend(renderSlide(slides[index], index));\n });\n swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`);\n onRendered();\n }\n\n function appendSlide(slides) {\n if (typeof slides === 'object' && 'length' in slides) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.push(slides[i]);\n }\n } else {\n swiper.virtual.slides.push(slides);\n }\n update(true);\n }\n function prependSlide(slides) {\n const activeIndex = swiper.activeIndex;\n let newActiveIndex = activeIndex + 1;\n let numberOfNewSlides = 1;\n\n if (Array.isArray(slides)) {\n for (let i = 0; i < slides.length; i += 1) {\n if (slides[i]) swiper.virtual.slides.unshift(slides[i]);\n }\n newActiveIndex = activeIndex + slides.length;\n numberOfNewSlides = slides.length;\n } else {\n swiper.virtual.slides.unshift(slides);\n }\n if (swiper.params.virtual.cache) {\n const cache = swiper.virtual.cache;\n const newCache = {};\n Object.keys(cache).forEach((cachedIndex) => {\n const $cachedEl = cache[cachedIndex];\n const cachedElIndex = $cachedEl.attr('data-swiper-slide-index');\n if (cachedElIndex) {\n $cachedEl.attr(\n 'data-swiper-slide-index',\n parseInt(cachedElIndex, 10) + numberOfNewSlides,\n );\n }\n newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl;\n });\n swiper.virtual.cache = newCache;\n }\n update(true);\n swiper.slideTo(newActiveIndex, 0);\n }\n function removeSlide(slidesIndexes) {\n if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;\n let activeIndex = swiper.activeIndex;\n if (Array.isArray(slidesIndexes)) {\n for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) {\n swiper.virtual.slides.splice(slidesIndexes[i], 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes[i]];\n }\n if (slidesIndexes[i] < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n } else {\n swiper.virtual.slides.splice(slidesIndexes, 1);\n if (swiper.params.virtual.cache) {\n delete swiper.virtual.cache[slidesIndexes];\n }\n if (slidesIndexes < activeIndex) activeIndex -= 1;\n activeIndex = Math.max(activeIndex, 0);\n }\n update(true);\n swiper.slideTo(activeIndex, 0);\n }\n function removeAllSlides() {\n swiper.virtual.slides = [];\n if (swiper.params.virtual.cache) {\n swiper.virtual.cache = {};\n }\n update(true);\n swiper.slideTo(0, 0);\n }\n\n on('beforeInit', () => {\n if (!swiper.params.virtual.enabled) return;\n swiper.virtual.slides = swiper.params.virtual.slides;\n swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`);\n\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n\n if (!swiper.params.initialSlide) {\n update();\n }\n });\n on('setTranslate', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode && !swiper._immediateVirtual) {\n clearTimeout(cssModeTimeout);\n cssModeTimeout = setTimeout(() => {\n update();\n }, 100);\n } else {\n update();\n }\n });\n on('init update resize', () => {\n if (!swiper.params.virtual.enabled) return;\n if (swiper.params.cssMode) {\n setCSSProperty(swiper.wrapperEl, '--swiper-virtual-size', `${swiper.virtualSize}px`);\n }\n });\n\n Object.assign(swiper.virtual, {\n appendSlide,\n prependSlide,\n removeSlide,\n removeAllSlides,\n update,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Keyboard({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n const window = getWindow();\n swiper.keyboard = {\n enabled: false,\n };\n extendParams({\n keyboard: {\n enabled: false,\n onlyInViewport: true,\n pageUpDown: true,\n },\n });\n\n function handle(event) {\n if (!swiper.enabled) return;\n\n const { rtlTranslate: rtl } = swiper;\n let e = event;\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n const kc = e.keyCode || e.charCode;\n const pageUpDown = swiper.params.keyboard.pageUpDown;\n const isPageUp = pageUpDown && kc === 33;\n const isPageDown = pageUpDown && kc === 34;\n const isArrowLeft = kc === 37;\n const isArrowRight = kc === 39;\n const isArrowUp = kc === 38;\n const isArrowDown = kc === 40;\n // Directions locks\n if (\n !swiper.allowSlideNext &&\n ((swiper.isHorizontal() && isArrowRight) ||\n (swiper.isVertical() && isArrowDown) ||\n isPageDown)\n ) {\n return false;\n }\n if (\n !swiper.allowSlidePrev &&\n ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)\n ) {\n return false;\n }\n if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {\n return undefined;\n }\n if (\n document.activeElement &&\n document.activeElement.nodeName &&\n (document.activeElement.nodeName.toLowerCase() === 'input' ||\n document.activeElement.nodeName.toLowerCase() === 'textarea')\n ) {\n return undefined;\n }\n if (\n swiper.params.keyboard.onlyInViewport &&\n (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)\n ) {\n let inView = false;\n // Check that swiper should be inside of visible area of window\n if (\n swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 &&\n swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0\n ) {\n return undefined;\n }\n\n const $el = swiper.$el;\n const swiperWidth = $el[0].clientWidth;\n const swiperHeight = $el[0].clientHeight;\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n const swiperOffset = swiper.$el.offset();\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiperWidth, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiperHeight],\n [swiperOffset.left + swiperWidth, swiperOffset.top + swiperHeight],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n if (!inView) return undefined;\n }\n if (swiper.isHorizontal()) {\n if (isPageUp || isPageDown || isArrowLeft || isArrowRight) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl))\n swiper.slideNext();\n if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl))\n swiper.slidePrev();\n } else {\n if (isPageUp || isPageDown || isArrowUp || isArrowDown) {\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n }\n if (isPageDown || isArrowDown) swiper.slideNext();\n if (isPageUp || isArrowUp) swiper.slidePrev();\n }\n emit('keyPress', kc);\n return undefined;\n }\n function enable() {\n if (swiper.keyboard.enabled) return;\n $(document).on('keydown', handle);\n swiper.keyboard.enabled = true;\n }\n function disable() {\n if (!swiper.keyboard.enabled) return;\n $(document).off('keydown', handle);\n swiper.keyboard.enabled = false;\n }\n\n on('init', () => {\n if (swiper.params.keyboard.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n if (swiper.keyboard.enabled) {\n disable();\n }\n });\n\n Object.assign(swiper.keyboard, {\n enable,\n disable,\n });\n}\n","/* eslint-disable consistent-return */\nimport { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { now, nextTick } from '../../shared/utils.js';\n\nexport default function Mousewheel({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n\n extendParams({\n mousewheel: {\n enabled: false,\n releaseOnEdges: false,\n invert: false,\n forceToAxis: false,\n sensitivity: 1,\n eventsTarget: 'container',\n thresholdDelta: null,\n thresholdTime: null,\n },\n });\n\n swiper.mousewheel = {\n enabled: false,\n };\n\n let timeout;\n let lastScrollTime = now();\n let lastEventBeforeSnap;\n const recentWheelEvents = [];\n\n function normalize(e) {\n // Reasonable defaults\n const PIXEL_STEP = 10;\n const LINE_HEIGHT = 40;\n const PAGE_HEIGHT = 800;\n\n let sX = 0;\n let sY = 0; // spinX, spinY\n let pX = 0;\n let pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in e) {\n sY = e.detail;\n }\n if ('wheelDelta' in e) {\n sY = -e.wheelDelta / 120;\n }\n if ('wheelDeltaY' in e) {\n sY = -e.wheelDeltaY / 120;\n }\n if ('wheelDeltaX' in e) {\n sX = -e.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in e) {\n pY = e.deltaY;\n }\n if ('deltaX' in e) {\n pX = e.deltaX;\n }\n\n if (e.shiftKey && !pX) {\n // if user scrolls with shift he wants horizontal scroll\n pX = pY;\n pY = 0;\n }\n\n if ((pX || pY) && e.deltaMode) {\n if (e.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY,\n };\n }\n function handleMouseEnter() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = true;\n }\n function handleMouseLeave() {\n if (!swiper.enabled) return;\n swiper.mouseEntered = false;\n }\n function animateSlider(newEvent) {\n if (\n swiper.params.mousewheel.thresholdDelta &&\n newEvent.delta < swiper.params.mousewheel.thresholdDelta\n ) {\n // Prevent if delta of wheel scroll delta is below configured threshold\n return false;\n }\n\n if (\n swiper.params.mousewheel.thresholdTime &&\n now() - lastScrollTime < swiper.params.mousewheel.thresholdTime\n ) {\n // Prevent if time between scrolls is below configured threshold\n return false;\n }\n\n // If the movement is NOT big enough and\n // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider):\n // Don't go any further (avoid insignificant scroll movement).\n if (newEvent.delta >= 6 && now() - lastScrollTime < 60) {\n // Return false as a default\n return true;\n }\n // If user is scrolling towards the end:\n // If the slider hasn't hit the latest slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to next slide and\n // emit a scroll event.\n // Else (the user is scrolling towards the beginning) and\n // if the slider hasn't hit the first slide or\n // if the slider is a loop and\n // if the slider isn't moving right now:\n // Go to prev slide and\n // emit a scroll event.\n if (newEvent.direction < 0) {\n if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {\n swiper.slideNext();\n emit('scroll', newEvent.raw);\n }\n } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {\n swiper.slidePrev();\n emit('scroll', newEvent.raw);\n }\n // If you got here is because an animation has been triggered so store the current time\n lastScrollTime = new window.Date().getTime();\n // Return false as a default\n return false;\n }\n function releaseScroll(newEvent) {\n const params = swiper.params.mousewheel;\n if (newEvent.direction < 0) {\n if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) {\n // Return true to animate scroll on edges\n return true;\n }\n return false;\n }\n function handle(event) {\n let e = event;\n let disableParentSwiper = true;\n if (!swiper.enabled) return;\n const params = swiper.params.mousewheel;\n\n if (swiper.params.cssMode) {\n e.preventDefault();\n }\n\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges)\n return true;\n\n if (e.originalEvent) e = e.originalEvent; // jquery fix\n let delta = 0;\n const rtlFactor = swiper.rtlTranslate ? -1 : 1;\n\n const data = normalize(e);\n\n if (params.forceToAxis) {\n if (swiper.isHorizontal()) {\n if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor;\n else return true;\n } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY;\n else return true;\n } else {\n delta =\n Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;\n }\n\n if (delta === 0) return true;\n\n if (params.invert) delta = -delta;\n\n // Get the scroll positions\n let positions = swiper.getTranslate() + delta * params.sensitivity;\n\n if (positions >= swiper.minTranslate()) positions = swiper.minTranslate();\n if (positions <= swiper.maxTranslate()) positions = swiper.maxTranslate();\n\n // When loop is true:\n // the disableParentSwiper will be true.\n // When loop is false:\n // if the scroll positions is not on edge,\n // then the disableParentSwiper will be true.\n // if the scroll on edge positions,\n // then the disableParentSwiper will be false.\n disableParentSwiper = swiper.params.loop\n ? true\n : !(positions === swiper.minTranslate() || positions === swiper.maxTranslate());\n\n if (disableParentSwiper && swiper.params.nested) e.stopPropagation();\n\n if (!swiper.params.freeMode || !swiper.params.freeMode.enabled) {\n // Register the new event in a variable which stores the relevant data\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n raw: event,\n };\n\n // Keep the most recent events\n if (recentWheelEvents.length >= 2) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n recentWheelEvents.push(newEvent);\n\n // If there is at least one previous recorded event:\n // If direction has changed or\n // if the scroll is quicker than the previous one:\n // Animate the slider.\n // Else (this is the first time the wheel is moved):\n // Animate the slider.\n if (prevEvent) {\n if (\n newEvent.direction !== prevEvent.direction ||\n newEvent.delta > prevEvent.delta ||\n newEvent.time > prevEvent.time + 150\n ) {\n animateSlider(newEvent);\n }\n } else {\n animateSlider(newEvent);\n }\n\n // If it's time to release the scroll:\n // Return now so you don't hit the preventDefault.\n if (releaseScroll(newEvent)) {\n return true;\n }\n } else {\n // Freemode or scrollContainer:\n\n // If we recently snapped after a momentum scroll, then ignore wheel events\n // to give time for the deceleration to finish. Stop ignoring after 500 msecs\n // or if it's a new scroll (larger delta or inverse sign as last event before\n // an end-of-momentum snap).\n const newEvent = {\n time: now(),\n delta: Math.abs(delta),\n direction: Math.sign(delta),\n };\n const ignoreWheelEvents =\n lastEventBeforeSnap &&\n newEvent.time < lastEventBeforeSnap.time + 500 &&\n newEvent.delta <= lastEventBeforeSnap.delta &&\n newEvent.direction === lastEventBeforeSnap.direction;\n if (!ignoreWheelEvents) {\n lastEventBeforeSnap = undefined;\n\n if (swiper.params.loop) {\n swiper.loopFix();\n }\n let position = swiper.getTranslate() + delta * params.sensitivity;\n const wasBeginning = swiper.isBeginning;\n const wasEnd = swiper.isEnd;\n\n if (position >= swiper.minTranslate()) position = swiper.minTranslate();\n if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();\n\n swiper.setTransition(0);\n swiper.setTranslate(position);\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n\n if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) {\n swiper.updateSlidesClasses();\n }\n\n if (swiper.params.freeMode.sticky) {\n // When wheel scrolling starts with sticky (aka snap) enabled, then detect\n // the end of a momentum scroll by storing recent (N=15?) wheel events.\n // 1. do all N events have decreasing or same (absolute value) delta?\n // 2. did all N events arrive in the last M (M=500?) msecs?\n // 3. does the earliest event have an (absolute value) delta that's\n // at least P (P=1?) larger than the most recent event's delta?\n // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels?\n // If 1-4 are \"yes\" then we're near the end of a momentum scroll deceleration.\n // Snap immediately and ignore remaining wheel events in this scroll.\n // See comment above for \"remaining wheel events in this scroll\" determination.\n // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event.\n clearTimeout(timeout);\n timeout = undefined;\n if (recentWheelEvents.length >= 15) {\n recentWheelEvents.shift(); // only store the last N events\n }\n const prevEvent = recentWheelEvents.length\n ? recentWheelEvents[recentWheelEvents.length - 1]\n : undefined;\n const firstEvent = recentWheelEvents[0];\n recentWheelEvents.push(newEvent);\n if (\n prevEvent &&\n (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)\n ) {\n // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log.\n recentWheelEvents.splice(0);\n } else if (\n recentWheelEvents.length >= 15 &&\n newEvent.time - firstEvent.time < 500 &&\n firstEvent.delta - newEvent.delta >= 1 &&\n newEvent.delta <= 6\n ) {\n // We're at the end of the deceleration of a momentum scroll, so there's no need\n // to wait for more events. Snap ASAP on the next tick.\n // Also, because there's some remaining momentum we'll bias the snap in the\n // direction of the ongoing scroll because it's better UX for the scroll to snap\n // in the same direction as the scroll instead of reversing to snap. Therefore,\n // if it's already scrolled more than 20% in the current direction, keep going.\n const snapToThreshold = delta > 0 ? 0.8 : 0.2;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n timeout = nextTick(() => {\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 0); // no delay; move on next tick\n }\n if (!timeout) {\n // if we get here, then we haven't detected the end of a momentum scroll, so\n // we'll consider a scroll \"complete\" when there haven't been any wheel events\n // for 500ms.\n timeout = nextTick(() => {\n const snapToThreshold = 0.5;\n lastEventBeforeSnap = newEvent;\n recentWheelEvents.splice(0);\n swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold);\n }, 500);\n }\n }\n\n // Emit event\n if (!ignoreWheelEvents) emit('scroll', e);\n\n // Stop autoplay\n if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction)\n swiper.autoplay.stop();\n // Return page scroll on edge positions\n if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;\n }\n }\n\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n return false;\n }\n\n function events(method) {\n let target = swiper.$el;\n if (swiper.params.mousewheel.eventsTarget !== 'container') {\n target = $(swiper.params.mousewheel.eventsTarget);\n }\n target[method]('mouseenter', handleMouseEnter);\n target[method]('mouseleave', handleMouseLeave);\n target[method]('wheel', handle);\n }\n\n function enable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.removeEventListener('wheel', handle);\n return true;\n }\n if (swiper.mousewheel.enabled) return false;\n events('on');\n swiper.mousewheel.enabled = true;\n return true;\n }\n function disable() {\n if (swiper.params.cssMode) {\n swiper.wrapperEl.addEventListener(event, handle);\n return true;\n }\n if (!swiper.mousewheel.enabled) return false;\n events('off');\n swiper.mousewheel.enabled = false;\n return true;\n }\n\n on('init', () => {\n if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) {\n disable();\n }\n if (swiper.params.mousewheel.enabled) enable();\n });\n on('destroy', () => {\n if (swiper.params.cssMode) {\n enable();\n }\n if (swiper.mousewheel.enabled) disable();\n });\n\n Object.assign(swiper.mousewheel, {\n enable,\n disable,\n });\n}\n","import createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Navigation({ swiper, extendParams, on, emit }) {\n extendParams({\n navigation: {\n nextEl: null,\n prevEl: null,\n\n hideOnClick: false,\n disabledClass: 'swiper-button-disabled',\n hiddenClass: 'swiper-button-hidden',\n lockClass: 'swiper-button-lock',\n navigationDisabledClass: 'swiper-navigation-disabled',\n },\n });\n\n swiper.navigation = {\n nextEl: null,\n $nextEl: null,\n prevEl: null,\n $prevEl: null,\n };\n\n function getEl(el) {\n let $el;\n if (el) {\n $el = $(el);\n if (\n swiper.params.uniqueNavElements &&\n typeof el === 'string' &&\n $el.length > 1 &&\n swiper.$el.find(el).length === 1\n ) {\n $el = swiper.$el.find(el);\n }\n }\n return $el;\n }\n\n function toggleEl($el, disabled) {\n const params = swiper.params.navigation;\n if ($el && $el.length > 0) {\n $el[disabled ? 'addClass' : 'removeClass'](params.disabledClass);\n if ($el[0] && $el[0].tagName === 'BUTTON') $el[0].disabled = disabled;\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n }\n function update() {\n // Update Navigation Buttons\n if (swiper.params.loop) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n toggleEl($prevEl, swiper.isBeginning && !swiper.params.rewind);\n toggleEl($nextEl, swiper.isEnd && !swiper.params.rewind);\n }\n function onPrevClick(e) {\n e.preventDefault();\n if (swiper.isBeginning && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slidePrev();\n emit('navigationPrev');\n }\n function onNextClick(e) {\n e.preventDefault();\n if (swiper.isEnd && !swiper.params.loop && !swiper.params.rewind) return;\n swiper.slideNext();\n emit('navigationNext');\n }\n function init() {\n const params = swiper.params.navigation;\n\n swiper.params.navigation = createElementIfNotDefined(\n swiper,\n swiper.originalParams.navigation,\n swiper.params.navigation,\n {\n nextEl: 'swiper-button-next',\n prevEl: 'swiper-button-prev',\n },\n );\n if (!(params.nextEl || params.prevEl)) return;\n\n const $nextEl = getEl(params.nextEl);\n const $prevEl = getEl(params.prevEl);\n\n if ($nextEl && $nextEl.length > 0) {\n $nextEl.on('click', onNextClick);\n }\n if ($prevEl && $prevEl.length > 0) {\n $prevEl.on('click', onPrevClick);\n }\n\n Object.assign(swiper.navigation, {\n $nextEl,\n nextEl: $nextEl && $nextEl[0],\n $prevEl,\n prevEl: $prevEl && $prevEl[0],\n });\n\n if (!swiper.enabled) {\n if ($nextEl) $nextEl.addClass(params.lockClass);\n if ($prevEl) $prevEl.addClass(params.lockClass);\n }\n }\n function destroy() {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl && $nextEl.length) {\n $nextEl.off('click', onNextClick);\n $nextEl.removeClass(swiper.params.navigation.disabledClass);\n }\n if ($prevEl && $prevEl.length) {\n $prevEl.off('click', onPrevClick);\n $prevEl.removeClass(swiper.params.navigation.disabledClass);\n }\n }\n\n on('init', () => {\n if (swiper.params.navigation.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n update();\n }\n });\n on('toEdge fromEdge lock unlock', () => {\n update();\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $nextEl, $prevEl } = swiper.navigation;\n if ($nextEl) {\n $nextEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n if ($prevEl) {\n $prevEl[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.navigation.lockClass);\n }\n });\n on('click', (_s, e) => {\n const { $nextEl, $prevEl } = swiper.navigation;\n const targetEl = e.target;\n if (\n swiper.params.navigation.hideOnClick &&\n !$(targetEl).is($prevEl) &&\n !$(targetEl).is($nextEl)\n ) {\n if (\n swiper.pagination &&\n swiper.params.pagination &&\n swiper.params.pagination.clickable &&\n (swiper.pagination.el === targetEl || swiper.pagination.el.contains(targetEl))\n )\n return;\n let isHidden;\n if ($nextEl) {\n isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);\n } else if ($prevEl) {\n isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);\n }\n if (isHidden === true) {\n emit('navigationShow');\n } else {\n emit('navigationHide');\n }\n if ($nextEl) {\n $nextEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n if ($prevEl) {\n $prevEl.toggleClass(swiper.params.navigation.hiddenClass);\n }\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.navigation.navigationDisabledClass);\n init();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.navigation.navigationDisabledClass);\n destroy();\n };\n\n Object.assign(swiper.navigation, {\n enable,\n disable,\n update,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\nimport classesToSelector from '../../shared/classes-to-selector.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Pagination({ swiper, extendParams, on, emit }) {\n const pfx = 'swiper-pagination';\n extendParams({\n pagination: {\n el: null,\n bulletElement: 'span',\n clickable: false,\n hideOnClick: false,\n renderBullet: null,\n renderProgressbar: null,\n renderFraction: null,\n renderCustom: null,\n progressbarOpposite: false,\n type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom'\n dynamicBullets: false,\n dynamicMainBullets: 1,\n formatFractionCurrent: (number) => number,\n formatFractionTotal: (number) => number,\n bulletClass: `${pfx}-bullet`,\n bulletActiveClass: `${pfx}-bullet-active`,\n modifierClass: `${pfx}-`,\n currentClass: `${pfx}-current`,\n totalClass: `${pfx}-total`,\n hiddenClass: `${pfx}-hidden`,\n progressbarFillClass: `${pfx}-progressbar-fill`,\n progressbarOppositeClass: `${pfx}-progressbar-opposite`,\n clickableClass: `${pfx}-clickable`,\n lockClass: `${pfx}-lock`,\n horizontalClass: `${pfx}-horizontal`,\n verticalClass: `${pfx}-vertical`,\n paginationDisabledClass: `${pfx}-disabled`,\n },\n });\n\n swiper.pagination = {\n el: null,\n $el: null,\n bullets: [],\n };\n\n let bulletSize;\n let dynamicBulletIndex = 0;\n\n function isPaginationDisabled() {\n return (\n !swiper.params.pagination.el ||\n !swiper.pagination.el ||\n !swiper.pagination.$el ||\n swiper.pagination.$el.length === 0\n );\n }\n\n function setSideBullets($bulletEl, position) {\n const { bulletActiveClass } = swiper.params.pagination;\n $bulletEl[position]()\n .addClass(`${bulletActiveClass}-${position}`)\n [position]()\n .addClass(`${bulletActiveClass}-${position}-${position}`);\n }\n\n function update() {\n // Render || Update Pagination bullets/items\n const rtl = swiper.rtl;\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n const $el = swiper.pagination.$el;\n // Current/Total\n let current;\n const total = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (swiper.params.loop) {\n current = Math.ceil(\n (swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup,\n );\n if (current > slidesLength - 1 - swiper.loopedSlides * 2) {\n current -= slidesLength - swiper.loopedSlides * 2;\n }\n if (current > total - 1) current -= total;\n if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;\n } else if (typeof swiper.snapIndex !== 'undefined') {\n current = swiper.snapIndex;\n } else {\n current = swiper.activeIndex || 0;\n }\n // Types\n if (\n params.type === 'bullets' &&\n swiper.pagination.bullets &&\n swiper.pagination.bullets.length > 0\n ) {\n const bullets = swiper.pagination.bullets;\n let firstIndex;\n let lastIndex;\n let midIndex;\n if (params.dynamicBullets) {\n bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);\n $el.css(\n swiper.isHorizontal() ? 'width' : 'height',\n `${bulletSize * (params.dynamicMainBullets + 4)}px`,\n );\n if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {\n dynamicBulletIndex += current - (swiper.previousIndex - swiper.loopedSlides || 0);\n if (dynamicBulletIndex > params.dynamicMainBullets - 1) {\n dynamicBulletIndex = params.dynamicMainBullets - 1;\n } else if (dynamicBulletIndex < 0) {\n dynamicBulletIndex = 0;\n }\n }\n firstIndex = Math.max(current - dynamicBulletIndex, 0);\n lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);\n midIndex = (lastIndex + firstIndex) / 2;\n }\n bullets.removeClass(\n ['', '-next', '-next-next', '-prev', '-prev-prev', '-main']\n .map((suffix) => `${params.bulletActiveClass}${suffix}`)\n .join(' '),\n );\n if ($el.length > 1) {\n bullets.each((bullet) => {\n const $bullet = $(bullet);\n const bulletIndex = $bullet.index();\n if (bulletIndex === current) {\n $bullet.addClass(params.bulletActiveClass);\n }\n if (params.dynamicBullets) {\n if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {\n $bullet.addClass(`${params.bulletActiveClass}-main`);\n }\n if (bulletIndex === firstIndex) {\n setSideBullets($bullet, 'prev');\n }\n if (bulletIndex === lastIndex) {\n setSideBullets($bullet, 'next');\n }\n }\n });\n } else {\n const $bullet = bullets.eq(current);\n const bulletIndex = $bullet.index();\n $bullet.addClass(params.bulletActiveClass);\n if (params.dynamicBullets) {\n const $firstDisplayedBullet = bullets.eq(firstIndex);\n const $lastDisplayedBullet = bullets.eq(lastIndex);\n for (let i = firstIndex; i <= lastIndex; i += 1) {\n bullets.eq(i).addClass(`${params.bulletActiveClass}-main`);\n }\n if (swiper.params.loop) {\n if (bulletIndex >= bullets.length) {\n for (let i = params.dynamicMainBullets; i >= 0; i -= 1) {\n bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`);\n }\n bullets\n .eq(bullets.length - params.dynamicMainBullets - 1)\n .addClass(`${params.bulletActiveClass}-prev`);\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n } else {\n setSideBullets($firstDisplayedBullet, 'prev');\n setSideBullets($lastDisplayedBullet, 'next');\n }\n }\n }\n if (params.dynamicBullets) {\n const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);\n const bulletsOffset =\n (bulletSize * dynamicBulletsLength - bulletSize) / 2 - midIndex * bulletSize;\n const offsetProp = rtl ? 'right' : 'left';\n bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`);\n }\n }\n if (params.type === 'fraction') {\n $el\n .find(classesToSelector(params.currentClass))\n .text(params.formatFractionCurrent(current + 1));\n $el.find(classesToSelector(params.totalClass)).text(params.formatFractionTotal(total));\n }\n if (params.type === 'progressbar') {\n let progressbarDirection;\n if (params.progressbarOpposite) {\n progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';\n } else {\n progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';\n }\n const scale = (current + 1) / total;\n let scaleX = 1;\n let scaleY = 1;\n if (progressbarDirection === 'horizontal') {\n scaleX = scale;\n } else {\n scaleY = scale;\n }\n $el\n .find(classesToSelector(params.progressbarFillClass))\n .transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`)\n .transition(swiper.params.speed);\n }\n if (params.type === 'custom' && params.renderCustom) {\n $el.html(params.renderCustom(swiper, current + 1, total));\n emit('paginationRender', $el[0]);\n } else {\n emit('paginationUpdate', $el[0]);\n }\n if (swiper.params.watchOverflow && swiper.enabled) {\n $el[swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);\n }\n }\n function render() {\n // Render Container\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const slidesLength =\n swiper.virtual && swiper.params.virtual.enabled\n ? swiper.virtual.slides.length\n : swiper.slides.length;\n\n const $el = swiper.pagination.$el;\n let paginationHTML = '';\n if (params.type === 'bullets') {\n let numberOfBullets = swiper.params.loop\n ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup)\n : swiper.snapGrid.length;\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.loop &&\n numberOfBullets > slidesLength\n ) {\n numberOfBullets = slidesLength;\n }\n for (let i = 0; i < numberOfBullets; i += 1) {\n if (params.renderBullet) {\n paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);\n } else {\n paginationHTML += `<${params.bulletElement} class=\"${params.bulletClass}\">`;\n }\n }\n $el.html(paginationHTML);\n\n swiper.pagination.bullets = $el.find(classesToSelector(params.bulletClass));\n }\n if (params.type === 'fraction') {\n if (params.renderFraction) {\n paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);\n } else {\n paginationHTML =\n `` +\n ' / ' +\n ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type === 'progressbar') {\n if (params.renderProgressbar) {\n paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);\n } else {\n paginationHTML = ``;\n }\n $el.html(paginationHTML);\n }\n if (params.type !== 'custom') {\n emit('paginationRender', swiper.pagination.$el[0]);\n }\n }\n function init() {\n swiper.params.pagination = createElementIfNotDefined(\n swiper,\n swiper.originalParams.pagination,\n swiper.params.pagination,\n { el: 'swiper-pagination' },\n );\n const params = swiper.params.pagination;\n if (!params.el) return;\n\n let $el = $(params.el);\n if ($el.length === 0) return;\n\n if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1) {\n $el = swiper.$el.find(params.el);\n // check if it belongs to another nested Swiper\n if ($el.length > 1) {\n $el = $el.filter((el) => {\n if ($(el).parents('.swiper')[0] !== swiper.el) return false;\n return true;\n });\n }\n }\n\n if (params.type === 'bullets' && params.clickable) {\n $el.addClass(params.clickableClass);\n }\n\n $el.addClass(params.modifierClass + params.type);\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n if (params.type === 'bullets' && params.dynamicBullets) {\n $el.addClass(`${params.modifierClass}${params.type}-dynamic`);\n dynamicBulletIndex = 0;\n if (params.dynamicMainBullets < 1) {\n params.dynamicMainBullets = 1;\n }\n }\n if (params.type === 'progressbar' && params.progressbarOpposite) {\n $el.addClass(params.progressbarOppositeClass);\n }\n\n if (params.clickable) {\n $el.on('click', classesToSelector(params.bulletClass), function onClick(e) {\n e.preventDefault();\n let index = $(this).index() * swiper.params.slidesPerGroup;\n if (swiper.params.loop) index += swiper.loopedSlides;\n swiper.slideTo(index);\n });\n }\n\n Object.assign(swiper.pagination, {\n $el,\n el: $el[0],\n });\n\n if (!swiper.enabled) {\n $el.addClass(params.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.pagination;\n if (isPaginationDisabled()) return;\n const $el = swiper.pagination.$el;\n\n $el.removeClass(params.hiddenClass);\n $el.removeClass(params.modifierClass + params.type);\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n if (swiper.pagination.bullets && swiper.pagination.bullets.removeClass)\n swiper.pagination.bullets.removeClass(params.bulletActiveClass);\n if (params.clickable) {\n $el.off('click', classesToSelector(params.bulletClass));\n }\n }\n\n on('init', () => {\n if (swiper.params.pagination.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n render();\n update();\n }\n });\n on('activeIndexChange', () => {\n if (swiper.params.loop) {\n update();\n } else if (typeof swiper.snapIndex === 'undefined') {\n update();\n }\n });\n on('snapIndexChange', () => {\n if (!swiper.params.loop) {\n update();\n }\n });\n on('slidesLengthChange', () => {\n if (swiper.params.loop) {\n render();\n update();\n }\n });\n on('snapGridLengthChange', () => {\n if (!swiper.params.loop) {\n render();\n update();\n }\n });\n on('destroy', () => {\n destroy();\n });\n on('enable disable', () => {\n const { $el } = swiper.pagination;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.pagination.lockClass);\n }\n });\n on('lock unlock', () => {\n update();\n });\n on('click', (_s, e) => {\n const targetEl = e.target;\n const { $el } = swiper.pagination;\n if (\n swiper.params.pagination.el &&\n swiper.params.pagination.hideOnClick &&\n $el &&\n $el.length > 0 &&\n !$(targetEl).hasClass(swiper.params.pagination.bulletClass)\n ) {\n if (\n swiper.navigation &&\n ((swiper.navigation.nextEl && targetEl === swiper.navigation.nextEl) ||\n (swiper.navigation.prevEl && targetEl === swiper.navigation.prevEl))\n )\n return;\n const isHidden = $el.hasClass(swiper.params.pagination.hiddenClass);\n if (isHidden === true) {\n emit('paginationShow');\n } else {\n emit('paginationHide');\n }\n $el.toggleClass(swiper.params.pagination.hiddenClass);\n }\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n if (swiper.pagination.$el) {\n swiper.pagination.$el.removeClass(swiper.params.pagination.paginationDisabledClass);\n }\n init();\n render();\n update();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n if (swiper.pagination.$el) {\n swiper.pagination.$el.addClass(swiper.params.pagination.paginationDisabledClass);\n }\n destroy();\n };\n\n Object.assign(swiper.pagination, {\n enable,\n disable,\n render,\n update,\n init,\n destroy,\n });\n}\n","import { getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { nextTick } from '../../shared/utils.js';\nimport createElementIfNotDefined from '../../shared/create-element-if-not-defined.js';\n\nexport default function Scrollbar({ swiper, extendParams, on, emit }) {\n const document = getDocument();\n\n let isTouched = false;\n let timeout = null;\n let dragTimeout = null;\n let dragStartPos;\n let dragSize;\n let trackSize;\n let divider;\n\n extendParams({\n scrollbar: {\n el: null,\n dragSize: 'auto',\n hide: false,\n draggable: false,\n snapOnRelease: true,\n lockClass: 'swiper-scrollbar-lock',\n dragClass: 'swiper-scrollbar-drag',\n scrollbarDisabledClass: 'swiper-scrollbar-disabled',\n horizontalClass: `swiper-scrollbar-horizontal`,\n verticalClass: `swiper-scrollbar-vertical`,\n },\n });\n\n swiper.scrollbar = {\n el: null,\n dragEl: null,\n $el: null,\n $dragEl: null,\n };\n\n function setTranslate() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n const { scrollbar, rtlTranslate: rtl, progress } = swiper;\n const { $dragEl, $el } = scrollbar;\n const params = swiper.params.scrollbar;\n\n let newSize = dragSize;\n let newPos = (trackSize - dragSize) * progress;\n if (rtl) {\n newPos = -newPos;\n if (newPos > 0) {\n newSize = dragSize - newPos;\n newPos = 0;\n } else if (-newPos + dragSize > trackSize) {\n newSize = trackSize + newPos;\n }\n } else if (newPos < 0) {\n newSize = dragSize + newPos;\n newPos = 0;\n } else if (newPos + dragSize > trackSize) {\n newSize = trackSize - newPos;\n }\n if (swiper.isHorizontal()) {\n $dragEl.transform(`translate3d(${newPos}px, 0, 0)`);\n $dragEl[0].style.width = `${newSize}px`;\n } else {\n $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`);\n $dragEl[0].style.height = `${newSize}px`;\n }\n if (params.hide) {\n clearTimeout(timeout);\n $el[0].style.opacity = 1;\n timeout = setTimeout(() => {\n $el[0].style.opacity = 0;\n $el.transition(400);\n }, 1000);\n }\n }\n function setTransition(duration) {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n swiper.scrollbar.$dragEl.transition(duration);\n }\n function updateSize() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n\n const { scrollbar } = swiper;\n const { $dragEl, $el } = scrollbar;\n\n $dragEl[0].style.width = '';\n $dragEl[0].style.height = '';\n trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;\n\n divider =\n swiper.size /\n (swiper.virtualSize +\n swiper.params.slidesOffsetBefore -\n (swiper.params.centeredSlides ? swiper.snapGrid[0] : 0));\n if (swiper.params.scrollbar.dragSize === 'auto') {\n dragSize = trackSize * divider;\n } else {\n dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);\n }\n\n if (swiper.isHorizontal()) {\n $dragEl[0].style.width = `${dragSize}px`;\n } else {\n $dragEl[0].style.height = `${dragSize}px`;\n }\n\n if (divider >= 1) {\n $el[0].style.display = 'none';\n } else {\n $el[0].style.display = '';\n }\n if (swiper.params.scrollbar.hide) {\n $el[0].style.opacity = 0;\n }\n\n if (swiper.params.watchOverflow && swiper.enabled) {\n scrollbar.$el[swiper.isLocked ? 'addClass' : 'removeClass'](\n swiper.params.scrollbar.lockClass,\n );\n }\n }\n function getPointerPosition(e) {\n if (swiper.isHorizontal()) {\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientX\n : e.clientX;\n }\n return e.type === 'touchstart' || e.type === 'touchmove'\n ? e.targetTouches[0].clientY\n : e.clientY;\n }\n function setDragPosition(e) {\n const { scrollbar, rtlTranslate: rtl } = swiper;\n const { $el } = scrollbar;\n\n let positionRatio;\n positionRatio =\n (getPointerPosition(e) -\n $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] -\n (dragStartPos !== null ? dragStartPos : dragSize / 2)) /\n (trackSize - dragSize);\n positionRatio = Math.max(Math.min(positionRatio, 1), 0);\n if (rtl) {\n positionRatio = 1 - positionRatio;\n }\n\n const position =\n swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;\n\n swiper.updateProgress(position);\n swiper.setTranslate(position);\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n function onDragStart(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n isTouched = true;\n dragStartPos =\n e.target === $dragEl[0] || e.target === $dragEl\n ? getPointerPosition(e) -\n e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top']\n : null;\n e.preventDefault();\n e.stopPropagation();\n\n $wrapperEl.transition(100);\n $dragEl.transition(100);\n setDragPosition(e);\n\n clearTimeout(dragTimeout);\n\n $el.transition(0);\n if (params.hide) {\n $el.css('opacity', 1);\n }\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', 'none');\n }\n emit('scrollbarDragStart', e);\n }\n function onDragMove(e) {\n const { scrollbar, $wrapperEl } = swiper;\n const { $el, $dragEl } = scrollbar;\n\n if (!isTouched) return;\n if (e.preventDefault) e.preventDefault();\n else e.returnValue = false;\n setDragPosition(e);\n $wrapperEl.transition(0);\n $el.transition(0);\n $dragEl.transition(0);\n emit('scrollbarDragMove', e);\n }\n function onDragEnd(e) {\n const params = swiper.params.scrollbar;\n const { scrollbar, $wrapperEl } = swiper;\n const { $el } = scrollbar;\n\n if (!isTouched) return;\n isTouched = false;\n if (swiper.params.cssMode) {\n swiper.$wrapperEl.css('scroll-snap-type', '');\n $wrapperEl.transition('');\n }\n if (params.hide) {\n clearTimeout(dragTimeout);\n dragTimeout = nextTick(() => {\n $el.css('opacity', 0);\n $el.transition(400);\n }, 1000);\n }\n emit('scrollbarDragEnd', e);\n if (params.snapOnRelease) {\n swiper.slideToClosest();\n }\n }\n\n function events(method) {\n const { scrollbar, touchEventsTouch, touchEventsDesktop, params, support } = swiper;\n const $el = scrollbar.$el;\n if (!$el) return;\n const target = $el[0];\n const activeListener =\n support.passiveListener && params.passiveListeners\n ? { passive: false, capture: false }\n : false;\n const passiveListener =\n support.passiveListener && params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n if (!target) return;\n const eventMethod = method === 'on' ? 'addEventListener' : 'removeEventListener';\n if (!support.touch) {\n target[eventMethod](touchEventsDesktop.start, onDragStart, activeListener);\n document[eventMethod](touchEventsDesktop.move, onDragMove, activeListener);\n document[eventMethod](touchEventsDesktop.end, onDragEnd, passiveListener);\n } else {\n target[eventMethod](touchEventsTouch.start, onDragStart, activeListener);\n target[eventMethod](touchEventsTouch.move, onDragMove, activeListener);\n target[eventMethod](touchEventsTouch.end, onDragEnd, passiveListener);\n }\n }\n\n function enableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('on');\n }\n function disableDraggable() {\n if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;\n events('off');\n }\n function init() {\n const { scrollbar, $el: $swiperEl } = swiper;\n swiper.params.scrollbar = createElementIfNotDefined(\n swiper,\n swiper.originalParams.scrollbar,\n swiper.params.scrollbar,\n { el: 'swiper-scrollbar' },\n );\n const params = swiper.params.scrollbar;\n if (!params.el) return;\n\n let $el = $(params.el);\n if (\n swiper.params.uniqueNavElements &&\n typeof params.el === 'string' &&\n $el.length > 1 &&\n $swiperEl.find(params.el).length === 1\n ) {\n $el = $swiperEl.find(params.el);\n }\n\n $el.addClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n\n let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`);\n if ($dragEl.length === 0) {\n $dragEl = $(`
`);\n $el.append($dragEl);\n }\n\n Object.assign(scrollbar, {\n $el,\n el: $el[0],\n $dragEl,\n dragEl: $dragEl[0],\n });\n\n if (params.draggable) {\n enableDraggable();\n }\n\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n }\n function destroy() {\n const params = swiper.params.scrollbar;\n const $el = swiper.scrollbar.$el;\n if ($el) {\n $el.removeClass(swiper.isHorizontal() ? params.horizontalClass : params.verticalClass);\n }\n\n disableDraggable();\n }\n\n on('init', () => {\n if (swiper.params.scrollbar.enabled === false) {\n // eslint-disable-next-line\n disable();\n } else {\n init();\n updateSize();\n setTranslate();\n }\n });\n on('update resize observerUpdate lock unlock', () => {\n updateSize();\n });\n on('setTranslate', () => {\n setTranslate();\n });\n on('setTransition', (_s, duration) => {\n setTransition(duration);\n });\n on('enable disable', () => {\n const { $el } = swiper.scrollbar;\n if ($el) {\n $el[swiper.enabled ? 'removeClass' : 'addClass'](swiper.params.scrollbar.lockClass);\n }\n });\n on('destroy', () => {\n destroy();\n });\n\n const enable = () => {\n swiper.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.removeClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n init();\n updateSize();\n setTranslate();\n };\n\n const disable = () => {\n swiper.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n if (swiper.scrollbar.$el) {\n swiper.scrollbar.$el.addClass(swiper.params.scrollbar.scrollbarDisabledClass);\n }\n destroy();\n };\n\n Object.assign(swiper.scrollbar, {\n enable,\n disable,\n updateSize,\n setTranslate,\n init,\n destroy,\n });\n}\n","import $ from '../../shared/dom.js';\n\nexport default function Parallax({ swiper, extendParams, on }) {\n extendParams({\n parallax: {\n enabled: false,\n },\n });\n\n const setTransform = (el, progress) => {\n const { rtl } = swiper;\n\n const $el = $(el);\n const rtlFactor = rtl ? -1 : 1;\n\n const p = $el.attr('data-swiper-parallax') || '0';\n let x = $el.attr('data-swiper-parallax-x');\n let y = $el.attr('data-swiper-parallax-y');\n const scale = $el.attr('data-swiper-parallax-scale');\n const opacity = $el.attr('data-swiper-parallax-opacity');\n\n if (x || y) {\n x = x || '0';\n y = y || '0';\n } else if (swiper.isHorizontal()) {\n x = p;\n y = '0';\n } else {\n y = p;\n x = '0';\n }\n\n if (x.indexOf('%') >= 0) {\n x = `${parseInt(x, 10) * progress * rtlFactor}%`;\n } else {\n x = `${x * progress * rtlFactor}px`;\n }\n if (y.indexOf('%') >= 0) {\n y = `${parseInt(y, 10) * progress}%`;\n } else {\n y = `${y * progress}px`;\n }\n\n if (typeof opacity !== 'undefined' && opacity !== null) {\n const currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));\n $el[0].style.opacity = currentOpacity;\n }\n if (typeof scale === 'undefined' || scale === null) {\n $el.transform(`translate3d(${x}, ${y}, 0px)`);\n } else {\n const currentScale = scale - (scale - 1) * (1 - Math.abs(progress));\n $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`);\n }\n };\n\n const setTranslate = () => {\n const { $el, slides, progress, snapGrid } = swiper;\n $el\n .children(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, progress);\n });\n slides.each((slideEl, slideIndex) => {\n let slideProgress = slideEl.progress;\n if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {\n slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);\n }\n slideProgress = Math.min(Math.max(slideProgress, -1), 1);\n $(slideEl)\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((el) => {\n setTransform(el, slideProgress);\n });\n });\n };\n\n const setTransition = (duration = swiper.params.speed) => {\n const { $el } = swiper;\n $el\n .find(\n '[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]',\n )\n .each((parallaxEl) => {\n const $parallaxEl = $(parallaxEl);\n let parallaxDuration =\n parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;\n if (duration === 0) parallaxDuration = 0;\n $parallaxEl.transition(parallaxDuration);\n });\n };\n\n on('beforeInit', () => {\n if (!swiper.params.parallax.enabled) return;\n swiper.params.watchSlidesProgress = true;\n swiper.originalParams.watchSlidesProgress = true;\n });\n on('init', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTranslate', () => {\n if (!swiper.params.parallax.enabled) return;\n setTranslate();\n });\n on('setTransition', (_swiper, duration) => {\n if (!swiper.params.parallax.enabled) return;\n setTransition(duration);\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\nimport { getTranslate } from '../../shared/utils.js';\n\nexport default function Zoom({ swiper, extendParams, on, emit }) {\n const window = getWindow();\n extendParams({\n zoom: {\n enabled: false,\n maxRatio: 3,\n minRatio: 1,\n toggle: true,\n containerClass: 'swiper-zoom-container',\n zoomedSlideClass: 'swiper-slide-zoomed',\n },\n });\n\n swiper.zoom = {\n enabled: false,\n };\n\n let currentScale = 1;\n let isScaling = false;\n let gesturesEnabled;\n let fakeGestureTouched;\n let fakeGestureMoved;\n const gesture = {\n $slideEl: undefined,\n slideWidth: undefined,\n slideHeight: undefined,\n $imageEl: undefined,\n $imageWrapEl: undefined,\n maxRatio: 3,\n };\n const image = {\n isTouched: undefined,\n isMoved: undefined,\n currentX: undefined,\n currentY: undefined,\n minX: undefined,\n minY: undefined,\n maxX: undefined,\n maxY: undefined,\n width: undefined,\n height: undefined,\n startX: undefined,\n startY: undefined,\n touchesStart: {},\n touchesCurrent: {},\n };\n const velocity = {\n x: undefined,\n y: undefined,\n prevPositionX: undefined,\n prevPositionY: undefined,\n prevTime: undefined,\n };\n\n let scale = 1;\n Object.defineProperty(swiper.zoom, 'scale', {\n get() {\n return scale;\n },\n set(value) {\n if (scale !== value) {\n const imageEl = gesture.$imageEl ? gesture.$imageEl[0] : undefined;\n const slideEl = gesture.$slideEl ? gesture.$slideEl[0] : undefined;\n emit('zoomChange', value, imageEl, slideEl);\n }\n scale = value;\n },\n });\n\n function getDistanceBetweenTouches(e) {\n if (e.targetTouches.length < 2) return 1;\n const x1 = e.targetTouches[0].pageX;\n const y1 = e.targetTouches[0].pageY;\n const x2 = e.targetTouches[1].pageX;\n const y2 = e.targetTouches[1].pageY;\n const distance = Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);\n return distance;\n }\n\n // Events\n function onGestureStart(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n if (!support.gestures) {\n if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureTouched = true;\n gesture.scaleStart = getDistanceBetweenTouches(e);\n }\n if (!gesture.$slideEl || !gesture.$slideEl.length) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('picture, img, svg, canvas, .swiper-zoom-target')\n .eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (gesture.$imageWrapEl.length === 0) {\n gesture.$imageEl = undefined;\n return;\n }\n }\n if (gesture.$imageEl) {\n gesture.$imageEl.transition(0);\n }\n isScaling = true;\n }\n function onGestureChange(e) {\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) {\n return;\n }\n fakeGestureMoved = true;\n gesture.scaleMove = getDistanceBetweenTouches(e);\n }\n\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) {\n if (e.type === 'gesturechange') onGestureStart(e);\n return;\n }\n if (support.gestures) {\n zoom.scale = e.scale * currentScale;\n } else {\n zoom.scale = (gesture.scaleMove / gesture.scaleStart) * currentScale;\n }\n if (zoom.scale > gesture.maxRatio) {\n zoom.scale = gesture.maxRatio - 1 + (zoom.scale - gesture.maxRatio + 1) ** 0.5;\n }\n if (zoom.scale < params.minRatio) {\n zoom.scale = params.minRatio + 1 - (params.minRatio - zoom.scale + 1) ** 0.5;\n }\n gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n function onGestureEnd(e) {\n const device = swiper.device;\n const support = swiper.support;\n const params = swiper.params.zoom;\n const zoom = swiper.zoom;\n if (!support.gestures) {\n if (!fakeGestureTouched || !fakeGestureMoved) {\n return;\n }\n if (\n e.type !== 'touchend' ||\n (e.type === 'touchend' && e.changedTouches.length < 2 && !device.android)\n ) {\n return;\n }\n fakeGestureTouched = false;\n fakeGestureMoved = false;\n }\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);\n gesture.$imageEl\n .transition(swiper.params.speed)\n .transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n currentScale = zoom.scale;\n isScaling = false;\n if (zoom.scale === 1) gesture.$slideEl = undefined;\n }\n function onTouchStart(e) {\n const device = swiper.device;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (image.isTouched) return;\n if (device.android && e.cancelable) e.preventDefault();\n image.isTouched = true;\n image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;\n }\n function onTouchMove(e) {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n swiper.allowClick = false;\n if (!image.isTouched || !gesture.$slideEl) return;\n\n if (!image.isMoved) {\n image.width = gesture.$imageEl[0].offsetWidth;\n image.height = gesture.$imageEl[0].offsetHeight;\n image.startX = getTranslate(gesture.$imageWrapEl[0], 'x') || 0;\n image.startY = getTranslate(gesture.$imageWrapEl[0], 'y') || 0;\n gesture.slideWidth = gesture.$slideEl[0].offsetWidth;\n gesture.slideHeight = gesture.$slideEl[0].offsetHeight;\n gesture.$imageWrapEl.transition(0);\n }\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n\n if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;\n\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n\n image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;\n image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;\n\n if (!image.isMoved && !isScaling) {\n if (\n swiper.isHorizontal() &&\n ((Math.floor(image.minX) === Math.floor(image.startX) &&\n image.touchesCurrent.x < image.touchesStart.x) ||\n (Math.floor(image.maxX) === Math.floor(image.startX) &&\n image.touchesCurrent.x > image.touchesStart.x))\n ) {\n image.isTouched = false;\n return;\n }\n if (\n !swiper.isHorizontal() &&\n ((Math.floor(image.minY) === Math.floor(image.startY) &&\n image.touchesCurrent.y < image.touchesStart.y) ||\n (Math.floor(image.maxY) === Math.floor(image.startY) &&\n image.touchesCurrent.y > image.touchesStart.y))\n ) {\n image.isTouched = false;\n return;\n }\n }\n if (e.cancelable) {\n e.preventDefault();\n }\n e.stopPropagation();\n\n image.isMoved = true;\n image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;\n image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;\n\n if (image.currentX < image.minX) {\n image.currentX = image.minX + 1 - (image.minX - image.currentX + 1) ** 0.8;\n }\n if (image.currentX > image.maxX) {\n image.currentX = image.maxX - 1 + (image.currentX - image.maxX + 1) ** 0.8;\n }\n\n if (image.currentY < image.minY) {\n image.currentY = image.minY + 1 - (image.minY - image.currentY + 1) ** 0.8;\n }\n if (image.currentY > image.maxY) {\n image.currentY = image.maxY - 1 + (image.currentY - image.maxY + 1) ** 0.8;\n }\n\n // Velocity\n if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;\n if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;\n if (!velocity.prevTime) velocity.prevTime = Date.now();\n velocity.x =\n (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;\n velocity.y =\n (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;\n if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;\n if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;\n velocity.prevPositionX = image.touchesCurrent.x;\n velocity.prevPositionY = image.touchesCurrent.y;\n velocity.prevTime = Date.now();\n\n gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n function onTouchEnd() {\n const zoom = swiper.zoom;\n if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;\n if (!image.isTouched || !image.isMoved) {\n image.isTouched = false;\n image.isMoved = false;\n return;\n }\n image.isTouched = false;\n image.isMoved = false;\n let momentumDurationX = 300;\n let momentumDurationY = 300;\n const momentumDistanceX = velocity.x * momentumDurationX;\n const newPositionX = image.currentX + momentumDistanceX;\n const momentumDistanceY = velocity.y * momentumDurationY;\n const newPositionY = image.currentY + momentumDistanceY;\n\n // Fix duration\n if (velocity.x !== 0)\n momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);\n if (velocity.y !== 0)\n momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);\n const momentumDuration = Math.max(momentumDurationX, momentumDurationY);\n\n image.currentX = newPositionX;\n image.currentY = newPositionY;\n\n // Define if we need image drag\n const scaledWidth = image.width * zoom.scale;\n const scaledHeight = image.height * zoom.scale;\n image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);\n image.maxX = -image.minX;\n image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);\n image.maxY = -image.minY;\n image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);\n image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);\n\n gesture.$imageWrapEl\n .transition(momentumDuration)\n .transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`);\n }\n function onTransitionEnd() {\n const zoom = swiper.zoom;\n if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {\n if (gesture.$imageEl) {\n gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');\n }\n if (gesture.$imageWrapEl) {\n gesture.$imageWrapEl.transform('translate3d(0,0,0)');\n }\n\n zoom.scale = 1;\n currentScale = 1;\n\n gesture.$slideEl = undefined;\n gesture.$imageEl = undefined;\n gesture.$imageWrapEl = undefined;\n }\n }\n\n function zoomIn(e) {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (e && e.target) {\n gesture.$slideEl = $(e.target).closest(`.${swiper.params.slideClass}`);\n }\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n }\n\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('picture, img, svg, canvas, .swiper-zoom-target')\n .eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = 'hidden';\n swiper.wrapperEl.style.touchAction = 'none';\n }\n\n gesture.$slideEl.addClass(`${params.zoomedSlideClass}`);\n\n let touchX;\n let touchY;\n let offsetX;\n let offsetY;\n let diffX;\n let diffY;\n let translateX;\n let translateY;\n let imageWidth;\n let imageHeight;\n let scaledWidth;\n let scaledHeight;\n let translateMinX;\n let translateMinY;\n let translateMaxX;\n let translateMaxY;\n let slideWidth;\n let slideHeight;\n\n if (typeof image.touchesStart.x === 'undefined' && e) {\n touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;\n touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;\n } else {\n touchX = image.touchesStart.x;\n touchY = image.touchesStart.y;\n }\n\n zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;\n if (e) {\n slideWidth = gesture.$slideEl[0].offsetWidth;\n slideHeight = gesture.$slideEl[0].offsetHeight;\n offsetX = gesture.$slideEl.offset().left + window.scrollX;\n offsetY = gesture.$slideEl.offset().top + window.scrollY;\n diffX = offsetX + slideWidth / 2 - touchX;\n diffY = offsetY + slideHeight / 2 - touchY;\n\n imageWidth = gesture.$imageEl[0].offsetWidth;\n imageHeight = gesture.$imageEl[0].offsetHeight;\n scaledWidth = imageWidth * zoom.scale;\n scaledHeight = imageHeight * zoom.scale;\n\n translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);\n translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);\n translateMaxX = -translateMinX;\n translateMaxY = -translateMinY;\n\n translateX = diffX * zoom.scale;\n translateY = diffY * zoom.scale;\n\n if (translateX < translateMinX) {\n translateX = translateMinX;\n }\n if (translateX > translateMaxX) {\n translateX = translateMaxX;\n }\n\n if (translateY < translateMinY) {\n translateY = translateMinY;\n }\n if (translateY > translateMaxY) {\n translateY = translateMaxY;\n }\n } else {\n translateX = 0;\n translateY = 0;\n }\n gesture.$imageWrapEl\n .transition(300)\n .transform(`translate3d(${translateX}px, ${translateY}px,0)`);\n gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`);\n }\n function zoomOut() {\n const zoom = swiper.zoom;\n const params = swiper.params.zoom;\n\n if (!gesture.$slideEl) {\n if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) {\n gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`);\n } else {\n gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);\n }\n gesture.$imageEl = gesture.$slideEl\n .find(`.${params.containerClass}`)\n .eq(0)\n .find('picture, img, svg, canvas, .swiper-zoom-target')\n .eq(0);\n gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`);\n }\n if (\n !gesture.$imageEl ||\n gesture.$imageEl.length === 0 ||\n !gesture.$imageWrapEl ||\n gesture.$imageWrapEl.length === 0\n )\n return;\n if (swiper.params.cssMode) {\n swiper.wrapperEl.style.overflow = '';\n swiper.wrapperEl.style.touchAction = '';\n }\n zoom.scale = 1;\n currentScale = 1;\n gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');\n gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');\n gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`);\n gesture.$slideEl = undefined;\n }\n\n // Toggle Zoom\n function zoomToggle(e) {\n const zoom = swiper.zoom;\n\n if (zoom.scale && zoom.scale !== 1) {\n // Zoom Out\n zoomOut();\n } else {\n // Zoom In\n zoomIn(e);\n }\n }\n\n function getListeners() {\n const support = swiper.support;\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n const activeListenerWithCapture = support.passiveListener\n ? { passive: false, capture: true }\n : true;\n return { passiveListener, activeListenerWithCapture };\n }\n\n function getSlideSelector() {\n return `.${swiper.params.slideClass}`;\n }\n\n function toggleGestures(method) {\n const { passiveListener } = getListeners();\n const slideSelector = getSlideSelector();\n swiper.$wrapperEl[method]('gesturestart', slideSelector, onGestureStart, passiveListener);\n swiper.$wrapperEl[method]('gesturechange', slideSelector, onGestureChange, passiveListener);\n swiper.$wrapperEl[method]('gestureend', slideSelector, onGestureEnd, passiveListener);\n }\n function enableGestures() {\n if (gesturesEnabled) return;\n gesturesEnabled = true;\n toggleGestures('on');\n }\n function disableGestures() {\n if (!gesturesEnabled) return;\n gesturesEnabled = false;\n toggleGestures('off');\n }\n\n // Attach/Detach Events\n function enable() {\n const zoom = swiper.zoom;\n if (zoom.enabled) return;\n zoom.enabled = true;\n const support = swiper.support;\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.on(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.on(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.on(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.on(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.on(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n function disable() {\n const zoom = swiper.zoom;\n if (!zoom.enabled) return;\n const support = swiper.support;\n zoom.enabled = false;\n\n const { passiveListener, activeListenerWithCapture } = getListeners();\n const slideSelector = getSlideSelector();\n\n // Scale image\n if (support.gestures) {\n swiper.$wrapperEl.off(swiper.touchEvents.start, enableGestures, passiveListener);\n swiper.$wrapperEl.off(swiper.touchEvents.end, disableGestures, passiveListener);\n } else if (swiper.touchEvents.start === 'touchstart') {\n swiper.$wrapperEl.off(\n swiper.touchEvents.start,\n slideSelector,\n onGestureStart,\n passiveListener,\n );\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n slideSelector,\n onGestureChange,\n activeListenerWithCapture,\n );\n swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, onGestureEnd, passiveListener);\n if (swiper.touchEvents.cancel) {\n swiper.$wrapperEl.off(\n swiper.touchEvents.cancel,\n slideSelector,\n onGestureEnd,\n passiveListener,\n );\n }\n }\n\n // Move image\n swiper.$wrapperEl.off(\n swiper.touchEvents.move,\n `.${swiper.params.zoom.containerClass}`,\n onTouchMove,\n activeListenerWithCapture,\n );\n }\n\n on('init', () => {\n if (swiper.params.zoom.enabled) {\n enable();\n }\n });\n on('destroy', () => {\n disable();\n });\n on('touchStart', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchStart(e);\n });\n on('touchEnd', (_s, e) => {\n if (!swiper.zoom.enabled) return;\n onTouchEnd(e);\n });\n on('doubleTap', (_s, e) => {\n if (\n !swiper.animating &&\n swiper.params.zoom.enabled &&\n swiper.zoom.enabled &&\n swiper.params.zoom.toggle\n ) {\n zoomToggle(e);\n }\n });\n on('transitionEnd', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled) {\n onTransitionEnd();\n }\n });\n on('slideChange', () => {\n if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) {\n onTransitionEnd();\n }\n });\n\n Object.assign(swiper.zoom, {\n enable,\n disable,\n in: zoomIn,\n out: zoomOut,\n toggle: zoomToggle,\n });\n}\n","import { getWindow } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function Lazy({ swiper, extendParams, on, emit }) {\n extendParams({\n lazy: {\n checkInView: false,\n enabled: false,\n loadPrevNext: false,\n loadPrevNextAmount: 1,\n loadOnTransitionStart: false,\n scrollingElement: '',\n\n elementClass: 'swiper-lazy',\n loadingClass: 'swiper-lazy-loading',\n loadedClass: 'swiper-lazy-loaded',\n preloaderClass: 'swiper-lazy-preloader',\n },\n });\n\n swiper.lazy = {};\n\n let scrollHandlerAttached = false;\n let initialImageLoaded = false;\n\n function loadInSlide(index, loadInDuplicate = true) {\n const params = swiper.params.lazy;\n if (typeof index === 'undefined') return;\n if (swiper.slides.length === 0) return;\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n\n const $slideEl = isVirtual\n ? swiper.$wrapperEl.children(\n `.${swiper.params.slideClass}[data-swiper-slide-index=\"${index}\"]`,\n )\n : swiper.slides.eq(index);\n\n const $images = $slideEl.find(\n `.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`,\n );\n if (\n $slideEl.hasClass(params.elementClass) &&\n !$slideEl.hasClass(params.loadedClass) &&\n !$slideEl.hasClass(params.loadingClass)\n ) {\n $images.push($slideEl[0]);\n }\n if ($images.length === 0) return;\n\n $images.each((imageEl) => {\n const $imageEl = $(imageEl);\n $imageEl.addClass(params.loadingClass);\n\n const background = $imageEl.attr('data-background');\n const src = $imageEl.attr('data-src');\n const srcset = $imageEl.attr('data-srcset');\n const sizes = $imageEl.attr('data-sizes');\n const $pictureEl = $imageEl.parent('picture');\n\n swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, () => {\n if (\n typeof swiper === 'undefined' ||\n swiper === null ||\n !swiper ||\n (swiper && !swiper.params) ||\n swiper.destroyed\n )\n return;\n if (background) {\n $imageEl.css('background-image', `url(\"${background}\")`);\n $imageEl.removeAttr('data-background');\n } else {\n if (srcset) {\n $imageEl.attr('srcset', srcset);\n $imageEl.removeAttr('data-srcset');\n }\n if (sizes) {\n $imageEl.attr('sizes', sizes);\n $imageEl.removeAttr('data-sizes');\n }\n if ($pictureEl.length) {\n $pictureEl.children('source').each((sourceEl) => {\n const $source = $(sourceEl);\n\n if ($source.attr('data-srcset')) {\n $source.attr('srcset', $source.attr('data-srcset'));\n $source.removeAttr('data-srcset');\n }\n });\n }\n if (src) {\n $imageEl.attr('src', src);\n $imageEl.removeAttr('data-src');\n }\n }\n\n $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);\n $slideEl.find(`.${params.preloaderClass}`).remove();\n if (swiper.params.loop && loadInDuplicate) {\n const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');\n if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {\n const originalSlide = swiper.$wrapperEl.children(\n `[data-swiper-slide-index=\"${slideOriginalIndex}\"]:not(.${swiper.params.slideDuplicateClass})`,\n );\n loadInSlide(originalSlide.index(), false);\n } else {\n const duplicatedSlide = swiper.$wrapperEl.children(\n `.${swiper.params.slideDuplicateClass}[data-swiper-slide-index=\"${slideOriginalIndex}\"]`,\n );\n loadInSlide(duplicatedSlide.index(), false);\n }\n }\n emit('lazyImageReady', $slideEl[0], $imageEl[0]);\n if (swiper.params.autoHeight) {\n swiper.updateAutoHeight();\n }\n });\n\n emit('lazyImageLoad', $slideEl[0], $imageEl[0]);\n });\n }\n\n function load() {\n const { $wrapperEl, params: swiperParams, slides, activeIndex } = swiper;\n const isVirtual = swiper.virtual && swiperParams.virtual.enabled;\n const params = swiperParams.lazy;\n\n let slidesPerView = swiperParams.slidesPerView;\n if (slidesPerView === 'auto') {\n slidesPerView = 0;\n }\n\n function slideExist(index) {\n if (isVirtual) {\n if (\n $wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index=\"${index}\"]`)\n .length\n ) {\n return true;\n }\n } else if (slides[index]) return true;\n return false;\n }\n\n function slideIndex(slideEl) {\n if (isVirtual) {\n return $(slideEl).attr('data-swiper-slide-index');\n }\n return $(slideEl).index();\n }\n\n if (!initialImageLoaded) initialImageLoaded = true;\n if (swiper.params.watchSlidesProgress) {\n $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((slideEl) => {\n const index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();\n loadInSlide(index);\n });\n } else if (slidesPerView > 1) {\n for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n loadInSlide(activeIndex);\n }\n if (params.loadPrevNext) {\n if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) {\n const amount = params.loadPrevNextAmount;\n const spv = Math.ceil(slidesPerView);\n const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);\n const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);\n // Next Slides\n for (let i = activeIndex + spv; i < maxIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n // Prev Slides\n for (let i = minIndex; i < activeIndex; i += 1) {\n if (slideExist(i)) loadInSlide(i);\n }\n } else {\n const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`);\n if (nextSlide.length > 0) loadInSlide(slideIndex(nextSlide));\n\n const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`);\n if (prevSlide.length > 0) loadInSlide(slideIndex(prevSlide));\n }\n }\n }\n function checkInViewOnLoad() {\n const window = getWindow();\n if (!swiper || swiper.destroyed) return;\n const $scrollElement = swiper.params.lazy.scrollingElement\n ? $(swiper.params.lazy.scrollingElement)\n : $(window);\n const isWindow = $scrollElement[0] === window;\n const scrollElementWidth = isWindow ? window.innerWidth : $scrollElement[0].offsetWidth;\n const scrollElementHeight = isWindow ? window.innerHeight : $scrollElement[0].offsetHeight;\n const swiperOffset = swiper.$el.offset();\n const { rtlTranslate: rtl } = swiper;\n\n let inView = false;\n\n if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;\n const swiperCoord = [\n [swiperOffset.left, swiperOffset.top],\n [swiperOffset.left + swiper.width, swiperOffset.top],\n [swiperOffset.left, swiperOffset.top + swiper.height],\n [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height],\n ];\n for (let i = 0; i < swiperCoord.length; i += 1) {\n const point = swiperCoord[i];\n if (\n point[0] >= 0 &&\n point[0] <= scrollElementWidth &&\n point[1] >= 0 &&\n point[1] <= scrollElementHeight\n ) {\n if (point[0] === 0 && point[1] === 0) continue; // eslint-disable-line\n inView = true;\n }\n }\n\n const passiveListener =\n swiper.touchEvents.start === 'touchstart' &&\n swiper.support.passiveListener &&\n swiper.params.passiveListeners\n ? { passive: true, capture: false }\n : false;\n\n if (inView) {\n load();\n $scrollElement.off('scroll', checkInViewOnLoad, passiveListener);\n } else if (!scrollHandlerAttached) {\n scrollHandlerAttached = true;\n $scrollElement.on('scroll', checkInViewOnLoad, passiveListener);\n }\n }\n\n on('beforeInit', () => {\n if (swiper.params.lazy.enabled && swiper.params.preloadImages) {\n swiper.params.preloadImages = false;\n }\n });\n on('init', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('scroll', () => {\n if (\n swiper.params.freeMode &&\n swiper.params.freeMode.enabled &&\n !swiper.params.freeMode.sticky\n ) {\n load();\n }\n });\n on('scrollbarDragMove resize _freeModeNoMomentumRelease', () => {\n if (swiper.params.lazy.enabled) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('transitionStart', () => {\n if (swiper.params.lazy.enabled) {\n if (\n swiper.params.lazy.loadOnTransitionStart ||\n (!swiper.params.lazy.loadOnTransitionStart && !initialImageLoaded)\n ) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n }\n });\n on('transitionEnd', () => {\n if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {\n if (swiper.params.lazy.checkInView) {\n checkInViewOnLoad();\n } else {\n load();\n }\n }\n });\n on('slideChange', () => {\n const { lazy, cssMode, watchSlidesProgress, touchReleaseOnEdges, resistanceRatio } =\n swiper.params;\n if (\n lazy.enabled &&\n (cssMode || (watchSlidesProgress && (touchReleaseOnEdges || resistanceRatio === 0)))\n ) {\n load();\n }\n });\n\n on('destroy', () => {\n if (!swiper.$el) return;\n swiper.$el\n .find(`.${swiper.params.lazy.loadingClass}`)\n .removeClass(swiper.params.lazy.loadingClass);\n });\n\n Object.assign(swiper.lazy, {\n load,\n loadInSlide,\n });\n}\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\">>\"] }] */\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Controller({ swiper, extendParams, on }) {\n extendParams({\n controller: {\n control: undefined,\n inverse: false,\n by: 'slide', // or 'container'\n },\n });\n\n swiper.controller = {\n control: undefined,\n };\n\n function LinearSpline(x, y) {\n const binarySearch = (function search() {\n let maxIndex;\n let minIndex;\n let guess;\n return (array, val) => {\n minIndex = -1;\n maxIndex = array.length;\n while (maxIndex - minIndex > 1) {\n guess = (maxIndex + minIndex) >> 1;\n if (array[guess] <= val) {\n minIndex = guess;\n } else {\n maxIndex = guess;\n }\n }\n return maxIndex;\n };\n })();\n this.x = x;\n this.y = y;\n this.lastIndex = x.length - 1;\n // Given an x value (x2), return the expected y2 value:\n // (x1,y1) is the known point before given value,\n // (x3,y3) is the known point after given value.\n let i1;\n let i3;\n\n this.interpolate = function interpolate(x2) {\n if (!x2) return 0;\n\n // Get the indexes of x1 and x3 (the array indexes before and after given x2):\n i3 = binarySearch(this.x, x2);\n i1 = i3 - 1;\n\n // We have our indexes i1 & i3, so we can calculate already:\n // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1\n return (\n ((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1]) + this.y[i1]\n );\n };\n return this;\n }\n // xxx: for now i will just save one spline function to to\n function getInterpolateFunction(c) {\n if (!swiper.controller.spline) {\n swiper.controller.spline = swiper.params.loop\n ? new LinearSpline(swiper.slidesGrid, c.slidesGrid)\n : new LinearSpline(swiper.snapGrid, c.snapGrid);\n }\n }\n function setTranslate(_t, byController) {\n const controlled = swiper.controller.control;\n let multiplier;\n let controlledTranslate;\n const Swiper = swiper.constructor;\n function setControlledTranslate(c) {\n // this will create an Interpolate function based on the snapGrids\n // x is the Grid of the scrolled scroller and y will be the controlled scroller\n // it makes sense to create this only once and recall it for the interpolation\n // the function does a lot of value caching for performance\n const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;\n if (swiper.params.controller.by === 'slide') {\n getInterpolateFunction(c);\n // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid\n // but it did not work out\n controlledTranslate = -swiper.controller.spline.interpolate(-translate);\n }\n\n if (!controlledTranslate || swiper.params.controller.by === 'container') {\n multiplier =\n (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());\n controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();\n }\n\n if (swiper.params.controller.inverse) {\n controlledTranslate = c.maxTranslate() - controlledTranslate;\n }\n c.updateProgress(controlledTranslate);\n c.setTranslate(controlledTranslate, swiper);\n c.updateActiveIndex();\n c.updateSlidesClasses();\n }\n if (Array.isArray(controlled)) {\n for (let i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTranslate(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTranslate(controlled);\n }\n }\n function setTransition(duration, byController) {\n const Swiper = swiper.constructor;\n const controlled = swiper.controller.control;\n let i;\n function setControlledTransition(c) {\n c.setTransition(duration, swiper);\n if (duration !== 0) {\n c.transitionStart();\n if (c.params.autoHeight) {\n nextTick(() => {\n c.updateAutoHeight();\n });\n }\n c.$wrapperEl.transitionEnd(() => {\n if (!controlled) return;\n if (c.params.loop && swiper.params.controller.by === 'slide') {\n c.loopFix();\n }\n c.transitionEnd();\n });\n }\n }\n if (Array.isArray(controlled)) {\n for (i = 0; i < controlled.length; i += 1) {\n if (controlled[i] !== byController && controlled[i] instanceof Swiper) {\n setControlledTransition(controlled[i]);\n }\n }\n } else if (controlled instanceof Swiper && byController !== controlled) {\n setControlledTransition(controlled);\n }\n }\n\n function removeSpline() {\n if (!swiper.controller.control) return;\n if (swiper.controller.spline) {\n swiper.controller.spline = undefined;\n delete swiper.controller.spline;\n }\n }\n on('beforeInit', () => {\n swiper.controller.control = swiper.params.controller.control;\n });\n on('update', () => {\n removeSpline();\n });\n on('resize', () => {\n removeSpline();\n });\n on('observerUpdate', () => {\n removeSpline();\n });\n on('setTranslate', (_s, translate, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTranslate(translate, byController);\n });\n on('setTransition', (_s, duration, byController) => {\n if (!swiper.controller.control) return;\n swiper.controller.setTransition(duration, byController);\n });\n\n Object.assign(swiper.controller, {\n setTranslate,\n setTransition,\n });\n}\n","import classesToSelector from '../../shared/classes-to-selector.js';\nimport $ from '../../shared/dom.js';\n\nexport default function A11y({ swiper, extendParams, on }) {\n extendParams({\n a11y: {\n enabled: true,\n notificationClass: 'swiper-notification',\n prevSlideMessage: 'Previous slide',\n nextSlideMessage: 'Next slide',\n firstSlideMessage: 'This is the first slide',\n lastSlideMessage: 'This is the last slide',\n paginationBulletMessage: 'Go to slide {{index}}',\n slideLabelMessage: '{{index}} / {{slidesLength}}',\n containerMessage: null,\n containerRoleDescriptionMessage: null,\n itemRoleDescriptionMessage: null,\n slideRole: 'group',\n id: null,\n },\n });\n\n swiper.a11y = {\n clicked: false,\n };\n\n let liveRegion = null;\n\n function notify(message) {\n const notification = liveRegion;\n if (notification.length === 0) return;\n notification.html('');\n notification.html(message);\n }\n\n function getRandomNumber(size = 16) {\n const randomChar = () => Math.round(16 * Math.random()).toString(16);\n return 'x'.repeat(size).replace(/x/g, randomChar);\n }\n function makeElFocusable($el) {\n $el.attr('tabIndex', '0');\n }\n function makeElNotFocusable($el) {\n $el.attr('tabIndex', '-1');\n }\n function addElRole($el, role) {\n $el.attr('role', role);\n }\n function addElRoleDescription($el, description) {\n $el.attr('aria-roledescription', description);\n }\n function addElControls($el, controls) {\n $el.attr('aria-controls', controls);\n }\n function addElLabel($el, label) {\n $el.attr('aria-label', label);\n }\n function addElId($el, id) {\n $el.attr('id', id);\n }\n function addElLive($el, live) {\n $el.attr('aria-live', live);\n }\n function disableEl($el) {\n $el.attr('aria-disabled', true);\n }\n function enableEl($el) {\n $el.attr('aria-disabled', false);\n }\n\n function onEnterOrSpaceKey(e) {\n if (e.keyCode !== 13 && e.keyCode !== 32) return;\n const params = swiper.params.a11y;\n const $targetEl = $(e.target);\n if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {\n if (!(swiper.isEnd && !swiper.params.loop)) {\n swiper.slideNext();\n }\n if (swiper.isEnd) {\n notify(params.lastSlideMessage);\n } else {\n notify(params.nextSlideMessage);\n }\n }\n if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {\n if (!(swiper.isBeginning && !swiper.params.loop)) {\n swiper.slidePrev();\n }\n if (swiper.isBeginning) {\n notify(params.firstSlideMessage);\n } else {\n notify(params.prevSlideMessage);\n }\n }\n\n if (\n swiper.pagination &&\n $targetEl.is(classesToSelector(swiper.params.pagination.bulletClass))\n ) {\n $targetEl[0].click();\n }\n }\n\n function updateNavigation() {\n if (swiper.params.loop || swiper.params.rewind || !swiper.navigation) return;\n const { $nextEl, $prevEl } = swiper.navigation;\n\n if ($prevEl && $prevEl.length > 0) {\n if (swiper.isBeginning) {\n disableEl($prevEl);\n makeElNotFocusable($prevEl);\n } else {\n enableEl($prevEl);\n makeElFocusable($prevEl);\n }\n }\n if ($nextEl && $nextEl.length > 0) {\n if (swiper.isEnd) {\n disableEl($nextEl);\n makeElNotFocusable($nextEl);\n } else {\n enableEl($nextEl);\n makeElFocusable($nextEl);\n }\n }\n }\n\n function hasPagination() {\n return swiper.pagination && swiper.pagination.bullets && swiper.pagination.bullets.length;\n }\n\n function hasClickablePagination() {\n return hasPagination() && swiper.params.pagination.clickable;\n }\n\n function updatePagination() {\n const params = swiper.params.a11y;\n if (!hasPagination()) return;\n swiper.pagination.bullets.each((bulletEl) => {\n const $bulletEl = $(bulletEl);\n if (swiper.params.pagination.clickable) {\n makeElFocusable($bulletEl);\n if (!swiper.params.pagination.renderBullet) {\n addElRole($bulletEl, 'button');\n addElLabel(\n $bulletEl,\n params.paginationBulletMessage.replace(/\\{\\{index\\}\\}/, $bulletEl.index() + 1),\n );\n }\n }\n if ($bulletEl.is(`.${swiper.params.pagination.bulletActiveClass}`)) {\n $bulletEl.attr('aria-current', 'true');\n } else {\n $bulletEl.removeAttr('aria-current');\n }\n });\n }\n\n const initNavEl = ($el, wrapperId, message) => {\n makeElFocusable($el);\n if ($el[0].tagName !== 'BUTTON') {\n addElRole($el, 'button');\n $el.on('keydown', onEnterOrSpaceKey);\n }\n addElLabel($el, message);\n addElControls($el, wrapperId);\n };\n const handlePointerDown = () => {\n swiper.a11y.clicked = true;\n };\n const handlePointerUp = () => {\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (!swiper.destroyed) {\n swiper.a11y.clicked = false;\n }\n });\n });\n };\n\n const handleFocus = (e) => {\n if (swiper.a11y.clicked) return;\n const slideEl = e.target.closest(`.${swiper.params.slideClass}`);\n if (!slideEl || !swiper.slides.includes(slideEl)) return;\n const isActive = swiper.slides.indexOf(slideEl) === swiper.activeIndex;\n const isVisible =\n swiper.params.watchSlidesProgress &&\n swiper.visibleSlides &&\n swiper.visibleSlides.includes(slideEl);\n if (isActive || isVisible) return;\n if (e.sourceCapabilities && e.sourceCapabilities.firesTouchEvents) return;\n if (swiper.isHorizontal()) {\n swiper.el.scrollLeft = 0;\n } else {\n swiper.el.scrollTop = 0;\n }\n swiper.slideTo(swiper.slides.indexOf(slideEl), 0);\n };\n\n const initSlides = () => {\n const params = swiper.params.a11y;\n if (params.itemRoleDescriptionMessage) {\n addElRoleDescription($(swiper.slides), params.itemRoleDescriptionMessage);\n }\n if (params.slideRole) {\n addElRole($(swiper.slides), params.slideRole);\n }\n\n const slidesLength = swiper.params.loop\n ? swiper.slides.filter((el) => !el.classList.contains(swiper.params.slideDuplicateClass))\n .length\n : swiper.slides.length;\n if (params.slideLabelMessage) {\n swiper.slides.each((slideEl, index) => {\n const $slideEl = $(slideEl);\n const slideIndex = swiper.params.loop\n ? parseInt($slideEl.attr('data-swiper-slide-index'), 10)\n : index;\n const ariaLabelMessage = params.slideLabelMessage\n .replace(/\\{\\{index\\}\\}/, slideIndex + 1)\n .replace(/\\{\\{slidesLength\\}\\}/, slidesLength);\n addElLabel($slideEl, ariaLabelMessage);\n });\n }\n };\n\n const init = () => {\n const params = swiper.params.a11y;\n\n swiper.$el.append(liveRegion);\n\n // Container\n const $containerEl = swiper.$el;\n if (params.containerRoleDescriptionMessage) {\n addElRoleDescription($containerEl, params.containerRoleDescriptionMessage);\n }\n if (params.containerMessage) {\n addElLabel($containerEl, params.containerMessage);\n }\n\n // Wrapper\n const $wrapperEl = swiper.$wrapperEl;\n const wrapperId = params.id || $wrapperEl.attr('id') || `swiper-wrapper-${getRandomNumber(16)}`;\n const live = swiper.params.autoplay && swiper.params.autoplay.enabled ? 'off' : 'polite';\n addElId($wrapperEl, wrapperId);\n addElLive($wrapperEl, live);\n\n // Slide\n initSlides();\n\n // Navigation\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n\n if ($nextEl && $nextEl.length) {\n initNavEl($nextEl, wrapperId, params.nextSlideMessage);\n }\n if ($prevEl && $prevEl.length) {\n initNavEl($prevEl, wrapperId, params.prevSlideMessage);\n }\n\n // Pagination\n if (hasClickablePagination()) {\n swiper.pagination.$el.on(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n\n // Tab focus\n swiper.$el.on('focus', handleFocus, true);\n swiper.$el.on('pointerdown', handlePointerDown, true);\n swiper.$el.on('pointerup', handlePointerUp, true);\n };\n function destroy() {\n if (liveRegion && liveRegion.length > 0) liveRegion.remove();\n\n let $nextEl;\n let $prevEl;\n if (swiper.navigation && swiper.navigation.$nextEl) {\n $nextEl = swiper.navigation.$nextEl;\n }\n if (swiper.navigation && swiper.navigation.$prevEl) {\n $prevEl = swiper.navigation.$prevEl;\n }\n if ($nextEl) {\n $nextEl.off('keydown', onEnterOrSpaceKey);\n }\n if ($prevEl) {\n $prevEl.off('keydown', onEnterOrSpaceKey);\n }\n\n // Pagination\n if (hasClickablePagination()) {\n swiper.pagination.$el.off(\n 'keydown',\n classesToSelector(swiper.params.pagination.bulletClass),\n onEnterOrSpaceKey,\n );\n }\n\n // Tab focus\n swiper.$el.off('focus', handleFocus, true);\n swiper.$el.off('pointerdown', handlePointerDown, true);\n swiper.$el.off('pointerup', handlePointerUp, true);\n }\n\n on('beforeInit', () => {\n liveRegion = $(\n ``,\n );\n });\n\n on('afterInit', () => {\n if (!swiper.params.a11y.enabled) return;\n init();\n });\n on('slidesLengthChange snapGridLengthChange slidesGridLengthChange', () => {\n if (!swiper.params.a11y.enabled) return;\n initSlides();\n });\n on('fromEdge toEdge afterInit lock unlock', () => {\n if (!swiper.params.a11y.enabled) return;\n updateNavigation();\n });\n on('paginationUpdate', () => {\n if (!swiper.params.a11y.enabled) return;\n updatePagination();\n });\n on('destroy', () => {\n if (!swiper.params.a11y.enabled) return;\n destroy();\n });\n}\n","import { getWindow } from 'ssr-window';\n\nexport default function History({ swiper, extendParams, on }) {\n extendParams({\n history: {\n enabled: false,\n root: '',\n replaceState: false,\n key: 'slides',\n keepQuery: false,\n },\n });\n\n let initialized = false;\n let paths = {};\n\n const slugify = (text) => {\n return text\n .toString()\n .replace(/\\s+/g, '-')\n .replace(/[^\\w-]+/g, '')\n .replace(/--+/g, '-')\n .replace(/^-+/, '')\n .replace(/-+$/, '');\n };\n\n const getPathValues = (urlOverride) => {\n const window = getWindow();\n let location;\n if (urlOverride) {\n location = new URL(urlOverride);\n } else {\n location = window.location;\n }\n const pathArray = location.pathname\n .slice(1)\n .split('/')\n .filter((part) => part !== '');\n const total = pathArray.length;\n const key = pathArray[total - 2];\n const value = pathArray[total - 1];\n return { key, value };\n };\n const setHistory = (key, index) => {\n const window = getWindow();\n if (!initialized || !swiper.params.history.enabled) return;\n let location;\n if (swiper.params.url) {\n location = new URL(swiper.params.url);\n } else {\n location = window.location;\n }\n const slide = swiper.slides.eq(index);\n let value = slugify(slide.attr('data-history'));\n if (swiper.params.history.root.length > 0) {\n let root = swiper.params.history.root;\n if (root[root.length - 1] === '/') root = root.slice(0, root.length - 1);\n value = `${root}/${key}/${value}`;\n } else if (!location.pathname.includes(key)) {\n value = `${key}/${value}`;\n }\n if (swiper.params.history.keepQuery) {\n value += location.search;\n }\n const currentState = window.history.state;\n if (currentState && currentState.value === value) {\n return;\n }\n if (swiper.params.history.replaceState) {\n window.history.replaceState({ value }, null, value);\n } else {\n window.history.pushState({ value }, null, value);\n }\n };\n\n const scrollToSlide = (speed, value, runCallbacks) => {\n if (value) {\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHistory = slugify(slide.attr('data-history'));\n if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, runCallbacks);\n }\n }\n } else {\n swiper.slideTo(0, speed, runCallbacks);\n }\n };\n\n const setHistoryPopState = () => {\n paths = getPathValues(swiper.params.url);\n scrollToSlide(swiper.params.speed, paths.value, false);\n };\n\n const init = () => {\n const window = getWindow();\n if (!swiper.params.history) return;\n if (!window.history || !window.history.pushState) {\n swiper.params.history.enabled = false;\n swiper.params.hashNavigation.enabled = true;\n return;\n }\n initialized = true;\n paths = getPathValues(swiper.params.url);\n if (!paths.key && !paths.value) return;\n scrollToSlide(0, paths.value, swiper.params.runCallbacksOnInit);\n if (!swiper.params.history.replaceState) {\n window.addEventListener('popstate', setHistoryPopState);\n }\n };\n const destroy = () => {\n const window = getWindow();\n if (!swiper.params.history.replaceState) {\n window.removeEventListener('popstate', setHistoryPopState);\n }\n };\n\n on('init', () => {\n if (swiper.params.history.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.history.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHistory(swiper.params.history.key, swiper.activeIndex);\n }\n });\n}\n","import { getWindow, getDocument } from 'ssr-window';\nimport $ from '../../shared/dom.js';\n\nexport default function HashNavigation({ swiper, extendParams, emit, on }) {\n let initialized = false;\n const document = getDocument();\n const window = getWindow();\n extendParams({\n hashNavigation: {\n enabled: false,\n replaceState: false,\n watchState: false,\n },\n });\n const onHashChange = () => {\n emit('hashChange');\n const newHash = document.location.hash.replace('#', '');\n const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');\n if (newHash !== activeSlideHash) {\n const newIndex = swiper.$wrapperEl\n .children(`.${swiper.params.slideClass}[data-hash=\"${newHash}\"]`)\n .index();\n if (typeof newIndex === 'undefined') return;\n swiper.slideTo(newIndex);\n }\n };\n const setHash = () => {\n if (!initialized || !swiper.params.hashNavigation.enabled) return;\n if (\n swiper.params.hashNavigation.replaceState &&\n window.history &&\n window.history.replaceState\n ) {\n window.history.replaceState(\n null,\n null,\n `#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '',\n );\n emit('hashSet');\n } else {\n const slide = swiper.slides.eq(swiper.activeIndex);\n const hash = slide.attr('data-hash') || slide.attr('data-history');\n document.location.hash = hash || '';\n emit('hashSet');\n }\n };\n const init = () => {\n if (\n !swiper.params.hashNavigation.enabled ||\n (swiper.params.history && swiper.params.history.enabled)\n )\n return;\n initialized = true;\n const hash = document.location.hash.replace('#', '');\n if (hash) {\n const speed = 0;\n for (let i = 0, length = swiper.slides.length; i < length; i += 1) {\n const slide = swiper.slides.eq(i);\n const slideHash = slide.attr('data-hash') || slide.attr('data-history');\n if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {\n const index = slide.index();\n swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);\n }\n }\n }\n if (swiper.params.hashNavigation.watchState) {\n $(window).on('hashchange', onHashChange);\n }\n };\n const destroy = () => {\n if (swiper.params.hashNavigation.watchState) {\n $(window).off('hashchange', onHashChange);\n }\n };\n\n on('init', () => {\n if (swiper.params.hashNavigation.enabled) {\n init();\n }\n });\n on('destroy', () => {\n if (swiper.params.hashNavigation.enabled) {\n destroy();\n }\n });\n on('transitionEnd _freeModeNoMomentumRelease', () => {\n if (initialized) {\n setHash();\n }\n });\n on('slideChange', () => {\n if (initialized && swiper.params.cssMode) {\n setHash();\n }\n });\n}\n","/* eslint no-underscore-dangle: \"off\" */\n/* eslint no-use-before-define: \"off\" */\nimport { getDocument } from 'ssr-window';\nimport { nextTick } from '../../shared/utils.js';\n\nexport default function Autoplay({ swiper, extendParams, on, emit }) {\n let timeout;\n\n swiper.autoplay = {\n running: false,\n paused: false,\n };\n\n extendParams({\n autoplay: {\n enabled: false,\n delay: 3000,\n waitForTransition: true,\n disableOnInteraction: true,\n stopOnLastSlide: false,\n reverseDirection: false,\n pauseOnMouseEnter: false,\n },\n });\n\n function run() {\n if (!swiper.size) {\n swiper.autoplay.running = false;\n swiper.autoplay.paused = false;\n return;\n }\n const $activeSlideEl = swiper.slides.eq(swiper.activeIndex);\n let delay = swiper.params.autoplay.delay;\n if ($activeSlideEl.attr('data-swiper-autoplay')) {\n delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;\n }\n clearTimeout(timeout);\n timeout = nextTick(() => {\n let autoplayResult;\n if (swiper.params.autoplay.reverseDirection) {\n if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isBeginning) {\n autoplayResult = swiper.slidePrev(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(\n swiper.slides.length - 1,\n swiper.params.speed,\n true,\n true,\n );\n emit('autoplay');\n } else {\n stop();\n }\n } else if (swiper.params.loop) {\n swiper.loopFix();\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.isEnd) {\n autoplayResult = swiper.slideNext(swiper.params.speed, true, true);\n emit('autoplay');\n } else if (!swiper.params.autoplay.stopOnLastSlide) {\n autoplayResult = swiper.slideTo(0, swiper.params.speed, true, true);\n emit('autoplay');\n } else {\n stop();\n }\n if (swiper.params.cssMode && swiper.autoplay.running) run();\n else if (autoplayResult === false) {\n run();\n }\n }, delay);\n }\n function start() {\n if (typeof timeout !== 'undefined') return false;\n if (swiper.autoplay.running) return false;\n swiper.autoplay.running = true;\n emit('autoplayStart');\n run();\n return true;\n }\n function stop() {\n if (!swiper.autoplay.running) return false;\n if (typeof timeout === 'undefined') return false;\n\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n swiper.autoplay.running = false;\n emit('autoplayStop');\n return true;\n }\n function pause(speed) {\n if (!swiper.autoplay.running) return;\n if (swiper.autoplay.paused) return;\n if (timeout) clearTimeout(timeout);\n swiper.autoplay.paused = true;\n if (speed === 0 || !swiper.params.autoplay.waitForTransition) {\n swiper.autoplay.paused = false;\n run();\n } else {\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].addEventListener(event, onTransitionEnd);\n });\n }\n }\n function onVisibilityChange() {\n const document = getDocument();\n if (document.visibilityState === 'hidden' && swiper.autoplay.running) {\n pause();\n }\n if (document.visibilityState === 'visible' && swiper.autoplay.paused) {\n run();\n swiper.autoplay.paused = false;\n }\n }\n function onTransitionEnd(e) {\n if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;\n if (e.target !== swiper.$wrapperEl[0]) return;\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n swiper.autoplay.paused = false;\n if (!swiper.autoplay.running) {\n stop();\n } else {\n run();\n }\n }\n function onMouseEnter() {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n emit('autoplayPause');\n pause();\n }\n\n ['transitionend', 'webkitTransitionEnd'].forEach((event) => {\n swiper.$wrapperEl[0].removeEventListener(event, onTransitionEnd);\n });\n }\n function onMouseLeave() {\n if (swiper.params.autoplay.disableOnInteraction) {\n return;\n }\n swiper.autoplay.paused = false;\n emit('autoplayResume');\n run();\n }\n function attachMouseEvents() {\n if (swiper.params.autoplay.pauseOnMouseEnter) {\n swiper.$el.on('mouseenter', onMouseEnter);\n swiper.$el.on('mouseleave', onMouseLeave);\n }\n }\n function detachMouseEvents() {\n swiper.$el.off('mouseenter', onMouseEnter);\n swiper.$el.off('mouseleave', onMouseLeave);\n }\n\n on('init', () => {\n if (swiper.params.autoplay.enabled) {\n start();\n const document = getDocument();\n document.addEventListener('visibilitychange', onVisibilityChange);\n attachMouseEvents();\n }\n });\n on('beforeTransitionStart', (_s, speed, internal) => {\n if (swiper.autoplay.running) {\n if (internal || !swiper.params.autoplay.disableOnInteraction) {\n swiper.autoplay.pause(speed);\n } else {\n stop();\n }\n }\n });\n on('sliderFirstMove', () => {\n if (swiper.autoplay.running) {\n if (swiper.params.autoplay.disableOnInteraction) {\n stop();\n } else {\n pause();\n }\n }\n });\n on('touchEnd', () => {\n if (\n swiper.params.cssMode &&\n swiper.autoplay.paused &&\n !swiper.params.autoplay.disableOnInteraction\n ) {\n run();\n }\n });\n on('destroy', () => {\n detachMouseEvents();\n if (swiper.autoplay.running) {\n stop();\n }\n const document = getDocument();\n document.removeEventListener('visibilitychange', onVisibilityChange);\n });\n\n Object.assign(swiper.autoplay, {\n pause,\n run,\n start,\n stop,\n });\n}\n","import { isObject } from '../../shared/utils.js';\nimport $ from '../../shared/dom.js';\n\nexport default function Thumb({ swiper, extendParams, on }) {\n extendParams({\n thumbs: {\n swiper: null,\n multipleActiveThumbs: true,\n autoScrollOffset: 0,\n slideThumbActiveClass: 'swiper-slide-thumb-active',\n thumbsContainerClass: 'swiper-thumbs',\n },\n });\n\n let initialized = false;\n let swiperCreated = false;\n\n swiper.thumbs = {\n swiper: null,\n };\n\n function onThumbClick() {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n const clickedIndex = thumbsSwiper.clickedIndex;\n const clickedSlide = thumbsSwiper.clickedSlide;\n if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass))\n return;\n if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;\n let slideToIndex;\n if (thumbsSwiper.params.loop) {\n slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);\n } else {\n slideToIndex = clickedIndex;\n }\n if (swiper.params.loop) {\n let currentIndex = swiper.activeIndex;\n if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {\n swiper.loopFix();\n // eslint-disable-next-line\n swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;\n currentIndex = swiper.activeIndex;\n }\n const prevIndex = swiper.slides\n .eq(currentIndex)\n .prevAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n const nextIndex = swiper.slides\n .eq(currentIndex)\n .nextAll(`[data-swiper-slide-index=\"${slideToIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;\n else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;\n else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;\n else slideToIndex = prevIndex;\n }\n swiper.slideTo(slideToIndex);\n }\n\n function init() {\n const { thumbs: thumbsParams } = swiper.params;\n if (initialized) return false;\n initialized = true;\n const SwiperClass = swiper.constructor;\n if (thumbsParams.swiper instanceof SwiperClass) {\n swiper.thumbs.swiper = thumbsParams.swiper;\n Object.assign(swiper.thumbs.swiper.originalParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n Object.assign(swiper.thumbs.swiper.params, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n } else if (isObject(thumbsParams.swiper)) {\n const thumbsSwiperParams = Object.assign({}, thumbsParams.swiper);\n Object.assign(thumbsSwiperParams, {\n watchSlidesProgress: true,\n slideToClickedSlide: false,\n });\n swiper.thumbs.swiper = new SwiperClass(thumbsSwiperParams);\n swiperCreated = true;\n }\n swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);\n swiper.thumbs.swiper.on('tap', onThumbClick);\n return true;\n }\n\n function update(initial) {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n\n const slidesPerView =\n thumbsSwiper.params.slidesPerView === 'auto'\n ? thumbsSwiper.slidesPerViewDynamic()\n : thumbsSwiper.params.slidesPerView;\n\n // Activate thumbs\n let thumbsToActivate = 1;\n const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;\n\n if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {\n thumbsToActivate = swiper.params.slidesPerView;\n }\n\n if (!swiper.params.thumbs.multipleActiveThumbs) {\n thumbsToActivate = 1;\n }\n\n thumbsToActivate = Math.floor(thumbsToActivate);\n\n thumbsSwiper.slides.removeClass(thumbActiveClass);\n if (\n thumbsSwiper.params.loop ||\n (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)\n ) {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.$wrapperEl\n .children(`[data-swiper-slide-index=\"${swiper.realIndex + i}\"]`)\n .addClass(thumbActiveClass);\n }\n } else {\n for (let i = 0; i < thumbsToActivate; i += 1) {\n thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass);\n }\n }\n\n const autoScrollOffset = swiper.params.thumbs.autoScrollOffset;\n const useOffset = autoScrollOffset && !thumbsSwiper.params.loop;\n if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) {\n let currentThumbsIndex = thumbsSwiper.activeIndex;\n let newThumbsIndex;\n let direction;\n if (thumbsSwiper.params.loop) {\n if (\n thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .hasClass(thumbsSwiper.params.slideDuplicateClass)\n ) {\n thumbsSwiper.loopFix();\n // eslint-disable-next-line\n thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;\n currentThumbsIndex = thumbsSwiper.activeIndex;\n }\n // Find actual thumbs index to slide to\n const prevThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .prevAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n const nextThumbsIndex = thumbsSwiper.slides\n .eq(currentThumbsIndex)\n .nextAll(`[data-swiper-slide-index=\"${swiper.realIndex}\"]`)\n .eq(0)\n .index();\n if (typeof prevThumbsIndex === 'undefined') {\n newThumbsIndex = nextThumbsIndex;\n } else if (typeof nextThumbsIndex === 'undefined') {\n newThumbsIndex = prevThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex =\n thumbsSwiper.params.slidesPerGroup > 1 ? nextThumbsIndex : currentThumbsIndex;\n } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {\n newThumbsIndex = nextThumbsIndex;\n } else {\n newThumbsIndex = prevThumbsIndex;\n }\n direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev';\n } else {\n newThumbsIndex = swiper.realIndex;\n direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev';\n }\n if (useOffset) {\n newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset;\n }\n\n if (\n thumbsSwiper.visibleSlidesIndexes &&\n thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0\n ) {\n if (thumbsSwiper.params.centeredSlides) {\n if (newThumbsIndex > currentThumbsIndex) {\n newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;\n } else {\n newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;\n }\n } else if (\n newThumbsIndex > currentThumbsIndex &&\n thumbsSwiper.params.slidesPerGroup === 1\n ) {\n // newThumbsIndex = newThumbsIndex - slidesPerView + 1;\n }\n thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);\n }\n }\n }\n\n on('beforeInit', () => {\n const { thumbs } = swiper.params;\n if (!thumbs || !thumbs.swiper) return;\n init();\n update(true);\n });\n on('slideChange update resize observerUpdate', () => {\n update();\n });\n on('setTransition', (_s, duration) => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n thumbsSwiper.setTransition(duration);\n });\n on('beforeDestroy', () => {\n const thumbsSwiper = swiper.thumbs.swiper;\n if (!thumbsSwiper || thumbsSwiper.destroyed) return;\n if (swiperCreated) {\n thumbsSwiper.destroy();\n }\n });\n\n Object.assign(swiper.thumbs, {\n init,\n update,\n });\n}\n","import { now } from '../../shared/utils.js';\n\nexport default function freeMode({ swiper, extendParams, emit, once }) {\n extendParams({\n freeMode: {\n enabled: false,\n momentum: true,\n momentumRatio: 1,\n momentumBounce: true,\n momentumBounceRatio: 1,\n momentumVelocityRatio: 1,\n sticky: false,\n minimumVelocity: 0.02,\n },\n });\n\n function onTouchStart() {\n const translate = swiper.getTranslate();\n swiper.setTranslate(translate);\n swiper.setTransition(0);\n swiper.touchEventsData.velocities.length = 0;\n swiper.freeMode.onTouchEnd({ currentPos: swiper.rtl ? swiper.translate : -swiper.translate });\n }\n\n function onTouchMove() {\n const { touchEventsData: data, touches } = swiper;\n // Velocity\n if (data.velocities.length === 0) {\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],\n time: data.touchStartTime,\n });\n }\n data.velocities.push({\n position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],\n time: now(),\n });\n }\n\n function onTouchEnd({ currentPos }) {\n const { params, $wrapperEl, rtlTranslate: rtl, snapGrid, touchEventsData: data } = swiper;\n // Time diff\n const touchEndTime = now();\n const timeDiff = touchEndTime - data.touchStartTime;\n\n if (currentPos < -swiper.minTranslate()) {\n swiper.slideTo(swiper.activeIndex);\n return;\n }\n if (currentPos > -swiper.maxTranslate()) {\n if (swiper.slides.length < snapGrid.length) {\n swiper.slideTo(snapGrid.length - 1);\n } else {\n swiper.slideTo(swiper.slides.length - 1);\n }\n return;\n }\n\n if (params.freeMode.momentum) {\n if (data.velocities.length > 1) {\n const lastMoveEvent = data.velocities.pop();\n const velocityEvent = data.velocities.pop();\n\n const distance = lastMoveEvent.position - velocityEvent.position;\n const time = lastMoveEvent.time - velocityEvent.time;\n swiper.velocity = distance / time;\n swiper.velocity /= 2;\n if (Math.abs(swiper.velocity) < params.freeMode.minimumVelocity) {\n swiper.velocity = 0;\n }\n // this implies that the user stopped moving a finger then released.\n // There would be no events with distance zero, so the last event is stale.\n if (time > 150 || now() - lastMoveEvent.time > 300) {\n swiper.velocity = 0;\n }\n } else {\n swiper.velocity = 0;\n }\n swiper.velocity *= params.freeMode.momentumVelocityRatio;\n\n data.velocities.length = 0;\n let momentumDuration = 1000 * params.freeMode.momentumRatio;\n const momentumDistance = swiper.velocity * momentumDuration;\n\n let newPosition = swiper.translate + momentumDistance;\n if (rtl) newPosition = -newPosition;\n\n let doBounce = false;\n let afterBouncePosition;\n const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeMode.momentumBounceRatio;\n let needsLoopFix;\n if (newPosition < swiper.maxTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition + swiper.maxTranslate() < -bounceAmount) {\n newPosition = swiper.maxTranslate() - bounceAmount;\n }\n afterBouncePosition = swiper.maxTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.maxTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (newPosition > swiper.minTranslate()) {\n if (params.freeMode.momentumBounce) {\n if (newPosition - swiper.minTranslate() > bounceAmount) {\n newPosition = swiper.minTranslate() + bounceAmount;\n }\n afterBouncePosition = swiper.minTranslate();\n doBounce = true;\n data.allowMomentumBounce = true;\n } else {\n newPosition = swiper.minTranslate();\n }\n if (params.loop && params.centeredSlides) needsLoopFix = true;\n } else if (params.freeMode.sticky) {\n let nextSlide;\n for (let j = 0; j < snapGrid.length; j += 1) {\n if (snapGrid[j] > -newPosition) {\n nextSlide = j;\n break;\n }\n }\n\n if (\n Math.abs(snapGrid[nextSlide] - newPosition) <\n Math.abs(snapGrid[nextSlide - 1] - newPosition) ||\n swiper.swipeDirection === 'next'\n ) {\n newPosition = snapGrid[nextSlide];\n } else {\n newPosition = snapGrid[nextSlide - 1];\n }\n newPosition = -newPosition;\n }\n if (needsLoopFix) {\n once('transitionEnd', () => {\n swiper.loopFix();\n });\n }\n // Fix duration\n if (swiper.velocity !== 0) {\n if (rtl) {\n momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);\n } else {\n momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);\n }\n if (params.freeMode.sticky) {\n // If freeMode.sticky is active and the user ends a swipe with a slow-velocity\n // event, then durations can be 20+ seconds to slide one (or zero!) slides.\n // It's easy to see this when simulating touch with mouse events. To fix this,\n // limit single-slide swipes to the default slide duration. This also has the\n // nice side effect of matching slide speed if the user stopped moving before\n // lifting finger or mouse vs. moving slowly before lifting the finger/mouse.\n // For faster swipes, also apply limits (albeit higher ones).\n const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate);\n const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex];\n if (moveDistance < currentSlideSize) {\n momentumDuration = params.speed;\n } else if (moveDistance < 2 * currentSlideSize) {\n momentumDuration = params.speed * 1.5;\n } else {\n momentumDuration = params.speed * 2.5;\n }\n }\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n }\n\n if (params.freeMode.momentumBounce && doBounce) {\n swiper.updateProgress(afterBouncePosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;\n emit('momentumBounce');\n swiper.setTransition(params.speed);\n setTimeout(() => {\n swiper.setTranslate(afterBouncePosition);\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }, 0);\n });\n } else if (swiper.velocity) {\n emit('_freeModeNoMomentumRelease');\n swiper.updateProgress(newPosition);\n swiper.setTransition(momentumDuration);\n swiper.setTranslate(newPosition);\n swiper.transitionStart(true, swiper.swipeDirection);\n if (!swiper.animating) {\n swiper.animating = true;\n $wrapperEl.transitionEnd(() => {\n if (!swiper || swiper.destroyed) return;\n swiper.transitionEnd();\n });\n }\n } else {\n swiper.updateProgress(newPosition);\n }\n\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n } else if (params.freeMode.sticky) {\n swiper.slideToClosest();\n return;\n } else if (params.freeMode) {\n emit('_freeModeNoMomentumRelease');\n }\n\n if (!params.freeMode.momentum || timeDiff >= params.longSwipesMs) {\n swiper.updateProgress();\n swiper.updateActiveIndex();\n swiper.updateSlidesClasses();\n }\n }\n\n Object.assign(swiper, {\n freeMode: {\n onTouchStart,\n onTouchMove,\n onTouchEnd,\n },\n });\n}\n","export default function Grid({ swiper, extendParams }) {\n extendParams({\n grid: {\n rows: 1,\n fill: 'column',\n },\n });\n\n let slidesNumberEvenToRows;\n let slidesPerRow;\n let numFullColumns;\n\n const initSlides = (slidesLength) => {\n const { slidesPerView } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n slidesPerRow = slidesNumberEvenToRows / rows;\n numFullColumns = Math.floor(slidesLength / rows);\n if (Math.floor(slidesLength / rows) === slidesLength / rows) {\n slidesNumberEvenToRows = slidesLength;\n } else {\n slidesNumberEvenToRows = Math.ceil(slidesLength / rows) * rows;\n }\n if (slidesPerView !== 'auto' && fill === 'row') {\n slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, slidesPerView * rows);\n }\n };\n\n const updateSlide = (i, slide, slidesLength, getDirectionLabel) => {\n const { slidesPerGroup, spaceBetween } = swiper.params;\n const { rows, fill } = swiper.params.grid;\n // Set slides order\n let newSlideOrderIndex;\n let column;\n let row;\n if (fill === 'row' && slidesPerGroup > 1) {\n const groupIndex = Math.floor(i / (slidesPerGroup * rows));\n const slideIndexInGroup = i - rows * slidesPerGroup * groupIndex;\n const columnsInGroup =\n groupIndex === 0\n ? slidesPerGroup\n : Math.min(\n Math.ceil((slidesLength - groupIndex * rows * slidesPerGroup) / rows),\n slidesPerGroup,\n );\n row = Math.floor(slideIndexInGroup / columnsInGroup);\n column = slideIndexInGroup - row * columnsInGroup + groupIndex * slidesPerGroup;\n\n newSlideOrderIndex = column + (row * slidesNumberEvenToRows) / rows;\n slide.css({\n '-webkit-order': newSlideOrderIndex,\n order: newSlideOrderIndex,\n });\n } else if (fill === 'column') {\n column = Math.floor(i / rows);\n row = i - column * rows;\n if (column > numFullColumns || (column === numFullColumns && row === rows - 1)) {\n row += 1;\n if (row >= rows) {\n row = 0;\n column += 1;\n }\n }\n } else {\n row = Math.floor(i / slidesPerRow);\n column = i - row * slidesPerRow;\n }\n slide.css(\n getDirectionLabel('margin-top'),\n row !== 0 ? spaceBetween && `${spaceBetween}px` : '',\n );\n };\n\n const updateWrapperSize = (slideSize, snapGrid, getDirectionLabel) => {\n const { spaceBetween, centeredSlides, roundLengths } = swiper.params;\n const { rows } = swiper.params.grid;\n swiper.virtualSize = (slideSize + spaceBetween) * slidesNumberEvenToRows;\n swiper.virtualSize = Math.ceil(swiper.virtualSize / rows) - spaceBetween;\n swiper.$wrapperEl.css({\n [getDirectionLabel('width')]: `${swiper.virtualSize + spaceBetween}px`,\n });\n if (centeredSlides) {\n snapGrid.splice(0, snapGrid.length);\n const newSlidesGrid = [];\n for (let i = 0; i < snapGrid.length; i += 1) {\n let slidesGridItem = snapGrid[i];\n if (roundLengths) slidesGridItem = Math.floor(slidesGridItem);\n if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);\n }\n snapGrid.push(...newSlidesGrid);\n }\n };\n\n swiper.grid = {\n initSlides,\n updateSlide,\n updateWrapperSize,\n };\n}\n","import appendSlide from './methods/appendSlide.js';\nimport prependSlide from './methods/prependSlide.js';\nimport addSlide from './methods/addSlide.js';\nimport removeSlide from './methods/removeSlide.js';\nimport removeAllSlides from './methods/removeAllSlides.js';\n\nexport default function Manipulation({ swiper }) {\n Object.assign(swiper, {\n appendSlide: appendSlide.bind(swiper),\n prependSlide: prependSlide.bind(swiper),\n addSlide: addSlide.bind(swiper),\n removeSlide: removeSlide.bind(swiper),\n removeAllSlides: removeAllSlides.bind(swiper),\n });\n}\n","import effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFade({ swiper, extendParams, on }) {\n extendParams({\n fadeEffect: {\n crossFade: false,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { slides } = swiper;\n const params = swiper.params.fadeEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = swiper.slides.eq(i);\n const offset = $slideEl[0].swiperSlideOffset;\n let tx = -offset;\n if (!swiper.params.virtualTranslate) tx -= swiper.translate;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n }\n const slideOpacity = swiper.params.fadeEffect.crossFade\n ? Math.max(1 - Math.abs($slideEl[0].progress), 0)\n : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl\n .css({\n opacity: slideOpacity,\n })\n .transform(`translate3d(${tx}px, ${ty}px, 0px)`);\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.fadeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'fade',\n swiper,\n on,\n setTranslate,\n setTransition,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import $ from '../../shared/dom.js';\nimport effectInit from '../../shared/effect-init.js';\n\nexport default function EffectCube({ swiper, extendParams, on }) {\n extendParams({\n cubeEffect: {\n slideShadows: true,\n shadow: true,\n shadowOffset: 20,\n shadowScale: 0.94,\n },\n });\n\n const createSlideShadows = ($slideEl, progress, isHorizontal) => {\n let shadowBefore = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = $(`
`);\n $slideEl.append(shadowBefore);\n }\n if (shadowAfter.length === 0) {\n shadowAfter = $(\n `
`,\n );\n $slideEl.append(shadowAfter);\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // create new ones\n const isHorizontal = swiper.isHorizontal();\n swiper.slides.each((slideEl) => {\n const progress = Math.max(Math.min(slideEl.progress, 1), -1);\n createSlideShadows($(slideEl), progress, isHorizontal);\n });\n };\n\n const setTranslate = () => {\n const {\n $el,\n $wrapperEl,\n slides,\n width: swiperWidth,\n height: swiperHeight,\n rtlTranslate: rtl,\n size: swiperSize,\n browser,\n } = swiper;\n const params = swiper.params.cubeEffect;\n const isHorizontal = swiper.isHorizontal();\n const isVirtual = swiper.virtual && swiper.params.virtual.enabled;\n let wrapperRotate = 0;\n let $cubeShadowEl;\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $wrapperEl.append($cubeShadowEl);\n }\n $cubeShadowEl.css({ height: `${swiperWidth}px` });\n } else {\n $cubeShadowEl = $el.find('.swiper-cube-shadow');\n if ($cubeShadowEl.length === 0) {\n $cubeShadowEl = $('
');\n $el.append($cubeShadowEl);\n }\n }\n }\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let slideIndex = i;\n if (isVirtual) {\n slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);\n }\n let slideAngle = slideIndex * 90;\n let round = Math.floor(slideAngle / 360);\n if (rtl) {\n slideAngle = -slideAngle;\n round = Math.floor(-slideAngle / 360);\n }\n const progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n let tx = 0;\n let ty = 0;\n let tz = 0;\n if (slideIndex % 4 === 0) {\n tx = -round * 4 * swiperSize;\n tz = 0;\n } else if ((slideIndex - 1) % 4 === 0) {\n tx = 0;\n tz = -round * 4 * swiperSize;\n } else if ((slideIndex - 2) % 4 === 0) {\n tx = swiperSize + round * 4 * swiperSize;\n tz = swiperSize;\n } else if ((slideIndex - 3) % 4 === 0) {\n tx = -swiperSize;\n tz = 3 * swiperSize + swiperSize * 4 * round;\n }\n if (rtl) {\n tx = -tx;\n }\n\n if (!isHorizontal) {\n ty = tx;\n tx = 0;\n }\n\n const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${\n isHorizontal ? slideAngle : 0\n }deg) translate3d(${tx}px, ${ty}px, ${tz}px)`;\n if (progress <= 1 && progress > -1) {\n wrapperRotate = slideIndex * 90 + progress * 90;\n if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;\n }\n $slideEl.transform(transform);\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, isHorizontal);\n }\n }\n $wrapperEl.css({\n '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`,\n 'transform-origin': `50% 50% -${swiperSize / 2}px`,\n });\n\n if (params.shadow) {\n if (isHorizontal) {\n $cubeShadowEl.transform(\n `translate3d(0px, ${swiperWidth / 2 + params.shadowOffset}px, ${\n -swiperWidth / 2\n }px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`,\n );\n } else {\n const shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;\n const multiplier =\n 1.5 -\n (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2 +\n Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2);\n const scale1 = params.shadowScale;\n const scale2 = params.shadowScale / multiplier;\n const offset = params.shadowOffset;\n $cubeShadowEl.transform(\n `scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${swiperHeight / 2 + offset}px, ${\n -swiperHeight / 2 / scale2\n }px) rotateX(-90deg)`,\n );\n }\n }\n const zFactor = browser.isSafari || browser.isWebView ? -swiperSize / 2 : 0;\n $wrapperEl.transform(\n `translate3d(0px,0,${zFactor}px) rotateX(${\n swiper.isHorizontal() ? 0 : wrapperRotate\n }deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`,\n );\n $wrapperEl[0].style.setProperty('--swiper-cube-translate-z', `${zFactor}px`);\n };\n const setTransition = (duration) => {\n const { $el, slides } = swiper;\n slides\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {\n $el.find('.swiper-cube-shadow').transition(duration);\n }\n };\n\n effectInit({\n effect: 'cube',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.cubeEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n resistanceRatio: 0,\n spaceBetween: 0,\n centeredSlides: false,\n virtualTranslate: true,\n }),\n });\n}\n","import $ from '../../shared/dom.js';\nimport createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectFlip({ swiper, extendParams, on }) {\n extendParams({\n flipEffect: {\n slideShadows: true,\n limitRotation: true,\n transformEl: null,\n },\n });\n\n const createSlideShadows = ($slideEl, progress, params) => {\n let shadowBefore = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let shadowAfter = swiper.isHorizontal()\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if (shadowBefore.length === 0) {\n shadowBefore = createShadow(params, $slideEl, swiper.isHorizontal() ? 'left' : 'top');\n }\n if (shadowAfter.length === 0) {\n shadowAfter = createShadow(params, $slideEl, swiper.isHorizontal() ? 'right' : 'bottom');\n }\n if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);\n if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);\n };\n\n const recreateShadows = () => {\n // Set shadows\n const params = swiper.params.flipEffect;\n swiper.slides.each((slideEl) => {\n const $slideEl = $(slideEl);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min(slideEl.progress, 1), -1);\n }\n createSlideShadows($slideEl, progress, params);\n });\n };\n\n const setTranslate = () => {\n const { slides, rtlTranslate: rtl } = swiper;\n const params = swiper.params.flipEffect;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n let progress = $slideEl[0].progress;\n if (swiper.params.flipEffect.limitRotation) {\n progress = Math.max(Math.min($slideEl[0].progress, 1), -1);\n }\n const offset = $slideEl[0].swiperSlideOffset;\n const rotate = -180 * progress;\n let rotateY = rotate;\n let rotateX = 0;\n let tx = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let ty = 0;\n if (!swiper.isHorizontal()) {\n ty = tx;\n tx = 0;\n rotateX = -rotateY;\n rotateY = 0;\n } else if (rtl) {\n rotateY = -rotateY;\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;\n\n if (params.slideShadows) {\n createSlideShadows($slideEl, progress, params);\n }\n const transform = `translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.flipEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'flip',\n swiper,\n on,\n setTranslate,\n setTransition,\n recreateShadows,\n getEffectParams: () => swiper.params.flipEffect,\n perspective: () => true,\n overwriteParams: () => ({\n slidesPerView: 1,\n slidesPerGroup: 1,\n watchSlidesProgress: true,\n spaceBetween: 0,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\n\nexport default function EffectCoverflow({ swiper, extendParams, on }) {\n extendParams({\n coverflowEffect: {\n rotate: 50,\n stretch: 0,\n depth: 100,\n scale: 1,\n modifier: 1,\n slideShadows: true,\n transformEl: null,\n },\n });\n\n const setTranslate = () => {\n const { width: swiperWidth, height: swiperHeight, slides, slidesSizesGrid } = swiper;\n const params = swiper.params.coverflowEffect;\n const isHorizontal = swiper.isHorizontal();\n const transform = swiper.translate;\n const center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;\n const rotate = isHorizontal ? params.rotate : -params.rotate;\n const translate = params.depth;\n // Each slide offset from center\n for (let i = 0, length = slides.length; i < length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideSize = slidesSizesGrid[i];\n const slideOffset = $slideEl[0].swiperSlideOffset;\n const centerOffset = (center - slideOffset - slideSize / 2) / slideSize;\n const offsetMultiplier =\n typeof params.modifier === 'function'\n ? params.modifier(centerOffset)\n : centerOffset * params.modifier;\n\n let rotateY = isHorizontal ? rotate * offsetMultiplier : 0;\n let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;\n // var rotateZ = 0\n let translateZ = -translate * Math.abs(offsetMultiplier);\n\n let stretch = params.stretch;\n // Allow percentage to make a relative stretch for responsive sliders\n if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) {\n stretch = (parseFloat(params.stretch) / 100) * slideSize;\n }\n let translateY = isHorizontal ? 0 : stretch * offsetMultiplier;\n let translateX = isHorizontal ? stretch * offsetMultiplier : 0;\n\n let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier);\n\n // Fix for ultra small values\n if (Math.abs(translateX) < 0.001) translateX = 0;\n if (Math.abs(translateY) < 0.001) translateY = 0;\n if (Math.abs(translateZ) < 0.001) translateZ = 0;\n if (Math.abs(rotateY) < 0.001) rotateY = 0;\n if (Math.abs(rotateX) < 0.001) rotateX = 0;\n if (Math.abs(scale) < 0.001) scale = 0;\n\n const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(slideTransform);\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowBeforeEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-left')\n : $slideEl.find('.swiper-slide-shadow-top');\n let $shadowAfterEl = isHorizontal\n ? $slideEl.find('.swiper-slide-shadow-right')\n : $slideEl.find('.swiper-slide-shadow-bottom');\n if ($shadowBeforeEl.length === 0) {\n $shadowBeforeEl = createShadow(params, $slideEl, isHorizontal ? 'left' : 'top');\n }\n if ($shadowAfterEl.length === 0) {\n $shadowAfterEl = createShadow(params, $slideEl, isHorizontal ? 'right' : 'bottom');\n }\n if ($shadowBeforeEl.length)\n $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;\n if ($shadowAfterEl.length)\n $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;\n }\n }\n };\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.coverflowEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements\n .transition(duration)\n .find(\n '.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left',\n )\n .transition(duration);\n };\n\n effectInit({\n effect: 'coverflow',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCreative({ swiper, extendParams, on }) {\n extendParams({\n creativeEffect: {\n transformEl: null,\n limitProgress: 1,\n shadowPerProgress: false,\n progressMultiplier: 1,\n perspective: true,\n prev: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n next: {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n opacity: 1,\n scale: 1,\n },\n },\n });\n\n const getTranslateValue = (value) => {\n if (typeof value === 'string') return value;\n return `${value}px`;\n };\n\n const setTranslate = () => {\n const { slides, $wrapperEl, slidesSizesGrid } = swiper;\n const params = swiper.params.creativeEffect;\n const { progressMultiplier: multiplier } = params;\n\n const isCenteredSlides = swiper.params.centeredSlides;\n\n if (isCenteredSlides) {\n const margin = slidesSizesGrid[0] / 2 - swiper.params.slidesOffsetBefore || 0;\n $wrapperEl.transform(`translateX(calc(50% - ${margin}px))`);\n }\n\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(\n Math.max($slideEl[0].progress, -params.limitProgress),\n params.limitProgress,\n );\n let originalProgress = progress;\n\n if (!isCenteredSlides) {\n originalProgress = Math.min(\n Math.max($slideEl[0].originalProgress, -params.limitProgress),\n params.limitProgress,\n );\n }\n\n const offset = $slideEl[0].swiperSlideOffset;\n const t = [swiper.params.cssMode ? -offset - swiper.translate : -offset, 0, 0];\n const r = [0, 0, 0];\n let custom = false;\n if (!swiper.isHorizontal()) {\n t[1] = t[0];\n t[0] = 0;\n }\n let data = {\n translate: [0, 0, 0],\n rotate: [0, 0, 0],\n scale: 1,\n opacity: 1,\n };\n if (progress < 0) {\n data = params.next;\n custom = true;\n } else if (progress > 0) {\n data = params.prev;\n custom = true;\n }\n // set translate\n t.forEach((value, index) => {\n t[index] = `calc(${value}px + (${getTranslateValue(data.translate[index])} * ${Math.abs(\n progress * multiplier,\n )}))`;\n });\n // set rotates\n r.forEach((value, index) => {\n r[index] = data.rotate[index] * Math.abs(progress * multiplier);\n });\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n\n const translateString = t.join(', ');\n const rotateString = `rotateX(${r[0]}deg) rotateY(${r[1]}deg) rotateZ(${r[2]}deg)`;\n const scaleString =\n originalProgress < 0\n ? `scale(${1 + (1 - data.scale) * originalProgress * multiplier})`\n : `scale(${1 - (1 - data.scale) * originalProgress * multiplier})`;\n const opacityString =\n originalProgress < 0\n ? 1 + (1 - data.opacity) * originalProgress * multiplier\n : 1 - (1 - data.opacity) * originalProgress * multiplier;\n const transform = `translate3d(${translateString}) ${rotateString} ${scaleString}`;\n\n // Set shadows\n if ((custom && data.shadow) || !custom) {\n let $shadowEl = $slideEl.children('.swiper-slide-shadow');\n if ($shadowEl.length === 0 && data.shadow) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length) {\n const shadowOpacity = params.shadowPerProgress\n ? progress * (1 / params.limitProgress)\n : progress;\n $shadowEl[0].style.opacity = Math.min(Math.max(Math.abs(shadowOpacity), 0), 1);\n }\n }\n\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform).css({ opacity: opacityString });\n if (data.origin) {\n $targetEl.css('transform-origin', data.origin);\n }\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.creativeEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl, allSlides: true });\n };\n\n effectInit({\n effect: 'creative',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => swiper.params.creativeEffect.perspective,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n","import createShadow from '../../shared/create-shadow.js';\nimport effectInit from '../../shared/effect-init.js';\nimport effectTarget from '../../shared/effect-target.js';\nimport effectVirtualTransitionEnd from '../../shared/effect-virtual-transition-end.js';\n\nexport default function EffectCards({ swiper, extendParams, on }) {\n extendParams({\n cardsEffect: {\n slideShadows: true,\n transformEl: null,\n rotate: true,\n perSlideRotate: 2,\n perSlideOffset: 8,\n },\n });\n\n const setTranslate = () => {\n const { slides, activeIndex } = swiper;\n const params = swiper.params.cardsEffect;\n const { startTranslate, isTouched } = swiper.touchEventsData;\n const currentTranslate = swiper.translate;\n for (let i = 0; i < slides.length; i += 1) {\n const $slideEl = slides.eq(i);\n const slideProgress = $slideEl[0].progress;\n const progress = Math.min(Math.max(slideProgress, -4), 4);\n let offset = $slideEl[0].swiperSlideOffset;\n if (swiper.params.centeredSlides && !swiper.params.cssMode) {\n swiper.$wrapperEl.transform(`translateX(${swiper.minTranslate()}px)`);\n }\n if (swiper.params.centeredSlides && swiper.params.cssMode) {\n offset -= slides[0].swiperSlideOffset;\n }\n let tX = swiper.params.cssMode ? -offset - swiper.translate : -offset;\n let tY = 0;\n const tZ = -100 * Math.abs(progress);\n let scale = 1;\n let rotate = -params.perSlideRotate * progress;\n\n let tXAdd = params.perSlideOffset - Math.abs(progress) * 0.75;\n\n const slideIndex =\n swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.from + i : i;\n\n const isSwipeToNext =\n (slideIndex === activeIndex || slideIndex === activeIndex - 1) &&\n progress > 0 &&\n progress < 1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate < startTranslate;\n const isSwipeToPrev =\n (slideIndex === activeIndex || slideIndex === activeIndex + 1) &&\n progress < 0 &&\n progress > -1 &&\n (isTouched || swiper.params.cssMode) &&\n currentTranslate > startTranslate;\n\n if (isSwipeToNext || isSwipeToPrev) {\n const subProgress = (1 - Math.abs((Math.abs(progress) - 0.5) / 0.5)) ** 0.5;\n rotate += -28 * progress * subProgress;\n scale += -0.5 * subProgress;\n tXAdd += 96 * subProgress;\n tY = `${-25 * subProgress * Math.abs(progress)}%`;\n }\n\n if (progress < 0) {\n // next\n tX = `calc(${tX}px + (${tXAdd * Math.abs(progress)}%))`;\n } else if (progress > 0) {\n // prev\n tX = `calc(${tX}px + (-${tXAdd * Math.abs(progress)}%))`;\n } else {\n tX = `${tX}px`;\n }\n if (!swiper.isHorizontal()) {\n const prevY = tY;\n tY = tX;\n tX = prevY;\n }\n\n const scaleString =\n progress < 0 ? `${1 + (1 - scale) * progress}` : `${1 - (1 - scale) * progress}`;\n\n const transform = `\n translate3d(${tX}, ${tY}, ${tZ}px)\n rotateZ(${params.rotate ? rotate : 0}deg)\n scale(${scaleString})\n `;\n\n if (params.slideShadows) {\n // Set shadows\n let $shadowEl = $slideEl.find('.swiper-slide-shadow');\n if ($shadowEl.length === 0) {\n $shadowEl = createShadow(params, $slideEl);\n }\n if ($shadowEl.length)\n $shadowEl[0].style.opacity = Math.min(Math.max((Math.abs(progress) - 0.5) / 0.5, 0), 1);\n }\n\n $slideEl[0].style.zIndex = -Math.abs(Math.round(slideProgress)) + slides.length;\n const $targetEl = effectTarget(params, $slideEl);\n $targetEl.transform(transform);\n }\n };\n\n const setTransition = (duration) => {\n const { transformEl } = swiper.params.cardsEffect;\n const $transitionElements = transformEl ? swiper.slides.find(transformEl) : swiper.slides;\n $transitionElements.transition(duration).find('.swiper-slide-shadow').transition(duration);\n\n effectVirtualTransitionEnd({ swiper, duration, transformEl });\n };\n\n effectInit({\n effect: 'cards',\n swiper,\n on,\n setTranslate,\n setTransition,\n perspective: () => true,\n overwriteParams: () => ({\n watchSlidesProgress: true,\n virtualTranslate: !swiper.params.cssMode,\n }),\n });\n}\n"],"mappings":"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"} \ No newline at end of file diff --git a/src/custom-theme.scss b/src/custom-theme.scss new file mode 100644 index 0000000..e8ad0aa --- /dev/null +++ b/src/custom-theme.scss @@ -0,0 +1,429 @@ + +// Custom Theming for Angular Material +// For more information: https://material.angular.io/guide/theming +@import '@angular/material/theming'; +@import 'bootstrap-icons/font/bootstrap-icons.css'; + +@import "src/app/styles/colors"; +@import "src/app/styles/variables"; +@import "src/app/styles/font"; + +// Import functions, variables, and mixins needed by other Bootstrap files +@import "bootstrap/scss/functions"; +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/mixins"; + +// Import Bootstrap Reboot +@import "bootstrap/scss/root"; // Contains :root CSS variables used by other Bootstrap files +@import "bootstrap/scss/reboot"; + +@import "styles/variables"; + +@import "bootstrap/scss/functions"; +@import "bootstrap/scss/variables"; +@import "bootstrap/scss/mixins"; +@import "bootstrap/scss/root"; +@import "bootstrap/scss/reboot"; + +@import "styles/reset"; + + +@import "bootstrap/scss/containers"; // Add .container and .container-fluid classes +@import "bootstrap/scss/grid"; // Add the grid system +// Plus imports for other components in your app. + +// Include the common styles for Angular Material. We include this here so that you only +// have to load a single css file for Angular Material in your app. +// Be sure that you only ever include this mixin once! +@include mat-core(); + +// Define the palettes for your theme using the Material Design palettes available in palette.scss +// (imported above). For each palette, you can optionally specify a default, lighter, and darker +// hue. Available color palettes: https://material.io/design/color/ +$angular-material-admin-primary: mat-palette($mat-indigo); +$angular-material-admin-accent: mat-palette($mat-pink, A200, A100, A400); + +// The warn palette is optional (defaults to red). +$angular-material-admin-warn: mat-palette($mat-red); + +// Create the theme object (a Sass map containing all of the palettes). +$angular-material-admin-theme: mat-light-theme($angular-material-admin-primary, $angular-material-admin-accent, $angular-material-admin-warn); + +// Include theme styles for core and each component used in your app. +// Alternatively, you can import and @include the theme mixins for each component +// that you are using. +@include angular-material-theme($angular-material-admin-theme); + + + +$ama-yellow: ( + 50: $yellow, + 100: #ECECEC, + 200: $yellow, + 300: $yellow, + 400: $yellow, + 500: $yellow, + 600: $yellow, + 700: $yellow, + 800: $yellow, + 900: $yellow, + A100: $yellow, + A200: $yellow, + A400: $yellow, + A700: $yellow, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$ama-pink: ( + 50: $pink, + 100: #ECECEC, + 200: $pink, + 300: $pink, + 400: $pink, + 500: $pink, + 600: $pink, + 700: $pink, + 800: $pink, + 900: $pink, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$ama-blue: ( + 50: $blue, + 100: #ECECEC, + 200: $blue, + 300: $blue, + 400: $blue, + 500: $blue, + 600: $blue, + 700: $blue, + 800: $blue, + 900: $blue, + A100: $blue, + A200: $blue, + A400: $blue, + A700: $blue, + contrast: ( + 50: $dark-primary-text, + 100: $dark-primary-text, + 200: $dark-primary-text, + 300: $dark-primary-text, + 400: $dark-primary-text, + 500: $light-primary-text, + 600: $light-primary-text, + 700: $light-primary-text, + 800: $light-primary-text, + 900: $light-primary-text, + A100: $dark-primary-text, + A200: $dark-primary-text, + A400: $light-primary-text, + A700: $light-primary-text, + ) +); + +$ama-primary: mat-palette($ama-blue); +$ama-accent: mat-palette($ama-yellow); +$ama-warn: mat-palette($ama-pink); + +$ama-theme: mat-light-theme($ama-primary, $ama-accent, $ama-warn); +@include angular-material-theme($ama-theme); + +button.mat-menu-item { + font-size: 16px; +} + +button.mat-menu-item:hover:not([disabled]), .mat-menu-item.cdk-program-focused:not([disabled]), .mat-menu-item.cdk-keyboard-focused:not([disabled]), .mat-menu-item-highlighted:not([disabled]) { + font-size: 16px; +} + +mat-select.mat-select { + // width: auto; + // display: inline; + font-size: 16px; + font-weight: 300; + color: $dark-grey; + border: 1px solid $light-grey; + border-radius: 4px; + padding: 8px 10px; + + // & .mat-select-value { + // width: auto; + // display: inline; + // } + + & .mat-select-arrow { + color: $light-grey; + margin-right: 0; + } +} + +.mat-option { + font-size: 16px; + height: 36px; + padding: 6px 16px; + color: $dark-grey; + + &.mat-focus-indicator.mat-selected.mat-active { + background-color: $blue-white; + color: $dark-grey; + } + + &:hover:not(.mat-option-disabled) { + background-color: $blue-white; + } +} + +.mat-form-field-underline { + display: none; +} + +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } + +.mat-h1, .mat-headline, .mat-typography h1{ + font-weight: 400; + font-size: 48px; +} + +.mat-h2, .mat-headline, .mat-typography h2{ + font-weight: 400; + font-size: 36px; +} + +.mat-h3, .mat-headline, .mat-typography h3{ + font-weight: 400; + font-size: 26px; +} + +.mat-h4, .mat-headline, .mat-typography h4{ + font-weight: 400; + font-size: 24px; +} + +.mat-h5, .mat-headline, .mat-typography h5{ + font-weight: 400; + font-size: 21px; +} + +.mat-h6, .mat-headline, .mat-typography h6{ + font-weight: 400; + font-size: 18px; +} + +.mat-body p, .mat-body-1 p, .mat-typography p { + margin-bottom: 16px; + line-height: normal; +} + +button.mat-fab .mat-button-wrapper { + padding: 0; +} + +.mat-card { + color: $card-font-color; + margin: 16px; +} + +.mat-card-title p { + font-size: 21px; + font-weight: 400; + color: $card-title-font-color; +} + +mat-toolbar.page-header { + display: flex; + justify-content: space-between; + padding: 50px 24px 16px 24px; + background: none; + height: auto; + + @media (max-width: $small) { + flex-direction: column; + align-items: baseline; + } +} + +.mat-toolbar h1 { + font-weight: 400; + font-size: 38.4px; + color: $toolbar-title-font-color; + line-height: 1; + letter-spacing: -0.2186px; + + @media (max-width: $small) { + white-space: normal; + } +} + +.mat-toolbar button { + height: 41.6px; + width: auto; + line-height: 1.75; + font-size: 0.9375rem; + font-weight: 400; + + @media (max-width: $small) { + margin-top: 16px; + } +} + +mat-tab-header .mat-tab-label, .mat-tab-link { + text-transform: uppercase; + color: $tabs-header-font-color; + font-weight: $fw-normal; + width: 50%; + min-width: 0; + padding: 0; + opacity: 1; +} + +mat-tab-header .mat-tab-label-active { + color: $tabs-header-font-color-active; +} + +mat-tab-group.mat-tab-group.mat-primary .mat-ink-bar { + background-color: $tabs-ink-bar-color; +} + +mat-tab-body div.mat-tab-body-content { + overflow: hidden; +} + +.toast-top-center { + top: 76px; +} + +.toast-top-left { + top: 76px; +} + +.toast-top-right { + top: 76px; +} + +.toast-bottom-center { + bottom: 12px; +} + +.toast-container .ngx-toastr { + padding: 16px; + border-radius: 45px; +} + +.toast-container .ngx-toastr:hover { + box-shadow: 0 0 12px $light-grey; +} + +.mat-icon { + padding-right: 3px; + padding-bottom: 5px; +} + +.material-icons { + font-size: 28px; +} + +button.mat-mini-fab .mat-button-wrapper { + padding: 0; +} + +button.mat-mini-fab { + height: 36px; + width: 36px; +} + +div.mat-menu-panel { + margin-top: 20px; +} + +.fa { + font-size: 1.5em; +} + +.apexcharts-xaxistooltip.apexcharts-xaxistooltip-bottom.apexcharts-theme-light { + background-color: $chart-tooltip-background-color; + color: $chart-tooltip-font-color; + border: none; +} + +div.apexcharts-xaxistooltip-bottom:after { + border-bottom-color: $chart-tooltip-border-color; +} + +.mat-drawer-backdrop.mat-drawer-shown { + background-color: rgba(0, 0, 0, 0.2); +} + +::-webkit-scrollbar { width: 6px; height: 3px;} +::-webkit-scrollbar-button { display: none } +::-webkit-scrollbar-track { background-color: $scrollbar-track-color;} +::-webkit-scrollbar-track-piece { background-color: $scrollbar-track-piece-color;} +::-webkit-scrollbar-thumb { height: 50px; background-color: $light-grey; border-radius: 36px;} +::-webkit-scrollbar-corner { background-color: $scrollbar-corner-color;} +::-webkit-resizer { background-color: $dark-grey;} + + + +.custom-green-snackbar { + background-color: #00a300; + color: white; // Set the text color to white or any other contrasting color for better visibility +} + +.profile-dialog-container .mat-dialog-container{ + padding: 0 !important; + background-color: ghostwhite; +} + +@font-face { + font-family: 'nucleo'; + // src: url('assets/fonts/Poppins-Medium.ttf'); + src: url('assets/fonts/Helvetica Light Regular.otf'); +} + +@font-face { + font-family: 'texg'; + // src: url('assets/fonts/texgyreadventor-bold.otf'); + src: url('assets/fonts/Helvetica Light Regular.otf'); + // src: url('assets/fonts/Poppins-Medium.ttf'); + + +} +@font-face { + font-family: 'texg-regular'; + src: url('assets/fonts/texgyreadventor-regular.otf'); +} + +@font-face { + font-family: 'captcha'; + src: url('assets/fonts/captcha.ttf'); +} diff --git a/src/environments/environment.hmr.ts b/src/environments/environment.hmr.ts new file mode 100644 index 0000000..db58648 --- /dev/null +++ b/src/environments/environment.hmr.ts @@ -0,0 +1,4 @@ +export const environment = { + production: false, + hmr: true +}; diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts new file mode 100644 index 0000000..16aa6f6 --- /dev/null +++ b/src/environments/environment.prod.ts @@ -0,0 +1,15 @@ +export const environment = { + + //SalesApp + + // apiUrl:'https://sales.api.accuratesoftware.online/api/v1', + // apiUrl: 'https://tenderapi.simssoftware.in/api/v1', + apiUrl: 'https://artnouapi.simssoftware.in/api/v1', //DEV [tender.simssoftware.in] + + // apiUrl: 'https://tenderapi.artnouveau.in/api/v1', //LIVE [tender.artnou.in] + upiId:'thrikodithanamservicecoperativebank@icici', + production: true, + hmr: false, + timeOutLimit: 3600, + timeOutCountLimit: 60, +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..ba62e70 --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,29 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + + // apiUrl: 'http://192.168.0.107:3500/api/v1', + // apiUrl: 'http://192.168.1.109:3500/api/v1', +// apiUrl: 'https://tenderapi.simssoftware.in/api/v1', + +// apiUrl: 'https://tenderapi.artnouveau.in/api/v1', //LIVE [tender.artnou.in] + + + apiUrl: 'https://artnouapi.simssoftware.in/api/v1', //DEV [tender.simssoftware.in] + upiId:'thrikodithanamservicecoperativebank@icici', + production: false, + hmr: false, + timeOutLimit: 3600, + timeOutCountLimit: 60, +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/src/favicon.ico b/src/favicon.ico new file mode 100644 index 0000000..5a7d4d3 Binary files /dev/null and b/src/favicon.ico differ diff --git a/src/favicon.png b/src/favicon.png new file mode 100644 index 0000000..20b4eed Binary files /dev/null and b/src/favicon.png differ diff --git a/src/favicon1.ico b/src/favicon1.ico new file mode 100644 index 0000000..2bdb686 Binary files /dev/null and b/src/favicon1.ico differ diff --git a/src/hmr.ts b/src/hmr.ts new file mode 100644 index 0000000..16dc798 --- /dev/null +++ b/src/hmr.ts @@ -0,0 +1,15 @@ +import { NgModuleRef, ApplicationRef } from '@angular/core'; +import { createNewHosts } from '@angularclass/hmr'; + +export const hmrBootstrap = (module: any, bootstrap: () => Promise>) => { + let ngModule: NgModuleRef; + module.hot.accept(); + bootstrap().then(mod => ngModule = mod); + module.hot.dispose(() => { + const appRef: ApplicationRef = ngModule.injector.get(ApplicationRef); + const elements = appRef.components.map(c => c.location.nativeElement); + const makeVisible = createNewHosts(elements); + ngModule.destroy(); + makeVisible(); + }); +}; diff --git a/src/index.html b/src/index.html new file mode 100644 index 0000000..6449842 --- /dev/null +++ b/src/index.html @@ -0,0 +1,20 @@ + + + + + Art.n.Architects + + + + + + + + + + + + + + + diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..56c43b0 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,25 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +import { hmrBootstrap } from './hmr'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +const bootstrap = () => platformBrowserDynamic().bootstrapModule(AppModule); +if (environment.hmr) { + if (module[ 'hot' ]) { + hmrBootstrap(module, bootstrap); + } else { + console.error('HMR is not enabled for webpack-dev-server!'); + console.log('Are you using the --hmr flag for ng serve?'); + } +} else { + bootstrap().catch(err => console.log(err)); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/src/polyfills.ts b/src/polyfills.ts new file mode 100644 index 0000000..dcd18ea --- /dev/null +++ b/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), + * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/src/styles/reset.scss b/src/styles/reset.scss new file mode 100644 index 0000000..fda1367 --- /dev/null +++ b/src/styles/reset.scss @@ -0,0 +1,7 @@ +a { + &.mat-button, &.mat-raised-button, &.mat-fab, &.mat-mini-fab, &.mat-list-item { + &:hover { + color: currentColor + } + } + } \ No newline at end of file diff --git a/src/styles/variables.scss b/src/styles/variables.scss new file mode 100644 index 0000000..07074a8 --- /dev/null +++ b/src/styles/variables.scss @@ -0,0 +1,2 @@ +$link-color: #673ab7; // 1 +$label-margin-bottom: 0; // 2 \ No newline at end of file diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..2fb2c68 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": ["node"] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts", + "node_modules/apexcharts/types/apexcharts.d.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..65575c0 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "es2020", + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "lib": [ + "es2018", + "dom" + ], + "useDefineForClassFields": false + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true, + "skipLibCheck":true + } +} diff --git a/tslint.json b/tslint.json new file mode 100644 index 0000000..d92ff5d --- /dev/null +++ b/tslint.json @@ -0,0 +1,148 @@ +{ + "extends": "tslint:recommended", + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "directive-selector": [ + true, + "attribute", + "app", + "camelCase" + ], + "component-selector": [ + true, + "element", + "app", + "kebab-case" + ], + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + }, + "rulesDirectory": [ + "codelyzer" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..7eac881 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,7161 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@agm/core@^1.1.0": + "integrity" "sha512-cMvmm3+3/uuVFurLv1FKhE0/6ssIlDvYBjQFCi8ELg7h0OY2MkIU1MXWr7z+f/xZ08E936I4eeddni6k4yUTIA==" + "resolved" "https://registry.npmjs.org/@agm/core/-/core-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "tslib" "^1.9.0" + +"@ampproject/remapping@^2.1.0", "@ampproject/remapping@2.2.0": + "integrity" "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==" + "resolved" "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@angular-devkit/architect@0.1502.10": + "integrity" "sha512-S8lN73WYCfpEpw1Q41ZcUinw7JfDeSM8LyGs797OVshnW75QcOkOecWj/3CKR23G44IgFrHN6sqtzWxKmMxLig==" + "resolved" "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1502.10.tgz" + "version" "0.1502.10" + dependencies: + "@angular-devkit/core" "15.2.10" + "rxjs" "6.6.7" + +"@angular-devkit/build-angular@^15.2.10": + "integrity" "sha512-3pCPVEJilVwHIJC6Su1/PIEqvFfU1Lxew9yItxX4s6dud8HY+fuKrsDnao4NNMFNqCLqL4el5QbSBKnnpWH1sg==" + "resolved" "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "@ampproject/remapping" "2.2.0" + "@angular-devkit/architect" "0.1502.10" + "@angular-devkit/build-webpack" "0.1502.10" + "@angular-devkit/core" "15.2.10" + "@babel/core" "7.20.12" + "@babel/generator" "7.20.14" + "@babel/helper-annotate-as-pure" "7.18.6" + "@babel/helper-split-export-declaration" "7.18.6" + "@babel/plugin-proposal-async-generator-functions" "7.20.7" + "@babel/plugin-transform-async-to-generator" "7.20.7" + "@babel/plugin-transform-runtime" "7.19.6" + "@babel/preset-env" "7.20.2" + "@babel/runtime" "7.20.13" + "@babel/template" "7.20.7" + "@discoveryjs/json-ext" "0.5.7" + "@ngtools/webpack" "15.2.10" + "ansi-colors" "4.1.3" + "autoprefixer" "10.4.13" + "babel-loader" "9.1.2" + "babel-plugin-istanbul" "6.1.1" + "browserslist" "4.21.5" + "cacache" "17.0.4" + "chokidar" "3.5.3" + "copy-webpack-plugin" "11.0.0" + "critters" "0.0.16" + "css-loader" "6.7.3" + "esbuild-wasm" "0.17.8" + "glob" "8.1.0" + "https-proxy-agent" "5.0.1" + "inquirer" "8.2.4" + "jsonc-parser" "3.2.0" + "karma-source-map-support" "1.4.0" + "less" "4.1.3" + "less-loader" "11.1.0" + "license-webpack-plugin" "4.0.2" + "loader-utils" "3.2.1" + "magic-string" "0.29.0" + "mini-css-extract-plugin" "2.7.2" + "open" "8.4.1" + "ora" "5.4.1" + "parse5-html-rewriting-stream" "7.0.0" + "piscina" "3.2.0" + "postcss" "8.4.31" + "postcss-loader" "7.0.2" + "resolve-url-loader" "5.0.0" + "rxjs" "6.6.7" + "sass" "1.58.1" + "sass-loader" "13.2.0" + "semver" "7.5.3" + "source-map-loader" "4.0.1" + "source-map-support" "0.5.21" + "terser" "5.16.3" + "text-table" "0.2.0" + "tree-kill" "1.2.2" + "tslib" "2.5.0" + "webpack" "5.76.1" + "webpack-dev-middleware" "6.0.1" + "webpack-dev-server" "4.11.1" + "webpack-merge" "5.8.0" + "webpack-subresource-integrity" "5.1.0" + optionalDependencies: + "esbuild" "0.17.8" + +"@angular-devkit/build-webpack@0.1502.10": + "integrity" "sha512-55b9WZIGU4DNgiIV2lkkN6iQxJrgWY5CDaNu0kJC/qazotJgBbcN/8jgBx2DD8HNE1V3iXxWk66pt1h946Po+Q==" + "resolved" "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1502.10.tgz" + "version" "0.1502.10" + dependencies: + "@angular-devkit/architect" "0.1502.10" + "rxjs" "6.6.7" + +"@angular-devkit/core@15.2.10": + "integrity" "sha512-bFPm7wjvfBds9km2rCJxUhzkqe4h3h/199yJtzC1bNvwRr2LMHvtyoQAzftda+gs7Ulqac5wzUEZX/cVV3WrsA==" + "resolved" "https://registry.npmjs.org/@angular-devkit/core/-/core-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "ajv" "8.12.0" + "ajv-formats" "2.1.1" + "jsonc-parser" "3.2.0" + "rxjs" "6.6.7" + "source-map" "0.7.4" + +"@angular-devkit/schematics@15.2.10": + "integrity" "sha512-EeoDs4oKFpLZNa21G/8dqBdclEc4U2piI9EeXCVTaN6z5DYXIZ0G1WtCXU8nhD+GckS47rmfZ4/3lMaXAvED+g==" + "resolved" "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "@angular-devkit/core" "15.2.10" + "jsonc-parser" "3.2.0" + "magic-string" "0.29.0" + "ora" "5.4.1" + "rxjs" "6.6.7" + +"@angular/animations@^11.0.0 || ^12.0.0", "@angular/animations@^15.2.10", "@angular/animations@>=10.1.5", "@angular/animations@15.2.10": + "integrity" "sha512-yxfN8qQpMaukRU5LjFkJBmy85rqrOp86tYVCsf+hmPEFRiXBMUj6xYLeCMcpk3Mt1JtnWGBR34ivGx+7bNeAow==" + "resolved" "https://registry.npmjs.org/@angular/animations/-/animations-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/cdk@^11.2.12": + "integrity" "sha512-LImCQQ7n5OnTGXBAx1BaHgBBbdXiEtsNcHk5RvVURya9sswRcXRoa48EG3RyuT8mtqWsUdOX9+v4nCINLG4hZA==" + "resolved" "https://registry.npmjs.org/@angular/cdk/-/cdk-11.2.12.tgz" + "version" "11.2.12" + dependencies: + "tslib" "^2.0.0" + optionalDependencies: + "parse5" "^5.0.0" + +"@angular/cli@^15.2.10": + "integrity" "sha512-/TSnm/ZQML6A4lvunyN2tjTB5utuvk3d1Pnfyehp/FXtV6YfZm6+EZrOpKkKPCxTuAgW6c9KK4yQtt3RuNVpwQ==" + "resolved" "https://registry.npmjs.org/@angular/cli/-/cli-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "@angular-devkit/architect" "0.1502.10" + "@angular-devkit/core" "15.2.10" + "@angular-devkit/schematics" "15.2.10" + "@schematics/angular" "15.2.10" + "@yarnpkg/lockfile" "1.1.0" + "ansi-colors" "4.1.3" + "ini" "3.0.1" + "inquirer" "8.2.4" + "jsonc-parser" "3.2.0" + "npm-package-arg" "10.1.0" + "npm-pick-manifest" "8.0.1" + "open" "8.4.1" + "ora" "5.4.1" + "pacote" "15.1.0" + "resolve" "1.22.1" + "semver" "7.5.3" + "symbol-observable" "4.0.0" + "yargs" "17.6.2" + +"@angular/common@^11.0.0 || ^12.0.0", "@angular/common@^15.2.10", "@angular/common@>=10.0.0", "@angular/common@>=10.1.5", "@angular/common@>=6.0.0", "@angular/common@>=9.0.0", "@angular/common@15.2.10": + "integrity" "sha512-jdBn3fctkqoNrJn9VLsUHpcCEhCxWSczdsR+BBbD6T0oLl6vMrAVNjPwfBejnlgfWN1KoRU9kgOYsMxa5apIWQ==" + "resolved" "https://registry.npmjs.org/@angular/common/-/common-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/compiler-cli@^15.0.0", "@angular/compiler-cli@^15.2.10": + "integrity" "sha512-mCFIxrs60XicKfA2o42hA7LrQvhybi9BQveWuZn/2iIEOXx7R62Iemz8E21pLWftAZHGxEW3NECfBrY1d3gVmA==" + "resolved" "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "@babel/core" "7.19.3" + "@jridgewell/sourcemap-codec" "^1.4.14" + "chokidar" "^3.0.0" + "convert-source-map" "^1.5.1" + "dependency-graph" "^0.11.0" + "magic-string" "^0.27.0" + "reflect-metadata" "^0.1.2" + "semver" "^7.0.0" + "tslib" "^2.3.0" + "yargs" "^17.2.1" + +"@angular/compiler@^15.2.10", "@angular/compiler@>=10.1.5", "@angular/compiler@15.2.10": + "integrity" "sha512-M0XkeU0O73UlJZwDvOyp8/apetz9UKj78eTFDseMYJDLcxe6MpkbkxqpsGZnKYDj7LIep8PmCAKEkhtenE82zw==" + "resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/compiler@9.0.0": + "integrity" "sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ==" + "resolved" "https://registry.npmjs.org/@angular/compiler/-/compiler-9.0.0.tgz" + "version" "9.0.0" + +"@angular/core@^11.0.0 || ^12.0.0", "@angular/core@^12.0.0 || ^13.0.0-0", "@angular/core@^15.2.10", "@angular/core@>=10.0.0", "@angular/core@>=10.1.5", "@angular/core@>=6.0.0", "@angular/core@>=9.0.0", "@angular/core@15.2.10": + "integrity" "sha512-meGGidnitQJGDxYd9/LrqYiVlId+vGaLoiLgJdKBz+o2ZO6OmXQGuNw2VBqf17/Cc0/UjzrOY7+kILNFKkk/WQ==" + "resolved" "https://registry.npmjs.org/@angular/core/-/core-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/core@9.0.0": + "integrity" "sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w==" + "resolved" "https://registry.npmjs.org/@angular/core/-/core-9.0.0.tgz" + "version" "9.0.0" + +"@angular/forms@^11.0.0 || ^12.0.0", "@angular/forms@^15.2.10", "@angular/forms@>=10.1.5": + "integrity" "sha512-NIntGsNcN6o8L1txsbWXOf6f3K/CUBizdKsxsYVYGJIXEW5qU6UnWmfAZffNNXsT/XvbgUCjgDwT0cAwcqZPuQ==" + "resolved" "https://registry.npmjs.org/@angular/forms/-/forms-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/language-service@^15.2.10": + "integrity" "sha512-G0g0teF4pBqLTgfyLcoBl55g91sCZvBK+V4VgTD/hXGpXyMNlNpOsgECSMliGQoJlsRLEugFsSlBNqy7CRoBtw==" + "resolved" "https://registry.npmjs.org/@angular/language-service/-/language-service-15.2.10.tgz" + "version" "15.2.10" + +"@angular/material-moment-adapter@^12.0.0": + "integrity" "sha512-0XhkAhBalvNvIfvi9t5qDKaTBtOuIqd1cABfotyaTecWmw57VoH0KoJtNekXjxDcx71S0LaqeYXfqTo4m+duSA==" + "resolved" "https://registry.npmjs.org/@angular/material-moment-adapter/-/material-moment-adapter-12.2.13.tgz" + "version" "12.2.13" + dependencies: + "tslib" "^2.2.0" + +"@angular/material@^11.2.12", "@angular/material@12.2.13": + "integrity" "sha512-n3HDKoM552jLcmxtpTYzMUzV6V9vUBKyNs7SNdUfjuK00VJlTWMu03g/QWOj2Y9KftOuDUa8+N2XodwAr+jtCw==" + "resolved" "https://registry.npmjs.org/@angular/material/-/material-11.2.12.tgz" + "version" "11.2.12" + dependencies: + "tslib" "^2.0.0" + +"@angular/platform-browser-dynamic@^15.2.10": + "integrity" "sha512-JHP6W+FX715Qv7DhqvfZLuBZXSDJrboiQsR06gUAgDSjAUyhbqmpVg/2YOtgeWpPkzNDtXdPU2PhcRdIv5J3Yg==" + "resolved" "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/platform-browser@^15.2.10", "@angular/platform-browser@15.2.10": + "integrity" "sha512-9tbgVGSJqwfrOzT8aA/kWBLNhJSQ9gUg0CJxwFBSJm8VkBUJrszoBlDsnSvlxx8/W2ejNULKHFTXeUzq0O/+RQ==" + "resolved" "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angular/router@^15.2.10": + "integrity" "sha512-LmuqEg0iIXSw7bli6HKJ19cbxP91v37GtRwbGKswyLihqzTgvjBYpvcfMnB5FRQ5LWkTwq5JclkX03dZw290Yg==" + "resolved" "https://registry.npmjs.org/@angular/router/-/router-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "tslib" "^2.3.0" + +"@angularclass/hmr@^2.1.3": + "integrity" "sha1-NOZY7T2jfyOwogDi2lqJvpK7IJ8=" + "resolved" "https://registry.npmjs.org/@angularclass/hmr/-/hmr-2.1.3.tgz" + "version" "2.1.3" + +"@assemblyscript/loader@^0.10.1": + "integrity" "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==" + "resolved" "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz" + "version" "0.10.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + "integrity" "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz" + "version" "7.23.5" + dependencies: + "@babel/highlight" "^7.23.4" + "chalk" "^2.4.2" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.23.5": + "integrity" "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz" + "version" "7.23.5" + +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@7.19.3": + "integrity" "sha512-WneDJxdsjEvyKtXKsaBGbDeiyOjR5vYq4HcShxnIbG0qixpoHjI3MqeZM9NDvsojNCEBItQE4juOo/bU6e72gQ==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.19.3.tgz" + "version" "7.19.3" + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.19.3" + "@babel/helper-compilation-targets" "^7.19.3" + "@babel/helper-module-transforms" "^7.19.0" + "@babel/helpers" "^7.19.0" + "@babel/parser" "^7.19.3" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.19.3" + "@babel/types" "^7.19.3" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.1" + "semver" "^6.3.0" + +"@babel/core@7.20.12": + "integrity" "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz" + "version" "7.20.12" + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.20.7" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helpers" "^7.20.7" + "@babel/parser" "^7.20.7" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.12" + "@babel/types" "^7.20.7" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.2.2" + "semver" "^6.3.0" + +"@babel/generator@^7.19.3", "@babel/generator@^7.20.7", "@babel/generator@7.20.14": + "integrity" "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz" + "version" "7.20.14" + dependencies: + "@babel/types" "^7.20.7" + "@jridgewell/gen-mapping" "^0.3.2" + "jsesc" "^2.5.1" + +"@babel/generator@^7.23.6": + "integrity" "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + "jsesc" "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@7.18.6": + "integrity" "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-annotate-as-pure@^7.22.5": + "integrity" "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + "integrity" "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.19.3", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.15": + "integrity" "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + "browserslist" "^4.22.2" + "lru-cache" "^5.1.1" + "semver" "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + "integrity" "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-member-expression-to-functions" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "semver" "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + "integrity" "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "regexpu-core" "^5.3.1" + "semver" "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + "integrity" "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.20": + "integrity" "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + "version" "7.22.20" + +"@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + "integrity" "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0": + "integrity" "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + "version" "7.23.0" + dependencies: + "@babel/types" "^7.23.0" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.15": + "integrity" "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.19.0", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.23.3": + "integrity" "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@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.20" + +"@babel/helper-optimise-call-expression@^7.22.5": + "integrity" "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + "integrity" "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + "version" "7.22.5" + +"@babel/helper-remap-async-to-generator@^7.18.9": + "integrity" "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" + +"@babel/helper-replace-supers@^7.22.20": + "integrity" "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + "integrity" "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + "integrity" "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + "integrity" "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + "version" "7.22.6" + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@7.18.6": + "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.23.4": + "integrity" "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz" + "version" "7.23.4" + +"@babel/helper-validator-identifier@^7.22.20": + "integrity" "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + "version" "7.22.20" + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.23.5": + "integrity" "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz" + "version" "7.23.5" + +"@babel/helper-wrap-function@^7.22.20": + "integrity" "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + "version" "7.22.20" + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" + +"@babel/helpers@^7.19.0", "@babel/helpers@^7.20.7": + "integrity" "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.6" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.23.4": + "integrity" "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz" + "version" "7.23.4" + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + "chalk" "^2.4.2" + "js-tokens" "^4.0.0" + +"@babel/parser@^7.14.7", "@babel/parser@^7.19.3", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + "integrity" "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz" + "version" "7.23.6" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + "integrity" "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==" + "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.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": + "integrity" "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-proposal-async-generator-functions@^7.20.1", "@babel/plugin-proposal-async-generator-functions@7.20.7": + "integrity" "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz" + "version" "7.20.7" + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.18.6": + "integrity" "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz" + "version" "7.21.0" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + "integrity" "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + "integrity" "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz" + "version" "7.18.9" + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + "integrity" "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.18.9": + "integrity" "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz" + "version" "7.20.7" + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + "integrity" "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + "integrity" "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.20.2": + "integrity" "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz" + "version" "7.20.7" + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + "integrity" "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.18.9": + "integrity" "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz" + "version" "7.21.0" + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + "integrity" "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.18.6": + "integrity" "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz" + "version" "7.21.11" + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + "integrity" "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" + "version" "7.18.6" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + "integrity" "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-json-strings@^7.8.3": + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.18.6": + "integrity" "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-async-to-generator@^7.18.6", "@babel/plugin-transform-async-to-generator@7.20.7": + "integrity" "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" + "version" "7.20.7" + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + "integrity" "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.20.2": + "integrity" "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz" + "version" "7.23.4" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-classes@^7.20.2": + "integrity" "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz" + "version" "7.23.5" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" + "globals" "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.18.9": + "integrity" "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" + +"@babel/plugin-transform-destructuring@^7.20.2": + "integrity" "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + "integrity" "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + "integrity" "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + "integrity" "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-for-of@^7.18.8": + "integrity" "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-function-name@^7.18.9": + "integrity" "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-literals@^7.18.9": + "integrity" "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + "integrity" "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-amd@^7.19.6": + "integrity" "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-modules-commonjs@^7.19.6": + "integrity" "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + +"@babel/plugin-transform-modules-systemjs@^7.19.6": + "integrity" "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/plugin-transform-modules-umd@^7.18.6": + "integrity" "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": + "integrity" "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + "version" "7.22.5" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.18.6": + "integrity" "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-object-super@^7.18.6": + "integrity" "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + +"@babel/plugin-transform-optional-chaining@^7.23.3": + "integrity" "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz" + "version" "7.23.4" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": + "integrity" "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-property-literals@^7.18.6": + "integrity" "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-regenerator@^7.18.6": + "integrity" "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "regenerator-transform" "^0.15.2" + +"@babel/plugin-transform-reserved-words@^7.18.6": + "integrity" "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-runtime@7.19.6": + "integrity" "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz" + "version" "7.19.6" + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.19.0" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "semver" "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + "integrity" "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-spread@^7.19.0": + "integrity" "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + "integrity" "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-template-literals@^7.18.9": + "integrity" "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + "integrity" "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + "integrity" "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + "integrity" "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@7.20.2": + "integrity" "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz" + "version" "7.20.2" + dependencies: + "@babel/compat-data" "^7.20.1" + "@babel/helper-compilation-targets" "^7.20.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-async-generator-functions" "^7.20.1" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.18.6" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.18.9" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.18.6" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.18.6" + "@babel/plugin-transform-async-to-generator" "^7.18.6" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.20.2" + "@babel/plugin-transform-classes" "^7.20.2" + "@babel/plugin-transform-computed-properties" "^7.18.9" + "@babel/plugin-transform-destructuring" "^7.20.2" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.18.8" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.19.6" + "@babel/plugin-transform-modules-commonjs" "^7.19.6" + "@babel/plugin-transform-modules-systemjs" "^7.19.6" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.20.1" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.18.6" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.19.0" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.20.2" + "babel-plugin-polyfill-corejs2" "^0.3.3" + "babel-plugin-polyfill-corejs3" "^0.6.0" + "babel-plugin-polyfill-regenerator" "^0.4.1" + "core-js-compat" "^3.25.1" + "semver" "^6.3.0" + +"@babel/preset-modules@^0.1.5": + "integrity" "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + "esutils" "^2.0.2" + +"@babel/regjsgen@^0.8.0": + "integrity" "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + "resolved" "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz" + "version" "0.8.0" + +"@babel/runtime@^7.8.4", "@babel/runtime@7.20.13": + "integrity" "sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz" + "version" "7.20.13" + dependencies: + "regenerator-runtime" "^0.13.11" + +"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@7.20.7": + "integrity" "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz" + "version" "7.20.7" + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/template@^7.22.15": + "integrity" "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.19.3", "@babel/traverse@^7.20.12", "@babel/traverse@^7.23.6": + "integrity" "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@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.23.6" + "@babel/types" "^7.23.6" + "debug" "^4.3.1" + "globals" "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.19.3", "@babel/types@^7.20.2", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.4.4": + "integrity" "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz" + "version" "7.23.6" + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + "to-fast-properties" "^2.0.0" + +"@discoveryjs/json-ext@0.5.7": + "integrity" "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==" + "resolved" "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" + "version" "0.5.7" + +"@esbuild/win32-x64@0.17.8": + "integrity" "sha512-1iuezdyDNngPnz8rLRDO2C/ZZ/emJLb72OsZeqQ6gL6Avko/XCXZw+NuxBSNhBAP13Hie418V7VMt9et1FMvpg==" + "resolved" "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.8.tgz" + "version" "0.17.8" + +"@foliojs-fork/fontkit@^1.9.1": + "integrity" "sha512-U589voc2/ROnvx1CyH9aNzOQWJp127JGU1QAylXGQ7LoEAF6hMmahZLQ4eqAcgHUw+uyW4PjtCItq9qudPkK3A==" + "resolved" "https://registry.npmjs.org/@foliojs-fork/fontkit/-/fontkit-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "@foliojs-fork/restructure" "^2.0.2" + "brfs" "^2.0.0" + "brotli" "^1.2.0" + "browserify-optional" "^1.0.1" + "clone" "^1.0.4" + "deep-equal" "^1.0.0" + "dfa" "^1.2.0" + "tiny-inflate" "^1.0.2" + "unicode-properties" "^1.2.2" + "unicode-trie" "^2.0.0" + +"@foliojs-fork/linebreak@^1.1.1": + "integrity" "sha512-pgY/+53GqGQI+mvDiyprvPWgkTlVBS8cxqee03ejm6gKAQNsR1tCYCIvN9FHy7otZajzMqCgPOgC4cHdt4JPig==" + "resolved" "https://registry.npmjs.org/@foliojs-fork/linebreak/-/linebreak-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "base64-js" "1.3.1" + "brfs" "^2.0.2" + "unicode-trie" "^2.0.0" + +"@foliojs-fork/pdfkit@^0.13.0": + "integrity" "sha512-YXeG1fml9k97YNC9K8e292Pj2JzGt9uOIiBFuQFxHsdQ45BlxW+JU3RQK6JAvXU7kjhjP8rCcYvpk36JLD33sQ==" + "resolved" "https://registry.npmjs.org/@foliojs-fork/pdfkit/-/pdfkit-0.13.0.tgz" + "version" "0.13.0" + dependencies: + "@foliojs-fork/fontkit" "^1.9.1" + "@foliojs-fork/linebreak" "^1.1.1" + "crypto-js" "^4.0.0" + "png-js" "^1.0.0" + +"@foliojs-fork/restructure@^2.0.2": + "integrity" "sha512-59SgoZ3EXbkfSX7b63tsou/SDGzwUEK6MuB5sKqgVK1/XE0fxmpsOb9DQI8LXW3KfGnAjImCGhhEb7uPPAUVNA==" + "resolved" "https://registry.npmjs.org/@foliojs-fork/restructure/-/restructure-2.0.2.tgz" + "version" "2.0.2" + +"@gar/promisify@^1.1.3": + "integrity" "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" + "version" "1.1.3" + +"@isaacs/cliui@^8.0.2": + "integrity" "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==" + "resolved" "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "string-width" "^5.1.2" + "string-width-cjs" "npm:string-width@^4.2.0" + "strip-ansi" "^7.0.1" + "strip-ansi-cjs" "npm:strip-ansi@^6.0.1" + "wrap-ansi" "^8.1.0" + "wrap-ansi-cjs" "npm:wrap-ansi@^7.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" + +"@jridgewell/gen-mapping@^0.1.0": + "integrity" "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz" + "version" "0.1.1" + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0": + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/gen-mapping@^0.3.2": + "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.1.0": + "integrity" "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==" + "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + "version" "3.1.1" + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + "integrity" "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + "resolved" "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" + "version" "1.1.2" + +"@jridgewell/source-map@^0.3.2", "@jridgewell/source-map@^0.3.3": + "integrity" "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" + "version" "0.3.5" + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.14": + "integrity" "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + "version" "1.4.15" + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + "integrity" "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" + "version" "0.3.20" + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + "integrity" "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + "resolved" "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + "version" "2.0.4" + +"@ng-idle/core@^11.0.3", "@ng-idle/core@^11.1.0": + "integrity" "sha512-/hf3LDFz3UCTe2H6r1bq6Kn6mo5B5mxaU5XVqcDfE4Vdlx9evTqBXyl0VpWbuzZbohVCfWq31mEjbxg9lbY4bw==" + "resolved" "https://registry.npmjs.org/@ng-idle/core/-/core-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "tslib" "^2.0.0" + +"@ng-idle/keepalive@^11.0.3": + "integrity" "sha512-etnPYnDua/uaFQebDHfC40iBb22KwPVkbt24/9IJBH9A4TGZa6zBrb+8DoRiRJm8I/WBuXdCDeaWzVHElfc9pg==" + "resolved" "https://registry.npmjs.org/@ng-idle/keepalive/-/keepalive-11.0.3.tgz" + "version" "11.0.3" + dependencies: + "tslib" "^2.0.0" + +"@ngtools/webpack@15.2.10": + "integrity" "sha512-ZExB4rKh/Saad31O/Ofd2XvRuILuCNTYs0+qJL697Be2pzeewvzBhE4Xe1Mm7Jg13aWSPeuIdzSGOqCdwxxxFQ==" + "resolved" "https://registry.npmjs.org/@ngtools/webpack/-/webpack-15.2.10.tgz" + "version" "15.2.10" + +"@ngx-translate/core@^13.0.0", "@ngx-translate/core@>=13.0.0": + "integrity" "sha512-+tzEp8wlqEnw0Gc7jtVRAJ6RteUjXw6JJR4O65KlnxOmJrCGPI0xjV/lKRnQeU0w4i96PQs/jtpL921Wrb7PWg==" + "resolved" "https://registry.npmjs.org/@ngx-translate/core/-/core-13.0.0.tgz" + "version" "13.0.0" + dependencies: + "tslib" "^2.0.0" + +"@ngx-translate/http-loader@^6.0.0": + "integrity" "sha512-LCekn6qCbeXWlhESCxU1rAbZz33WzDG0lI7Ig0pYC1o5YxJWrkU9y3Y4tNi+jakQ7R6YhTR2D3ox6APxDtA0wA==" + "resolved" "https://registry.npmjs.org/@ngx-translate/http-loader/-/http-loader-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "tslib" "^2.0.0" + +"@nodelib/fs.scandir@2.1.5": + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" + dependencies: + "@nodelib/fs.stat" "2.0.5" + "run-parallel" "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" + +"@nodelib/fs.walk@^1.2.3": + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "@nodelib/fs.scandir" "2.1.5" + "fastq" "^1.6.0" + +"@npmcli/fs@^2.1.0": + "integrity" "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "@gar/promisify" "^1.1.3" + "semver" "^7.3.5" + +"@npmcli/fs@^3.1.0": + "integrity" "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==" + "resolved" "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^7.3.5" + +"@npmcli/git@^4.0.0": + "integrity" "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==" + "resolved" "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "@npmcli/promise-spawn" "^6.0.0" + "lru-cache" "^7.4.4" + "npm-pick-manifest" "^8.0.0" + "proc-log" "^3.0.0" + "promise-inflight" "^1.0.1" + "promise-retry" "^2.0.1" + "semver" "^7.3.5" + "which" "^3.0.0" + +"@npmcli/installed-package-contents@^2.0.1": + "integrity" "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==" + "resolved" "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "npm-bundled" "^3.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"@npmcli/move-file@^2.0.0": + "integrity" "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==" + "resolved" "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "mkdirp" "^1.0.4" + "rimraf" "^3.0.2" + +"@npmcli/node-gyp@^3.0.0": + "integrity" "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==" + "resolved" "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz" + "version" "3.0.0" + +"@npmcli/promise-spawn@^6.0.0", "@npmcli/promise-spawn@^6.0.1": + "integrity" "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==" + "resolved" "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "which" "^3.0.0" + +"@npmcli/run-script@^6.0.0": + "integrity" "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==" + "resolved" "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "@npmcli/node-gyp" "^3.0.0" + "@npmcli/promise-spawn" "^6.0.0" + "node-gyp" "^9.0.0" + "read-package-json-fast" "^3.0.0" + "which" "^3.0.0" + +"@pkgjs/parseargs@^0.11.0": + "integrity" "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==" + "resolved" "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + "version" "0.11.0" + +"@popperjs/core@^2.10.2": + "integrity" "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" + "resolved" "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" + "version" "2.11.8" + +"@schematics/angular@15.2.10": + "integrity" "sha512-eLdyP+T1TueNQ8FCP7sP+tt8z+YQ1BINsJsyAyoJT/XZjcCV7LUxgDIU94/kuvIotmJ2xTuFWHFPfAY+CN3duQ==" + "resolved" "https://registry.npmjs.org/@schematics/angular/-/angular-15.2.10.tgz" + "version" "15.2.10" + dependencies: + "@angular-devkit/core" "15.2.10" + "@angular-devkit/schematics" "15.2.10" + "jsonc-parser" "3.2.0" + +"@sigstore/bundle@^1.1.0": + "integrity" "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==" + "resolved" "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + +"@sigstore/protobuf-specs@^0.2.0": + "integrity" "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==" + "resolved" "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz" + "version" "0.2.1" + +"@sigstore/sign@^1.0.0": + "integrity" "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==" + "resolved" "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "make-fetch-happen" "^11.0.1" + +"@sigstore/tuf@^1.0.3": + "integrity" "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==" + "resolved" "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "@sigstore/protobuf-specs" "^0.2.0" + "tuf-js" "^1.1.7" + +"@tootallnate/once@2": + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" + +"@tufjs/canonical-json@1.0.0": + "integrity" "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==" + "resolved" "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz" + "version" "1.0.0" + +"@tufjs/models@1.0.4": + "integrity" "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==" + "resolved" "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "@tufjs/canonical-json" "1.0.0" + "minimatch" "^9.0.0" + +"@types/body-parser@*": + "integrity" "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==" + "resolved" "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" + "version" "1.19.5" + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + "integrity" "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==" + "resolved" "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" + "version" "3.5.13" + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + "integrity" "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==" + "resolved" "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz" + "version" "1.5.4" + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + "integrity" "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==" + "resolved" "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + "version" "3.4.38" + dependencies: + "@types/node" "*" + +"@types/echarts@^4.9.7": + "integrity" "sha512-+klqEur0+bh1UjR6EpGE023vxpqzPSk58X5JwVEIBu0NOYMaMPKeM/TMnbL43BlDUZv4xttZFdeDdOtFk/YwzQ==" + "resolved" "https://registry.npmjs.org/@types/echarts/-/echarts-4.9.7.tgz" + "version" "4.9.7" + dependencies: + "@types/zrender" "*" + +"@types/eslint-scope@^3.7.3": + "integrity" "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==" + "resolved" "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz" + "version" "3.7.7" + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + "integrity" "sha512-6yBxcvwnnYoYT1Uk2d+jvIfsuP4mb2EdIxFnrPABj5a/838qe5bGkNLFOiipX4ULQ7XVQvTxOh7jO+BTAiqsEw==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.9.tgz" + "version" "8.44.9" + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^0.0.51": + "integrity" "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz" + "version" "0.0.51" + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + "integrity" "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==" + "resolved" "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz" + "version" "4.17.41" + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.13": + "integrity" "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==" + "resolved" "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" + "version" "4.17.21" + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/http-errors@*": + "integrity" "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==" + "resolved" "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" + "version" "2.0.4" + +"@types/http-proxy@^1.17.8": + "integrity" "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==" + "resolved" "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz" + "version" "1.17.14" + dependencies: + "@types/node" "*" + +"@types/jasmine@*", "@types/jasmine@~3.6.0": + "integrity" "sha512-S6pvzQDvMZHrkBz2Mcn/8Du7cpr76PlRJBAoHnSDNbulULsH5dp0Gns+WRyNX5LHejz/ljxK4/vIHK/caHt6SQ==" + "resolved" "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.11.tgz" + "version" "3.6.11" + +"@types/jasminewd2@~2.0.8": + "integrity" "sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg==" + "resolved" "https://registry.npmjs.org/@types/jasminewd2/-/jasminewd2-2.0.8.tgz" + "version" "2.0.8" + dependencies: + "@types/jasmine" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + "integrity" "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + "version" "7.0.15" + +"@types/mime@*", "@types/mime@^1": + "integrity" "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==" + "resolved" "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + "version" "1.3.5" + +"@types/node-forge@^1.3.0": + "integrity" "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==" + "resolved" "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz" + "version" "1.3.10" + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^12.12.64": + "integrity" "sha512-o3oj1bETk8kBwzz1WlO6JWL/AfAA3Vm6J1B3C9CsdxHYp7XgPiH7OEXPUbZTndHlRaIElrANkQfe6ZmfJb3H2w==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-12.19.4.tgz" + "version" "12.19.4" + +"@types/parse-json@^4.0.0": + "integrity" "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==" + "resolved" "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz" + "version" "4.0.2" + +"@types/qs@*": + "integrity" "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==" + "resolved" "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz" + "version" "6.9.10" + +"@types/range-parser@*": + "integrity" "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" + "resolved" "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + "version" "1.2.7" + +"@types/retry@0.12.0": + "integrity" "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + "resolved" "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"@types/send@*": + "integrity" "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==" + "resolved" "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" + "version" "0.17.4" + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.1": + "integrity" "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==" + "resolved" "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz" + "version" "1.9.4" + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + "integrity" "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==" + "resolved" "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz" + "version" "1.15.5" + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + "integrity" "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==" + "resolved" "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz" + "version" "0.3.36" + dependencies: + "@types/node" "*" + +"@types/ws@^8.5.1": + "integrity" "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz" + "version" "8.5.10" + dependencies: + "@types/node" "*" + +"@types/zrender@*": + "integrity" "sha512-s89GOIeKFiod2KSqHkfd2rzx+T2DVu7ihZCBEBnhFrzvQPUmzvDSBot9Fi1DfMQm9Odg+rTqoMGC38RvrwJK2w==" + "resolved" "https://registry.npmjs.org/@types/zrender/-/zrender-4.0.0.tgz" + "version" "4.0.0" + +"@webassemblyjs/ast@1.11.1": + "integrity" "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + "integrity" "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-api-error@1.11.1": + "integrity" "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-buffer@1.11.1": + "integrity" "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-numbers@1.11.1": + "integrity" "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + "integrity" "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/helper-wasm-section@1.11.1": + "integrity" "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + "integrity" "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + "integrity" "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + "integrity" "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz" + "version" "1.11.1" + +"@webassemblyjs/wasm-edit@1.11.1": + "integrity" "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + "integrity" "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + "integrity" "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + "integrity" "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + "integrity" "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==" + "resolved" "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz" + "version" "1.11.1" + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + "integrity" "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + "resolved" "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + "version" "1.2.0" + +"@xtuc/long@4.2.2": + "integrity" "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + "version" "4.2.2" + +"@yarnpkg/lockfile@1.1.0": + "integrity" "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==" + "resolved" "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + "version" "1.1.0" + +"abab@^2.0.6": + "integrity" "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" + "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" + "version" "2.0.6" + +"abbrev@^1.0.0": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"accepts@~1.3.4", "accepts@~1.3.5", "accepts@~1.3.8": + "integrity" "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" + "version" "1.3.8" + dependencies: + "mime-types" "~2.1.34" + "negotiator" "0.6.3" + +"acorn-import-assertions@^1.7.6": + "integrity" "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==" + "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" + "version" "1.9.0" + +"acorn-node@^1.3.0": + "integrity" "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==" + "resolved" "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz" + "version" "1.8.2" + dependencies: + "acorn" "^7.0.0" + "acorn-walk" "^7.0.0" + "xtend" "^4.0.2" + +"acorn-walk@^7.0.0": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn@^7.0.0": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"acorn@^8", "acorn@^8.5.0", "acorn@^8.7.1", "acorn@^8.8.2": + "integrity" "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" + "version" "8.11.2" + +"adjust-sourcemap-loader@^4.0.0": + "integrity" "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==" + "resolved" "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "loader-utils" "^2.0.0" + "regex-parser" "^2.2.11" + +"adler-32@~1.2.0": + "integrity" "sha512-/vUqU/UY4MVeFsg+SsK6c+/05RZXIHZMGJA+PX5JyWI0ZRcBpupnRuPLU/NXXoFwMYCPCoxIfElM2eS+DUXCqQ==" + "resolved" "https://registry.npmjs.org/adler-32/-/adler-32-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "exit-on-epipe" "~1.0.1" + "printj" "~1.1.0" + +"adler-32@~1.3.0": + "integrity" "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + "resolved" "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz" + "version" "1.3.1" + +"agent-base@^6.0.2", "agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"agentkeepalive@^4.2.1": + "integrity" "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==" + "resolved" "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "humanize-ms" "^1.2.1" + +"aggregate-error@^3.0.0": + "integrity" "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==" + "resolved" "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "clean-stack" "^2.0.0" + "indent-string" "^4.0.0" + +"ajv-formats@^2.1.1", "ajv-formats@2.1.1": + "integrity" "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==" + "resolved" "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ajv" "^8.0.0" + +"ajv-keywords@^3.5.2": + "integrity" "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz" + "version" "3.5.2" + +"ajv-keywords@^5.1.0": + "integrity" "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==" + "resolved" "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "fast-deep-equal" "^3.1.3" + +"ajv@^6.12.5", "ajv@^6.9.1": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^8.0.0", "ajv@^8.8.2", "ajv@^8.9.0", "ajv@8.12.0": + "integrity" "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + "version" "8.12.0" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"amdefine@>=0.0.4": + "integrity" "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + "resolved" "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz" + "version" "1.0.1" + +"angular-dual-listbox@^6.0.0": + "integrity" "sha512-ymr3VeFfEegoMdyalwmxDxuHG1lpSdYAncmPWNUWQ0mOV9+9is7cSmz+lc/BJygWGfrSDzCnDRrr4GWvmVFb4Q==" + "resolved" "https://registry.npmjs.org/angular-dual-listbox/-/angular-dual-listbox-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "tslib" "^2.0.0" + +"ansi-colors@4.1.3": + "integrity" "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz" + "version" "4.1.3" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-html-community@^0.0.8": + "integrity" "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + "resolved" "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz" + "version" "0.0.8" + +"ansi-regex@^5.0.1": + "integrity" "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + "version" "5.0.1" + +"ansi-regex@^6.0.1": + "integrity" "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" + "version" "6.0.1" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"ansi-styles@^6.1.0": + "integrity" "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + "version" "6.2.1" + +"anymatch@~3.1.2": + "integrity" "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"apexcharts@3.26.2": + "integrity" "sha512-CD7bad4ygwc9rs9vOQDDagUcoJ1mcc9BwNSiQB14l6jiZBCQKrXxnG4I1ZjJ2MIel/Y5GmsJFs8HTcZBqpe/Ew==" + "resolved" "https://registry.npmjs.org/apexcharts/-/apexcharts-3.26.2.tgz" + "version" "3.26.2" + dependencies: + "svg.draggable.js" "^2.2.2" + "svg.easing.js" "^2.0.0" + "svg.filter.js" "^2.0.2" + "svg.pathmorphing.js" "^0.1.3" + "svg.resize.js" "^1.4.3" + "svg.select.js" "^3.0.1" + +"app-root-path@^3.0.0": + "integrity" "sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==" + "resolved" "https://registry.npmjs.org/app-root-path/-/app-root-path-3.0.0.tgz" + "version" "3.0.0" + +"aproba@^1.0.3 || ^2.0.0": + "integrity" "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" + "version" "2.0.0" + +"are-we-there-yet@^3.0.0": + "integrity" "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^3.6.0" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"aria-query@^3.0.0": + "integrity" "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=" + "resolved" "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ast-types-flow" "0.0.7" + "commander" "^2.11.0" + +"array-flatten@^2.1.2": + "integrity" "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz" + "version" "2.1.2" + +"array-flatten@1.1.1": + "integrity" "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "resolved" "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + "version" "1.1.1" + +"array-from@^2.1.1": + "integrity" "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg==" + "resolved" "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz" + "version" "2.1.1" + +"ast-transform@0.0.0": + "integrity" "sha512-e/JfLiSoakfmL4wmTGPjv0HpTICVmxwXgYOB8x+mzozHL8v+dSfCbrJ8J8hJ0YBP0XcYu1aLZ6b/3TnxNK3P2A==" + "resolved" "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz" + "version" "0.0.0" + dependencies: + "escodegen" "~1.2.0" + "esprima" "~1.0.4" + "through" "~2.3.4" + +"ast-types-flow@0.0.7": + "integrity" "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=" + "resolved" "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz" + "version" "0.0.7" + +"ast-types@^0.7.0": + "integrity" "sha512-RIOpVnVlltB6PcBJ5BMLx+H+6JJ/zjDGU0t7f0L6c2M1dqcK92VQopLBlPQ9R80AVXelfqYgjcPLtHtDbNFg0Q==" + "resolved" "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz" + "version" "0.7.8" + +"autoprefixer@10.4.13": + "integrity" "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==" + "resolved" "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz" + "version" "10.4.13" + dependencies: + "browserslist" "^4.21.4" + "caniuse-lite" "^1.0.30001426" + "fraction.js" "^4.2.0" + "normalize-range" "^0.1.2" + "picocolors" "^1.0.0" + "postcss-value-parser" "^4.2.0" + +"axobject-query@2.0.2": + "integrity" "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==" + "resolved" "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "ast-types-flow" "0.0.7" + +"babel-loader@9.1.2": + "integrity" "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==" + "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz" + "version" "9.1.2" + dependencies: + "find-cache-dir" "^3.3.2" + "schema-utils" "^4.0.0" + +"babel-plugin-istanbul@6.1.1": + "integrity" "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-instrument" "^5.0.4" + "test-exclude" "^6.0.0" + +"babel-plugin-polyfill-corejs2@^0.3.3": + "integrity" "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + "semver" "^6.1.1" + +"babel-plugin-polyfill-corejs3@^0.6.0": + "integrity" "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + "core-js-compat" "^3.25.1" + +"babel-plugin-polyfill-regenerator@^0.4.1": + "integrity" "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +"balanced-match@^1.0.0": + "integrity" "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz" + "version" "1.0.0" + +"base64-js@^1.1.2", "base64-js@^1.2.0", "base64-js@^1.3.0", "base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"base64-js@1.3.1": + "integrity" "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz" + "version" "1.3.1" + +"batch@0.6.1": + "integrity" "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + "resolved" "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" + "version" "0.6.1" + +"big.js@^5.2.2": + "integrity" "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + "resolved" "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + "version" "5.2.2" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"body-parser@1.20.1": + "integrity" "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==" + "resolved" "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + "version" "1.20.1" + dependencies: + "bytes" "3.1.2" + "content-type" "~1.0.4" + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "on-finished" "2.4.1" + "qs" "6.11.0" + "raw-body" "2.5.1" + "type-is" "~1.6.18" + "unpipe" "1.0.0" + +"bonjour-service@^1.0.11": + "integrity" "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==" + "resolved" "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "array-flatten" "^2.1.2" + "dns-equal" "^1.0.0" + "fast-deep-equal" "^3.1.3" + "multicast-dns" "^7.2.5" + +"boolbase@^1.0.0": + "integrity" "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "resolved" "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + "version" "1.0.0" + +"bootstrap-icons@^1.10.5": + "integrity" "sha512-oSX26F37V7QV7NCE53PPEL45d7EGXmBgHG3pDpZvcRaKVzWMqIRL9wcqJUyEha1esFtM3NJzvmxFXDxjJYD0jQ==" + "resolved" "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.10.5.tgz" + "version" "1.10.5" + +"bootstrap@^5.1.3": + "integrity" "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==" + "resolved" "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz" + "version" "5.1.3" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"brace-expansion@^2.0.1": + "integrity" "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "balanced-match" "^1.0.0" + +"braces@^3.0.2", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"brfs@^2.0.0", "brfs@^2.0.2": + "integrity" "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==" + "resolved" "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "quote-stream" "^1.0.1" + "resolve" "^1.1.5" + "static-module" "^3.0.2" + "through2" "^2.0.0" + +"brotli@^1.2.0": + "integrity" "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==" + "resolved" "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz" + "version" "1.3.3" + dependencies: + "base64-js" "^1.1.2" + +"browser-resolve@^1.8.1": + "integrity" "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==" + "resolved" "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz" + "version" "1.11.3" + dependencies: + "resolve" "1.1.7" + +"browserify-optional@^1.0.1": + "integrity" "sha512-VrhjbZ+Ba5mDiSYEuPelekQMfTbhcA2DhLk2VQWqdcCROWeFqlTcXZ7yfRkXCIl8E+g4gINJYJiRB7WEtfomAQ==" + "resolved" "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "ast-transform" "0.0.0" + "ast-types" "^0.7.0" + "browser-resolve" "^1.8.1" + +"browserslist@^4.14.5", "browserslist@^4.21.4", "browserslist@^4.22.2", "browserslist@>= 4.21.0": + "integrity" "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz" + "version" "4.22.2" + dependencies: + "caniuse-lite" "^1.0.30001565" + "electron-to-chromium" "^1.4.601" + "node-releases" "^2.0.14" + "update-browserslist-db" "^1.0.13" + +"browserslist@4.21.5": + "integrity" "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" + "version" "4.21.5" + dependencies: + "caniuse-lite" "^1.0.30001449" + "electron-to-chromium" "^1.4.284" + "node-releases" "^2.0.8" + "update-browserslist-db" "^1.0.10" + +"buffer-equal@0.0.1": + "integrity" "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + "resolved" "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz" + "version" "0.0.1" + +"buffer-from@^1.0.0": + "integrity" "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz" + "version" "1.1.1" + +"buffer@^5.5.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"builtin-modules@^1.1.1": + "integrity" "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + "resolved" "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz" + "version" "1.1.1" + +"builtins@^5.0.0": + "integrity" "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==" + "resolved" "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "semver" "^7.0.0" + +"bytes@3.0.0": + "integrity" "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz" + "version" "3.0.0" + +"bytes@3.1.2": + "integrity" "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + "resolved" "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + "version" "3.1.2" + +"cacache@^16.1.0": + "integrity" "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz" + "version" "16.1.3" + dependencies: + "@npmcli/fs" "^2.1.0" + "@npmcli/move-file" "^2.0.0" + "chownr" "^2.0.0" + "fs-minipass" "^2.1.0" + "glob" "^8.0.1" + "infer-owner" "^1.0.4" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "mkdirp" "^1.0.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "rimraf" "^3.0.2" + "ssri" "^9.0.0" + "tar" "^6.1.11" + "unique-filename" "^2.0.0" + +"cacache@^17.0.0", "cacache@17.0.4": + "integrity" "sha512-Z/nL3gU+zTUjz5pCA5vVjYM8pmaw2kxM7JEiE0fv3w77Wj+sFbi70CrBruUWH0uNcEdvLDixFpgA2JM4F4DBjA==" + "resolved" "https://registry.npmjs.org/cacache/-/cacache-17.0.4.tgz" + "version" "17.0.4" + dependencies: + "@npmcli/fs" "^3.1.0" + "fs-minipass" "^3.0.0" + "glob" "^8.0.1" + "lru-cache" "^7.7.1" + "minipass" "^4.0.0" + "minipass-collect" "^1.0.2" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "p-map" "^4.0.0" + "promise-inflight" "^1.0.1" + "ssri" "^10.0.0" + "tar" "^6.1.11" + "unique-filename" "^3.0.0" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^5.0.0", "camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"caniuse-lite@^1.0.30001426", "caniuse-lite@^1.0.30001449", "caniuse-lite@^1.0.30001565": + "integrity" "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz" + "version" "1.0.30001570" + +"cfb@^1.1.4": + "integrity" "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==" + "resolved" "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz" + "version" "1.2.2" + dependencies: + "adler-32" "~1.3.0" + "crc-32" "~1.2.0" + +"chalk@^2.3.0", "chalk@^2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.1": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chardet@^0.7.0": + "integrity" "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "resolved" "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + "version" "0.7.0" + +"chokidar@^3.0.0", "chokidar@^3.5.2", "chokidar@^3.5.3", "chokidar@>=3.0.0 <4.0.0", "chokidar@3.5.3": + "integrity" "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" + optionalDependencies: + "fsevents" "~2.3.2" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"chrome-trace-event@^1.0.2": + "integrity" "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + "resolved" "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz" + "version" "1.0.3" + +"clean-stack@^2.0.0": + "integrity" "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "resolved" "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" + "version" "2.2.0" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + "version" "2.9.2" + +"cli-width@^3.0.0": + "integrity" "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + "resolved" "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" + "version" "3.0.0" + +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + +"cliui@^8.0.1": + "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.1" + "wrap-ansi" "^7.0.0" + +"clone-deep@^4.0.1": + "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" + "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-plain-object" "^2.0.4" + "kind-of" "^6.0.2" + "shallow-clone" "^3.0.0" + +"clone@^1.0.2", "clone@^1.0.4": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"codelyzer@^6.0.0": + "integrity" "sha512-v3+E0Ucu2xWJMOJ2fA/q9pDT/hlxHftHGPUay1/1cTgyPV5JTHFdO9hqo837Sx2s9vKBMTt5gO+lhF95PO6J+g==" + "resolved" "https://registry.npmjs.org/codelyzer/-/codelyzer-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "@angular/compiler" "9.0.0" + "@angular/core" "9.0.0" + "app-root-path" "^3.0.0" + "aria-query" "^3.0.0" + "axobject-query" "2.0.2" + "css-selector-tokenizer" "^0.7.1" + "cssauron" "^1.4.0" + "damerau-levenshtein" "^1.0.4" + "rxjs" "^6.5.3" + "semver-dsl" "^1.0.1" + "source-map" "^0.5.7" + "sprintf-js" "^1.1.2" + "tslib" "^1.10.0" + "zone.js" "~0.10.3" + +"codepage@~1.14.0": + "integrity" "sha512-iz3zJLhlrg37/gYRWgEPkaFTtzmnEv1h+r7NgZum2lFElYQPi0/5bnmuDfODHxfp0INEfnRqyfyeIJDbb7ahRw==" + "resolved" "https://registry.npmjs.org/codepage/-/codepage-1.14.0.tgz" + "version" "1.14.0" + dependencies: + "commander" "~2.14.1" + "exit-on-epipe" "~1.0.1" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-support@^1.1.3": + "integrity" "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + "resolved" "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz" + "version" "1.1.3" + +"colorette@^2.0.10": + "integrity" "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + "version" "2.0.20" + +"commander@^2.11.0", "commander@^2.12.1", "commander@^2.20.0": + "integrity" "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" + "version" "2.20.3" + +"commander@~2.14.1": + "integrity" "sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.14.1.tgz" + "version" "2.14.1" + +"commander@~2.17.1": + "integrity" "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "resolved" "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz" + "version" "2.17.1" + +"commondir@^1.0.1": + "integrity" "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "resolved" "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz" + "version" "1.0.1" + +"compressible@~2.0.16": + "integrity" "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==" + "resolved" "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + "version" "2.0.18" + dependencies: + "mime-db" ">= 1.43.0 < 2" + +"compression@^1.7.4": + "integrity" "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==" + "resolved" "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + "version" "1.7.4" + dependencies: + "accepts" "~1.3.5" + "bytes" "3.0.0" + "compressible" "~2.0.16" + "debug" "2.6.9" + "on-headers" "~1.0.2" + "safe-buffer" "5.1.2" + "vary" "~1.1.2" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"concat-stream@~1.6.0": + "integrity" "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==" + "resolved" "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + "version" "1.6.2" + dependencies: + "buffer-from" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^2.2.2" + "typedarray" "^0.0.6" + +"connect-history-api-fallback@^2.0.0": + "integrity" "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" + "resolved" "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz" + "version" "2.0.0" + +"console-control-strings@^1.1.0": + "integrity" "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"content-disposition@0.5.4": + "integrity" "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + "version" "0.5.4" + dependencies: + "safe-buffer" "5.2.1" + +"content-type@~1.0.4": + "integrity" "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + "resolved" "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + "version" "1.0.5" + +"convert-source-map@^1.5.1", "convert-source-map@^1.7.0": + "integrity" "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz" + "version" "1.7.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie-signature@1.0.6": + "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + "version" "1.0.6" + +"cookie@0.5.0": + "integrity" "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + "version" "0.5.0" + +"copy-anything@^2.0.1": + "integrity" "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==" + "resolved" "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "is-what" "^3.14.1" + +"copy-webpack-plugin@11.0.0": + "integrity" "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==" + "resolved" "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz" + "version" "11.0.0" + dependencies: + "fast-glob" "^3.2.11" + "glob-parent" "^6.0.1" + "globby" "^13.1.1" + "normalize-path" "^3.0.0" + "schema-utils" "^4.0.0" + "serialize-javascript" "^6.0.0" + +"core-js-compat@^3.25.1": + "integrity" "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz" + "version" "3.34.0" + dependencies: + "browserslist" "^4.22.2" + +"core-util-is@~1.0.0": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"cosmiconfig@^7.0.0": + "integrity" "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==" + "resolved" "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "@types/parse-json" "^4.0.0" + "import-fresh" "^3.2.1" + "parse-json" "^5.0.0" + "path-type" "^4.0.0" + "yaml" "^1.10.0" + +"crc-32@~1.2.0": + "integrity" "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + "resolved" "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz" + "version" "1.2.2" + +"critters@0.0.16": + "integrity" "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==" + "resolved" "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz" + "version" "0.0.16" + dependencies: + "chalk" "^4.1.0" + "css-select" "^4.2.0" + "parse5" "^6.0.1" + "parse5-htmlparser2-tree-adapter" "^6.0.1" + "postcss" "^8.3.7" + "pretty-bytes" "^5.3.0" + +"cross-spawn@^7.0.0", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"crypto-js@^4.0.0", "crypto-js@^4.1.1": + "integrity" "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + "resolved" "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz" + "version" "4.1.1" + +"css-loader@6.7.3": + "integrity" "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==" + "resolved" "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz" + "version" "6.7.3" + dependencies: + "icss-utils" "^5.1.0" + "postcss" "^8.4.19" + "postcss-modules-extract-imports" "^3.0.0" + "postcss-modules-local-by-default" "^4.0.0" + "postcss-modules-scope" "^3.0.0" + "postcss-modules-values" "^4.0.0" + "postcss-value-parser" "^4.2.0" + "semver" "^7.3.8" + +"css-select@^4.2.0": + "integrity" "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==" + "resolved" "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "boolbase" "^1.0.0" + "css-what" "^6.0.1" + "domhandler" "^4.3.1" + "domutils" "^2.8.0" + "nth-check" "^2.0.1" + +"css-selector-tokenizer@^0.7.1": + "integrity" "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==" + "resolved" "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz" + "version" "0.7.3" + dependencies: + "cssesc" "^3.0.0" + "fastparse" "^1.1.2" + +"css-what@^6.0.1": + "integrity" "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + "resolved" "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + "version" "6.1.0" + +"cssauron@^1.4.0": + "integrity" "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=" + "resolved" "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "through" "X.X.X" + +"cssesc@^3.0.0": + "integrity" "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "resolved" "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + "version" "3.0.0" + +"d@^1.0.1", "d@1": + "integrity" "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==" + "resolved" "https://registry.npmjs.org/d/-/d-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "es5-ext" "^0.10.50" + "type" "^1.0.1" + +"damerau-levenshtein@^1.0.4": + "integrity" "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==" + "resolved" "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz" + "version" "1.0.7" + +"dash-ast@^2.0.1": + "integrity" "sha512-5TXltWJGc+RdnabUGzhRae1TRq6m4gr+3K2wQX0is5/F2yS6MJXJvLyI3ErAnsAXuJoGqvfVD5icRgim07DrxQ==" + "resolved" "https://registry.npmjs.org/dash-ast/-/dash-ast-2.0.1.tgz" + "version" "2.0.1" + +"debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@^4.3.3", "debug@^4.3.4", "debug@4": + "integrity" "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "ms" "2.1.2" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"deep-equal@^1.0.0": + "integrity" "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==" + "resolved" "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "is-arguments" "^1.0.4" + "is-date-object" "^1.0.1" + "is-regex" "^1.0.4" + "object-is" "^1.0.1" + "object-keys" "^1.1.1" + "regexp.prototype.flags" "^1.2.0" + +"deep-is@~0.1.3": + "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + "version" "0.1.4" + +"default-gateway@^6.0.3": + "integrity" "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==" + "resolved" "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz" + "version" "6.0.3" + dependencies: + "execa" "^5.0.0" + +"defaults@^1.0.3": + "integrity" "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "clone" "^1.0.2" + +"define-lazy-prop@^2.0.0": + "integrity" "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + "resolved" "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz" + "version" "2.0.0" + +"define-properties@^1.1.3": + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "object-keys" "^1.0.12" + +"delegates@^1.0.0": + "integrity" "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"depd@~1.1.2": + "integrity" "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"depd@2.0.0": + "integrity" "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + "resolved" "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + "version" "2.0.0" + +"dependency-graph@^0.11.0": + "integrity" "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" + "resolved" "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz" + "version" "0.11.0" + +"destroy@1.2.0": + "integrity" "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + "version" "1.2.0" + +"detect-node@^2.0.4": + "integrity" "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + "resolved" "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + "version" "2.1.0" + +"dfa@^1.2.0": + "integrity" "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + "resolved" "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz" + "version" "1.2.0" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"dijkstrajs@^1.0.1": + "integrity" "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + "resolved" "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz" + "version" "1.0.3" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"dns-equal@^1.0.0": + "integrity" "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + "resolved" "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz" + "version" "1.0.0" + +"dns-packet@^5.2.2": + "integrity" "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==" + "resolved" "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" + "version" "5.6.1" + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +"dom-serializer@^1.0.1": + "integrity" "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==" + "resolved" "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "domelementtype" "^2.0.1" + "domhandler" "^4.2.0" + "entities" "^2.0.0" + +"domelementtype@^2.0.1", "domelementtype@^2.2.0": + "integrity" "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "resolved" "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + "version" "2.3.0" + +"domhandler@^4.2.0", "domhandler@^4.3.1": + "integrity" "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==" + "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" + "version" "4.3.1" + dependencies: + "domelementtype" "^2.2.0" + +"domutils@^2.8.0": + "integrity" "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==" + "resolved" "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz" + "version" "2.8.0" + dependencies: + "dom-serializer" "^1.0.1" + "domelementtype" "^2.2.0" + "domhandler" "^4.2.0" + +"duplexer2@~0.1.4": + "integrity" "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==" + "resolved" "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "readable-stream" "^2.0.2" + +"eastasianwidth@^0.2.0": + "integrity" "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "resolved" "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + "version" "0.2.0" + +"echarts@5.1.1": + "integrity" "sha512-b3nP8M9XwZM2jISuA+fP0EuJv8lcfgWrinel185Npy8bE/UhXTDIPJcqgQOCWdvk0c5CeT6Dsm1xBjmJXAGlxQ==" + "resolved" "https://registry.npmjs.org/echarts/-/echarts-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "tslib" "2.0.3" + "zrender" "5.1.0" + +"ee-first@1.1.1": + "integrity" "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"electron-to-chromium@^1.4.284", "electron-to-chromium@^1.4.601": + "integrity" "sha512-X4ze/9Sc3QWs6h92yerwqv7aB/uU8vCjZcrMjA8N9R1pjMFRe44dLsck5FzLilOYvcXuDn93B+bpGYyufc70gQ==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.614.tgz" + "version" "1.4.614" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"emoji-regex@^9.2.2": + "integrity" "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + "version" "9.2.2" + +"emojis-list@^3.0.0": + "integrity" "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + "resolved" "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + "version" "3.0.0" + +"encode-utf8@^1.0.3": + "integrity" "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + "resolved" "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz" + "version" "1.0.3" + +"encodeurl@~1.0.2": + "integrity" "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding@^0.1.13": + "integrity" "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==" + "resolved" "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + "version" "0.1.13" + dependencies: + "iconv-lite" "^0.6.2" + +"enhanced-resolve@^5.10.0": + "integrity" "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==" + "resolved" "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz" + "version" "5.15.0" + dependencies: + "graceful-fs" "^4.2.4" + "tapable" "^2.2.0" + +"entities@^2.0.0": + "integrity" "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz" + "version" "2.2.0" + +"entities@^4.3.0", "entities@^4.4.0": + "integrity" "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + "resolved" "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + "version" "4.5.0" + +"env-paths@^2.2.0": + "integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + "resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + "version" "2.2.1" + +"err-code@^2.0.2": + "integrity" "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "resolved" "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz" + "version" "2.0.3" + +"errno@^0.1.1": + "integrity" "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==" + "resolved" "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + "version" "0.1.8" + dependencies: + "prr" "~1.0.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-module-lexer@^0.9.0": + "integrity" "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + "resolved" "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz" + "version" "0.9.3" + +"es5-ext@^0.10.35", "es5-ext@^0.10.50", "es5-ext@^0.10.62", "es5-ext@~0.10.14": + "integrity" "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==" + "resolved" "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz" + "version" "0.10.62" + dependencies: + "es6-iterator" "^2.0.3" + "es6-symbol" "^3.1.3" + "next-tick" "^1.1.0" + +"es6-iterator@^2.0.3", "es6-iterator@~2.0.1", "es6-iterator@~2.0.3": + "integrity" "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=" + "resolved" "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "d" "1" + "es5-ext" "^0.10.35" + "es6-symbol" "^3.1.1" + +"es6-map@^0.1.5": + "integrity" "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==" + "resolved" "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz" + "version" "0.1.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + "es6-iterator" "~2.0.1" + "es6-set" "~0.1.5" + "es6-symbol" "~3.1.1" + "event-emitter" "~0.3.5" + +"es6-set@^0.1.5", "es6-set@~0.1.5": + "integrity" "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==" + "resolved" "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "d" "^1.0.1" + "es5-ext" "^0.10.62" + "es6-iterator" "~2.0.3" + "es6-symbol" "^3.1.3" + "event-emitter" "^0.3.5" + "type" "^2.7.2" + +"es6-symbol@^3.1.1", "es6-symbol@^3.1.3", "es6-symbol@~3.1.1": + "integrity" "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==" + "resolved" "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "d" "^1.0.1" + "ext" "^1.1.2" + +"esbuild-wasm@0.17.8": + "integrity" "sha512-zCmpxv95E0FuCmvdw1K836UHnj4EdiQnFfjTby35y3LAjRPtXMj3sbHDRHjbD8Mqg5lTwq3knacr/1qIFU51CQ==" + "resolved" "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.8.tgz" + "version" "0.17.8" + +"esbuild@0.17.8": + "integrity" "sha512-g24ybC3fWhZddZK6R3uD2iF/RIPnRpwJAqLov6ouX3hMbY4+tKolP0VMF3zuIYCaXun+yHwS5IPQ91N2BT191g==" + "resolved" "https://registry.npmjs.org/esbuild/-/esbuild-0.17.8.tgz" + "version" "0.17.8" + optionalDependencies: + "@esbuild/android-arm" "0.17.8" + "@esbuild/android-arm64" "0.17.8" + "@esbuild/android-x64" "0.17.8" + "@esbuild/darwin-arm64" "0.17.8" + "@esbuild/darwin-x64" "0.17.8" + "@esbuild/freebsd-arm64" "0.17.8" + "@esbuild/freebsd-x64" "0.17.8" + "@esbuild/linux-arm" "0.17.8" + "@esbuild/linux-arm64" "0.17.8" + "@esbuild/linux-ia32" "0.17.8" + "@esbuild/linux-loong64" "0.17.8" + "@esbuild/linux-mips64el" "0.17.8" + "@esbuild/linux-ppc64" "0.17.8" + "@esbuild/linux-riscv64" "0.17.8" + "@esbuild/linux-s390x" "0.17.8" + "@esbuild/linux-x64" "0.17.8" + "@esbuild/netbsd-x64" "0.17.8" + "@esbuild/openbsd-x64" "0.17.8" + "@esbuild/sunos-x64" "0.17.8" + "@esbuild/win32-arm64" "0.17.8" + "@esbuild/win32-ia32" "0.17.8" + "@esbuild/win32-x64" "0.17.8" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-html@~1.0.3": + "integrity" "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escodegen@^1.11.1": + "integrity" "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz" + "version" "1.14.3" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^4.2.0" + "esutils" "^2.0.2" + "optionator" "^0.8.1" + optionalDependencies: + "source-map" "~0.6.1" + +"escodegen@~1.2.0": + "integrity" "sha512-yLy3Cc+zAC0WSmoT2fig3J87TpQ8UaZGx8ahCAs9FL8qNbyV7CVyPKS74DG4bsHiL5ew9sxdYx131OkBQMFnvA==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "esprima" "~1.0.4" + "estraverse" "~1.5.0" + "esutils" "~1.0.0" + optionalDependencies: + "source-map" "~0.1.30" + +"eslint-scope@5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" + +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esprima@~1.0.4": + "integrity" "sha512-rp5dMKN8zEs9dfi9g0X1ClLmV//WRyk/R15mppFNICIFRG5P92VP7Z04p8pk++gABo9W2tY+kHyu6P1mEHgmTA==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz" + "version" "1.0.4" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1", "estraverse@^4.2.0": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.2.0": + "integrity" "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + "version" "5.3.0" + +"estraverse@~1.5.0": + "integrity" "sha512-FpCjJDfmo3vsc/1zKSeqR5k42tcIhxFIlvq+h9j0fO2q/h2uLKyweq7rYJ+0CoVvrGQOxIS5wyBrW/+vF58BUQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz" + "version" "1.5.1" + +"estree-is-function@^1.0.0": + "integrity" "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + "resolved" "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz" + "version" "1.0.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"esutils@~1.0.0": + "integrity" "sha512-x/iYH53X3quDwfHRz4y8rn4XcEwwCJeWsul9pF1zldMbGtgOtMNBEOuYWwB1EQlK2LRa1fev3YAgym/RElp5Cg==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz" + "version" "1.0.0" + +"etag@~1.8.1": + "integrity" "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"event-emitter@^0.3.5", "event-emitter@~0.3.5": + "integrity" "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==" + "resolved" "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz" + "version" "0.3.5" + dependencies: + "d" "1" + "es5-ext" "~0.10.14" + +"eventemitter-asyncresource@^1.0.0": + "integrity" "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==" + "resolved" "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz" + "version" "1.0.0" + +"eventemitter3@^4.0.0": + "integrity" "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + "resolved" "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + "version" "4.0.7" + +"events@^3.2.0": + "integrity" "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + "resolved" "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + "version" "3.3.0" + +"execa@^5.0.0": + "integrity" "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==" + "resolved" "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "cross-spawn" "^7.0.3" + "get-stream" "^6.0.0" + "human-signals" "^2.1.0" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.1" + "onetime" "^5.1.2" + "signal-exit" "^3.0.3" + "strip-final-newline" "^2.0.0" + +"exit-on-epipe@~1.0.1": + "integrity" "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + "resolved" "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" + "version" "1.0.1" + +"exponential-backoff@^3.1.1": + "integrity" "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==" + "resolved" "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz" + "version" "3.1.1" + +"express@^4.17.3": + "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" + "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + "version" "4.18.2" + dependencies: + "accepts" "~1.3.8" + "array-flatten" "1.1.1" + "body-parser" "1.20.1" + "content-disposition" "0.5.4" + "content-type" "~1.0.4" + "cookie" "0.5.0" + "cookie-signature" "1.0.6" + "debug" "2.6.9" + "depd" "2.0.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "finalhandler" "1.2.0" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "merge-descriptors" "1.0.1" + "methods" "~1.1.2" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "path-to-regexp" "0.1.7" + "proxy-addr" "~2.0.7" + "qs" "6.11.0" + "range-parser" "~1.2.1" + "safe-buffer" "5.2.1" + "send" "0.18.0" + "serve-static" "1.15.0" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "type-is" "~1.6.18" + "utils-merge" "1.0.1" + "vary" "~1.1.2" + +"ext@^1.1.2": + "integrity" "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==" + "resolved" "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "type" "^2.0.0" + +"external-editor@^3.0.3": + "integrity" "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==" + "resolved" "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "chardet" "^0.7.0" + "iconv-lite" "^0.4.24" + "tmp" "^0.0.33" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-glob@^3.2.11", "fast-glob@^3.3.0": + "integrity" "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-levenshtein@~2.0.6": + "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fastparse@^1.1.2": + "integrity" "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==" + "resolved" "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz" + "version" "1.1.2" + +"fastq@^1.6.0": + "integrity" "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "reusify" "^1.0.4" + +"faye-websocket@^0.11.3": + "integrity" "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==" + "resolved" "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + "version" "0.11.4" + dependencies: + "websocket-driver" ">=0.5.1" + +"fflate@^0.3.8": + "integrity" "sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A==" + "resolved" "https://registry.npmjs.org/fflate/-/fflate-0.3.11.tgz" + "version" "0.3.11" + +"figures@^3.0.0": + "integrity" "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==" + "resolved" "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "escape-string-regexp" "^1.0.5" + +"file-saver@^2.0.5": + "integrity" "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + "resolved" "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz" + "version" "2.0.5" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"finalhandler@1.2.0": + "integrity" "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==" + "resolved" "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "debug" "2.6.9" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "on-finished" "2.4.1" + "parseurl" "~1.3.3" + "statuses" "2.0.1" + "unpipe" "~1.0.0" + +"find-cache-dir@^3.3.2": + "integrity" "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==" + "resolved" "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "commondir" "^1.0.1" + "make-dir" "^3.0.2" + "pkg-dir" "^4.1.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"follow-redirects@^1.0.0": + "integrity" "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" + "version" "1.15.3" + +"font-awesome@^4.7.0": + "integrity" "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + "resolved" "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz" + "version" "4.7.0" + +"foreground-child@^3.1.0": + "integrity" "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==" + "resolved" "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "cross-spawn" "^7.0.0" + "signal-exit" "^4.0.1" + +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" + +"frac@~1.1.2": + "integrity" "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + "resolved" "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz" + "version" "1.1.2" + +"fraction.js@^4.2.0": + "integrity" "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==" + "resolved" "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" + "version" "4.3.7" + +"fresh@0.5.2": + "integrity" "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-minipass@^2.1.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs-minipass@^3.0.0": + "integrity" "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "minipass" "^7.0.3" + +"fs-monkey@^1.0.4": + "integrity" "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==" + "resolved" "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz" + "version" "1.0.5" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.1.1", "function-bind@^1.1.2": + "integrity" "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + "version" "1.1.2" + +"gauge@^4.0.3": + "integrity" "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "aproba" "^1.0.3 || ^2.0.0" + "color-support" "^1.1.3" + "console-control-strings" "^1.1.0" + "has-unicode" "^2.0.1" + "signal-exit" "^3.0.7" + "string-width" "^4.2.3" + "strip-ansi" "^6.0.1" + "wide-align" "^1.1.5" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-assigned-identifiers@^1.1.0": + "integrity" "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + "resolved" "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz" + "version" "1.2.0" + +"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-intrinsic@^1.0.2": + "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.1" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stream@^6.0.0": + "integrity" "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" + "version" "6.0.1" + +"glob-parent@^5.1.2", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob-parent@^6.0.1": + "integrity" "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "is-glob" "^4.0.3" + +"glob-to-regexp@^0.4.1": + "integrity" "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "resolved" "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz" + "version" "0.4.1" + +"glob@^10.2.2": + "integrity" "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==" + "resolved" "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" + "version" "10.3.10" + 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" + +"glob@^7.1.1", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"glob@^8.0.1": + "integrity" "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"glob@8.1.0": + "integrity" "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^5.0.1" + "once" "^1.3.0" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globby@^13.1.1": + "integrity" "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==" + "resolved" "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz" + "version" "13.2.2" + dependencies: + "dir-glob" "^3.0.1" + "fast-glob" "^3.3.0" + "ignore" "^5.2.4" + "merge2" "^1.4.1" + "slash" "^4.0.0" + +"graceful-fs@^4.1.2", "graceful-fs@^4.2.4", "graceful-fs@^4.2.6", "graceful-fs@^4.2.9": + "integrity" "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" + "version" "4.2.11" + +"handle-thing@^2.0.0": + "integrity" "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + "resolved" "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + "version" "2.0.1" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2": + "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + "version" "1.0.2" + +"has-unicode@^2.0.1": + "integrity" "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has@^1.0.1", "has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hasown@^2.0.0": + "integrity" "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==" + "resolved" "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "function-bind" "^1.1.2" + +"hdr-histogram-js@^2.0.1": + "integrity" "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==" + "resolved" "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "@assemblyscript/loader" "^0.10.1" + "base64-js" "^1.2.0" + "pako" "^1.0.3" + +"hdr-histogram-percentiles-obj@^3.0.0": + "integrity" "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==" + "resolved" "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz" + "version" "3.0.0" + +"hosted-git-info@^6.0.0": + "integrity" "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "lru-cache" "^7.5.1" + +"hpack.js@^2.1.6": + "integrity" "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==" + "resolved" "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + "version" "2.1.6" + dependencies: + "inherits" "^2.0.1" + "obuf" "^1.0.0" + "readable-stream" "^2.0.1" + "wbuf" "^1.1.0" + +"html-entities@^2.3.2": + "integrity" "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==" + "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz" + "version" "2.4.0" + +"http-cache-semantics@^4.1.0", "http-cache-semantics@^4.1.1": + "integrity" "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + "version" "4.1.1" + +"http-deceiver@^1.2.7": + "integrity" "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + "resolved" "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + "version" "1.2.7" + +"http-errors@~1.6.2": + "integrity" "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + "version" "1.6.3" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.3" + "setprototypeof" "1.1.0" + "statuses" ">= 1.4.0 < 2" + +"http-errors@2.0.0": + "integrity" "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "depd" "2.0.0" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" "2.0.1" + "toidentifier" "1.0.1" + +"http-parser-js@>=0.5.1": + "integrity" "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + "resolved" "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + "version" "0.5.8" + +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@tootallnate/once" "2" + "agent-base" "6" + "debug" "4" + +"http-proxy-middleware@^2.0.3": + "integrity" "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==" + "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" + "version" "2.0.6" + dependencies: + "@types/http-proxy" "^1.17.8" + "http-proxy" "^1.18.1" + "is-glob" "^4.0.1" + "is-plain-obj" "^3.0.0" + "micromatch" "^4.0.2" + +"http-proxy@^1.18.1": + "integrity" "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==" + "resolved" "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + "version" "1.18.1" + dependencies: + "eventemitter3" "^4.0.0" + "follow-redirects" "^1.0.0" + "requires-port" "^1.0.0" + +"https-proxy-agent@^5.0.0", "https-proxy-agent@5.0.1": + "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^2.1.0": + "integrity" "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" + "version" "2.1.0" + +"humanize-ms@^1.2.1": + "integrity" "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==" + "resolved" "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "ms" "^2.0.0" + +"iconv-lite@^0.4.24", "iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"iconv-lite@^0.6.2": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"iconv-lite@^0.6.3": + "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + "version" "0.6.3" + dependencies: + "safer-buffer" ">= 2.1.2 < 3.0.0" + +"icss-utils@^5.0.0", "icss-utils@^5.1.0": + "integrity" "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==" + "resolved" "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + "version" "5.1.0" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore-walk@^6.0.0": + "integrity" "sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==" + "resolved" "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "minimatch" "^9.0.0" + +"ignore@^5.2.4": + "integrity" "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz" + "version" "5.3.0" + +"image-size@~0.5.0": + "integrity" "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==" + "resolved" "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz" + "version" "0.5.5" + +"immutable@^4.0.0": + "integrity" "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + "resolved" "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz" + "version" "4.3.4" + +"import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indent-string@^4.0.0": + "integrity" "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "resolved" "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" + "version" "4.0.0" + +"infer-owner@^1.0.4": + "integrity" "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "resolved" "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz" + "version" "1.0.4" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.1", "inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"inherits@2.0.3": + "integrity" "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + "version" "2.0.3" + +"ini@3.0.1": + "integrity" "sha512-it4HyVAUTKBc6m8e1iXWvXSTdndF7HbdN713+kvLrymxTaU4AUBWrJ4vEooP+V7fexnVD3LKcBshjGGPefSMUQ==" + "resolved" "https://registry.npmjs.org/ini/-/ini-3.0.1.tgz" + "version" "3.0.1" + +"inquirer@8.2.4": + "integrity" "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==" + "resolved" "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz" + "version" "8.2.4" + dependencies: + "ansi-escapes" "^4.2.1" + "chalk" "^4.1.1" + "cli-cursor" "^3.1.0" + "cli-width" "^3.0.0" + "external-editor" "^3.0.3" + "figures" "^3.0.0" + "lodash" "^4.17.21" + "mute-stream" "0.0.8" + "ora" "^5.4.1" + "run-async" "^2.4.0" + "rxjs" "^7.5.5" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + "through" "^2.3.6" + "wrap-ansi" "^7.0.0" + +"ip@^2.0.0": + "integrity" "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "resolved" "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz" + "version" "2.0.0" + +"ipaddr.js@^2.0.1": + "integrity" "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz" + "version" "2.1.0" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-arguments@^1.0.4": + "integrity" "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==" + "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz" + "version" "1.1.0" + dependencies: + "call-bind" "^1.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-core-module@^2.8.1", "is-core-module@^2.9.0": + "integrity" "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + "version" "2.13.1" + dependencies: + "hasown" "^2.0.0" + +"is-date-object@^1.0.1": + "integrity" "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz" + "version" "1.0.4" + +"is-docker@^2.0.0", "is-docker@^2.1.1": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" + +"is-extglob@^2.1.1": + "integrity" "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-glob@^4.0.1", "is-glob@^4.0.3", "is-glob@~4.0.1": + "integrity" "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "is-extglob" "^2.1.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-lambda@^1.0.1": + "integrity" "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "resolved" "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz" + "version" "1.0.1" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-plain-obj@^3.0.0": + "integrity" "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + "resolved" "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + "version" "3.0.0" + +"is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-regex@^1.0.4": + "integrity" "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "call-bind" "^1.0.2" + "has-symbols" "^1.0.2" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"is-what@^3.14.1": + "integrity" "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==" + "resolved" "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" + "version" "3.14.1" + +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"isarray@~1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isexe@^2.0.0": + "integrity" "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^3.0.1": + "integrity" "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"istanbul-lib-coverage@^3.2.0": + "integrity" "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + "version" "3.2.2" + +"istanbul-lib-instrument@^5.0.4": + "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + "version" "5.2.1" + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^6.3.0" + +"jackspeak@^2.3.5": + "integrity" "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==" + "resolved" "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +"jest-worker@^27.4.5": + "integrity" "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + "version" "27.5.1" + dependencies: + "@types/node" "*" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz" + "version" "3.14.0" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"jsesc@~0.5.0": + "integrity" "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" + +"json-parse-even-better-errors@^2.3.0", "json-parse-even-better-errors@^2.3.1": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-parse-even-better-errors@^3.0.0": + "integrity" "sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.1.tgz" + "version" "3.0.1" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json5@^2.1.2", "json5@^2.2.1", "json5@^2.2.2": + "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + "version" "2.2.3" + +"jsonc-parser@3.2.0": + "integrity" "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "resolved" "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz" + "version" "3.2.0" + +"jsonparse@^1.3.1": + "integrity" "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + "resolved" "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + "version" "1.3.1" + +"karma-source-map-support@1.4.0": + "integrity" "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==" + "resolved" "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "source-map-support" "^0.5.5" + +"kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"klona@^2.0.4", "klona@^2.0.5": + "integrity" "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==" + "resolved" "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz" + "version" "2.0.6" + +"less-loader@11.1.0": + "integrity" "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==" + "resolved" "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz" + "version" "11.1.0" + dependencies: + "klona" "^2.0.4" + +"less@^3.5.0 || ^4.0.0", "less@4.1.3": + "integrity" "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==" + "resolved" "https://registry.npmjs.org/less/-/less-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "copy-anything" "^2.0.1" + "parse-node-version" "^1.0.1" + "tslib" "^2.3.0" + 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" + +"levn@~0.3.0": + "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"license-webpack-plugin@4.0.2": + "integrity" "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==" + "resolved" "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "webpack-sources" "^3.0.0" + +"lines-and-columns@^1.1.6": + "integrity" "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + "version" "1.2.4" + +"loader-runner@^4.2.0": + "integrity" "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "resolved" "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + "version" "4.3.0" + +"loader-utils@^2.0.0": + "integrity" "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "big.js" "^5.2.2" + "emojis-list" "^3.0.0" + "json5" "^2.1.2" + +"loader-utils@3.2.1": + "integrity" "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + "resolved" "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz" + "version" "3.2.1" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash@^4.17.21": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"lru-cache@^5.1.1": + "integrity" "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + "version" "5.1.1" + dependencies: + "yallist" "^3.0.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"lru-cache@^7.4.4": + "integrity" "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + "version" "7.18.3" + +"lru-cache@^7.5.1": + "integrity" "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + "version" "7.18.3" + +"lru-cache@^7.7.1": + "integrity" "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz" + "version" "7.18.3" + +"lru-cache@^9.1.1 || ^10.0.0": + "integrity" "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz" + "version" "10.1.0" + +"magic-string@^0.27.0": + "integrity" "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==" + "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz" + "version" "0.27.0" + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +"magic-string@0.25.1": + "integrity" "sha512-sCuTz6pYom8Rlt4ISPFn6wuFodbKMIHUMv4Qko9P17dpxb7s52KJTmRuZZqHdGmLCK9AOcDare039nRIcfdkEg==" + "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.25.1.tgz" + "version" "0.25.1" + dependencies: + "sourcemap-codec" "^1.4.1" + +"magic-string@0.29.0": + "integrity" "sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==" + "resolved" "https://registry.npmjs.org/magic-string/-/magic-string-0.29.0.tgz" + "version" "0.29.0" + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +"make-dir@^2.1.0": + "integrity" "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "pify" "^4.0.1" + "semver" "^5.6.0" + +"make-dir@^3.0.2": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"make-fetch-happen@^10.0.3": + "integrity" "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz" + "version" "10.2.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^16.1.0" + "http-cache-semantics" "^4.1.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^3.1.6" + "minipass-collect" "^1.0.2" + "minipass-fetch" "^2.0.3" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^9.0.0" + +"make-fetch-happen@^11.0.0": + "integrity" "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" + "version" "11.1.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^17.0.0" + "http-cache-semantics" "^4.1.1" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^5.0.0" + "minipass-fetch" "^3.0.0" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^10.0.0" + +"make-fetch-happen@^11.0.1": + "integrity" "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" + "version" "11.1.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^17.0.0" + "http-cache-semantics" "^4.1.1" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^5.0.0" + "minipass-fetch" "^3.0.0" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^10.0.0" + +"make-fetch-happen@^11.1.1": + "integrity" "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==" + "resolved" "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz" + "version" "11.1.1" + dependencies: + "agentkeepalive" "^4.2.1" + "cacache" "^17.0.0" + "http-cache-semantics" "^4.1.1" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.0" + "is-lambda" "^1.0.1" + "lru-cache" "^7.7.1" + "minipass" "^5.0.0" + "minipass-fetch" "^3.0.0" + "minipass-flush" "^1.0.5" + "minipass-pipeline" "^1.2.4" + "negotiator" "^0.6.3" + "promise-retry" "^2.0.1" + "socks-proxy-agent" "^7.0.0" + "ssri" "^10.0.0" + +"media-typer@0.3.0": + "integrity" "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"memfs@^3.4.12", "memfs@^3.4.3": + "integrity" "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==" + "resolved" "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz" + "version" "3.5.3" + dependencies: + "fs-monkey" "^1.0.4" + +"merge-descriptors@1.0.1": + "integrity" "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "resolved" "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + "version" "1.0.1" + +"merge-source-map@1.0.4": + "integrity" "sha512-PGSmS0kfnTnMJCzJ16BLLCEe6oeYCamKFFdQKshi4BmM6FUwipjVOcBFGxqtQtirtAG4iZvHlqST9CpZKqlRjA==" + "resolved" "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "source-map" "^0.5.6" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0", "merge2@^1.4.1": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"methods@~1.1.2": + "integrity" "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^4.0.2", "micromatch@^4.0.4": + "integrity" "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "braces" "^3.0.2" + "picomatch" "^2.3.1" + +"mime-db@>= 1.43.0 < 2", "mime-db@1.52.0": + "integrity" "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + "version" "1.52.0" + +"mime-types@^2.1.27", "mime-types@^2.1.31", "mime-types@~2.1.17", "mime-types@~2.1.24", "mime-types@~2.1.34": + "integrity" "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + "version" "2.1.35" + dependencies: + "mime-db" "1.52.0" + +"mime@^1.4.1", "mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mini-css-extract-plugin@2.7.2": + "integrity" "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==" + "resolved" "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz" + "version" "2.7.2" + dependencies: + "schema-utils" "^4.0.0" + +"minimalistic-assert@^1.0.0": + "integrity" "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "resolved" "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + "version" "1.0.1" + +"minimatch@^3.0.4": + "integrity" "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz" + "version" "3.0.5" + dependencies: + "brace-expansion" "^1.1.7" + +"minimatch@^5.0.1": + "integrity" "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz" + "version" "5.1.6" + dependencies: + "brace-expansion" "^2.0.1" + +"minimatch@^9.0.0": + "integrity" "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + "version" "9.0.3" + dependencies: + "brace-expansion" "^2.0.1" + +"minimatch@^9.0.1": + "integrity" "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" + "version" "9.0.3" + dependencies: + "brace-expansion" "^2.0.1" + +"minimist@^1.1.3", "minimist@^1.2.6": + "integrity" "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + "version" "1.2.8" + +"minipass-collect@^1.0.2": + "integrity" "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==" + "resolved" "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "minipass" "^3.0.0" + +"minipass-fetch@^2.0.3": + "integrity" "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.1.6" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" + optionalDependencies: + "encoding" "^0.1.13" + +"minipass-fetch@^3.0.0": + "integrity" "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==" + "resolved" "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "minipass" "^7.0.3" + "minipass-sized" "^1.0.3" + "minizlib" "^2.1.2" + optionalDependencies: + "encoding" "^0.1.13" + +"minipass-flush@^1.0.5": + "integrity" "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==" + "resolved" "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "minipass" "^3.0.0" + +"minipass-json-stream@^1.0.1": + "integrity" "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==" + "resolved" "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "jsonparse" "^1.3.1" + "minipass" "^3.0.0" + +"minipass-pipeline@^1.2.4": + "integrity" "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==" + "resolved" "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + "version" "1.2.4" + dependencies: + "minipass" "^3.0.0" + +"minipass-sized@^1.0.3": + "integrity" "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==" + "resolved" "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "minipass" "^3.0.0" + +"minipass@^3.0.0", "minipass@^3.1.1", "minipass@^3.1.6": + "integrity" "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + "version" "3.3.6" + dependencies: + "yallist" "^4.0.0" + +"minipass@^4.0.0": + "integrity" "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz" + "version" "4.2.8" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": + "integrity" "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" + "version" "7.0.4" + +"minipass@^5.0.0": + "integrity" "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + "version" "5.0.0" + +"minipass@^7.0.3": + "integrity" "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" + "version" "7.0.4" + +"minizlib@^2.1.1", "minizlib@^2.1.2": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mkdirp@^0.5.3": + "integrity" "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + "version" "0.5.6" + dependencies: + "minimist" "^1.2.6" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"moment@^2.18.1", "moment@^2.29.1": + "integrity" "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz" + "version" "2.29.4" + +"ms@^2.0.0", "ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"ms@2.0.0": + "integrity" "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"multicast-dns@^7.2.5": + "integrity" "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==" + "resolved" "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + "version" "7.2.5" + dependencies: + "dns-packet" "^5.2.2" + "thunky" "^1.0.2" + +"mute-stream@0.0.8": + "integrity" "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + "resolved" "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz" + "version" "0.0.8" + +"nanoid@^3.3.6": + "integrity" "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + "resolved" "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz" + "version" "3.3.7" + +"needle@^3.1.0": + "integrity" "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==" + "resolved" "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz" + "version" "3.3.1" + dependencies: + "iconv-lite" "^0.6.3" + "sax" "^1.2.4" + +"negotiator@^0.6.3", "negotiator@0.6.3": + "integrity" "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + "version" "0.6.3" + +"neo-async@^2.6.2": + "integrity" "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + "version" "2.6.2" + +"next-tick@^1.1.0": + "integrity" "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + "resolved" "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz" + "version" "1.1.0" + +"ng-apexcharts@1.5.9": + "integrity" "sha512-ZRsU9meBvXNPG1vhEolCJGRrhfR7Nnj37E6H5CHfWpUEAw9/89U5TK+yDD+myPhT0ubQbRb6fZJoG74dEebXYA==" + "resolved" "https://registry.npmjs.org/ng-apexcharts/-/ng-apexcharts-1.5.9.tgz" + "version" "1.5.9" + dependencies: + "tslib" "^1.10.0" + +"ng-otp-input@^1.8.1": + "integrity" "sha512-mWl2Jhp3UCkEHsjaNzQHib3PnsMA/kVg+mpntW2KlyP6QKLQ8+PHbINKeyT5E944HeYyxEQzrHOVcmijzDOhGw==" + "resolved" "https://registry.npmjs.org/ng-otp-input/-/ng-otp-input-1.8.1.tgz" + "version" "1.8.1" + dependencies: + "tslib" "^2.2.0" + +"ng2-material-dropdown@>=1.0.0": + "integrity" "sha512-waKgEkKQwGZT0dqRAd3ZW+wueYs5Xw9owiPBSMdg5jru5DcKDpUqFaADMqqI7HPuzJCxNJSln6nXX1tMYDbXGA==" + "resolved" "https://registry.npmjs.org/ng2-material-dropdown/-/ng2-material-dropdown-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "tslib" "^2.0.0" + +"ngx-bootstrap@^7.0.0": + "integrity" "sha512-ei9H3qpSg9OsN24eWFoDMI/sadYI6gH8WY1Tl2ZrYgwgAdBjf3sfF5MDQdzbugRmQ50GzwctH1FpzSpei9HvpQ==" + "resolved" "https://registry.npmjs.org/ngx-bootstrap/-/ngx-bootstrap-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "tslib" "^2.0.0" + +"ngx-chips@^3.0.0": + "integrity" "sha512-hBJg4m9kCtCfersQef7vr2Ve6j9ntFSoB5ktF8MyOQnpONAriIp46c3Tb2wdf/lMEB2Xmc45snfJKnxKh3zimg==" + "resolved" "https://registry.npmjs.org/ngx-chips/-/ngx-chips-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ng2-material-dropdown" ">=1.0.0" + "tslib" "^2.3.0" + +"ngx-echarts@6.0.1": + "integrity" "sha512-a9MZ8cHC7oD+c6Tl0ABAEM2inD+k4FHhuu7RnH6/34c10TJ7AFeQwrFbP6BgW39M9gViWozAjCRFmrvWOYv2Wg==" + "resolved" "https://registry.npmjs.org/ngx-echarts/-/ngx-echarts-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "tslib" "^2.0.0" + +"ngx-toastr@13.2.1": + "integrity" "sha512-UAzp7/xWK9IXA2LsOmhpaaIGCqscvJokoQpBNpAMrjEkDeSlFf8PWQAuQY795KW0mJb3qF9UG/s23nsXfMYKmg==" + "resolved" "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-13.2.1.tgz" + "version" "13.2.1" + dependencies: + "tslib" "^2.0.0" + +"ngx-trend@6.1.1": + "integrity" "sha512-bIhjwXwAm75snJKCyBvlKEWQ4UReZrx34qrj+YOrHW+LQNEEu8VAcvCP0OA97xDZXoeKhSklewldiMqOooc76g==" + "resolved" "https://registry.npmjs.org/ngx-trend/-/ngx-trend-6.1.1.tgz" + "version" "6.1.1" + dependencies: + "tslib" "^2.0.0" + +"node-forge@^1": + "integrity" "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "resolved" "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + "version" "1.3.1" + +"node-gyp@^9.0.0": + "integrity" "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==" + "resolved" "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz" + "version" "9.4.1" + dependencies: + "env-paths" "^2.2.0" + "exponential-backoff" "^3.1.1" + "glob" "^7.1.4" + "graceful-fs" "^4.2.6" + "make-fetch-happen" "^10.0.3" + "nopt" "^6.0.0" + "npmlog" "^6.0.0" + "rimraf" "^3.0.2" + "semver" "^7.3.5" + "tar" "^6.1.2" + "which" "^2.0.2" + +"node-releases@^2.0.14", "node-releases@^2.0.8": + "integrity" "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz" + "version" "2.0.14" + +"nopt@^6.0.0": + "integrity" "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "abbrev" "^1.0.0" + +"normalize-package-data@^5.0.0": + "integrity" "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "hosted-git-info" "^6.0.0" + "is-core-module" "^2.8.1" + "semver" "^7.3.5" + "validate-npm-package-license" "^3.0.4" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-range@^0.1.2": + "integrity" "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "resolved" "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + "version" "0.1.2" + +"npm-bundled@^3.0.0": + "integrity" "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==" + "resolved" "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "npm-normalize-package-bin" "^3.0.0" + +"npm-install-checks@^6.0.0": + "integrity" "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==" + "resolved" "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz" + "version" "6.3.0" + dependencies: + "semver" "^7.1.1" + +"npm-normalize-package-bin@^3.0.0": + "integrity" "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==" + "resolved" "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz" + "version" "3.0.1" + +"npm-package-arg@^10.0.0", "npm-package-arg@10.1.0": + "integrity" "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==" + "resolved" "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz" + "version" "10.1.0" + dependencies: + "hosted-git-info" "^6.0.0" + "proc-log" "^3.0.0" + "semver" "^7.3.5" + "validate-npm-package-name" "^5.0.0" + +"npm-packlist@^7.0.0": + "integrity" "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==" + "resolved" "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "ignore-walk" "^6.0.0" + +"npm-pick-manifest@^8.0.0", "npm-pick-manifest@8.0.1": + "integrity" "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==" + "resolved" "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "npm-install-checks" "^6.0.0" + "npm-normalize-package-bin" "^3.0.0" + "npm-package-arg" "^10.0.0" + "semver" "^7.3.5" + +"npm-registry-fetch@^14.0.0": + "integrity" "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==" + "resolved" "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz" + "version" "14.0.5" + dependencies: + "make-fetch-happen" "^11.0.0" + "minipass" "^5.0.0" + "minipass-fetch" "^3.0.0" + "minipass-json-stream" "^1.0.1" + "minizlib" "^2.1.2" + "npm-package-arg" "^10.0.0" + "proc-log" "^3.0.0" + +"npm-run-path@^4.0.1": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^6.0.0": + "integrity" "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "are-we-there-yet" "^3.0.0" + "console-control-strings" "^1.1.0" + "gauge" "^4.0.3" + "set-blocking" "^2.0.0" + +"nth-check@^2.0.1": + "integrity" "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==" + "resolved" "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "boolbase" "^1.0.0" + +"object-inspect@^1.6.0", "object-inspect@^1.9.0": + "integrity" "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" + "version" "1.12.2" + +"object-is@^1.0.1": + "integrity" "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==" + "resolved" "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"object-keys@^1.0.12", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"obuf@^1.0.0", "obuf@^1.1.2": + "integrity" "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + "resolved" "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + "version" "1.1.2" + +"on-finished@2.4.1": + "integrity" "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "ee-first" "1.1.1" + +"on-headers@~1.0.2": + "integrity" "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "resolved" "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + "version" "1.0.2" + +"once@^1.3.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0", "onetime@^5.1.2": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"open@^8.0.9", "open@8.4.1": + "integrity" "sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==" + "resolved" "https://registry.npmjs.org/open/-/open-8.4.1.tgz" + "version" "8.4.1" + dependencies: + "define-lazy-prop" "^2.0.0" + "is-docker" "^2.1.1" + "is-wsl" "^2.2.0" + +"optionator@^0.8.1": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" + +"ora@^5.4.1", "ora@5.4.1": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"os-tmpdir@~1.0.2": + "integrity" "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "resolved" "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + "version" "1.0.2" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-map@^4.0.0": + "integrity" "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==" + "resolved" "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "aggregate-error" "^3.0.0" + +"p-retry@^4.5.0": + "integrity" "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==" + "resolved" "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz" + "version" "4.6.2" + dependencies: + "@types/retry" "0.12.0" + "retry" "^0.13.1" + +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"pacote@15.1.0": + "integrity" "sha512-FFcjtIl+BQNfeliSm7MZz5cpdohvUV1yjGnqgVM4UnVF7JslRY0ImXAygdaCDV0jjUADEWu4y5xsDV8brtrTLg==" + "resolved" "https://registry.npmjs.org/pacote/-/pacote-15.1.0.tgz" + "version" "15.1.0" + dependencies: + "@npmcli/git" "^4.0.0" + "@npmcli/installed-package-contents" "^2.0.1" + "@npmcli/promise-spawn" "^6.0.1" + "@npmcli/run-script" "^6.0.0" + "cacache" "^17.0.0" + "fs-minipass" "^3.0.0" + "minipass" "^4.0.0" + "npm-package-arg" "^10.0.0" + "npm-packlist" "^7.0.0" + "npm-pick-manifest" "^8.0.0" + "npm-registry-fetch" "^14.0.0" + "proc-log" "^3.0.0" + "promise-retry" "^2.0.1" + "read-package-json" "^6.0.0" + "read-package-json-fast" "^3.0.0" + "sigstore" "^1.0.0" + "ssri" "^10.0.0" + "tar" "^6.1.11" + +"pako@^0.2.5": + "integrity" "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + "resolved" "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" + "version" "0.2.9" + +"pako@^1.0.3": + "integrity" "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "resolved" "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + "version" "1.0.11" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-json@^5.0.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "@babel/code-frame" "^7.0.0" + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse-node-version@^1.0.1": + "integrity" "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==" + "resolved" "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + "version" "1.0.1" + +"parse5-html-rewriting-stream@7.0.0": + "integrity" "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==" + "resolved" "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "entities" "^4.3.0" + "parse5" "^7.0.0" + "parse5-sax-parser" "^7.0.0" + +"parse5-htmlparser2-tree-adapter@^6.0.1": + "integrity" "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==" + "resolved" "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "parse5" "^6.0.1" + +"parse5-sax-parser@^7.0.0": + "integrity" "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==" + "resolved" "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "parse5" "^7.0.0" + +"parse5@^5.0.0": + "integrity" "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz" + "version" "5.1.1" + +"parse5@^6.0.1": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" + +"parse5@^7.0.0": + "integrity" "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "entities" "^4.4.0" + +"parseurl@~1.3.2", "parseurl@~1.3.3": + "integrity" "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "resolved" "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + "version" "1.3.3" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.7": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-scurry@^1.10.1": + "integrity" "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==" + "resolved" "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" + "version" "1.10.1" + dependencies: + "lru-cache" "^9.1.1 || ^10.0.0" + "minipass" "^5.0.0 || ^6.0.2 || ^7.0.0" + +"path-to-regexp@0.1.7": + "integrity" "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "resolved" "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + "version" "0.1.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pdfmake@^0.2.5": + "integrity" "sha512-NlayjehMtuZEdw2Lyipf/MxOCR2vATZQ7jn8cH0/dHwsNb+mqof9/6SW4jZT5p+So4qz+0mD21KG81+dDQSEhA==" + "resolved" "https://registry.npmjs.org/pdfmake/-/pdfmake-0.2.5.tgz" + "version" "0.2.5" + dependencies: + "@foliojs-fork/linebreak" "^1.1.1" + "@foliojs-fork/pdfkit" "^0.13.0" + "iconv-lite" "^0.6.3" + "xmldoc" "^1.1.2" + +"picocolors@^1.0.0": + "integrity" "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "resolved" "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + "version" "1.0.0" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.3.1": + "integrity" "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + "version" "2.3.1" + +"pify@^4.0.1": + "integrity" "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + "resolved" "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + "version" "4.0.1" + +"piscina@3.2.0": + "integrity" "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==" + "resolved" "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "eventemitter-asyncresource" "^1.0.0" + "hdr-histogram-js" "^2.0.1" + "hdr-histogram-percentiles-obj" "^3.0.0" + optionalDependencies: + "nice-napi" "^1.0.2" + +"pkg-dir@^4.1.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"png-js@^1.0.0": + "integrity" "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + "resolved" "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz" + "version" "1.0.0" + +"pngjs@^5.0.0": + "integrity" "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + "resolved" "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz" + "version" "5.0.0" + +"postcss-loader@7.0.2": + "integrity" "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==" + "resolved" "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz" + "version" "7.0.2" + dependencies: + "cosmiconfig" "^7.0.0" + "klona" "^2.0.5" + "semver" "^7.3.8" + +"postcss-modules-extract-imports@^3.0.0": + "integrity" "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==" + "resolved" "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz" + "version" "3.0.0" + +"postcss-modules-local-by-default@^4.0.0": + "integrity" "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==" + "resolved" "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "icss-utils" "^5.0.0" + "postcss-selector-parser" "^6.0.2" + "postcss-value-parser" "^4.1.0" + +"postcss-modules-scope@^3.0.0": + "integrity" "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==" + "resolved" "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "postcss-selector-parser" "^6.0.4" + +"postcss-modules-values@^4.0.0": + "integrity" "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==" + "resolved" "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "icss-utils" "^5.0.0" + +"postcss-selector-parser@^6.0.2", "postcss-selector-parser@^6.0.4": + "integrity" "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==" + "resolved" "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz" + "version" "6.0.13" + dependencies: + "cssesc" "^3.0.0" + "util-deprecate" "^1.0.2" + +"postcss-value-parser@^4.1.0", "postcss-value-parser@^4.2.0": + "integrity" "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + "resolved" "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + "version" "4.2.0" + +"postcss@^7.0.0 || ^8.0.1", "postcss@^8.1.0", "postcss@^8.2.14", "postcss@^8.3.7", "postcss@^8.4.19", "postcss@8.4.31": + "integrity" "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==" + "resolved" "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz" + "version" "8.4.31" + dependencies: + "nanoid" "^3.3.6" + "picocolors" "^1.0.0" + "source-map-js" "^1.0.2" + +"prelude-ls@~1.1.2": + "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"pretty-bytes@^5.3.0": + "integrity" "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" + "resolved" "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" + "version" "5.6.0" + +"printj@~1.1.0": + "integrity" "sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==" + "resolved" "https://registry.npmjs.org/printj/-/printj-1.1.2.tgz" + "version" "1.1.2" + +"proc-log@^3.0.0": + "integrity" "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==" + "resolved" "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz" + "version" "3.0.0" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"promise-inflight@^1.0.1": + "integrity" "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "resolved" "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz" + "version" "1.0.1" + +"promise-retry@^2.0.1": + "integrity" "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==" + "resolved" "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "err-code" "^2.0.2" + "retry" "^0.12.0" + +"proxy-addr@~2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" + +"prr@~1.0.1": + "integrity" "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + "resolved" "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + "version" "1.0.1" + +"punycode@^2.1.0": + "integrity" "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + "version" "2.3.1" + +"qrcode@^1.5.3": + "integrity" "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==" + "resolved" "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz" + "version" "1.5.3" + dependencies: + "dijkstrajs" "^1.0.1" + "encode-utf8" "^1.0.3" + "pngjs" "^5.0.0" + "yargs" "^15.3.1" + +"qs@6.11.0": + "integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz" + "version" "6.11.0" + dependencies: + "side-channel" "^1.0.4" + +"queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"quote-stream@^1.0.1": + "integrity" "sha512-kKr2uQ2AokadPjvTyKJQad9xELbZwYzWlNfI3Uz2j/ib5u6H9lDP7fUUR//rMycd0gv4Z5P1qXMfXR8YpIxrjQ==" + "resolved" "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "buffer-equal" "0.0.1" + "minimist" "^1.1.3" + "through2" "^2.0.0" + +"randombytes@^2.1.0": + "integrity" "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==" + "resolved" "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "safe-buffer" "^5.1.0" + +"range-parser@^1.2.1", "range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"raw-body@2.5.1": + "integrity" "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==" + "resolved" "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "bytes" "3.1.2" + "http-errors" "2.0.0" + "iconv-lite" "0.4.24" + "unpipe" "1.0.0" + +"read-package-json-fast@^3.0.0": + "integrity" "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==" + "resolved" "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "json-parse-even-better-errors" "^3.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"read-package-json@^6.0.0": + "integrity" "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==" + "resolved" "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz" + "version" "6.0.4" + dependencies: + "glob" "^10.2.2" + "json-parse-even-better-errors" "^3.0.0" + "normalize-package-data" "^5.0.0" + "npm-normalize-package-bin" "^3.0.0" + +"readable-stream@^2.0.1": + "integrity" "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + "version" "2.3.8" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.0.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.2.2": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.6", "readable-stream@^3.4.0", "readable-stream@^3.6.0": + "integrity" "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + "version" "3.6.2" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@~2.3.3": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@~2.3.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"reflect-metadata@^0.1.2": + "integrity" "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz" + "version" "0.1.14" + +"regenerate-unicode-properties@^10.1.0": + "integrity" "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz" + "version" "10.1.1" + dependencies: + "regenerate" "^1.4.2" + +"regenerate@^1.4.2": + "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + "version" "1.4.2" + +"regenerator-runtime@^0.13.11": + "integrity" "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" + "version" "0.13.11" + +"regenerator-transform@^0.15.2": + "integrity" "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + "version" "0.15.2" + dependencies: + "@babel/runtime" "^7.8.4" + +"regex-parser@^2.2.11": + "integrity" "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==" + "resolved" "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz" + "version" "2.2.11" + +"regexp.prototype.flags@^1.2.0": + "integrity" "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==" + "resolved" "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"regexpu-core@^5.3.1": + "integrity" "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz" + "version" "5.3.2" + dependencies: + "@babel/regjsgen" "^0.8.0" + "regenerate" "^1.4.2" + "regenerate-unicode-properties" "^10.1.0" + "regjsparser" "^0.9.1" + "unicode-match-property-ecmascript" "^2.0.0" + "unicode-match-property-value-ecmascript" "^2.1.0" + +"regjsparser@^0.9.1": + "integrity" "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "jsesc" "~0.5.0" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"requires-port@^1.0.0": + "integrity" "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resize-observer-polyfill@^1.5.1": + "integrity" "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + "resolved" "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz" + "version" "1.5.1" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve-url-loader@5.0.0": + "integrity" "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==" + "resolved" "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "adjust-sourcemap-loader" "^4.0.0" + "convert-source-map" "^1.7.0" + "loader-utils" "^2.0.0" + "postcss" "^8.2.14" + "source-map" "0.6.1" + +"resolve@^1.1.5", "resolve@^1.14.2", "resolve@^1.3.2", "resolve@1.22.1": + "integrity" "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" + "version" "1.22.1" + dependencies: + "is-core-module" "^2.9.0" + "path-parse" "^1.0.7" + "supports-preserve-symlinks-flag" "^1.0.0" + +"resolve@1.1.7": + "integrity" "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz" + "version" "1.1.7" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"retry@^0.12.0": + "integrity" "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + "version" "0.12.0" + +"retry@^0.13.1": + "integrity" "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "resolved" "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + "version" "0.13.1" + +"reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"run-async@^2.4.0": + "integrity" "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + "resolved" "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz" + "version" "2.4.1" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^6.5.3 || ^7.4.0", "rxjs@^7.5.5", "rxjs@>=6.5.3", "rxjs@7.8.1": + "integrity" "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz" + "version" "7.8.1" + dependencies: + "tslib" "^2.1.0" + +"rxjs@^6.5.3": + "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + "version" "6.6.7" + dependencies: + "tslib" "^1.9.0" + +"rxjs@6.6.7": + "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + "version" "6.6.7" + dependencies: + "tslib" "^1.9.0" + +"safe-buffer@^5.1.0", "safe-buffer@>=5.1.0", "safe-buffer@~5.1.0", "safe-buffer@~5.1.1", "safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@~5.2.0": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safe-buffer@5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" + +"sass-loader@13.2.0": + "integrity" "sha512-JWEp48djQA4nbZxmgC02/Wh0eroSUutulROUusYJO9P9zltRbNN80JCBHqRGzjd4cmZCa/r88xgfkjGD0TXsHg==" + "resolved" "https://registry.npmjs.org/sass-loader/-/sass-loader-13.2.0.tgz" + "version" "13.2.0" + dependencies: + "klona" "^2.0.4" + "neo-async" "^2.6.2" + +"sass@^1.3.0", "sass@1.58.1": + "integrity" "sha512-bnINi6nPXbP1XNRaranMFEBZWUfdW/AF16Ql5+ypRxfTvCRTTKrLsMIakyDcayUt2t/RZotmL4kgJwNH5xO+bg==" + "resolved" "https://registry.npmjs.org/sass/-/sass-1.58.1.tgz" + "version" "1.58.1" + dependencies: + "chokidar" ">=3.0.0 <4.0.0" + "immutable" "^4.0.0" + "source-map-js" ">=0.6.2 <2.0.0" + +"sax@^1.2.4": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" + +"schema-utils@^3.1.0": + "integrity" "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^3.1.1": + "integrity" "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "@types/json-schema" "^7.0.8" + "ajv" "^6.12.5" + "ajv-keywords" "^3.5.2" + +"schema-utils@^4.0.0": + "integrity" "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==" + "resolved" "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "@types/json-schema" "^7.0.9" + "ajv" "^8.9.0" + "ajv-formats" "^2.1.1" + "ajv-keywords" "^5.1.0" + +"scope-analyzer@^2.0.1": + "integrity" "sha512-5cfCmsTYV/wPaRIItNxatw02ua/MThdIUNnUOCYp+3LSEJvnG804ANw2VLaavNILIfWXF1D1G2KNANkBBvInwQ==" + "resolved" "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "array-from" "^2.1.1" + "dash-ast" "^2.0.1" + "es6-map" "^0.1.5" + "es6-set" "^0.1.5" + "es6-symbol" "^3.1.1" + "estree-is-function" "^1.0.0" + "get-assigned-identifiers" "^1.1.0" + +"select-hose@^2.0.0": + "integrity" "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + "resolved" "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + "version" "2.0.0" + +"selfsigned@^2.1.1": + "integrity" "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==" + "resolved" "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "@types/node-forge" "^1.3.0" + "node-forge" "^1" + +"semver-dsl@^1.0.1": + "integrity" "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=" + "resolved" "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "semver" "^5.3.0" + +"semver@^5.3.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.6.0": + "integrity" "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + "version" "5.7.2" + +"semver@^6.0.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.1.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.1.2": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.0": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^6.3.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" + +"semver@^7.0.0", "semver@^7.1.1", "semver@^7.3.5", "semver@^7.3.8": + "integrity" "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + "version" "7.5.4" + dependencies: + "lru-cache" "^6.0.0" + +"semver@7.5.3": + "integrity" "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz" + "version" "7.5.3" + dependencies: + "lru-cache" "^6.0.0" + +"send@0.18.0": + "integrity" "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.18.0.tgz" + "version" "0.18.0" + dependencies: + "debug" "2.6.9" + "depd" "2.0.0" + "destroy" "1.2.0" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "2.0.0" + "mime" "1.6.0" + "ms" "2.1.3" + "on-finished" "2.4.1" + "range-parser" "~1.2.1" + "statuses" "2.0.1" + +"serialize-javascript@^6.0.0", "serialize-javascript@^6.0.1": + "integrity" "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==" + "resolved" "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "randombytes" "^2.1.0" + +"serve-index@^1.9.1": + "integrity" "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==" + "resolved" "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + "version" "1.9.1" + dependencies: + "accepts" "~1.3.4" + "batch" "0.6.1" + "debug" "2.6.9" + "escape-html" "~1.0.3" + "http-errors" "~1.6.2" + "mime-types" "~2.1.17" + "parseurl" "~1.3.2" + +"serve-static@1.15.0": + "integrity" "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==" + "resolved" "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" + "version" "1.15.0" + dependencies: + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "parseurl" "~1.3.3" + "send" "0.18.0" + +"set-blocking@^2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"setprototypeof@1.1.0": + "integrity" "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + "version" "1.1.0" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"shallow-clone@^3.0.0": + "integrity" "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==" + "resolved" "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^6.0.2" + +"shallow-copy@~0.0.1": + "integrity" "sha512-b6i4ZpVuUxB9h5gfCxPiusKYkqTMOjEbBs4wMaFbkfia4yFv92UKZ6Df8WXcKbn08JNL/abvg3FnMAOfakDvUw==" + "resolved" "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz" + "version" "0.0.1" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.2", "signal-exit@^3.0.3", "signal-exit@^3.0.7": + "integrity" "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + "version" "3.0.7" + +"signal-exit@^4.0.1": + "integrity" "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + "version" "4.1.0" + +"sigstore@^1.0.0": + "integrity" "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==" + "resolved" "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz" + "version" "1.9.0" + dependencies: + "@sigstore/bundle" "^1.1.0" + "@sigstore/protobuf-specs" "^0.2.0" + "@sigstore/sign" "^1.0.0" + "@sigstore/tuf" "^1.0.3" + "make-fetch-happen" "^11.0.1" + +"slash@^4.0.0": + "integrity" "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "resolved" "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" + "version" "4.0.0" + +"smart-buffer@^4.2.0": + "integrity" "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + "resolved" "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + "version" "4.2.0" + +"sockjs@^0.3.24": + "integrity" "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==" + "resolved" "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + "version" "0.3.24" + dependencies: + "faye-websocket" "^0.11.3" + "uuid" "^8.3.2" + "websocket-driver" "^0.7.4" + +"socks-proxy-agent@^7.0.0": + "integrity" "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==" + "resolved" "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "agent-base" "^6.0.2" + "debug" "^4.3.3" + "socks" "^2.6.2" + +"socks@^2.6.2": + "integrity" "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==" + "resolved" "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "ip" "^2.0.0" + "smart-buffer" "^4.2.0" + +"source-map-js@^1.0.2", "source-map-js@>=0.6.2 <2.0.0": + "integrity" "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "resolved" "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" + "version" "1.0.2" + +"source-map-loader@4.0.1": + "integrity" "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==" + "resolved" "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "abab" "^2.0.6" + "iconv-lite" "^0.6.3" + "source-map-js" "^1.0.2" + +"source-map-support@^0.5.5", "source-map-support@^0.5.6", "source-map-support@~0.5.20", "source-map-support@0.5.21": + "integrity" "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + "version" "0.5.21" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map@^0.5.6": + "integrity" "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.5.7": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@~0.1.30": + "integrity" "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz" + "version" "0.1.43" + dependencies: + "amdefine" ">=0.0.4" + +"source-map@~0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@0.7.4": + "integrity" "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + "version" "0.7.4" + +"sourcemap-codec@^1.4.1": + "integrity" "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + "resolved" "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz" + "version" "1.4.8" + +"spdx-correct@^3.0.0": + "integrity" "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + "version" "3.2.0" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz" + "version" "3.0.16" + +"spdy-transport@^3.0.0": + "integrity" "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==" + "resolved" "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "debug" "^4.1.0" + "detect-node" "^2.0.4" + "hpack.js" "^2.1.6" + "obuf" "^1.1.2" + "readable-stream" "^3.0.6" + "wbuf" "^1.7.3" + +"spdy@^4.0.2": + "integrity" "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==" + "resolved" "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "debug" "^4.1.0" + "handle-thing" "^2.0.0" + "http-deceiver" "^1.2.7" + "select-hose" "^2.0.0" + "spdy-transport" "^3.0.0" + +"sprintf-js@^1.1.2": + "integrity" "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz" + "version" "1.1.2" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"ssf@~0.11.2": + "integrity" "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==" + "resolved" "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz" + "version" "0.11.2" + dependencies: + "frac" "~1.1.2" + +"ssri@^10.0.0": + "integrity" "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz" + "version" "10.0.5" + dependencies: + "minipass" "^7.0.3" + +"ssri@^9.0.0": + "integrity" "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==" + "resolved" "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz" + "version" "9.0.1" + dependencies: + "minipass" "^3.1.1" + +"static-eval@^2.0.5": + "integrity" "sha512-agtxZ/kWSsCkI5E4QifRwsaPs0P0JmZV6dkLz6ILYfFYQGn+5plctanRN+IC8dJRiFkyXHrwEE3W9Wmx67uDbw==" + "resolved" "https://registry.npmjs.org/static-eval/-/static-eval-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "escodegen" "^1.11.1" + +"static-module@^3.0.2": + "integrity" "sha512-gb0v0rrgpBkifXCa3yZXxqVmXDVE+ETXj6YlC/jt5VzOnGXR2C15+++eXuMDUYsePnbhf+lwW0pE1UXyOLtGCw==" + "resolved" "https://registry.npmjs.org/static-module/-/static-module-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "acorn-node" "^1.3.0" + "concat-stream" "~1.6.0" + "convert-source-map" "^1.5.1" + "duplexer2" "~0.1.4" + "escodegen" "^1.11.1" + "has" "^1.0.1" + "magic-string" "0.25.1" + "merge-source-map" "1.0.4" + "object-inspect" "^1.6.0" + "readable-stream" "~2.3.3" + "scope-analyzer" "^2.0.1" + "shallow-copy" "~0.0.1" + "static-eval" "^2.0.5" + "through2" "~2.0.3" + +"statuses@>= 1.4.0 < 2": + "integrity" "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"statuses@2.0.1": + "integrity" "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + "version" "2.0.1" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-width-cjs@npm:string-width@^4.2.0": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", "string-width@^4.1.0", "string-width@^4.2.0", "string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + +"string-width@^5.0.1", "string-width@^5.1.2": + "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "eastasianwidth" "^0.2.0" + "emoji-regex" "^9.2.2" + "strip-ansi" "^7.0.1" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^6.0.0", "strip-ansi@^6.0.1": + "integrity" "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "ansi-regex" "^5.0.1" + +"strip-ansi@^7.0.1": + "integrity" "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + "version" "7.1.0" + dependencies: + "ansi-regex" "^6.0.1" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"supports-color@^5.3.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^8.0.0": + "integrity" "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + "version" "8.1.1" + dependencies: + "has-flag" "^4.0.0" + +"supports-preserve-symlinks-flag@^1.0.0": + "integrity" "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "resolved" "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" + "version" "1.0.0" + +"svg.draggable.js@^2.2.2": + "integrity" "sha512-JzNHBc2fLQMzYCZ90KZHN2ohXL0BQJGQimK1kGk6AvSeibuKcIdDX9Kr0dT9+UJ5O8nYA0RB839Lhvk4CY4MZw==" + "resolved" "https://registry.npmjs.org/svg.draggable.js/-/svg.draggable.js-2.2.2.tgz" + "version" "2.2.2" + dependencies: + "svg.js" "^2.0.1" + +"svg.easing.js@^2.0.0": + "integrity" "sha1-iqmUawqOJ4V6XEChDrpAkeVpHxI=" + "resolved" "https://registry.npmjs.org/svg.easing.js/-/svg.easing.js-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "svg.js" ">=2.3.x" + +"svg.filter.js@^2.0.2": + "integrity" "sha1-kQCOFROJ3ZIwd5/L5uLJo2LRwgM=" + "resolved" "https://registry.npmjs.org/svg.filter.js/-/svg.filter.js-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "svg.js" "^2.2.5" + +"svg.js@^2.0.1", "svg.js@^2.2.5", "svg.js@^2.4.0", "svg.js@^2.6.5", "svg.js@>=2.3.x": + "integrity" "sha512-ycbxpizEQktk3FYvn/8BH+6/EuWXg7ZpQREJvgacqn46gIddG24tNNe4Son6omdXCnSOaApnpZw6MPCBA1dODA==" + "resolved" "https://registry.npmjs.org/svg.js/-/svg.js-2.7.1.tgz" + "version" "2.7.1" + +"svg.pathmorphing.js@^0.1.3": + "integrity" "sha512-49HWI9X4XQR/JG1qXkSDV8xViuTLIWm/B/7YuQELV5KMOPtXjiwH4XPJvr/ghEDibmLQ9Oc22dpWpG0vUDDNww==" + "resolved" "https://registry.npmjs.org/svg.pathmorphing.js/-/svg.pathmorphing.js-0.1.3.tgz" + "version" "0.1.3" + dependencies: + "svg.js" "^2.4.0" + +"svg.resize.js@^1.4.3": + "integrity" "sha512-9k5sXJuPKp+mVzXNvxz7U0uC9oVMQrrf7cFsETznzUDDm0x8+77dtZkWdMfRlmbkEEYvUn9btKuZ3n41oNA+uw==" + "resolved" "https://registry.npmjs.org/svg.resize.js/-/svg.resize.js-1.4.3.tgz" + "version" "1.4.3" + dependencies: + "svg.js" "^2.6.5" + "svg.select.js" "^2.1.2" + +"svg.select.js@^2.1.2": + "integrity" "sha512-tH6ABEyJsAOVAhwcCjF8mw4crjXSI1aa7j2VQR8ZuJ37H2MBUbyeqYr5nEO7sSN3cy9AR9DUwNg0t/962HlDbQ==" + "resolved" "https://registry.npmjs.org/svg.select.js/-/svg.select.js-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "svg.js" "^2.2.5" + +"svg.select.js@^3.0.1": + "integrity" "sha512-h5IS/hKkuVCbKSieR9uQCj9w+zLHoPh+ce19bBYyqF53g6mnPB8sAtIbe1s9dh2S2fCmYX2xel1Ln3PJBbK4kw==" + "resolved" "https://registry.npmjs.org/svg.select.js/-/svg.select.js-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "svg.js" "^2.6.5" + +"sweetalert2@^11.7.16": + "integrity" "sha512-vxqVcA358RWdK/XOG1gFtOzT7qBH186Ry4gnW0Xtrx7vIo1mpnR8hG8MxQms4gz3JPbYQ6UIgZn0+hTK7in3Jw==" + "resolved" "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.16.tgz" + "version" "11.7.16" + +"symbol-observable@4.0.0": + "integrity" "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==" + "resolved" "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + "version" "4.0.0" + +"tapable@^2.1.1", "tapable@^2.2.0": + "integrity" "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" + "resolved" "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + "version" "2.2.1" + +"tar@^6.1.11", "tar@^6.1.2": + "integrity" "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^5.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"terser-webpack-plugin@^5.1.3": + "integrity" "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==" + "resolved" "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz" + "version" "5.3.9" + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + "jest-worker" "^27.4.5" + "schema-utils" "^3.1.1" + "serialize-javascript" "^6.0.1" + "terser" "^5.16.8" + +"terser@^5.16.8": + "integrity" "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz" + "version" "5.26.0" + dependencies: + "@jridgewell/source-map" "^0.3.3" + "acorn" "^8.8.2" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" + +"terser@5.16.3": + "integrity" "sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==" + "resolved" "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz" + "version" "5.16.3" + dependencies: + "@jridgewell/source-map" "^0.3.2" + "acorn" "^8.5.0" + "commander" "^2.20.0" + "source-map-support" "~0.5.20" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "@istanbuljs/schema" "^0.1.2" + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-table@0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"through@^2.3.6", "through@~2.3.4", "through@X.X.X": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^2.0.0", "through2@~2.0.3": + "integrity" "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" + "version" "2.0.5" + dependencies: + "readable-stream" "~2.3.6" + "xtend" "~4.0.1" + +"thunky@^1.0.2": + "integrity" "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + "resolved" "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + "version" "1.1.0" + +"tiny-inflate@^1.0.0", "tiny-inflate@^1.0.2": + "integrity" "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + "resolved" "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz" + "version" "1.0.3" + +"tmp@^0.0.33": + "integrity" "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==" + "resolved" "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + "version" "0.0.33" + dependencies: + "os-tmpdir" "~1.0.2" + +"to-fast-properties@^2.0.0": + "integrity" "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-words@^3.2.0": + "integrity" "sha512-ikoKM8VQ1/uK5P74Nl6WcdKFTmYRVGlpcxm7BXWqG1+MwdtSJ285iir2P4rVrljTZbRmzIYytRcNv/37Pqb5kg==" + "resolved" "https://registry.npmjs.org/to-words/-/to-words-3.2.0.tgz" + "version" "3.2.0" + +"toidentifier@1.0.1": + "integrity" "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + "version" "1.0.1" + +"tree-kill@1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + +"ts-node@~8.3.0": + "integrity" "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz" + "version" "8.3.0" + dependencies: + "arg" "^4.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "source-map-support" "^0.5.6" + "yn" "^3.0.0" + +"tslib@^1.10.0", "tslib@^1.9.0": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^1.13.0": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^1.8.1": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tslib@^2.0.0", "tslib@^2.1.0", "tslib@^2.2.0", "tslib@^2.3.0", "tslib@2.5.0": + "integrity" "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" + "version" "2.5.0" + +"tslib@2.0.3": + "integrity" "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz" + "version" "2.0.3" + +"tslint@~6.1.0": + "integrity" "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==" + "resolved" "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz" + "version" "6.1.3" + dependencies: + "@babel/code-frame" "^7.0.0" + "builtin-modules" "^1.1.1" + "chalk" "^2.3.0" + "commander" "^2.12.1" + "diff" "^4.0.1" + "glob" "^7.1.1" + "js-yaml" "^3.13.1" + "minimatch" "^3.0.4" + "mkdirp" "^0.5.3" + "resolve" "^1.3.2" + "semver" "^5.3.0" + "tslib" "^1.13.0" + "tsutils" "^2.29.0" + +"tsutils@^2.29.0": + "integrity" "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz" + "version" "2.29.0" + dependencies: + "tslib" "^1.8.1" + +"tuf-js@^1.1.7": + "integrity" "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==" + "resolved" "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "@tufjs/models" "1.0.4" + "debug" "^4.3.4" + "make-fetch-happen" "^11.1.1" + +"type-check@~0.3.2": + "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type-is@~1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"type@^1.0.1": + "integrity" "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==" + "resolved" "https://registry.npmjs.org/type/-/type-1.2.0.tgz" + "version" "1.2.0" + +"type@^2.0.0": + "integrity" "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==" + "resolved" "https://registry.npmjs.org/type/-/type-2.5.0.tgz" + "version" "2.5.0" + +"type@^2.7.2": + "integrity" "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==" + "resolved" "https://registry.npmjs.org/type/-/type-2.7.2.tgz" + "version" "2.7.2" + +"typed-assert@^1.0.8": + "integrity" "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==" + "resolved" "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz" + "version" "1.0.9" + +"typedarray@^0.0.6": + "integrity" "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "resolved" "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + "version" "0.0.6" + +"typescript@>=4.8.2 <5.0", "typescript@4.9.5": + "integrity" "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + "version" "4.9.5" + +"unicode-canonical-property-names-ecmascript@^2.0.0": + "integrity" "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + "version" "2.0.0" + +"unicode-match-property-ecmascript@^2.0.0": + "integrity" "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "unicode-canonical-property-names-ecmascript" "^2.0.0" + "unicode-property-aliases-ecmascript" "^2.0.0" + +"unicode-match-property-value-ecmascript@^2.1.0": + "integrity" "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + "version" "2.1.0" + +"unicode-properties@^1.2.2": + "integrity" "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==" + "resolved" "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "base64-js" "^1.3.0" + "unicode-trie" "^2.0.0" + +"unicode-property-aliases-ecmascript@^2.0.0": + "integrity" "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + "version" "2.1.0" + +"unicode-trie@^2.0.0": + "integrity" "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==" + "resolved" "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "pako" "^0.2.5" + "tiny-inflate" "^1.0.0" + +"unique-filename@^2.0.0": + "integrity" "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "unique-slug" "^3.0.0" + +"unique-filename@^3.0.0": + "integrity" "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==" + "resolved" "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "unique-slug" "^4.0.0" + +"unique-slug@^3.0.0": + "integrity" "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"unique-slug@^4.0.0": + "integrity" "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==" + "resolved" "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "imurmurhash" "^0.1.4" + +"unpipe@~1.0.0", "unpipe@1.0.0": + "integrity" "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "resolved" "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + "version" "1.0.0" + +"update-browserslist-db@^1.0.10", "update-browserslist-db@^1.0.13": + "integrity" "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + "version" "1.0.13" + dependencies: + "escalade" "^3.1.1" + "picocolors" "^1.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"utils-merge@1.0.1": + "integrity" "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "resolved" "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + "version" "1.0.1" + +"uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"validate-npm-package-license@^3.0.4": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" + +"validate-npm-package-name@^5.0.0": + "integrity" "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==" + "resolved" "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "builtins" "^5.0.0" + +"vary@~1.1.2": + "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" + +"watchpack@^2.4.0": + "integrity" "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==" + "resolved" "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.1.2" + +"wbuf@^1.1.0", "wbuf@^1.7.3": + "integrity" "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==" + "resolved" "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + "version" "1.7.3" + dependencies: + "minimalistic-assert" "^1.0.0" + +"wcwidth@^1.0.1": + "integrity" "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "defaults" "^1.0.3" + +"webpack-dev-middleware@^5.3.1": + "integrity" "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==" + "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz" + "version" "5.3.3" + dependencies: + "colorette" "^2.0.10" + "memfs" "^3.4.3" + "mime-types" "^2.1.31" + "range-parser" "^1.2.1" + "schema-utils" "^4.0.0" + +"webpack-dev-middleware@6.0.1": + "integrity" "sha512-PZPZ6jFinmqVPJZbisfggDiC+2EeGZ1ZByyMP5sOFJcPPWSexalISz+cvm+j+oYPT7FIJyxT76esjnw9DhE5sw==" + "resolved" "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "colorette" "^2.0.10" + "memfs" "^3.4.12" + "mime-types" "^2.1.31" + "range-parser" "^1.2.1" + "schema-utils" "^4.0.0" + +"webpack-dev-server@^4.0.0", "webpack-dev-server@4.11.1": + "integrity" "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==" + "resolved" "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz" + "version" "4.11.1" + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + "ansi-html-community" "^0.0.8" + "bonjour-service" "^1.0.11" + "chokidar" "^3.5.3" + "colorette" "^2.0.10" + "compression" "^1.7.4" + "connect-history-api-fallback" "^2.0.0" + "default-gateway" "^6.0.3" + "express" "^4.17.3" + "graceful-fs" "^4.2.6" + "html-entities" "^2.3.2" + "http-proxy-middleware" "^2.0.3" + "ipaddr.js" "^2.0.1" + "open" "^8.0.9" + "p-retry" "^4.5.0" + "rimraf" "^3.0.2" + "schema-utils" "^4.0.0" + "selfsigned" "^2.1.1" + "serve-index" "^1.9.1" + "sockjs" "^0.3.24" + "spdy" "^4.0.2" + "webpack-dev-middleware" "^5.3.1" + "ws" "^8.4.2" + +"webpack-merge@5.8.0": + "integrity" "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==" + "resolved" "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz" + "version" "5.8.0" + dependencies: + "clone-deep" "^4.0.1" + "wildcard" "^2.0.0" + +"webpack-sources@^3.0.0", "webpack-sources@^3.2.3": + "integrity" "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "resolved" "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz" + "version" "3.2.3" + +"webpack-subresource-integrity@5.1.0": + "integrity" "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==" + "resolved" "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "typed-assert" "^1.0.8" + +"webpack@^4.0.0 || ^5.0.0", "webpack@^4.37.0 || ^5.0.0", "webpack@^5.0.0", "webpack@^5.1.0", "webpack@^5.12.0", "webpack@^5.30.0", "webpack@^5.54.0", "webpack@^5.72.1", "webpack@>=5", "webpack@5.76.1": + "integrity" "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==" + "resolved" "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz" + "version" "5.76.1" + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "acorn" "^8.7.1" + "acorn-import-assertions" "^1.7.6" + "browserslist" "^4.14.5" + "chrome-trace-event" "^1.0.2" + "enhanced-resolve" "^5.10.0" + "es-module-lexer" "^0.9.0" + "eslint-scope" "5.1.1" + "events" "^3.2.0" + "glob-to-regexp" "^0.4.1" + "graceful-fs" "^4.2.9" + "json-parse-even-better-errors" "^2.3.1" + "loader-runner" "^4.2.0" + "mime-types" "^2.1.27" + "neo-async" "^2.6.2" + "schema-utils" "^3.1.0" + "tapable" "^2.1.1" + "terser-webpack-plugin" "^5.1.3" + "watchpack" "^2.4.0" + "webpack-sources" "^3.2.3" + +"websocket-driver@^0.7.4", "websocket-driver@>=0.5.1": + "integrity" "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==" + "resolved" "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + "version" "0.7.4" + dependencies: + "http-parser-js" ">=0.5.1" + "safe-buffer" ">=5.1.0" + "websocket-extensions" ">=0.1.1" + +"websocket-extensions@>=0.1.1": + "integrity" "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "resolved" "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + "version" "0.1.4" + +"which-module@^2.0.0": + "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which@^2.0.1": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"which@^3.0.0": + "integrity" "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==" + "resolved" "https://registry.npmjs.org/which/-/which-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.5": + "integrity" "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "string-width" "^1.0.2 || 2 || 3 || 4" + +"wildcard@^2.0.0": + "integrity" "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" + "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" + "version" "2.0.1" + +"wmf@~1.0.1": + "integrity" "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + "resolved" "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz" + "version" "1.0.2" + +"word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"word@~0.3.0": + "integrity" "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + "resolved" "https://registry.npmjs.org/word/-/word-0.3.0.tgz" + "version" "0.3.0" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^8.1.0": + "integrity" "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + "version" "8.1.0" + dependencies: + "ansi-styles" "^6.1.0" + "string-width" "^5.0.1" + "strip-ansi" "^7.0.1" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"ws@^8.4.2": + "integrity" "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz" + "version" "8.15.1" + +"xlsx@^0.16.9": + "integrity" "sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw==" + "resolved" "https://registry.npmjs.org/xlsx/-/xlsx-0.16.9.tgz" + "version" "0.16.9" + dependencies: + "adler-32" "~1.2.0" + "cfb" "^1.1.4" + "codepage" "~1.14.0" + "commander" "~2.17.1" + "crc-32" "~1.2.0" + "exit-on-epipe" "~1.0.1" + "fflate" "^0.3.8" + "ssf" "~0.11.2" + "wmf" "~1.0.1" + "word" "~0.3.0" + +"xmldoc@^1.1.2": + "integrity" "sha512-2eN8QhjBsMW2uVj7JHLHkMytpvGHLHxKXBy4J3fAT/HujsEtM6yU84iGjpESYGHg6XwK0Vu4l+KgqQ2dv2cCqg==" + "resolved" "https://registry.npmjs.org/xmldoc/-/xmldoc-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "sax" "^1.2.4" + +"xtend@^4.0.2", "xtend@~4.0.1": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^3.0.2": + "integrity" "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + "version" "3.1.1" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yaml@^1.10.0": + "integrity" "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "resolved" "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz" + "version" "1.10.2" + +"yargs-parser@^18.1.2": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^21.1.1": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" + +"yargs@^15.3.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.2" + +"yargs@^17.2.1", "yargs@17.6.2": + "integrity" "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz" + "version" "17.6.2" + dependencies: + "cliui" "^8.0.1" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.1.1" + +"yn@^3.0.0": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + +"zone.js@~0.10.3": + "integrity" "sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg==" + "resolved" "https://registry.npmjs.org/zone.js/-/zone.js-0.10.3.tgz" + "version" "0.10.3" + +"zone.js@~0.11.4", "zone.js@~0.11.4 || ~0.12.0 || ~0.13.0": + "integrity" "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==" + "resolved" "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz" + "version" "0.11.8" + dependencies: + "tslib" "^2.3.0" + +"zrender@5.1.0": + "integrity" "sha512-c+8VRx52ycbmqwHeHLlo/BAfIHBl/JZNLM6cfDQFgzIH05yb+f5J9F/fbRsP+zGc8dW9XHuhdt8/iqukgMZSeg==" + "resolved" "https://registry.npmjs.org/zrender/-/zrender-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "tslib" "2.0.3"