diff --git a/apiferia/.editorconfig b/apiferia/.editorconfig new file mode 100644 index 00000000..59d9a3a3 --- /dev/null +++ b/apiferia/.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/apiferia/.gitignore b/apiferia/.gitignore new file mode 100644 index 00000000..0711527e --- /dev/null +++ b/apiferia/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/apiferia/.prettierrc b/apiferia/.prettierrc new file mode 100644 index 00000000..3fa77edf --- /dev/null +++ b/apiferia/.prettierrc @@ -0,0 +1,9 @@ +{ + "bracketSpacing": true, + "semi": false, + "singleQuote": true, + "trailingComma": "es5", + "useTabs": false, + "tabWidth": 2, + "arrowParens": "always" +} diff --git a/apiferia/README.md b/apiferia/README.md new file mode 100644 index 00000000..ac507c51 --- /dev/null +++ b/apiferia/README.md @@ -0,0 +1,27 @@ +# Reback + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.0.3. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/apiferia/angular.json b/apiferia/angular.json new file mode 100644 index 00000000..74a1e2c5 --- /dev/null +++ b/apiferia/angular.json @@ -0,0 +1,167 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "Reback": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/reback", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js", + "src/polyfills.ts", + "@angular/localize/init" + ], + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "node_modules/swiper/swiper-bundle.min.css", + "node_modules/flatpickr/dist/flatpickr.css", + "src/assets/scss/icons.scss", + "node_modules/ngx-toastr/toastr.css", + "src/assets/scss/app.scss", + "src/assets/css/bootstrap.css", + "src/assets/css/swiper-bundle.min.css", + "src/assets/css/animate.css", + "src/assets/css/jquery.fancybox.min.css", + "src/assets/css/magnific-popup.css", + "src/assets/css/nice-select.css", + "src/assets/css/font-awesome.css", + "src/assets/css/styles.css", + "src/styles.scss" + ], + "scripts": [ + "node_modules/gumshoejs/dist/gumshoe.polyfills.js", + "node_modules/jsvectormap/dist/js/jsvectormap.min.js", + "src/assets/js/jquery.min.js", + "src/assets/js/bootstrap.min.js", + "src/assets/js/swiper-bundle.min.js", + "src/assets/js/jquery.fancybox.js", + "src/assets/js/jquery.nice-select.min.js", + "src/assets/js/lazysize.min.js", + "src/assets/js/main.js" + ], + "allowedCommonJsDependencies": [ + "jsvectormap", + "jsvectormap/dist/maps/world.js", + "jsvectormap/dist/maps/russia.js", + "jsvectormap/dist/maps/canada.js", + "jsvectormap/dist/maps/iraq.js", + "jsvectormap/dist/maps/spain.js", + "dropzone", + "deepmerge", + "can-use-dom", + "choices.js", + "gumshoejs", + "quill-delta", + "apexcharts", + "dayjs", + "moment", + "sweetalert2", + "jquery", + "bootstrap", + "swiper" + ], + "stylePreprocessorOptions": { + "sass": { + "silenceDeprecations": [ + "color-functions", + "global-builtin", + "import", + "mixed-decls" + ] + } + } + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "8mb", + "maximumError": "8mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all", + "optimization": { + "scripts": true, + "styles": { + "minify": true, + "inlineCritical": false + } + } + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "Reback:build:production" + }, + "development": { + "buildTarget": "Reback:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "buildTarget": "hyper:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} \ No newline at end of file diff --git a/apiferia/package-lock.json b/apiferia/package-lock.json new file mode 100644 index 00000000..e2794359 --- /dev/null +++ b/apiferia/package-lock.json @@ -0,0 +1,17957 @@ +{ + "name": "reback", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "reback", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^19.0.6", + "@angular/cdk": "^19.0.5", + "@angular/common": "^19.0.6", + "@angular/compiler": "^19.0.6", + "@angular/core": "^19.0.6", + "@angular/forms": "^19.0.6", + "@angular/google-maps": "^19.0.2", + "@angular/platform-browser": "^19.0.6", + "@angular/platform-browser-dynamic": "^19.0.6", + "@angular/router": "^19.0.6", + "@ckeditor/ckeditor5-angular": "^9.1.0", + "@ckeditor/ckeditor5-build-classic": "^44.3.0", + "@ctrl/ngx-emoji-mart": "^9.2.0", + "@fullcalendar/angular": "^6.1.17", + "@fullcalendar/bootstrap": "^6.1.17", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/interaction": "^6.1.17", + "@fullcalendar/list": "^6.1.17", + "@fullcalendar/timegrid": "^6.1.17", + "@iconify-json/iconamoon": "^1.2.2", + "@iconify/utils": "^2.3.0", + "@ng-bootstrap/ng-bootstrap": "^18.0.0", + "@ngrx/effects": "^19.1.0", + "@ngrx/store": "^19.1.0", + "@ngrx/store-devtools": "^19.1.0", + "@popperjs/core": "^2.11.8", + "angularx-flatpickr": "^8.1.0", + "apexcharts": "^4.5.0", + "bootstrap": "^5.3.5", + "choices.js": "^11.1.0", + "ckeditor5": "^44.3.0", + "dayjs": "^1.11.13", + "flatpickr": "^4.6.13", + "gumshoejs": "^5.1.2", + "iconify-icon": "^2.3.0", + "jsvectormap": "1.3.3", + "moment": "^2.30.1", + "ng-apexcharts": "^1.15.0", + "ng2-nouislider": "^2.0.0", + "ngrx-store-localstorage": "^19.0.0", + "ngx-clipboard": "^16.0.0", + "ngx-cookie-service": "^19.1.2", + "ngx-dropzone-wrapper": "^17.0.0", + "ngx-mask": "^19.0.6", + "ngx-progressbar": "^14.0.0", + "ngx-quill": "^27.0.1", + "ngx-toastr": "^19.0.0", + "nouislider": "^15.8.1", + "npm": "^11.2.0", + "prettier": "^3.5.3", + "quill": "^2.0.3", + "quill-delta": "^5.1.0", + "rxjs": "~7.8.2", + "simplebar-angular": "3.2.4", + "sweetalert2": "^11.17.2", + "swiper": "^11.2.6", + "tslib": "^2.8.1", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.0.7", + "@angular/cli": "^19.0.7", + "@angular/compiler-cli": "^19.0.0", + "@angular/localize": "^19.0.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.8.3", + "vite": "^6.2.5" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1902.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.6.tgz", + "integrity": "sha512-Dx6yPxpaE5AhP6UtrVRDCc9Ihq9B65LAbmIh3dNOyeehratuaQS0TYNKjbpaevevJojW840DTg80N+CrlfYp9g==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "19.2.6", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.6.tgz", + "integrity": "sha512-alYn3PSsiQML9PzU1VKbmYnIP2ULK/AqfjdeJFh8r6m8ZjUvX1zDy9TdAfC6fykQ2mGHyChteRckbx9uVOyhwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1902.6", + "@angular-devkit/build-webpack": "0.1902.6", + "@angular-devkit/core": "19.2.6", + "@angular/build": "19.2.6", + "@babel/core": "7.26.10", + "@babel/generator": "7.26.10", + "@babel/helper-annotate-as-pure": "7.25.9", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.26.8", + "@babel/plugin-transform-async-to-generator": "7.25.9", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/runtime": "7.26.10", + "@discoveryjs/json-ext": "0.6.3", + "@ngtools/webpack": "19.2.6", + "@vitejs/plugin-basic-ssl": "1.2.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.20", + "babel-loader": "9.2.1", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "css-loader": "7.1.2", + "esbuild-wasm": "0.25.1", + "fast-glob": "3.3.3", + "http-proxy-middleware": "3.0.3", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.2", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "mini-css-extract-plugin": "2.9.2", + "open": "10.1.0", + "ora": "5.4.1", + "picomatch": "4.0.2", + "piscina": "4.8.0", + "postcss": "8.5.2", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.85.0", + "sass-loader": "16.0.5", + "semver": "7.7.1", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.39.0", + "tree-kill": "1.2.2", + "tslib": "2.8.1", + "webpack": "5.98.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.2.0", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.25.1" + }, + "peerDependencies": { + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "@angular/localize": "^19.0.0 || ^19.2.0-next.0", + "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", + "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", + "@angular/ssr": "^19.2.6", + "@web/test-runner": "^0.20.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^19.0.0 || ^19.2.0-next.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1902.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.6.tgz", + "integrity": "sha512-SZe2Nk39lJIJmtXWU+zhKaFy0xoU8N7387bvjhO0AoNQeRBaaJ5SrRLXX2jUzGUuVgGVF+plaVooKrmEOeM6ug==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1902.6", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.6.tgz", + "integrity": "sha512-WFgiYhrDMq83UNaGRAneIM7CYYdBozD+yYA9BjoU8AgBLKtrvn6S8ZcjKAk5heoHtY/u8pEb0mwDTz9gxFmJZQ==", + "dev": true, + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^4.0.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.6.tgz", + "integrity": "sha512-YTAxNnT++5eflx19OUHmOWu597/TbTel+QARiZCv1xQw99+X8DCKKOUXtqBRd53CAHlREDI33Rn/JLY3NYgMLQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "19.2.6", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.17", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@angular/animations": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.5.tgz", + "integrity": "sha512-m4RtY3z1JuHFCh6OrOHxo25oKEigBDdR/XmdCfXIwfTiObZzNA7VQhysgdrb9IISO99kXbjZUYKDtLzgWT8Klg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.5", + "@angular/core": "19.2.5" + } + }, + "node_modules/@angular/build": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.6.tgz", + "integrity": "sha512-+VBLb4ZPLswwJmgfsTFzGex+Sq/WveNc+uaIWyHYjwnuI17NXe1qAAg1rlp72CqGn0cirisfOyAUwPc/xZAgTg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1902.6", + "@babel/core": "7.26.10", + "@babel/helper-annotate-as-pure": "7.25.9", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.26.0", + "@inquirer/confirm": "5.1.6", + "@vitejs/plugin-basic-ssl": "1.2.0", + "beasties": "0.2.0", + "browserslist": "^4.23.0", + "esbuild": "0.25.1", + "fast-glob": "3.3.3", + "https-proxy-agent": "7.0.6", + "istanbul-lib-instrument": "6.0.3", + "listr2": "8.2.5", + "magic-string": "0.30.17", + "mrmime": "2.0.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.8.0", + "rollup": "4.34.8", + "sass": "1.85.0", + "semver": "7.7.1", + "source-map-support": "0.5.21", + "vite": "6.2.4", + "watchpack": "2.4.2" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "lmdb": "3.2.6" + }, + "peerDependencies": { + "@angular/compiler": "^19.0.0 || ^19.2.0-next.0", + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "@angular/localize": "^19.0.0 || ^19.2.0-next.0", + "@angular/platform-server": "^19.0.0 || ^19.2.0-next.0", + "@angular/service-worker": "^19.0.0 || ^19.2.0-next.0", + "@angular/ssr": "^19.2.6", + "karma": "^6.4.0", + "less": "^4.2.0", + "ng-packagr": "^19.0.0 || ^19.2.0-next.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@angular/ssr": { + "optional": true + }, + "karma": { + "optional": true + }, + "less": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/build/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/@angular/build/node_modules/vite": { + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/@angular/cdk": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.8.tgz", + "integrity": "sha512-ZZqWVYFF80TdjWkk2sc9Pn2luhiYeC78VH3Yjeln4wXMsTGDsvKPBcuOxSxxpJ31saaVBehDjBUuXMqGRj8KuA==", + "dependencies": { + "parse5": "^7.1.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0 || ^20.0.0", + "@angular/core": "^19.0.0 || ^20.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.6.tgz", + "integrity": "sha512-eZhFOSsDUHKaciwcWdU5C54ViAvPPdZJf42So93G2vZWDtEq6Uk47huocn1FY9cMhDvURfYLNrrLMpUDtUSsSA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1902.6", + "@angular-devkit/core": "19.2.6", + "@angular-devkit/schematics": "19.2.6", + "@inquirer/prompts": "7.3.2", + "@listr2/prompt-adapter-inquirer": "2.0.18", + "@schematics/angular": "19.2.6", + "@yarnpkg/lockfile": "1.1.0", + "ini": "5.0.0", + "jsonc-parser": "3.3.1", + "listr2": "8.2.5", + "npm-package-arg": "12.0.2", + "npm-pick-manifest": "10.0.0", + "pacote": "20.0.0", + "resolve": "1.22.10", + "semver": "7.7.1", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.5.tgz", + "integrity": "sha512-vFCBdas4C5PxP6ts/4TlRddWD3DUmI3aaO0QZdZvqyLHy428t84ruYdsJXKaeD8ie2U4/9F3a1tsklclRG/BBA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "19.2.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.5.tgz", + "integrity": "sha512-34J+HubQjwkbZ0AUtU5sa4Zouws9XtP/fKaysMQecoYJTZ3jewzLSRu3aAEZX1Y4gIrcVVKKIxM6oWoXKwYMOA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + } + }, + "node_modules/@angular/compiler-cli": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.5.tgz", + "integrity": "sha512-b2cG41r6lilApXLlvja1Ra2D00dM3BxmQhoElKC1tOnpD6S3/krlH1DOnBB2I55RBn9iv4zdmPz1l8zPUSh7DQ==", + "dev": true, + "dependencies": { + "@babel/core": "7.26.9", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^4.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "19.2.5", + "typescript": ">=5.5 <5.9" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.5.tgz", + "integrity": "sha512-NNEz1sEZz1mBpgf6Tz3aJ9b8KjqpTiMYhHfCYA9h9Ipe4D8gUmOsvPHPK2M755OX7p7PmUmzp1XCUHYrZMVHRw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.15.0" + } + }, + "node_modules/@angular/forms": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.5.tgz", + "integrity": "sha512-2Zvy3qK1kOxiAX9fdSaeG48q7oyO/4RlMYlg1w+ra9qX1SrgwF3OQ2P2Vs+ojg1AxN3z9xFp4aYaaID/G2LZAw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/google-maps": { + "version": "19.2.8", + "resolved": "https://registry.npmjs.org/@angular/google-maps/-/google-maps-19.2.8.tgz", + "integrity": "sha512-kCTezzgmilDsQD+kIqQovTPC0v9mMEKsg0L6+x9rFqh4anwvB50c2s56mIf7t6p0Ox3Lwf4ZAK9K1UVwAXRRYw==", + "dependencies": { + "@types/google.maps": "^3.54.10", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0 || ^20.0.0", + "@angular/core": "^19.0.0 || ^20.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/localize": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-19.2.5.tgz", + "integrity": "sha512-oAc19bubk6Z/2Vv6OkV0MsjdgC8cUaUwBmwdc6blFVe1NCX1KjdaqDyC2EQAO3nWfcdV4uvOOuu8myxB64bamw==", + "dev": true, + "dependencies": { + "@babel/core": "7.26.9", + "@types/babel__core": "7.20.5", + "fast-glob": "3.3.3", + "yargs": "^17.2.1" + }, + "bin": { + "localize-extract": "tools/bundles/src/extract/cli.js", + "localize-migrate": "tools/bundles/src/migrate/cli.js", + "localize-translate": "tools/bundles/src/translate/cli.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "19.2.5", + "@angular/compiler-cli": "19.2.5" + } + }, + "node_modules/@angular/localize/node_modules/@babel/core": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz", + "integrity": "sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.9", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.9", + "@babel/parser": "^7.26.9", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.9", + "@babel/types": "^7.26.9", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/localize/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/@angular/localize/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/platform-browser": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.5.tgz", + "integrity": "sha512-Lshy++X16cvl6OPvfzMySpsqEaCPKEJmDjz7q7oSt96oxlh6LvOeOUVLjsNyrNaIt9NadpWoqjlu/I9RTPJkpw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "19.2.5", + "@angular/common": "19.2.5", + "@angular/core": "19.2.5" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.5.tgz", + "integrity": "sha512-15in8u4552EcdWNTXY2h0MKuJbk3AuXwWr0zVTum4CfB/Ss2tNTrDEdWhgAbhnUI0e9jZQee/fhBbA1rleMYrA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.5", + "@angular/compiler": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5" + } + }, + "node_modules/@angular/router": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.5.tgz", + "integrity": "sha512-9pSfmdNXLjaOKj0kd4UxBC7sFdCFOnRGbftp397G3KWqsLsGSKmNFzqhXNeA5QHkaVxnpmpm8HzXU+zYV5JwSg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "19.2.5", + "@angular/core": "19.2.5", + "@angular/platform-browser": "19.2.5", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@antfu/install-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", + "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", + "dependencies": { + "package-manager-detector": "^0.2.8", + "tinyexec": "^0.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz", + "integrity": "sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.10", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.10", + "@babel/parser": "^7.26.10", + "@babel/template": "^7.26.9", + "@babel/traverse": "^7.26.10", + "@babel/types": "^7.26.10", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "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.26.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz", + "integrity": "sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.26.10", + "@babel/types": "^7.26.10", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", + "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz", + "integrity": "sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz", + "integrity": "sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.27.0", + "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/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.27.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz", + "integrity": "sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "regexpu-core": "^6.2.0", + "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/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.6.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", + "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz", + "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", + "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-wrap-function": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz", + "integrity": "sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", + "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz", + "integrity": "sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz", + "integrity": "sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.27.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", + "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", + "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.9", + "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.25.9.tgz", + "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", + "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", + "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", + "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", + "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz", + "integrity": "sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-remap-async-to-generator": "^7.25.9", + "@babel/traverse": "^7.26.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", + "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-remap-async-to-generator": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.26.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz", + "integrity": "sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz", + "integrity": "sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", + "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", + "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", + "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/traverse": "^7.25.9", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", + "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/template": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", + "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", + "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", + "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", + "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz", + "integrity": "sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", + "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz", + "integrity": "sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", + "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", + "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", + "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", + "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", + "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", + "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", + "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", + "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", + "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", + "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.26.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz", + "integrity": "sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", + "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", + "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", + "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", + "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", + "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", + "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", + "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", + "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", + "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz", + "integrity": "sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regexp-modifiers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", + "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", + "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz", + "integrity": "sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", + "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", + "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", + "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.26.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz", + "integrity": "sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz", + "integrity": "sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.26.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", + "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", + "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", + "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", + "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz", + "integrity": "sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.26.0", + "@babel/plugin-syntax-import-attributes": "^7.26.0", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", + "@babel/plugin-transform-block-scoping": "^7.25.9", + "@babel/plugin-transform-class-properties": "^7.25.9", + "@babel/plugin-transform-class-static-block": "^7.26.0", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-computed-properties": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-dotall-regex": "^7.25.9", + "@babel/plugin-transform-duplicate-keys": "^7.25.9", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-dynamic-import": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", + "@babel/plugin-transform-export-namespace-from": "^7.25.9", + "@babel/plugin-transform-for-of": "^7.26.9", + "@babel/plugin-transform-function-name": "^7.25.9", + "@babel/plugin-transform-json-strings": "^7.25.9", + "@babel/plugin-transform-literals": "^7.25.9", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", + "@babel/plugin-transform-member-expression-literals": "^7.25.9", + "@babel/plugin-transform-modules-amd": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-modules-systemjs": "^7.25.9", + "@babel/plugin-transform-modules-umd": "^7.25.9", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", + "@babel/plugin-transform-new-target": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", + "@babel/plugin-transform-numeric-separator": "^7.25.9", + "@babel/plugin-transform-object-rest-spread": "^7.25.9", + "@babel/plugin-transform-object-super": "^7.25.9", + "@babel/plugin-transform-optional-catch-binding": "^7.25.9", + "@babel/plugin-transform-optional-chaining": "^7.25.9", + "@babel/plugin-transform-parameters": "^7.25.9", + "@babel/plugin-transform-private-methods": "^7.25.9", + "@babel/plugin-transform-private-property-in-object": "^7.25.9", + "@babel/plugin-transform-property-literals": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.25.9", + "@babel/plugin-transform-regexp-modifiers": "^7.26.0", + "@babel/plugin-transform-reserved-words": "^7.25.9", + "@babel/plugin-transform-shorthand-properties": "^7.25.9", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-sticky-regex": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.9", + "@babel/plugin-transform-unicode-property-regex": "^7.25.9", + "@babel/plugin-transform-unicode-regex": "^7.25.9", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.11.0", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.40.0", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz", + "integrity": "sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz", + "integrity": "sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/types": "^7.27.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz", + "integrity": "sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.27.0", + "@babel/types": "^7.27.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz", + "integrity": "sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-44.3.0.tgz", + "integrity": "sha512-+LYQi4DJmK87Mx3FU7q8Ei3Jv/BrXScR7P1rJVw9bYSySLISw1lPPGEuzNaDm+aI/IMwxAw6Laf7kp+bBfZg1A==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-upload": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-alignment": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-44.3.0.tgz", + "integrity": "sha512-PJLPQPJTaEs/TxmXovb5gZWHFk04VdyFxwpy+LFiVKTewV4T5Mz2jinXwL6+DYmlHh0oDu66O2joSdYeL6F9xw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-angular": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-angular/-/ckeditor5-angular-9.1.0.tgz", + "integrity": "sha512-KJYdlH62CLd6EyaeMbFOfc4hsD+uRy9vsBAEEVY4jyTROROmODje4ZnfBtkz4KthuOVaDd+2ykwDQgAQ3gBIYA==", + "dependencies": { + "@ckeditor/ckeditor5-integrations-common": "^2.2.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0", + "@angular/core": ">=16.0.0", + "@angular/forms": ">=16.0.0", + "ckeditor5": ">=42.0.0 || ^0.0.0-nightly", + "rxjs": ">=6.0.0" + } + }, + "node_modules/@ckeditor/ckeditor5-autoformat": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-44.3.0.tgz", + "integrity": "sha512-cKRN73eWaci0px4RL/pu+uFx+/joJyicXjDogqRCqsrHtFnNziAoDxg1aU9F7eReMp+RJc5dqn9R94fZqxdaKQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-heading": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-autosave": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-44.3.0.tgz", + "integrity": "sha512-vZS8lMUNwtpUplx1WtiywEmgqy2rXSTrwbCqkENZZ6vIOpYZg9sW0XxWAdCMslBiNZRhAF2et3jT+Es01/aEyg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-basic-styles": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-44.3.0.tgz", + "integrity": "sha512-QxwJqzIMYD8Nq7I8utEm2N1wFYve3jR9W1RoxrP005V7F9hXubcG4VFkk1QspVjiPBBtWjYJh7Iq6LjeMnDXgg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-block-quote": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-44.3.0.tgz", + "integrity": "sha512-J+t36widj2/f1DCZqZjCssOu4hdKCpX/mDWOAJwp4BNIei0NATmtHoblH4Lb98P0mF5UeneoLqR4XZlwMYD7tw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-bookmark": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-44.3.0.tgz", + "integrity": "sha512-e3p6hUYC4LavTSVTDaz9VfpMaXpi35HNXqqCpIGJGtMKq7mYPaGf1ZZqIPEWuZz3UH/h/E445Mrm4KOgRo9hfg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-build-classic": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-44.3.0.tgz", + "integrity": "sha512-tvOwT1dAZlY4v1vZItqR0VFfTzr+OLoEmnOW/Lchl2Y0BUWT99GCfABCvAdakBBYvKdsMLsH0jqZFvnLxJCUmg==", + "deprecated": "The predefined builds are no longer maintained. Check the https://ckeditor.com/docs/ckeditor5/latest/updating/nim-migration/predefined-builds.html page for the details.", + "dependencies": { + "@ckeditor/ckeditor5-adapter-ckfinder": "44.3.0", + "@ckeditor/ckeditor5-autoformat": "44.3.0", + "@ckeditor/ckeditor5-basic-styles": "44.3.0", + "@ckeditor/ckeditor5-block-quote": "44.3.0", + "@ckeditor/ckeditor5-ckbox": "44.3.0", + "@ckeditor/ckeditor5-ckfinder": "44.3.0", + "@ckeditor/ckeditor5-cloud-services": "44.3.0", + "@ckeditor/ckeditor5-easy-image": "44.3.0", + "@ckeditor/ckeditor5-editor-classic": "44.3.0", + "@ckeditor/ckeditor5-essentials": "44.3.0", + "@ckeditor/ckeditor5-heading": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-indent": "44.3.0", + "@ckeditor/ckeditor5-link": "44.3.0", + "@ckeditor/ckeditor5-list": "44.3.0", + "@ckeditor/ckeditor5-media-embed": "44.3.0", + "@ckeditor/ckeditor5-paragraph": "44.3.0", + "@ckeditor/ckeditor5-paste-from-office": "44.3.0", + "@ckeditor/ckeditor5-table": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-ckbox": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-44.3.0.tgz", + "integrity": "sha512-R0cHl7aafBU1dvfpFu/dMq+7SMTKa7dAi1wQyu5RqmdN0glCAGXoyffe5h2gujcHGlUqzjGE9oX3207rrPi12A==", + "dependencies": { + "@ckeditor/ckeditor5-cloud-services": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-upload": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "blurhash": "2.0.5", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-ckfinder": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-44.3.0.tgz", + "integrity": "sha512-h/kQy9nUG2VmxAL28b56xZnVQDrr/N12cu2QE+ODfHIiumMNPPTx2Q+g7s8/eVhKAmNQuZJPXygokjXrirC8TA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-clipboard": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-44.3.0.tgz", + "integrity": "sha512-oCQfsHX0Z7RySzszvkpnsFi/p3pqEjpQs4FVpPXXWasK+3F00kWReYNNQFe+0z0eIw7alo/ZzqYTQG/FQHaQUw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-cloud-services": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-44.3.0.tgz", + "integrity": "sha512-c/jLU3lhoqPmwfwEXcU9fGw0ab6dQUcUjQUjamBH1x92p6NnEJTtXJD97trwgKJryZWZ6bk7vJG5nOC4i0XDZA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-code-block": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-44.3.0.tgz", + "integrity": "sha512-LNFRr7OIdvyZTfkmyNW/m48EXTsYdrQyDS/9hp4fpHrv9cC3rHhnP4/rS3vkmPh9FOv5I2JvXS36nn75BjWRRQ==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-core": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-44.3.0.tgz", + "integrity": "sha512-QYyk00JI2wgE2Lr8/A3roRsms3rSOfwMAF88I6Ff2Qf+c8hT6O11gSX18jdd/bGLhfZ0c4IjWc8v67ohgUdMFg==", + "dependencies": { + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-watchdog": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-easy-image": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-44.3.0.tgz", + "integrity": "sha512-s1Qpf45/31J4rW4RC0ArKLb5QqD0VKTn9LCB83qhyCLfGluk18MOZ2Fc7gfYoxZClzhCwdMQE6mhWOC9bQUmPw==", + "dependencies": { + "@ckeditor/ckeditor5-cloud-services": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-upload": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-balloon": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-44.3.0.tgz", + "integrity": "sha512-Lw6GIIUW37Pi/ErFqx+ozsqRmbBbvhrJhDJ1zIhILEYcwzADHGP32O2pKGLHDf5Z4QTfwunAyG73jvww/ks3kg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-classic": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-44.3.0.tgz", + "integrity": "sha512-Vi1tNQdKUCw6X66X2RPhtJPjXJHw/UqHw1Y0J4Vpmi5rf5UHerEj5Sjn+KrjUwDNbmeHtVO/egibLhwRMjKn8A==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-decoupled": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-44.3.0.tgz", + "integrity": "sha512-sG4KO0pPhfwQpiegtncDyL9G7nlCsjcWqDieZvRfwy2Uig7EaChny3BoIQhacjO4xKV8ZhXw+dTBJgZRtfePdQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-inline": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-44.3.0.tgz", + "integrity": "sha512-asa9uWhdTGA6BDda7leJEj57UT3lkDmFAHPFL7fWsvQpL2mszbdf7P6L/rOedGcj2/7a9F8CZfb5aVmENrM3Zw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-multi-root": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-44.3.0.tgz", + "integrity": "sha512-2k13l0m9+UGMDOzz2uGkj706iMFsayvn+wp6D4niGUOoDGtKOZSX6gNUwq+WcHJ2+54fsXAAJ2xVZB9juXSuhg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-emoji": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-44.3.0.tgz", + "integrity": "sha512-NevoSyV8f9F44oTYFJ8DVaOGmqS1XzCisg/lSW5iwfu2R0+6WXCfU6zlGwp9wVedolznUu5OiYpHK0Emz3dmBw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-mention": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "fuzzysort": "3.1.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-engine": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-44.3.0.tgz", + "integrity": "sha512-76nq2oHwQocaGQfRKlaDaYYFSps3yVNfbC4204i4/S0moKtB9fSy9IBKwYm5D9iB+0qjqCYGnsn17wWNuKjCYQ==", + "dependencies": { + "@ckeditor/ckeditor5-utils": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-enter": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-44.3.0.tgz", + "integrity": "sha512-M5pv6XC5SIqwa9ZiQQsmmvCAot/uiBN/8ax3KvLz8S78eXDHyHKE6mZMWUd0MJCfZ/0b+CnrFVY/kvZkS+h/7g==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-essentials": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-44.3.0.tgz", + "integrity": "sha512-DkE6u0pD3gcFLkyZRNA4IZVvjLQUpgoEeTCaB/QaCQRljSSj9300AtkIFpCdRiWo9RAGw7rs9XmVRoCsTPY4tQ==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-select-all": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-undo": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-find-and-replace": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-44.3.0.tgz", + "integrity": "sha512-d4fLo5IWyxPmfuoIqoaWaekoodgtFurKALc2ZyNvto7H9m+ul+uWwhF4A9buovbETv0N0mertDruGENygiuOCg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-font": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-44.3.0.tgz", + "integrity": "sha512-F1cdHNbtXkM/1nvqbCO4XeSCHahNiMnwkQqCm36njxuBRXbAei/qTwxqrwPAukE6Yb2q9boX1prUbvEBbPAqhw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-heading": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-44.3.0.tgz", + "integrity": "sha512-7uCSHN2UMTzn/nZpoACOiUyx2dX4ZlC8bfLbpdgMhDPM9vEaa0Tr/lgSFD5C1ugLFFSEJL3pAPGWStvZ4wD6YA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-paragraph": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-highlight": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-44.3.0.tgz", + "integrity": "sha512-BwdMrcAbS0J/3q3dmtY0F6sVARVR9oSrWj4/850EfXp0hw9gkpQyEjrds17sIrIchCG+/8/0LM4Z9sADYzmo9w==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-horizontal-line": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-44.3.0.tgz", + "integrity": "sha512-k8YuWptng4IKUbXVE+ZjVyNm8JpGU50aFWckYunimlpajNOKC52L8pneIEqIHr/BjA+2P/vtAIf8HDZs+AoNjw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-html-embed": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-44.3.0.tgz", + "integrity": "sha512-rJV3ikojykVPw9CrtzInh8DsgGuk/2UOi8KUr3b6DEtuYOqJkG5cfpqRy5QVoSRbtpLhVOWNpEKhYGgiv+HUgw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-html-support": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-44.3.0.tgz", + "integrity": "sha512-KFBHMzBNU9/YBj3Eil03qYBLNk7wAuholdZ3YijohgCt2YRw1cRu9krjGaOyhF9E5MEu0cqTJvTjPGBhGE8mVQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-heading": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-list": "44.3.0", + "@ckeditor/ckeditor5-table": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-image": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-44.3.0.tgz", + "integrity": "sha512-3mRgGSOXQ4e/TJZcB7N8SPSnN+pdUzA72kwiN6FrjjdV0CNqehNoSUCFrwra4ctHaFjLBBqFVV+hEvwFlgmlxA==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-undo": "44.3.0", + "@ckeditor/ckeditor5-upload": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-indent": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-44.3.0.tgz", + "integrity": "sha512-Gju3Lt2/OQB2mzhk/TTtonHTEcmFua4Ag4keB75EbPxthpLZZnMQm3Gl7MvrecjUv4+3nRlEBv/Bon00OIXcqA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-heading": "44.3.0", + "@ckeditor/ckeditor5-list": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-integrations-common": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-integrations-common/-/ckeditor5-integrations-common-2.2.3.tgz", + "integrity": "sha512-92kQWQj1wiABF7bY1+J79Ze+WHr7pwVBufn1eeJLWcTXbPQq4sAolfKv8Y8Ka9g69mdyE9+GPWmGFYDeQJVPDg==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "ckeditor5": ">=42.0.0 || ^0.0.0-nightly" + } + }, + "node_modules/@ckeditor/ckeditor5-language": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-44.3.0.tgz", + "integrity": "sha512-lnhnnsSwMnnyFpUktrvAxuj6tlwn2zjSm7+ZDxMiQpsZuRsmABnSapeKqjlfs8B1rQwrcZIhp1FsHVvnaVOzug==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-link": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-44.3.0.tgz", + "integrity": "sha512-OmOWje1i7tuEBNHoIi/n6M69xE1K97P2xmbSJ9HB5nFFvelfCCMnuLa+7QmT1+/Sxg0VYM175dtTclinEeWJhQ==", + "dependencies": { + "@ckeditor/ckeditor5-bookmark": "44.3.0", + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-list": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-44.3.0.tgz", + "integrity": "sha512-66f3n8ASdhA7wxPoGt/sI+Eg/IhDFutSkCEcqL2tsJFVRB0MuhhQIklxdGRVfPrjbpMSUPSRJPMddAFhRCzfUQ==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-markdown-gfm": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-44.3.0.tgz", + "integrity": "sha512-q+vblaqjjwQQkcrFfsOCD7ejWl1ltqV982jfFK9LTx7DiJIuR2UwByNrRC00Xeol2rDeC8lYoIH77AZHavFIbw==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@types/marked": "4.3.2", + "@types/turndown": "5.0.5", + "ckeditor5": "44.3.0", + "marked": "4.0.12", + "turndown": "7.2.0", + "turndown-plugin-gfm": "1.0.2" + } + }, + "node_modules/@ckeditor/ckeditor5-media-embed": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-44.3.0.tgz", + "integrity": "sha512-wlAITZKeNEZfB164hwODXfhg63pYaWynCuIvVCtaeVUmoBqnSkK8gxuZ2ehxUdi4SPlVJwt84afDsD4RU8UYDQ==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-undo": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-mention": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-44.3.0.tgz", + "integrity": "sha512-pmf7prEvIJgP4rbyeTtY6Ynl2i5jo52G+DlFwJbWUzZDyOZIR41mh4hBimK50QHR0szaXMBGbM+alFu924vZCA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-minimap": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-44.3.0.tgz", + "integrity": "sha512-iRO1t1lyeyiFZg4il5JGRVwyoqRYqsRcj9uSh90xNJJAxH5yiPlWAGIvCMzWDwlINFJe/hfaNd0RDzlbNHytgA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-page-break": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-44.3.0.tgz", + "integrity": "sha512-PzvOsEDNBPWCtN9S6nhJPWYwF/5BoE0klXkNzTgoA28EwsoSA4evU8gztcoxxGkVOskdI2OzZfz1QUaPFczLDQ==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-paragraph": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-44.3.0.tgz", + "integrity": "sha512-kxZBn/xmz+woXB0fIKWA/ZrFZXqyubX5BhcOYpM2j3CtjsJUJsL6ekwBq/y9HNSkkKfNKHaTzK7IDiPBKblcrw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-paste-from-office": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-44.3.0.tgz", + "integrity": "sha512-IHl3YVE6ONGXTxHf+uHvvBMFR90nxTz7nB9eA8DzuWskF+fOo+wtVdfZaafLUs0kJJXBTRebsv2Sa5onLLL6tA==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-remove-format": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-44.3.0.tgz", + "integrity": "sha512-ZlbJNaX+IGui9C3NDC/W/4M308RzD3+jnk5iDGXENjBstNB99AnwpfDXel+Tc0t5rTd7D1fSr9eaxScnPLdgwA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-restricted-editing": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-44.3.0.tgz", + "integrity": "sha512-0V/can4jw70DMBPwex1MRiUHRsvFdbjZp/RaHagazen6gOZZOAo3R7vJjp+qBQrHmXP6T6aTGn89Y9NxYI9OIw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-select-all": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-44.3.0.tgz", + "integrity": "sha512-GDNl6Iex1cyHAQgjR6cqIklH8QPO1x1Z87gwi93lX3mgm47DW6Q12jvwfRc36+d1zGf5W7+eH0xaP7jQPWYUPg==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-show-blocks": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-44.3.0.tgz", + "integrity": "sha512-4Qp992YWOby7+MiyX0PwD8bg/+PgsRFNXd9DLyhCvmmiFmkwUzbYmA8t3lp+V3uefg5SrcylzWn4QHlUNVg1iw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-source-editing": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-44.3.0.tgz", + "integrity": "sha512-OCv2oO6ok0UrZJHOoJRnywFpv3+UntOs7TuvEw35zDYJCgcmICfzqqTZ++ZcZaq1oOERbwk2L4E4uy2H8KXWQA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-theme-lark": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-special-characters": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-44.3.0.tgz", + "integrity": "sha512-K3cOw/aMUmkXofUVFpUXTHLNYlwvcT3KUyfvTO3oT8ae3ecQlG4btTjgnzgVD2zIXFSEpguSBYywVUhMAZWNMA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-style": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-44.3.0.tgz", + "integrity": "sha512-IUd5yRea8uh/VyAJ6p1NdXL9wWywQYfIOubzNgiP1b58q0psfWYxwsREekE6Epd+sMHC1H4wc+dZsIxfi+stKw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-html-support": "44.3.0", + "@ckeditor/ckeditor5-list": "44.3.0", + "@ckeditor/ckeditor5-table": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-table": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-44.3.0.tgz", + "integrity": "sha512-kFPvQWe/7Iq9tPzq788HLax7Ss8SJaS5+bkhbUmH+k4RM4NABl1ABRa+EzyMIrdqz9KLYr0B57jUoCU8Y2HLsg==", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-theme-lark": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-44.3.0.tgz", + "integrity": "sha512-Druy7S1e3bjwMVLkld7ZPGIU6tdI9E6bn/AS+OrQF3mDck14mFP+K4qnMbYNCeYngMqv8Se0eSHtAmQhU7It0A==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-typing": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-44.3.0.tgz", + "integrity": "sha512-ojAuhhd/PfO5Oko94ObgEmuvQzqApARb2H0R5YEySSRj9oek4Nm1NGMhHMvIC0sMP2hSVxhfSbHcHY3vDjGwiA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-ui": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-44.3.0.tgz", + "integrity": "sha512-Sotme1g/xwhmDYes+bXEU/9hbGXcaKC952Yck6UiYgZyhei28lErlNwtSOAKfpQ2gHbPjWRt7rigSH22EN+iqw==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-editor-multi-root": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@types/color-convert": "2.0.4", + "color-convert": "2.0.1", + "color-parse": "1.4.2", + "lodash-es": "4.17.21", + "vanilla-colorful": "0.7.2" + } + }, + "node_modules/@ckeditor/ckeditor5-undo": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-44.3.0.tgz", + "integrity": "sha512-cogFPl7QoDrmoUPKTZI0/LiUYoFboqm0lqBK168nh5VRgy53RuGgbXJ4+hCOHNuzdUnVUlWvl/2u0vR4/R07+A==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-upload": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-44.3.0.tgz", + "integrity": "sha512-oJgsw374nHeVKx1qvnlQzEyDhfFvC/su84f00nOdDGWfsHabU3hE0hZE+yoBtreRViORwwe6Ftg5qbhl5OVyuA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0" + } + }, + "node_modules/@ckeditor/ckeditor5-utils": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-44.3.0.tgz", + "integrity": "sha512-Z/ttfLhu9QnuMc9BBdQfH9Do6JD01ijUkUmUB41BPByYfOjZbGYGfZmhywH9OjXmHnSDQSUqwRnxqqM3nceR1g==", + "dependencies": { + "@ckeditor/ckeditor5-ui": "44.3.0", + "@types/lodash-es": "4.17.12", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-watchdog": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-44.3.0.tgz", + "integrity": "sha512-7Y4FOWB021CLEUDsIf61tZzd9ZrZ8JkD8lQeRZOmv+bBLTxgjyz2/7MCjIDR7NN0xdASXTFwRS6XO32HbdrN0Q==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-editor-multi-root": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-widget": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-44.3.0.tgz", + "integrity": "sha512-nFEKBE33RnZ2bOeD9L9jfyKYaFw/xKY543ZNQWxWHcmI70AX3U2KJ8wUnuMjMknHafyMuH6bSlWjKtn5vz3w+g==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-word-count": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-44.3.0.tgz", + "integrity": "sha512-9iNiF1wq1f9npT/KhBAgDfM6kFbJ0GyUdlXt3V6zyLY2K3SILQ6q5B23jhtABZny8zxA+f528ClxDSTFh9bXDA==", + "dependencies": { + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "ckeditor5": "44.3.0", + "lodash-es": "4.17.21" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@ctrl/ngx-emoji-mart": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@ctrl/ngx-emoji-mart/-/ngx-emoji-mart-9.2.0.tgz", + "integrity": "sha512-q8B7DiXPfyTe+VOGO6Ix7eh5gKCuADxAsud2xXRTlECTfchoKGTmirSczyjaxIKE/xmB+/ZsnkpthZqUM7SAJQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": ">=15.0.0-0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", + "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", + "dev": true, + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.1.tgz", + "integrity": "sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.1.tgz", + "integrity": "sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.1.tgz", + "integrity": "sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.1.tgz", + "integrity": "sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.1.tgz", + "integrity": "sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.1.tgz", + "integrity": "sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.1.tgz", + "integrity": "sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.1.tgz", + "integrity": "sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.1.tgz", + "integrity": "sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.1.tgz", + "integrity": "sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.1.tgz", + "integrity": "sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.1.tgz", + "integrity": "sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.1.tgz", + "integrity": "sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.1.tgz", + "integrity": "sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.1.tgz", + "integrity": "sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.1.tgz", + "integrity": "sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.1.tgz", + "integrity": "sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.1.tgz", + "integrity": "sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.1.tgz", + "integrity": "sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.1.tgz", + "integrity": "sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.1.tgz", + "integrity": "sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.1.tgz", + "integrity": "sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.1.tgz", + "integrity": "sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.1.tgz", + "integrity": "sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz", + "integrity": "sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fullcalendar/angular": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/angular/-/angular-6.1.17.tgz", + "integrity": "sha512-1XSiT62/KItFZCtecuqcxd0mxctQQcJuJbXfLFPjGG9Ycz6+af+bC0Ch89W+uYSPkGrmk7tczELouckJLSJm2Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "12 - 19", + "@angular/core": "12 - 19", + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/bootstrap": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/bootstrap/-/bootstrap-6.1.17.tgz", + "integrity": "sha512-8oGlepD17TEx+D7HqCKCoH1P19yDDbMaLBjuV3fW3XsYCqVZ3uGHcXSVHr7Jw/GzWB05vKiU/+CVXFmApltrsQ==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/core": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.17.tgz", + "integrity": "sha512-0W7lnIrv18ruJ5zeWBeNZXO8qCWlzxDdp9COFEsZnyNjiEhUVnrW/dPbjRKYpL0edGG0/Lhs0ghp1z/5ekt8ZA==", + "dependencies": { + "preact": "~10.12.1" + } + }, + "node_modules/@fullcalendar/daygrid": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.17.tgz", + "integrity": "sha512-K7m+pd7oVJ9fW4h7CLDdDGJbc9szJ1xDU1DZ2ag+7oOo1aCNLv44CehzkkknM6r8EYlOOhgaelxQpKAI4glj7A==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/interaction": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.17.tgz", + "integrity": "sha512-AudvQvgmJP2FU89wpSulUUjeWv24SuyCx8FzH2WIPVaYg+vDGGYarI7K6PcM3TH7B/CyaBjm5Rqw9lXgnwt5YA==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/list": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.17.tgz", + "integrity": "sha512-fkyK49F9IxwlGUBVhJGsFpd/LTi/vRVERLIAe1HmBaGkjwpxnynm8TMLb9mZip97wvDk3CmZWduMe6PxscAlow==", + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@fullcalendar/timegrid": { + "version": "6.1.17", + "resolved": "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.17.tgz", + "integrity": "sha512-K4PlA3L3lclLOs3IX8cvddeiJI9ZVMD7RA9IqaWwbvac771971foc9tFze9YY+Pqesf6S+vhS2dWtEVlERaGlQ==", + "dependencies": { + "@fullcalendar/daygrid": "~6.1.17" + }, + "peerDependencies": { + "@fullcalendar/core": "~6.1.17" + } + }, + "node_modules/@iconify-json/iconamoon": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@iconify-json/iconamoon/-/iconamoon-1.2.2.tgz", + "integrity": "sha512-Xn7YeSDniPgutPr0qil/iQwQelq975OYQ/i2twGjcK4DjGOXBrBC+6q45WtVuQbFfXzM7bgijv4yVnxy0OqUdQ==", + "dependencies": { + "@iconify/types": "*" + } + }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==" + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz", + "integrity": "sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz", + "integrity": "sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.7", + "@inquirer/type": "^3.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz", + "integrity": "sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz", + "integrity": "sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz", + "integrity": "sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz", + "integrity": "sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz", + "integrity": "sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz", + "integrity": "sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz", + "integrity": "sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==", + "dev": true, + "dependencies": { + "@inquirer/checkbox": "^4.1.2", + "@inquirer/confirm": "^5.1.6", + "@inquirer/editor": "^4.2.7", + "@inquirer/expand": "^4.0.9", + "@inquirer/input": "^4.1.6", + "@inquirer/number": "^3.0.9", + "@inquirer/password": "^4.0.9", + "@inquirer/rawlist": "^4.0.9", + "@inquirer/search": "^3.0.9", + "@inquirer/select": "^4.0.9" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz", + "integrity": "sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz", + "integrity": "sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz", + "integrity": "sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.10", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.6", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz", + "integrity": "sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "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==" + }, + "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==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz", + "integrity": "sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.18.tgz", + "integrity": "sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==", + "dev": true, + "dependencies": { + "@inquirer/type": "^1.5.5" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 8" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", + "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", + "dev": true, + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.6.tgz", + "integrity": "sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.6.tgz", + "integrity": "sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.6.tgz", + "integrity": "sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.2.6.tgz", + "integrity": "sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.6.tgz", + "integrity": "sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz", + "integrity": "sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==" + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@napi-rs/nice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", + "integrity": "sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/nice-android-arm-eabi": "1.0.1", + "@napi-rs/nice-android-arm64": "1.0.1", + "@napi-rs/nice-darwin-arm64": "1.0.1", + "@napi-rs/nice-darwin-x64": "1.0.1", + "@napi-rs/nice-freebsd-x64": "1.0.1", + "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", + "@napi-rs/nice-linux-arm64-gnu": "1.0.1", + "@napi-rs/nice-linux-arm64-musl": "1.0.1", + "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", + "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", + "@napi-rs/nice-linux-s390x-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-gnu": "1.0.1", + "@napi-rs/nice-linux-x64-musl": "1.0.1", + "@napi-rs/nice-win32-arm64-msvc": "1.0.1", + "@napi-rs/nice-win32-ia32-msvc": "1.0.1", + "@napi-rs/nice-win32-x64-msvc": "1.0.1" + } + }, + "node_modules/@napi-rs/nice-android-arm-eabi": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", + "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-android-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", + "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-arm64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", + "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-darwin-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", + "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-freebsd-x64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", + "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm-gnueabihf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", + "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz", + "integrity": "sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-arm64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz", + "integrity": "sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-ppc64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", + "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-riscv64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", + "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-s390x-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", + "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-gnu": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", + "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-linux-x64-musl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", + "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-arm64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", + "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-ia32-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", + "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/nice-win32-x64-msvc": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", + "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ng-bootstrap/ng-bootstrap": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-18.0.0.tgz", + "integrity": "sha512-GeSAz4yiGq49psdte8kcf+Y562wB3jK/qKRAkh6iA32lcXmy2sfQXVAmlHdjZ3AyP+E8lf3yMwuPdSKiYcDgSg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", + "@angular/forms": "^19.0.0", + "@angular/localize": "^19.0.0", + "@popperjs/core": "^2.11.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@ngrx/effects": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-19.1.0.tgz", + "integrity": "sha512-rGRN0ZnzAPmQdUPvmoqZsK7Da/AoCfQcfody+h6PfHTwXNm+M2MRc8tXO6C+fznMRww8ZgNror2dfFmoOSOvNg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "@ngrx/store": "19.1.0", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, + "node_modules/@ngrx/store": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-19.1.0.tgz", + "integrity": "sha512-8kKCSFahTpRTx3f/wwcDjItdFnk2IMoorWRjTI2U/MGWuEi4flqLNWcX99s759e7TI6PctiGsaS8jnJXIUS8Jg==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, + "node_modules/@ngrx/store-devtools": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-19.1.0.tgz", + "integrity": "sha512-c8sV5FQofqm7lF6HTJ4Bb7L/69TaIYHAwEFMbgqbsNoWDx+pilw/It6X9J3LnU8bXjQK4xg6qsgJ7fJIH5X2NA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "@ngrx/store": "19.1.0", + "rxjs": "^6.5.3 || ^7.5.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.6.tgz", + "integrity": "sha512-/jWpZUoMru3YbRJAPZ2KroUSzE6Ak5Hav219raYQaBXVtyLAvFE5VC1/CiH0wTYnb/dyjxzWq38ftOr/vv0+tg==", + "dev": true, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^19.0.0 || ^19.2.0-next.0", + "typescript": ">=5.5 <5.9", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "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/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.1.tgz", + "integrity": "sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", + "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.1.1.tgz", + "integrity": "sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz", + "integrity": "sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "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==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz", + "integrity": "sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz", + "integrity": "sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz", + "integrity": "sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz", + "integrity": "sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz", + "integrity": "sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz", + "integrity": "sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz", + "integrity": "sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz", + "integrity": "sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz", + "integrity": "sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz", + "integrity": "sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz", + "integrity": "sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz", + "integrity": "sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz", + "integrity": "sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz", + "integrity": "sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz", + "integrity": "sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz", + "integrity": "sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz", + "integrity": "sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz", + "integrity": "sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz", + "integrity": "sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "19.2.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.6.tgz", + "integrity": "sha512-fmbF9ONmEZqxHocCwOSWG2mHp4a22d1uW+DZUBUgZSBUFIrnFw42deOxDq8mkZOZ1Tc73UpLN2GKI7iJeUqS2A==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "19.2.6", + "@angular-devkit/schematics": "19.2.6", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.0.tgz", + "integrity": "sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.0.tgz", + "integrity": "sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.0.tgz", + "integrity": "sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz", + "integrity": "sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz", + "integrity": "sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g==", + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", + "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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/color-convert": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.4.tgz", + "integrity": "sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==", + "dependencies": { + "@types/color-name": "^1.1.0" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.5.tgz", + "integrity": "sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==" + }, + "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/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "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": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "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": "5.0.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/google.maps": { + "version": "3.58.1", + "resolved": "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz", + "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==" + }, + "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.16", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.7.tgz", + "integrity": "sha512-DVOfk9FaClQfNFpSfaML15jjB5cjffDMvjtph525sroR5BEAW2uKnTOYUTqTFuZFjNvH0T5XMIydvIctnUKufw==", + "dev": true + }, + "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/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/marked": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz", + "integrity": "sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w==" + }, + "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": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", + "dev": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "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.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "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.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "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/turndown": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@types/turndown/-/turndown-5.0.5.tgz", + "integrity": "sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w==" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz", + "integrity": "sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==", + "dev": true, + "engines": { + "node": ">=14.21.3" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "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/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==" + }, + "node_modules/abbrev": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", + "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "bin": { + "acorn": "bin/acorn" + }, + "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/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "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/angularx-flatpickr": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/angularx-flatpickr/-/angularx-flatpickr-8.1.0.tgz", + "integrity": "sha512-U+WXMUXGEiQbdMGSPk7T+HehmAFdVWKu3XlCXFM8mYCCB/fWHW8sbHstxxZgOymD5Q1kfLaHNob1MxhWUgv1hg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/core": ">=17.0.0", + "@angular/forms": ">=17.0.0", + "flatpickr": "^4.5.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": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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/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/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/apexcharts": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz", + "integrity": "sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ==", + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "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/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", + "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", + "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.4", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", + "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", + "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.4" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "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/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "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/beasties": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/beasties/-/beasties-0.2.0.tgz", + "integrity": "sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==", + "dev": true, + "dependencies": { + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "htmlparser2": "^9.1.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.49", + "postcss-media-query-parser": "^0.2.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "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.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/bootstrap": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.5.tgz", + "integrity": "sha512-ct1CHKtiobRimyGzmsSldEtM03E8fcEX4Tb3dGXz1V8faRwM50+vfHwTzOxB3IlKO7m+9vTH3s/3C6T2EAPeTA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "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.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "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-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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/caniuse-lite": { + "version": "1.0.30001712", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", + "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", + "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/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/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/choices.js": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/choices.js/-/choices.js-11.1.0.tgz", + "integrity": "sha512-mIt0uLhedHg2ea/K2PACrVpt391vRGHuOoctPAiHcyemezwzNMxj7jOzNEk8e7EbjLh0S0sspDkSCADOKz9kcw==", + "dependencies": { + "fuse.js": "^7.0.0" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ckeditor5": { + "version": "44.3.0", + "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-44.3.0.tgz", + "integrity": "sha512-g2arr/fejYAiOkdMeYvz1ficRPJ42OvO+pYROhre08YjIbAtJBr8wO9DPk9nCV3msnyYE+B02bs+TppazhYNtw==", + "dependencies": { + "@ckeditor/ckeditor5-adapter-ckfinder": "44.3.0", + "@ckeditor/ckeditor5-alignment": "44.3.0", + "@ckeditor/ckeditor5-autoformat": "44.3.0", + "@ckeditor/ckeditor5-autosave": "44.3.0", + "@ckeditor/ckeditor5-basic-styles": "44.3.0", + "@ckeditor/ckeditor5-block-quote": "44.3.0", + "@ckeditor/ckeditor5-bookmark": "44.3.0", + "@ckeditor/ckeditor5-ckbox": "44.3.0", + "@ckeditor/ckeditor5-ckfinder": "44.3.0", + "@ckeditor/ckeditor5-clipboard": "44.3.0", + "@ckeditor/ckeditor5-cloud-services": "44.3.0", + "@ckeditor/ckeditor5-code-block": "44.3.0", + "@ckeditor/ckeditor5-core": "44.3.0", + "@ckeditor/ckeditor5-easy-image": "44.3.0", + "@ckeditor/ckeditor5-editor-balloon": "44.3.0", + "@ckeditor/ckeditor5-editor-classic": "44.3.0", + "@ckeditor/ckeditor5-editor-decoupled": "44.3.0", + "@ckeditor/ckeditor5-editor-inline": "44.3.0", + "@ckeditor/ckeditor5-editor-multi-root": "44.3.0", + "@ckeditor/ckeditor5-emoji": "44.3.0", + "@ckeditor/ckeditor5-engine": "44.3.0", + "@ckeditor/ckeditor5-enter": "44.3.0", + "@ckeditor/ckeditor5-essentials": "44.3.0", + "@ckeditor/ckeditor5-find-and-replace": "44.3.0", + "@ckeditor/ckeditor5-font": "44.3.0", + "@ckeditor/ckeditor5-heading": "44.3.0", + "@ckeditor/ckeditor5-highlight": "44.3.0", + "@ckeditor/ckeditor5-horizontal-line": "44.3.0", + "@ckeditor/ckeditor5-html-embed": "44.3.0", + "@ckeditor/ckeditor5-html-support": "44.3.0", + "@ckeditor/ckeditor5-image": "44.3.0", + "@ckeditor/ckeditor5-indent": "44.3.0", + "@ckeditor/ckeditor5-language": "44.3.0", + "@ckeditor/ckeditor5-link": "44.3.0", + "@ckeditor/ckeditor5-list": "44.3.0", + "@ckeditor/ckeditor5-markdown-gfm": "44.3.0", + "@ckeditor/ckeditor5-media-embed": "44.3.0", + "@ckeditor/ckeditor5-mention": "44.3.0", + "@ckeditor/ckeditor5-minimap": "44.3.0", + "@ckeditor/ckeditor5-page-break": "44.3.0", + "@ckeditor/ckeditor5-paragraph": "44.3.0", + "@ckeditor/ckeditor5-paste-from-office": "44.3.0", + "@ckeditor/ckeditor5-remove-format": "44.3.0", + "@ckeditor/ckeditor5-restricted-editing": "44.3.0", + "@ckeditor/ckeditor5-select-all": "44.3.0", + "@ckeditor/ckeditor5-show-blocks": "44.3.0", + "@ckeditor/ckeditor5-source-editing": "44.3.0", + "@ckeditor/ckeditor5-special-characters": "44.3.0", + "@ckeditor/ckeditor5-style": "44.3.0", + "@ckeditor/ckeditor5-table": "44.3.0", + "@ckeditor/ckeditor5-theme-lark": "44.3.0", + "@ckeditor/ckeditor5-typing": "44.3.0", + "@ckeditor/ckeditor5-ui": "44.3.0", + "@ckeditor/ckeditor5-undo": "44.3.0", + "@ckeditor/ckeditor5-upload": "44.3.0", + "@ckeditor/ckeditor5-utils": "44.3.0", + "@ckeditor/ckeditor5-watchdog": "44.3.0", + "@ckeditor/ckeditor5-widget": "44.3.0", + "@ckeditor/ckeditor5-word-count": "44.3.0" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "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/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/color-parse": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", + "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "dependencies": { + "color-name": "^1.0.0" + } + }, + "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/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "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/compression/node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "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-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.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "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": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.41.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz", + "integrity": "sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==", + "dev": true, + "dependencies": { + "browserslist": "^4.24.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "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==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.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/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/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "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-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dropzone": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-5.9.3.tgz", + "integrity": "sha512-Azk8kD/2/nJIuVPK+zQ9sjKMRIpRvNyqn9XwbBHNq+iNuSccbJS6hwm1Woy0pMST0erSo0u4j+KJaodndDk4vA==" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "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.5.132", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.132.tgz", + "integrity": "sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "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/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==", + "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==", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz", + "integrity": "sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==", + "dev": true, + "dependencies": { + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.7.2", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz", + "integrity": "sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "punycode": "^1.4.1", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==" + }, + "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-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz", + "integrity": "sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.1", + "@esbuild/android-arm": "0.25.1", + "@esbuild/android-arm64": "0.25.1", + "@esbuild/android-x64": "0.25.1", + "@esbuild/darwin-arm64": "0.25.1", + "@esbuild/darwin-x64": "0.25.1", + "@esbuild/freebsd-arm64": "0.25.1", + "@esbuild/freebsd-x64": "0.25.1", + "@esbuild/linux-arm": "0.25.1", + "@esbuild/linux-arm64": "0.25.1", + "@esbuild/linux-ia32": "0.25.1", + "@esbuild/linux-loong64": "0.25.1", + "@esbuild/linux-mips64el": "0.25.1", + "@esbuild/linux-ppc64": "0.25.1", + "@esbuild/linux-riscv64": "0.25.1", + "@esbuild/linux-s390x": "0.25.1", + "@esbuild/linux-x64": "0.25.1", + "@esbuild/netbsd-arm64": "0.25.1", + "@esbuild/netbsd-x64": "0.25.1", + "@esbuild/openbsd-arm64": "0.25.1", + "@esbuild/openbsd-x64": "0.25.1", + "@esbuild/sunos-x64": "0.25.1", + "@esbuild/win32-arm64": "0.25.1", + "@esbuild/win32-ia32": "0.25.1", + "@esbuild/win32-x64": "0.25.1" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.1.tgz", + "integrity": "sha512-dZxPeDHcDIQ6ilml/NzYxnPbNkoVsHSFH3JGLSobttc5qYYgExMo8lh2XcB+w+AfiqykVDGK5PWanGB0gWaAWw==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "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/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/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==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "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/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/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==" + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/exsolve": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.4.tgz", + "integrity": "sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "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-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "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/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "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/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatpickr": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz", + "integrity": "sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw==" + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "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-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "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==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", + "integrity": "sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/fuzzysort": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz", + "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==" + }, + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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": "14.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", + "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.3", + "ignore": "^7.0.3", + "path-type": "^6.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/gumshoejs": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/gumshoejs/-/gumshoejs-5.1.2.tgz", + "integrity": "sha512-wIRdZGTNkWMP8dY3po8mtNYmCfiSva41LxXIEek2yEHceETpxRmO7DfW7aUbHsuucC9z2oDPu3alN3+00FUqlw==" + }, + "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-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", + "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "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/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "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-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "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==" + }, + "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-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "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": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", + "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconify-icon": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/iconify-icon/-/iconify-icon-2.3.0.tgz", + "integrity": "sha512-C0beI9oTDxQz6voI5CKl7MiJf0Lw4UU8K4G4t6pcUDClLmCvuMOpcvd8MAztQ2SfoH0iv7WHdxBFjekKPFKH2Q==", + "dependencies": { + "@iconify/types": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/cyberalien" + } + }, + "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": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "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": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "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": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "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": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-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": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "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": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz", + "integrity": "sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA==", + "dev": true + }, + "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/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/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "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.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/jsvectormap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/jsvectormap/-/jsvectormap-1.3.3.tgz", + "integrity": "sha512-cx0TgSxlFGzoX//4lW5ahP1rGUUiyiYc1p1eGPoF1vGVfEHF3M0+bgith4Fl8s3J1UPYvXpcpOWR9r0He8TpBg==" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true + }, + "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/karma/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/karma/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/karma/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.2.tgz", + "integrity": "sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==", + "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": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "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/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/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.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/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.2.6.tgz", + "integrity": "sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "msgpackr": "^1.11.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.5.3", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.2.6", + "@lmdb/lmdb-darwin-x64": "3.2.6", + "@lmdb/lmdb-linux-arm": "3.2.6", + "@lmdb/lmdb-linux-arm64": "3.2.6", + "@lmdb/lmdb-linux-x64": "3.2.6", + "@lmdb/lmdb-win32-x64": "3.2.6" + } + }, + "node_modules/loader-runner": { + "version": "4.3.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.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "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/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + }, + "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-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz", + "integrity": "sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "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/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "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==", + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "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==", + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/msgpackr": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz", + "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==", + "dev": true, + "optional": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "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": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "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/ng-apexcharts": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/ng-apexcharts/-/ng-apexcharts-1.15.0.tgz", + "integrity": "sha512-CNJMStzS+NxLvxRLrybPCy67n1z53WqsGvD9qdepWMo3xgZRDzpX8NiNOvwWDsZGSi7Y/nS5qaUmiM84gi3x7Q==", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0", + "apexcharts": ">=4.0.0", + "rxjs": "^6.5.5 || ^7.4.0" + } + }, + "node_modules/ng2-nouislider": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-2.0.0.tgz", + "integrity": "sha512-NGbF/0w0+bZqclpSPFOlWIeVJaVwRRYFJzD1x8PClbw9GIeo7fCHoBzZ81y7K7FTJg6to+cgjSTFETPZG/Dizg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=14.x", + "@angular/core": ">=14.x", + "nouislider": ">=15.x" + } + }, + "node_modules/ngrx-store-localstorage": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-19.0.0.tgz", + "integrity": "sha512-aONkwb2oW8BI9p6Hqyc6UvB8N51LgPSPg6ogg/ypYCQqRP/p8CDgDuYfkXyQktO1WS+2wKV4lPvGdjfb8dJwEw==", + "dependencies": { + "deepmerge": "^4.2.2", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.5", + "@angular/core": "^19.0.5", + "@ngrx/store": "^19.0.0" + } + }, + "node_modules/ngx-clipboard": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/ngx-clipboard/-/ngx-clipboard-16.0.0.tgz", + "integrity": "sha512-rZ/Eo1PqiKMiyF8tdjhmUkoUu68f7OzBJ7YH1YFeh2RAaNrerTaW8XfFOzppSckjFQqA1fwGSYuTTJlDhDag5w==", + "dependencies": { + "ngx-window-token": ">=7.0.0", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0" + } + }, + "node_modules/ngx-cookie-service": { + "version": "19.1.2", + "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-19.1.2.tgz", + "integrity": "sha512-4BFbc5BA7/ryuQVZUfDMHcjdgkHeW8obqfCCknoOEaplefjzlVvMQUx9Hywfjbc8POzZeZD2csS43Hs7rscJcA==", + "dependencies": { + "tslib": "^2.8.0" + }, + "peerDependencies": { + "@angular/common": "^19.0.0", + "@angular/core": "^19.0.0" + } + }, + "node_modules/ngx-dropzone-wrapper": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/ngx-dropzone-wrapper/-/ngx-dropzone-wrapper-17.0.0.tgz", + "integrity": "sha512-ln8vrHrqCSDGG5EPGxDowCX5Xur0GRagI4Yai8Uq7XiLjPYDU3BE8p3Lnkk2ERDMHMUK9dF7AIXNyTLoVk5rcw==", + "dependencies": { + "dropzone": "^5.9.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=9.0.0", + "@angular/core": ">=9.0.0" + } + }, + "node_modules/ngx-mask": { + "version": "19.0.6", + "resolved": "https://registry.npmjs.org/ngx-mask/-/ngx-mask-19.0.6.tgz", + "integrity": "sha512-lJa3+gIg0XMwjRv71pqW7uYrzFPZXl7VUbdbafJ9uo7QydfHIhUe8ByPgWt5VxvSC2mp5ndE3O7jWMOtv7Kthw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=14.0.0", + "@angular/core": ">=14.0.0", + "@angular/forms": ">=14.0.0" + } + }, + "node_modules/ngx-progressbar": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/ngx-progressbar/-/ngx-progressbar-14.0.0.tgz", + "integrity": "sha512-tDj7h5F2aSI4/XaJjs50FnELVe6qFqyz3vVq22acacd3oDW2EyJB4c+IYaxMf5972OdTw0WL4n6UwQ3dqC+gCA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/cdk": ">=17.3.0", + "@angular/common": ">=17.3.0", + "@angular/core": ">=17.3.0", + "rxjs": ">=7.0.0" + } + }, + "node_modules/ngx-quill": { + "version": "27.0.1", + "resolved": "https://registry.npmjs.org/ngx-quill/-/ngx-quill-27.0.1.tgz", + "integrity": "sha512-gVv5qNM35Azb/ARk22CJ2NVUnVhU+Ds6Z5eCv7GjISCZr+ELTPVEx1S7EL2R+VUfPxy4fwVA8X6agq6k1BvOiQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "^19.0.0", + "quill": "^2.0.0", + "rxjs": "^7.0.0" + } + }, + "node_modules/ngx-toastr": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-19.0.0.tgz", + "integrity": "sha512-6pTnktwwWD+kx342wuMOWB4+bkyX9221pAgGz3SHOJH0/MI9erLucS8PeeJDFwbUYyh75nQ6AzVtolgHxi52dQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=16.0.0-0", + "@angular/core": ">=16.0.0-0", + "@angular/platform-browser": ">=16.0.0-0" + } + }, + "node_modules/ngx-window-token": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ngx-window-token/-/ngx-window-token-7.0.0.tgz", + "integrity": "sha512-5+XfRVSY7Dciu8xyCNMkOlH2UfwR9W2P1Pirz7caaZgOZDjFbL8aEO2stjfJJm2FFf1D6dlVHNzhLWGk9HGkqA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": "^14.20.0 || ^16.13.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": ">=13.0.0", + "@angular/core": ">=13.0.0" + } + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "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": "11.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz", + "integrity": "sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "engines": { + "node": ">=18" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "engines": { + "node": ">=18" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true + }, + "node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "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/nouislider": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz", + "integrity": "sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw==" + }, + "node_modules/npm": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-11.2.0.tgz", + "integrity": "sha512-PcnFC6gTo9VDkxVaQ1/mZAS3JoWrDjAI+a6e2NgfYQSGDwftJlbdV0jBMi2V8xQPqbGcWaa7p3UP0SKF+Bhm2g==", + "bundleDependencies": [ + "@isaacs/string-locale-compare", + "@npmcli/arborist", + "@npmcli/config", + "@npmcli/fs", + "@npmcli/map-workspaces", + "@npmcli/package-json", + "@npmcli/promise-spawn", + "@npmcli/redact", + "@npmcli/run-script", + "@sigstore/tuf", + "abbrev", + "archy", + "cacache", + "chalk", + "ci-info", + "cli-columns", + "fastest-levenshtein", + "fs-minipass", + "glob", + "graceful-fs", + "hosted-git-info", + "ini", + "init-package-json", + "is-cidr", + "json-parse-even-better-errors", + "libnpmaccess", + "libnpmdiff", + "libnpmexec", + "libnpmfund", + "libnpmorg", + "libnpmpack", + "libnpmpublish", + "libnpmsearch", + "libnpmteam", + "libnpmversion", + "make-fetch-happen", + "minimatch", + "minipass", + "minipass-pipeline", + "ms", + "node-gyp", + "nopt", + "normalize-package-data", + "npm-audit-report", + "npm-install-checks", + "npm-package-arg", + "npm-pick-manifest", + "npm-profile", + "npm-registry-fetch", + "npm-user-validate", + "p-map", + "pacote", + "parse-conflict-json", + "proc-log", + "qrcode-terminal", + "read", + "semver", + "spdx-expression-parse", + "ssri", + "supports-color", + "tar", + "text-table", + "tiny-relative-date", + "treeverse", + "validate-npm-package-name", + "which" + ], + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^9.0.1", + "@npmcli/config": "^10.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.2", + "@npmcli/package-json": "^6.1.1", + "@npmcli/promise-spawn": "^8.0.2", + "@npmcli/redact": "^3.1.1", + "@npmcli/run-script": "^9.0.1", + "@sigstore/tuf": "^3.0.0", + "abbrev": "^3.0.0", + "archy": "~1.0.0", + "cacache": "^19.0.1", + "chalk": "^5.4.1", + "ci-info": "^4.1.0", + "cli-columns": "^4.0.0", + "fastest-levenshtein": "^1.0.16", + "fs-minipass": "^3.0.3", + "glob": "^10.4.5", + "graceful-fs": "^4.2.11", + "hosted-git-info": "^8.0.2", + "ini": "^5.0.0", + "init-package-json": "^8.0.0", + "is-cidr": "^5.1.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^10.0.0", + "libnpmdiff": "^8.0.1", + "libnpmexec": "^10.1.0", + "libnpmfund": "^7.0.1", + "libnpmorg": "^8.0.0", + "libnpmpack": "^9.0.1", + "libnpmpublish": "^11.0.0", + "libnpmsearch": "^9.0.0", + "libnpmteam": "^8.0.0", + "libnpmversion": "^8.0.0", + "make-fetch-happen": "^14.0.3", + "minimatch": "^9.0.5", + "minipass": "^7.1.1", + "minipass-pipeline": "^1.2.4", + "ms": "^2.1.2", + "node-gyp": "^11.1.0", + "nopt": "^8.1.0", + "normalize-package-data": "^7.0.0", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.1", + "npm-package-arg": "^12.0.2", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.2", + "npm-user-validate": "^3.0.0", + "p-map": "^7.0.3", + "pacote": "^21.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "qrcode-terminal": "^0.12.0", + "read": "^4.1.0", + "semver": "^7.7.1", + "spdx-expression-parse": "^4.0.0", + "ssri": "^12.0.0", + "supports-color": "^10.0.0", + "tar": "^6.2.1", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^3.0.0", + "validate-npm-package-name": "^6.0.0", + "which": "^5.0.0" + }, + "bin": { + "npm": "bin/npm-cli.js", + "npx": "bin/npx-cli.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-install-checks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", + "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-packlist": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz", + "integrity": "sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/npm/node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/@npmcli/agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/arborist": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.0.1.tgz", + "integrity": "sha512-m00iV8hgbmli0IMf4Os+UmEq5JRTgqOHR+x5h07O7mO/60q5hLaYwZUMamJ73wlMG68c3WB8ZloOxON/knF5vg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^9.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^8.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^21.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/config": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/config/-/config-10.1.0.tgz", + "integrity": "sha512-ygyCJATTr+xmuQHiX28adNT3tbDcWIfHQggNtLL2ykSyH4VCF5YeG4SilZaYIxf+72GZA6CJpESaDyhq9Boozg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "ci-info": "^4.0.0", + "ini": "^5.0.0", + "nopt": "^8.1.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/map-workspaces": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz", + "integrity": "sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.0.tgz", + "integrity": "sha512-znLKqdy1ZEGNK3VB9j/RzGyb/P0BJb3fGpvEbHIAyBAXsps2l1ce8SVHfsGAFLl9s8072PxafqTn7RC8wSnQPg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^21.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", + "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/node-gyp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/package-json": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.1.tgz", + "integrity": "sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/promise-spawn": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz", + "integrity": "sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-4.0.0.tgz", + "integrity": "sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.1.2" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/redact": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.1.1.tgz", + "integrity": "sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@npmcli/run-script": { + "version": "9.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "node-gyp": "^11.0.0", + "proc-log": "^5.0.0", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/@sigstore/bundle": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz", + "integrity": "sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz", + "integrity": "sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/protobuf-specs": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.0.tgz", + "integrity": "sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==", + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz", + "integrity": "sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "make-fetch-happen": "^14.0.2", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.0.tgz", + "integrity": "sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.4.0", + "tuf-js": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.0.tgz", + "integrity": "sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz", + "integrity": "sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz", + "integrity": "sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/bin-links": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-5.0.0.tgz", + "integrity": "sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/binary-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-3.0.0.tgz", + "integrity": "sha512-X0RfwMgXPEesg6PCXzytQZt9Unh9gtc4SfeTNJvKifUL//Oegcc/Yf31z6hThNZ8dnD3Ir3wkHVN0eWrTvP5ww==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/npm/node_modules/cacache": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^4.0.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/minizlib": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/npm/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/ci-info": { + "version": "4.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/cidr-regex": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.1.3.tgz", + "integrity": "sha512-86M1y3ZeQvpZkZejQCcS+IaSWjlDUC+ORP0peScQ4uEUFCZ8bEQVz7NlJHqysoUb6w3zCjx4Mq/8/2RHhMwHYw==", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "ip-regex": "^5.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/node_modules/cli-columns": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz", + "integrity": "sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/npm/node_modules/cmd-shim": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-7.0.0.tgz", + "integrity": "sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/npm/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "inBundle": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/npm/node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/exponential-backoff": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", + "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", + "inBundle": true, + "license": "Apache-2.0" + }, + "node_modules/npm/node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/npm/node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/hosted-git-info": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz", + "integrity": "sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "BSD-2-Clause" + }, + "node_modules/npm/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm/node_modules/ignore-walk": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz", + "integrity": "sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/npm/node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/init-package-json": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-8.0.0.tgz", + "integrity": "sha512-zKgxfaGt6Zzi8VBSInOK0CYDigA9gzDCWPnSzGIoUlTU/5w7qIyi+6MyJYX96mMlxDGrIR85FhQszVyodYfB9g==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/package-json": "^6.1.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/npm/node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/is-cidr": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/is-cidr/-/is-cidr-5.1.1.tgz", + "integrity": "sha512-AwzRMjtJNTPOgm7xuYZ71715z99t+4yRnSnSzgK5err5+heYi4zMuvmpUadaJ28+KCXCQo8CjUrKQZRWSPmqTQ==", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "cidr-regex": "^4.1.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/npm/node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/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==", + "engines": [ + "node >= 0.2.0" + ], + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/libnpmaccess": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-10.0.0.tgz", + "integrity": "sha512-Nz9Lolajvh6nPA5ixdKNfN2BJS0N7LvqTXPqy3+F37i3T4mcped24JCjwnp5KCPCB0ewX3ccopwUnhaTS1/yXg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmdiff": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-8.0.1.tgz", + "integrity": "sha512-3HoZq96FtqpEq1miPKQVj49T+KAKF4bP1UflWBBQ1YZDwm77tgNnYttuSRj6N41R5B2bxL5wK8a0zFbFGIN7tw==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.0.1", + "@npmcli/installed-package-contents": "^3.0.0", + "binary-extensions": "^3.0.0", + "diff": "^7.0.0", + "minimatch": "^9.0.4", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0", + "tar": "^6.2.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmexec": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/libnpmexec/-/libnpmexec-10.1.0.tgz", + "integrity": "sha512-ojQgfhwlC4PCzHUSVRaTUg3aKxrJbArtc/9KwC3mED1Wc1FSW11pHo0Ufs5DJLDbRK5LhjjEQ8AxzwRIUQVY+A==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.0.1", + "@npmcli/package-json": "^6.1.1", + "@npmcli/run-script": "^9.0.1", + "ci-info": "^4.0.0", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", + "semver": "^7.3.7", + "walk-up-path": "^4.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmfund": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/libnpmfund/-/libnpmfund-7.0.1.tgz", + "integrity": "sha512-bkam0l6uKTTwBZ5LhG05tdTnMt75g/jrL5tzPaWIpSMDWlcqFqLy+aqT+FkQCi4fCp8XDEOCZ2POqCyAFUiJuA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmorg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/libnpmorg/-/libnpmorg-8.0.0.tgz", + "integrity": "sha512-VO/mxds3Qu67S7/3TsFbykN+7kzpes14P/RiO3ECtLtUYQdlE5ddXGArRgU2tP4hUHZRvyBhc4sSiAXEzTA4eQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpack": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/libnpmpack/-/libnpmpack-9.0.1.tgz", + "integrity": "sha512-0b9x8h0xAiu99ZewqZqZInf82dCxVx2AWB6jqwooIHzey4i2XYcIi0Tcik9GhkayU5nJ5WLD/W9PVyZcIWcm2w==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/arborist": "^9.0.1", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^21.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmpublish": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-11.0.0.tgz", + "integrity": "sha512-c+cBWLWXafHzmSEQwRVKjHP6KkWntvqvAAT83agwmWrOwRpEXWDtiIlkopwzPcLRau6BcS6BwOttTlAWboH3BQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ci-info": "^4.0.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^3.0.0", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmsearch": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-9.0.0.tgz", + "integrity": "sha512-uMUbX5ynU/imuXlijCPathemyi1EZVtka9PEbaIqghdrjdHmMJITbyTsmSB+muzBWm1NUUFwRRKdpwktEmvipg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmteam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/libnpmteam/-/libnpmteam-8.0.0.tgz", + "integrity": "sha512-GfbxITlY4rVe3PKUU6wBjfNNc4Xho9Jv03N0sdzqho9H+9hynFjiwJpfWGwfVBdtimH+kPQW58qRUMott/Bkyg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "aproba": "^2.0.0", + "npm-registry-fetch": "^18.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/libnpmversion": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/libnpmversion/-/libnpmversion-8.0.0.tgz", + "integrity": "sha512-nqHD/YQtC/xLRquvFj2W2hvTNAIWSssJdz5ULCV0jAGBxjlQaPS9s8FNIiJ3w+iina+pCJo5AmlBjA7oWew0JQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "inBundle": true, + "license": "ISC" + }, + "node_modules/npm/node_modules/make-fetch-happen": { + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "ssri": "^12.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/make-fetch-happen/node_modules/negotiator": { + "version": "1.0.0", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/npm/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/npm/node_modules/minipass-fetch": { + "version": "4.0.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^3.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp": { + "version": "11.1.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "tar": "^7.4.3", + "which": "^5.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minizlib": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/tar": { + "version": "7.4.3", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^3.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/normalize-package-data": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.0.tgz", + "integrity": "sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^8.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-audit-report": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-6.0.0.tgz", + "integrity": "sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-bundled": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-install-checks": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz", + "integrity": "sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==", + "inBundle": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-packlist": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz", + "integrity": "sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^7.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-profile": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/npm-profile/-/npm-profile-11.0.1.tgz", + "integrity": "sha512-HP5Cw9WHwFS9vb4fxVlkNAQBUhVL5BmW6rAR+/JWkpwqcFJid7TihKUdYDWqHl0NDfLd0mpucheGySqo8ysyfw==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch": { + "version": "18.0.2", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz", + "integrity": "sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^14.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/npm-user-validate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-3.0.0.tgz", + "integrity": "sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw==", + "inBundle": true, + "license": "BSD-2-Clause", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "inBundle": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/npm/node_modules/pacote": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz", + "integrity": "sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^10.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/npm/node_modules/parse-conflict-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz", + "integrity": "sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "inBundle": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm/node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/proggy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz", + "integrity": "sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/promise-all-reject-late": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/promise-call-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "inBundle": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/promzard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-2.0.0.tgz", + "integrity": "sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "inBundle": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/npm/node_modules/read": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-4.1.0.tgz", + "integrity": "sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", + "integrity": "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm/node_modules/rimraf": { + "version": "5.0.10", + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "inBundle": true, + "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "inBundle": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/sigstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/npm/node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "inBundle": true, + "license": "CC-BY-3.0" + }, + "node_modules/npm/node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "inBundle": true, + "license": "CC0-1.0" + }, + "node_modules/npm/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "inBundle": true, + "license": "BSD-3-Clause" + }, + "node_modules/npm/node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/supports-color": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", + "integrity": "sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/npm/node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "inBundle": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/npm/node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/tiny-relative-date": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz", + "integrity": "sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", + "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.3.6", + "make-fetch-happen": "^14.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "inBundle": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/npm/node_modules/validate-npm-package-name": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", + "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "inBundle": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/npm/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "inBundle": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/wrap-ansi/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==", + "inBundle": true, + "license": "MIT" + }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "inBundle": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/wrap-ansi/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==", + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/npm/node_modules/write-file-atomic": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", + "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "inBundle": true, + "license": "ISC" + }, + "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-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "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": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz", + "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==", + "dev": true, + "optional": true + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz", + "integrity": "sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "dependencies": { + "quansync": "^0.2.7" + } + }, + "node_modules/pacote": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz", + "integrity": "sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^3.0.0", + "ssri": "^12.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==" + }, + "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-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "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": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", + "dependencies": { + "entities": "^4.5.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.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": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", + "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "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": "4.8.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.8.0.tgz", + "integrity": "sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==", + "dev": true, + "optionalDependencies": { + "@napi-rs/nice": "^1.0.1" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz", + "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "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/preact": { + "version": "10.12.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz", + "integrity": "sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "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==", + "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": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ] + }, + "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/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/quill/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "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.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "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/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": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "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.3.1", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz", + "integrity": "sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", + "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.12.0", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", + "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", + "dev": true, + "dependencies": { + "jsesc": "~3.0.2" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "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/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/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "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/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": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.34.8", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz", + "integrity": "sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.8", + "@rollup/rollup-android-arm64": "4.34.8", + "@rollup/rollup-darwin-arm64": "4.34.8", + "@rollup/rollup-darwin-x64": "4.34.8", + "@rollup/rollup-freebsd-arm64": "4.34.8", + "@rollup/rollup-freebsd-x64": "4.34.8", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.8", + "@rollup/rollup-linux-arm-musleabihf": "4.34.8", + "@rollup/rollup-linux-arm64-gnu": "4.34.8", + "@rollup/rollup-linux-arm64-musl": "4.34.8", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.8", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.8", + "@rollup/rollup-linux-riscv64-gnu": "4.34.8", + "@rollup/rollup-linux-s390x-gnu": "4.34.8", + "@rollup/rollup-linux-x64-gnu": "4.34.8", + "@rollup/rollup-linux-x64-musl": "4.34.8", + "@rollup/rollup-win32-arm64-msvc": "4.34.8", + "@rollup/rollup-win32-ia32-msvc": "4.34.8", + "@rollup/rollup-win32-x64-msvc": "4.34.8", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "devOptional": true + }, + "node_modules/sass": { + "version": "1.85.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz", + "integrity": "sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.5", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz", + "integrity": "sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "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": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "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.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "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/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/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "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-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "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/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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz", + "integrity": "sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==", + "dependencies": { + "@sigstore/bundle": "^3.1.0", + "@sigstore/core": "^2.0.0", + "@sigstore/protobuf-specs": "^0.4.0", + "@sigstore/sign": "^3.1.0", + "@sigstore/tuf": "^3.1.0", + "@sigstore/verify": "^2.1.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/simplebar-angular": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-3.2.4.tgz", + "integrity": "sha512-cBjr+GD2c4RaO85Yyo0Y1PsKeRdIgu5tgXp3FiNqyUwlisQUKZVweDiVuCtlec4nJTIwNJSoPV6yW8S1ek1B/A==", + "dependencies": { + "simplebar-core": "^1.2.4", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": ">=12.0.0", + "@angular/core": ">=12.0.0" + } + }, + "node_modules/simplebar-core": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.0.tgz", + "integrity": "sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz", + "integrity": "sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", + "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" + }, + "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==", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==" + }, + "node_modules/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.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "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/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sweetalert2": { + "version": "11.17.2", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.17.2.tgz", + "integrity": "sha512-HKxDr1IyV3Lxr3W6sb61qm/p2epFIEdr5EKwteRFHnIg6f8nHFl2kX++DBVz16Mac+fFiU3hMpjq1L6yE2Ge5w==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/limonte" + } + }, + "node_modules/swiper": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz", + "integrity": "sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/swiperjs" + }, + { + "type": "open_collective", + "url": "http://opencollective.com/swiper" + } + ], + "engines": { + "node": ">= 4.7.0" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "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==", + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "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/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "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/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==" + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "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-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/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-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/tuf-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz", + "integrity": "sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==", + "dependencies": { + "@tufjs/models": "3.0.1", + "debug": "^4.3.6", + "make-fetch-happen": "^14.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/turndown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + } + }, + "node_modules/turndown-plugin-gfm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz", + "integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==" + }, + "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/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.40", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz", + "integrity": "sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "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.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/unique-slug": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.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.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "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.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "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==", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz", + "integrity": "sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/vanilla-colorful": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz", + "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==" + }, + "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/vite": { + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", + "integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "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.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "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/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "optional": true + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", + "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.7", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "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/webpack-dev-server/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "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/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.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/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/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": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "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/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "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/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/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "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/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz", + "integrity": "sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz", + "integrity": "sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==" + } + } +} diff --git a/apiferia/package.json b/apiferia/package.json new file mode 100644 index 00000000..202cbf4b --- /dev/null +++ b/apiferia/package.json @@ -0,0 +1,89 @@ +{ + "name": "reback", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "format": "prettier --write src/**/*.{ts,html}" + }, + "private": true, + "dependencies": { + "@angular/animations": "^19.0.6", + "@angular/cdk": "^19.0.5", + "@angular/common": "^19.0.6", + "@angular/compiler": "^19.0.6", + "@angular/core": "^19.0.6", + "@angular/forms": "^19.0.6", + "@angular/google-maps": "^19.0.2", + "@angular/platform-browser": "^19.0.6", + "@angular/platform-browser-dynamic": "^19.0.6", + "@angular/router": "^19.0.6", + "@ckeditor/ckeditor5-angular": "^9.1.0", + "@ckeditor/ckeditor5-build-classic": "^44.3.0", + "@ctrl/ngx-emoji-mart": "^9.2.0", + "@fullcalendar/angular": "^6.1.17", + "@fullcalendar/bootstrap": "^6.1.17", + "@fullcalendar/core": "^6.1.17", + "@fullcalendar/daygrid": "^6.1.17", + "@fullcalendar/interaction": "^6.1.17", + "@fullcalendar/list": "^6.1.17", + "@fullcalendar/timegrid": "^6.1.17", + "@iconify-json/iconamoon": "^1.2.2", + "@iconify/utils": "^2.3.0", + "@ng-bootstrap/ng-bootstrap": "^18.0.0", + "@ngrx/effects": "^19.1.0", + "@ngrx/store": "^19.1.0", + "@ngrx/store-devtools": "^19.1.0", + "@popperjs/core": "^2.11.8", + "angularx-flatpickr": "^8.1.0", + "apexcharts": "^4.5.0", + "bootstrap": "^5.3.5", + "choices.js": "^11.1.0", + "ckeditor5": "^44.3.0", + "dayjs": "^1.11.13", + "flatpickr": "^4.6.13", + "gumshoejs": "^5.1.2", + "iconify-icon": "^2.3.0", + "jsvectormap": "1.3.3", + "moment": "^2.30.1", + "ng-apexcharts": "^1.15.0", + "ng2-nouislider": "^2.0.0", + "ngrx-store-localstorage": "^19.0.0", + "ngx-clipboard": "^16.0.0", + "ngx-cookie-service": "^19.1.2", + "ngx-dropzone-wrapper": "^17.0.0", + "ngx-mask": "^19.0.6", + "ngx-progressbar": "^14.0.0", + "ngx-quill": "^27.0.1", + "ngx-toastr": "^19.0.0", + "nouislider": "^15.8.1", + "npm": "^11.2.0", + "prettier": "^3.5.3", + "quill": "^2.0.3", + "quill-delta": "^5.1.0", + "rxjs": "~7.8.2", + "simplebar-angular": "3.2.4", + "sweetalert2": "^11.17.2", + "swiper": "^11.2.6", + "tslib": "^2.8.1", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.0.7", + "@angular/cli": "^19.0.7", + "@angular/compiler-cli": "^19.0.0", + "@angular/localize": "^19.0.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.8.3", + "vite": "^6.2.5" + } +} diff --git a/apiferia/src/app/app.component.html b/apiferia/src/app/app.component.html new file mode 100644 index 00000000..7cc32635 --- /dev/null +++ b/apiferia/src/app/app.component.html @@ -0,0 +1,8 @@ + + diff --git a/apiferia/src/app/app.component.scss b/apiferia/src/app/app.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/apiferia/src/app/app.component.spec.ts b/apiferia/src/app/app.component.spec.ts new file mode 100644 index 00000000..558bcda5 --- /dev/null +++ b/apiferia/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed } from '@angular/core/testing' +import { AppComponent } from './app.component' + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents() + }) + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent) + const app = fixture.componentInstance + expect(app).toBeTruthy() + }) + + it(`should have the 'Reback' title`, () => { + const fixture = TestBed.createComponent(AppComponent) + const app = fixture.componentInstance + // expect(app.title).toEqual('Reback') + }) + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent) + fixture.detectChanges() + const compiled = fixture.nativeElement as HTMLElement + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, Reback') + }) +}) diff --git a/apiferia/src/app/app.component.ts b/apiferia/src/app/app.component.ts new file mode 100644 index 00000000..e48ffda8 --- /dev/null +++ b/apiferia/src/app/app.component.ts @@ -0,0 +1,53 @@ +import { Component, inject, ViewChild, type OnInit } from '@angular/core' +import { CommonModule } from '@angular/common' +import { + NavigationCancel, + NavigationEnd, + NavigationError, + NavigationStart, + Router, + RouterOutlet, + type Event, +} from '@angular/router' +import { TitleService } from '@core/services/title.service' +import { NgProgressbar, NgProgressRef } from 'ngx-progressbar' + +@Component({ + selector: 'app-root', + standalone: true, + imports: [CommonModule, RouterOutlet, NgProgressbar], + templateUrl: './app.component.html', + styleUrl: './app.component.scss', +}) +export class AppComponent implements OnInit { + @ViewChild(NgProgressRef) progressBar!: NgProgressRef + + private titleService = inject(TitleService) + private router = inject(Router) + + constructor() { + this.router.events.subscribe((event: Event) => { + this.checkRouteChange(event) + }) + } + + ngOnInit(): void { + this.titleService.init() + } + + // show Loader when route change + checkRouteChange(routerEvent: Event) { + if (routerEvent instanceof NavigationStart) { + this.progressBar.start() + } + if ( + routerEvent instanceof NavigationEnd || + routerEvent instanceof NavigationCancel || + routerEvent instanceof NavigationError + ) { + setTimeout(() => { + this.progressBar.complete() + }, 200) + } + } +} diff --git a/apiferia/src/app/app.config.ts b/apiferia/src/app/app.config.ts new file mode 100644 index 00000000..a58a0c65 --- /dev/null +++ b/apiferia/src/app/app.config.ts @@ -0,0 +1,57 @@ +import { + ApplicationConfig, + importProvidersFrom, + isDevMode, + provideExperimentalZonelessChangeDetection, + provideZoneChangeDetection, +} from '@angular/core' +import { + provideRouter, + withInMemoryScrolling, + type InMemoryScrollingFeature, + type InMemoryScrollingOptions, +} from '@angular/router' + +import { + HTTP_INTERCEPTORS, + provideHttpClient, + withFetch, + withInterceptorsFromDi, +} from '@angular/common/http' +import { provideStore } from '@ngrx/store' +import { provideStoreDevtools } from '@ngrx/store-devtools' +import { routes } from './app.routes' +import { rootReducer } from './store' +import { localStorageSyncReducer } from './store/layout/layout-reducers' +import { DecimalPipe } from '@angular/common' +import { provideEffects } from '@ngrx/effects' +import { CalendarEffects } from './store/calendar/calendar.effects' +import { FakeBackendProvider } from './helpers/fake-backend' +import { AuthenticationEffects } from './store/authentication/authentication.effects' +import { provideToastr } from 'ngx-toastr' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { BrowserModule } from '@angular/platform-browser' + +// scroll +const scrollConfig: InMemoryScrollingOptions = { + scrollPositionRestoration: 'top', + anchorScrolling: 'enabled', +} + +const inMemoryScrollingFeatures: InMemoryScrollingFeature = + withInMemoryScrolling(scrollConfig) + +export const appConfig: ApplicationConfig = { + providers: [ + FakeBackendProvider, + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes, inMemoryScrollingFeatures), + DecimalPipe, + provideStore(rootReducer, { metaReducers: [localStorageSyncReducer] }), + provideStoreDevtools({ maxAge: 25, logOnly: !isDevMode() }), + provideEffects(AuthenticationEffects, CalendarEffects), + provideHttpClient(withFetch(), withInterceptorsFromDi()), + importProvidersFrom(BrowserAnimationsModule, BrowserModule), + provideToastr({}), + ], +} diff --git a/apiferia/src/app/app.routes.ts b/apiferia/src/app/app.routes.ts new file mode 100644 index 00000000..eb4f1b37 --- /dev/null +++ b/apiferia/src/app/app.routes.ts @@ -0,0 +1,47 @@ +import { RedirectCommand, Router, Routes, type UrlTree } from '@angular/router' +import { AuthLayoutComponent } from './layouts/auth-layout/auth-layout.component' +import { PrivateLayoutComponent } from './layouts/private-layout/private-layout.component' +import { AuthenticationService } from './core/services/auth.service' +import { inject } from '@angular/core' +import { CarViewComponent } from './views/car-view/car-view.component'; + +export const routes: Routes = [ + { + path: '', + redirectTo: 'dashboard/analytics', + pathMatch: 'full', + }, + { + path: '', + component: PrivateLayoutComponent, + canActivate: [ + () => { + const currentUser = inject(AuthenticationService).session + const router: Router = inject(Router) + if (currentUser) return true + const urlTree: UrlTree = router.parseUrl('/auth/sign-in') + return new RedirectCommand(urlTree, { skipLocationChange: true }) + }, + ], + loadChildren: () => + import('./views/views.route').then((mod) => mod.VIEW_ROUTES), + }, + { + path: '', + component: AuthLayoutComponent, + loadChildren: () => + import('./views/other-pages/other-page.route').then( + (mod) => mod.OTHER_PAGES_ROUTES + ), + }, + { + path: 'auth', + component: AuthLayoutComponent, + loadChildren: () => + import('./views/auth/auth.route').then((mod) => mod.AUTH_ROUTES), + }, + { + path: 'cars', + component: CarViewComponent + }, +] diff --git a/apiferia/src/app/common/apexchart.model.ts b/apiferia/src/app/common/apexchart.model.ts new file mode 100644 index 00000000..dfd0972a --- /dev/null +++ b/apiferia/src/app/common/apexchart.model.ts @@ -0,0 +1,44 @@ +import { + ApexAxisChartSeries, + ApexNonAxisChartSeries, + ApexChart, + ChartComponent, + ApexDataLabels, + ApexPlotOptions, + ApexYAxis, + ApexLegend, + ApexStroke, + ApexXAxis, + ApexFill, + ApexTooltip, + ApexTitleSubtitle, + ApexResponsive, + ApexAnnotations, + ApexGrid, + ApexStates, + ApexMarkers, + ApexTheme, +} from 'ng-apexcharts' + +export type ChartOptions = { + series: ApexAxisChartSeries | ApexNonAxisChartSeries + chart: ApexChart + xaxis: ApexXAxis + fill: ApexFill + stroke: ApexStroke + tooltip: ApexTooltip + dataLabels: ApexDataLabels + plotOptions: ApexPlotOptions + markers: ApexMarkers + responsive: ApexResponsive[] + colors: string[] + labels: string[] + annotations: ApexAnnotations + yaxis: ApexYAxis | ApexYAxis[] + grid: ApexGrid + legend: ApexLegend + title: ApexTitleSubtitle + subtitle: ApexTitleSubtitle + states: ApexStates + theme: ApexTheme +} diff --git a/apiferia/src/app/common/constants.ts b/apiferia/src/app/common/constants.ts new file mode 100644 index 00000000..ada7a961 --- /dev/null +++ b/apiferia/src/app/common/constants.ts @@ -0,0 +1,12 @@ +type CurrencyType = '₹' | '$' | '€' + +export const currency: CurrencyType = '$' + +export const currentYear = new Date().getFullYear() + +export const credits = { + name: 'Techzaa', + buyLink: '', +} + +export const basePath: string = '/' diff --git a/apiferia/src/app/common/menu-meta.ts b/apiferia/src/app/common/menu-meta.ts new file mode 100644 index 00000000..1d1131f4 --- /dev/null +++ b/apiferia/src/app/common/menu-meta.ts @@ -0,0 +1,911 @@ +export type MenuItem = { + key?: string + label?: string + icon?: string + link?: string + collapsed?: boolean + subMenu?: any + isTitle?: boolean + badge?: any + parentKey?: string + disabled?: boolean +} + +export const MENU: MenuItem[] = [ + { + key: 'general', + label: 'GENERAL', + isTitle: true, + }, + { + key: 'dashboards', + icon: 'iconamoon:home-duotone', + label: 'Dashboards', + collapsed: false, + subMenu: [ + { + key: 'dashboard-analytics', + label: 'Analytics', + link: '/dashboard/analytics', + parentKey: 'dashboards', + }, + { + key: 'dashboard-finance', + label: 'Finance', + link: '/dashboard/finance', + parentKey: 'dashboards', + }, + { + key: 'dashboard-sales', + label: 'Sales', + link: '/dashboard/sales', + parentKey: 'dashboards', + }, + ], + }, + { + key: 'apps', + label: 'APPS', + isTitle: true, + }, + { + key: 'ecommerce', + icon: 'iconamoon:shopping-bag-duotone', + label: 'Ecommerce', + collapsed: true, + subMenu: [ + { + key: 'ecommerce-products', + label: 'Products', + link: '/ecommerce/products', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-productsdetails', + label: 'Product Details', + link: '/ecommerce/product/1', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-createproduct', + label: 'Create Product', + link: '/ecommerce/create', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-customers', + label: 'Customers', + link: '/ecommerce/customers', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-sellers', + label: 'Sellers', + link: '/ecommerce/sellers', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-orders', + label: 'Orders', + link: '/ecommerce/orders', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-orderdetails', + label: 'Order Details', + link: '/ecommerce/orders/10001', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-inventory', + label: 'Inventory', + link: '/ecommerce/inventory', + parentKey: 'ecommerce', + }, + ], + }, + { + key: 'apps-chat', + icon: 'iconamoon:comment-dots-duotone', + label: 'Chat', + link: '/apps/chat', + }, + { + key: 'apps-email', + icon: 'iconamoon:email-duotone', + label: 'Email', + link: '/apps/email', + }, + { + key: 'apps-calendar', + icon: 'iconamoon:calendar-1-duotone', + label: 'Calendar', + collapsed: true, + subMenu: [ + { + key: 'calendar-schedule', + label: 'Schedule', + link: '/calendar/schedule', + parentKey: 'apps-calendar', + }, + { + key: 'calendar-integration', + label: 'Integration', + link: '/calendar/integration', + parentKey: 'apps-calendar', + }, + { + key: 'calendar-help', + label: 'Help', + link: '/calendar/help', + parentKey: 'apps-calendar', + }, + ], + }, + { + key: 'apps-todo', + icon: 'iconamoon:ticket-duotone', + label: 'Todo', + link: '/apps/todo', + }, + { + key: 'apps-social', + icon: 'iconamoon:squinting-face-duotone', + label: 'Social', + link: '/apps/social', + badge: { + variant: 'danger', + text: 'Hot', + }, + }, + { + key: 'apps-contacts', + icon: 'iconamoon:profile-circle-duotone', + label: 'Contacts', + link: '/apps/contacts', + }, + { + key: 'apps-invoices', + icon: 'iconamoon:invoice-duotone', + label: 'Invoices', + collapsed: true, + subMenu: [ + { + key: 'invoices', + label: 'Invoices', + link: '/invoices', + parentKey: 'apps-invoices', + }, + { + key: 'invoices-details', + label: 'Invoice Details', + link: '/invoice/RB6985', + parentKey: 'apps-invoices', + }, + ], + }, + { + key: 'feria', + label: 'FERIA DE VEHÍCULOS', + isTitle: true, + }, + { + key: 'vehicles', + icon: 'iconamoon:car-duotone', + label: 'Vehículos', + collapsed: true, + subMenu: [ + { + key: 'vehicles-list', + label: 'Lista de Vehículos', + link: '/vehicles', + parentKey: 'vehicles', + }, + { + key: 'vehicles-create', + label: 'Nuevo Vehículo', + link: '/vehicles/create', + parentKey: 'vehicles', + }, + { + key: 'vehicles-import', + label: 'Importar Vehículos', + link: '/vehicles/import', + parentKey: 'vehicles', + }, + ], + }, + { + key: 'finance', + icon: 'iconamoon:certificate-badge-duotone', + label: 'Financiamiento', + collapsed: true, + subMenu: [ + { + key: 'finance-applications', + label: 'Aplicaciones', + link: '/finance/applications', + parentKey: 'finance', + }, + { + key: 'finance-companies', + label: 'Financieras', + link: '/finance/companies', + parentKey: 'finance', + }, + { + key: 'finance-calculator', + label: 'Calculadora', + link: '/finance/calculator', + parentKey: 'finance', + }, + ], + }, + { + key: 'insurance', + icon: 'iconamoon:shield-yes-duotone', + label: 'Seguros', + collapsed: true, + subMenu: [ + { + key: 'insurance-quotes', + label: 'Cotizaciones', + link: '/insurance/quotes', + parentKey: 'insurance', + }, + { + key: 'insurance-companies', + label: 'Aseguradoras', + link: '/insurance/companies', + parentKey: 'insurance', + }, + ], + }, + { + key: 'sales', + icon: 'iconamoon:shopping-cart-duotone', + label: 'Ventas', + collapsed: true, + subMenu: [ + { + key: 'sales-list', + label: 'Lista de Ventas', + link: '/sales', + parentKey: 'sales', + }, + { + key: 'sales-reports', + label: 'Reportes', + link: '/sales/reports', + parentKey: 'sales', + }, + { + key: 'sales-commissions', + label: 'Comisiones', + link: '/sales/commissions', + parentKey: 'sales', + }, + ], + }, + { + key: 'custom', + label: 'Custom', + isTitle: true, + }, + { + key: 'pages', + label: 'Pages', + isTitle: false, + icon: 'iconamoon:copy-duotone', + collapsed: true, + subMenu: [ + { + key: 'page-welcome', + label: 'Welcome', + link: '/pages/welcome', + parentKey: 'pages', + }, + { + key: 'page-faqs', + label: 'FAQs', + link: '/pages/faqs', + parentKey: 'pages', + }, + { + key: 'page-profile', + label: 'Profile', + link: '/pages/profile', + parentKey: 'pages', + }, + { + key: 'page-coming-soon', + label: 'Coming Soon', + link: '/coming-soon', + parentKey: 'pages', + }, + { + key: 'page-contact-us', + label: 'Contact Us', + link: '/pages/contact-us', + parentKey: 'pages', + }, + { + key: 'page-about-us', + label: 'About Us', + link: '/pages/about-us', + parentKey: 'pages', + }, + { + key: 'page-our-team', + label: 'Our Team', + link: '/pages/our-team', + parentKey: 'pages', + }, + { + key: 'page-timeline', + label: 'Timeline', + link: '/pages/timeline', + parentKey: 'pages', + }, + { + key: 'page-pricing', + label: 'Pricing', + link: '/pages/pricing', + parentKey: 'pages', + }, + { + key: 'page-maintenance', + label: 'Maintenance', + link: '/maintenance', + parentKey: 'pages', + }, + { + key: 'page-404-error', + label: '404 Error', + link: '/error-404', + parentKey: 'pages', + }, + { + key: 'page-404-error2', + label: '404 Error 2', + link: '/error-404-2', + parentKey: 'pages', + }, + { + key: 'page-error-404-alt', + label: 'Error 404 (alt)', + link: '/pages/error-404-alt', + parentKey: 'pages', + }, + ], + }, + { + key: 'page-authentication', + label: 'Authentication', + isTitle: false, + icon: 'iconamoon:lock-duotone', + collapsed: true, + subMenu: [ + { + key: 'sign-in', + label: 'Sign In', + link: '/auth/sign-in', + parentKey: 'page-authentication', + }, + { + key: 'sign-in-2', + label: 'Sign In 2', + link: '/auth/sign-in-2', + parentKey: 'page-authentication', + }, + { + key: 'signup', + label: 'Sign Up', + link: '/auth/sign-up', + parentKey: 'page-authentication', + }, + { + key: 'signup2', + label: 'Sign Up 2', + link: '/auth/sign-up-2', + parentKey: 'page-authentication', + }, + { + key: 'reset-pass', + label: 'Reset Password', + link: '/auth/reset-pass', + parentKey: 'page-authentication', + }, + { + key: 'reset-pass2', + label: 'Reset Password 2', + link: '/auth/reset-pass-2', + parentKey: 'page-authentication', + }, + { + key: 'lock-screen', + label: 'Lock Screen', + link: '/auth/lock-screen', + parentKey: 'page-authentication', + }, + { + key: 'lock-screen-2', + label: 'Lock Screen 2', + link: '/auth/lock-screen-2', + parentKey: 'page-authentication', + }, + ], + }, + { + key: 'widgets', + icon: 'iconamoon:gift-duotone', + label: 'Widgets', + link: '/widgets', + badge: { + variant: 'info', + text: '9+', + }, + }, + { + key: 'components', + label: 'COMPONENTS', + isTitle: true, + }, + { + key: 'base-ui', + icon: 'iconamoon:briefcase-duotone', + label: 'Base UI', + collapsed: true, + subMenu: [ + { + key: 'base-ui-accordions', + label: 'Accordion', + link: '/ui/accordions', + parentKey: 'base-ui', + }, + { + key: 'base-ui-alerts', + label: 'Alerts', + link: '/ui/alerts', + parentKey: 'base-ui', + }, + { + key: 'base-ui-avatars', + label: 'Avatar', + link: '/ui/avatars', + parentKey: 'base-ui', + }, + { + key: 'base-ui-badges', + label: 'Badge', + link: '/ui/badges', + parentKey: 'base-ui', + }, + { + key: 'base-ui-breadcrumb', + label: 'Breadcrumb', + link: '/ui/breadcrumb', + parentKey: 'base-ui', + }, + { + key: 'base-ui-buttons', + label: 'Buttons', + link: '/ui/buttons', + parentKey: 'base-ui', + }, + { + key: 'base-ui-cards', + label: 'Card', + link: '/ui/cards', + parentKey: 'base-ui', + }, + { + key: 'base-ui-carousel', + label: 'Carousel', + link: '/ui/carousel', + parentKey: 'base-ui', + }, + { + key: 'base-ui-collapse', + label: 'Collapse', + link: '/ui/collapse', + parentKey: 'base-ui', + }, + { + key: 'base-ui-dropdowns', + label: 'Dropdown', + link: '/ui/dropdowns', + parentKey: 'base-ui', + }, + { + key: 'base-ui-list-group', + label: 'List Group', + link: '/ui/list-group', + parentKey: 'base-ui', + }, + { + key: 'base-ui-modals', + label: 'Modal', + link: '/ui/modals', + parentKey: 'base-ui', + }, + { + key: 'base-ui-tabs', + label: 'Tabs', + link: '/ui/tabs', + parentKey: 'base-ui', + }, + { + key: 'base-ui-offcanvas', + label: 'Offcanvas', + link: '/ui/offcanvas', + parentKey: 'base-ui', + }, + { + key: 'base-ui-pagination', + label: 'Pagination', + link: '/ui/pagination', + parentKey: 'base-ui', + }, + { + key: 'base-ui-placeholders', + label: 'Placeholders', + link: '/ui/placeholders', + parentKey: 'base-ui', + }, + { + key: 'base-ui-popovers', + label: 'Popovers', + link: '/ui/popovers', + parentKey: 'base-ui', + }, + { + key: 'base-ui-progress', + label: 'Progress', + link: '/ui/progress', + parentKey: 'base-ui', + }, + { + key: 'base-ui-scrollspy', + label: 'Scrollspy', + link: '/ui/scrollspy', + parentKey: 'base-ui', + }, + { + key: 'base-ui-spinners', + label: 'Spinners', + link: '/ui/spinners', + parentKey: 'base-ui', + }, + { + key: 'base-ui-toasts', + label: 'Toasts', + link: '/ui/toasts', + parentKey: 'base-ui', + }, + { + key: 'base-ui-tooltips', + label: 'Tooltips', + link: '/ui/tooltips', + parentKey: 'base-ui', + }, + ], + }, + { + key: 'advanced-ui', + icon: 'iconamoon:component-duotone', + label: 'Advanced UI', + collapsed: true, + subMenu: [ + { + key: 'advanced-ui-ratings', + label: 'Ratings', + link: '/advanced/ratings', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-sweet-alert', + label: 'Sweet Alert', + link: '/advanced/alert', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-swiper-slider', + label: 'Swiper Slider', + link: '/advanced/swiper', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-scrollbar', + label: 'Scrollbar', + link: '/advanced/scrollbar', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-toastify', + label: 'Toastify', + link: '/advanced/toastify', + parentKey: 'advanced-ui', + }, + ], + }, + { + key: 'charts', + icon: 'iconamoon:3d-duotone', + label: 'Charts', + collapsed: true, + subMenu: [ + { + key: 'charts-area', + label: 'Area', + link: '/charts/area', + parentKey: 'charts', + }, + { + key: 'charts-bar', + label: 'Bar', + link: '/charts/bar', + parentKey: 'charts', + }, + { + key: 'charts-bubble', + label: 'Bubble', + link: '/charts/bubble', + parentKey: 'charts', + }, + { + key: 'charts-candl-stick', + label: 'Candlestick', + link: '/charts/candlestick', + parentKey: 'charts', + }, + { + key: 'charts-column', + label: 'Column', + link: '/charts/column', + parentKey: 'charts', + }, + { + key: 'charts-heatmap', + label: 'Heatmap', + link: '/charts/heatmap', + parentKey: 'charts', + }, + { + key: 'charts-line', + label: 'Line', + link: '/charts/line', + parentKey: 'charts', + }, + { + key: 'charts-mixed', + label: 'Mixed', + link: '/charts/mixed', + parentKey: 'charts', + }, + { + key: 'charts-timeline', + label: 'Timeline', + link: '/charts/timeline', + parentKey: 'charts', + }, + { + key: 'charts-boxplot', + label: 'Boxplot', + link: '/charts/boxplot', + parentKey: 'charts', + }, + { + key: 'charts-treemap', + label: 'Treemap', + link: '/charts/treemap', + parentKey: 'charts', + }, + { + key: 'charts-pie', + label: 'Pie', + link: '/charts/pie', + parentKey: 'charts', + }, + { + key: 'charts-radar', + label: 'Radar', + link: '/charts/radar', + parentKey: 'charts', + }, + { + key: 'charts-radial-bar', + label: 'RadialBar', + link: '/charts/radial-bar', + parentKey: 'charts', + }, + { + key: 'charts-scatter', + label: 'Scatter', + link: '/charts/scatter', + parentKey: 'charts', + }, + { + key: 'charts-polar-area', + label: 'Polar Area', + link: '/charts/polar', + parentKey: 'charts', + }, + ], + }, + { + key: 'forms', + icon: 'iconamoon:cheque-duotone', + label: 'Forms', + collapsed: true, + subMenu: [ + { + key: 'forms-basic-elements', + label: 'Basic Elements', + link: '/forms/basic', + parentKey: 'forms', + }, + { + key: 'forms-checkbox&radio', + label: 'Checkbox & Radio', + link: '/forms/checkbox', + parentKey: 'forms', + }, + { + key: 'forms-choice-select', + label: 'Choice Select', + link: '/forms/select', + parentKey: 'forms', + }, + { + key: 'forms-clipboard', + label: 'Clipboard', + link: '/forms/clipboard', + parentKey: 'forms', + }, + { + key: 'forms-flat-picker', + label: 'Flatpicker', + link: '/forms/flat-picker', + parentKey: 'forms', + }, + { + key: 'forms-validation', + label: 'Validation', + link: '/forms/validation', + parentKey: 'forms', + }, + { + key: 'forms-wizard', + label: 'Wizard', + link: '/forms/wizard', + parentKey: 'forms', + }, + { + key: 'forms-file-uploads', + label: 'File Upload', + link: '/forms/file-uploads', + parentKey: 'forms', + }, + { + key: 'forms-editors', + label: 'Editors', + link: '/forms/editors', + parentKey: 'forms', + }, + { + key: 'forms-input-mask', + label: 'Input Mask', + link: '/forms/input-mask', + parentKey: 'forms', + }, + { + key: 'forms-slider', + label: 'Slider', + link: '/forms/slider', + parentKey: 'forms', + }, + ], + }, + { + key: 'tables', + icon: 'iconamoon:box-duotone', + label: 'Tables', + collapsed: true, + subMenu: [ + { + key: 'tables-basic', + label: 'Basic Tables', + link: '/tables/basic', + parentKey: 'tables', + }, + { + key: 'tables-grid-js', + label: 'Datatables', + link: '/tables/datatable', + parentKey: 'tables', + }, + ], + }, + { + key: 'icons', + icon: 'iconamoon:lightning-1-duotone', + label: 'Icons', + collapsed: true, + subMenu: [ + { + key: 'icons-boxicons', + label: 'Boxicons', + link: '/icons/boxicons', + parentKey: 'icons', + }, + { + key: 'icons-iconamoon', + label: 'IconaMoon Icons', + link: '/icons/iconamoon', + parentKey: 'icons', + }, + ], + }, + { + key: 'maps', + icon: 'iconamoon:location-pin-duotone', + label: 'Maps', + collapsed: true, + subMenu: [ + { + key: 'maps-google', + label: 'Google Maps', + link: '/maps/google', + parentKey: 'maps', + }, + { + key: 'maps-vector', + label: 'Vector Maps', + link: '/maps/vector', + parentKey: 'maps', + }, + ], + }, + { + key: 'badge-menu', + icon: 'iconamoon:badge-duotone', + label: 'Badge Menu', + badge: { + variant: 'danger', + text: '1', + }, + }, + { + key: 'menuitem', + icon: 'iconamoon:folder-add-duotone', + label: 'Menu Item', + collapsed: true, + subMenu: [ + { + key: 'menu-item-1', + label: 'Menu Item 1', + parentKey: 'menuitem', + }, + { + key: 'menu-item-2', + label: 'Menu Item 2', + collapsed: true, + parentKey: 'menuitem', + subMenu: [ + { + key: 'menu-sub-item', + label: 'Menu Sub Item', + parentKey: 'menu-item-2', + }, + ], + }, + ], + }, + { + key: 'disabled-item', + icon: 'iconamoon:unavailable-duotone', + label: 'Disabled Item', + disabled: true, + }, +] diff --git a/apiferia/src/app/common/menu-meta.ts.backup b/apiferia/src/app/common/menu-meta.ts.backup new file mode 100644 index 00000000..90667348 --- /dev/null +++ b/apiferia/src/app/common/menu-meta.ts.backup @@ -0,0 +1,808 @@ +export type MenuItem = { + key?: string + label?: string + icon?: string + link?: string + collapsed?: boolean + subMenu?: any + isTitle?: boolean + badge?: any + parentKey?: string + disabled?: boolean +} + +export const MENU: MenuItem[] = [ + { + key: 'general', + label: 'GENERAL', + isTitle: true, + }, + { + key: 'dashboards', + icon: 'iconamoon:home-duotone', + label: 'Dashboards', + collapsed: false, + subMenu: [ + { + key: 'dashboard-analytics', + label: 'Analytics', + link: '/dashboard/analytics', + parentKey: 'dashboards', + }, + { + key: 'dashboard-finance', + label: 'Finance', + link: '/dashboard/finance', + parentKey: 'dashboards', + }, + { + key: 'dashboard-sales', + label: 'Sales', + link: '/dashboard/sales', + parentKey: 'dashboards', + }, + ], + }, + { + key: 'apps', + label: 'APPS', + isTitle: true, + }, + { + key: 'ecommerce', + icon: 'iconamoon:shopping-bag-duotone', + label: 'Ecommerce', + collapsed: true, + subMenu: [ + { + key: 'ecommerce-products', + label: 'Products', + link: '/ecommerce/products', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-productsdetails', + label: 'Product Details', + link: '/ecommerce/product/1', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-createproduct', + label: 'Create Product', + link: '/ecommerce/create', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-customers', + label: 'Customers', + link: '/ecommerce/customers', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-sellers', + label: 'Sellers', + link: '/ecommerce/sellers', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-orders', + label: 'Orders', + link: '/ecommerce/orders', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-orderdetails', + label: 'Order Details', + link: '/ecommerce/orders/10001', + parentKey: 'ecommerce', + }, + { + key: 'ecommerce-inventory', + label: 'Inventory', + link: '/ecommerce/inventory', + parentKey: 'ecommerce', + }, + ], + }, + { + key: 'apps-chat', + icon: 'iconamoon:comment-dots-duotone', + label: 'Chat', + link: '/apps/chat', + }, + { + key: 'apps-email', + icon: 'iconamoon:email-duotone', + label: 'Email', + link: '/apps/email', + }, + { + key: 'apps-calendar', + icon: 'iconamoon:calendar-1-duotone', + label: 'Calendar', + collapsed: true, + subMenu: [ + { + key: 'calendar-schedule', + label: 'Schedule', + link: '/calendar/schedule', + parentKey: 'apps-calendar', + }, + { + key: 'calendar-integration', + label: 'Integration', + link: '/calendar/integration', + parentKey: 'apps-calendar', + }, + { + key: 'calendar-help', + label: 'Help', + link: '/calendar/help', + parentKey: 'apps-calendar', + }, + ], + }, + { + key: 'apps-todo', + icon: 'iconamoon:ticket-duotone', + label: 'Todo', + link: '/apps/todo', + }, + { + key: 'apps-social', + icon: 'iconamoon:squinting-face-duotone', + label: 'Social', + link: '/apps/social', + badge: { + variant: 'danger', + text: 'Hot', + }, + }, + { + key: 'apps-contacts', + icon: 'iconamoon:profile-circle-duotone', + label: 'Contacts', + link: '/apps/contacts', + }, + { + key: 'apps-invoices', + icon: 'iconamoon:invoice-duotone', + label: 'Invoices', + collapsed: true, + subMenu: [ + { + key: 'invoices', + label: 'Invoices', + link: '/invoices', + parentKey: 'apps-invoices', + }, + { + key: 'invoices-details', + label: 'Invoice Details', + link: '/invoice/RB6985', + parentKey: 'apps-invoices', + }, + ], + }, + { + key: 'custom', + label: 'Custom', + isTitle: true, + }, + { + key: 'pages', + label: 'Pages', + isTitle: false, + icon: 'iconamoon:copy-duotone', + collapsed: true, + subMenu: [ + { + key: 'page-welcome', + label: 'Welcome', + link: '/pages/welcome', + parentKey: 'pages', + }, + { + key: 'page-faqs', + label: 'FAQs', + link: '/pages/faqs', + parentKey: 'pages', + }, + { + key: 'page-profile', + label: 'Profile', + link: '/pages/profile', + parentKey: 'pages', + }, + { + key: 'page-coming-soon', + label: 'Coming Soon', + link: '/coming-soon', + parentKey: 'pages', + }, + { + key: 'page-contact-us', + label: 'Contact Us', + link: '/pages/contact-us', + parentKey: 'pages', + }, + { + key: 'page-about-us', + label: 'About Us', + link: '/pages/about-us', + parentKey: 'pages', + }, + { + key: 'page-our-team', + label: 'Our Team', + link: '/pages/our-team', + parentKey: 'pages', + }, + { + key: 'page-timeline', + label: 'Timeline', + link: '/pages/timeline', + parentKey: 'pages', + }, + { + key: 'page-pricing', + label: 'Pricing', + link: '/pages/pricing', + parentKey: 'pages', + }, + { + key: 'page-maintenance', + label: 'Maintenance', + link: '/maintenance', + parentKey: 'pages', + }, + { + key: 'page-404-error', + label: '404 Error', + link: '/error-404', + parentKey: 'pages', + }, + { + key: 'page-404-error2', + label: '404 Error 2', + link: '/error-404-2', + parentKey: 'pages', + }, + { + key: 'page-error-404-alt', + label: 'Error 404 (alt)', + link: '/pages/error-404-alt', + parentKey: 'pages', + }, + ], + }, + { + key: 'page-authentication', + label: 'Authentication', + isTitle: false, + icon: 'iconamoon:lock-duotone', + collapsed: true, + subMenu: [ + { + key: 'sign-in', + label: 'Sign In', + link: '/auth/sign-in', + parentKey: 'page-authentication', + }, + { + key: 'sign-in-2', + label: 'Sign In 2', + link: '/auth/sign-in-2', + parentKey: 'page-authentication', + }, + { + key: 'signup', + label: 'Sign Up', + link: '/auth/sign-up', + parentKey: 'page-authentication', + }, + { + key: 'signup2', + label: 'Sign Up 2', + link: '/auth/sign-up-2', + parentKey: 'page-authentication', + }, + { + key: 'reset-pass', + label: 'Reset Password', + link: '/auth/reset-pass', + parentKey: 'page-authentication', + }, + { + key: 'reset-pass2', + label: 'Reset Password 2', + link: '/auth/reset-pass-2', + parentKey: 'page-authentication', + }, + { + key: 'lock-screen', + label: 'Lock Screen', + link: '/auth/lock-screen', + parentKey: 'page-authentication', + }, + { + key: 'lock-screen-2', + label: 'Lock Screen 2', + link: '/auth/lock-screen-2', + parentKey: 'page-authentication', + }, + ], + }, + { + key: 'widgets', + icon: 'iconamoon:gift-duotone', + label: 'Widgets', + link: '/widgets', + badge: { + variant: 'info', + text: '9+', + }, + }, + { + key: 'components', + label: 'COMPONENTS', + isTitle: true, + }, + { + key: 'base-ui', + icon: 'iconamoon:briefcase-duotone', + label: 'Base UI', + collapsed: true, + subMenu: [ + { + key: 'base-ui-accordions', + label: 'Accordion', + link: '/ui/accordions', + parentKey: 'base-ui', + }, + { + key: 'base-ui-alerts', + label: 'Alerts', + link: '/ui/alerts', + parentKey: 'base-ui', + }, + { + key: 'base-ui-avatars', + label: 'Avatar', + link: '/ui/avatars', + parentKey: 'base-ui', + }, + { + key: 'base-ui-badges', + label: 'Badge', + link: '/ui/badges', + parentKey: 'base-ui', + }, + { + key: 'base-ui-breadcrumb', + label: 'Breadcrumb', + link: '/ui/breadcrumb', + parentKey: 'base-ui', + }, + { + key: 'base-ui-buttons', + label: 'Buttons', + link: '/ui/buttons', + parentKey: 'base-ui', + }, + { + key: 'base-ui-cards', + label: 'Card', + link: '/ui/cards', + parentKey: 'base-ui', + }, + { + key: 'base-ui-carousel', + label: 'Carousel', + link: '/ui/carousel', + parentKey: 'base-ui', + }, + { + key: 'base-ui-collapse', + label: 'Collapse', + link: '/ui/collapse', + parentKey: 'base-ui', + }, + { + key: 'base-ui-dropdowns', + label: 'Dropdown', + link: '/ui/dropdowns', + parentKey: 'base-ui', + }, + { + key: 'base-ui-list-group', + label: 'List Group', + link: '/ui/list-group', + parentKey: 'base-ui', + }, + { + key: 'base-ui-modals', + label: 'Modal', + link: '/ui/modals', + parentKey: 'base-ui', + }, + { + key: 'base-ui-tabs', + label: 'Tabs', + link: '/ui/tabs', + parentKey: 'base-ui', + }, + { + key: 'base-ui-offcanvas', + label: 'Offcanvas', + link: '/ui/offcanvas', + parentKey: 'base-ui', + }, + { + key: 'base-ui-pagination', + label: 'Pagination', + link: '/ui/pagination', + parentKey: 'base-ui', + }, + { + key: 'base-ui-placeholders', + label: 'Placeholders', + link: '/ui/placeholders', + parentKey: 'base-ui', + }, + { + key: 'base-ui-popovers', + label: 'Popovers', + link: '/ui/popovers', + parentKey: 'base-ui', + }, + { + key: 'base-ui-progress', + label: 'Progress', + link: '/ui/progress', + parentKey: 'base-ui', + }, + { + key: 'base-ui-scrollspy', + label: 'Scrollspy', + link: '/ui/scrollspy', + parentKey: 'base-ui', + }, + { + key: 'base-ui-spinners', + label: 'Spinners', + link: '/ui/spinners', + parentKey: 'base-ui', + }, + { + key: 'base-ui-toasts', + label: 'Toasts', + link: '/ui/toasts', + parentKey: 'base-ui', + }, + { + key: 'base-ui-tooltips', + label: 'Tooltips', + link: '/ui/tooltips', + parentKey: 'base-ui', + }, + ], + }, + { + key: 'advanced-ui', + icon: 'iconamoon:component-duotone', + label: 'Advanced UI', + collapsed: true, + subMenu: [ + { + key: 'advanced-ui-ratings', + label: 'Ratings', + link: '/advanced/ratings', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-sweet-alert', + label: 'Sweet Alert', + link: '/advanced/alert', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-swiper-slider', + label: 'Swiper Slider', + link: '/advanced/swiper', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-scrollbar', + label: 'Scrollbar', + link: '/advanced/scrollbar', + parentKey: 'advanced-ui', + }, + { + key: 'advanced-ui-toastify', + label: 'Toastify', + link: '/advanced/toastify', + parentKey: 'advanced-ui', + }, + ], + }, + { + key: 'charts', + icon: 'iconamoon:3d-duotone', + label: 'Charts', + collapsed: true, + subMenu: [ + { + key: 'charts-area', + label: 'Area', + link: '/charts/area', + parentKey: 'charts', + }, + { + key: 'charts-bar', + label: 'Bar', + link: '/charts/bar', + parentKey: 'charts', + }, + { + key: 'charts-bubble', + label: 'Bubble', + link: '/charts/bubble', + parentKey: 'charts', + }, + { + key: 'charts-candl-stick', + label: 'Candlestick', + link: '/charts/candlestick', + parentKey: 'charts', + }, + { + key: 'charts-column', + label: 'Column', + link: '/charts/column', + parentKey: 'charts', + }, + { + key: 'charts-heatmap', + label: 'Heatmap', + link: '/charts/heatmap', + parentKey: 'charts', + }, + { + key: 'charts-line', + label: 'Line', + link: '/charts/line', + parentKey: 'charts', + }, + { + key: 'charts-mixed', + label: 'Mixed', + link: '/charts/mixed', + parentKey: 'charts', + }, + { + key: 'charts-timeline', + label: 'Timeline', + link: '/charts/timeline', + parentKey: 'charts', + }, + { + key: 'charts-boxplot', + label: 'Boxplot', + link: '/charts/boxplot', + parentKey: 'charts', + }, + { + key: 'charts-treemap', + label: 'Treemap', + link: '/charts/treemap', + parentKey: 'charts', + }, + { + key: 'charts-pie', + label: 'Pie', + link: '/charts/pie', + parentKey: 'charts', + }, + { + key: 'charts-radar', + label: 'Radar', + link: '/charts/radar', + parentKey: 'charts', + }, + { + key: 'charts-radial-bar', + label: 'RadialBar', + link: '/charts/radial-bar', + parentKey: 'charts', + }, + { + key: 'charts-scatter', + label: 'Scatter', + link: '/charts/scatter', + parentKey: 'charts', + }, + { + key: 'charts-polar-area', + label: 'Polar Area', + link: '/charts/polar', + parentKey: 'charts', + }, + ], + }, + { + key: 'forms', + icon: 'iconamoon:cheque-duotone', + label: 'Forms', + collapsed: true, + subMenu: [ + { + key: 'forms-basic-elements', + label: 'Basic Elements', + link: '/forms/basic', + parentKey: 'forms', + }, + { + key: 'forms-checkbox&radio', + label: 'Checkbox & Radio', + link: '/forms/checkbox', + parentKey: 'forms', + }, + { + key: 'forms-choice-select', + label: 'Choice Select', + link: '/forms/select', + parentKey: 'forms', + }, + { + key: 'forms-clipboard', + label: 'Clipboard', + link: '/forms/clipboard', + parentKey: 'forms', + }, + { + key: 'forms-flat-picker', + label: 'Flatpicker', + link: '/forms/flat-picker', + parentKey: 'forms', + }, + { + key: 'forms-validation', + label: 'Validation', + link: '/forms/validation', + parentKey: 'forms', + }, + { + key: 'forms-wizard', + label: 'Wizard', + link: '/forms/wizard', + parentKey: 'forms', + }, + { + key: 'forms-file-uploads', + label: 'File Upload', + link: '/forms/file-uploads', + parentKey: 'forms', + }, + { + key: 'forms-editors', + label: 'Editors', + link: '/forms/editors', + parentKey: 'forms', + }, + { + key: 'forms-input-mask', + label: 'Input Mask', + link: '/forms/input-mask', + parentKey: 'forms', + }, + { + key: 'forms-slider', + label: 'Slider', + link: '/forms/slider', + parentKey: 'forms', + }, + ], + }, + { + key: 'tables', + icon: 'iconamoon:box-duotone', + label: 'Tables', + collapsed: true, + subMenu: [ + { + key: 'tables-basic', + label: 'Basic Tables', + link: '/tables/basic', + parentKey: 'tables', + }, + { + key: 'tables-grid-js', + label: 'Datatables', + link: '/tables/datatable', + parentKey: 'tables', + }, + ], + }, + { + key: 'icons', + icon: 'iconamoon:lightning-1-duotone', + label: 'Icons', + collapsed: true, + subMenu: [ + { + key: 'icons-boxicons', + label: 'Boxicons', + link: '/icons/boxicons', + parentKey: 'icons', + }, + { + key: 'icons-iconamoon', + label: 'IconaMoon Icons', + link: '/icons/iconamoon', + parentKey: 'icons', + }, + ], + }, + { + key: 'maps', + icon: 'iconamoon:location-pin-duotone', + label: 'Maps', + collapsed: true, + subMenu: [ + { + key: 'maps-google', + label: 'Google Maps', + link: '/maps/google', + parentKey: 'maps', + }, + { + key: 'maps-vector', + label: 'Vector Maps', + link: '/maps/vector', + parentKey: 'maps', + }, + ], + }, + { + key: 'badge-menu', + icon: 'iconamoon:badge-duotone', + label: 'Badge Menu', + badge: { + variant: 'danger', + text: '1', + }, + }, + { + key: 'menuitem', + icon: 'iconamoon:folder-add-duotone', + label: 'Menu Item', + collapsed: true, + subMenu: [ + { + key: 'menu-item-1', + label: 'Menu Item 1', + parentKey: 'menuitem', + }, + { + key: 'menu-item-2', + label: 'Menu Item 2', + collapsed: true, + parentKey: 'menuitem', + subMenu: [ + { + key: 'menu-sub-item', + label: 'Menu Sub Item', + parentKey: 'menu-item-2', + }, + ], + }, + ], + }, + { + key: 'disabled-item', + icon: 'iconamoon:unavailable-duotone', + label: 'Disabled Item', + disabled: true, + }, +] diff --git a/apiferia/src/app/components/commonFunction.ts b/apiferia/src/app/components/commonFunction.ts new file mode 100644 index 00000000..e99a0a09 --- /dev/null +++ b/apiferia/src/app/components/commonFunction.ts @@ -0,0 +1,7 @@ +// shuffle chart series +export function shuffleArray(array: any[]): void { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + ;[array[i], array[j]] = [array[j], array[i]] + } +} diff --git a/apiferia/src/app/components/file-uploader/file-uploader.component.ts b/apiferia/src/app/components/file-uploader/file-uploader.component.ts new file mode 100644 index 00000000..77355729 --- /dev/null +++ b/apiferia/src/app/components/file-uploader/file-uploader.component.ts @@ -0,0 +1,129 @@ +import { Component, Input } from '@angular/core' +import { + DROPZONE_CONFIG, + DropzoneConfigInterface, + DropzoneModule, +} from 'ngx-dropzone-wrapper' + +type UploadedFile = { + name: string + size: number + type: string + dataURL?: string +} + +const DEFAULT_DROPZONE_CONFIG: DropzoneConfigInterface = { + // Change this to your upload POST address: + url: 'https://httpbin.org/post', + maxFilesize: 50, + acceptedFiles: 'image/*', +} + +@Component({ + selector: 'FileUploader', + standalone: true, + imports: [DropzoneModule], + template: ` + + + @if (showPreview && uploadedFiles) { + + } + `, + providers: [ + { + provide: DROPZONE_CONFIG, + useValue: DEFAULT_DROPZONE_CONFIG, + }, + ], +}) +export class FileUploaderComponent { + @Input() showPreview: boolean = false + + dropzone = `
+ +

+ Drop files here or click to + upload. +

+ + (This is just a demo + dropzone. Selected files are + not + actually uploaded.) + +
` + dropzoneConfig: DropzoneConfigInterface = { + url: 'https://httpbin.org/post', + maxFilesize: 50, + clickable: true, + addRemoveLinks: true, + } + uploadedFiles: any[] = [] + + ngOnInit(): void { + if (this.showPreview == true) { + this.dropzoneConfig.previewsContainer = false + } + } + // File Upload + imageURL: string = '' + onUploadSuccess(event: UploadedFile[]) { + setTimeout(() => { + this.uploadedFiles.push(event[0]) + }, 0) + } + + // File Remove + removeFile(index: number) { + this.uploadedFiles.splice(index, 1) + } +} diff --git a/apiferia/src/app/components/file-uploader/index.ts b/apiferia/src/app/components/file-uploader/index.ts new file mode 100644 index 00000000..8ab54839 --- /dev/null +++ b/apiferia/src/app/components/file-uploader/index.ts @@ -0,0 +1 @@ +export { FileUploaderComponent } from './file-uploader.component' diff --git a/apiferia/src/app/components/logo-box.component.ts b/apiferia/src/app/components/logo-box.component.ts new file mode 100644 index 00000000..481b1d0d --- /dev/null +++ b/apiferia/src/app/components/logo-box.component.ts @@ -0,0 +1,46 @@ +import { CommonModule } from '@angular/common' +import { Component, Input } from '@angular/core' + +@Component({ + selector: 'app-logo-box', + standalone: true, + imports: [CommonModule], + template: ` +
+ + logo sm + logo dark + + + + logo sm + logo light + +
+ `, +}) +export class LogoBoxComponent { + @Input() className: string = '' + @Input() height: string = '' + @Input() logoHeight: string = '' +} diff --git a/apiferia/src/app/components/page-title.component.ts b/apiferia/src/app/components/page-title.component.ts new file mode 100644 index 00000000..e63f4441 --- /dev/null +++ b/apiferia/src/app/components/page-title.component.ts @@ -0,0 +1,25 @@ +import { Component, Input } from '@angular/core' + +@Component({ + selector: 'app-page-title', + standalone: true, + template: ` +
+
+
+

{{ subtitle }}

+ +
+
+
+ `, +}) +export class PageTitleComponent { + @Input() title: string = '' + @Input() subtitle: string = '' +} diff --git a/apiferia/src/app/components/social-btn/social-btn.component.spec.ts b/apiferia/src/app/components/social-btn/social-btn.component.spec.ts new file mode 100644 index 00000000..ccd67578 --- /dev/null +++ b/apiferia/src/app/components/social-btn/social-btn.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SocialBtnComponent } from './social-btn.component' + +describe('SocialBtnComponent', () => { + let component: SocialBtnComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SocialBtnComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SocialBtnComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/components/social-btn/social-btn.component.ts b/apiferia/src/app/components/social-btn/social-btn.component.ts new file mode 100644 index 00000000..1486dd3d --- /dev/null +++ b/apiferia/src/app/components/social-btn/social-btn.component.ts @@ -0,0 +1,24 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'app-social-btn', + standalone: true, + imports: [], + template: ` +

OR sign with

+ +
+ + + +
+ `, + styles: ``, +}) +export class SocialBtnComponent {} diff --git a/apiferia/src/app/components/state-card/state-card.component.html b/apiferia/src/app/components/state-card/state-card.component.html new file mode 100644 index 00000000..fca44a82 --- /dev/null +++ b/apiferia/src/app/components/state-card/state-card.component.html @@ -0,0 +1,20 @@ +
+ @for (data of stateData; track $index; let last = $last) { +
+
+
+ +

${{ data.amount }}k

+

{{ data.title }}

+ {{ data.badge }}% + +
+
+
+ } +
diff --git a/apiferia/src/app/components/state-card/state-card.component.spec.ts b/apiferia/src/app/components/state-card/state-card.component.spec.ts new file mode 100644 index 00000000..04913886 --- /dev/null +++ b/apiferia/src/app/components/state-card/state-card.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { StateCardComponent } from './state-card.component' + +describe('StateCardComponent', () => { + let component: StateCardComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [StateCardComponent], + }).compileComponents() + + fixture = TestBed.createComponent(StateCardComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/components/state-card/state-card.component.ts b/apiferia/src/app/components/state-card/state-card.component.ts new file mode 100644 index 00000000..570df0c5 --- /dev/null +++ b/apiferia/src/app/components/state-card/state-card.component.ts @@ -0,0 +1,58 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' + +@Component({ + selector: 'state-card', + standalone: true, + imports: [], + templateUrl: './state-card.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class StateCardComponent { + stateData = [ + { + icon: 'iconamoon:shopping-card-add-duotone', + iconColor: 'info', + amount: '59.6', + title: 'Total Sales', + badge: '8.72', + badgeColor: 'success', + badgeIcon: 'bx bx-doughnut-chart', + }, + { + icon: 'iconamoon:link-external-duotone', + iconColor: 'success', + amount: '24.03', + title: 'Total Expenses', + badge: '3.28', + badgeColor: 'danger', + badgeIcon: 'bx bx-bar-chart-alt-2', + }, + { + icon: 'iconamoon:store-duotone', + iconColor: 'purple', + amount: '48.7', + title: 'Investments', + badge: '5.69', + badgeColor: 'danger', + badgeIcon: 'bx bx-building-house', + }, + { + icon: 'iconamoon:gift-duotone', + iconColor: 'orange', + amount: '11.3', + title: 'Profit', + badge: '10.58', + badgeColor: 'success', + badgeIcon: 'bx bx-bowl-hot', + }, + { + icon: 'iconamoon:certificate-badge-duotone', + iconColor: 'warning', + amount: '5.06', + title: 'Savings', + badge: '8.72', + badgeColor: 'success', + badgeIcon: 'bx bx-cricket-ball', + }, + ] +} diff --git a/apiferia/src/app/components/swiper-directive.component.ts b/apiferia/src/app/components/swiper-directive.component.ts new file mode 100644 index 00000000..4b80ac1d --- /dev/null +++ b/apiferia/src/app/components/swiper-directive.component.ts @@ -0,0 +1,24 @@ +import { AfterViewInit, Directive, ElementRef, Input } from '@angular/core' +import type { SwiperOptions } from 'swiper/types/swiper-options' + +@Directive({ + selector: 'swiper-container', + standalone: true, +}) +export class SwiperDirective implements AfterViewInit { + private readonly swiperElement: HTMLElement + + @Input('config') config?: SwiperOptions + + constructor( + private el: ElementRef void }> + ) { + this.swiperElement = el.nativeElement + } + + ngAfterViewInit() { + Object.assign(this.el.nativeElement, this.config) + + this.el.nativeElement.initialize() + } +} diff --git a/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.html b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.html new file mode 100644 index 00000000..8aa9518c --- /dev/null +++ b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.html @@ -0,0 +1,14 @@ +
+ +
diff --git a/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.spec.ts b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.spec.ts new file mode 100644 index 00000000..5f061467 --- /dev/null +++ b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' +import { UIExamplesListComponent } from './ui-examples-list.component' + +describe('UIExamplesListComponent', () => { + let component: UIExamplesListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [UIExamplesListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(UIExamplesListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.ts b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.ts new file mode 100644 index 00000000..e3e788a4 --- /dev/null +++ b/apiferia/src/app/components/ui-examples-list/ui-examples-list.component.ts @@ -0,0 +1,24 @@ +import { AfterViewInit, Component, Input } from '@angular/core' +import Gumshoe from 'gumshoejs' + +@Component({ + selector: 'ui-examples-list', + standalone: true, + templateUrl: './ui-examples-list.component.html', +}) +export class UIExamplesListComponent implements AfterViewInit { + @Input() linkList: { label: string; link: string }[] | undefined + + ngAfterViewInit() { + if (document.querySelector('.docs-nav a')) new Gumshoe('.docs-nav a') + } + + scrollToSection(event: Event, link: string) { + event.preventDefault() + const targetId = link.substring(1) + const targetElement = document.getElementById(targetId) + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' }) + } + } +} diff --git a/apiferia/src/app/components/vector-maps/world-vector-map.component.ts b/apiferia/src/app/components/vector-maps/world-vector-map.component.ts new file mode 100644 index 00000000..592fe5a9 --- /dev/null +++ b/apiferia/src/app/components/vector-maps/world-vector-map.component.ts @@ -0,0 +1,35 @@ +import { AfterViewInit, Component, Input, OnDestroy } from '@angular/core' + +declare global { + interface Window { + jsVectorMap?: any + } +} + +@Component({ + selector: 'app-world-vector-map', + standalone: true, + template: + '
', +}) +export class WorldVectorMapComponent implements AfterViewInit { + @Input() width: string = '' + @Input() height: string = '' + @Input() options: Record = {} + @Input() type: string = '' + @Input() mapId: string = 'map' + + constructor() {} + + ngOnInit(): void {} + + ngAfterViewInit(): void { + setTimeout(() => { + new (window as Window).jsVectorMap({ + selector: '#' + this.mapId, + map: this.type, + ...this.options, + }) + }, 200) + } +} diff --git a/apiferia/src/app/core/guards/role.guard.ts b/apiferia/src/app/core/guards/role.guard.ts new file mode 100644 index 00000000..dd4df5bf --- /dev/null +++ b/apiferia/src/app/core/guards/role.guard.ts @@ -0,0 +1,27 @@ +import { Injectable } from '@angular/core'; +import { Router, CanActivate, ActivatedRouteSnapshot } from '@angular/router'; +import { AuthenticationService } from '../services/auth.service'; + +@Injectable({ providedIn: 'root' }) +export class RoleGuard implements CanActivate { + constructor( + private router: Router, + private authService: AuthenticationService + ) {} + + canActivate(route: ActivatedRouteSnapshot): boolean { + const requiredRoles = route.data['roles'] as string[]; + + if (!requiredRoles || requiredRoles.length === 0) { + return true; + } + + if (this.authService.hasRole(requiredRoles)) { + return true; + } + + // No tiene el rol requerido + this.router.navigate(['/']); + return false; + } +} diff --git a/apiferia/src/app/core/interceptors/auth.interceptor.ts b/apiferia/src/app/core/interceptors/auth.interceptor.ts new file mode 100644 index 00000000..c4f70f24 --- /dev/null +++ b/apiferia/src/app/core/interceptors/auth.interceptor.ts @@ -0,0 +1,45 @@ +import { Injectable } from '@angular/core' +import { + HttpRequest, + HttpHandler, + HttpEvent, + HttpInterceptor, + HttpErrorResponse +} from '@angular/common/http' +import { Observable, throwError } from 'rxjs' +import { catchError } from 'rxjs/operators' +import { Router } from '@angular/router' +import { Store } from '@ngrx/store' +import { logout } from '@/app/store/authentication/authentication.actions' + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + constructor( + private router: Router, + private store: Store + ) {} + + intercept(request: HttpRequest, next: HttpHandler): Observable> { + // Obtener el token + const token = localStorage.getItem('access_token') + + // Si hay token, agregarlo al header + if (token) { + request = request.clone({ + setHeaders: { + Authorization: `Bearer ${token}` + } + }) + } + + return next.handle(request).pipe( + catchError((error: HttpErrorResponse) => { + if (error.status === 401) { + // Token expirado o inválido + this.store.dispatch(logout()) + } + return throwError(() => error) + }) + ) + } +} diff --git a/apiferia/src/app/core/services/api/vehicles.service.ts b/apiferia/src/app/core/services/api/vehicles.service.ts new file mode 100644 index 00000000..14fcf54a --- /dev/null +++ b/apiferia/src/app/core/services/api/vehicles.service.ts @@ -0,0 +1,62 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { Observable } from 'rxjs'; + +export interface Vehicle { + id: string; + dealerId: string; + brand: string; + model: string; + year: number; + mileage: number; + condition: string; + price: number; + status: string; + qrCode?: string; + viewsCount: number; + scansCount: number; + createdAt?: Date; + updatedAt?: Date; +} + +@Injectable({ + providedIn: 'root' +}) +export class VehiclesService { + private endpoint = '/api/vehicles'; + + constructor(private http: HttpClient) {} + + getAll(): Observable { + return this.http.get(this.endpoint); + } + + getById(id: string): Observable { + return this.http.get(`${this.endpoint}/${id}`); + } + + create(vehicle: Partial): Observable { + return this.http.post(this.endpoint, vehicle); + } + + update(id: string, vehicle: Partial): Observable { + return this.http.patch(`${this.endpoint}/${id}`, vehicle); + } + + delete(id: string): Observable { + return this.http.delete(`${this.endpoint}/${id}`); + } + + // Métodos adicionales específicos de vehículos + getByDealer(dealerId: string): Observable { + return this.http.get(`${this.endpoint}/dealer/${dealerId}`); + } + + generateQR(id: string): Observable<{qrCode: string}> { + return this.http.post<{qrCode: string}>(`${this.endpoint}/${id}/generate-qr`, {}); + } + + updateStatus(id: string, status: string): Observable { + return this.http.patch(`${this.endpoint}/${id}/status`, { status }); + } +} diff --git a/apiferia/src/app/core/services/auth.service.ts b/apiferia/src/app/core/services/auth.service.ts new file mode 100644 index 00000000..d9d567e7 --- /dev/null +++ b/apiferia/src/app/core/services/auth.service.ts @@ -0,0 +1,61 @@ +import { Injectable, inject } from '@angular/core' +import { HttpClient } from '@angular/common/http' +import { map } from 'rxjs/operators' +import { CookieService } from 'ngx-cookie-service' +import { User } from '@/app/store/authentication/auth.model' + +@Injectable({ providedIn: 'root' }) +export class AuthenticationService { + user: User | null = null + public readonly authSessionKey = '_REBACK_AUTH_SESSION_KEY_' + private cookieService = inject(CookieService) + + constructor(private http: HttpClient) { + // Recuperar usuario si existe + const savedUser = localStorage.getItem('currentUser'); + if (savedUser) { + this.user = JSON.parse(savedUser); + } + } + + login(email: string, password: string) { + return this.http.post(`/api/login`, { email, password }).pipe( + map((user) => { + if (user && user.token) { + this.user = user + this.saveSession(user.token) + } + return user + }) + ) + } + + logout(): void { + this.removeSession() + localStorage.removeItem('access_token') + localStorage.removeItem('currentUser') + this.user = null + } + + get session(): string { + return this.cookieService.get(this.authSessionKey) || localStorage.getItem('access_token') || '' + } + + saveSession(token: string): void { + this.cookieService.set(this.authSessionKey, token) + localStorage.setItem('access_token', token) + } + + removeSession(): void { + this.cookieService.delete(this.authSessionKey) + } + + getCurrentUser(): User | null { + return this.user || JSON.parse(localStorage.getItem('currentUser') || '{}') + } + + hasRole(roles: string[]): boolean { + const user = this.getCurrentUser(); + return user && user.role ? roles.includes(user.role) : false; + } +} diff --git a/apiferia/src/app/core/services/crud.service.ts b/apiferia/src/app/core/services/crud.service.ts new file mode 100644 index 00000000..bfce96bb --- /dev/null +++ b/apiferia/src/app/core/services/crud.service.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core' +import { Observable, of } from 'rxjs' + +import { defaultEvents } from '@/app/store/calendar/data' +import type { EventInput } from '@fullcalendar/core' + +@Injectable({ providedIn: 'root' }) +export class CrudService { + constructor() {} + + /*** + * Get + */ + fetchCalendarEvents(): Observable { + return of(defaultEvents) + } + + addCalendarEvents(newData: EventInput): Observable { + let newEvents = [...defaultEvents, newData] // Create a new array by spreading defaultEvents and adding newData + return of(newEvents) + } + + updateCalendarEvents(updatedData: EventInput): Observable { + const index = defaultEvents.findIndex((item) => item.id === updatedData.id) + let updatedEvents = defaultEvents.slice() + if (index !== -1) { + updatedEvents[index] = updatedData + } + return of(updatedEvents) + } + + deleteCalendarEvents(id: string): Observable { + return of(defaultEvents.filter((item) => item.id !== id)) + } +} diff --git a/apiferia/src/app/core/services/pagination.services.ts b/apiferia/src/app/core/services/pagination.services.ts new file mode 100644 index 00000000..747c3a60 --- /dev/null +++ b/apiferia/src/app/core/services/pagination.services.ts @@ -0,0 +1,35 @@ +import { Injectable } from '@angular/core' + +@Injectable({ + providedIn: 'root', +}) +export class PaginationService { + page = 1 + startIndex: number = 0 + endIndex: number = 0 + + constructor() {} + + refreshData(displayList: any[], data: any[], pageSize: number) { + this.startIndex = (this.page - 1) * pageSize + 1 + this.endIndex = (this.page - 1) * pageSize + pageSize + + displayList = data + .map((item: any, i: number) => ({ id: i + 1, ...item })) + .slice(this.startIndex - 1, this.endIndex) + return displayList + } + + searchTerm(displayList: any[], data: any[], searchQuery: string) { + if (searchQuery) { + displayList = data.filter((item) => + Object.values(item).some((value: any) => + value.toString().toLowerCase().includes(searchQuery.toLowerCase()) + ) + ) + } else { + displayList = data + } + return displayList + } +} diff --git a/apiferia/src/app/core/services/table.service.ts b/apiferia/src/app/core/services/table.service.ts new file mode 100644 index 00000000..98e2e48f --- /dev/null +++ b/apiferia/src/app/core/services/table.service.ts @@ -0,0 +1,182 @@ +import type { SortDirection } from '@/app/directive/sortable.directive' +import { DecimalPipe } from '@angular/common' +import { inject, Injectable, PipeTransform } from '@angular/core' +import { BehaviorSubject, Observable, of, Subject } from 'rxjs' +import { debounceTime, delay, switchMap, tap } from 'rxjs/operators' + +interface SearchResult { + items: T[] + total: number +} + +interface State { + page: number + startIndex: number + endIndex: number + pageSize: number + searchTerm: string + sortColumn: keyof T | '' + sortDirection: SortDirection +} + +function matches(items: any, term: string, searchFields: (keyof T)[]) { + if (!term) return true + term = term.toLowerCase() + + for (const field of searchFields) { + const value = (items[field] as unknown as string)?.toString().toLowerCase() + if (value?.includes(term)) { + return true + } + } + return false +} + +function compare(v1: T, v2: T): number { + return v1 < v2 ? -1 : v1 > v2 ? 1 : 0 +} + +@Injectable({ + providedIn: 'root', +}) +export class TableService { + private _loading$ = new BehaviorSubject(true) + private _search$ = new Subject() + private _items$ = new BehaviorSubject([]) + private _total$ = new BehaviorSubject(0) + + items: T[] = [] + private _state: State = { + page: 1, + pageSize: 10, + searchTerm: '', + startIndex: 1, + endIndex: 10, + sortColumn: '', + sortDirection: '', + } + + public pipe = inject(DecimalPipe) + constructor() { + this._search$ + .pipe( + tap(() => this._loading$.next(true)), + debounceTime(200), + switchMap(() => this._search()), + delay(0), + tap(() => this._loading$.next(false)) + ) + .subscribe((result) => { + this._items$.next(result.items) + this._total$.next(result.total) + }) + + this._search$.next() + } + + get items$(): Observable { + return this._items$.asObservable() + } + + get total$(): Observable { + return this._total$.asObservable() + } + + get loading$(): Observable { + return this._loading$.asObservable() + } + + get page(): number { + return this._state.page + } + + get startIndex(): number { + return this._state.startIndex + } + + get endIndex(): number { + return this._state.endIndex + } + + get pageSize(): number { + return this._state.pageSize + } + + get searchTerm(): string { + return this._state.searchTerm + } + + get sortColumn(): keyof T | '' { + return this._state.sortColumn + } + + get sortDirection(): SortDirection { + return this._state.sortDirection + } + + set page(page: number) { + this._set({ page }) + } + + set startIndex(startIndex: number) { + this._set({ startIndex }) + } + set endIndex(endIndex: number) { + this._set({ endIndex }) + } + + set pageSize(pageSize: number) { + this._set({ pageSize }) + } + + set searchTerm(searchTerm: string) { + this._set({ searchTerm }) + } + + set sortColumn(sortColumn: keyof T | '') { + this._set({ sortColumn }) + } + + set sortDirection(sortDirection: SortDirection) { + this._set({ sortDirection }) + } + + setItems(items: T[], pageSize: number): void { + this.items = items + this._set({ pageSize }) + this._set({ endIndex: pageSize }) + } + + private _set(patch: Partial>): void { + Object.assign(this._state, patch) + this._search$.next() + } + + private _search(): Observable> { + const { pageSize, page, searchTerm, sortColumn, sortDirection } = + this._state + const searchableFields = Object.keys(this.items[0]) as (keyof T)[] + + // filter + let filteredItems = this.items.filter((item) => + matches(item, searchTerm, searchableFields) + ) + + // Sort + if (sortColumn) { + filteredItems = [...filteredItems].sort((a, b) => { + const res = compare(a[sortColumn], b[sortColumn]) + return sortDirection === 'asc' ? res : -res + }) + } + + const total = filteredItems.length + + // Paginate the items + this.startIndex = (page - 1) * pageSize + this.endIndex = this.startIndex + pageSize + const paginatedItems = filteredItems.slice(this.startIndex, this.endIndex) + this._loading$.next(false) + return of({ items: paginatedItems, total }) + } +} diff --git a/apiferia/src/app/core/services/title.service.ts b/apiferia/src/app/core/services/title.service.ts new file mode 100644 index 00000000..36e2d786 --- /dev/null +++ b/apiferia/src/app/core/services/title.service.ts @@ -0,0 +1,38 @@ +// title.service.ts +import { Injectable } from '@angular/core' +import { Title } from '@angular/platform-browser' +import { ActivatedRoute, NavigationEnd, Router } from '@angular/router' +import { filter } from 'rxjs/operators' + +@Injectable({ + providedIn: 'root', +}) +export class TitleService { + constructor( + private titleService: Title, + private router: Router, + private activatedRoute: ActivatedRoute + ) {} + + init(): void { + this.router.events + .pipe(filter((event) => event instanceof NavigationEnd)) + .subscribe(() => { + this.updateTitle() + }) + } + + private updateTitle(): void { + let route = this.activatedRoute + while (route.firstChild) { + route = route.firstChild + } + + if (route.snapshot.data['title']) { + this.titleService.setTitle( + route.snapshot.data['title'] + + ' | Reback - Responsive Angular Admin Dashboard Template' + ) + } + } +} diff --git a/apiferia/src/app/directive/flatpickr.directive.ts b/apiferia/src/app/directive/flatpickr.directive.ts new file mode 100644 index 00000000..36c73a78 --- /dev/null +++ b/apiferia/src/app/directive/flatpickr.directive.ts @@ -0,0 +1,21 @@ +import { Directive, ElementRef, Input, OnInit } from '@angular/core' +import flatpickr from 'flatpickr' +import { Options } from 'flatpickr/dist/types/options' + +@Directive({ + selector: '[mwlFlatpickr]', + standalone: true, +}) +export class FlatpickrDirective implements OnInit { + @Input() flatpickrOptions: Options = {} + + constructor(private el: ElementRef) {} + + ngOnInit() { + this.initFlatpickr() + } + + private initFlatpickr() { + flatpickr(this.el.nativeElement, this.flatpickrOptions) + } +} diff --git a/apiferia/src/app/directive/iconify.component.ts b/apiferia/src/app/directive/iconify.component.ts new file mode 100644 index 00000000..bca55d10 --- /dev/null +++ b/apiferia/src/app/directive/iconify.component.ts @@ -0,0 +1,37 @@ +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + Input, + ViewChild, + ElementRef, + type AfterViewInit, +} from '@angular/core' +import { getIcon, loadIcon, buildIcon } from 'iconify-icon' +import { getIconData, iconToSVG, iconToHTML, replaceIDs } from '@iconify/utils' + +@Component({ + selector: 'ng-iconify', + standalone: true, + imports: [], + template: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], + styles: ` + :host(ng-iconify) { + display: contents; + } + `, +}) +export class IconifyComponent implements AfterViewInit { + @Input() icon: string = '' + @ViewChild('iconTemplate') iconTemplate!: ElementRef + + svg = '' + + ngAfterViewInit(): void { + const builtIcon = buildIcon(getIcon(this.icon)) + this.svg = iconToHTML(builtIcon.body, builtIcon.attributes) + this.iconTemplate.nativeElement.innerHTML = this.svg + } + + ngOnInit(): void {} +} diff --git a/apiferia/src/app/directive/select-form-input.directive.ts b/apiferia/src/app/directive/select-form-input.directive.ts new file mode 100644 index 00000000..ca927588 --- /dev/null +++ b/apiferia/src/app/directive/select-form-input.directive.ts @@ -0,0 +1,33 @@ +import { Directive, ElementRef, Input, type OnInit } from '@angular/core' +import Choices, { Options as ChoiceOption } from 'choices.js' + +export type SelectOptions = Partial + +@Directive({ + selector: '[selectFormInput]', + standalone: true, +}) +export class SelectFormInputDirective implements OnInit { + @Input() className?: string + @Input() onChange?: (text: string) => void + @Input() options?: SelectOptions + + constructor(private eleRef: ElementRef) {} + + ngOnInit(): void { + const choices = new Choices(this.eleRef.nativeElement, { + ...this.options, + placeholder: true, + placeholderValue: 'Type and hit enter', + allowHTML: true, + shouldSort: false, + }) + + choices.passedElement.element.addEventListener('change', (e: Event) => { + if (!(e.target instanceof HTMLSelectElement)) return + if (this.onChange) { + this.onChange(e.target.value) + } + }) + } +} diff --git a/apiferia/src/app/directive/sortable.directive.ts b/apiferia/src/app/directive/sortable.directive.ts new file mode 100644 index 00000000..7ac041dc --- /dev/null +++ b/apiferia/src/app/directive/sortable.directive.ts @@ -0,0 +1,33 @@ +import { Directive, EventEmitter, Input, Output } from '@angular/core' + +export type SortDirection = 'asc' | 'desc' | '' +const rotate: { [key: string]: SortDirection } = { + asc: 'desc', + desc: '', + '': 'asc', +} + +export interface SortEvent { + column: keyof T | '' + direction: SortDirection +} + +@Directive({ + selector: 'th[sortable]', + standalone: true, + host: { + '[class.asc]': 'direction === "asc"', + '[class.desc]': 'direction === "desc"', + '(click)': 'rotate()', + }, +}) +export class NgbdSortableHeader { + @Input() sortable: keyof T | '' = '' + @Input() direction: SortDirection = '' + @Output() sort = new EventEmitter>() + + rotate() { + this.direction = rotate[this.direction] + this.sort.emit({ column: this.sortable, direction: this.direction }) + } +} diff --git a/apiferia/src/app/helpers/countDown.ts b/apiferia/src/app/helpers/countDown.ts new file mode 100644 index 00000000..b9a7e580 --- /dev/null +++ b/apiferia/src/app/helpers/countDown.ts @@ -0,0 +1,18 @@ +const eventDate = new Date('Jan 17, 2026 12:00:01') + +const calculateTimeToEvent = () => { + const currentDate = new Date() + + const timeRemaining = eventDate.getTime() - currentDate.getTime() + + const days = Math.floor(timeRemaining / (1000 * 60 * 60 * 24)) + const hours = Math.floor( + (timeRemaining % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60) + ) + const minutes = Math.floor((timeRemaining % (1000 * 60 * 60)) / (1000 * 60)) + const seconds = Math.floor((timeRemaining % (1000 * 60)) / 1000) + + return { days, hours, minutes, seconds } +} + +export default calculateTimeToEvent diff --git a/apiferia/src/app/helpers/fake-backend.ts b/apiferia/src/app/helpers/fake-backend.ts new file mode 100644 index 00000000..4fb7a102 --- /dev/null +++ b/apiferia/src/app/helpers/fake-backend.ts @@ -0,0 +1,138 @@ +import { User } from "@/app/store/authentication/auth.model" +import { Injectable } from '@angular/core' +import { + HttpRequest, + HttpResponse, + HttpHandler, + HttpEvent, + HttpInterceptor, + HTTP_INTERCEPTORS, + HttpClient, + HttpHeaders, +} from '@angular/common/http' +import { Observable, throwError } from 'rxjs' +import { catchError, map } from 'rxjs/operators' +import { environment } from '../../environments/environment' + + +@Injectable() +export class FakeBackendInterceptor implements HttpInterceptor { + private apiUrl = environment.apiUrl; + + constructor(private http: HttpClient) {} + + intercept( + request: HttpRequest, + next: HttpHandler + ): Observable> { + + // Solo interceptar llamadas a /api + if (!request.url.includes('/api/')) { + return next.handle(request); + } + + // Obtener el token del localStorage + const token = localStorage.getItem('access_token'); + + // Construir la URL real + const apiEndpoint = request.url.replace('/api/', '/'); + const fullUrl = `${this.apiUrl}${apiEndpoint}`; + + // Clonar la petición con la nueva URL y headers + let headers = new HttpHeaders({ + 'Content-Type': 'application/json' + }); + + if (token && !request.url.includes('/auth/')) { + headers = headers.set('Authorization', `Bearer ${token}`); + } + + const apiReq = request.clone({ + url: fullUrl, + headers: headers + }); + + // Manejar login especialmente + if (request.url.endsWith('/api/login') && request.method === 'POST') { + return this.http.post(`${this.apiUrl}/auth/login`, request.body).pipe( + map(response => { + if (response && response.access_token) { + // Guardar token y usuario + localStorage.setItem('access_token', response.access_token); + localStorage.setItem('currentUser', JSON.stringify(response.user)); + + // Retornar en el formato esperado por el template + return new HttpResponse({ + status: 200, + body: { + ...response.user, + token: response.access_token, + name: response.user.firstName + ' ' + response.user.lastName + } + }); + } + return new HttpResponse({ status: 200, body: response }); + }), + catchError(error => { + console.error('Login error:', error); + return throwError({ + status: error.status || 400, + error: { message: error.error?.message || 'Error al iniciar sesión' } + }); + }) + ); + } + + // Manejar registro + if (request.url.endsWith('/api/signup') && request.method === 'POST') { + const [firstName, lastName] = request.body?.name?.split(' ') || ['', '']; + const registerData = { + ...request.body, + firstName, + lastName, + role: 'cliente' // Rol por defecto + }; + + return this.http.post(`${this.apiUrl}/auth/register`, registerData).pipe( + map(response => { + return new HttpResponse({ + status: 200, + body: response + }); + }), + catchError(error => { + return throwError({ + status: error.status || 400, + error: { message: error.error?.message || 'Error al registrar usuario' } + }); + }) + ); + } + + // Para todas las demás peticiones, enviarlas a la API real + return this.http.request(apiReq.method, apiReq.url, { + body: apiReq.body, + headers: apiReq.headers, + observe: 'response', + responseType: 'json' + }).pipe( + map(response => { + return response; + }), + catchError(error => { + // Si es error 401, limpiar sesión + if (error.status === 401) { + localStorage.removeItem('access_token'); + localStorage.removeItem('currentUser'); + } + return throwError(error); + }) + ); + } +} + +export let FakeBackendProvider = { + provide: HTTP_INTERCEPTORS, + useClass: FakeBackendInterceptor, + multi: true, +} diff --git a/apiferia/src/app/helpers/utils.ts b/apiferia/src/app/helpers/utils.ts new file mode 100644 index 00000000..1e8a0be9 --- /dev/null +++ b/apiferia/src/app/helpers/utils.ts @@ -0,0 +1,35 @@ +import type { MenuItem } from '../common/menu-meta' + +export const findAllParent = (menuItems: MenuItem[], menuItem: any): any => { + let parents = [] + const parent = findMenuItem(menuItems, menuItem['parentKey']) + + if (parent) { + parents.push(parent['key']) + if (parent['parentKey']) + parents = [...parents, ...findAllParent(menuItems, parent)] + } + return parents +} + +export const findMenuItem = ( + menuItems: MenuItem[], + menuItemKey: string +): any => { + if (menuItems && menuItemKey) { + for (var i = 0; i < menuItems.length; i++) { + if (menuItems[i].key === menuItemKey) { + return menuItems[i] + } + var found = findMenuItem(menuItems[i].subMenu, menuItemKey) + if (found) return found + } + } + return null +} + +export function addOrSubtractDaysFromDate(days: number): Date { + const result = new Date() + result.setDate(result.getDate() + days) + return result +} diff --git a/apiferia/src/app/layouts/auth-layout/auth-layout.component.spec.ts b/apiferia/src/app/layouts/auth-layout/auth-layout.component.spec.ts new file mode 100644 index 00000000..eefe4481 --- /dev/null +++ b/apiferia/src/app/layouts/auth-layout/auth-layout.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AuthLayoutComponent } from './auth-layout.component' + +describe('AuthLayoutComponent', () => { + let component: AuthLayoutComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AuthLayoutComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AuthLayoutComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/auth-layout/auth-layout.component.ts b/apiferia/src/app/layouts/auth-layout/auth-layout.component.ts new file mode 100644 index 00000000..f40b9bf3 --- /dev/null +++ b/apiferia/src/app/layouts/auth-layout/auth-layout.component.ts @@ -0,0 +1,31 @@ +import { + Component, + inject, + Renderer2, + type OnDestroy, + type OnInit, +} from '@angular/core' +import { RouterModule } from '@angular/router' + +@Component({ + selector: 'app-auth-layout', + standalone: true, + imports: [RouterModule], + template: ` `, + styles: ``, +}) +export class AuthLayoutComponent implements OnInit, OnDestroy { + private renderer = inject(Renderer2) + + ngOnInit(): void { + this.renderer.addClass(document.body, 'authentication-bg') + } + + ngOnDestroy(): void { + this.renderer.removeClass(document.body, 'authentication-bg') + } +} diff --git a/apiferia/src/app/layouts/footer/footer.component.html b/apiferia/src/app/layouts/footer/footer.component.html new file mode 100644 index 00000000..2e493342 --- /dev/null +++ b/apiferia/src/app/layouts/footer/footer.component.html @@ -0,0 +1,17 @@ + diff --git a/apiferia/src/app/layouts/footer/footer.component.spec.ts b/apiferia/src/app/layouts/footer/footer.component.spec.ts new file mode 100644 index 00000000..ab3cb858 --- /dev/null +++ b/apiferia/src/app/layouts/footer/footer.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FooterComponent } from './footer.component' + +describe('FooterComponent', () => { + let component: FooterComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FooterComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FooterComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/footer/footer.component.ts b/apiferia/src/app/layouts/footer/footer.component.ts new file mode 100644 index 00000000..44bf5ab1 --- /dev/null +++ b/apiferia/src/app/layouts/footer/footer.component.ts @@ -0,0 +1,15 @@ +import { credits, currentYear } from '@/app/common/constants' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' + +@Component({ + selector: 'app-footer', + standalone: true, + imports: [], + templateUrl: './footer.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class FooterComponent { + year = currentYear + credits = credits +} diff --git a/apiferia/src/app/layouts/private-layout/private-layout.component.spec.ts b/apiferia/src/app/layouts/private-layout/private-layout.component.spec.ts new file mode 100644 index 00000000..16f40ce7 --- /dev/null +++ b/apiferia/src/app/layouts/private-layout/private-layout.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PrivateLayoutComponent } from './private-layout.component' + +describe('PrivateLayoutComponent', () => { + let component: PrivateLayoutComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PrivateLayoutComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PrivateLayoutComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/private-layout/private-layout.component.ts b/apiferia/src/app/layouts/private-layout/private-layout.component.ts new file mode 100644 index 00000000..19469c5c --- /dev/null +++ b/apiferia/src/app/layouts/private-layout/private-layout.component.ts @@ -0,0 +1,30 @@ +import { Component, inject } from '@angular/core' +import { Store } from '@ngrx/store' +import { VerticalComponent } from '../vertical/vertical.component' + +@Component({ + selector: 'app-private-layout', + standalone: true, + imports: [VerticalComponent], + template: ` `, + styles: ``, +}) +export class PrivateLayoutComponent { + layoutType: any + + private store = inject(Store) + + ngOnInit(): void { + this.store.select('layout').subscribe((data) => { + this.layoutType = data.LAYOUT + document.documentElement.setAttribute('data-bs-theme', data.LAYOUT_THEME) + + document.documentElement.setAttribute('data-menu-color', data.MENU_COLOR) + document.documentElement.setAttribute( + 'data-topbar-color', + data.TOPBAR_COLOR + ) + document.documentElement.setAttribute('data-menu-size', data.MENU_SIZE) + }) + } +} diff --git a/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.html b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.html new file mode 100644 index 00000000..04758b14 --- /dev/null +++ b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.html @@ -0,0 +1,217 @@ +
+
+
+
Theme Settings
+ +
+ +
+ +
+
+
Color Scheme
+ +
+ + +
+
+ + +
+
+ +
+
Topbar Color
+ +
+ + +
+ +
+ + +
+
+ +
+
Menu Color
+ +
+ + +
+ +
+ + +
+
+ +
+
Sidebar Size
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+
+ +
+
diff --git a/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.spec.ts b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.spec.ts new file mode 100644 index 00000000..ffe63b11 --- /dev/null +++ b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RightSidebarComponent } from './right-sidebar.component' + +describe('RightSidebarComponent', () => { + let component: RightSidebarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RightSidebarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RightSidebarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.ts b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.ts new file mode 100644 index 00000000..a24f304e --- /dev/null +++ b/apiferia/src/app/layouts/right-sidebar/right-sidebar.component.ts @@ -0,0 +1,82 @@ +import { Component, inject } from '@angular/core' +import { NgbActiveOffcanvas } from '@ng-bootstrap/ng-bootstrap' +import { Store } from '@ngrx/store' +import { SimplebarAngularModule } from 'simplebar-angular' +import { + changemenucolor, + changesidebarsize, + changetheme, + changetopbarcolor, + resetState, +} from '../../store/layout/layout-action' +import { + getLayoutColor, + getMenucolor, + getSidebarsize, + getTopbarcolor, +} from '../../store/layout/layout-selector' + +@Component({ + selector: 'app-right-sidebar', + standalone: true, + imports: [SimplebarAngularModule], + templateUrl: './right-sidebar.component.html', + styles: ``, +}) +export class RightSidebarComponent { + public isRightSidebarOpen: boolean = false + + offcanvas = inject(NgbActiveOffcanvas) + store = inject(Store) + + color: any + topbar: any + menucolor: any + sidebarsize: any + + ngOnInit(): void { + this.store.select('layout').subscribe((data: any) => { + this.color = data.LAYOUT_THEME + this.topbar = data.TOPBAR_COLOR + this.menucolor = data.MENU_COLOR + this.sidebarsize = data.MENU_SIZE + }) + } + + // Change Layout Color + changeLayoutColor(color: any) { + this.store.dispatch(changetheme({ color })) + this.store.select(getLayoutColor).subscribe((color) => { + document.documentElement.setAttribute('data-bs-theme', color) + }) + } + + // Change Topbar Color + changeTopbar(topbar: any) { + this.store.dispatch(changetopbarcolor({ topbar })) + this.store.select(getTopbarcolor).subscribe((topbar) => { + document.documentElement.setAttribute('data-topbar-color', topbar) + }) + } + + // Change Menu Color + changeMenu(menu: any) { + this.store.dispatch(changemenucolor({ menu })) + this.store.select(getMenucolor).subscribe((menucolor) => { + document.documentElement.setAttribute('data-menu-color', menucolor) + }) + } + + // Change Sidebar Size + changeSize(size: any) { + this.store.dispatch(changesidebarsize({ size })) + this.store.select(getSidebarsize).subscribe((size) => { + document.documentElement.setAttribute('data-menu-size', size) + }) + } + + // Reset Option + reset() { + this.store.dispatch(resetState()) + } +} diff --git a/apiferia/src/app/layouts/sidebar/sidebar.component.html b/apiferia/src/app/layouts/sidebar/sidebar.component.html new file mode 100644 index 00000000..e719258d --- /dev/null +++ b/apiferia/src/app/layouts/sidebar/sidebar.component.html @@ -0,0 +1,159 @@ + + + +
  • + + @if (menu.icon) { + + + + } + {{ menu.label }} + +
    +
      + @for (child of menu.subMenu; track child.label) { + @if (hasSubmenu(child)) { + + + } @else { + + + } + } +
    +
    +
  • +
    + + +
  • + + +
  • +
    + + + + @if (menu.icon) { + + + + {{ menu.label }} + } @else { + {{ menu.label }} + } + @if (menu.badge) { + {{ + menu.badge.text + }} + } + + diff --git a/apiferia/src/app/layouts/sidebar/sidebar.component.spec.ts b/apiferia/src/app/layouts/sidebar/sidebar.component.spec.ts new file mode 100644 index 00000000..f3962387 --- /dev/null +++ b/apiferia/src/app/layouts/sidebar/sidebar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SidebarComponent } from './sidebar.component' + +describe('SidebarComponent', () => { + let component: SidebarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SidebarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SidebarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/sidebar/sidebar.component.ts b/apiferia/src/app/layouts/sidebar/sidebar.component.ts new file mode 100644 index 00000000..f05ec676 --- /dev/null +++ b/apiferia/src/app/layouts/sidebar/sidebar.component.ts @@ -0,0 +1,201 @@ +import { CUSTOM_ELEMENTS_SCHEMA, Component, inject } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' +import { NavigationEnd, Router, RouterModule } from '@angular/router' +import { + NgbCollapse, + NgbCollapseModule, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' +import { CommonModule } from '@angular/common' +import { findAllParent, findMenuItem } from '../../helpers/utils' +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { MENU, type MenuItem } from '@/app/common/menu-meta' +import { changesidebarsize } from '@/app/store/layout/layout-action' +import { Store } from '@ngrx/store' +import { getSidebarsize } from '@/app/store/layout/layout-selector' +import { basePath } from '@/app/common/constants' + +@Component({ + selector: 'app-sidebar', + standalone: true, + imports: [ + SimplebarAngularModule, + RouterModule, + NgbCollapseModule, + CommonModule, + NgbTooltipModule, + LogoBoxComponent, + ], + templateUrl: './sidebar.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class SidebarComponent { + menuItems: MenuItem[] = [] + activeMenuItems: string[] = [] + + store = inject(Store) + router = inject(Router) + trimmedURL = this.router.url?.replaceAll( + basePath !== '' ? basePath + '/' : '', + '/' + ) + + constructor() { + this.router.events.forEach((event) => { + if (event instanceof NavigationEnd) { + this.trimmedURL = this.router.url?.replaceAll( + basePath !== '' ? basePath + '/' : '', + '/' + ) + this._activateMenu() + setTimeout(() => { + this.scrollToActive() + }, 200) + } + }) + } + + ngOnInit(): void { + this.initMenu() + } + + initMenu(): void { + this.menuItems = MENU + } + + ngAfterViewInit() { + setTimeout(() => { + this._activateMenu() + }) + setTimeout(() => { + this.scrollToActive() + }, 200) + } + + scrollToActive(): void { + const activatedItem = document.querySelector('.nav-item li a.active') + if (activatedItem) { + const simplebarContent = document.querySelector( + '.main-nav .simplebar-content-wrapper' + ) + if (simplebarContent) { + const activatedItemRect = activatedItem.getBoundingClientRect() + const simplebarContentRect = simplebarContent.getBoundingClientRect() + const activatedItemOffsetTop = + activatedItemRect.top + simplebarContent.scrollTop + const centerOffset = + activatedItemOffsetTop - + simplebarContentRect.top - + simplebarContent.clientHeight / 2 + + activatedItemRect.height / 2 + this.scrollTo(simplebarContent, centerOffset, 600) + } + } + } + + easeInOutQuad(t: number, b: number, c: number, d: number): number { + t /= d / 2 + if (t < 1) return (c / 2) * t * t + b + t-- + return (-c / 2) * (t * (t - 2) - 1) + b + } + + scrollTo(element: Element, to: number, duration: number): void { + const start = element.scrollTop + const change = to - start + const increment = 20 + let currentTime = 0 + + const animateScroll = () => { + currentTime += increment + const val = this.easeInOutQuad(currentTime, start, change, duration) + element.scrollTop = val + if (currentTime < duration) { + setTimeout(animateScroll, increment) + } + } + animateScroll() + } + + _activateMenu(): void { + const div = document.querySelector('.navbar-nav') + + let matchingMenuItem = null + + if (div) { + let items: any = div.getElementsByClassName('nav-link-ref') + for (let i = 0; i < items.length; ++i) { + if ( + this.trimmedURL === items[i].pathname || + (this.trimmedURL.startsWith('/invoice/') && + items[i].pathname === '/invoice/RB6985') || + (this.trimmedURL.startsWith('/ecommerce/product/') && + items[i].pathname === '/ecommerce/product/1') + ) { + matchingMenuItem = items[i] + break + } + } + + if (matchingMenuItem) { + const mid = matchingMenuItem.getAttribute('aria-controls') + const activeMt = findMenuItem(this.menuItems, mid) + + if (activeMt) { + const matchingObjs = [ + activeMt['key'], + ...findAllParent(this.menuItems, activeMt), + ] + + this.activeMenuItems = matchingObjs + this.menuItems.forEach((menu: MenuItem) => { + menu.collapsed = !matchingObjs.includes(menu.key!) + }) + } + } + } + } + + /** + * Returns true or false if given menu item has child or not + * @param item menuItem + */ + hasSubmenu(menu: MenuItem): boolean { + return menu.subMenu ? true : false + } + + /** + * toggles open menu + * @param menuItem clicked menuitem + * @param collapse collpase instance + */ + toggleMenuItem(menuItem: MenuItem, collapse: NgbCollapse): void { + collapse.toggle() + let openMenuItems: string[] + if (!menuItem.collapsed) { + openMenuItems = [ + menuItem['key'], + ...findAllParent(this.menuItems, menuItem), + ] + this.menuItems.forEach((menu: MenuItem) => { + if (!openMenuItems.includes(menu.key!)) { + menu.collapsed = true + } + }) + } + } + + changeSidebarSize() { + let size = document.documentElement.getAttribute('data-menu-size') + if (size == 'sm-hover') { + size = 'sm-hover-active' + } else { + size = 'sm-hover' + } + this.store.dispatch(changesidebarsize({ size })) + this.store.select(getSidebarsize).subscribe((size) => { + document.documentElement.setAttribute('data-menu-size', size) + }) + } +} diff --git a/apiferia/src/app/layouts/topbar/data.ts b/apiferia/src/app/layouts/topbar/data.ts new file mode 100644 index 00000000..2fa859be --- /dev/null +++ b/apiferia/src/app/layouts/topbar/data.ts @@ -0,0 +1,164 @@ +import { addOrSubtractDaysFromDate } from '@/app/helpers/utils' + +const bitbucketImg = 'assets/images/brands/bitbucket.svg' +const dribbleImg = 'assets/images/brands/dribbble.svg' +const dropboxImg = 'assets/images/brands/dropbox.svg' +const githubImg = 'assets/images/brands/github.svg' +const slackImg = 'assets/images/brands/slack.svg' +const smImg3 = 'assets/images/small/img-3.jpg' +const smImg4 = 'assets/images/small/img-4.jpg' +const smImg6 = 'assets/images/small/img-6.jpg' +const avatar1 = 'assets/images/users/avatar-1.jpg' +const avatar3 = 'assets/images/users/avatar-3.jpg' +const avatar5 = 'assets/images/users/avatar-5.jpg' +const avatar6 = 'assets/images/users/avatar-6.jpg' +const avatar7 = 'assets/images/users/avatar-7.jpg' + +export type BootstrapVariantType = + | 'primary' + | 'secondary' + | 'success' + | 'danger' + | 'warning' + | 'info' + | 'dark' + | 'light' + +export type FileType = Partial & { + preview?: string +} + +export type ActivityType = { + title: string + icon?: string + variant?: BootstrapVariantType + status?: 'completed' | 'latest' + files?: FileType[] + time: Date + type?: 'task' | 'design' | 'achievement' + content?: string +} + +export type AppType = { + image: string + name: string + handle: string +} + +export type NotificationType = { + from: string + content: string + icon?: string +} + +export const appsData: AppType[] = [ + { + image: githubImg, + name: 'Github', + handle: '@reback', + }, + { + image: bitbucketImg, + name: 'Bitbucket', + handle: '@reback', + }, + { + image: dribbleImg, + name: 'Dribble', + handle: '@username', + }, + { + image: dropboxImg, + name: 'Dropbox', + handle: '@username', + }, + { + image: slackImg, + name: 'Slack', + handle: '@reback', + }, +] + +export const notificationsData: NotificationType[] = [ + { + from: 'Josephine Thompson', + content: + 'commented on admin panel "Wow 😍! this admin looks good and awesome design"', + icon: avatar1, + }, + { + from: 'Donoghue Susan', + content: 'Hi, How are you? What about our next meeting', + }, + { + from: 'Jacob Gines', + content: "Answered to your comment on the cash flow forecast's graph 🔔.", + icon: avatar3, + }, + { + from: 'Shawn Bunch', + content: 'Commented on Admin', + icon: avatar5, + }, + { + from: 'Vanessa R. Davis', + content: 'Delivery processing your order is being shipped', + }, +] + +export const activityStreamData: ActivityType[] = [ + { + title: 'Report-Fix / Update', + variant: 'danger', + type: 'task', + files: [ + { + name: 'Concept.fig', + }, + { + name: 'reback.docs', + }, + ], + time: addOrSubtractDaysFromDate(0), + }, + { + title: 'Project Status', + files: [ + { + name: 'UI/UX Figma Design.fig', + }, + ], + variant: 'success', + type: 'design', + status: 'completed', + time: addOrSubtractDaysFromDate(1), + }, + { + title: 'Reback Application UI v2.0.0', + variant: 'primary', + content: + 'Get access to over 20+ pages including a dashboard layout, charts, kanban board, calendar, and pre-order E-commerce & Marketing pages.', + files: [{ name: 'Backup.zip' }], + status: 'latest', + time: addOrSubtractDaysFromDate(3), + }, + { + title: 'Alex Smith Attached Photos', + icon: avatar7, + time: addOrSubtractDaysFromDate(4), + files: [{ preview: smImg6 }, { preview: smImg3 }, { preview: smImg4 }], + }, + { + title: 'Rebecca J. added a new team member', + icon: avatar6, + time: addOrSubtractDaysFromDate(4), + content: 'Added a new member to Front Dashboard', + }, + { + title: 'Achievements', + variant: 'warning', + type: 'achievement', + time: addOrSubtractDaysFromDate(5), + content: 'Earned a "Best Product Award"', + }, +] diff --git a/apiferia/src/app/layouts/topbar/topbar.component.html b/apiferia/src/app/layouts/topbar/topbar.component.html new file mode 100644 index 00000000..7e84cb31 --- /dev/null +++ b/apiferia/src/app/layouts/topbar/topbar.component.html @@ -0,0 +1,380 @@ +
    +
    + +
    +
    + + +
    +
    Activity Stream
    + +
    + +
    + +
    + + @for (data of activityList; track $index) { +
    +
    + + @if (data.icon) { + avatar-5 + } @else if (data.type) { + + } @else { + {{ data.title.charAt(0).toUpperCase() }} + } + +
    +
    + {{ data.title }} + @if (data.status) { + {{ data.status }} + } +
    + + @if (data.files && data.type) { +

    + Add {{ data.files.length }} files to + + + {{ data.type }} +

    + } + @if (data.content) { +

    {{ data.content }}

    + } + @if (data.files) { +
    +
    + @for (file of data.files; track $index) { + @if (file.preview) { +
    + + +
    + } @else { +
    + +
    + } + } +
    +
    + } +
    {{ data.time.toDateString() }}
    +
    +
    +
    + } +
    + View All +
    +
    +
    diff --git a/apiferia/src/app/layouts/topbar/topbar.component.scss b/apiferia/src/app/layouts/topbar/topbar.component.scss new file mode 100644 index 00000000..e69de29b diff --git a/apiferia/src/app/layouts/topbar/topbar.component.spec.ts b/apiferia/src/app/layouts/topbar/topbar.component.spec.ts new file mode 100644 index 00000000..5293e9e4 --- /dev/null +++ b/apiferia/src/app/layouts/topbar/topbar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TopbarComponent } from './topbar.component' + +describe('TopbarComponent', () => { + let component: TopbarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TopbarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TopbarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/topbar/topbar.component.ts b/apiferia/src/app/layouts/topbar/topbar.component.ts new file mode 100644 index 00000000..797acf4e --- /dev/null +++ b/apiferia/src/app/layouts/topbar/topbar.component.ts @@ -0,0 +1,116 @@ +import { changetheme } from '@/app/store/layout/layout-action' +import { CommonModule, DOCUMENT } from '@angular/common' +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + EventEmitter, + Inject, + Output, + inject, + type TemplateRef, +} from '@angular/core' +import { + NgbDropdownModule, + NgbOffcanvas, + NgbOffcanvasModule, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' +import { Store } from '@ngrx/store' +import { SimplebarAngularModule } from 'simplebar-angular' +import { getLayoutColor } from '../../store/layout/layout-selector' +import { logout } from '@/app/store/authentication/authentication.actions' +import { Router, RouterLink } from '@angular/router' +import { activityStreamData, appsData, notificationsData } from './data' + +@Component({ + selector: 'app-topbar', + standalone: true, + imports: [ + NgbDropdownModule, + SimplebarAngularModule, + NgbOffcanvasModule, + RouterLink, + CommonModule, + NgbTooltipModule, + ], + templateUrl: './topbar.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class TopbarComponent { + element: any + + router = inject(Router) + store = inject(Store) + offcanvasService = inject(NgbOffcanvas) + + notificationList = notificationsData + appsList = appsData + activityList = activityStreamData + + constructor(@Inject(DOCUMENT) private document: any) {} + @Output() settingsButtonClicked = new EventEmitter() + @Output() mobileMenuButtonClicked = new EventEmitter() + + ngOnInit(): void { + this.element = document.documentElement + } + + settingMenu() { + this.settingsButtonClicked.emit() + } + + /** + * Toggle the menu bar when having mobile screen + */ + toggleMobileMenu() { + // document.getElementById('topnav-hamburger-icon')?.classList.toggle('open'); + this.mobileMenuButtonClicked.emit() + } + + // Change Theme + changeTheme() { + const color = document.documentElement.getAttribute('data-bs-theme') + console.log(color) + if (color == 'light') { + this.store.dispatch(changetheme({ color: 'dark' })) + } else { + this.store.dispatch(changetheme({ color: 'light' })) + } + this.store.select(getLayoutColor).subscribe((color) => { + document.documentElement.setAttribute('data-bs-theme', color) + }) + } + + open(content: TemplateRef) { + this.offcanvasService.open(content, { + position: 'end', + panelClass: 'border-0 width-auto', + }) + } + + logout() { + this.store.dispatch(logout()) + } + + getFileExtensionIcon(file: any) { + const dotIndex = file.lastIndexOf('.') + const extension = file.slice(dotIndex + 1) + if (extension == 'docs') { + return 'bxs-file-doc' + } else if (extension == 'zip') { + return 'bxs-file-archive' + } else { + return 'bxl-figma ' + } + } + + getActivityIcon(type: string) { + if (type == 'task') { + return 'iconamoon:folder-check-duotone' + } else if (type == 'design') { + return 'iconamoon:check-circle-1-duotone' + } else { + return 'iconamoon:certificate-badge-duotone' + } + } +} diff --git a/apiferia/src/app/layouts/vertical/vertical.component.spec.ts b/apiferia/src/app/layouts/vertical/vertical.component.spec.ts new file mode 100644 index 00000000..e88b0c6b --- /dev/null +++ b/apiferia/src/app/layouts/vertical/vertical.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { VerticalComponent } from './vertical.component' + +describe('VerticalComponent', () => { + let component: VerticalComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [VerticalComponent], + }).compileComponents() + + fixture = TestBed.createComponent(VerticalComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/layouts/vertical/vertical.component.ts b/apiferia/src/app/layouts/vertical/vertical.component.ts new file mode 100644 index 00000000..078b5a52 --- /dev/null +++ b/apiferia/src/app/layouts/vertical/vertical.component.ts @@ -0,0 +1,107 @@ +import { Component, HostListener, inject, Renderer2 } from '@angular/core' +import { SidebarComponent } from '../sidebar/sidebar.component' +import { TopbarComponent } from '../topbar/topbar.component' +import { FooterComponent } from '../footer/footer.component' +import { RouterModule } from '@angular/router' +import { RightSidebarComponent } from '../right-sidebar/right-sidebar.component' +import { NgbActiveOffcanvas, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap' +import { Store } from '@ngrx/store' +import { changesidebarsize } from '@store/layout/layout-action' +import { getSidebarsize } from '@store/layout/layout-selector' + +@Component({ + selector: 'app-vertical', + standalone: true, + imports: [SidebarComponent, TopbarComponent, FooterComponent, RouterModule], + template: ` +
    + + + +
    + +
    + +
    + + +
    +
    + `, + styles: ``, + providers: [NgbActiveOffcanvas], +}) +export class VerticalComponent { + private offcanvasService = inject(NgbOffcanvas) + private store = inject(Store) + private renderer = inject(Renderer2) + + ngOnInit(): void { + this.onResize() + } + + @HostListener('window:resize', ['$event']) + onResize() { + if (document.documentElement.clientWidth <= 1140) { + this.store.dispatch(changesidebarsize({ size: 'hidden' })) + } else { + this.store.dispatch(changesidebarsize({ size: 'default' })) + document.documentElement.classList.remove('sidebar-enable') + const backdrop = document.querySelector('.offcanvas-backdrop') + if (backdrop) this.renderer.removeChild(document.body, backdrop) + } + this.store.select(getSidebarsize).subscribe((size: string) => { + this.renderer.setAttribute( + document.documentElement, + 'data-sidenav-size', + size + ) + }) + } + + onSettingsButtonClicked() { + this.offcanvasService.open(RightSidebarComponent, { position: 'end' }) + } + + onToggleMobileMenu() { + this.store.select(getSidebarsize).subscribe((size: any) => { + document.documentElement.setAttribute('data-menu-size', size) + }) + + const size = document.documentElement.getAttribute('data-menu-size') + + document.documentElement.classList.toggle('sidebar-enable') + if (size != 'hidden') { + if (document.documentElement.classList.contains('sidebar-enable')) { + this.store.dispatch(changesidebarsize({ size: 'condensed' })) + } else { + this.store.dispatch(changesidebarsize({ size: 'default' })) + } + } else { + this.showBackdrop() + } + } + + showBackdrop() { + const backdrop = this.renderer.createElement('div') + this.renderer.addClass(backdrop, 'offcanvas-backdrop') + this.renderer.addClass(backdrop, 'fade') + this.renderer.addClass(backdrop, 'show') + this.renderer.appendChild(document.body, backdrop) + this.renderer.setStyle(document.body, 'overflow', 'hidden') + + if (window.innerWidth > 1040) { + this.renderer.setStyle(document.body, 'paddingRight', '15px') + } + + this.renderer.listen(backdrop, 'click', () => { + document.documentElement.classList.remove('sidebar-enable') + this.renderer.removeChild(document.body, backdrop) + this.renderer.setStyle(document.body, 'overflow', null) + this.renderer.setStyle(document.body, 'paddingRight', null) + }) + } +} diff --git a/apiferia/src/app/store/authentication/auth.model.ts b/apiferia/src/app/store/authentication/auth.model.ts new file mode 100644 index 00000000..1b08fb6e --- /dev/null +++ b/apiferia/src/app/store/authentication/auth.model.ts @@ -0,0 +1,17 @@ +export class User { + id?: string + email?: string + role?: 'admin' | 'dealer' | 'cliente' | 'aseguradora' | 'financiera' | 'tasador' | 'gps' + firstName?: string + lastName?: string + phone?: string + isActive?: boolean + createdAt?: Date + updatedAt?: Date + fullName?: string + token?: string + // Compatibilidad con el template original + username?: string + password?: string + name?: string +} diff --git a/apiferia/src/app/store/authentication/authentication.actions.ts b/apiferia/src/app/store/authentication/authentication.actions.ts new file mode 100644 index 00000000..cb0b42c9 --- /dev/null +++ b/apiferia/src/app/store/authentication/authentication.actions.ts @@ -0,0 +1,21 @@ +import { createAction, props } from '@ngrx/store' +import type { User } from './auth.model' + +// login action +export const login = createAction( + '[Authentication] Login', + props<{ email: string; password: string }>() +) +export const loginSuccess = createAction( + '[Authentication] Login Success', + props<{ user: User }>() +) +export const loginFailure = createAction( + '[Authentication] Login Failure', + props<{ error: string }>() +) + +// logout action +export const logout = createAction('[Authentication] Logout') + +export const logoutSuccess = createAction('[Auth] Logout Success') diff --git a/apiferia/src/app/store/authentication/authentication.effects.ts b/apiferia/src/app/store/authentication/authentication.effects.ts new file mode 100644 index 00000000..7925bd63 --- /dev/null +++ b/apiferia/src/app/store/authentication/authentication.effects.ts @@ -0,0 +1,53 @@ +import { Inject, Injectable } from '@angular/core' +import { ActivatedRoute, Router } from '@angular/router' +import { Actions, createEffect, ofType } from '@ngrx/effects' +import { of } from 'rxjs' +import { catchError, exhaustMap, map } from 'rxjs/operators' +import { + login, + loginFailure, + loginSuccess, + logout, + logoutSuccess, +} from './authentication.actions' +import { AuthenticationService } from '@/app/core/services/auth.service' + +@Injectable() +export class AuthenticationEffects { + login$ = createEffect(() => + this.actions$.pipe( + ofType(login), + exhaustMap(({ email, password }) => { + return this.AuthenticationService.login(email, password).pipe( + map((user) => { + if (user) { + const returnUrl = + this.route.snapshot.queryParams['returnUrl'] || '/' + this.router.navigateByUrl(returnUrl) + } + return loginSuccess({ user }) + }), + catchError((error) => of(loginFailure({ error }))) + ) + }) + ) + ) + + logout$ = createEffect(() => + this.actions$.pipe( + ofType(logout), + exhaustMap(() => { + this.AuthenticationService.logout() + this.router.navigate(['/auth/sign-in']) + return of(logoutSuccess()) + }) + ) + ) + + constructor( + @Inject(Actions) private actions$: Actions, + private AuthenticationService: AuthenticationService, + private router: Router, + private route: ActivatedRoute + ) {} +} diff --git a/apiferia/src/app/store/authentication/authentication.reducer.ts b/apiferia/src/app/store/authentication/authentication.reducer.ts new file mode 100644 index 00000000..bcf42bd4 --- /dev/null +++ b/apiferia/src/app/store/authentication/authentication.reducer.ts @@ -0,0 +1,34 @@ +import { createReducer, on } from '@ngrx/store' +import { + login, + loginFailure, + loginSuccess, + logout, +} from './authentication.actions' +import type { User } from './auth.model' + +export type AuthenticationState = { + isLoggedIn: boolean + user: User | null + error: string | null +} + +const initialState: AuthenticationState = { + isLoggedIn: false, + user: null, + error: null, +} + +export const authenticationReducer = createReducer( + initialState, + on(login, (state) => ({ ...state, error: null })), + on(loginSuccess, (state, { user }) => ({ + ...state, + isLoggedIn: true, + user, + error: null, + })), + on(loginFailure, (state, { error }) => ({ ...state, error })), + + on(logout, (state) => ({ ...state, user: null })) +) diff --git a/apiferia/src/app/store/authentication/authentication.selector.ts b/apiferia/src/app/store/authentication/authentication.selector.ts new file mode 100644 index 00000000..7e8e22e8 --- /dev/null +++ b/apiferia/src/app/store/authentication/authentication.selector.ts @@ -0,0 +1,25 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store' +import { AuthenticationState } from './authentication.reducer' + +export const getUserState = + createFeatureSelector('authentication') + +export const getUser = createSelector( + getUserState, + (state: AuthenticationState) => state.user +) + +export const getToken = createSelector( + getUserState, + (state: AuthenticationState) => state.user?.token +) + +export const getisLoggedIn = createSelector( + getUserState, + (state: AuthenticationState) => state.isLoggedIn +) + +export const getError = createSelector( + getUserState, + (state: AuthenticationState) => state.error +) diff --git a/apiferia/src/app/store/calendar/calendar.actions.ts b/apiferia/src/app/store/calendar/calendar.actions.ts new file mode 100644 index 00000000..2d949c9a --- /dev/null +++ b/apiferia/src/app/store/calendar/calendar.actions.ts @@ -0,0 +1,67 @@ +import { createAction, props } from '@ngrx/store' +import { EventInput } from '@fullcalendar/core' + +export const fetchCalendar = createAction('[Calendar] Fetch Calendar') +export const fetchCalendarSuccess = createAction( + '[Calendar] Fetch Calendar Success', + props<{ events: EventInput[] }>() +) +export const fetchCalendarFailure = createAction( + '[Data] Fetch Calendar Failure', + props<{ error: string }>() +) + +export const addEvent = createAction( + '[Calendar] Add Event', + props<{ event: EventInput }>() +) +export const addEventSuccess = createAction( + '[Calendar] Add Event Success', + props<{ events: EventInput }>() +) +export const addEventFailure = createAction( + '[Calendar] Add Event Failure', + props<{ error: string }>() +) + +// Add Data +export const addCalendar = createAction( + '[Data] Add Calendar', + props<{ events: EventInput }>() +) +export const addCalendarSuccess = createAction( + '[Data] Add Calendar Success', + props<{ events: EventInput }>() +) +export const addCalendarFailure = createAction( + '[Data] Add Calendar Failure', + props<{ error: string }>() +) + +// Update Data +export const updateCalendar = createAction( + '[Data] Update calendar event', + props<{ events: EventInput }>() +) +export const updateCalendarSuccess = createAction( + '[Data] Update calendar event Success', + props<{ events: EventInput }>() +) +export const updateCalendarFailure = createAction( + '[Data] Update calendar event Failure', + props<{ error: string }>() +) + +// Delete Data +export const deleteCalendar = createAction( + '[Data] Delete Calendar', + props<{ id: string }>() +) +export const deleteCalendarSuccess = createAction( + '[Data] Delete Calendar Success', + props<{ id: string }>() +) +export const deleteCalendarFailure = createAction( + '[Data] Delete Calendar Failure', + props<{ error: string }>() +) diff --git a/apiferia/src/app/store/calendar/calendar.effects.ts b/apiferia/src/app/store/calendar/calendar.effects.ts new file mode 100644 index 00000000..0658f2ab --- /dev/null +++ b/apiferia/src/app/store/calendar/calendar.effects.ts @@ -0,0 +1,75 @@ +import { inject, Injectable } from '@angular/core' +import { of } from 'rxjs' +import { Actions, createEffect, ofType } from '@ngrx/effects' +import { catchError, map, mergeMap, tap } from 'rxjs/operators' + +// Action +import { + addCalendar, + addCalendarFailure, + addCalendarSuccess, + deleteCalendar, + deleteCalendarFailure, + deleteCalendarSuccess, + fetchCalendar, + fetchCalendarFailure, + fetchCalendarSuccess, + updateCalendar, + updateCalendarFailure, + updateCalendarSuccess, +} from './calendar.actions' +import { CrudService } from '@/app/core/services/crud.service' + +@Injectable() +export class CalendarEffects { + private CrudService = inject(CrudService) + private actions$ = inject(Actions) + + fetchEvents$ = createEffect(() => + this.actions$.pipe( + ofType(fetchCalendar), + mergeMap(() => + this.CrudService.fetchCalendarEvents().pipe( + map((events) => fetchCalendarSuccess({ events })), + catchError((error) => of(fetchCalendarFailure({ error }))) + ) + ) + ) + ) + + addEvents$ = createEffect(() => + this.actions$.pipe( + ofType(addCalendar), + mergeMap(({ events }) => + this.CrudService.addCalendarEvents(events).pipe( + map(() => addCalendarSuccess({ events })), + catchError((error) => of(addCalendarFailure({ error }))) + ) + ) + ) + ) + + updateEvents$ = createEffect(() => + this.actions$.pipe( + ofType(updateCalendar), + mergeMap(({ events }) => + this.CrudService.updateCalendarEvents(events).pipe( + map(() => updateCalendarSuccess({ events })), + catchError((error) => of(updateCalendarFailure({ error }))) + ) + ) + ) + ) + + deleteEvents$ = createEffect(() => + this.actions$.pipe( + ofType(deleteCalendar), + mergeMap(({ id }) => + this.CrudService.deleteCalendarEvents(id).pipe( + map(() => deleteCalendarSuccess({ id })), + catchError((error) => of(deleteCalendarFailure({ error }))) + ) + ) + ) + ) +} diff --git a/apiferia/src/app/store/calendar/calendar.reducer.ts b/apiferia/src/app/store/calendar/calendar.reducer.ts new file mode 100644 index 00000000..37bb1c1f --- /dev/null +++ b/apiferia/src/app/store/calendar/calendar.reducer.ts @@ -0,0 +1,57 @@ +import { createReducer, on, Action } from '@ngrx/store' +import { EventInput } from '@fullcalendar/core' +import { + addEvent, + fetchCalendar, + fetchCalendarSuccess, + updateCalendarSuccess, + deleteCalendar, + addEventSuccess, + deleteCalendarSuccess, + addCalendarSuccess, +} from './calendar.actions' + +export type CalendarState = { + events: EventInput[] +} + +export const initialState: CalendarState = { + events: [], +} + +export const calendarReducer = createReducer( + initialState, + on(fetchCalendar, (state) => { + return { ...state } + }), + on(fetchCalendarSuccess, (state, { events }) => { + return { ...state, events } + }), + + on(addCalendarSuccess, (state, { events }) => { + return { ...state, events: [...state.events, events], error: null } + }), + + on(updateCalendarSuccess, (state, { events }) => { + return { + ...state, + events: state.events.map((event) => + event.id == events.id ? events : event + ), + error: null, + } + }), + + on(deleteCalendarSuccess, (state, { id }) => { + return { + ...state, + events: state.events.filter((event) => event.id !== id), + error: null, + } + }) +) + +// Selector +export function reducer(state: CalendarState | undefined, action: Action) { + return calendarReducer(state, action) +} diff --git a/apiferia/src/app/store/calendar/calendar.selectors.ts b/apiferia/src/app/store/calendar/calendar.selectors.ts new file mode 100644 index 00000000..8c58c111 --- /dev/null +++ b/apiferia/src/app/store/calendar/calendar.selectors.ts @@ -0,0 +1,9 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store' +import { CalendarState } from './calendar.reducer' + +export const selectDataState = createFeatureSelector('Calendar') + +export const getEvents = createSelector( + selectDataState, + (state: CalendarState) => state.events +) diff --git a/apiferia/src/app/store/calendar/data.ts b/apiferia/src/app/store/calendar/data.ts new file mode 100644 index 00000000..c60b043b --- /dev/null +++ b/apiferia/src/app/store/calendar/data.ts @@ -0,0 +1,100 @@ +import { EventInput } from '@fullcalendar/core' + +export type externalModel = { + id: number + textClass: string + className: string + title: string +} + +const defaultEvents: EventInput[] = [ + { + id: '1', + title: 'Interview - Backend Engineer', + start: new Date(), + className: 'bg-primary', + }, + { + id: '2', + title: 'Meeting with CT Team', + start: new Date(Date.now() + 13000000), + className: 'bg-warning', + }, + { + id: '3', + title: 'Meeting with Mr. Reback', + start: new Date(Date.now() + 308000000), + end: new Date(Date.now() + 338000000), + className: 'bg-info', + }, + { + id: '4', + title: 'Interview - Frontend Engineer', + start: new Date(Date.now() + 60570000), + end: new Date(Date.now() + 153000000), + className: 'bg-secondary', + }, + { + id: '5', + title: 'Phone Screen - Frontend Engineer', + start: new Date(Date.now() + 168000000), + className: 'bg-success', + }, + { + id: '6', + title: 'Buy Design Assets', + start: new Date(Date.now() + 330000000), + end: new Date(Date.now() + 330800000), + className: 'bg-primary', + }, + { + id: '7', + title: 'Setup Github Repository', + start: new Date(Date.now() + 1008000000), + end: new Date(Date.now() + 1108000000), + className: 'bg-danger', + }, + { + id: '8', + title: 'Meeting with Mr. Shreyu', + start: new Date(Date.now() + 2508000000), + end: new Date(Date.now() + 2508000000), + className: 'bg-dark', + }, +] + +// external events +const externalEvents: externalModel[] = [ + { + id: 1, + textClass: 'text-primary', + className: 'primary', + title: 'Team Building Retreat Meeting ', + }, + { + id: 2, + textClass: 'text-info', + className: 'info', + title: 'Product Launch Strategy Meeting', + }, + { + id: 3, + textClass: 'text-success', + className: 'success', + title: 'Monthly Sales Review', + }, + { + id: 4, + textClass: 'text-danger', + className: 'danger', + title: 'Team Lunch Celebration', + }, + { + id: 5, + textClass: 'text-warning', + className: 'warning', + title: 'Marketing Campaign Kickoff', + }, +] + +export { defaultEvents, externalEvents } diff --git a/apiferia/src/app/store/index.ts b/apiferia/src/app/store/index.ts new file mode 100644 index 00000000..aa9aab02 --- /dev/null +++ b/apiferia/src/app/store/index.ts @@ -0,0 +1,22 @@ +import { ActionReducerMap } from '@ngrx/store' +import { LayoutState, layoutReducer } from './layout/layout-reducers' +import { + calendarReducer, + type CalendarState, +} from './calendar/calendar.reducer' +import { + authenticationReducer, + type AuthenticationState, +} from './authentication/authentication.reducer' + +export interface RootReducerState { + authentication: AuthenticationState + layout: LayoutState + Calendar: CalendarState +} + +export const rootReducer: ActionReducerMap = { + authentication: authenticationReducer, + layout: layoutReducer, + Calendar: calendarReducer, +} diff --git a/apiferia/src/app/store/layout/layout-action.ts b/apiferia/src/app/store/layout/layout-action.ts new file mode 100644 index 00000000..37eb3db9 --- /dev/null +++ b/apiferia/src/app/store/layout/layout-action.ts @@ -0,0 +1,19 @@ +import { createAction, props } from '@ngrx/store' + +export const changetheme = createAction( + '[Layout] Set Color', + props<{ color: string }>() +) +export const changetopbarcolor = createAction( + '[Layout] Set Topbar', + props<{ topbar: string }>() +) +export const changemenucolor = createAction( + '[Layout] Set Menu', + props<{ menu: string }>() +) +export const changesidebarsize = createAction( + '[Layout] Set size', + props<{ size: string }>() +) +export const resetState = createAction('[App] Reset State') diff --git a/apiferia/src/app/store/layout/layout-reducers.ts b/apiferia/src/app/store/layout/layout-reducers.ts new file mode 100644 index 00000000..11eab9b6 --- /dev/null +++ b/apiferia/src/app/store/layout/layout-reducers.ts @@ -0,0 +1,65 @@ +import { Action, createReducer, on } from '@ngrx/store' +import { localStorageSync } from 'ngrx-store-localstorage' +import { + LAYOUT_COLOR_TYPES, + SIDEBAR_SIZE_TYPES, + TOPBAR_COLOR_TYPES, +} from './layout' +import * as appActions from './layout-action' +import { + changemenucolor, + changesidebarsize, + changetheme, + changetopbarcolor, +} from './layout-action' + +export interface LayoutState { + LAYOUT_THEME: string + TOPBAR_COLOR: string + MENU_COLOR: string + MENU_SIZE: string +} + +// IntialState +export const initialState: LayoutState = { + LAYOUT_THEME: LAYOUT_COLOR_TYPES.LIGHTMODE, + TOPBAR_COLOR: TOPBAR_COLOR_TYPES.LIGHT, + MENU_COLOR: TOPBAR_COLOR_TYPES.LIGHT, + MENU_SIZE: SIDEBAR_SIZE_TYPES.DEFAULT, +} + +// Reducer +export const layoutReducer = createReducer( + initialState, + on(changetheme, (state, action) => ({ + ...state, + LAYOUT_THEME: action.color, + })), + on(changetopbarcolor, (state, action) => ({ + ...state, + TOPBAR_COLOR: action.topbar, + })), + on(changemenucolor, (state, action) => ({ + ...state, + MENU_COLOR: action.menu, + })), + on(changesidebarsize, (state, action) => ({ + ...state, + MENU_SIZE: action.size, + })), + on(appActions.resetState, () => initialState) +) + +// Configuration for localStorageSync +export function localStorageSyncReducer(reducer: any) { + return localStorageSync({ keys: ['app'], rehydrate: true })(reducer) +} + +// Selector +export function reducer(state: LayoutState | undefined, action: Action) { + return layoutReducer(state, action) +} + +export const rootReducer = localStorageSyncReducer(layoutReducer) + +const metaReducers = [rootReducer] diff --git a/apiferia/src/app/store/layout/layout-selector.ts b/apiferia/src/app/store/layout/layout-selector.ts new file mode 100644 index 00000000..edcc1ecf --- /dev/null +++ b/apiferia/src/app/store/layout/layout-selector.ts @@ -0,0 +1,24 @@ +import { createFeatureSelector, createSelector } from '@ngrx/store' +import { LayoutState } from './layout-reducers' + +export const getLayoutState = createFeatureSelector('layout') + +export const getLayoutColor = createSelector( + getLayoutState, + (state: LayoutState) => state.LAYOUT_THEME +) + +export const getTopbarcolor = createSelector( + getLayoutState, + (state: LayoutState) => state.TOPBAR_COLOR +) + +export const getMenucolor = createSelector( + getLayoutState, + (state: LayoutState) => state.MENU_COLOR +) + +export const getSidebarsize = createSelector( + getLayoutState, + (state: LayoutState) => state.MENU_SIZE +) diff --git a/apiferia/src/app/store/layout/layout.ts b/apiferia/src/app/store/layout/layout.ts new file mode 100644 index 00000000..f7e26029 --- /dev/null +++ b/apiferia/src/app/store/layout/layout.ts @@ -0,0 +1,41 @@ +export enum LAYOUT_TYPES { + VERTICAL = 'vertical', + HORIZONTAL = 'horizontal', +} + +export enum LAYOUT_COLOR_TYPES { + LIGHTMODE = 'light', + DARKMODE = 'dark', +} + +export enum LAYOUT_MODE_TYPES { + FLUID = 'fluid', + BOXED = 'boxed', + DETACHED = 'detached', +} + +export enum TOPBAR_COLOR_TYPES { + LIGHT = 'light', + DARK = 'dark', + BRAND = 'brand', +} + +export enum MENU_COLOR_TYPES { + LIGHT = 'light', + DARK = 'dark', + BRAND = 'brand', +} + +export enum SIDEBAR_SIZE_TYPES { + DEFAULT = 'default', + COMPACT = 'compact', + CONDENSED = 'condensed', + HOVER = 'sm-hover', + FULL = 'full', + FULLSCREEN = 'fullscreen', +} + +export enum LAYOUT_POSITION_TYPES { + FIXED = 'fixed', + SCROLLABLE = 'scrollable', +} diff --git a/apiferia/src/app/views/advanced-ui/advanced.route.ts b/apiferia/src/app/views/advanced-ui/advanced.route.ts new file mode 100644 index 00000000..7b0815f4 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/advanced.route.ts @@ -0,0 +1,34 @@ +import { Route } from '@angular/router' +import { RatingsComponent } from './ratings/ratings.component' +import { SweetalertComponent } from './sweetalert/sweetalert.component' +import { SwiperComponent } from './swiper/swiper.component' +import { ScrollbarComponent } from './scrollbar/scrollbar.component' +import { ToastifyComponent } from './toastify/toastify.component' + +export const ADVANCED_ROUTES: Route[] = [ + { + path: 'ratings', + component: RatingsComponent, + data: { title: 'Ratings' }, + }, + { + path: 'alert', + component: SweetalertComponent, + data: { title: 'Sweet Alert' }, + }, + { + path: 'swiper', + component: SwiperComponent, + data: { title: 'Swiper Slider' }, + }, + { + path: 'scrollbar', + component: ScrollbarComponent, + data: { title: 'Scrollbar' }, + }, + { + path: 'toastify', + component: ToastifyComponent, + data: { title: 'Toastify' }, + }, +] diff --git a/apiferia/src/app/views/advanced-ui/ratings/ratings.component.html b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.html new file mode 100644 index 00000000..6231b217 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.html @@ -0,0 +1,214 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Rater js is the best star rater for the browser. No dependencies. + Unlimited number of stars +

    + +
    Usage
    +

    + To use Rating, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Basic Rater Example + # +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    + Rater with Step Example + # +
    + +
    +
    + + @if (fill > 0) { + + } @else { + + } + + +
    +
    +
    + +
    +
    +
    + Custom Messages Example + # +
    + +
    +
    + + @if (fill > 0) { + + } @else { + + } + + +
    +
    +
    + +
    +
    +
    + ReadOnly Example + # +
    + +
    +
    + + @if (fill > 0) { + + } @else { + + } + + +
    +
    +
    + +
    +
    +
    + On Hover Event Example + # +
    + +
    +
    +
    + + @if (fill > 0) { + + } @else { + + } + + + + {{ + hoverSelected + }} +
    +
    +
    +
    + +
    +
    +
    + Clear/Reset Rater Example + # +
    + +
    +
    +
    + + + @if (fill > 0) { + + } @else { + + } + + + +
    +
    +
    +
    +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/advanced-ui/ratings/ratings.component.spec.ts b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.spec.ts new file mode 100644 index 00000000..ce18a7a0 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RatingsComponent } from './ratings.component' + +describe('RatingsComponent', () => { + let component: RatingsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RatingsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RatingsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/advanced-ui/ratings/ratings.component.ts b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.ts new file mode 100644 index 00000000..0638fd6d --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/ratings/ratings.component.ts @@ -0,0 +1,37 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { + FormControl, + FormsModule, + ReactiveFormsModule, + Validators, +} from '@angular/forms' +import { NgbRatingModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-ratings', + standalone: true, + imports: [ + PageTitleComponent, + NgbRatingModule, + ReactiveFormsModule, + UIExamplesListComponent, + ], + templateUrl: './ratings.component.html', + styles: ``, +}) +export class RatingsComponent { + basicRating = 5 + rating = 3 + stepRating = 0 + currentRate = 2 + selected = 0 + hovered = 0 + hoverSelected = 1 + readonly = 3.5 + ariaValueText(current: number, max: number) { + return `${current} out of ${max} hearts` + } + ctrl = new FormControl(null, Validators.required) +} diff --git a/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.html b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.html new file mode 100644 index 00000000..bdfd1a1c --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.html @@ -0,0 +1,226 @@ + + +
    +
    +
    +
    +
    + Default Scroll Example + # +
    +

    + Just use tag + ngx-simplebar and add max-height: **px oh + fix height +

    + +
    + + SimpleBar does only one thing: replace the browser's default + scrollbar with a custom CSS-styled one without losing performances. + Unlike some popular plugins, SimpleBar doesn't mimic scroll with + Javascript, causing janks and strange scrolling behaviours... You + keep the awesomeness of native scrolling...with a custom scrollbar! +

    + SimpleBar + does NOT implement a custom scroll behaviour. It + keeps the + native + overflow: auto + scroll and + only replace the scrollbar visual appearance. +

    +
    Design it as you want
    +

    + SimpleBar uses pure CSS to style the scrollbar. You can easily + customize it as you want! Or even have multiple style on the same + page...or just keep the default style ("Mac OS" scrollbar style). +

    +
    Lightweight and performant
    +

    + Only 6kb minified. SimpleBar doesn't use Javascript to handle + scrolling. You keep the performances/behaviours of the native + scroll. +

    +
    Supported everywhere
    +

    + SimpleBar has been tested on the following browsers: Chrome, + Firefox, Safari, Edge, IE11. +

    +
    +
    +
    +
    + +
    +
    +
    + RTL Position + # +
    +

    + Just add tag ngx-simplebar and use data attribute + data-simplebar-direction='rtl' + and add max-height: **px oh fix height +

    +
    + + SimpleBar does only one thing: replace the browser's default + scrollbar with a custom CSS-styled one without losing performances. + Unlike some popular plugins, SimpleBar doesn't mimic scroll with + Javascript, causing janks and strange scrolling behaviours... You + keep the awesomeness of native scrolling...with a custom scrollbar! +

    + SimpleBar + does NOT implement a custom scroll behaviour. It + keeps the + native + overflow: auto + scroll and + only replace the scrollbar visual appearance. +

    +
    Design it as you want
    +

    + SimpleBar uses pure CSS to style the scrollbar. You can easily + customize it as you want! Or even have multiple style on the same + page...or just keep the default style ("Mac OS" scrollbar style). +

    +
    Lightweight and performant
    +

    + Only 6kb minified. SimpleBar doesn't use Javascript to handle + scrolling. You keep the performances/behaviours of the native + scroll. +

    +
    Supported everywhere
    +

    + SimpleBar has been tested on the following browsers: Chrome, + Firefox, Safari, Edge, IE11. +

    +
    +
    +
    +
    + +
    +
    +
    + Scroll Size + # +
    +

    + Just add a tag ngx-simplebar and use data attribute use + data attribute data-simplebar-lg and add + max-height: **px oh fix height +

    +
    + + SimpleBar does only one thing: replace the browser's default + scrollbar with a custom CSS-styled one without losing performances. + Unlike some popular plugins, SimpleBar doesn't mimic scroll with + Javascript, causing janks and strange scrolling behaviours... You + keep the awesomeness of native scrolling...with a custom scrollbar! +

    + SimpleBar + does NOT implement a custom scroll behaviour. It + keeps the + native + overflow: auto + scroll and + only replace the scrollbar visual appearance. +

    +
    Design it as you want
    +

    + SimpleBar uses pure CSS to style the scrollbar. You can easily + customize it as you want! Or even have multiple style on the same + page...or just keep the default style ("Mac OS" scrollbar style). +

    +
    Lightweight and performant
    +

    + Only 6kb minified. SimpleBar doesn't use Javascript to handle + scrolling. You keep the performances/behaviours of the native + scroll. +

    +
    Supported everywhere
    +

    + SimpleBar has been tested on the following browsers: Chrome, + Firefox, Safari, Edge, IE11. +

    +
    +
    +
    +
    + +
    +
    +
    + Scroll Color + # +
    +

    + Just add a tag ngx-simplebar and use data attribute + data-simplebar data-simplebar-* + and add max-height: **px oh fix height +

    + +
    + + SimpleBar does only one thing: replace the browser's default + scrollbar with a custom CSS-styled one without losing performances. + Unlike some popular plugins, SimpleBar doesn't mimic scroll with + Javascript, causing janks and strange scrolling behaviours... You + keep the awesomeness of native scrolling...with a custom scrollbar! +

    + SimpleBar + does NOT implement a custom scroll behaviour. It + keeps the + native + overflow: auto + scroll and + only replace the scrollbar visual appearance. +

    +
    Design it as you want
    +

    + SimpleBar uses pure CSS to style the scrollbar. You can easily + customize it as you want! Or even have multiple style on the same + page...or just keep the default style ("Mac OS" scrollbar style). +

    +
    Lightweight and performant
    +

    + Only 6kb minified. SimpleBar doesn't use Javascript to handle + scrolling. You keep the performances/behaviours of the native + scroll. +

    +
    Supported everywhere
    +

    + SimpleBar has been tested on the following browsers: Chrome, + Firefox, Safari, Edge, IE11. +

    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.spec.ts b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.spec.ts new file mode 100644 index 00000000..c3e93c12 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ScrollbarComponent } from './scrollbar.component' + +describe('ScrollbarComponent', () => { + let component: ScrollbarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ScrollbarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ScrollbarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.ts b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.ts new file mode 100644 index 00000000..27865188 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/scrollbar/scrollbar.component.ts @@ -0,0 +1,17 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'app-scrollbar', + standalone: true, + imports: [ + PageTitleComponent, + SimplebarAngularModule, + UIExamplesListComponent, + ], + templateUrl: './scrollbar.component.html', + styles: ``, +}) +export class ScrollbarComponent {} diff --git a/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.html b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.html new file mode 100644 index 00000000..7d7ab547 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.html @@ -0,0 +1,166 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + A beautiful, responsive, customizable, accessible (WAI-ARIA) + replacement for JavaScript's popup boxes +

    + +
    Usage
    +

    + To use SweetAlert, follow the instructions from its documentation + over + here +

    +
    +
    + +
    +
    +
    + Basic# +
    + +
    + +
    +
    +
    + +
    +
    +
    + A Title with a Text Under# +
    + +
    + +
    +
    +
    + +
    +
    +
    + Message# +
    + +
    + + + + +
    +
    +
    + +
    +
    +
    + Long content Images Message# +
    + +
    + +
    +
    +
    + +
    +
    +
    + Parameter# +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.spec.ts b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.spec.ts new file mode 100644 index 00000000..29eb42ca --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SweetalertComponent } from './sweetalert.component' + +describe('SweetalertComponent', () => { + let component: SweetalertComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SweetalertComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SweetalertComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.ts b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.ts new file mode 100644 index 00000000..86ba18b5 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/sweetalert/sweetalert.component.ts @@ -0,0 +1,146 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import Swal from 'sweetalert2' + +@Component({ + selector: 'app-sweetalert', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './sweetalert.component.html', + styles: ``, +}) +export class SweetalertComponent { + basicMessage() { + Swal.fire({ + title: 'Any fool can use a computer', + confirmButtonColor: '#1c84ee', + showCloseButton: false, + }) + } + + titleText() { + Swal.fire({ + title: 'The Internet?', + text: 'That thing is still around?', + icon: 'question', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + buttonsStyling: false, + showCloseButton: false, + }) + } + + success() { + Swal.fire({ + title: 'Good job!', + text: 'You clicked the button!', + icon: 'success', + showCancelButton: true, + customClass: { + confirmButton: 'btn btn-primary w-xs me-2 mt-2', + cancelButton: 'btn btn-danger w-xs mt-2', + }, + buttonsStyling: false, + showCloseButton: false, + }) + } + + danger() { + Swal.fire({ + title: 'Oops...', + text: 'Something went wrong!', + icon: 'error', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + buttonsStyling: false, + footer: 'Why do I have this issue?', + showCloseButton: false, + }) + } + + info() { + Swal.fire({ + title: 'Oops...', + text: 'Something went wrong!', + icon: 'info', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + buttonsStyling: false, + footer: 'Why do I have this issue?', + showCloseButton: false, + }) + } + warning() { + Swal.fire({ + title: 'Oops...', + text: 'Something went wrong!', + icon: 'warning', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + + buttonsStyling: false, + footer: 'Why do I have this issue?', + showCloseButton: false, + }) + } + + longContent() { + Swal.fire({ + imageUrl: 'https://placeholder.pics/svg/300x1500', + imageHeight: 1500, + imageAlt: 'A tall image', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + buttonsStyling: false, + showCloseButton: false, + }) + } + + parameter() { + Swal.fire({ + title: 'Are you sure?', + text: "You won't be able to revert this!", + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes, delete it!', + cancelButtonText: 'No, cancel!', + customClass: { + confirmButton: 'btn btn-primary w-xs me-2 mt-2', + cancelButton: 'btn btn-danger w-xs mt-2', + }, + buttonsStyling: false, + showCloseButton: false, + }).then(function (result) { + if (result.value) { + Swal.fire({ + title: 'Deleted!', + text: 'Your file has been deleted.', + icon: 'success', + customClass: { + confirmButton: 'btn btn-primary w-xs mt-2', + }, + buttonsStyling: false, + }) + } else if ( + // Read more about handling dismissals + result.dismiss === Swal.DismissReason.cancel + ) { + Swal.fire({ + title: 'Cancelled', + text: 'Your imaginary file is safe :)', + icon: 'error', + customClass: { + confirmButton: 'btn btn-primary mt-2', + }, + buttonsStyling: false, + }) + } + }) + } +} diff --git a/apiferia/src/app/views/advanced-ui/swiper/swiper.component.html b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.html new file mode 100644 index 00000000..d8a437ea --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.html @@ -0,0 +1,567 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Swiper is the most modern slider with hardware accelerated transitions + and amazing native behavior. +

    + +
    Usage
    +

    + To use Swiper, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Default Swiper + # +
    +

    + Use + [config]="swiperConfig" init="false" + attribute to set a default swiper. +

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

    + Use + [config]="swiperNavigation" init="false" + attribute to set a swiper with navigation and pagination. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Pagination Dynamic Swiper + # +
    +

    + Use + init="false" [config]="swiperPagination" + attribute to set a swiper with dynamic and pagination. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Effect Fade Swiper + # +
    +

    + Use + [config]="swiperfadeEffect" init="false" + attribute to set a swiper with fade effect. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Effect Creative Swiper + # +
    +

    + Use + [config]="swiperCreativeEffect" init="false" + attribute to set a swiper with creative custom effect. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Effect Flip Swiper + # +
    +

    + Use + [config]="swiperFlip" init="false" + attribute to set a swiper with flip custom effect. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Scrollbar Swiper + # +
    +

    + Use + [config]="swiperScroll" init="false" + attribute to set a swiper with scrollbar pagination. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Vertical Swiper + # +
    +

    + Use + [config]="verticalConfig" init="false" + attribute to set a swiper with vertical pagination. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Mousewheel Control Swiper + # +
    +

    + Use + init="false" [config]="swiperMouseWheel" + attribute to set a swiper with mousewheel scroll. +

    +
    +
    +
    + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Responsive Breakpoints Swiper + # +
    +

    + Use + init="false" [config]="resposiveConfig" + attribute to set a responsive swiper. +

    +
    + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/advanced-ui/swiper/swiper.component.spec.ts b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.spec.ts new file mode 100644 index 00000000..bd6b5e67 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SwiperComponent } from './swiper.component' + +describe('SwiperComponent', () => { + let component: SwiperComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SwiperComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SwiperComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/advanced-ui/swiper/swiper.component.ts b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.ts new file mode 100644 index 00000000..621f8330 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/swiper/swiper.component.ts @@ -0,0 +1,187 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core' +import { SwiperOptions } from 'swiper/types' +import { + Autoplay, + EffectCreative, + EffectFade, + EffectFlip, + Mousewheel, + Navigation, + Pagination, + Scrollbar, +} from 'swiper/modules' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { register } from 'swiper/element' +import { SwiperDirective } from '@/app/components/swiper-directive.component' + +register() + +@Component({ + selector: 'app-swiper', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent, SwiperDirective], + templateUrl: './swiper.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class SwiperComponent { + swiperConfig: SwiperOptions = { + loop: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + } + + swiperNavigation: SwiperOptions = { + modules: [Autoplay, Pagination, Navigation], + loop: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + clickable: true, + el: '.basic-pagination', + }, + navigation: { + nextEl: '.basic-next', + prevEl: '.basic-prev', + }, + } + + swiperPagination: SwiperOptions = { + modules: [Autoplay, Pagination], + loop: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + clickable: true, + el: '.dynamic-pagination', + dynamicBullets: true, + }, + } + + swiperfadeEffect: SwiperOptions = { + modules: [Pagination, Autoplay, EffectFade], + loop: true, + effect: 'fade', + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + clickable: true, + el: '.effect-pagination', + }, + } + + swiperCreativeEffect: SwiperOptions = { + modules: [Autoplay, Pagination, EffectCreative], + loop: true, + grabCursor: true, + effect: 'creative', + // EffectCreative: { + // prev: { + // shadow: true, + // translate: [0, 0, -400], + // }, + // next: { + // translate: ["100%", 0, 0], + // }, + // }, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + el: '.creative-pagination', + clickable: true, + }, + } + + swiperFlip: SwiperOptions = { + modules: [EffectFlip, Pagination], + loop: true, + effect: 'flip', + grabCursor: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + el: '.swiper-flip', + clickable: true, + }, + } + + swiperScroll: SwiperOptions = { + modules: [Autoplay, Scrollbar, Navigation], + loop: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + scrollbar: { + el: '.swiper-scrollbar', + hide: true, + }, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + } + + verticalConfig: SwiperOptions = { + modules: [Autoplay, Pagination], + loop: true, + direction: 'vertical', + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + el: '.vertical-pagination', + clickable: true, + }, + } + + swiperMouseWheel: SwiperOptions = { + modules: [Autoplay, Pagination, Mousewheel], + loop: true, + direction: 'vertical', + mousewheel: true, + autoplay: { + delay: 2500, + disableOnInteraction: false, + }, + pagination: { + el: '.mouse-wheel-pagination', + clickable: true, + }, + } + + resposiveConfig: SwiperOptions = { + modules: [Pagination], + loop: true, + slidesPerView: 1, + spaceBetween: 10, + pagination: { + el: '.responsive-pagination', + clickable: true, + }, + breakpoints: { + 768: { + slidesPerView: 2, + spaceBetween: 40, + }, + 1200: { + slidesPerView: 3, + spaceBetween: 50, + }, + }, + } +} diff --git a/apiferia/src/app/views/advanced-ui/toastify/toastify.component.html b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.html new file mode 100644 index 00000000..6fcb9b66 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.html @@ -0,0 +1,224 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    Better notification messages

    + +
    Usage
    +

    + To use Toastify, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Basic Toastify JS Example + # +
    + +
    +
    + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + Display Position Example + # +
    + +
    +
    + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + Offset, Close Button & Duration Example + # +
    + +
    +
    + + + + + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/advanced-ui/toastify/toastify.component.spec.ts b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.spec.ts new file mode 100644 index 00000000..5d80f4f2 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ToastifyComponent } from './toastify.component' + +describe('ToastifyComponent', () => { + let component: ToastifyComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ToastifyComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ToastifyComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/advanced-ui/toastify/toastify.component.ts b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.ts new file mode 100644 index 00000000..feddb926 --- /dev/null +++ b/apiferia/src/app/views/advanced-ui/toastify/toastify.component.ts @@ -0,0 +1,66 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { ToastrService } from 'ngx-toastr' + +@Component({ + selector: 'app-toastify', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './toastify.component.html', + styles: ``, +}) +export class ToastifyComponent { + constructor(public toastService: ToastrService) {} + + default() { + this.toastService.show('Welcome Back! This is a Toast Notification', '', { + toastClass: 'btn-light text-bg-primary px-3 py-2 mt-2 rounded-1', + positionClass: 'toast-top-right', + }) + } + + success(position: any) { + this.toastService.show('Your application was successfully sent', '', { + toastClass: 'btn-light text-bg-success px-3 py-2 mt-2 rounded-1', + positionClass: position, + }) + } + + warning() { + this.toastService.show('Warning ! Something went wrong try again', '', { + toastClass: 'btn-light text-bg-warning px-3 py-2 mt-2 rounded-1', + positionClass: 'toast-top-center', + }) + } + + error() { + this.toastService.show('Error ! An error occurred.', '', { + toastClass: 'btn-light text-bg-danger px-3 py-2 mt-2 rounded-1', + positionClass: 'toast-top-center', + }) + } + + positionToast(position: any) { + this.toastService.success( + 'Welcome Back ! This is a Toast Notification', + '', + { + timeOut: 3000, + closeButton: true, + toastClass: 'btn-light text-bg-success px-3 py-2 mt-2 rounded-1', + positionClass: position, + tapToDismiss: true, + } + ) + } + + durationToast(position: any) { + this.toastService.show('Toast Duration 5s', '', { + timeOut: 5000, + positionClass: position, + toastClass: 'btn-light text-bg-success px-3 py-2 mt-2 rounded-1', + closeButton: false, + }) + } +} diff --git a/apiferia/src/app/views/apps/apps.route.ts b/apiferia/src/app/views/apps/apps.route.ts new file mode 100644 index 00000000..74532def --- /dev/null +++ b/apiferia/src/app/views/apps/apps.route.ts @@ -0,0 +1,34 @@ +import { Route } from '@angular/router' +import { ChatComponent } from './chat/chat.component' +import { ContactsComponent } from './contacts/contacts.component' +import { EmailComponent } from './email/email.component' +import { SocialComponent } from './social/social.component' +import { TodoComponent } from './todo/todo.component' + +export const APPS_ROUTES: Route[] = [ + { + path: 'chat', + component: ChatComponent, + data: { title: 'Chat' }, + }, + { + path: 'email', + component: EmailComponent, + data: { title: 'Email' }, + }, + { + path: 'todo', + component: TodoComponent, + data: { title: 'To do' }, + }, + { + path: 'social', + component: SocialComponent, + data: { title: 'Social' }, + }, + { + path: 'contacts', + component: ContactsComponent, + data: { title: 'Contacts' }, + }, +] diff --git a/apiferia/src/app/views/apps/chat/chat.component.html b/apiferia/src/app/views/apps/chat/chat.component.html new file mode 100644 index 00000000..9091754f --- /dev/null +++ b/apiferia/src/app/views/apps/chat/chat.component.html @@ -0,0 +1,17 @@ +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/apps/chat/chat.component.spec.ts b/apiferia/src/app/views/apps/chat/chat.component.spec.ts new file mode 100644 index 00000000..0281adcc --- /dev/null +++ b/apiferia/src/app/views/apps/chat/chat.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ChatComponent } from './chat.component' + +describe('ChatComponent', () => { + let component: ChatComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ChatComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ChatComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/chat/chat.component.ts b/apiferia/src/app/views/apps/chat/chat.component.ts new file mode 100644 index 00000000..51d8cf22 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/chat.component.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core' +import { ContactsComponent } from './components/contacts/contacts.component' +import { ChatListComponent } from './components/chat-list/chat-list.component' +import type { ContactType, GroupType, UserContactType } from './data' + +@Component({ + selector: 'app-chat', + standalone: true, + imports: [ContactsComponent, ChatListComponent], + templateUrl: './chat.component.html', + styles: ``, +}) +export class ChatComponent { + profileDetail!: ContactType | GroupType | UserContactType + + receiveDataFromChild(data: ContactType | GroupType | UserContactType) { + this.profileDetail = data + } +} diff --git a/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.html b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.html new file mode 100644 index 00000000..93374696 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.html @@ -0,0 +1,435 @@ +
    +
    + + +
    + @if (getProfileImage()) { + avatar-4 + } @else { + + {{ profileDetail.name.charAt(0) }} + } +
    +
    + + {{ profileDetail.name }} + +
    +

    typing...

    +
    +
    + +
    + +
    +
    + +
    + + @for (chat of messagesList; track $index) { +
  • + @for (msg of chat.msg; track msg) { +
    + @if (chat.isSender) { +
    + +
    + @if (msg.isMedia && msg.mediaContend) { +
    +
    + +
    +
    + {{ + msg.mediaContend.title + }} +

    + {{ msg.mediaContend.size }} +

    +
    +
    + } @else { +

    {{ msg.text }}

    + } +
    +
    + } @else { +
    +
    + @if (msg.isMedia && msg.mediaContend) { +
    +
    + +
    +
    + {{ + msg.mediaContend.title + }} +

    + {{ msg.mediaContend.size }} +

    +
    +
    + } @else if (msg.img) { + @for (img of msg.img; track $index) { + + attachment + + } + } @else { +

    {{ msg.text }}

    + } +
    + +
    + } +

    + @if (chat.timeStamp && chat.msg.length - 1 === $index) { + {{ chat.timeStamp }} + @if (chat.isRead) { + + } + } +

    +
    + } +
  • + } +
    + +
    +
    +
    +
    +
    + + @if (showEmojiPicker) { + + } + +
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    + + + + + + + + +
    diff --git a/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.spec.ts b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.spec.ts new file mode 100644 index 00000000..bcc3bf81 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ChatListComponent } from './chat-list.component' + +describe('ChatListComponent', () => { + let component: ChatListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ChatListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ChatListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.ts b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.ts new file mode 100644 index 00000000..8f5a21cd --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/chat-list/chat-list.component.ts @@ -0,0 +1,174 @@ +import { + Component, + inject, + Input, + ViewChild, + type TemplateRef, +} from '@angular/core' +import { + MessageData, + type ContactType, + type GroupType, + type UserContactType, +} from '../../data' +import { CommonModule } from '@angular/common' +import { + SimplebarAngularModule, + type SimplebarAngularComponent, +} from 'simplebar-angular' +import { + NgbDropdownModule, + NgbModal, + NgbOffcanvas, +} from '@ng-bootstrap/ng-bootstrap' +import { ProfileComponent } from '../profile/profile.component' +import { ContactsComponent } from '../contacts/contacts.component' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + Validators, + type UntypedFormGroup, +} from '@angular/forms' +import { PickerModule } from '@ctrl/ngx-emoji-mart' +import type { EmojiEvent } from '@ctrl/ngx-emoji-mart/ngx-emoji' + +@Component({ + selector: 'chat-list', + standalone: true, + imports: [ + CommonModule, + SimplebarAngularModule, + NgbDropdownModule, + FormsModule, + ReactiveFormsModule, + PickerModule, + ], + templateUrl: './chat-list.component.html', + styles: ``, +}) +export class ChatListComponent { + @Input() profileDetail!: ContactType | GroupType | UserContactType + + messagesList = MessageData + formData!: UntypedFormGroup + submitted = false + emoji = '' + + public offCanvas = inject(NgbOffcanvas) + private modalService = inject(NgbModal) + public formBuilder = inject(UntypedFormBuilder) + + @ViewChild('scrollRef', { static: false }) + scrollRef!: SimplebarAngularComponent + + ngOnInit(): void { + // Validation + this.formData = this.formBuilder.group({ + message: ['', [Validators.required]], + }) + } + + getProfileImage(): string | undefined { + if ('image' in this.profileDetail) { + return this.profileDetail.image + } + return undefined + } + + ngAfterViewInit() { + this.scrollRef.SimpleBar.getScrollElement().scrollTop = 300 + this.onListScroll() + } + + onListScroll() { + if (this.scrollRef !== undefined) { + setTimeout(() => { + this.scrollRef.SimpleBar.getScrollElement().scrollTop = + this.scrollRef.SimpleBar.getScrollElement().scrollHeight + }, 100) + } + } + + openProfile() { + const divElement = document.getElementById('chatArea')! + const offcanvasRef = this.offCanvas.open(ProfileComponent, { + panelClass: 'position-absolute shadow border-start show', + position: 'end', + container: divElement, + backdrop: false, + scroll: true, + }) + offcanvasRef.componentInstance.profileDetail = this.profileDetail + } + + open(content: TemplateRef) { + this.modalService.open(content, { size: 'sm', centered: true }) + } + + openContactMenu() { + this.offCanvas.open(ContactsComponent, { + panelClass: 'chatOffcanvas', + }) + } + + get form() { + return this.formData.controls + } + + messageSend() { + const message = this.formData.get('message')!.value + if (this.formData.valid && message) { + this.messagesList.push({ + id: this.messagesList.length + 1, + msg: [{ text: message }], + timeStamp: new Date().getHours() + ':' + new Date().getMinutes(), + isSender: true, + }) + setTimeout(() => { + this.messagesList.push({ + id: this.messagesList.length + 1, + msg: [{ text: 'Server is not connected 😔' }], + timeStamp: new Date().getHours() + ':' + new Date().getMinutes(), + isSender: false, + }) + this.onListScroll() + }, 1000) + } else { + this.submitted = true + } + + this.onListScroll() + setTimeout(() => { + this.formData.reset() + }, 500) + } + + // Emoji Picker + showEmojiPicker = false + sets = [ + 'native', + 'google', + 'twitter', + 'facebook', + 'emojione', + 'apple', + 'messenger', + ] + set = 'twitter' + toggleEmojiPicker() { + this.showEmojiPicker = !this.showEmojiPicker + } + + addEmoji(event: EmojiEvent) { + const { emoji } = this + let text + if (emoji) { + text = `${emoji}${event.emoji.native}` + } else { + text = `${event.emoji.native}` + } + this.emoji = text + this.showEmojiPicker = false + } +} diff --git a/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.html b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.html new file mode 100644 index 00000000..65c06210 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.html @@ -0,0 +1,226 @@ +
    +
    +

    Chat

    + + + +
    + + + +
    + + @for (usr of userData; track $index) { + +
    + avatar-1 +
    +
    + } +
    +
    + + + +
    +
    diff --git a/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.spec.ts b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.spec.ts new file mode 100644 index 00000000..5653938e --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ContactsComponent } from './contacts.component' + +describe('ContactsComponent', () => { + let component: ContactsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ContactsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ContactsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.ts b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.ts new file mode 100644 index 00000000..93f9afb2 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/contacts/contacts.component.ts @@ -0,0 +1,83 @@ +import { SwiperDirective } from '@/app/components/swiper-directive.component' +import { + Component, + CUSTOM_ELEMENTS_SCHEMA, + EventEmitter, + inject, + Output, + type OnInit, +} from '@angular/core' +import { register } from 'swiper/element' +import { + ContactList, + GroupList, + UserContact, + UserList, + type ContactType, + type GroupType, + type UserContactType, +} from '../../data' +import type { SwiperOptions } from 'swiper/types' +import { NgbNavModule, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap' +import { SimplebarAngularModule } from 'simplebar-angular' +import { SettingComponent } from '../setting/setting.component' +import { FormsModule } from '@angular/forms' +register() + +@Component({ + selector: 'chat-contacts', + standalone: true, + imports: [SwiperDirective, NgbNavModule, SimplebarAngularModule, FormsModule], + templateUrl: './contacts.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ContactsComponent implements OnInit { + userData = UserList + contactData = ContactList + groupData = GroupList + userContactList = UserContact + searchText: string = '' + + @Output() profileDetail = new EventEmitter< + ContactType | GroupType | UserContactType + >() + + private offcanvasService = inject(NgbOffcanvas) + + ngOnInit(): void { + // Fetch Data + const data = this.contactData[2] + this.profileDetail.emit(data) + } + + swiperConfig: SwiperOptions = { + slidesPerView: 6.3, + loop: true, + } + + openSetting(divId: string) { + const divElement = document.getElementById(divId)! + if (this.offcanvasService.hasOpenOffcanvas()) { + this.offcanvasService.open(SettingComponent) + } else { + this.offcanvasService.open(SettingComponent, { + container: divElement, + panelClass: 'position-absolute shadow w-100', + backdrop: false, + }) + } + } + + getDetail(user: ContactType | GroupType | UserContactType) { + const data = user + this.profileDetail.emit(data) + } + + searchContact() { + this.contactData = ContactList.filter( + (user) => + user.name.toLowerCase().indexOf(this.searchText.toLowerCase()) >= 0 + ) + } +} diff --git a/apiferia/src/app/views/apps/chat/components/profile/profile.component.html b/apiferia/src/app/views/apps/chat/components/profile/profile.component.html new file mode 100644 index 00000000..dd8a79f1 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/profile/profile.component.html @@ -0,0 +1,110 @@ +
    +
    + Profile +
    + +
    + +
    +
    + @if (profileDetail.image) { + shreyu + } @else { +
    + {{ profileDetail.name.charAt(0) }} +
    + } + +

    {{ profileDetail.name }}

    + +

    + Last Interacted: + Online +

    +
    + +
    +
    + +

    + Phone Number: +

    +

    +1 456 9595 9594

    + +

    + Location: +

    +

    California, USA

    + +

    + Languages: +

    +

    English, German, Spanish

    + +

    + Groups: +

    +

    + Work + Friends +

    +
    + +
    + + See All + Shared Photoes + +
    +
    +
    + + img-1 + +
    +
    + + img-2 + +
    + +
    +
    +
    diff --git a/apiferia/src/app/views/apps/chat/components/profile/profile.component.spec.ts b/apiferia/src/app/views/apps/chat/components/profile/profile.component.spec.ts new file mode 100644 index 00000000..1cca759b --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/profile/profile.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProfileComponent } from './profile.component' + +describe('ProfileComponent', () => { + let component: ProfileComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProfileComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProfileComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/chat/components/profile/profile.component.ts b/apiferia/src/app/views/apps/chat/components/profile/profile.component.ts new file mode 100644 index 00000000..2224bc1a --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/profile/profile.component.ts @@ -0,0 +1,23 @@ +import { Component, inject, Input } from '@angular/core' +import { NgbActiveOffcanvas } from '@ng-bootstrap/ng-bootstrap' +import type { ContactType } from '../../data' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'app-profile', + standalone: true, + imports: [SimplebarAngularModule], + templateUrl: './profile.component.html', + styles: ` + :host { + display: contents !important; + } + `, +}) +export class ProfileComponent { + activeOffcanvas = inject(NgbActiveOffcanvas) + + @Input() profileDetail!: ContactType + + ngOnInit() {} +} diff --git a/apiferia/src/app/views/apps/chat/components/setting/setting.component.html b/apiferia/src/app/views/apps/chat/components/setting/setting.component.html new file mode 100644 index 00000000..de67f660 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/setting/setting.component.html @@ -0,0 +1,477 @@ +
    +
    + Profile +
    + +
    + +

    Setting

    + +
    + avatar-1 +
    +
    + +
    +
    Gaston Lapierre
    +

    + Hey there! I am using Reback Chat. +

    +
    +
    + +
    +
    +
    +
    + +
    + + +
    + +
    +
    + +
    + +
    +
    +
    Display
    + +
    +
    Chat Setting
    + +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    +
      +
    • +
      +
      + +
      +
      + Conversation Tones +

      + Play sound for incoming and outgoing message. +

      +
    • +
    +
    +
    Messages
    + +
    +
    Groups
    + +
    +
    Calls
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +
      +
    • + +
      + Network usage +

      + 7.2 GB sent - 13.8 GB received +

      +
      +
    • +
    +
    +
    Media auto-download
    +

    + Voice message are always automatically downloaded +

    + +
    +
    Media upload quality
    +

    + Choose the quality of media files to be sent +

    + +
    +
    +
    + +
    +
    + +
    + +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/apps/chat/components/setting/setting.component.spec.ts b/apiferia/src/app/views/apps/chat/components/setting/setting.component.spec.ts new file mode 100644 index 00000000..42a3f6fb --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/setting/setting.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SettingComponent } from './setting.component' + +describe('SettingComponent', () => { + let component: SettingComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SettingComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SettingComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/chat/components/setting/setting.component.ts b/apiferia/src/app/views/apps/chat/components/setting/setting.component.ts new file mode 100644 index 00000000..89a58b4f --- /dev/null +++ b/apiferia/src/app/views/apps/chat/components/setting/setting.component.ts @@ -0,0 +1,21 @@ +import { Component, inject } from '@angular/core' +import { + NgbAccordionModule, + NgbActiveOffcanvas, +} from '@ng-bootstrap/ng-bootstrap' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'app-setting', + standalone: true, + imports: [SimplebarAngularModule, NgbAccordionModule], + templateUrl: './setting.component.html', + styles: ` + :host { + display: contents !important; + } + `, +}) +export class SettingComponent { + activeOffcanvas = inject(NgbActiveOffcanvas) +} diff --git a/apiferia/src/app/views/apps/chat/data.ts b/apiferia/src/app/views/apps/chat/data.ts new file mode 100644 index 00000000..7db85485 --- /dev/null +++ b/apiferia/src/app/views/apps/chat/data.ts @@ -0,0 +1,299 @@ +import { currentYear } from '@/app/common/constants' + +type UserType = { + name: string + image: string +} + +export type ContactType = { + image?: string + name: string + lastMsg: string + time: string + isRead: boolean +} + +export type GroupType = { + name: string + badge?: number +} + +export type UserContactType = { + name: string + image?: string + status: string +} + +type MediaContendType = { + title: string + type: string + size: string +} + +type MessageType = { + text?: string + img?: string[] + isMedia?: boolean + mediaContend?: MediaContendType +} + +export type ChatMsgType = { + id: number + msg: MessageType[] + timeStamp?: string + isSender: boolean + isRead?: boolean +} + +export const UserList: UserType[] = [ + { + name: '', + image: 'assets/images/users/avatar-1.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-2.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-3.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-4.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-5.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-6.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-7.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-8.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-9.jpg', + }, + { + name: '', + image: 'assets/images/users/avatar-10.jpg', + }, +] + +export const ContactList: ContactType[] = [ + { + image: 'assets/images/users/avatar-2.jpg', + name: 'Gaston Lapierre', + lastMsg: 'How are you today?', + time: '10:20am', + isRead: true, + }, + { + name: 'Fantina LeBatelier', + time: '11:03am', + lastMsg: "Hey! a reminder for tomorrow's meeting...", + image: 'assets/images/users/avatar-3.jpg', + isRead: true, + }, + { + name: 'Gilbert Chicoine', + time: 'now', + lastMsg: 'typing...', + image: 'assets/images/users/avatar-4.jpg', + isRead: false, + }, + { + name: 'Mignonette Brodeur', + time: 'Yesterday', + lastMsg: "Are we going to have this week's planning meeting today?", + image: 'assets/images/users/avatar-5.jpg', + isRead: true, + }, + { + name: 'Thomas Menard', + time: 'Yesterday', + lastMsg: 'Please check this template...', + image: 'assets/images/users/avatar-6.jpg', + isRead: true, + }, + { + name: 'Melisande Lapointe', + time: 'Yesterday', + lastMsg: 'Are free for 10 minutes? would like to discuss something...', + image: 'assets/images/users/avatar-7.jpg', + isRead: true, + }, + { + name: 'Danielle Despins', + time: '7/8/21', + lastMsg: 'How are you?', + image: 'assets/images/users/avatar-8.jpg', + isRead: true, + }, + { + name: 'Onfroi Pichette', + time: '7/8/21', + lastMsg: 'whats going on?', + image: 'assets/images/users/avatar-9.jpg', + isRead: true, + }, + { + name: 'Kari Boisvert', + time: '7/8/21', + lastMsg: 'Would you like to join us?', + image: 'assets/images/users/avatar-10.jpg', + isRead: false, + }, +] + +export const GroupList: GroupType[] = [ + { + name: 'General', + }, + { + name: 'Company', + badge: 33, + }, + { + name: 'Life Suckers', + badge: 17, + }, + { + name: 'Drama Club', + }, + { + name: 'Unknown Friends', + }, + { + name: 'Family Ties', + badge: 65, + }, + { + name: '2Good4U', + }, +] + +export const UserContact: UserContactType[] = [ + { + name: 'Gaston Lapierre', + image: 'assets/images/users/avatar-2.jpg', + status: '', + }, + { + name: 'Fantina LeBatelier', + image: 'assets/images/users/avatar-3.jpg', + status: '** no status **', + }, + { + name: 'Gilbert Chicoine', + image: 'assets/images/users/avatar-4.jpg', + status: '|| Karma ||', + }, + { + name: 'Mignonette Brodeur', + image: 'assets/images/users/avatar-5.jpg', + status: 'Hey there! I am using Chat.', + }, + { + name: 'Thomas Menard', + image: 'assets/images/users/avatar-6.jpg', + status: 'TM', + }, + { + name: 'Melisande Lapointe', + image: 'assets/images/users/avatar-7.jpg', + status: 'Available', + }, + { + name: 'Danielle Despins', + image: 'assets/images/users/avatar-8.jpg', + status: 'Hey there! I am using Chat.', + }, +] + +export const MessageData: ChatMsgType[] = [ + { + id: 1, + msg: [{ text: 'Hey 😊' }], + timeStamp: '8:20 am', + isSender: false, + }, + { + id: 2, + msg: [{ text: 'Hi' }], + timeStamp: '8:20 am', + isSender: true, + isRead: true, + }, + { + id: 3, + msg: [ + { + text: "Hi Gaston, thanks for joining the meeting. Let's dive into our quarterly performance review.", + }, + ], + isSender: false, + }, + { + id: 4, + msg: [ + { + text: `Hi Gilbert, thanks for having me. I'm ready to discuss how things have been going.`, + }, + ], + timeStamp: '8:25 am', + isSender: true, + isRead: true, + }, + { + id: 5, + msg: [ + { + img: [ + 'assets/images/small/img-1.jpg', + 'assets/images/small/img-2.jpg', + 'assets/images/small/img-3.jpg', + ], + }, + ], + timeStamp: '8:26 am', + isSender: false, + }, + { + id: 6, + msg: [ + { + isMedia: true, + mediaContend: { + title: 'financial-report-' + currentYear + '.zip', + type: 'bxs-file-archive', + size: '2.3 MB', + }, + }, + { + text: 'I appreciate your honesty. Can you elaborate on some of those challenges? I want to understand how we can support you better in the future.', + }, + ], + timeStamp: '8:27 am', + isSender: true, + isRead: true, + }, + { + id: 7, + msg: [ + { + text: `Thanks, Emily. I appreciate your support. Overall, I'm optimistic about our team's performance and looking forward to tackling new challenges in the next quarter.`, + }, + ], + timeStamp: '8:29 am', + isSender: false, + }, +] diff --git a/apiferia/src/app/views/apps/contacts/contacts.component.html b/apiferia/src/app/views/apps/contacts/contacts.component.html new file mode 100644 index 00000000..8e5cbb45 --- /dev/null +++ b/apiferia/src/app/views/apps/contacts/contacts.component.html @@ -0,0 +1,39 @@ + + +
    + @for (data of contactList; track $index) { + + } +
    diff --git a/apiferia/src/app/views/apps/contacts/contacts.component.spec.ts b/apiferia/src/app/views/apps/contacts/contacts.component.spec.ts new file mode 100644 index 00000000..5653938e --- /dev/null +++ b/apiferia/src/app/views/apps/contacts/contacts.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ContactsComponent } from './contacts.component' + +describe('ContactsComponent', () => { + let component: ContactsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ContactsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ContactsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/contacts/contacts.component.ts b/apiferia/src/app/views/apps/contacts/contacts.component.ts new file mode 100644 index 00000000..1138cd43 --- /dev/null +++ b/apiferia/src/app/views/apps/contacts/contacts.component.ts @@ -0,0 +1,15 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { contactData } from './data' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-contacts', + standalone: true, + imports: [PageTitleComponent, RouterLink], + templateUrl: './contacts.component.html', + styles: ``, +}) +export class ContactsComponent { + contactList = contactData +} diff --git a/apiferia/src/app/views/apps/contacts/data.ts b/apiferia/src/app/views/apps/contacts/data.ts new file mode 100644 index 00000000..b087ab99 --- /dev/null +++ b/apiferia/src/app/views/apps/contacts/data.ts @@ -0,0 +1,69 @@ +export type ContactType = { + name: string + location: string + phone: string + profile_image: string +} + +export const contactData: ContactType[] = [ + { + name: 'Anna M. Hines', + location: 'Burr Ridge/Illinois', + phone: '555-1564-261', + profile_image: 'assets/images/users/avatar-1.jpg', + }, + { + name: 'Candice F. Gilmore', + location: 'Roselle/Illinois', + phone: '755-5532-588', + profile_image: 'assets/images/users/avatar-2.jpg', + }, + { + name: 'Vanessa R. Davis', + location: 'Wann/Oklahoma', + phone: '441-5558-183', + profile_image: 'assets/images/users/avatar-3.jpg', + }, + { + name: 'Judith H. Fritsche', + location: 'SULLIVAN/Kentucky', + phone: '305-5579-759', + profile_image: 'assets/images/users/avatar-4.jpg', + }, + { + name: 'Peter T. Smith', + location: 'Yreka/California', + phone: '655-5187-93', + profile_image: 'assets/images/users/avatar-5.jpg', + }, + { + name: 'Emmanuel J. Delcid', + location: 'Atlanta/Georgia', + phone: '693-5553-637', + profile_image: 'assets/images/users/avatar-6.jpg', + }, + { + name: 'William J. Cook', + location: 'Rosenberg/Texas', + phone: '855-5446-150', + profile_image: 'assets/images/users/avatar-7.jpg', + }, + { + name: 'Martin R. Peters', + location: 'Youngstown/Ohio', + phone: '455-5943-13', + profile_image: 'assets/images/users/avatar-8.jpg', + }, + { + name: 'Paul M. Schubert', + location: 'Austin/Texas', + phone: '035-5531-64', + profile_image: 'assets/images/users/avatar-9.jpg', + }, + { + name: 'Janet J. Champine', + location: 'Nashville/Tennessee', + phone: '115-5592-916', + profile_image: 'assets/images/users/avatar-10.jpg', + }, +] diff --git a/apiferia/src/app/views/apps/email/components/compose/compose.component.html b/apiferia/src/app/views/apps/email/components/compose/compose.component.html new file mode 100644 index 00000000..bf9bd7a5 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/compose/compose.component.html @@ -0,0 +1,261 @@ + +
    +
    + +
    + + + +
    +

    + FREE +

    +
    Storage
    + +

    7.02 GB (46%) of 15 GB used

    +
    +
    +
    + + diff --git a/apiferia/src/app/views/apps/email/components/compose/compose.component.spec.ts b/apiferia/src/app/views/apps/email/components/compose/compose.component.spec.ts new file mode 100644 index 00000000..a13e1856 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/compose/compose.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ComposeComponent } from './compose.component' + +describe('ComposeComponent', () => { + let component: ComposeComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ComposeComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ComposeComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/email/components/compose/compose.component.ts b/apiferia/src/app/views/apps/email/components/compose/compose.component.ts new file mode 100644 index 00000000..e75cab9b --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/compose/compose.component.ts @@ -0,0 +1,63 @@ +import { Component, inject, type TemplateRef } from '@angular/core' +import { + NgbActiveOffcanvas, + NgbDropdownModule, + NgbModal, + NgbModalModule, + NgbOffcanvas, + NgbProgressbarModule, +} from '@ng-bootstrap/ng-bootstrap' +import { SharedDataService } from '../filter.service' +import { QuillModule } from 'ngx-quill' +import { SimplebarAngularModule } from 'simplebar-angular' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'email-compose', + standalone: true, + imports: [ + NgbModalModule, + QuillModule, + NgbDropdownModule, + NgbProgressbarModule, + SimplebarAngularModule, + CommonModule, + ], + templateUrl: './compose.component.html', + styles: ` + :host(email-compose) { + display: contents !important; + } + `, +}) +export class ComposeComponent { + public sharedDataService = inject(SharedDataService) + private modalService = inject(NgbModal) + activeOffcanvas = inject(NgbOffcanvas) + + ngOnInit() {} + + updateData(key: string, type: string) { + this.sharedDataService.updateData(key, type) + } + + open(content: TemplateRef) { + this.modalService.open(content, { size: 'lg', windowClass: 'compose-mail' }) + } + + editorConfig = { + toolbar: [ + [{ font: [] }], + ['bold', 'italic', 'underline'], + [{ color: [] }], + [ + { list: 'ordered' }, + { list: 'bullet' }, + { indent: '-1' }, + { indent: '+1' }, + ], + ['direction', { align: [] }], + ['link', 'image', 'video'], + ], + } +} diff --git a/apiferia/src/app/views/apps/email/components/detail/detail.component.html b/apiferia/src/app/views/apps/email/components/detail/detail.component.html new file mode 100644 index 00000000..d9efd765 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/detail/detail.component.html @@ -0,0 +1,164 @@ +
    +
    + + + +
    + Medium +
    +
    + +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    Hi Jorge, How are you?
    + +
    + +
    + Generic placeholder image +
    + 07:23 AM +
    Jonathan Smith
    + From: jonathan@domain.com +
    +
    + +

    Hi Jorge...

    +
    +

    + Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean + commodo ligula eget dolor. Aenean massa. Cum sociis natoque + penatibus et magnis dis parturient montes, nascetur ridiculus mus. + Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. +

    +

    + Nulla consequat massa quis enim. Donec pede justo, fringilla vel, + aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, + imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede + mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum + semper nisi. +

    +

    + Aenean vulputate eleifend tellus. Aenean leo ligula, porttitor eu, + consequat vitae, eleifend ac, enim. Aliquam lorem ante, dapibus in, + viverra quis, feugiat a, tellus. Phasellus viverra nulla ut metus + varius laoreet. Quisque rutrum. Aenean imperdiet. Etiam ultricies + nisi vel augue. Curabitur ullamcorper ultricies nisi. Nam eget dui. + Etiam rhoncus. Maecenas tempus, tellus eget condimentum rhoncus, sem + quam semper libero, sit amet adipiscing sem neque sed ipsum. Nam + quam nunc, blandit vel, luctus pulvinar, +

    +
    + +
    + +
    + Attachments (3) +
    + + +
    +
    +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/apps/email/components/detail/detail.component.spec.ts b/apiferia/src/app/views/apps/email/components/detail/detail.component.spec.ts new file mode 100644 index 00000000..855312ae --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/detail/detail.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { DetailComponent } from './detail.component' + +describe('DetailComponent', () => { + let component: DetailComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DetailComponent], + }).compileComponents() + + fixture = TestBed.createComponent(DetailComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/email/components/detail/detail.component.ts b/apiferia/src/app/views/apps/email/components/detail/detail.component.ts new file mode 100644 index 00000000..e3f3631e --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/detail/detail.component.ts @@ -0,0 +1,48 @@ +import { Component, inject } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { + NgbActiveOffcanvas, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' +import { QuillModule } from 'ngx-quill' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'app-detail', + standalone: true, + imports: [QuillModule, FormsModule, SimplebarAngularModule, NgbTooltipModule], + templateUrl: './detail.component.html', + styles: ` + :host { + display: contents !important; + } + `, +}) +export class DetailComponent { + activeOffcanvas = inject(NgbActiveOffcanvas) + + content = `

    This is an Air-mode editable area.

    +


    +
      +
    • Select a text to reveal the toolbar.
    • +
    • Edit rich document on-the-fly, so elastic!
    • +
    +


    +

    End of air-mode area

    ` + + editorConfig = { + toolbar: [ + [{ font: [] }], + ['bold', 'italic', 'underline'], + [{ color: [] }], + [ + { list: 'ordered' }, + { list: 'bullet' }, + { indent: '-1' }, + { indent: '+1' }, + ], + ['direction', { align: [] }], + ['link', 'image', 'video'], + ], + } +} diff --git a/apiferia/src/app/views/apps/email/components/email-list/email-list.component.html b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.html new file mode 100644 index 00000000..03ead25d --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.html @@ -0,0 +1,210 @@ +
    + @if (emailTab == 'inbox') { +
    +
    + +
    +
    +
    + } @else { + + } +
    + + +
    +
    +
    Showing 1 - 20 of 289
    +
    + + +
    +
    +
    + + +
    + @if (emailTab == 'draft') { +
    +
    +

    You don't have any saved drafts.

    +

    + Saving a draft allows you to keep a message you aren't ready to send + yet. +

    +
    +
    + } + @if (emailTab == 'trash') { +
    +
    +

    + Messages that have been in Trash more than 30 days will be + automatically deleted. + Empty Trash Now +

    +
    +
    + } + +
    +
    diff --git a/apiferia/src/app/views/apps/email/components/email-list/email-list.component.spec.ts b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.spec.ts new file mode 100644 index 00000000..378229a8 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { EmailListComponent } from './email-list.component' + +describe('EmailListComponent', () => { + let component: EmailListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EmailListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(EmailListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/email/components/email-list/email-list.component.ts b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.ts new file mode 100644 index 00000000..0ee57016 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-list/email-list.component.ts @@ -0,0 +1,60 @@ +import { Component, inject, type OnInit } from '@angular/core' +import { emailData } from '../../data' +import { CommonModule } from '@angular/common' +import { + NgbDropdownModule, + NgbNavModule, + NgbOffcanvas, + type NgbNavChangeEvent, +} from '@ng-bootstrap/ng-bootstrap' +import { SharedDataService } from '../filter.service' +import { DetailComponent } from '../detail/detail.component' + +@Component({ + selector: 'email-list', + standalone: true, + imports: [CommonModule, NgbNavModule, NgbDropdownModule], + templateUrl: './email-list.component.html', + styles: ``, +}) +export class EmailListComponent implements OnInit { + emailList = emailData + emailTab!: string + public sharedDataService = inject(SharedDataService) + public offcanvasService = inject(NgbOffcanvas) + + ngOnInit(): void { + this.sharedDataService.key$.subscribe((data) => { + this.emailTab = data?.key! + if (data && data.type == 'label' && data.key) { + this.emailList = emailData.filter((item) => item.type == data.key) + } else if (data && data.type == 'type' && data.key != 'inbox') { + this.emailList = emailData.filter( + (item) => (item as any)[data.key] === true + ) + } else { + this.emailList = emailData + } + }) + this.emailTab = 'inbox' + } + + typeFilter(event: NgbNavChangeEvent) { + if (event.nextId == 'primary') { + this.emailList = emailData + } else { + this.emailList = emailData.filter((item) => item.type == event.nextId) + } + } + + openDetail() { + const divContainer = document.getElementById('detailDiv')! + this.offcanvasService.open(DetailComponent, { + panelClass: 'mail-read position-absolute shadow show', + backdrop: false, + position: 'end', + container: divContainer, + scroll: true, + }) + } +} diff --git a/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.html b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.html new file mode 100644 index 00000000..a8eac532 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.html @@ -0,0 +1,112 @@ +
    +
    +
    + + +
    + + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    +
    + + +
    diff --git a/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.spec.ts b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.spec.ts new file mode 100644 index 00000000..1fe9ff28 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { EmailTopbarComponent } from './email-topbar.component' + +describe('EmailTopbarComponent', () => { + let component: EmailTopbarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EmailTopbarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(EmailTopbarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.ts b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.ts new file mode 100644 index 00000000..f121d7af --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/email-topbar/email-topbar.component.ts @@ -0,0 +1,22 @@ +import { Component, inject } from '@angular/core' +import { EmailListComponent } from '../email-list/email-list.component' +import { + NgbDropdownModule, + NgbOffcanvas, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' +import { ComposeComponent } from '../compose/compose.component' + +@Component({ + selector: 'email-topbar', + standalone: true, + imports: [EmailListComponent, NgbDropdownModule, NgbTooltipModule], + templateUrl: './email-topbar.component.html', + styles: ``, +}) +export class EmailTopbarComponent { + private offcanvasService = inject(NgbOffcanvas) + openSidebar() { + this.offcanvasService.open(ComposeComponent) + } +} diff --git a/apiferia/src/app/views/apps/email/components/filter.service.ts b/apiferia/src/app/views/apps/email/components/filter.service.ts new file mode 100644 index 00000000..1b31de98 --- /dev/null +++ b/apiferia/src/app/views/apps/email/components/filter.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject } from 'rxjs' +import type { EmailType } from '../data' + +type EmailKey = keyof EmailType | string + +@Injectable({ + providedIn: 'root', +}) +export class SharedDataService { + private keySubject = new BehaviorSubject<{ + key: EmailKey + type: string + } | null>(null) + public key$ = this.keySubject.asObservable() + + updateData(key: EmailKey, type: string) { + const newData = { key: key, type: type } + this.keySubject.next(newData) + } +} diff --git a/apiferia/src/app/views/apps/email/data.ts b/apiferia/src/app/views/apps/email/data.ts new file mode 100644 index 00000000..934bedea --- /dev/null +++ b/apiferia/src/app/views/apps/email/data.ts @@ -0,0 +1,218 @@ +export type EmailType = { + id: string + sender: string + subject: string + message: string + date: string + status: string + isStarred: boolean + isImportant: boolean + isSent: boolean + isTrash: boolean + attachType?: string + attachments?: string[] + badge?: string + type: string +} + +export const emailData: EmailType[] = [ + { + id: 'InboxChk1', + sender: 'Daniel J. Olsen', + subject: + 'Lucas Kriebel (@Daniel J. Olsen) has sent you a direct message on Twitter!', + message: + '@Daniel J. Olsen - Very cool :) Nicklas, You have a new direct message.', + date: '11:49 am', + status: 'unread', + isStarred: false, + isImportant: true, + isSent: false, + isTrash: false, + type: 'social', + }, + { + id: 'InboxChk2', + sender: 'Jack P. Roldan', + subject: 'Images', + message: '', + attachType: 'image', + attachments: ['IMG_201', 'IMG_202', 'IMG_203'], + badge: '+5', + date: 'Feb 21', + status: 'read', + isStarred: true, + isImportant: true, + isSent: true, + isTrash: true, + type: 'promotions', + }, + { + id: 'InboxChk3', + sender: 'Betty C. Cox (11)', + subject: 'Train/Bus', + message: + "Yes ok, great! I'm not stuck in Stockholm anymore, we're making progress.", + date: 'Feb 19', + status: 'read', + isStarred: false, + isImportant: false, + isSent: false, + isTrash: false, + type: 'updates', + }, + { + id: 'InboxChk4', + sender: 'Medium', + subject: "This Week's Top Stories", + message: + "Our top pick for you on Medium this week The Man Who Destroyed America's Ego", + date: 'Feb 28', + status: 'unread', + isStarred: false, + isImportant: false, + isSent: true, + isTrash: true, + type: 'forums', + }, + { + id: 'InboxChk5', + sender: 'Death to Stock', + subject: '(no subject)', + message: '', + attachType: 'pdf', + attachments: ['dashboard.pdf', 'pages-data.pdf'], + date: 'Feb 28', + status: 'read', + isStarred: true, + isImportant: false, + isSent: false, + isTrash: false, + type: 'social', + }, + { + id: 'InboxChk6', + sender: 'Revibe', + subject: '(no subject)', + message: '', + attachType: 'doc', + attachments: ['doc1.doc', 'doc2.doc', 'doc3.doc', 'doc4.doc'], + date: 'Feb 27', + status: 'read', + isStarred: false, + isImportant: true, + isSent: false, + isTrash: true, + type: 'promotions', + }, + { + id: 'InboxChk7', + sender: 'Erik, me (5)', + subject: 'Regarding our meeting', + message: "That's great, see you on Thursday!", + date: 'Feb 24', + status: 'read', + isStarred: true, + isImportant: false, + isSent: true, + isTrash: false, + type: 'social', + }, + { + id: 'InboxChk8', + sender: 'KanbanFlow', + subject: "Task assigned: Clone ARP's website", + message: 'You have been assigned a task by Alex@Work on the board Web.', + date: 'Feb 24', + status: 'read', + isStarred: true, + isImportant: false, + isSent: true, + isTrash: false, + type: 'updates', + }, + { + id: 'InboxChk9', + sender: 'Tobias Berggren', + subject: "Let's go fishing!", + message: + "Hey, You wanna join me and Fred at the lake tomorrow? It'll be awesome.", + date: 'Feb 23', + status: 'read', + isStarred: false, + isImportant: true, + isSent: true, + isTrash: false, + type: 'updates', + }, + { + id: 'InboxChk10', + sender: 'Charukaw, me (7)', + subject: 'Hey man', + message: "Nah man sorry i don't. Should i get it?", + date: 'Feb 23', + status: 'read', + isStarred: true, + isImportant: true, + isSent: true, + isTrash: false, + type: 'forums', + }, + { + id: 'InboxChk11', + sender: 'Stack Exchange', + subject: '1 new items in your Stackexchange inbox', + message: + 'The following items were added to your Stack Exchange global inbox since you last checked it.', + date: 'Feb 21', + status: 'read', + isStarred: true, + isImportant: false, + isSent: true, + isTrash: true, + type: 'social', + }, + { + id: 'InboxChk12', + sender: 'Google Drive Team', + subject: 'You can now use your storage in Google Drive', + message: + 'Hey Nicklas Sandell! Thank you for purchasing extra storage space in Google Drive.', + date: 'Feb 20', + status: 'read', + isStarred: true, + isImportant: false, + isSent: false, + isTrash: true, + type: 'promotions', + }, + { + id: 'InboxChk13', + sender: 'Peter, me (3)', + subject: 'Hello', + message: + 'Trip home from Colombo has been arranged, then Jenna will come get me from Stockholm. :)', + date: 'Mar 6', + status: 'read', + isStarred: false, + isImportant: true, + isSent: true, + isTrash: true, + type: 'updates', + }, + { + id: 'InboxChk14', + sender: 'me, Susanna (7)', + subject: + "Since you asked... and i'm inconceivably bored at the train station", + message: + "Alright thanks. I'll have to re-book that somehow, i'll get back to you.", + date: 'Mar 6', + status: 'read', + isStarred: false, + isImportant: false, + isSent: false, + isTrash: true, + type: 'forums', + }, +] diff --git a/apiferia/src/app/views/apps/email/email.component.html b/apiferia/src/app/views/apps/email/email.component.html new file mode 100644 index 00000000..d2319344 --- /dev/null +++ b/apiferia/src/app/views/apps/email/email.component.html @@ -0,0 +1,18 @@ + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/apps/email/email.component.spec.ts b/apiferia/src/app/views/apps/email/email.component.spec.ts new file mode 100644 index 00000000..b62bc85d --- /dev/null +++ b/apiferia/src/app/views/apps/email/email.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { EmailComponent } from './email.component' + +describe('EmailComponent', () => { + let component: EmailComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EmailComponent], + }).compileComponents() + + fixture = TestBed.createComponent(EmailComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/email/email.component.ts b/apiferia/src/app/views/apps/email/email.component.ts new file mode 100644 index 00000000..7e3c2293 --- /dev/null +++ b/apiferia/src/app/views/apps/email/email.component.ts @@ -0,0 +1,14 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { ComposeComponent } from './components/compose/compose.component' +import { EmailListComponent } from './components/email-list/email-list.component' +import { EmailTopbarComponent } from './components/email-topbar/email-topbar.component' + +@Component({ + selector: 'app-email', + standalone: true, + imports: [PageTitleComponent, ComposeComponent, EmailTopbarComponent], + templateUrl: './email.component.html', + styles: ``, +}) +export class EmailComponent {} diff --git a/apiferia/src/app/views/apps/social/components/event/event.component.html b/apiferia/src/app/views/apps/social/components/event/event.component.html new file mode 100644 index 00000000..a7722af5 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/event/event.component.html @@ -0,0 +1,41 @@ +
    +
    + @for (data of events; track $index) { +
    +
    + group-2 +
    +
    + {{ data.date }} +
    +
    + {{ + data.title + }} +
    +

    + {{ data.location }} +

    +
    + Interested + +
    +
    +
    +
    + } +
    +
    diff --git a/apiferia/src/app/views/apps/social/components/event/event.component.spec.ts b/apiferia/src/app/views/apps/social/components/event/event.component.spec.ts new file mode 100644 index 00000000..2831bedb --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/event/event.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { EventComponent } from './event.component' + +describe('EventComponent', () => { + let component: EventComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EventComponent], + }).compileComponents() + + fixture = TestBed.createComponent(EventComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/event/event.component.ts b/apiferia/src/app/views/apps/social/components/event/event.component.ts new file mode 100644 index 00000000..2cae9bce --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/event/event.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { EventList } from '../../data' + +@Component({ + selector: 'social-event', + standalone: true, + imports: [], + templateUrl: './event.component.html', + styles: ``, +}) +export class EventComponent { + events = EventList +} diff --git a/apiferia/src/app/views/apps/social/components/feed/feed.component.html b/apiferia/src/app/views/apps/social/components/feed/feed.component.html new file mode 100644 index 00000000..46337704 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/feed/feed.component.html @@ -0,0 +1,438 @@ +
    + + + + @for (feed of feedList; track $index) { +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    + {{ + feed.author + }} +
    +

    + {{ feed.timestamp }} +

    +
    + + +
    +

    + {{ feed.content }} +

    + + @if (feed.images) { +
    +
    + post-1 +
    + +
    +
    +
    +
    + post-2 +
    +
    +
    + +
    +
    + post-4 +
    + + +
    +
    +
    + } + + @if (feed.video) { +
    +
    +
    + +
    +
    +
    + } + +
    + @if (feed.likes) { + + {{ feed.likes }} Likes + } + @if (feed.views) { + {{ feed.views }} Views + } + @if (feed.comments) { + + {{ feed.comments }} Comments + } + Share + Save +
    + + @if (feed.commentList) { +
    + @for (comment of feed.commentList; track $index) { +
    + Generic placeholder image +
    +
    +
    + {{ + comment.author + }} + {{ comment.timestamp }} +
    + {{ comment.comment }} +
    + + + @if (comment.children) { + @for (childcomment of comment.children; track $index) { +
    + + Generic placeholder image + +
    +
    + {{ + childcomment.author + }} + {{ + childcomment.timestamp + }} +
    + {{ childcomment.comment }} +
    +
    + } + } +
    +
    + } +
    + } + + @if (feed.isReply) { +
    + Arya Stark +
    + +
    +
    + } +
    +
    + } + + + + Loading + +
    diff --git a/apiferia/src/app/views/apps/social/components/feed/feed.component.spec.ts b/apiferia/src/app/views/apps/social/components/feed/feed.component.spec.ts new file mode 100644 index 00000000..4219f215 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/feed/feed.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FeedComponent } from './feed.component' + +describe('FeedComponent', () => { + let component: FeedComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FeedComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FeedComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/feed/feed.component.ts b/apiferia/src/app/views/apps/social/components/feed/feed.component.ts new file mode 100644 index 00000000..6d40e8e9 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/feed/feed.component.ts @@ -0,0 +1,23 @@ +import { ChangeDetectionStrategy, Component, inject } from '@angular/core' +import { FeedData, FriendRequest } from '../../data' +import { NgbDropdownModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' +import { DomSanitizer, type SafeResourceUrl } from '@angular/platform-browser' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'social-feed', + standalone: true, + imports: [NgbDropdownModule, NgbTooltipModule, RouterLink], + templateUrl: './feed.component.html', + styles: ``, + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class FeedComponent { + feedList = FeedData + + private sanitizer = inject(DomSanitizer) + + sanitizeUrl(url: string): SafeResourceUrl { + return this.sanitizer.bypassSecurityTrustResourceUrl(url) + } +} diff --git a/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.html b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.html new file mode 100644 index 00000000..db1dd882 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.html @@ -0,0 +1,152 @@ +
    + + +
    +
    diff --git a/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.spec.ts b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.spec.ts new file mode 100644 index 00000000..7ea9c685 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FriendFeedComponent } from './friend-feed.component' + +describe('FriendFeedComponent', () => { + let component: FriendFeedComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FriendFeedComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FriendFeedComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.ts b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.ts new file mode 100644 index 00000000..505d4ab3 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-feed/friend-feed.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { FriendRequest, PendingRequest } from '../../data' +import { NgbDropdownModule, NgbNavModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'social-friend-feed', + standalone: true, + imports: [NgbDropdownModule, NgbNavModule], + templateUrl: './friend-feed.component.html', + styles: ``, +}) +export class FriendFeedComponent { + friendList = FriendRequest + pendingList = PendingRequest +} diff --git a/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.html b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.html new file mode 100644 index 00000000..b5112db9 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.html @@ -0,0 +1,93 @@ + +
    +
    Friends
    + + + +
    Pending Request (2)
    + + @for (request of pendingRequestList; track $index; let last = $last) { +
    +
    + avatar-2 +
    +
    +

    + {{ request.name }} sent you a request +

    + + {{ request.mutual > 0 ? request.mutual : 'no' }} mutual friends
    +
    +
    + @if (!last) { +
    + } + } +
    +
    +
    Friends Request
    + + @for (request of friendRequestList; track $index; let last = $last) { +
    +
    + avatar-5 +
    +
    + +
    + {{ request.name }} +
    +

    + {{ request.mutual > 0 ? request.mutual : 'no' }} mutual friends +

    +
    +
    + } +
    +
    + diff --git a/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.spec.ts b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.spec.ts new file mode 100644 index 00000000..d4d18b9c --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FriendListComponent } from './friend-list.component' + +describe('FriendListComponent', () => { + let component: FriendListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FriendListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FriendListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.ts b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.ts new file mode 100644 index 00000000..6f607fff --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/friend-list/friend-list.component.ts @@ -0,0 +1,21 @@ +import { Component } from '@angular/core' +import { FriendRequest, PendingRequest } from '../../data' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { CommonModule } from '@angular/common' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'social-friend-list', + standalone: true, + imports: [NgbDropdownModule, CommonModule, SimplebarAngularModule], + templateUrl: './friend-list.component.html', + styles: ` + :host { + display: contents !important; + } + `, +}) +export class FriendListComponent { + pendingRequestList = PendingRequest + friendRequestList = FriendRequest.slice(0, 5) +} diff --git a/apiferia/src/app/views/apps/social/components/groups/groups.component.html b/apiferia/src/app/views/apps/social/components/groups/groups.component.html new file mode 100644 index 00000000..7b3833c7 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/groups/groups.component.html @@ -0,0 +1,229 @@ +
    +
    +
    + + + +
    Groups you have joined
    + + @for (join of joinedGroup; track $index) { +
    +
    + group-6 +
    +
    +

    + {{ + join.title + }} +

    + {{ join.member }}
    +
    +
    + } +
    +
    + +
    +
    +
    +
    + @for (group of groupList; track $index) { +
    +
    + +
    + + + +
    +
    + group-7 +
    +
    + {{ group.title }} +
    +

    + {{ group.caption }} +

    + Join Group +
    +
    +
    + } +
    +
    Friends Group
    +
    + @for (friend of friendsGroup; track $index) { +
    +
    + +
    + + + +
    +
    + group-1 +
    +
    + {{ friend.title }} +
    +

    + {{ friend.caption }} +

    + Join Group +
    +
    +
    + } +
    +
    Suggested For You
    +
    + @for (data of suggestedGroup; track $index) { +
    +
    + +
    + + + +
    +
    + group-3 +
    +
    + {{ data.title }} +
    +

    + {{ data.caption }} +

    + Join Group +
    +
    +
    + } +
    +
    diff --git a/apiferia/src/app/views/apps/social/components/groups/groups.component.spec.ts b/apiferia/src/app/views/apps/social/components/groups/groups.component.spec.ts new file mode 100644 index 00000000..7ce6a410 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/groups/groups.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { GroupsComponent } from './groups.component' + +describe('GroupsComponent', () => { + let component: GroupsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GroupsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(GroupsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/groups/groups.component.ts b/apiferia/src/app/views/apps/social/components/groups/groups.component.ts new file mode 100644 index 00000000..86eb27a7 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/groups/groups.component.ts @@ -0,0 +1,23 @@ +import { Component } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' +import { + friendsGroup, + groupList, + joinedGroup, + suggestedGroup, +} from '../../data' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'social-groups', + standalone: true, + imports: [SimplebarAngularModule, NgbDropdownModule], + templateUrl: './groups.component.html', + styles: ``, +}) +export class GroupsComponent { + groupList = groupList + friendsGroup = friendsGroup + suggestedGroup = suggestedGroup + joinedGroup = joinedGroup +} diff --git a/apiferia/src/app/views/apps/social/components/memories/memories.component.html b/apiferia/src/app/views/apps/social/components/memories/memories.component.html new file mode 100644 index 00000000..b59bf586 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/memories/memories.component.html @@ -0,0 +1,731 @@ +
    + +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    + Jeremy Tomlinson +
    +

    + about 2 minuts ago +

    +
    + + +
    +

    Story based around the idea of time lapse, animation to post soon!

    + +
    +
    2 years ago
    + See all your memories +
    + +
    +
    + post-1 +
    + +
    +
    +
    +
    + post-2 +
    +
    +
    + +
    +
    + post-4 +
    + + +
    +
    +
    + + + +
    + Arya Stark +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    + Martin R. Peters +
    + Post: 07 Feb, 2021 06:00AM +
    + + +
    + +
    +
    2 years ago
    + See all your memories +
    + +
    +
    +

    + The quick, brown fox jumps over a lazy dog. DJs flock by when MTV ax + quiz prog. Junk MTV quiz graced by fox whelps. Bawds jog, flick + quartz, vex nymphs. +

    +
    +
    + ... +
    + +
    +
    +
    DJs flock
    +

    + One morning, when Gregor Samsa woke from troubled dreams, he + found himself transformed in his bed into a horrible vermin. + He lay on his armour-like back, and if he lifted his head. +

    +
    +
    +
    +
    +
    + + + +
    + Arya Stark +
    + +
    +
    +
    +
    + + + + + + + + +
    diff --git a/apiferia/src/app/views/apps/social/components/memories/memories.component.spec.ts b/apiferia/src/app/views/apps/social/components/memories/memories.component.spec.ts new file mode 100644 index 00000000..a4f0736e --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/memories/memories.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MemoriesComponent } from './memories.component' + +describe('MemoriesComponent', () => { + let component: MemoriesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MemoriesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(MemoriesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/memories/memories.component.ts b/apiferia/src/app/views/apps/social/components/memories/memories.component.ts new file mode 100644 index 00000000..3250da10 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/memories/memories.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'social-memories', + standalone: true, + imports: [NgbDropdownModule, RouterLink], + templateUrl: './memories.component.html', + styles: ``, +}) +export class MemoriesComponent {} diff --git a/apiferia/src/app/views/apps/social/components/saved/saved.component.html b/apiferia/src/app/views/apps/social/components/saved/saved.component.html new file mode 100644 index 00000000..605cfa5d --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/saved/saved.component.html @@ -0,0 +1,742 @@ +
    +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    2 Photos
    +

    + Post by + Sharlene H. Smith +

    +
    + + +
    + +
    +
    + post-2 +
    +
    + post-3 +
    +
    + + +
    +
    + +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    1 Photo
    +

    + Post by + Victoria P. Miller +

    +
    + + +
    + +
    +
    + post-4 +
    +
    + + +
    +
    + +
    +
    +
    +
    + Generic placeholder image +
    +
    +
    Thought of the Day
    +

    + Post by + Dallas C. Payne +

    +
    + + +
    + +

    + “Not only must we be good, but we must also be good for something.” +

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

    Cant go wrong with Bernadette Clothes

    +

    Affordable Price and Top Quality

    +

    COD Available, 10 days return policy

    +

    #Clothes #Trendy #Shirts

    + favorite-1 + + +
    +
    + +
    +
    + + +

    Cant go wrong with Vanessa Mall

    +

    Affordable Price and Top Quality

    +

    COD Available, no return policy

    +

    #Grocery #HomeMaterial #Foods #Market

    + favorite-2 + + +
    +
    + +
    +
    + + +

    Land of elves in Norse mythology.

    +

    The "otherworld" of Welsh mythology.

    +

    The city in which King Arthur reigned.

    +

    #Travelling #Nature

    + favorite-3 + + +
    +
    + + +
    diff --git a/apiferia/src/app/views/apps/social/components/saved/saved.component.spec.ts b/apiferia/src/app/views/apps/social/components/saved/saved.component.spec.ts new file mode 100644 index 00000000..c9143164 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/saved/saved.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SavedComponent } from './saved.component' + +describe('SavedComponent', () => { + let component: SavedComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SavedComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SavedComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/saved/saved.component.ts b/apiferia/src/app/views/apps/social/components/saved/saved.component.ts new file mode 100644 index 00000000..d1152303 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/saved/saved.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'social-saved', + standalone: true, + imports: [NgbDropdownModule], + templateUrl: './saved.component.html', + styles: ``, +}) +export class SavedComponent {} diff --git a/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.html b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.html new file mode 100644 index 00000000..0897e8b9 --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.html @@ -0,0 +1,156 @@ +
    +
    +
    +
    + Generic placeholder +
    +
    + {{ profileDetail.name }} +
    +

    + {{ profileDetail.location }} +

    +

    + {{ profileDetail.about }} +

    +
    + +
    +
    +
    {{ profileDetail.post }}
    + Post +
    +
    +
    {{ profileDetail.followers }}
    + Followers +
    +
    +
    {{ profileDetail.following }}
    + Following +
    +
    + + +
    +
    +
    Events
    +
    + @for (event of eventList; track $index) { + + {{ event.title }} + } +
    +
    +
    diff --git a/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.spec.ts b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.spec.ts new file mode 100644 index 00000000..bb6c7a6c --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SocialMenuComponent } from './social-menu.component' + +describe('SocialMenuComponent', () => { + let component: SocialMenuComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SocialMenuComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SocialMenuComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.ts b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.ts new file mode 100644 index 00000000..c000cb0e --- /dev/null +++ b/apiferia/src/app/views/apps/social/components/social-menu/social-menu.component.ts @@ -0,0 +1,37 @@ +import { + Component, + EventEmitter, + inject, + Input, + Output, + type OnInit, +} from '@angular/core' +import { EventData, ProfileDetail } from '../../data' +import { CommonModule } from '@angular/common' +import { SharedService } from '../../shared.service' + +@Component({ + selector: 'social-menu', + standalone: true, + imports: [CommonModule], + templateUrl: './social-menu.component.html', + styles: ``, +}) +export class SocialMenuComponent implements OnInit { + profileDetail = ProfileDetail + eventList = EventData + + activeTab: string = 'feed' + + public sharedService = inject(SharedService) + + ngOnInit(): void { + this.sharedService.activeTab$.subscribe((tab) => { + this.activeTab = tab + }) + } + + changeTab(tab: string) { + this.sharedService.setActiveTab(tab) + } +} diff --git a/apiferia/src/app/views/apps/social/data.ts b/apiferia/src/app/views/apps/social/data.ts new file mode 100644 index 00000000..adeffc34 --- /dev/null +++ b/apiferia/src/app/views/apps/social/data.ts @@ -0,0 +1,316 @@ +import { currentYear } from '@/app/common/constants' + +export type ProfileType = { + image: string + name: string + location: string + about: string + post: number + followers: string + following: number +} + +export type EventType = { + icon?: string + image?: string + title: string + date?: string + location?: string +} + +export type FriendRequestType = { + profile: string + name: string + mutual: number +} + +export type CommentType = { + author: string + avatar: string + timestamp: string + comment: string + like?: number + children?: CommentType[] +} + +export type FeedType = { + author: string + avatar: string + timestamp: string + content: string + likes?: string + comments?: number + images?: string[] + commentList?: CommentType[] + views?: string + video?: string + isReply?: boolean +} + +export type GroupType = { + image: string + title: string + caption?: string + member?: string +} + +export const ProfileDetail: ProfileType = { + image: 'assets/images/users/avatar-1.jpg', + name: 'Gatson Keller', + location: 'California, USA', + about: + "Hi I'm Cynthia Price,has been the industry's standard dummy text To an English person.", + post: 389, + followers: '5K', + following: 210, +} + +export const EventData: EventType[] = [ + { + icon: 'bx-cake', + title: "Aarya's birthday today", + }, + { + icon: 'bx-heart', + title: "Penda's wedding tomorrow", + }, + { + icon: 'bx-bookmark', + title: 'Meeting with Big B', + }, +] + +export const FeedData: FeedType[] = [ + { + author: 'Jeremy Tomlinson', + avatar: 'assets/images/users/avatar-3.jpg', + timestamp: 'about 2 minutes ago', + content: + 'Story based around the idea of time lapse, animation to post soon!', + images: [ + 'assets/images/app-social/post-1.jpg', + 'assets/images/app-social/post-2.jpg', + 'assets/images/app-social/post-4.jpg', + 'assets/images/app-social/post-3.jpg', + ], + likes: '1.5k', + comments: 521, + isReply: true, + }, + { + author: 'Thelma Fridley', + avatar: 'assets/images/users/avatar-4.jpg', + timestamp: 'about 1 hour ago', + content: + '🌟✨ Just spent the most amazing weekend camping in the wilderness! 🏕️🌲 Nothing beats disconnecting from the hustle and bustle of city life and reconnecting with nature.', + likes: '1.5k', + comments: 521, + commentList: [ + { + author: 'Jeremy Tomlinson', + avatar: 'assets/images/users/avatar-3.jpg', + timestamp: '3 hours ago', + comment: 'Nice work, makes me think of The Money Pit.', + like: 2, + children: [ + { + author: 'Kathleen Thomas', + avatar: 'assets/images/users/avatar-4.jpg', + timestamp: '5 hours ago', + comment: + "i'm in the middle of a timelapse animation myself! (Very different though.) Awesome stuff.", + }, + ], + }, + ], + }, + { + author: 'Jonathan Tiner', + avatar: 'assets/images/users/avatar-6.jpg', + timestamp: 'about 11 hour ago', + content: + 'The parallax is a little odd but O.o that house build is awesome!!', + video: 'https://player.vimeo.com/video/87993762', + views: '3.5k', + comments: 521, + }, +] + +export const PendingRequest: FriendRequestType[] = [ + { + profile: 'assets/images/users/avatar-2.jpg', + name: 'Daniel J. Olsen', + mutual: 46, + }, + { + profile: 'assets/images/users/avatar-3.jpg', + name: 'Jack P. Roldan', + mutual: 23, + }, +] + +export const FriendRequest: FriendRequestType[] = [ + { + profile: 'assets/images/users/avatar-5.jpg', + name: 'Victoria P. Miller', + mutual: 0, + }, + { + profile: 'assets/images/users/avatar-6.jpg', + name: 'Dallas C. Payne', + mutual: 856, + }, + { + profile: 'assets/images/users/avatar-7.jpg', + name: 'Florence A. Lopez', + mutual: 52, + }, + { + profile: 'assets/images/users/avatar-8.jpg', + name: 'Gail A. Nix', + mutual: 12, + }, + { + profile: 'assets/images/users/avatar-9.jpg', + name: 'Lynne J. Petty', + mutual: 0, + }, + { + profile: 'assets/images/users/avatar-5.jpg', + name: 'Victoria P. Miller', + mutual: 0, + }, + { + profile: 'assets/images/users/avatar-6.jpg', + name: 'Dallas C. Payne', + mutual: 856, + }, + { + profile: 'assets/images/users/avatar-7.jpg', + name: 'Florence A. Lopez', + mutual: 52, + }, + { + profile: 'assets/images/users/avatar-8.jpg', + name: 'Gail A. Nix', + mutual: 12, + }, + { + profile: 'assets/images/users/avatar-9.jpg', + name: 'Lynne J. Petty', + mutual: 0, + }, +] + +export const EventList: EventType[] = [ + { + image: 'assets/images/app-social/group-2.jpg', + date: 'Fri 22 - 26 oct, ' + currentYear, + title: 'Musical Event : Des Moines', + location: '4436 Southern Avenue, Iowa-50309', + }, + { + image: 'assets/images/app-social/group-5.jpg', + date: 'Fri 22 - 26 oct, ' + currentYear, + title: 'Antisocial Darwinism : Evansville', + location: '1265 Lucy Lane, Indiana-47710', + }, + { + image: 'assets/images/app-social/group-6.jpg', + date: 'Fri 22 - 26 oct, ' + currentYear, + title: 'Balls of the Bull Festival : Dallas', + location: '1422 Liberty Street, Texas-75204', + }, + { + image: 'assets/images/app-social/group-7.jpg', + date: 'Fri 22 - 26 oct, ' + currentYear, + title: 'Belch Blanket Babylon : LA Follette', + location: '2542 Cedar Street, Tennessee-37766', + }, +] + +export const groupList: GroupType[] = [ + { + image: 'assets/images/app-social/group-7.jpg', + title: 'UI / UX Design', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-8.jpg', + title: 'Travelling The World', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-9.jpg', + title: 'Music Circle', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, +] + +export const friendsGroup: GroupType[] = [ + { + image: 'assets/images/app-social/group-1.jpg', + title: 'Interior Design & Architech', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-2.jpg', + title: 'Event Management', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-5.jpg', + title: 'Commercial University, Daryaganj, Delhi.', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-6.jpg', + title: 'Tourist Place of Potland', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, +] + +export const suggestedGroup: GroupType[] = [ + { + image: 'assets/images/app-social/group-3.jpg', + title: 'Promote Your Business', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, + { + image: 'assets/images/app-social/group-4.jpg', + title: 'The Greasy Mullets', + caption: + "Some quick example text to build on the card title and make up the bulk of the card's content.", + }, +] + +export const joinedGroup: GroupType[] = [ + { + image: 'assets/images/app-social/group-6.jpg', + title: 'Tourist Place of Portland', + member: '2K+ members', + }, + { + image: 'assets/images/app-social/group-7.jpg', + title: 'UI / UX Design', + member: '1.4K members', + }, + { + image: 'assets/images/app-social/group-8.jpg', + title: 'Travelling The World', + member: '23M members', + }, + { + image: 'assets/images/app-social/group-9.jpg', + title: 'Music Circle', + member: '26K members', + }, +] diff --git a/apiferia/src/app/views/apps/social/shared.service.ts b/apiferia/src/app/views/apps/social/shared.service.ts new file mode 100644 index 00000000..ad2325e0 --- /dev/null +++ b/apiferia/src/app/views/apps/social/shared.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@angular/core' +import { BehaviorSubject } from 'rxjs' + +@Injectable({ + providedIn: 'root', +}) +export class SharedService { + private activeTabSubject = new BehaviorSubject('feed') + activeTab$ = this.activeTabSubject.asObservable() + + setActiveTab(tab: string) { + this.activeTabSubject.next(tab) + } +} diff --git a/apiferia/src/app/views/apps/social/social.component.html b/apiferia/src/app/views/apps/social/social.component.html new file mode 100644 index 00000000..29ab51e5 --- /dev/null +++ b/apiferia/src/app/views/apps/social/social.component.html @@ -0,0 +1,77 @@ + + +
    +
    + +
    + +
    +
    +
    + + +
    Gatson Keller
    + + +
    +
    + +
    + @if (activeTab == 'feed') { + + } + @if (activeTab == 'friends') { + + } + @if (activeTab == 'events') { + + } + @if (activeTab == 'groups') { + + } + @if (activeTab == 'saved') { + + } + @if (activeTab == 'memories') { + + } +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/apps/social/social.component.spec.ts b/apiferia/src/app/views/apps/social/social.component.spec.ts new file mode 100644 index 00000000..8636628f --- /dev/null +++ b/apiferia/src/app/views/apps/social/social.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SocialComponent } from './social.component' + +describe('SocialComponent', () => { + let component: SocialComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SocialComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SocialComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/social/social.component.ts b/apiferia/src/app/views/apps/social/social.component.ts new file mode 100644 index 00000000..1d72d680 --- /dev/null +++ b/apiferia/src/app/views/apps/social/social.component.ts @@ -0,0 +1,57 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject, Input, type OnInit } from '@angular/core' +import { NgbNavModule, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap' +import { SimplebarAngularModule } from 'simplebar-angular' +import { EventComponent } from './components/event/event.component' +import { FeedComponent } from './components/feed/feed.component' +import { FriendFeedComponent } from './components/friend-feed/friend-feed.component' +import { FriendListComponent } from './components/friend-list/friend-list.component' +import { GroupsComponent } from './components/groups/groups.component' +import { MemoriesComponent } from './components/memories/memories.component' +import { SavedComponent } from './components/saved/saved.component' +import { SocialMenuComponent } from './components/social-menu/social-menu.component' +import { SharedService } from './shared.service' + +@Component({ + selector: 'app-social', + standalone: true, + imports: [ + PageTitleComponent, + FeedComponent, + FriendListComponent, + NgbNavModule, + FriendFeedComponent, + EventComponent, + GroupsComponent, + SavedComponent, + MemoriesComponent, + SimplebarAngularModule, + SocialMenuComponent, + ], + templateUrl: './social.component.html', + styles: ``, +}) +export class SocialComponent implements OnInit { + activeTab: string = 'feed' + + public offcanvasService = inject(NgbOffcanvas) + public sharedService = inject(SharedService) + + ngOnInit() { + this.sharedService.activeTab$.subscribe((tab) => { + this.activeTab = tab + }) + } + + openMenuOffcanvas() { + this.offcanvasService.open(SocialMenuComponent) + } + + openFriendOffcanvas() { + this.offcanvasService.open(FriendListComponent, { position: 'end' }) + } + + changeTab(tab: string) { + this.sharedService.setActiveTab(tab) + } +} diff --git a/apiferia/src/app/views/apps/todo/data.ts b/apiferia/src/app/views/apps/todo/data.ts new file mode 100644 index 00000000..8223b9c1 --- /dev/null +++ b/apiferia/src/app/views/apps/todo/data.ts @@ -0,0 +1,150 @@ +import { currentYear } from '@/app/common/constants' + +export type UserType = { + name: string + avatar: string +} + +export type TodoType = { + task_name: string + create_date: string + time: string + due_date: string + assigned: UserType + status: string + priority: string + checked: boolean +} + +export const TodoData: TodoType[] = [ + { + task_name: 'Review system logs for any reported errors', + create_date: '23 April, ' + currentYear, + time: '05:09 PM', + due_date: '30 April, ' + currentYear, + assigned: { + name: 'Sean Kemper', + avatar: 'assets/images/users/avatar-2.jpg', + }, + status: 'In-progress', + priority: 'High', + checked: false, + }, + { + task_name: 'Conduct user testing to identify potential bugs', + create_date: '14 May, ' + currentYear, + time: '10:51 AM', + due_date: '25 Aug, ' + currentYear, + assigned: { + name: 'Victoria Sullivan', + avatar: 'assets/images/users/avatar-3.jpg', + }, + status: 'Pending', + priority: 'Low', + checked: true, + }, + { + task_name: 'Gather feedback from stakeholders regarding any issues', + create_date: '12 April, ' + currentYear, + time: '12:09 PM', + due_date: '28 April, ' + currentYear, + assigned: { + name: 'Liam Martinez', + avatar: 'assets/images/users/avatar-4.jpg', + }, + status: 'In-progress', + priority: 'High', + checked: false, + }, + { + task_name: 'Prioritize bugs based on severity and impact', + create_date: '10 April, ' + currentYear, + time: '10:09 PM', + due_date: '15 April, ' + currentYear, + assigned: { + name: 'Emma Johnson', + avatar: 'assets/images/users/avatar-5.jpg', + }, + status: 'Completed', + priority: 'Medium', + checked: false, + }, + { + task_name: 'Investigate and analyze the root cause of each bug', + create_date: '22 May, ' + currentYear, + time: '03:41 PM', + due_date: '05 July, ' + currentYear, + assigned: { + name: 'Olivia Thompson', + avatar: 'assets/images/users/avatar-1.jpg', + }, + status: 'Pending', + priority: 'Low', + checked: false, + }, + { + task_name: 'Develop and implement fixes for the identified bugs', + create_date: '18 May, ' + currentYear, + time: '09:09 AM', + due_date: '30 April, ' + currentYear, + assigned: { + name: 'Noah Garcia', + avatar: 'assets/images/users/avatar-6.jpg', + }, + status: 'Completed', + priority: 'Low', + checked: false, + }, + { + task_name: 'Complete any recurring tasks', + create_date: '05 April, ' + currentYear, + time: '08:50 AM', + due_date: '22 April, ' + currentYear, + assigned: { + name: 'Sophia Davis', + avatar: 'assets/images/users/avatar-7.jpg', + }, + status: 'New', + priority: 'High', + checked: false, + }, + { + task_name: 'Check emails and respond', + create_date: '15 Jun, ' + currentYear, + time: '11:09 PM', + due_date: '01 Aug, ' + currentYear, + assigned: { + name: 'Isabella Lopez', + avatar: 'assets/images/users/avatar-8.jpg', + }, + status: 'Pending', + priority: 'Low', + checked: false, + }, + { + task_name: 'Review schedule for the day', + create_date: '22 April, ' + currentYear, + time: '05:09 PM', + due_date: '30 April, ' + currentYear, + assigned: { + name: 'Ava Wilson', + avatar: 'assets/images/users/avatar-9.jpg', + }, + status: 'In-progress', + priority: 'Medium', + checked: true, + }, + { + task_name: 'Daily stand-up meeting', + create_date: '23 April, ' + currentYear, + time: '12:09 PM', + due_date: '30 April, ' + currentYear, + assigned: { + name: 'Oliver Lee', + avatar: 'assets/images/users/avatar-10.jpg', + }, + status: 'In-progress', + priority: 'High', + checked: false, + }, +] diff --git a/apiferia/src/app/views/apps/todo/todo.component.html b/apiferia/src/app/views/apps/todo/todo.component.html new file mode 100644 index 00000000..8e4df0de --- /dev/null +++ b/apiferia/src/app/views/apps/todo/todo.component.html @@ -0,0 +1,152 @@ + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + @for (data of todo$ | async; track $index) { + + + + + @if (data.assigned) { + + } + + + + + } + +
    Task NameCreated DateDue DateAssignedStatusPriorityAction
    +
    +
    + + +
    +
    +
    + {{ data.create_date }} + {{ data.time }} + {{ data.due_date }} +
    + +
    +
    + {{ data.assigned.name }} +
    +
    +
    +
    + {{ data.status }} + + {{ data.priority }} + + + +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + tasks +
    +
    +
    +
      + + + + +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/apps/todo/todo.component.spec.ts b/apiferia/src/app/views/apps/todo/todo.component.spec.ts new file mode 100644 index 00000000..b25f2bb9 --- /dev/null +++ b/apiferia/src/app/views/apps/todo/todo.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TodoComponent } from './todo.component' + +describe('TodoComponent', () => { + let component: TodoComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TodoComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TodoComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/todo/todo.component.ts b/apiferia/src/app/views/apps/todo/todo.component.ts new file mode 100644 index 00000000..6798933a --- /dev/null +++ b/apiferia/src/app/views/apps/todo/todo.component.ts @@ -0,0 +1,31 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject } from '@angular/core' +import { TodoData, type TodoType } from './data' +import { CommonModule } from '@angular/common' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import { FormsModule } from '@angular/forms' + +@Component({ + selector: 'app-todo', + standalone: true, + imports: [PageTitleComponent, CommonModule, NgbPaginationModule, FormsModule], + templateUrl: './todo.component.html', + styles: ``, +}) +export class TodoComponent { + todo$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.todo$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(TodoData, 10) + } +} diff --git a/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.html b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.html new file mode 100644 index 00000000..fdd90a2f --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.html @@ -0,0 +1,33 @@ +
    +
    Conversions
    +
    + +
    +
    +
    +

    This Week

    +

    23.5k

    +
    + +
    +

    Last Week

    +

    41.05k

    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.spec.ts new file mode 100644 index 00000000..ef305a7b --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ConversationComponent } from './conversation.component' + +describe('ConversationComponent', () => { + let component: ConversationComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ConversationComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ConversationComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.ts b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.ts new file mode 100644 index 00000000..5787c49e --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/conversation/conversation.component.ts @@ -0,0 +1,78 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'widget-conversation', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './conversation.component.html', + styles: ``, +}) +export class ConversationComponent { + conversationChart: Partial = { + chart: { + height: 292, + type: 'radialBar', + }, + plotOptions: { + radialBar: { + startAngle: -135, + endAngle: 135, + dataLabels: { + name: { + fontSize: '14px', + color: 'undefined', + offsetY: 100, + }, + value: { + offsetY: 55, + fontSize: '20px', + color: undefined, + formatter: function (val: number) { + return val + '%' + }, + }, + }, + track: { + background: 'rgba(170,184,197, 0.2)', + margin: 0, + }, + }, + }, + fill: { + gradient: { + shade: 'dark', + shadeIntensity: 0.2, + inverseColors: false, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 50, 65, 91], + }, + }, + stroke: { + dashArray: 4, + }, + colors: ['#7f56da', '#22c55e'], + series: [65.2], + labels: ['Returning Customer'], + responsive: [ + { + breakpoint: 380, + options: { + chart: { + height: 180, + }, + }, + }, + ], + grid: { + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0, + }, + }, + } +} diff --git a/apiferia/src/app/views/apps/widgets/components/performance/performance.component.html b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.html new file mode 100644 index 00000000..dd668173 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.html @@ -0,0 +1,44 @@ +
    +
    +

    Performance

    +
    + + + + +
    +
    + + + + +
    +
    + +
    +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/performance/performance.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.spec.ts new file mode 100644 index 00000000..a0f897b6 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PerformanceComponent } from './performance.component' + +describe('PerformanceComponent', () => { + let component: PerformanceComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PerformanceComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PerformanceComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/performance/performance.component.ts b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.ts new file mode 100644 index 00000000..c69683c8 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/performance/performance.component.ts @@ -0,0 +1,144 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'widget-performance', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './performance.component.html', + styles: ``, +}) +export class PerformanceComponent { + performanceChart: Partial = { + series: [ + { + name: 'Page Views', + type: 'bar', + data: [34, 65, 46, 68, 49, 61, 42, 44, 78, 52, 63, 67], + }, + { + name: 'Clicks', + type: 'area', + data: [8, 12, 7, 17, 21, 11, 5, 9, 7, 29, 12, 35], + }, + ], + chart: { + height: 313, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + dashArray: [0, 0], + width: [0, 2], + curve: 'smooth', + }, + fill: { + opacity: [1, 1], + type: ['solid', 'gradient'], + gradient: { + type: 'vertical', + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0, + stops: [0, 90], + }, + }, + markers: { + size: [0, 0], + strokeWidth: 2, + hover: { + size: 4, + }, + }, + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + axisTicks: { + show: false, + }, + axisBorder: { + show: false, + }, + }, + yaxis: { + min: 0, + axisBorder: { + show: false, + }, + }, + grid: { + show: true, + strokeDashArray: 3, + xaxis: { + lines: { + show: false, + }, + }, + yaxis: { + lines: { + show: true, + }, + }, + padding: { + top: 0, + right: -2, + bottom: 0, + left: 10, + }, + }, + legend: { + show: true, + horizontalAlign: 'center', + offsetX: 0, + offsetY: 5, + itemMargin: { + horizontal: 10, + vertical: 0, + }, + }, + plotOptions: { + bar: { + columnWidth: '30%', + barHeight: '70%', + borderRadius: 3, + }, + }, + colors: ['#7f56da', '#22c55e'], + tooltip: { + shared: true, + y: [ + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(1) + 'k' + } + return y + }, + }, + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(1) + 'k' + } + return y + }, + }, + ], + }, + } +} diff --git a/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.html b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.html new file mode 100644 index 00000000..843e7436 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.html @@ -0,0 +1,56 @@ +
    +
    +
    + +
    Recent Project Summary
    +
    + +
    + + + + + + + + + + + + + @for (data of projectsList; track $index) { + + + + + + + + } + +
    ProjectClientTeamDeadlineWork Progress
    {{ data.project }}{{ data.client }} + @for (team of data.team; track team) { + + avatar-2 + + } + {{ data.deadline }} + +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.spec.ts new file mode 100644 index 00000000..857ee4dd --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RecentProjectComponent } from './recent-project.component' + +describe('RecentProjectComponent', () => { + let component: RecentProjectComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RecentProjectComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RecentProjectComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.ts b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.ts new file mode 100644 index 00000000..50640440 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/recent-project/recent-project.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { RecentProject } from '../../data' +import { NgbProgressbarModule } from '@ng-bootstrap/ng-bootstrap' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'widget-recent-project', + standalone: true, + imports: [NgbProgressbarModule, SimplebarAngularModule], + templateUrl: './recent-project.component.html', + styles: ``, +}) +export class RecentProjectComponent { + projectsList = RecentProject +} diff --git a/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.html b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.html new file mode 100644 index 00000000..d7fc878e --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.html @@ -0,0 +1,49 @@ +
    +
    + +
    Today's Schedules
    + @for (schedule of scheduleList; track $index; let last = $last) { +
    +
    +

    {{ schedule.time }}

    +
    +
    + +

    + {{ schedule.title }} +

    +

    + {{ schedule.duration }} +

    +
    +
    +
    + } +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.spec.ts new file mode 100644 index 00000000..c73c150d --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ScheduleComponent } from './schedule.component' + +describe('ScheduleComponent', () => { + let component: ScheduleComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ScheduleComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ScheduleComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.ts b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.ts new file mode 100644 index 00000000..b849400e --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/schedule/schedule.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { ScheduleData } from '../../data' +import { NgbAlertModule, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'widget-schedule', + standalone: true, + imports: [NgbAlertModule, CommonModule, NgbDropdownModule], + templateUrl: './schedule.component.html', + styles: ``, +}) +export class ScheduleComponent { + scheduleList = ScheduleData +} diff --git a/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.html b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.html new file mode 100644 index 00000000..81a3d82d --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.html @@ -0,0 +1,54 @@ +
    +
    +

    Friends Request (10)

    +
    + +
    + + @for (data of friendList; track $index; let last = $last) { +
    +
    + avatar-5 +
    +
    +
    + {{ data.name }} +
    +

    + {{ data.mutual > 0 ? data.mutual : 'no' }} mutual friends +

    +
    + +
    + } +
    +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.spec.ts new file mode 100644 index 00000000..c2d9ba11 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetFriendRequestComponent } from './widget-friend-request.component' + +describe('WidgetFriendRequestComponent', () => { + let component: WidgetFriendRequestComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetFriendRequestComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetFriendRequestComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.ts b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.ts new file mode 100644 index 00000000..29a13de3 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-friend-request/widget-friend-request.component.ts @@ -0,0 +1,16 @@ +import { Component } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' +import { FriendRequest } from '../../../social/data' +import { CommonModule } from '@angular/common' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'widget-friend-request', + standalone: true, + imports: [SimplebarAngularModule, CommonModule, NgbDropdownModule], + templateUrl: './widget-friend-request.component.html', + styles: ``, +}) +export class WidgetFriendRequestComponent { + friendList = FriendRequest +} diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.html b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.html new file mode 100644 index 00000000..c1275be2 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.html @@ -0,0 +1,27 @@ +
    + @for (data of stateList; track $index) { +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +

    + {{ data.title }} +

    +

    + {{ data.amount }} +

    +
    +
    + +
    +
    +
    + } +
    diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.spec.ts new file mode 100644 index 00000000..714d1667 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetState2Component } from './widget-state2.component' + +describe('WidgetState2Component', () => { + let component: WidgetState2Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetState2Component], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetState2Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.ts b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.ts new file mode 100644 index 00000000..0876f4de --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state2/widget-state2.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { State2Data } from '../../data' + +@Component({ + selector: 'widget-state2', + standalone: true, + imports: [], + templateUrl: './widget-state2.component.html', + styles: ``, +}) +export class WidgetState2Component { + stateList = State2Data +} diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.html b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.html new file mode 100644 index 00000000..8cf9e841 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.html @@ -0,0 +1,53 @@ +
    + @for (data of stateList; track $index) { +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +

    + {{ data.title }} +

    +

    + {{ data.amount }} +

    +
    +
    + +
    + + +
    +
    + } +
    diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.spec.ts new file mode 100644 index 00000000..99f9d3c1 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetState3Component } from './widget-state3.component' + +describe('WidgetState3Component', () => { + let component: WidgetState3Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetState3Component], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetState3Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.ts b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.ts new file mode 100644 index 00000000..eaa2dd77 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-state3/widget-state3.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core' +import { State2Data } from '../../data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'widget-state3', + standalone: true, + imports: [CommonModule], + templateUrl: './widget-state3.component.html', + styles: ``, +}) +export class WidgetState3Component { + stateList = State2Data +} diff --git a/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.html b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.html new file mode 100644 index 00000000..ddd06b3a --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.html @@ -0,0 +1,36 @@ +
    +
    +

    My Tasks

    + +
    + +
    + + @for ( + task of taskList; + track $index; + let first = $first; + let last = $last + ) { +
    + + +
    + } +
    +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.spec.ts new file mode 100644 index 00000000..b3f6d31f --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetTaskComponent } from './widget-task.component' + +describe('WidgetTaskComponent', () => { + let component: WidgetTaskComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetTaskComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetTaskComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.ts b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.ts new file mode 100644 index 00000000..d33cf47d --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-task/widget-task.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' +import { TodoData } from '../../../todo/data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'widget-task', + standalone: true, + imports: [SimplebarAngularModule, CommonModule], + templateUrl: './widget-task.component.html', + styles: ``, +}) +export class WidgetTaskComponent { + taskList = TodoData +} diff --git a/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.html b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.html new file mode 100644 index 00000000..654d3607 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.html @@ -0,0 +1,33 @@ +
    +
    +

    Recent Transactions

    + +
    + +
    + + + + @for (data of transactions; track $index) { + + + + + + + } + +
    {{ data.date }}${{ data.amount }} + {{ data.status }} + {{ data.description }}
    +
    +
    +
    diff --git a/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.spec.ts b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.spec.ts new file mode 100644 index 00000000..c9176f61 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetTransactionComponent } from './widget-transaction.component' + +describe('WidgetTransactionComponent', () => { + let component: WidgetTransactionComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetTransactionComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetTransactionComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.ts b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.ts new file mode 100644 index 00000000..549a7a4c --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/components/widget-transaction/widget-transaction.component.ts @@ -0,0 +1,15 @@ +import { TransactionsList } from '@/app/views/dashboards/sales/data' +import { CommonModule } from '@angular/common' +import { Component } from '@angular/core' +import { SimplebarAngularModule } from 'simplebar-angular' + +@Component({ + selector: 'widget-transaction', + standalone: true, + imports: [SimplebarAngularModule, CommonModule], + templateUrl: './widget-transaction.component.html', + styles: ``, +}) +export class WidgetTransactionComponent { + transactions = TransactionsList +} diff --git a/apiferia/src/app/views/apps/widgets/data.ts b/apiferia/src/app/views/apps/widgets/data.ts new file mode 100644 index 00000000..4176e129 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/data.ts @@ -0,0 +1,158 @@ +import { currentYear } from '@/app/common/constants' + +export type ProjectType = { + project: string + client: string + team: string[] + deadline: string + progressValue: number + progressType: string +} + +export type ScheduleType = { + time: string + title: string + type: string + duration: string +} + +export type StateType = { + icon: string + iconColor: string + title: string + amount: string + badge: string + badgeColor: string +} + +export const RecentProject: ProjectType[] = [ + { + project: 'Zelogy', + client: 'Daniel Olsen', + team: [ + 'assets/images/users/avatar-2.jpg', + 'assets/images/users/avatar-3.jpg', + 'assets/images/users/avatar-4.jpg', + ], + deadline: '12 April ' + currentYear, + progressValue: 33, + progressType: 'primary', + }, + { + project: 'Shiaz', + client: 'Jack Roldan', + team: [ + 'assets/images/users/avatar-1.jpg', + 'assets/images/users/avatar-5.jpg', + ], + deadline: '10 April ' + currentYear, + progressValue: 74, + progressType: 'success', + }, + { + project: 'Holderick', + client: 'Betty Cox', + team: [ + 'assets/images/users/avatar-5.jpg', + 'assets/images/users/avatar-2.jpg', + 'assets/images/users/avatar-3.jpg', + ], + deadline: '31 March ' + currentYear, + progressValue: 50, + progressType: 'warning', + }, + { + project: 'Feyvux', + client: 'Carlos Johnson', + team: [ + 'assets/images/users/avatar-3.jpg', + 'assets/images/users/avatar-7.jpg', + 'assets/images/users/avatar-6.jpg', + ], + deadline: '25 March ' + currentYear, + progressValue: 92, + progressType: 'primary', + }, + { + project: 'Xavlox', + client: 'Lorraine Cox', + team: ['assets/images/users/avatar-7.jpg'], + deadline: '22 March ' + currentYear, + progressValue: 48, + progressType: 'danger', + }, + { + project: 'Mozacav', + client: 'Delores Young', + team: [ + 'assets/images/users/avatar-3.jpg', + 'assets/images/users/avatar-4.jpg', + 'assets/images/users/avatar-2.jpg', + ], + deadline: '15 March ' + currentYear, + progressValue: 21, + progressType: 'primary', + }, +] + +export const ScheduleData: ScheduleType[] = [ + { + time: '09:00', + title: 'Setup Github Repository', + type: 'primary', + duration: '09:00 - 10:00', + }, + { + time: '10:00', + title: 'Design Review - Reback Admin', + type: 'success', + duration: '10:00 - 10:30', + }, + { + time: '11:00', + title: 'Meeting with BD Team', + type: 'info', + duration: '11:00 - 12:30', + }, + { + time: '01:00', + title: 'Meeting with Design Studio', + type: 'warning', + duration: '01:00 - 02:00', + }, +] + +export const State2Data: StateType[] = [ + { + icon: 'bx-layer', + iconColor: 'primary', + title: 'Campaign Sent', + amount: '13, 647', + badge: '2.3', + badgeColor: 'success', + }, + { + icon: 'bx-award', + iconColor: 'success', + title: 'New Leads', + amount: '9, 526', + badge: '8.1', + badgeColor: 'success', + }, + { + icon: 'bxs-backpack', + iconColor: 'danger', + title: 'Deals', + amount: '976', + badge: '0.3', + badgeColor: 'danger', + }, + { + icon: 'bx-dollar-circle', + iconColor: 'warning', + title: 'Booked Revenue', + amount: '$123', + badge: '10.6', + badgeColor: 'danger', + }, +] diff --git a/apiferia/src/app/views/apps/widgets/widgets.component.html b/apiferia/src/app/views/apps/widgets/widgets.component.html new file mode 100644 index 00000000..c1794c84 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/widgets.component.html @@ -0,0 +1,57 @@ + + + + +
    +
    + +
    + +
    + +
    +
    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    + +
    + + + +
    +
    + + +
    + + +
    + + +
    + + +
    + + +
    + +
    + diff --git a/apiferia/src/app/views/apps/widgets/widgets.component.spec.ts b/apiferia/src/app/views/apps/widgets/widgets.component.spec.ts new file mode 100644 index 00000000..6f57ed8b --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/widgets.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WidgetsComponent } from './widgets.component' + +describe('WidgetsComponent', () => { + let component: WidgetsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WidgetsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WidgetsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/apps/widgets/widgets.component.ts b/apiferia/src/app/views/apps/widgets/widgets.component.ts new file mode 100644 index 00000000..9a0eaf44 --- /dev/null +++ b/apiferia/src/app/views/apps/widgets/widgets.component.ts @@ -0,0 +1,33 @@ +import { Component } from '@angular/core' +import { ConversationComponent } from './components/conversation/conversation.component' +import { PerformanceComponent } from './components/performance/performance.component' +import { WidgetState2Component } from './components/widget-state2/widget-state2.component' +import { WidgetState3Component } from './components/widget-state3/widget-state3.component' +import { WidgetFriendRequestComponent } from './components/widget-friend-request/widget-friend-request.component' +import { WidgetTaskComponent } from './components/widget-task/widget-task.component' +import { WidgetTransactionComponent } from './components/widget-transaction/widget-transaction.component' +import { RecentProjectComponent } from './components/recent-project/recent-project.component' +import { ScheduleComponent } from './components/schedule/schedule.component' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { StateCardComponent } from '@/app/components/state-card/state-card.component' + +@Component({ + selector: 'app-widgets', + standalone: true, + imports: [ + PageTitleComponent, + ConversationComponent, + PerformanceComponent, + StateCardComponent, + WidgetState2Component, + WidgetState3Component, + WidgetFriendRequestComponent, + WidgetTaskComponent, + WidgetTransactionComponent, + RecentProjectComponent, + ScheduleComponent, + ], + templateUrl: './widgets.component.html', + styles: ``, +}) +export class WidgetsComponent {} diff --git a/apiferia/src/app/views/auth/auth.route.ts b/apiferia/src/app/views/auth/auth.route.ts new file mode 100644 index 00000000..b5027e3d --- /dev/null +++ b/apiferia/src/app/views/auth/auth.route.ts @@ -0,0 +1,52 @@ +import { Route } from '@angular/router' +import { SigninComponent } from './signin/signin.component' +import { Signin2Component } from './signin2/signin2.component' +import { SignupComponent } from './signup/signup.component' +import { Signup2Component } from './signup2/signup2.component' +import { ResetPassComponent } from './reset-pass/reset-pass.component' +import { ResetPass2Component } from './reset-pass2/reset-pass2.component' +import { LockScreenComponent } from './lock-screen/lock-screen.component' +import { LockScreen2Component } from './lock-screen2/lock-screen2.component' + +export const AUTH_ROUTES: Route[] = [ + { + path: 'sign-in', + component: SigninComponent, + data: { title: 'Sign In' }, + }, + { + path: 'sign-in-2', + component: Signin2Component, + data: { title: 'Sign In 2' }, + }, + { + path: 'sign-up', + component: SignupComponent, + data: { title: 'Sign Up' }, + }, + { + path: 'sign-up-2', + component: Signup2Component, + data: { title: 'Sign Up 2' }, + }, + { + path: 'reset-pass', + component: ResetPassComponent, + data: { title: 'Reset Password' }, + }, + { + path: 'reset-pass-2', + component: ResetPass2Component, + data: { title: 'Reset Password 2' }, + }, + { + path: 'lock-screen', + component: LockScreenComponent, + data: { title: 'Lock Screen' }, + }, + { + path: 'lock-screen-2', + component: LockScreen2Component, + data: { title: 'Lock Screen 2' }, + }, +] diff --git a/apiferia/src/app/views/auth/lock-screen/lock-screen.component.html b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.html new file mode 100644 index 00000000..9799c699 --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.html @@ -0,0 +1,67 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    +
    +
    + + +

    Hi ! Gaston

    +

    + Enter your password to access the admin. +

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

    + Not you? return + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/lock-screen/lock-screen.component.spec.ts b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.spec.ts new file mode 100644 index 00000000..a78c01eb --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { LockScreenComponent } from './lock-screen.component' + +describe('LockScreenComponent', () => { + let component: LockScreenComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LockScreenComponent], + }).compileComponents() + + fixture = TestBed.createComponent(LockScreenComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/lock-screen/lock-screen.component.ts b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.ts new file mode 100644 index 00000000..a9733cf1 --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen/lock-screen.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-lock-screen', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './lock-screen.component.html', + styles: ``, +}) +export class LockScreenComponent {} diff --git a/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.html b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.html new file mode 100644 index 00000000..93c566f2 --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.html @@ -0,0 +1,45 @@ +
    +
    +
    +
    + + +

    Hi ! Gaston

    +

    + Enter your password to access the admin. +

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

    + Not you? return + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.spec.ts b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.spec.ts new file mode 100644 index 00000000..71805b2c --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { LockScreen2Component } from './lock-screen2.component' + +describe('LockScreen2Component', () => { + let component: LockScreen2Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LockScreen2Component], + }).compileComponents() + + fixture = TestBed.createComponent(LockScreen2Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.ts b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.ts new file mode 100644 index 00000000..b2e3f93e --- /dev/null +++ b/apiferia/src/app/views/auth/lock-screen2/lock-screen2.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-lock-screen2', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './lock-screen2.component.html', + styles: ``, +}) +export class LockScreen2Component {} diff --git a/apiferia/src/app/views/auth/reset-pass/reset-pass.component.html b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.html new file mode 100644 index 00000000..c3602bd1 --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.html @@ -0,0 +1,67 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    +
    +
    + + +

    Reset Password

    +

    + Enter your email address and we'll send you an email with + instructions to reset your password. +

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

    + Back to + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/reset-pass/reset-pass.component.spec.ts b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.spec.ts new file mode 100644 index 00000000..d3711939 --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ResetPassComponent } from './reset-pass.component' + +describe('ResetPassComponent', () => { + let component: ResetPassComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ResetPassComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ResetPassComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/reset-pass/reset-pass.component.ts b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.ts new file mode 100644 index 00000000..6b0f62ce --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass/reset-pass.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-reset-pass', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './reset-pass.component.html', + styles: ``, +}) +export class ResetPassComponent {} diff --git a/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.html b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.html new file mode 100644 index 00000000..ee98912e --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.html @@ -0,0 +1,44 @@ +
    +
    +
    +
    + + +

    Reset Password

    +

    + Enter your email address and we'll send you an email with instructions + to reset your password. +

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

    + Back to + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.spec.ts b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.spec.ts new file mode 100644 index 00000000..3ac596a6 --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ResetPass2Component } from './reset-pass2.component' + +describe('ResetPass2Component', () => { + let component: ResetPass2Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ResetPass2Component], + }).compileComponents() + + fixture = TestBed.createComponent(ResetPass2Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.ts b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.ts new file mode 100644 index 00000000..0bb7bebc --- /dev/null +++ b/apiferia/src/app/views/auth/reset-pass2/reset-pass2.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-reset-pass2', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './reset-pass2.component.html', + styles: ``, +}) +export class ResetPass2Component {} diff --git a/apiferia/src/app/views/auth/signin/signin.component.html b/apiferia/src/app/views/auth/signin/signin.component.html new file mode 100644 index 00000000..bc1207a3 --- /dev/null +++ b/apiferia/src/app/views/auth/signin/signin.component.html @@ -0,0 +1,99 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    +
    +
    + + +

    Sign In

    +

    + Enter your email address and password to access admin panel. +

    + +
    +
    +
    +
    + + +
    +
    + Reset password + + +
    +
    +
    + + +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + +

    + Don't have an account? + Sign Up +

    +
    +
    diff --git a/apiferia/src/app/views/auth/signin/signin.component.spec.ts b/apiferia/src/app/views/auth/signin/signin.component.spec.ts new file mode 100644 index 00000000..5f508a3d --- /dev/null +++ b/apiferia/src/app/views/auth/signin/signin.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SigninComponent } from './signin.component' + +describe('SigninComponent', () => { + let component: SigninComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SigninComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SigninComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/signin/signin.component.ts b/apiferia/src/app/views/auth/signin/signin.component.ts new file mode 100644 index 00000000..f79d32d6 --- /dev/null +++ b/apiferia/src/app/views/auth/signin/signin.component.ts @@ -0,0 +1,56 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { SocialBtnComponent } from '@/app/components/social-btn/social-btn.component' +import { login } from '@/app/store/authentication/authentication.actions' +import { Component, inject, type OnInit } from '@angular/core' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + Validators, + type UntypedFormGroup, +} from '@angular/forms' +import { RouterModule } from '@angular/router' +import { Store } from '@ngrx/store' + +@Component({ + selector: 'app-signin', + standalone: true, + imports: [ + SocialBtnComponent, + LogoBoxComponent, + FormsModule, + ReactiveFormsModule, + RouterModule, + ], + templateUrl: './signin.component.html', + styles: ``, +}) +export class SigninComponent implements OnInit { + signInForm!: UntypedFormGroup + submitted: boolean = false + + public fb = inject(UntypedFormBuilder) + public store = inject(Store) + + ngOnInit(): void { + this.signInForm = this.fb.group({ + email: ['reback@techzaa.in', [Validators.required, Validators.email]], + password: ['123456', [Validators.required]], + }) + } + + get formValues() { + return this.signInForm.controls + } + + login() { + this.submitted = true + if (this.signInForm.valid) { + const email = this.formValues['email'].value // Get the username from the form + const password = this.formValues['password'].value // Get the password from the form + + // Login Api + this.store.dispatch(login({ email: email, password: password })) + } + } +} diff --git a/apiferia/src/app/views/auth/signin2/signin2.component.html b/apiferia/src/app/views/auth/signin2/signin2.component.html new file mode 100644 index 00000000..0a4da6d9 --- /dev/null +++ b/apiferia/src/app/views/auth/signin2/signin2.component.html @@ -0,0 +1,78 @@ +
    +
    +
    +
    + + +

    Sign In

    +

    + Enter your email address and password to access admin panel. +

    + +
    +
    +
    + + +
    +
    + Reset password + + +
    +
    +
    + + +
    +
    + +
    + +
    +
    + + +
    +
    +
    + +

    + New here? + Sign Up +

    +
    +
    diff --git a/apiferia/src/app/views/auth/signin2/signin2.component.spec.ts b/apiferia/src/app/views/auth/signin2/signin2.component.spec.ts new file mode 100644 index 00000000..98d2c421 --- /dev/null +++ b/apiferia/src/app/views/auth/signin2/signin2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { Signin2Component } from './signin2.component' + +describe('Signin2Component', () => { + let component: Signin2Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Signin2Component], + }).compileComponents() + + fixture = TestBed.createComponent(Signin2Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/signin2/signin2.component.ts b/apiferia/src/app/views/auth/signin2/signin2.component.ts new file mode 100644 index 00000000..b6d6d768 --- /dev/null +++ b/apiferia/src/app/views/auth/signin2/signin2.component.ts @@ -0,0 +1,56 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { SocialBtnComponent } from '@/app/components/social-btn/social-btn.component' +import { login } from '@/app/store/authentication/authentication.actions' +import { Component, inject } from '@angular/core' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + Validators, + type UntypedFormGroup, +} from '@angular/forms' +import { RouterLink } from '@angular/router' +import { Store } from '@ngrx/store' + +@Component({ + selector: 'app-signin2', + standalone: true, + imports: [ + SocialBtnComponent, + LogoBoxComponent, + FormsModule, + ReactiveFormsModule, + RouterLink, + ], + templateUrl: './signin2.component.html', + styles: ``, +}) +export class Signin2Component { + signInForm!: UntypedFormGroup + submitted: boolean = false + + public fb = inject(UntypedFormBuilder) + public store = inject(Store) + + ngOnInit(): void { + this.signInForm = this.fb.group({ + email: ['reback@techzaa.in', [Validators.required, Validators.email]], + password: ['123456', [Validators.required]], + }) + } + + get formValues() { + return this.signInForm.controls + } + + login() { + this.submitted = true + if (this.signInForm.valid) { + const email = this.formValues['email'].value // Get the username from the form + const password = this.formValues['password'].value // Get the password from the form + + // Login Api + this.store.dispatch(login({ email: email, password: password })) + } + } +} diff --git a/apiferia/src/app/views/auth/signup/signup.component.html b/apiferia/src/app/views/auth/signup/signup.component.html new file mode 100644 index 00000000..68ca8fc0 --- /dev/null +++ b/apiferia/src/app/views/auth/signup/signup.component.html @@ -0,0 +1,104 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    + +
    +
    + + +

    Sign Up

    +

    + New to our platform? Sign up now! It only takes a minute. +

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

    + I already have an account + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/signup/signup.component.spec.ts b/apiferia/src/app/views/auth/signup/signup.component.spec.ts new file mode 100644 index 00000000..451b40ac --- /dev/null +++ b/apiferia/src/app/views/auth/signup/signup.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SignupComponent } from './signup.component' + +describe('SignupComponent', () => { + let component: SignupComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SignupComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SignupComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/signup/signup.component.ts b/apiferia/src/app/views/auth/signup/signup.component.ts new file mode 100644 index 00000000..3f0e4dfb --- /dev/null +++ b/apiferia/src/app/views/auth/signup/signup.component.ts @@ -0,0 +1,13 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { SocialBtnComponent } from '@/app/components/social-btn/social-btn.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-signup', + standalone: true, + imports: [SocialBtnComponent, LogoBoxComponent, RouterLink], + templateUrl: './signup.component.html', + styles: ``, +}) +export class SignupComponent {} diff --git a/apiferia/src/app/views/auth/signup2/signup2.component.html b/apiferia/src/app/views/auth/signup2/signup2.component.html new file mode 100644 index 00000000..019becb4 --- /dev/null +++ b/apiferia/src/app/views/auth/signup2/signup2.component.html @@ -0,0 +1,78 @@ +
    +
    +
    +
    + + +

    Sign Up

    +

    + New to our platform? Sign up now! It only takes a minute. +

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

    + I already have an account + Sign In +

    +
    +
    diff --git a/apiferia/src/app/views/auth/signup2/signup2.component.spec.ts b/apiferia/src/app/views/auth/signup2/signup2.component.spec.ts new file mode 100644 index 00000000..9d9f1b8c --- /dev/null +++ b/apiferia/src/app/views/auth/signup2/signup2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { Signup2Component } from './signup2.component' + +describe('Signup2Component', () => { + let component: Signup2Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Signup2Component], + }).compileComponents() + + fixture = TestBed.createComponent(Signup2Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/auth/signup2/signup2.component.ts b/apiferia/src/app/views/auth/signup2/signup2.component.ts new file mode 100644 index 00000000..0e07ad96 --- /dev/null +++ b/apiferia/src/app/views/auth/signup2/signup2.component.ts @@ -0,0 +1,13 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { SocialBtnComponent } from '@/app/components/social-btn/social-btn.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-signup2', + standalone: true, + imports: [SocialBtnComponent, LogoBoxComponent, RouterLink], + templateUrl: './signup2.component.html', + styles: ``, +}) +export class Signup2Component {} diff --git a/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.html b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.html new file mode 100644 index 00000000..d4ce2fbd --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.spec.ts b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.spec.ts new file mode 100644 index 00000000..fadd3201 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CalendarHelpComponent } from './calendar-help.component' + +describe('CalendarHelpComponent', () => { + let component: CalendarHelpComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CalendarHelpComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CalendarHelpComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.ts b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.ts new file mode 100644 index 00000000..b7eb1336 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/calendar-help.component.ts @@ -0,0 +1,19 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { SearchComponent } from './components/search/search.component' +import { HelpListComponent } from './components/help-list/help-list.component' +import { QuestionsComponent } from './components/questions/questions.component' + +@Component({ + selector: 'app-calendar-help', + standalone: true, + imports: [ + PageTitleComponent, + SearchComponent, + HelpListComponent, + QuestionsComponent, + ], + templateUrl: './calendar-help.component.html', + styles: ``, +}) +export class CalendarHelpComponent {} diff --git a/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.html b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.html new file mode 100644 index 00000000..749ba76c --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.html @@ -0,0 +1,13 @@ +
    + @for (data of helpList; track $index) { +
    +
    + help-1 +

    {{ data.title }}

    +

    + {{ data.description }} +

    +
    +
    + } +
    diff --git a/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.spec.ts b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.spec.ts new file mode 100644 index 00000000..fbfcfd20 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { HelpListComponent } from './help-list.component' + +describe('HelpListComponent', () => { + let component: HelpListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [HelpListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(HelpListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.ts b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.ts new file mode 100644 index 00000000..1c154355 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/help-list/help-list.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { HelpData } from '../../data' + +@Component({ + selector: 'help-list', + standalone: true, + imports: [], + templateUrl: './help-list.component.html', + styles: ``, +}) +export class HelpListComponent { + helpList = HelpData +} diff --git a/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.html b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.html new file mode 100644 index 00000000..8789d778 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.html @@ -0,0 +1,11 @@ +
    +
    +

    Can't find a questions?

    + + +
    +
    diff --git a/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.spec.ts b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.spec.ts new file mode 100644 index 00000000..23343056 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { QuestionsComponent } from './questions.component' + +describe('QuestionsComponent', () => { + let component: QuestionsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [QuestionsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(QuestionsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.ts b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.ts new file mode 100644 index 00000000..e0060c05 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/questions/questions.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'help-questions', + standalone: true, + imports: [], + templateUrl: './questions.component.html', + styles: ``, +}) +export class QuestionsComponent {} diff --git a/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.html b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.html new file mode 100644 index 00000000..abdf64fe --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.html @@ -0,0 +1,19 @@ +
    +
    +
    +
    +

    Search for a question

    +

    Type your question or search keyword

    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.spec.ts b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.spec.ts new file mode 100644 index 00000000..c06a9645 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SearchComponent } from './search.component' + +describe('SearchComponent', () => { + let component: SearchComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SearchComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SearchComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.ts b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.ts new file mode 100644 index 00000000..7f193bdd --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/components/search/search.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'help-search', + standalone: true, + imports: [], + templateUrl: './search.component.html', + styles: ``, +}) +export class SearchComponent {} diff --git a/apiferia/src/app/views/calendar/calendar-help/data.ts b/apiferia/src/app/views/calendar/calendar-help/data.ts new file mode 100644 index 00000000..48fed5c6 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar-help/data.ts @@ -0,0 +1,43 @@ +export type HelpType = { + image: string + title: string + description: string +} + +export const HelpData = [ + { + image: 'assets/images/app-calendar/help-1.png', + title: 'Getting Started', + description: + 'Learn the basics, connect your calendar and discover features that will make scheduling easier.', + }, + { + image: 'assets/images/app-calendar/help-2.png', + title: 'Availability', + description: + 'Determine when you would like to be scheduled and explore our advanced availability options.', + }, + { + image: 'assets/images/app-calendar/help-3.png', + title: 'Customize Event Types', + description: + 'Tailor your invitee experience and ensure you’re collecting the information you need when they book.', + }, + { + image: 'assets/images/app-calendar/help-4.png', + title: 'Embed Option', + description: + 'Discover options for adding Calendly to your website, ensuring your visitors schedule at the height of their interest.', + }, + { + image: 'assets/images/app-calendar/help-5.png', + title: 'Team Scheduling', + description: 'Find out how to configure multi-user scheduling.', + }, + { + image: 'assets/images/app-calendar/help-6.png', + title: 'Integration', + description: + 'Connect the tools in your workflow directly to Calendly, or learn about what we’ve built to streamline your scheduling.', + }, +] diff --git a/apiferia/src/app/views/calendar/calendar.route.ts b/apiferia/src/app/views/calendar/calendar.route.ts new file mode 100644 index 00000000..b527d3b5 --- /dev/null +++ b/apiferia/src/app/views/calendar/calendar.route.ts @@ -0,0 +1,22 @@ +import { Route } from '@angular/router' +import { ScheduleComponent } from './schedule/schedule.component' +import { IntegrationComponent } from './integration/integration.component' +import { CalendarHelpComponent } from './calendar-help/calendar-help.component' + +export const CALENDAR_ROUTES: Route[] = [ + { + path: 'schedule', + component: ScheduleComponent, + data: { title: 'Schedule' }, + }, + { + path: 'integration', + component: IntegrationComponent, + data: { title: 'Integration' }, + }, + { + path: 'help', + component: CalendarHelpComponent, + data: { title: 'Help' }, + }, +] diff --git a/apiferia/src/app/views/calendar/integration/data.ts b/apiferia/src/app/views/calendar/integration/data.ts new file mode 100644 index 00000000..b85e4272 --- /dev/null +++ b/apiferia/src/app/views/calendar/integration/data.ts @@ -0,0 +1,114 @@ +export type IntegrationType = { + name: string + image: string + description: string + checked: boolean +} + +export const IntegrationData: IntegrationType[] = [ + { + name: 'Google Mail', + image: 'assets/images/app-calendar/google-mail.png', + description: + 'You can tap on an upcoming meeting to see the details and join the call.', + checked: true, + }, + { + name: 'Google Analytics', + image: 'assets/images/app-calendar/google-analytics.png', + description: + 'You can measure your advertising ROI as well as track your video, applications, social media.', + checked: false, + }, + { + name: 'Google Meet', + image: 'assets/images/app-calendar/google-meet.png', + description: + 'It is one of two apps that constitute the replacement for Google Hangouts and Google Chat.', + checked: true, + }, + { + name: 'Intercom', + image: 'assets/images/app-calendar/intercom.png', + description: + 'It is the complete customer messaging platform to drive across the entire lifecycle.', + checked: false, + }, + { + name: 'Microsoft Outlook', + image: 'assets/images/app-calendar/microsoft-outlook.png', + description: + 'Schedule an online meeting using Outlook Open Outlook and go to your calendar.', + checked: true, + }, + { + name: 'Google Chrome', + image: 'assets/images/app-calendar/google-chrome.png', + description: + 'Using your browser, share your video, desktop, and presentations with teammates and customers.', + checked: true, + }, + { + name: 'HubSpot', + image: 'assets/images/app-calendar/hubspot.png', + description: + 'Give prospects the power to book meetings with you, and save hours of time on unnecessary emailing.', + checked: true, + }, + { + name: 'Stripe', + image: 'assets/images/app-calendar/stripe.png', + description: + 'Sessions is a free conference for payments leaders, developers, founders, and curious observers.', + checked: false, + }, + { + name: 'Slack', + image: 'assets/images/app-calendar/slack.png', + description: + 'It is the collaboration hub that brings the right people, information and tools together to get work done.', + checked: false, + }, + { + name: 'Salesforce', + image: 'assets/images/app-calendar/sales-force.png', + description: + 'It provides an interface that gives salespeople useful data stored in Salesforce to lead impactful calls.', + checked: true, + }, + { + name: 'Web Hooks', + image: 'assets/images/app-calendar/web-hooks.png', + description: + 'Webhooks as a medium to notify third-party applications (consumer applications) about events that occur in a Zoom account.', + checked: false, + }, + { + name: 'Facebook', + image: 'assets/images/app-calendar/facebook.png', + description: + 'Messenger Rooms, allows to create a video meeting and invite their friends to join, even if those people are not Facebook users.', + checked: true, + }, + { + name: 'Microsoft Team Conference', + image: 'assets/images/app-calendar/microsoft-team-conference.png', + description: + 'It automatically include Microsoft Teams conferencing Meetings in Teams include audio, video, and screen sharing.', + checked: false, + }, + { + name: 'Zapier', + image: 'assets/images/app-calendar/zapier.png', + description: + 'Zapier lets you connect Google Meet with thousands of the most popular apps, so you can automate your work and have more time.', + checked: true, + }, + { + name: 'Zoom', + image: 'assets/images/app-calendar/zoom.png', + description: + 'Zoom Cloud Meetings is a proprietary video teleconferencing software program developed by Zoom Video Communications.', + checked: false, + }, +] diff --git a/apiferia/src/app/views/calendar/integration/integration.component.html b/apiferia/src/app/views/calendar/integration/integration.component.html new file mode 100644 index 00000000..0a33e1ac --- /dev/null +++ b/apiferia/src/app/views/calendar/integration/integration.component.html @@ -0,0 +1,33 @@ + + +
    + @for (item of integrationList; track $index) { +
    +
    +
    +
    +
    + +
    +
    + Google Mail +
    + {{ item.name }} +
    +

    + {{ item.description }} +

    +
    +
    +
    + } +
    diff --git a/apiferia/src/app/views/calendar/integration/integration.component.spec.ts b/apiferia/src/app/views/calendar/integration/integration.component.spec.ts new file mode 100644 index 00000000..067d732d --- /dev/null +++ b/apiferia/src/app/views/calendar/integration/integration.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { IntegrationComponent } from './integration.component' + +describe('IntegrationComponent', () => { + let component: IntegrationComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IntegrationComponent], + }).compileComponents() + + fixture = TestBed.createComponent(IntegrationComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/integration/integration.component.ts b/apiferia/src/app/views/calendar/integration/integration.component.ts new file mode 100644 index 00000000..80808f57 --- /dev/null +++ b/apiferia/src/app/views/calendar/integration/integration.component.ts @@ -0,0 +1,14 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { IntegrationData } from './data' + +@Component({ + selector: 'app-integration', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './integration.component.html', + styles: ``, +}) +export class IntegrationComponent { + integrationList = IntegrationData +} diff --git a/apiferia/src/app/views/calendar/schedule/schedule.component.html b/apiferia/src/app/views/calendar/schedule/schedule.component.html new file mode 100644 index 00000000..ffd59e1b --- /dev/null +++ b/apiferia/src/app/views/calendar/schedule/schedule.component.html @@ -0,0 +1,145 @@ + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +

    + Drag and drop your event or click in the calendar +

    + @for (data of externalEvents; track $index) { +
    + + {{ data.title }} +
    + } +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    + + +
    + + +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/calendar/schedule/schedule.component.spec.ts b/apiferia/src/app/views/calendar/schedule/schedule.component.spec.ts new file mode 100644 index 00000000..c73c150d --- /dev/null +++ b/apiferia/src/app/views/calendar/schedule/schedule.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ScheduleComponent } from './schedule.component' + +describe('ScheduleComponent', () => { + let component: ScheduleComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ScheduleComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ScheduleComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/calendar/schedule/schedule.component.ts b/apiferia/src/app/views/calendar/schedule/schedule.component.ts new file mode 100644 index 00000000..a584f2c1 --- /dev/null +++ b/apiferia/src/app/views/calendar/schedule/schedule.component.ts @@ -0,0 +1,216 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject, ViewChild, type TemplateRef } from '@angular/core' +import { FullCalendarModule } from '@fullcalendar/angular' +import { CalendarOptions, EventClickArg, EventInput } from '@fullcalendar/core' +import interactionPlugin, { + DateClickArg, + Draggable, +} from '@fullcalendar/interaction' +import dayGridPlugin from '@fullcalendar/daygrid' +import timeGridPlugin from '@fullcalendar/timegrid' +import bootstrapPlugin from '@fullcalendar/bootstrap' +import listPlugin from '@fullcalendar/list' +import { Store } from '@ngrx/store' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + Validators, + type UntypedFormGroup, +} from '@angular/forms' +import { externalEvents, type externalModel } from '@/app/store/calendar/data' +import { getEvents } from '@/app/store/calendar/calendar.selectors' +import { + addCalendar, + deleteCalendar, + fetchCalendar, + updateCalendar, +} from '@/app/store/calendar/calendar.actions' +import { NgbModal } from '@ng-bootstrap/ng-bootstrap' +import Swal from 'sweetalert2' + +export type CalendarEvent = { + id: string + title: string + start: Date | null + end?: Date | null + allDay?: boolean + classNames?: string[] +} + +type UpdateEventType = { + event: CalendarEvent +} + +@Component({ + selector: 'app-schedule', + standalone: true, + imports: [ + PageTitleComponent, + FullCalendarModule, + FormsModule, + ReactiveFormsModule, + ], + templateUrl: './schedule.component.html', + styles: ``, +}) +export class ScheduleComponent { + calendarEvents!: EventInput[] + formData!: UntypedFormGroup + externalEvents!: externalModel[] + editEvent: CalendarEvent | null = null + isEditMode = false + currentDate!: Date + + private store = inject(Store) + private modalService = inject(NgbModal) + private formBuilder = inject(UntypedFormBuilder) + + @ViewChild('modalShow') modalShow!: TemplateRef + + ngOnInit() { + // Fetch Calendar Event + this.store.dispatch(fetchCalendar()) + this.store.select(getEvents).subscribe((data) => { + this.calendarEvents = data + }) + + this.externalEvents = externalEvents + + // Validation + this.formData = this.formBuilder.group({ + title: ['', [Validators.required]], + className: ['', [Validators.required]], + }) + } + + ngAfterViewInit() { + setTimeout(() => { + this.initializeDraggable() + }, 500) + } + + private initializeDraggable() { + const externalEventContainerEl = document.getElementById('external-events') + + if (externalEventContainerEl) { + new Draggable(externalEventContainerEl, { + itemSelector: '.external-event', + eventData: (eventEl) => ({ + id: Math.floor(Math.random() * 11000), + title: eventEl.innerText, + allDay: true, + start: new Date(), + className: eventEl.getAttribute('id'), + }), + }) + } + } + + calendarOptions: CalendarOptions = { + plugins: [ + dayGridPlugin, + listPlugin, + interactionPlugin, + timeGridPlugin, + bootstrapPlugin, + ], + headerToolbar: { + right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth', + center: 'title', + left: 'prev,next today', + }, + bootstrapFontAwesome: false, + buttonText: { + today: 'Today', + month: 'Month', + week: 'Week', + day: 'Day', + list: 'List', + prev: 'Prev', + next: 'Next', + }, + themeSystem: 'bootstrap', + initialView: 'dayGridMonth', + initialEvents: this.calendarEvents, + height: window.innerHeight - 200, + droppable: true, + editable: true, + selectable: true, + eventReceive: (info) => this.updateEvent(info), + eventClick: this.handleEventClick.bind(this), + dateClick: this.openModal.bind(this), + } + + updateEvent(info: UpdateEventType) { + var newEvent = { + id: info.event.id, + title: info.event.title, + start: info.event.start!, + allDay: info.event.allDay, + className: info.event.classNames, + } + this.store.dispatch(addCalendar({ events: newEvent })) + } + + openModal(events: DateClickArg) { + this.currentDate = events.date + this.modalService.open(this.modalShow, { centered: true }) + } + + // Handle Edit Event + handleEventClick(clickInfo: EventClickArg) { + this.isEditMode = true + this.editEvent = clickInfo.event + this.formData.patchValue({ + title: this.editEvent.title, + className: this.editEvent.classNames, + }) + this.modalService.open(this.modalShow, { centered: true }) + } + + // Create New Event + createEvent() { + this.currentDate = new Date() + this.modalService.open(this.modalShow, { centered: true }) + } + + saveEvent() { + if (this.isEditMode == true) { + const newEvent = { + ...this.formData.value, + id: this.editEvent?.id, + start: this.editEvent?.start, + end: this.editEvent?.end ? this.editEvent?.end : this.editEvent?.start, + } + this.store.dispatch(updateCalendar({ events: newEvent })) + } else { + const newEvent = { + id: (this.calendarEvents.length + 1).toString(), + ...this.formData.value, + start: this.currentDate, + } + this.store.dispatch(addCalendar({ events: newEvent })) + } + this.formData.reset() + this.modalService.dismissAll() + this.isEditMode = false + } + + // Delete Event + deleteEvent() { + this.store.dispatch( + deleteCalendar({ id: this.editEvent?.id ? this.editEvent?.id : '' }) + ) + Swal.fire({ + position: 'center', + icon: 'success', + title: 'Event has been deleted', + showConfirmButton: false, + timer: 1000, + }) + this.modalService.dismissAll() + this.isEditMode = false + this.formData.reset() + } +} diff --git a/apiferia/src/app/views/car-view/car-view.component.html b/apiferia/src/app/views/car-view/car-view.component.html new file mode 100644 index 00000000..ec97f42b --- /dev/null +++ b/apiferia/src/app/views/car-view/car-view.component.html @@ -0,0 +1,847 @@ +
    + +
    +
    +
    +
    +
    + +
    + + + + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + Kelvyn Parra +
    +
    + + + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +

    2022 Skoda Slavia 1.0 TSI Ambition BSVI

    +
    +
    +
    +
    +
    + + 72,491 km +
    +
    +
    +
    + + Diesel +
    +
    +
    +
    +
    +
    + + Automático V6 Turbo +
    +
    +
    +
    + + Recien Importada +
    +
    +
    +
    + +
    +
    +
    +
    + RD$573,000.00 +
    +
    +

    Pago Aproximado:

    +

    RD$14,800.00

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

    Calculadora de Préstamos

    +
    +
    +
    Selecciona el Banco o Financiera de tu + Preferencia:
    +
    +
    + +
    +
    +
    + Banco Confisa +
    +
    + BACC +
    +
    + Banco Popular +
    +
    + BanReservas +
    +
    + Banco BHD +
    +
    + Banco Caribe +
    +
    + Motor Crédito +
    +
    + Scotia Bank +
    +
    + + + +
    +
    +
    +
    +
    +
    + + + +
    +
    + + +
    + + +
    +
    +
    + + +
    +
    +
      +
    • +
      + Inicial:
      +
      + RD$0
      +
    • +
    • +
      + Monto a Financiar:
      +
      + RD$600.00
      +
    • +
    • +
      + Pago Mensual:
      +
      + RD$60.00
      +
    • +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +

    Car User Reviews & Rating

    +
    +
    +
    + +
    +
    4.8
    +
    +

    Overall Rating

    +

    Base on 372 + Reviews

    +
    + +
    + + + + +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + image +
    +
    +

    Car Empire

    +
    +
    + + + +
    + Verified dealer +
    +
    + + +
    +
    +
    + +

    2972 Westheimer Rd. Santa Ana, Illinois 85486

    +
    +
    + +
    +
    +
    +
    Contact dealer
    + +
    +
    +
    + +

    Report this listing

    +
    +
    +
    +

    Recommended Used Cars

    +

    Showing 26 more cars you might like

    +
    + + View more reviews +
    +
    +
    +
    +
    + +
    \ No newline at end of file diff --git a/apiferia/src/app/views/car-view/car-view.component.scss b/apiferia/src/app/views/car-view/car-view.component.scss new file mode 100644 index 00000000..90ab2b32 --- /dev/null +++ b/apiferia/src/app/views/car-view/car-view.component.scss @@ -0,0 +1,780 @@ +.font-icon-box { + font-size: 13px; +} + +.text-detalles { + font-size: 25px; + color: #333; + font-weight: bold; +} + +.icon-box-padding { + padding-right: 5px; +} + +.pricetxt { + flex: 0 0 50%; + margin-right: 10px; +} + + +.textdealer { + text-align: center; +} + +.txtmonth { + flex: 1; + display: flex; + flex-direction: column; + gap: 4px; + padding-top: 2%; + text-align: center; +} + +.pagomens { + font-weight: bold; + padding-bottom: 2%; + text-align: center; +} + +.dealer-item { + flex: none; + width: 130px; + height: 60px; + min-width: 130px; + margin-bottom: 10px; + // border-radius: 8px; + // padding: 8px; + // background: white; + // cursor: pointer; + // transition: all 0.3s ease; + + // ← PREVENIR SELECCIÓN + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + + // ← PREVENIR DRAG DE IMAGEN + img { + border-radius: 150px; + width: 100%; + height: 100%; + object-fit: contain; + display: block; + pointer-events: none; + user-select: none; + -webkit-user-select: none; + -webkit-user-drag: none; // ← IMPORTANTE + -webkit-touch-callout: none; + } +} + +// SLIDER SUAVE - FORZAR ANCHO TOTAL +.bank-selector { + margin: 20px 0; + width: 100%; + overflow-x: auto; // ← CAMBIO: permitir scroll horizontal del contenedor + overflow-y: hidden; + position: relative; +} + +.banks-scroll { + display: flex; + overflow-x: auto; + overflow-y: hidden; + padding: 15px 0; + gap: 15px; + width: max-content; + min-width: 100%; + + scroll-behavior: smooth; + -webkit-overflow-scrolling: touch; + cursor: grab; + + // ← PREVENIR SELECCIÓN DE TEXTO + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + + &:active { + cursor: grabbing; + } +} + +.bank-item { + flex: none; + width: 130px; + height: 85px; + min-width: 130px; + + border: 2px solid #ddd; + border-radius: 8px; + padding: 8px; + background: white; + cursor: pointer; + transition: all 0.3s ease; + + // ← PREVENIR SELECCIÓN + user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + + // ← PREVENIR DRAG DE IMAGEN + img { + width: 100%; + height: 100%; + object-fit: contain; + display: block; + pointer-events: none; + user-select: none; + -webkit-user-select: none; + -webkit-user-drag: none; // ← IMPORTANTE + -webkit-touch-callout: none; + } +} + +// Ocultar scrollbar del contenedor padre +.bank-selector { + scrollbar-width: none; + -ms-overflow-style: none; + + &::-webkit-scrollbar { + display: none; + } +} + +// TOGGLE MÓVIL +.footer-heading-mobie { + position: relative; + + h2 { + margin: 0; + font-size: 18px; + display: flex; + justify-content: space-between; + align-items: center; + + &:after { + content: '+'; + font-size: 24px; + font-weight: bold; + color: #007bff; + transition: all 0.3s ease; + line-height: 1; + } + } + + &.active { + background: #007bff; + color: white; + + h2 { + color: white; + + &:after { + content: '−'; + color: white; + } + } + } + + &:hover:not(.active) { + background: #e9ecef; + } +} + +.tf-collapse-content { + display: none; + opacity: 0; + transform: translateY(-10px); + transition: all 0.3s ease; + + &.show { + display: block !important; + opacity: 1; + transform: translateY(0); + } +} + +// RESPONSIVE +@media (max-width: 768px) { + .footer-heading-desktop { + display: none !important; + } + + .footer-heading-mobie { + display: block !important; + } + + .footer-col-block .tf-collapse-content { + display: none; + } + + .bank-item { + width: 115px !important; + height: 75px !important; + min-width: 115px !important; + } + + .banks-scroll { + gap: 12px; + padding: 10px 5px; + } +} + +@media (min-width: 769px) { + .footer-heading-mobie { + display: none !important; + } + + .footer-heading-desktop { + display: block !important; + } + + .tf-collapse-content { + display: block !important; + opacity: 1 !important; + transform: none !important; + } + + .bank-item { + width: 130px !important; + height: 85px !important; + min-width: 130px !important; + } +} + +// Información del banco seleccionado +.bank-info { + margin-top: 20px; + padding: 20px; + background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); + border-radius: 12px; + border: 1px solid #dee2e6; + box-shadow: 0 2px 10px rgba(0,0,0,0.05); + transition: all 0.3s ease; + + &.show { + animation: slideInUp 0.4s ease-out; + } +} + +.bank-info-content { + text-align: center; +} + +.bank-name { + margin: 0 0 15px 0; + font-size: 18px; + font-weight: bold; + color: #333; + border-bottom: 2px solid #007bff; + padding-bottom: 10px; + display: inline-block; +} + +.bank-details { + display: flex; + justify-content: space-around; + flex-wrap: wrap; + gap: 15px; + margin-top: 15px; +} + +.bank-detail-item { + flex: 1; + min-width: 200px; + padding: 12px; + background: white; + border-radius: 8px; + border: 1px solid #e9ecef; + transition: all 0.3s ease; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 4px 15px rgba(0,123,255,0.1); + } +} + +.detail-label { + display: block; + font-size: 14px; + color: #666; + margin-bottom: 5px; + font-weight: 500; +} + +.detail-value { + display: block; + font-size: 16px; + font-weight: bold; + color: #007bff; +} + +.loading-indicator { + margin-top: 15px; + padding: 10px; + color: #666; + font-style: italic; + + span { + position: relative; + + &::after { + content: ''; + animation: dots 1.5s steps(5, end) infinite; + } + } +} + +// Animación de entrada +@keyframes slideInUp { + from { + opacity: 0; + transform: translateY(20px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes dots { + 0%, 20% { content: ''; } + 40% { content: '.'; } + 60% { content: '..'; } + 80%, 100% { content: '...'; } +} + +// Responsive +@media (max-width: 768px) { + .bank-details { + flex-direction: column; + gap: 10px; + } + + .bank-detail-item { + min-width: auto; + } + + .bank-name { + font-size: 16px; + } +} + +// Estilos que imitan perfectamente nice-select +.custom-select { + -webkit-tap-highlight-color: transparent; + background-color: #fff; + border: 1px solid #E5E5EA !important; + border-radius: 14px; + padding: 14px 17px; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + font-family: var(--paraFont); + font-size: 16px; + font-weight: 400; + outline: none; + position: relative; + transition: all linear .2s; + user-select: none; + white-space: nowrap; + width: 100%; + + // Estados activo, abierto y focus + &:active, + &.open, + &:focus { + border-color: #999; + } + + // Flecha exactamente igual + &::after { + border-bottom: 1.7px solid #3A3A3C; + border-right: 1.7px solid #3A3A3C; + content: ''; + height: 8px; + width: 8px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 24px; + top: 50%; + -webkit-transform-origin: 66% 66%; + -ms-transform-origin: 66% 66%; + transform-origin: 66% 66%; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; + } + + // Flecha cuando está abierto + &.open::after { + -webkit-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + } + + // Estado deshabilitado + &.disabled { + border-color: #ededed; + color: #999; + pointer-events: none; + + &::after { + border-color: #cccccc; + } + } + + // Lista desplegable (copia exacta) + .list { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11); + box-sizing: border-box; + margin-top: 4px; + opacity: 0; + overflow: hidden; + padding: 0; + pointer-events: none; + position: absolute; + top: 100%; + left: 0; + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; + -webkit-transform: scale(0.75) translateY(-21px); + -ms-transform: scale(0.75) translateY(-21px); + transform: scale(0.75) translateY(-21px); + -webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + z-index: 9; + width: 100%; + font-size: 14px; + max-height: 155px; + overflow: auto; + + // Scrollbar personalizada (copia exacta) + &::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgb(0 0 0 / 30%); + background-color: #f5f5f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); + } + + &::-webkit-scrollbar-thumb { + background-color: #a7a7a7; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); + } + + &::-webkit-scrollbar { + width: 6px; + height: 4px; + background-color: #f5f5f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); + } + + // Efecto hover en lista + &:hover .option:not(:hover) { + background-color: transparent !important; + } + } + + // Lista cuando está abierto + &.open .list { + opacity: 1; + z-index: 10; + pointer-events: auto; + -webkit-transform: scale(1) translateY(0); + -ms-transform: scale(1) translateY(0); + transform: scale(1) translateY(0); + width: 100%; + -moz-transform: scale(1) translateY(0); + -o-transform: scale(1) translateY(0); + } + + // Opciones (copia exacta) + .option { + cursor: pointer; + font-weight: 400; + line-height: 40px; + list-style: none; + min-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 29px; + text-align: left; + -webkit-transition: all 0.2s; + transition: all 0.2s; + + // Estados hover y focus (copia exacta) + &:hover, + &.focus, + &.selected.focus { + background-color: #f6f6f6; + } + + // Opción seleccionada (copia exacta) + &.selected { + font-weight: 600; + color: #FF7101; // ← Color naranja exacto + } + + // Opción deshabilitada + &.disabled { + background-color: transparent; + color: #999; + cursor: default; + } + } +} + +// Variantes adicionales si las necesitas +.custom-select.wide { + width: 100%; + + .list { + left: 0 !important; + right: 0 !important; + } +} + +.custom-select.small { + font-size: 12px; + height: 36px; + line-height: 34px; + + &::after { + height: 4px; + width: 4px; + } + + .option { + line-height: 34px; + min-height: 34px; + } +} + +// Responsive +@media (max-width: 768px) { + .custom-select { + font-size: 14px; + padding: 12px 15px; + + &::after { + right: 20px; + } + + .list { + font-size: 13px; + max-height: 120px; + } + + .option { + padding-left: 15px; + padding-right: 25px; + line-height: 36px; + min-height: 36px; + } + } +} + +// ← IMPORTANTE: Usar ::ng-deep para que Angular no aisle los estilos +::ng-deep .custom-select { + -webkit-tap-highlight-color: transparent; + background-color: #fff; + border: 1px solid #E5E5EA !important; + border-radius: 14px; + padding: 14px 17px; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + font-family: var(--paraFont); + font-size: 16px; + font-weight: 400; + outline: none; + position: relative; + transition: all linear .2s; + user-select: none; + white-space: nowrap; + width: 100%; + + // Estados activo, abierto y focus + &:active, + &.open, + &:focus { + border-color: #999; + } + + // Flecha exactamente igual + &::after { + border-bottom: 1.7px solid #3A3A3C; + border-right: 1.7px solid #3A3A3C; + content: ''; + height: 8px; + width: 8px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 24px; + top: 50%; + transform-origin: 66% 66%; + transform: rotate(45deg); + transition: all 0.15s ease-in-out; + } + + // Flecha cuando está abierto + &.open::after { + transform: rotate(-135deg); + } + + // Estado deshabilitado + &.disabled { + border-color: #ededed; + color: #999; + pointer-events: none; + + &::after { + border-color: #cccccc; + } + } + + // ← CRÍTICO: Lista desplegable con ::ng-deep + .list { + background-color: #fff !important; + border-radius: 5px !important; + box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11) !important; + box-sizing: border-box !important; + margin-top: 4px !important; + opacity: 0 !important; + overflow: hidden !important; + padding: 0 !important; + pointer-events: none !important; + position: absolute !important; + top: 100% !important; + left: 0 !important; + transform-origin: 50% 0 !important; + transform: scale(0.75) translateY(-21px) !important; + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out !important; + z-index: 1000 !important; + width: 100% !important; + font-size: 14px !important; + max-height: 155px !important; + overflow-y: auto !important; + list-style: none !important; + margin: 0 !important; + margin-top: 4px !important; + + // Scrollbar personalizada + &::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgb(0 0 0 / 30%); + background-color: #f5f5f5; + border-radius: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: #a7a7a7; + border-radius: 5px; + } + + &::-webkit-scrollbar { + width: 6px; + height: 4px; + background-color: #f5f5f5; + border-radius: 5px; + } + + // Efecto hover en lista + &:hover .option:not(:hover) { + background-color: transparent !important; + } + } + + // Lista cuando está abierto + &.open .list { + opacity: 1 !important; + z-index: 1000 !important; + pointer-events: auto !important; + transform: scale(1) translateY(0) !important; + } + + // ← CRÍTICO: Opciones con ::ng-deep + .option { + cursor: pointer !important; + font-weight: 400 !important; + line-height: 40px !important; + list-style: none !important; + min-height: 40px !important; + outline: none !important; + padding-left: 18px !important; + padding-right: 29px !important; + text-align: left !important; + transition: all 0.2s !important; + display: block !important; + margin: 0 !important; + + // Estados hover y focus + &:hover, + &.focus, + &.selected.focus { + background-color: #f6f6f6 !important; + } + + // ← CRÍTICO: Opción seleccionada + &.selected { + font-weight: 600 !important; + color: #FF7101 !important; // Color naranja exacto + background-color: transparent !important; + } + + // Opción deshabilitada + &.disabled { + background-color: transparent !important; + color: #999 !important; + cursor: default !important; + } + } +} + +// ← TAMBIÉN agregar para el selector específico por ID +::ng-deep #termSelector { + &.custom-select { + // Forzar estilos específicos + display: block !important; + + .list { + display: none !important; + } + + &.open .list { + display: block !important; + } + } +} \ No newline at end of file diff --git a/apiferia/src/app/views/car-view/car-view.component.spec.ts b/apiferia/src/app/views/car-view/car-view.component.spec.ts new file mode 100644 index 00000000..e1e2c352 --- /dev/null +++ b/apiferia/src/app/views/car-view/car-view.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { CarViewComponent } from './car-view.component'; + +describe('CarViewComponent', () => { + let component: CarViewComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CarViewComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(CarViewComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/apiferia/src/app/views/car-view/car-view.component.ts b/apiferia/src/app/views/car-view/car-view.component.ts new file mode 100644 index 00000000..16459923 --- /dev/null +++ b/apiferia/src/app/views/car-view/car-view.component.ts @@ -0,0 +1,1135 @@ +import { Component, AfterViewInit, OnDestroy } from '@angular/core'; + +// Interface para los datos del banco +interface BankData { + name: string; + interestRate: string; + financingTotal: string; + availableTerms: TermOption[]; +} + +interface TermOption { + value: string; + label: string; + months: number; +} + +@Component({ + selector: 'app-car-view', + imports: [], + templateUrl: './car-view.component.html', + styleUrl: './car-view.component.scss' +}) +export class CarViewComponent implements AfterViewInit, OnDestroy { + + ngAfterViewInit() { + // Esperar a que Angular termine de renderizar + setTimeout(() => { + this.initializePlugins(); + }, 500); + } + + ngOnDestroy() { + // Limpiar eventos cuando se destruya el componente + this.destroyPlugins(); + } + + private initializePlugins() { + console.log('🚀 Inicializando plugins...'); + this.initSwiper(); + this.initFancybox(); + this.initNiceSelect(); + this.initScrollspy(); + this.initMobileToggles(); + // En initializePlugins, cambiar a: + setTimeout(() => { + this.initSmoothBankSlider(); + this.initBankClicks(); + this.initSimpleTermSelector(); // ← Cambiar aquí + }, 1000); + + } + + // Variables para controlar drag vs click + private isDragging = false; + private startX = 0; + private startY = 0; + private dragThreshold = 5; // píxeles mínimos para considerar drag + + // Variables para información del banco + private bankDataCache: { [key: string]: BankData } = {}; + private selectedTerm: TermOption | null = null; + + // ← FUNCIÓN MEJORADA PARA MANEJAR CLICKS SIN INTERFERENCIA CON SCROLL + private initBankClicks() { + setTimeout(() => { + console.log('🏦 Configurando clicks de bancos...'); + const bankItems = document.querySelectorAll('.bank-item'); + console.log('Bancos encontrados:', bankItems.length); + + bankItems.forEach((item, index) => { + let mouseDownTime = 0; + let mouseDownX = 0; + let mouseDownY = 0; + let hasMoved = false; + + // Mouse/Touch down + const handleStart = (e: Event) => { + mouseDownTime = Date.now(); + hasMoved = false; + + if (e.type === 'mousedown') { + const mouseEvent = e as MouseEvent; + mouseDownX = mouseEvent.clientX; + mouseDownY = mouseEvent.clientY; + } else if (e.type === 'touchstart') { + const touchEvent = e as TouchEvent; + mouseDownX = touchEvent.touches[0].clientX; + mouseDownY = touchEvent.touches[0].clientY; + } + }; + + // Mouse/Touch move + const handleMove = (e: Event) => { + let currentX = 0; + let currentY = 0; + + if (e.type === 'mousemove') { + const mouseEvent = e as MouseEvent; + currentX = mouseEvent.clientX; + currentY = mouseEvent.clientY; + } else if (e.type === 'touchmove') { + const touchEvent = e as TouchEvent; + currentX = touchEvent.touches[0].clientX; + currentY = touchEvent.touches[0].clientY; + } + + const deltaX = Math.abs(currentX - mouseDownX); + const deltaY = Math.abs(currentY - mouseDownY); + + // Si se movió más del threshold, es drag + if (deltaX > this.dragThreshold || deltaY > this.dragThreshold) { + hasMoved = true; + } + }; + + // Mouse/Touch up - aquí decidimos si es click o drag + const handleEnd = (e: Event) => { + const clickDuration = Date.now() - mouseDownTime; + + // Solo procesar como click si: + // 1. No se movió mucho (no es drag) + // 2. Duración corta (no es long press) + // 3. No está en modo dragging del slider + if (!hasMoved && clickDuration < 300 && !this.isSliderDragging) { + e.preventDefault(); + e.stopPropagation(); + + const bankName = item.getAttribute('data-bank') || `Banco ${index + 1}`; + console.log(`${bankName} seleccionado`); + + // Remover selección anterior + bankItems.forEach(bank => bank.classList.remove('selected')); + + // Agregar selección actual + item.classList.add('selected'); + + // Llamar función de selección + this.selectBank(bankName); + } + }; + + // Agregar event listeners + item.addEventListener('mousedown', handleStart); + item.addEventListener('mousemove', handleMove); + item.addEventListener('mouseup', handleEnd); + item.addEventListener('touchstart', handleStart); + item.addEventListener('touchmove', handleMove); + item.addEventListener('touchend', handleEnd); + + // Prevenir el click si es drag + item.addEventListener('click', (e) => { + if (hasMoved || this.isSliderDragging) { + e.preventDefault(); + e.stopPropagation(); + } + }); + }); + + console.log('✅ Clicks de bancos configurados'); + }, 1600); + } + + private initMobileToggles() { + setTimeout(() => { + console.log('🔧 Configurando toggles móviles...'); + + const mobileHeaders = document.querySelectorAll('.footer-heading-mobie'); + console.log('Headers móviles encontrados:', mobileHeaders.length); + + mobileHeaders.forEach((header, index) => { + header.addEventListener('click', (e) => { + e.preventDefault(); + console.log(`📱 Click en header móvil ${index + 1}:`, header); + + const parent = header.closest('.footer-col-block'); + if (parent) { + const content = parent.querySelector('.tf-collapse-content'); + console.log('Contenido encontrado:', !!content); + + if (content) { + if (content.classList.contains('show')) { + content.classList.remove('show'); + header.classList.remove('active'); + console.log('✅ Contenido ocultado'); + } else { + content.classList.add('show'); + header.classList.add('active'); + console.log('✅ Contenido mostrado'); + } + } + } + }); + }); + + console.log('✅ Toggles móviles configurados'); + }, 2000); + } + + private initSwiper() { + const swiperElement = document.querySelector('.mainslider'); + if (swiperElement && typeof (window as any).Swiper !== 'undefined') { + try { + new (window as any).Swiper('.mainslider', { + slidesPerView: 1, + spaceBetween: 0, + loop: true, + navigation: { + nextEl: '.swiper-button-next', + prevEl: '.swiper-button-prev', + }, + autoplay: { + delay: 5000, + disableOnInteraction: false, + } + }); + } catch (error) { + console.log('Swiper initialization skipped:', error); + } + } + } + + private initFancybox() { + if (typeof (window as any).$ !== 'undefined' && (window as any).$.fancybox) { + try { + (window as any).$('[data-fancybox="gallery"]').fancybox({ + buttons: ['zoom', 'slideShow', 'fullScreen', 'close'], + loop: true, + protect: true + }); + } catch (error) { + console.log('Fancybox initialization skipped:', error); + } + } + } + + private initNiceSelect() { + if (typeof (window as any).$ !== 'undefined' && (window as any).$.fn.niceSelect) { + try { + (window as any).$('.nice-select').niceSelect(); + } catch (error) { + console.log('NiceSelect initialization skipped:', error); + } + } + } + + private initScrollspy() { + setTimeout(() => { + console.log('🔍 Buscando elementos...'); + + const nav = document.getElementById('navbar-example2'); + const scrollContainer = document.querySelector('[data-bs-spy="scroll"]'); + + console.log('Nav encontrado:', !!nav); + console.log('Scroll container encontrado:', !!scrollContainer); + + if (nav && scrollContainer) { + console.log('✅ Elementos encontrados, configurando scroll manual'); + this.setupSimpleScrollSpy(); + } else { + console.log('❌ Elementos no encontrados'); + } + }, 2000); + } + + private setupSimpleScrollSpy() { + const links = document.querySelectorAll('#navbar-example2 .nav-link'); + console.log('Links encontrados:', links.length); + + for (let i = 0; i < links.length; i++) { + const link = links[i] as HTMLElement; + + link.onclick = (e) => { + e.preventDefault(); + console.log(`📍 Click en link ${i + 1}`); + + const href = link.getAttribute('href'); + console.log('Href:', href); + + if (href) { + const target = document.querySelector(href); + console.log('Target encontrado:', !!target); + + if (target) { + for (let j = 0; j < links.length; j++) { + links[j].classList.remove('active'); + } + link.classList.add('active'); + + const offsetTop = (target as HTMLElement).offsetTop - 100; + window.scrollTo({ + top: offsetTop, + behavior: 'smooth' + }); + + console.log('✅ Scroll ejecutado a:', offsetTop); + } + } + }; + } + + console.log('✅ Setup completado con onclick directo'); + } + + private waitForElements(callback: () => void, maxAttempts: number = 10, attempt: number = 1) { + const scrollElement = document.querySelector('[data-bs-spy="scroll"]'); + const navElement = document.querySelector('#navbar-example2'); + + console.log(`Intento ${attempt}: scroll=${!!scrollElement}, nav=${!!navElement}`); + + if (scrollElement && navElement) { + console.log('✅ Elementos encontrados, inicializando ScrollSpy'); + callback(); + } else if (attempt < maxAttempts) { + setTimeout(() => { + this.waitForElements(callback, maxAttempts, attempt + 1); + }, 200); + } else { + console.log('❌ No se pudieron encontrar los elementos después de', maxAttempts, 'intentos'); + } + } + + private setupManualScrollSpy() { + const sections = [ + '#scrollspyHeading1', + '#scrollspyHeading2', + '#scrollspyHeading3', + '#scrollspyHeading4', + '#scrollspyHeading5' + ]; + + const navLinks = document.querySelectorAll('#navbar-example2 .nav-link'); + console.log('NavLinks encontrados:', navLinks.length); + + if (navLinks.length === 0) { + console.log('❌ No se encontraron links de navegación'); + return; + } + + const updateActiveNav = () => { + let currentSection = ''; + + sections.forEach(sectionId => { + const section = document.querySelector(sectionId); + if (section) { + const rect = section.getBoundingClientRect(); + if (rect.top <= 200 && rect.bottom >= 100) { + currentSection = sectionId; + } + } + }); + + navLinks.forEach(link => { + const href = link.getAttribute('href'); + if (href === currentSection) { + link.classList.add('active'); + } else { + link.classList.remove('active'); + } + }); + }; + + let ticking = false; + const handleScroll = () => { + if (!ticking) { + requestAnimationFrame(() => { + updateActiveNav(); + ticking = false; + }); + ticking = true; + } + }; + + window.addEventListener('scroll', handleScroll); + updateActiveNav(); + + console.log('✅ ScrollSpy manual configurado'); + } + + private initSmoothScroll() { + const navLinks = document.querySelectorAll('#navbar-example2 .nav-link'); + + navLinks.forEach((link, index) => { + link.addEventListener('click', (e) => { + e.preventDefault(); + + const href = (e.target as HTMLElement).getAttribute('href'); + console.log(`Click en link ${index + 1}:`, href); + + if (href && href.startsWith('#')) { + const targetElement = document.querySelector(href); + console.log('Elemento target encontrado:', !!targetElement); + + if (targetElement) { + const offsetTop = (targetElement as HTMLElement).offsetTop - 120; + console.log('Scrolling to:', offsetTop); + + window.scrollTo({ + top: offsetTop, + behavior: 'smooth' + }); + + navLinks.forEach(l => l.classList.remove('active')); + link.classList.add('active'); + } + } + }); + }); + + console.log('✅ Smooth scroll configurado para', navLinks.length, 'links'); + } + + private updateActiveNavLink(activeHref: string) { + const navLinks = document.querySelectorAll('#navbar-example2 .nav-link'); + + navLinks.forEach(link => { + const href = link.getAttribute('href'); + if (href === activeHref) { + link.classList.add('active'); + } else { + link.classList.remove('active'); + } + }); + } + + private destroyPlugins() { + const swiperInstance = (document.querySelector('.mainslider') as any)?.swiper; + if (swiperInstance) { + swiperInstance.destroy(); + } + + if (typeof (window as any).$ !== 'undefined' && (window as any).$.fancybox) { + (window as any).$.fancybox.close(); + } + + if (typeof (window as any).$ !== 'undefined' && (window as any).$.fn.niceSelect) { + try { + (window as any).$('.nice-select').niceSelect('destroy'); + } catch (error) { + // Nice select ya fue destruido + } + } + + if (typeof (window as any).$ !== 'undefined' && (window as any).$.fn.scrollspy) { + try { + (window as any).$('[data-bs-spy="scroll"]').scrollspy('dispose'); + } catch (error) { + // ScrollSpy ya fue destruido + } + } + + const navLinks = document.querySelectorAll('#navbar-example2 .nav-link'); + navLinks.forEach(link => { + const newLink = link.cloneNode(true); + link.parentNode?.replaceChild(newLink, link); + }); + + const mobileHeaders = document.querySelectorAll('.footer-heading-mobie'); + mobileHeaders.forEach(header => { + const newHeader = header.cloneNode(true); + header.parentNode?.replaceChild(newHeader, header); + }); + + const bankItems = document.querySelectorAll('.bank-item'); + bankItems.forEach(item => { + const newItem = item.cloneNode(true); + item.parentNode?.replaceChild(newItem, item); + }); + } + + // Variables para el slider de bancos + private currentSlide = 0; + private slideWidth = 160; + private isSliderDragging = false; + + private initSmoothBankSlider() { + const container = document.getElementById('banksContainer'); + if (!container) return; + + let startX = 0; + let currentX = 0; + let isMouseDown = false; + let hasDragged = false; + + // Eventos táctiles + container.addEventListener('touchstart', (e) => { + startX = e.touches[0].clientX; + currentX = startX; + hasDragged = false; + this.isSliderDragging = false; + container.style.transition = 'none'; + }); + + container.addEventListener('touchmove', (e) => { + if (!startX) return; + + this.isSliderDragging = true; + hasDragged = true; + currentX = e.touches[0].clientX; + const diffX = currentX - startX; + const currentTransform = -this.currentSlide * this.slideWidth; + + container.style.transform = `translateX(${currentTransform + diffX}px)`; + }); + + container.addEventListener('touchend', (e) => { + if (!startX) return; + + const diffX = currentX - startX; + + if (hasDragged && Math.abs(diffX) > 10) { + container.style.transition = 'transform 0.3s ease-out'; + + if (Math.abs(diffX) > 50) { + if (diffX > 0) { + this.slideLeft(); + } else { + this.slideRight(); + } + } else { + this.updateSlidePosition(); + } + } else { + this.updateSlidePosition(); + } + + // Reset variables + startX = 0; + currentX = 0; + hasDragged = false; + + setTimeout(() => { + this.isSliderDragging = false; + container.style.transition = 'none'; + }, 350); + }); + + // Eventos de mouse para desktop + container.addEventListener('mousedown', (e) => { + e.preventDefault(); + startX = e.clientX; + currentX = startX; + isMouseDown = true; + hasDragged = false; + this.isSliderDragging = false; + container.style.transition = 'none'; + container.style.cursor = 'grabbing'; + + document.addEventListener('mousemove', handleMouseMove); + document.addEventListener('mouseup', handleMouseUp); + }); + + const handleMouseMove = (e: MouseEvent) => { + if (!isMouseDown || !startX) return; + + e.preventDefault(); + this.isSliderDragging = true; + hasDragged = true; + currentX = e.clientX; + const diffX = currentX - startX; + const currentTransform = -this.currentSlide * this.slideWidth; + + container.style.transform = `translateX(${currentTransform + diffX}px)`; + }; + + const handleMouseUp = (e: MouseEvent) => { + if (!isMouseDown) return; + + e.preventDefault(); + isMouseDown = false; + + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + + const diffX = currentX - startX; + container.style.cursor = 'grab'; + + if (hasDragged && Math.abs(diffX) > 10) { + container.style.transition = 'transform 0.3s ease-out'; + + if (Math.abs(diffX) > 50) { + if (diffX > 0) { + this.slideLeft(); + } else { + this.slideRight(); + } + } else { + this.updateSlidePosition(); + } + } else { + this.updateSlidePosition(); + } + + // Reset variables + startX = 0; + currentX = 0; + hasDragged = false; + + setTimeout(() => { + this.isSliderDragging = false; + container.style.transition = 'none'; + }, 350); + }; + + container.addEventListener('mouseleave', () => { + if (isMouseDown) { + isMouseDown = false; + this.isSliderDragging = false; + container.style.cursor = 'grab'; + container.style.transition = 'none'; + this.updateSlidePosition(); + + document.removeEventListener('mousemove', handleMouseMove); + document.removeEventListener('mouseup', handleMouseUp); + + // Reset + startX = 0; + currentX = 0; + hasDragged = false; + } + }); + + // Prevenir drag de imágenes + const images = container.querySelectorAll('img'); + images.forEach(img => { + img.addEventListener('dragstart', (e) => { + e.preventDefault(); + }); + img.style.userSelect = 'none'; + img.style.pointerEvents = 'none'; + }); + } + + slideLeft() { + if (this.currentSlide > 0) { + this.currentSlide--; + this.updateSlidePosition(); + } + } + + slideRight() { + const maxSlides = 8 - 2; + if (this.currentSlide < maxSlides) { + this.currentSlide++; + this.updateSlidePosition(); + } + } + + private updateSlidePosition() { + const container = document.getElementById('banksContainer'); + if (container) { + const translateX = -this.currentSlide * this.slideWidth; + container.style.transform = `translateX(${translateX}px)`; + } + } + + // ← NUEVAS FUNCIONES PARA INFORMACIÓN DEL BANCO + selectBank(bankName: string) { + console.log(`🏦 BANCO FINAL SELECCIONADO: ${bankName}`); + + // Mostrar la sección de información + this.showBankInfo(bankName); + + // Cargar datos del banco + this.loadBankData(bankName); + } + + private showBankInfo(bankName: string) { + const bankInfoElement = document.getElementById('bankInfo'); + const bankNameElement = document.getElementById('selectedBankName'); + + if (bankInfoElement && bankNameElement) { + // Mostrar la sección + bankInfoElement.style.display = 'block'; + bankInfoElement.classList.add('show'); + + // Actualizar nombre del banco + bankNameElement.textContent = bankName; + + // Limpiar datos anteriores + this.clearBankDetails(); + + // Mostrar indicador de carga + this.showLoadingIndicator(true); + } + } + + private async loadBankData(bankName: string) { + try { + // Verificar si ya tenemos los datos en caché + if (this.bankDataCache[bankName]) { + this.displayBankData(this.bankDataCache[bankName]); + return; + } + + // Simular llamada a API (reemplazar con tu API real) + const bankData = await this.fetchBankDataFromAPI(bankName); + + // Guardar en caché + this.bankDataCache[bankName] = bankData; + + // Mostrar datos + this.displayBankData(bankData); + + } catch (error) { + console.error('Error cargando datos del banco:', error); + this.showErrorMessage('Error al cargar la información del banco'); + } finally { + this.showLoadingIndicator(false); + } + } + + // Datos simulados actualizados + private async fetchBankDataFromAPI(bankName: string): Promise { + // Simular delay de API + await new Promise(resolve => setTimeout(resolve, 1000)); + + // Datos simulados con términos disponibles - REEMPLAZAR CON TU API + const mockData: { [key: string]: BankData } = { + 'Confisa': { + name: 'Confisa', + interestRate: '8.5%', + financingTotal: '95%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 } + ] + }, + 'BACC': { + name: 'BACC', + interestRate: '7.8%', + financingTotal: '90%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 } + ] + }, + 'Popular': { + name: 'Popular', + interestRate: '9.2%', + financingTotal: '85%', + availableTerms: [ + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 }, + { value: '84-months', label: '84 meses', months: 84 } + ] + }, + 'Reservas': { + name: 'Reservas', + interestRate: '7.5%', + financingTotal: '92%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 }, + { value: '84-months', label: '84 meses', months: 84 }, + { value: '96-months', label: '96 meses', months: 96 } + ] + }, + 'BHD': { + name: 'BHD', + interestRate: '8.1%', + financingTotal: '88%', + availableTerms: [ + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 } + ] + }, + 'Caribe': { + name: 'Caribe', + interestRate: '8.8%', + financingTotal: '87%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 }, + { value: '84-months', label: '84 meses', months: 84 } + ] + }, + 'Motor Crédito': { + name: 'Motor Crédito', + interestRate: '9.5%', + financingTotal: '80%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 } + ] + }, + 'Scotia': { + name: 'Scotia', + interestRate: '7.9%', + financingTotal: '91%', + availableTerms: [ + { value: '12-months', label: '12 meses', months: 12 }, + { value: '24-months', label: '24 meses', months: 24 }, + { value: '36-months', label: '36 meses', months: 36 }, + { value: '48-months', label: '48 meses', months: 48 }, + { value: '60-months', label: '60 meses', months: 60 }, + { value: '72-months', label: '72 meses', months: 72 }, + { value: '84-months', label: '84 meses', months: 84 }, + { value: '96-months', label: '96 meses', months: 96 } + ] + } + }; + + return mockData[bankName] || { + name: bankName, + interestRate: 'N/A', + financingTotal: 'N/A', + availableTerms: [] + }; + } + + private displayBankData(bankData: BankData) { + const interestRateElement = document.getElementById('interestRate'); + const financingTotalElement = document.getElementById('financingTotal'); + + if (interestRateElement && financingTotalElement) { + // Animación de entrada para los datos + interestRateElement.style.opacity = '0'; + financingTotalElement.style.opacity = '0'; + + setTimeout(() => { + interestRateElement.textContent = bankData.interestRate; + financingTotalElement.textContent = bankData.financingTotal; + + interestRateElement.style.transition = 'opacity 0.3s ease'; + financingTotalElement.style.transition = 'opacity 0.3s ease'; + + interestRateElement.style.opacity = '1'; + financingTotalElement.style.opacity = '1'; + }, 100); + } + + // ← AGREGAR DEBUG ANTES DE ACTUALIZAR + this.debugTermSelector(); + + // Actualizar selector de términos + this.updateTermsSelector(bankData.availableTerms); + } + + + + + // Agregar esta función temporal para debug + private debugTermSelector() { + console.log('🔍 DEBUG: Verificando selector de términos...'); + + const termSelector = document.getElementById('termSelector'); + const currentTerm = document.getElementById('currentTerm'); + const termsList = document.getElementById('termsList'); + + console.log('termSelector encontrado:', !!termSelector); + console.log('currentTerm encontrado:', !!currentTerm); + console.log('termsList encontrado:', !!termsList); + + if (termSelector) { + console.log('termSelector HTML:', termSelector.outerHTML); + } + + if (currentTerm) { + console.log('currentTerm texto actual:', currentTerm.textContent); + } + + if (termsList) { + console.log('termsList hijos:', termsList.children.length); + console.log('termsList HTML:', termsList.innerHTML); + } + + // Listar TODOS los elementos con ID en la página + const allIds = Array.from(document.querySelectorAll('[id]')).map(el => el.id); + console.log('Todos los IDs en la página:', allIds); + } + + + + + + + + + + + + + + + + + + // ← FUNCIÓN PARA INICIALIZAR EL SELECTOR DE TÉRMINOS + private initTermSelector() { + setTimeout(() => { + console.log('🔧 Inicializando selector de términos...'); + const termSelector = document.getElementById('termSelector'); + + if (!termSelector) { + console.log('❌ Selector de términos NO encontrado en DOM'); + // Listar todos los elementos con ID para debug + const allIds = Array.from(document.querySelectorAll('[id]')).map(el => el.id); + console.log('IDs disponibles:', allIds); + return; + } + + console.log('✅ Selector encontrado:', termSelector); + + // Limpiar eventos previos + const newSelector = termSelector.cloneNode(true) as HTMLElement; + termSelector.parentNode?.replaceChild(newSelector, termSelector); + + // Agregar funcionalidad de toggle al nuevo elemento + newSelector.addEventListener('click', (e) => { + if (newSelector.style.pointerEvents === 'none') { + console.log('Selector deshabilitado'); + return; + } + + e.preventDefault(); + e.stopPropagation(); + + const isOpen = newSelector.classList.contains('open'); + newSelector.classList.toggle('open'); + + console.log('Toggle selector:', !isOpen ? 'ABIERTO' : 'CERRADO'); + }); + + // Cerrar al hacer click fuera + document.addEventListener('click', (e) => { + if (!newSelector.contains(e.target as Node)) { + newSelector.classList.remove('open'); + } + }); + + console.log('✅ Selector de términos inicializado correctamente'); + }, 3000); // ← Tiempo extra para asegurar que todo esté listo + } + + + // Reemplaza updateTermsSelector con esto: +private updateTermsSelector(terms: TermOption[]) { + console.log('🔄 Actualizando términos:', terms); + + const termSelector = document.getElementById('termSelector'); + const currentTerm = document.getElementById('currentTerm'); + const termsList = document.getElementById('termsList'); + + if (!termSelector || !currentTerm || !termsList) return; + + // MOSTRAR el selector + termSelector.style.display = 'block'; + termsList.innerHTML = ''; + + if (terms.length === 0) { + currentTerm.textContent = 'No disponible'; + termSelector.style.opacity = '0.5'; + return; + } + + // Agregar términos (versión simple) + terms.forEach((term, index) => { + const li = document.createElement('li'); + li.className = 'option'; + li.setAttribute('data-value', term.value); + li.textContent = term.label; + + if (index === 0) { + li.classList.add('selected'); + currentTerm.textContent = term.label; + this.selectedTerm = term; + } + + li.onclick = (e) => { + e.stopPropagation(); + + // Remover selección anterior (sin cast necesario) + termsList.querySelectorAll('.option').forEach(opt => + opt.classList.remove('selected') + ); + + // Seleccionar actual + li.classList.add('selected'); + currentTerm.textContent = term.label; + this.selectedTerm = term; + termSelector.classList.remove('open'); + + console.log('✅ Término seleccionado:', term.label); + }; + + termsList.appendChild(li); + }); + + termSelector.style.opacity = '1'; + console.log(`✅ ${terms.length} términos cargados`); +} + + // Función simple para el toggle + // Función simple sin interferir con nice-select +private initSimpleTermSelector() { + setTimeout(() => { + const termSelector = document.getElementById('termSelector'); + + if (!termSelector) { + console.log('❌ termSelector no encontrado'); + return; + } + + // Click para abrir/cerrar + termSelector.addEventListener('click', (e) => { + if (termSelector.style.opacity === '0.5') return; + e.stopPropagation(); + termSelector.classList.toggle('open'); + }); + + // Cerrar al click fuera + document.addEventListener('click', (e) => { + if (!termSelector.contains(e.target as Node)) { + termSelector.classList.remove('open'); + } + }); + + console.log('✅ Selector personalizado inicializado'); + }, 1000); +} + + + + // ← FUNCIÓN PARA SELECCIONAR UN TÉRMINO + private selectTerm(term: TermOption, selectedLi: HTMLElement) { + const currentTerm = document.getElementById('currentTerm'); + const termsList = document.getElementById('termsList'); + const termSelector = document.getElementById('termSelector'); + + if (!currentTerm || !termsList || !termSelector) return; + + // Actualizar selección visual + termsList.querySelectorAll('.option').forEach(option => { + option.classList.remove('selected'); + }); + selectedLi.classList.add('selected'); + + // Actualizar texto actual + currentTerm.textContent = term.label; + this.selectedTerm = term; + + // Cerrar dropdown + termSelector.classList.remove('open'); + + console.log(`✅ Término seleccionado: ${term.label} (${term.months} meses)`); + + // Aquí puedes agregar lógica para recalcular pagos + // this.recalculatePayments(); + } + + // ← FUNCIÓN PARA OBTENER EL TÉRMINO SELECCIONADO + getSelectedTerm(): TermOption | null { + return this.selectedTerm; + } + + private clearBankDetails() { + const interestRateElement = document.getElementById('interestRate'); + const financingTotalElement = document.getElementById('financingTotal'); + + if (interestRateElement && financingTotalElement) { + interestRateElement.textContent = '--'; + financingTotalElement.textContent = '--'; + } + } + + private showLoadingIndicator(show: boolean) { + const loadingElement = document.getElementById('loadingIndicator'); + if (loadingElement) { + loadingElement.style.display = show ? 'block' : 'none'; + } + } + + private showErrorMessage(message: string) { + const interestRateElement = document.getElementById('interestRate'); + const financingTotalElement = document.getElementById('financingTotal'); + + if (interestRateElement && financingTotalElement) { + interestRateElement.textContent = 'Error'; + financingTotalElement.textContent = 'Error'; + interestRateElement.style.color = '#dc3545'; + financingTotalElement.style.color = '#dc3545'; + } + } + + +private debugListStyles() { + setTimeout(() => { + const termsList = document.getElementById('termsList'); + if (termsList) { + console.log('🔍 Estilos aplicados a la lista:'); + console.log('- classList:', termsList.classList.toString()); + console.log('- innerHTML:', termsList.innerHTML); + console.log('- offsetHeight:', termsList.offsetHeight); + console.log('- computedStyle:', window.getComputedStyle(termsList)); + + const options = termsList.querySelectorAll('.option'); + console.log('- Opciones encontradas:', options.length); + options.forEach((option, i) => { + console.log(` Opción ${i}:`, option.textContent, option.classList.toString()); + }); + } + }, 2000); +} + + + + + + + + +} \ No newline at end of file diff --git a/apiferia/src/app/views/charts/area/area.component.html b/apiferia/src/app/views/charts/area/area.component.html new file mode 100644 index 00000000..deec55bc --- /dev/null +++ b/apiferia/src/app/views/charts/area/area.component.html @@ -0,0 +1,313 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + ApexCharts is loaded with powerful features to fulfill your + data-visualization needs. +

    + +
    Usage
    +

    + To use ApexCharts, follow the instructions from its documentation over + + here +

    + +

    + Find the TS file for the following chart at: + src/app/views/charts/area.component.ts +

    +
    +
    + +
    +
    +
    + Basic Area Chart# +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Spline Area# +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    +
    + Area Chart - Datetime X-axis# +
    +
    + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Area with Negative Values# +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Selection - Github Style# +
    +
    +
    + +
    +
    +
    +
    + file-image +
    + +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Stacked Area# +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Irregular TimeSeries# +
    +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Area Chart with Null values# +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/area/area.component.spec.ts b/apiferia/src/app/views/charts/area/area.component.spec.ts new file mode 100644 index 00000000..ea58cfed --- /dev/null +++ b/apiferia/src/app/views/charts/area/area.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AreaComponent } from './area.component' + +describe('AreaComponent', () => { + let component: AreaComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AreaComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AreaComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/area/area.component.ts b/apiferia/src/app/views/charts/area/area.component.ts new file mode 100644 index 00000000..c63fc349 --- /dev/null +++ b/apiferia/src/app/views/charts/area/area.component.ts @@ -0,0 +1,4615 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { credits, currentYear } from '@/app/common/constants' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import moment from 'moment' +import { NgApexchartsModule } from 'ng-apexcharts' + +export const series = { + monthDataSeries1: { + prices: [ + 8107.85, 8128.0, 8122.9, 8165.5, 8340.7, 8423.7, 8423.5, 8514.3, 8481.85, + 8487.7, 8506.9, 8626.2, 8668.95, 8602.3, 8607.55, 8512.9, 8496.25, + 8600.65, 8881.1, 9340.85, + ], + dates: [ + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + '29 Nov 2017', + '30 Nov 2017', + '01 Dec 2017', + '04 Dec 2017', + '05 Dec 2017', + '06 Dec 2017', + '07 Dec 2017', + '08 Dec 2017', + ], + }, + monthDataSeries2: { + prices: [ + 8423.7, 8423.5, 8514.3, 8481.85, 8487.7, 8506.9, 8626.2, 8668.95, 8602.3, + 8607.55, 8512.9, 8496.25, 8600.65, 8881.1, 9040.85, 8340.7, 8165.5, + 8122.9, 8107.85, 8128.0, + ], + dates: [ + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + '29 Nov 2017', + '30 Nov 2017', + '01 Dec 2017', + '04 Dec 2017', + '05 Dec 2017', + '06 Dec 2017', + '07 Dec 2017', + '08 Dec 2017', + ], + }, + monthDataSeries3: { + prices: [ + 7114.25, 7126.6, 7116.95, 7203.7, 7233.75, 7451.0, 7381.15, 7348.95, + 7347.75, 7311.25, 7266.4, 7253.25, 7215.45, 7266.35, 7315.25, 7237.2, + 7191.4, 7238.95, 7222.6, 7217.9, 7359.3, 7371.55, 7371.15, 7469.2, + 7429.25, 7434.65, 7451.1, 7475.25, 7566.25, 7556.8, 7525.55, 7555.45, + 7560.9, 7490.7, 7527.6, 7551.9, 7514.85, 7577.95, 7592.3, 7621.95, + 7707.95, 7859.1, 7815.7, 7739.0, 7778.7, 7839.45, 7756.45, 7669.2, + 7580.45, 7452.85, 7617.25, 7701.6, 7606.8, 7620.05, 7513.85, 7498.45, + 7575.45, 7601.95, 7589.1, 7525.85, 7569.5, 7702.5, 7812.7, 7803.75, + 7816.3, 7851.15, 7912.2, 7972.8, 8145.0, 8161.1, 8121.05, 8071.25, 8088.2, + 8154.45, 8148.3, 8122.05, 8132.65, 8074.55, 7952.8, 7885.55, 7733.9, + 7897.15, 7973.15, 7888.5, 7842.8, 7838.4, 7909.85, 7892.75, 7897.75, + 7820.05, 7904.4, 7872.2, 7847.5, 7849.55, 7789.6, 7736.35, 7819.4, + 7875.35, 7871.8, 8076.5, 8114.8, 8193.55, 8217.1, 8235.05, 8215.3, 8216.4, + 8301.55, 8235.25, 8229.75, 8201.95, 8164.95, 8107.85, 8128.0, 8122.9, + 8165.5, 8340.7, 8423.7, 8423.5, 8514.3, 8481.85, 8487.7, 8506.9, 8626.2, + ], + dates: [ + '02 Jun 2017', + '05 Jun 2017', + '06 Jun 2017', + '07 Jun 2017', + '08 Jun 2017', + '09 Jun 2017', + '12 Jun 2017', + '13 Jun 2017', + '14 Jun 2017', + '15 Jun 2017', + '16 Jun 2017', + '19 Jun 2017', + '20 Jun 2017', + '21 Jun 2017', + '22 Jun 2017', + '23 Jun 2017', + '27 Jun 2017', + '28 Jun 2017', + '29 Jun 2017', + '30 Jun 2017', + '03 Jul 2017', + '04 Jul 2017', + '05 Jul 2017', + '06 Jul 2017', + '07 Jul 2017', + '10 Jul 2017', + '11 Jul 2017', + '12 Jul 2017', + '13 Jul 2017', + '14 Jul 2017', + '17 Jul 2017', + '18 Jul 2017', + '19 Jul 2017', + '20 Jul 2017', + '21 Jul 2017', + '24 Jul 2017', + '25 Jul 2017', + '26 Jul 2017', + '27 Jul 2017', + '28 Jul 2017', + '31 Jul 2017', + '01 Aug 2017', + '02 Aug 2017', + '03 Aug 2017', + '04 Aug 2017', + '07 Aug 2017', + '08 Aug 2017', + '09 Aug 2017', + '10 Aug 2017', + '11 Aug 2017', + '14 Aug 2017', + '16 Aug 2017', + '17 Aug 2017', + '18 Aug 2017', + '21 Aug 2017', + '22 Aug 2017', + '23 Aug 2017', + '24 Aug 2017', + '28 Aug 2017', + '29 Aug 2017', + '30 Aug 2017', + '31 Aug 2017', + '01 Sep 2017', + '04 Sep 2017', + '05 Sep 2017', + '06 Sep 2017', + '07 Sep 2017', + '08 Sep 2017', + '11 Sep 2017', + '12 Sep 2017', + '13 Sep 2017', + '14 Sep 2017', + '15 Sep 2017', + '18 Sep 2017', + '19 Sep 2017', + '20 Sep 2017', + '21 Sep 2017', + '22 Sep 2017', + '25 Sep 2017', + '26 Sep 2017', + '27 Sep 2017', + '28 Sep 2017', + '29 Sep 2017', + '03 Oct 2017', + '04 Oct 2017', + '05 Oct 2017', + '06 Oct 2017', + '09 Oct 2017', + '10 Oct 2017', + '11 Oct 2017', + '12 Oct 2017', + '13 Oct 2017', + '16 Oct 2017', + '17 Oct 2017', + '18 Oct 2017', + '19 Oct 2017', + '23 Oct 2017', + '24 Oct 2017', + '25 Oct 2017', + '26 Oct 2017', + '27 Oct 2017', + '30 Oct 2017', + '31 Oct 2017', + '01 Nov 2017', + '02 Nov 2017', + '03 Nov 2017', + '06 Nov 2017', + '07 Nov 2017', + '08 Nov 2017', + '09 Nov 2017', + '10 Nov 2017', + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + ], + }, +} + +const githubdata = { + series: [ + { + x: 1352592000000, + a: 306, + d: 33, + y: 13, + }, + { + x: 1353196800000, + a: 77, + d: 41, + y: 11, + }, + { + x: 1353801600000, + a: 97, + d: 52, + y: 13, + }, + { + x: 1354406400000, + a: 349, + d: 231, + y: 27, + }, + { + x: 1355011200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1355616000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1356220800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1356825600000, + a: 93, + d: 16, + y: 12, + }, + { + x: 1357430400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1358035200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1358640000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1359244800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1359849600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1360454400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1361059200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1361664000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1362268800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1362873600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1363478400000, + a: 47, + d: 20, + y: 6, + }, + { + x: 1364083200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1364688000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1365292800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1365897600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1366502400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1367107200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1367712000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1368316800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1368921600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1369526400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1370131200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1370736000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1371340800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1371945600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1372550400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1373155200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1373760000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1374364800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1374969600000, + a: 22, + d: 16, + y: 9, + }, + { + x: 1375574400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1376179200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1376784000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1377388800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1377993600000, + a: 104, + d: 79, + y: 12, + }, + { + x: 1378598400000, + a: 60, + d: 17, + y: 9, + }, + { + x: 1379203200000, + a: 27, + d: 36, + y: 3, + }, + { + x: 1379808000000, + a: 283, + d: 199, + y: 20, + }, + { + x: 1380412800000, + a: 1, + d: 1, + y: 1, + }, + { + x: 1381017600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1381622400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1382227200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1382832000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1383436800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1384041600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1384646400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1385251200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1385856000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1386460800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1387065600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1387670400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1388275200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1388880000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1389484800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1390089600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1390694400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1391299200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1391904000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1392508800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1393113600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1393718400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1394323200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1394928000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1395532800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1396137600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1396742400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1397347200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1397952000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1398556800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1399161600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1399766400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1400371200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1400976000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1401580800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1402185600000, + a: 115, + d: 38, + y: 11, + }, + { + x: 1402790400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1403395200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1404000000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1404604800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1405209600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1405814400000, + a: 598, + d: 209, + y: 34, + }, + { + x: 1406419200000, + a: 195, + d: 119, + y: 18, + }, + { + x: 1407024000000, + a: 174, + d: 54, + y: 13, + }, + { + x: 1407628800000, + a: 1, + d: 1, + y: 1, + }, + { + x: 1408233600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1408838400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1409443200000, + a: 2, + d: 2, + y: 1, + }, + { + x: 1410048000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1410652800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1411257600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1411862400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1412467200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1413072000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1413676800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1414281600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1414886400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1415491200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1416096000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1416700800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1417305600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1417910400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1418515200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1419120000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1419724800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1420329600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1420934400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1421539200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1422144000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1422748800000, + a: 46, + d: 43, + y: 8, + }, + { + x: 1423353600000, + a: 20, + d: 4, + y: 1, + }, + { + x: 1423958400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1424563200000, + a: 18, + d: 11, + y: 4, + }, + { + x: 1425168000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1425772800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1426377600000, + a: 54, + d: 63, + y: 4, + }, + { + x: 1426982400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1427587200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1428192000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1428796800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1429401600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1430006400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1430611200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1431216000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1431820800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1432425600000, + a: 10, + d: 11, + y: 1, + }, + { + x: 1433030400000, + a: 296, + d: 172, + y: 18, + }, + { + x: 1433635200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1434240000000, + a: 10, + d: 13, + y: 2, + }, + { + x: 1434844800000, + a: 20, + d: 16, + y: 3, + }, + { + x: 1435449600000, + a: 24, + d: 10, + y: 3, + }, + { + x: 1436054400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1436659200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1437264000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1437868800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1438473600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1439078400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1439683200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1440288000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1440892800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1441497600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1442102400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1442707200000, + a: 275, + d: 129, + y: 12, + }, + { + x: 1443312000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1443916800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1444521600000, + a: 1213, + d: 837, + y: 5, + }, + { + x: 1445126400000, + a: 299, + d: 54, + y: 3, + }, + { + x: 1445731200000, + a: 30, + d: 33, + y: 1, + }, + { + x: 1446336000000, + a: 202, + d: 185, + y: 18, + }, + { + x: 1446940800000, + a: 554, + d: 292, + y: 39, + }, + { + x: 1447545600000, + a: 9030, + d: 44, + y: 7, + }, + { + x: 1448150400000, + a: 8, + d: 1, + y: 1, + }, + { + x: 1448755200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1449360000000, + a: 18, + d: 12, + y: 5, + }, + { + x: 1449964800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1450569600000, + a: 4, + d: 3, + y: 2, + }, + { + x: 1451174400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1451779200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1452384000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1452988800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1453593600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1454198400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1454803200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1455408000000, + a: 2, + d: 2, + y: 1, + }, + { + x: 1456012800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1456617600000, + a: 32, + d: 43, + y: 1, + }, + { + x: 1457222400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1457827200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1458432000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1459036800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1459641600000, + a: 23, + d: 13, + y: 3, + }, + { + x: 1460246400000, + a: 421, + d: 335, + y: 9, + }, + { + x: 1460851200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1461456000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1462060800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1462665600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1463270400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1463875200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1464480000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1465084800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1465689600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1466294400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1466899200000, + a: 6, + d: 1, + y: 1, + }, + { + x: 1467504000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1468108800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1468713600000, + a: 886, + d: 49, + y: 15, + }, + { + x: 1469318400000, + a: 38, + d: 26, + y: 4, + }, + { + x: 1469923200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1470528000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1471132800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1471737600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1472342400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1472947200000, + a: 2, + d: 2, + y: 1, + }, + { + x: 1473552000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1474156800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1474761600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1475366400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1475971200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1476576000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1477180800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1477785600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1478390400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1478995200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1479600000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1480204800000, + a: 8, + d: 0, + y: 1, + }, + { + x: 1480809600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1481414400000, + a: 1, + d: 1, + y: 1, + }, + { + x: 1482019200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1482624000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1483228800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1483833600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1484438400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1485043200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1485648000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1486252800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1486857600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1487462400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1488067200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1488672000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1489276800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1489881600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1490486400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1491091200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1491696000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1492300800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1492905600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1493510400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1494115200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1494720000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1495324800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1495929600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1496534400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1497139200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1497744000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1498348800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1498953600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1499558400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1500163200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1500768000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1501372800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1501977600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1502582400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1503187200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1503792000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1504396800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1505001600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1505606400000, + a: 2, + d: 2, + y: 2, + }, + { + x: 1506211200000, + a: 49, + d: 10, + y: 4, + }, + { + x: 1506816000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1507420800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1508025600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1508630400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1509235200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1509840000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1510444800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1511049600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1511654400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1512259200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1512864000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1513468800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1514073600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1514678400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1515283200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1515888000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1516492800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1517097600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1517702400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1518307200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1518912000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1519516800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1520121600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1520726400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1521331200000, + a: 768, + d: 2125, + y: 12, + }, + { + x: 1521936000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1522540800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1523145600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1523750400000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1524355200000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1524960000000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1525564800000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1526169600000, + a: 0, + d: 0, + y: 0, + }, + { + x: 1526774400000, + a: 1, + d: 0, + y: 1, + }, + ], +} + +const dataSeries = [ + [ + { + date: '2014-01-01', + value: 20000000, + }, + { + date: '2014-01-02', + value: 10379978, + }, + { + date: '2014-01-03', + value: 30493749, + }, + { + date: '2014-01-04', + value: 10785250, + }, + { + date: '2014-01-05', + value: 33901904, + }, + { + date: '2014-01-06', + value: 11576838, + }, + { + date: '2014-01-07', + value: 14413854, + }, + { + date: '2014-01-08', + value: 15177211, + }, + { + date: '2014-01-09', + value: 16622100, + }, + { + date: '2014-01-10', + value: 17381072, + }, + { + date: '2014-01-11', + value: 18802310, + }, + { + date: '2014-01-12', + value: 15531790, + }, + { + date: '2014-01-13', + value: 15748881, + }, + { + date: '2014-01-14', + value: 18706437, + }, + { + date: '2014-01-15', + value: 19752685, + }, + { + date: '2014-01-16', + value: 21016418, + }, + { + date: '2014-01-17', + value: 25622924, + }, + { + date: '2014-01-18', + value: 25337480, + }, + { + date: '2014-01-19', + value: 22258882, + }, + { + date: '2014-01-20', + value: 23829538, + }, + { + date: '2014-01-21', + value: 24245689, + }, + { + date: '2014-01-22', + value: 26429711, + }, + { + date: '2014-01-23', + value: 26259017, + }, + { + date: '2014-01-24', + value: 25396183, + }, + { + date: '2014-01-25', + value: 23107346, + }, + { + date: '2014-01-26', + value: 28659852, + }, + { + date: '2014-01-27', + value: 25270783, + }, + { + date: '2014-01-28', + value: 26270783, + }, + { + date: '2014-01-29', + value: 27270783, + }, + { + date: '2014-01-30', + value: 28270783, + }, + { + date: '2014-01-31', + value: 29270783, + }, + { + date: '2014-02-01', + value: 30270783, + }, + { + date: '2014-02-02', + value: 31270783, + }, + { + date: '2014-02-03', + value: 32270783, + }, + { + date: '2014-02-04', + value: 33270783, + }, + { + date: '2014-02-05', + value: 28270783, + }, + { + date: '2014-02-06', + value: 27270783, + }, + { + date: '2014-02-07', + value: 35270783, + }, + { + date: '2014-02-08', + value: 34270783, + }, + { + date: '2014-02-09', + value: 28270783, + }, + { + date: '2014-02-10', + value: 35270783, + }, + { + date: '2014-02-11', + value: 36270783, + }, + { + date: '2014-02-12', + value: 34127078, + }, + { + date: '2014-02-13', + value: 33124078, + }, + { + date: '2014-02-14', + value: 36227078, + }, + { + date: '2014-02-15', + value: 37827078, + }, + { + date: '2014-02-16', + value: 36427073, + }, + { + date: '2014-02-17', + value: 37570783, + }, + { + date: '2014-02-18', + value: 38627073, + }, + { + date: '2014-02-19', + value: 37727078, + }, + { + date: '2014-02-20', + value: 38827073, + }, + { + date: '2014-02-21', + value: 40927078, + }, + { + date: '2014-02-22', + value: 41027078, + }, + { + date: '2014-02-23', + value: 42127073, + }, + { + date: '2014-02-24', + value: 43220783, + }, + { + date: '2014-02-25', + value: 44327078, + }, + { + date: '2014-02-26', + value: 40427078, + }, + { + date: '2014-02-27', + value: 41027078, + }, + { + date: '2014-02-28', + value: 45627078, + }, + { + date: '2014-03-01', + value: 44727078, + }, + { + date: '2014-03-02', + value: 44227078, + }, + { + date: '2014-03-03', + value: 45227078, + }, + { + date: '2014-03-04', + value: 46027078, + }, + { + date: '2014-03-05', + value: 46927078, + }, + { + date: '2014-03-06', + value: 47027078, + }, + { + date: '2014-03-07', + value: 46227078, + }, + { + date: '2014-03-08', + value: 47027078, + }, + { + date: '2014-03-09', + value: 48027078, + }, + { + date: '2014-03-10', + value: 47027078, + }, + { + date: '2014-03-11', + value: 47027078, + }, + { + date: '2014-03-12', + value: 48017078, + }, + { + date: '2014-03-13', + value: 48077078, + }, + { + date: '2014-03-14', + value: 48087078, + }, + { + date: '2014-03-15', + value: 48017078, + }, + { + date: '2014-03-16', + value: 48047078, + }, + { + date: '2014-03-17', + value: 48067078, + }, + { + date: '2014-03-18', + value: 48077078, + }, + { + date: '2014-03-19', + value: 48027074, + }, + { + date: '2014-03-20', + value: 48927079, + }, + { + date: '2014-03-21', + value: 48727071, + }, + { + date: '2014-03-22', + value: 48127072, + }, + { + date: '2014-03-23', + value: 48527072, + }, + { + date: '2014-03-24', + value: 48627027, + }, + { + date: '2014-03-25', + value: 48027040, + }, + { + date: '2014-03-26', + value: 48027043, + }, + { + date: '2014-03-27', + value: 48057022, + }, + { + date: '2014-03-28', + value: 49057022, + }, + { + date: '2014-03-29', + value: 50057022, + }, + { + date: '2014-03-30', + value: 51057022, + }, + { + date: '2014-03-31', + value: 52057022, + }, + { + date: '2014-04-01', + value: 53057022, + }, + { + date: '2014-04-02', + value: 54057022, + }, + { + date: '2014-04-03', + value: 52057022, + }, + { + date: '2014-04-04', + value: 55057022, + }, + { + date: '2014-04-05', + value: 58270783, + }, + { + date: '2014-04-06', + value: 56270783, + }, + { + date: '2014-04-07', + value: 55270783, + }, + { + date: '2014-04-08', + value: 58270783, + }, + { + date: '2014-04-09', + value: 59270783, + }, + { + date: '2014-04-10', + value: 60270783, + }, + { + date: '2014-04-11', + value: 61270783, + }, + { + date: '2014-04-12', + value: 62270783, + }, + { + date: '2014-04-13', + value: 63270783, + }, + { + date: '2014-04-14', + value: 64270783, + }, + { + date: '2014-04-15', + value: 65270783, + }, + { + date: '2014-04-16', + value: 66270783, + }, + { + date: '2014-04-17', + value: 67270783, + }, + { + date: '2014-04-18', + value: 68270783, + }, + { + date: '2014-04-19', + value: 69270783, + }, + { + date: '2014-04-20', + value: 70270783, + }, + { + date: '2014-04-21', + value: 71270783, + }, + { + date: '2014-04-22', + value: 72270783, + }, + { + date: '2014-04-23', + value: 73270783, + }, + { + date: '2014-04-24', + value: 74270783, + }, + { + date: '2014-04-25', + value: 75270783, + }, + { + date: '2014-04-26', + value: 76660783, + }, + { + date: '2014-04-27', + value: 77270783, + }, + { + date: '2014-04-28', + value: 78370783, + }, + { + date: '2014-04-29', + value: 79470783, + }, + { + date: '2014-04-30', + value: 80170783, + }, + ], + [ + { + date: '2014-01-01', + value: 150000000, + }, + { + date: '2014-01-02', + value: 160379978, + }, + { + date: '2014-01-03', + value: 170493749, + }, + { + date: '2014-01-04', + value: 160785250, + }, + { + date: '2014-01-05', + value: 167391904, + }, + { + date: '2014-01-06', + value: 161576838, + }, + { + date: '2014-01-07', + value: 161413854, + }, + { + date: '2014-01-08', + value: 152177211, + }, + { + date: '2014-01-09', + value: 140762210, + }, + { + date: '2014-01-10', + value: 144381072, + }, + { + date: '2014-01-11', + value: 154352310, + }, + { + date: '2014-01-12', + value: 165531790, + }, + { + date: '2014-01-13', + value: 175748881, + }, + { + date: '2014-01-14', + value: 187064037, + }, + { + date: '2014-01-15', + value: 197520685, + }, + { + date: '2014-01-16', + value: 210176418, + }, + { + date: '2014-01-17', + value: 196122924, + }, + { + date: '2014-01-18', + value: 207337480, + }, + { + date: '2014-01-19', + value: 200258882, + }, + { + date: '2014-01-20', + value: 186829538, + }, + { + date: '2014-01-21', + value: 192456897, + }, + { + date: '2014-01-22', + value: 204299711, + }, + { + date: '2014-01-23', + value: 192759017, + }, + { + date: '2014-01-24', + value: 203596183, + }, + { + date: '2014-01-25', + value: 208107346, + }, + { + date: '2014-01-26', + value: 196359852, + }, + { + date: '2014-01-27', + value: 192570783, + }, + { + date: '2014-01-28', + value: 177967768, + }, + { + date: '2014-01-29', + value: 190632803, + }, + { + date: '2014-01-30', + value: 203725316, + }, + { + date: '2014-01-31', + value: 218226177, + }, + { + date: '2014-02-01', + value: 210698669, + }, + { + date: '2014-02-02', + value: 217640656, + }, + { + date: '2014-02-03', + value: 216142362, + }, + { + date: '2014-02-04', + value: 201410971, + }, + { + date: '2014-02-05', + value: 196704289, + }, + { + date: '2014-02-06', + value: 190436945, + }, + { + date: '2014-02-07', + value: 178891686, + }, + { + date: '2014-02-08', + value: 171613962, + }, + { + date: '2014-02-09', + value: 157579773, + }, + { + date: '2014-02-10', + value: 158677098, + }, + { + date: '2014-02-11', + value: 147129977, + }, + { + date: '2014-02-12', + value: 151561876, + }, + { + date: '2014-02-13', + value: 151627421, + }, + { + date: '2014-02-14', + value: 143543872, + }, + { + date: '2014-02-15', + value: 136581057, + }, + { + date: '2014-02-16', + value: 135560715, + }, + { + date: '2014-02-17', + value: 122625263, + }, + { + date: '2014-02-18', + value: 112091484, + }, + { + date: '2014-02-19', + value: 98810329, + }, + { + date: '2014-02-20', + value: 99882912, + }, + { + date: '2014-02-21', + value: 94943095, + }, + { + date: '2014-02-22', + value: 104875743, + }, + { + date: '2014-02-23', + value: 116383678, + }, + { + date: '2014-02-24', + value: 125028841, + }, + { + date: '2014-02-25', + value: 123967310, + }, + { + date: '2014-02-26', + value: 133167029, + }, + { + date: '2014-02-27', + value: 128577263, + }, + { + date: '2014-02-28', + value: 115836969, + }, + { + date: '2014-03-01', + value: 119264529, + }, + { + date: '2014-03-02', + value: 109363374, + }, + { + date: '2014-03-03', + value: 113985628, + }, + { + date: '2014-03-04', + value: 114650999, + }, + { + date: '2014-03-05', + value: 110866108, + }, + { + date: '2014-03-06', + value: 96473454, + }, + { + date: '2014-03-07', + value: 104075886, + }, + { + date: '2014-03-08', + value: 103568384, + }, + { + date: '2014-03-09', + value: 101534883, + }, + { + date: '2014-03-10', + value: 115825447, + }, + { + date: '2014-03-11', + value: 126133916, + }, + { + date: '2014-03-12', + value: 116502109, + }, + { + date: '2014-03-13', + value: 130169411, + }, + { + date: '2014-03-14', + value: 124296886, + }, + { + date: '2014-03-15', + value: 126347399, + }, + { + date: '2014-03-16', + value: 131483669, + }, + { + date: '2014-03-17', + value: 142811333, + }, + { + date: '2014-03-18', + value: 129675396, + }, + { + date: '2014-03-19', + value: 115514483, + }, + { + date: '2014-03-20', + value: 117630630, + }, + { + date: '2014-03-21', + value: 122340239, + }, + { + date: '2014-03-22', + value: 132349091, + }, + { + date: '2014-03-23', + value: 125613305, + }, + { + date: '2014-03-24', + value: 135592466, + }, + { + date: '2014-03-25', + value: 123408762, + }, + { + date: '2014-03-26', + value: 111991454, + }, + { + date: '2014-03-27', + value: 116123955, + }, + { + date: '2014-03-28', + value: 112817214, + }, + { + date: '2014-03-29', + value: 113029590, + }, + { + date: '2014-03-30', + value: 108753398, + }, + { + date: '2014-03-31', + value: 99383763, + }, + { + date: '2014-04-01', + value: 100151737, + }, + { + date: '2014-04-02', + value: 94985209, + }, + { + date: '2014-04-03', + value: 82913669, + }, + { + date: '2014-04-04', + value: 78748268, + }, + { + date: '2014-04-05', + value: 63829135, + }, + { + date: '2014-04-06', + value: 78694727, + }, + { + date: '2014-04-07', + value: 80868994, + }, + { + date: '2014-04-08', + value: 93799013, + }, + { + date: '2014-04-09', + value: 99042416, + }, + { + date: '2014-04-10', + value: 97298692, + }, + { + date: '2014-04-11', + value: 83353499, + }, + { + date: '2014-04-12', + value: 71248129, + }, + { + date: '2014-04-13', + value: 75253744, + }, + { + date: '2014-04-14', + value: 68976648, + }, + { + date: '2014-04-15', + value: 71002284, + }, + { + date: '2014-04-16', + value: 75052401, + }, + { + date: '2014-04-17', + value: 83894030, + }, + { + date: '2014-04-18', + value: 90236528, + }, + { + date: '2014-04-19', + value: 99739114, + }, + { + date: '2014-04-20', + value: 96407136, + }, + { + date: '2014-04-21', + value: 108323177, + }, + { + date: '2014-04-22', + value: 101578914, + }, + { + date: '2014-04-23', + value: 115877608, + }, + { + date: '2014-04-24', + value: 112088857, + }, + { + date: '2014-04-25', + value: 112071353, + }, + { + date: '2014-04-26', + value: 101790062, + }, + { + date: '2014-04-27', + value: 115003761, + }, + { + date: '2014-04-28', + value: 120457727, + }, + { + date: '2014-04-29', + value: 118253926, + }, + { + date: '2014-04-30', + value: 117956992, + }, + ], + [ + { + date: '2014-01-01', + value: 50000000, + }, + { + date: '2014-01-02', + value: 60379978, + }, + { + date: '2014-01-03', + value: 40493749, + }, + { + date: '2014-01-04', + value: 60785250, + }, + { + date: '2014-01-05', + value: 67391904, + }, + { + date: '2014-01-06', + value: 61576838, + }, + { + date: '2014-01-07', + value: 61413854, + }, + { + date: '2014-01-08', + value: 82177211, + }, + { + date: '2014-01-09', + value: 103762210, + }, + { + date: '2014-01-10', + value: 84381072, + }, + { + date: '2014-01-11', + value: 54352310, + }, + { + date: '2014-01-12', + value: 65531790, + }, + { + date: '2014-01-13', + value: 75748881, + }, + { + date: '2014-01-14', + value: 47064037, + }, + { + date: '2014-01-15', + value: 67520685, + }, + { + date: '2014-01-16', + value: 60176418, + }, + { + date: '2014-01-17', + value: 66122924, + }, + { + date: '2014-01-18', + value: 57337480, + }, + { + date: '2014-01-19', + value: 100258882, + }, + { + date: '2014-01-20', + value: 46829538, + }, + { + date: '2014-01-21', + value: 92456897, + }, + { + date: '2014-01-22', + value: 94299711, + }, + { + date: '2014-01-23', + value: 62759017, + }, + { + date: '2014-01-24', + value: 103596183, + }, + { + date: '2014-01-25', + value: 108107346, + }, + { + date: '2014-01-26', + value: 66359852, + }, + { + date: '2014-01-27', + value: 62570783, + }, + { + date: '2014-01-28', + value: 77967768, + }, + { + date: '2014-01-29', + value: 60632803, + }, + { + date: '2014-01-30', + value: 103725316, + }, + { + date: '2014-01-31', + value: 98226177, + }, + { + date: '2014-02-01', + value: 60698669, + }, + { + date: '2014-02-02', + value: 67640656, + }, + { + date: '2014-02-03', + value: 66142362, + }, + { + date: '2014-02-04', + value: 101410971, + }, + { + date: '2014-02-05', + value: 66704289, + }, + { + date: '2014-02-06', + value: 60436945, + }, + { + date: '2014-02-07', + value: 78891686, + }, + { + date: '2014-02-08', + value: 71613962, + }, + { + date: '2014-02-09', + value: 107579773, + }, + { + date: '2014-02-10', + value: 58677098, + }, + { + date: '2014-02-11', + value: 87129977, + }, + { + date: '2014-02-12', + value: 51561876, + }, + { + date: '2014-02-13', + value: 51627421, + }, + { + date: '2014-02-14', + value: 83543872, + }, + { + date: '2014-02-15', + value: 66581057, + }, + { + date: '2014-02-16', + value: 65560715, + }, + { + date: '2014-02-17', + value: 62625263, + }, + { + date: '2014-02-18', + value: 92091484, + }, + { + date: '2014-02-19', + value: 48810329, + }, + { + date: '2014-02-20', + value: 49882912, + }, + { + date: '2014-02-21', + value: 44943095, + }, + { + date: '2014-02-22', + value: 104875743, + }, + { + date: '2014-02-23', + value: 96383678, + }, + { + date: '2014-02-24', + value: 105028841, + }, + { + date: '2014-02-25', + value: 63967310, + }, + { + date: '2014-02-26', + value: 63167029, + }, + { + date: '2014-02-27', + value: 68577263, + }, + { + date: '2014-02-28', + value: 95836969, + }, + { + date: '2014-03-01', + value: 99264529, + }, + { + date: '2014-03-02', + value: 109363374, + }, + { + date: '2014-03-03', + value: 93985628, + }, + { + date: '2014-03-04', + value: 94650999, + }, + { + date: '2014-03-05', + value: 90866108, + }, + { + date: '2014-03-06', + value: 46473454, + }, + { + date: '2014-03-07', + value: 84075886, + }, + { + date: '2014-03-08', + value: 103568384, + }, + { + date: '2014-03-09', + value: 101534883, + }, + { + date: '2014-03-10', + value: 95825447, + }, + { + date: '2014-03-11', + value: 66133916, + }, + { + date: '2014-03-12', + value: 96502109, + }, + { + date: '2014-03-13', + value: 80169411, + }, + { + date: '2014-03-14', + value: 84296886, + }, + { + date: '2014-03-15', + value: 86347399, + }, + { + date: '2014-03-16', + value: 31483669, + }, + { + date: '2014-03-17', + value: 82811333, + }, + { + date: '2014-03-18', + value: 89675396, + }, + { + date: '2014-03-19', + value: 95514483, + }, + { + date: '2014-03-20', + value: 97630630, + }, + { + date: '2014-03-21', + value: 62340239, + }, + { + date: '2014-03-22', + value: 62349091, + }, + { + date: '2014-03-23', + value: 65613305, + }, + { + date: '2014-03-24', + value: 65592466, + }, + { + date: '2014-03-25', + value: 63408762, + }, + { + date: '2014-03-26', + value: 91991454, + }, + { + date: '2014-03-27', + value: 96123955, + }, + { + date: '2014-03-28', + value: 92817214, + }, + { + date: '2014-03-29', + value: 93029590, + }, + { + date: '2014-03-30', + value: 108753398, + }, + { + date: '2014-03-31', + value: 49383763, + }, + { + date: '2014-04-01', + value: 100151737, + }, + { + date: '2014-04-02', + value: 44985209, + }, + { + date: '2014-04-03', + value: 52913669, + }, + { + date: '2014-04-04', + value: 48748268, + }, + { + date: '2014-04-05', + value: 23829135, + }, + { + date: '2014-04-06', + value: 58694727, + }, + { + date: '2014-04-07', + value: 50868994, + }, + { + date: '2014-04-08', + value: 43799013, + }, + { + date: '2014-04-09', + value: 4042416, + }, + { + date: '2014-04-10', + value: 47298692, + }, + { + date: '2014-04-11', + value: 53353499, + }, + { + date: '2014-04-12', + value: 71248129, + }, + { + date: '2014-04-13', + value: 75253744, + }, + { + date: '2014-04-14', + value: 68976648, + }, + { + date: '2014-04-15', + value: 71002284, + }, + { + date: '2014-04-16', + value: 75052401, + }, + { + date: '2014-04-17', + value: 83894030, + }, + { + date: '2014-04-18', + value: 50236528, + }, + { + date: '2014-04-19', + value: 59739114, + }, + { + date: '2014-04-20', + value: 56407136, + }, + { + date: '2014-04-21', + value: 108323177, + }, + { + date: '2014-04-22', + value: 101578914, + }, + { + date: '2014-04-23', + value: 95877608, + }, + { + date: '2014-04-24', + value: 62088857, + }, + { + date: '2014-04-25', + value: 92071353, + }, + { + date: '2014-04-26', + value: 81790062, + }, + { + date: '2014-04-27', + value: 105003761, + }, + { + date: '2014-04-28', + value: 100457727, + }, + { + date: '2014-04-29', + value: 98253926, + }, + { + date: '2014-04-30', + value: 67956992, + }, + ], +] + +//Irregular TimeSeries +let ts1 = 1388534400000 +let ts2 = 1388620800000 +let ts3 = 1389052800000 + +let dataSet: number[][][] = [[], [], []] + +for (let i = 0; i < 12; i++) { + ts1 = ts1 + 86400000 + let innerArr = [ts1, dataSeries[2][i].value] + dataSet[0].push(innerArr) +} +for (let i = 0; i < 18; i++) { + ts2 = ts2 + 86400000 + let innerArr = [ts2, dataSeries[1][i].value] + dataSet[1].push(innerArr) +} +for (let i = 0; i < 12; i++) { + ts3 = ts3 + 86400000 + let innerArr = [ts3, dataSeries[0][i].value] + dataSet[2].push(innerArr) +} + +@Component({ + selector: 'app-area', + standalone: true, + imports: [NgApexchartsModule, PageTitleComponent, UIExamplesListComponent], + templateUrl: './area.component.html', + styles: ``, +}) +export class AreaComponent { + credits = credits + constructor() {} + + basicAreaChart: Partial = { + chart: { + toolbar: { + show: false, + }, + height: 380, + type: 'area', + zoom: { + enabled: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 3, + curve: 'straight', + }, + colors: ['#4ecac2'], + series: [ + { + name: 'STOCK ABC', + data: series.monthDataSeries2.prices, + }, + ], + title: { + text: 'Fundamental Analysis of Stocks', + align: 'right', + }, + subtitle: { + text: 'Price Movements', + align: 'left', + }, + labels: series.monthDataSeries2.dates, + xaxis: { + type: 'datetime', + }, + yaxis: { + opposite: false, + }, + legend: { + horizontalAlign: 'left', + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + splineAreaChart: Partial = { + chart: { + toolbar: { + show: false, + }, + height: 380, + type: 'area', + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 3, + curve: 'smooth', + }, + colors: ['#1c84ee', '#22c55e'], + series: [ + { + name: 'Series 1', + data: [92, 88, 98, 72, 92, 100, 122], + }, + { + name: 'Series 2', + data: [102, 98, 108, 82, 102, 110, 134], + }, + ], + legend: { + offsetY: 5, + }, + xaxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'], + }, + tooltip: { + fixed: { + enabled: false, + position: 'topRight', + }, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], + opacity: 0.2, + }, + padding: { + bottom: 5, + }, + }, + } + + datetimeAreaChart: Partial = { + annotations: { + yaxis: [ + { + y: 30, + borderColor: '#999', + label: { + text: 'Support', + style: { + color: '#fff', + background: '#00E396', + }, + }, + }, + ], + xaxis: [ + { + x: new Date('14 Nov 2012').getTime(), + borderColor: '#999', + label: { + text: 'Rally', + style: { + color: '#fff', + background: '#775DD0', + }, + }, + }, + ], + }, + chart: { + type: 'area', + height: 350, + toolbar: { + show: false, + }, + }, + stroke: { + width: 3, + curve: 'smooth', + }, + colors: ['#4ecac2'], + dataLabels: { + enabled: false, + }, + series: [ + { + data: [ + [1327359600000, 30.95], + [1327446000000, 31.34], + [1327532400000, 31.18], + [1327618800000, 31.05], + [1327878000000, 31.0], + [1327964400000, 30.95], + [1328050800000, 31.24], + [1328137200000, 31.29], + [1328223600000, 31.85], + [1328482800000, 31.86], + [1328569200000, 32.28], + [1328655600000, 32.1], + [1328742000000, 32.65], + [1328828400000, 32.21], + [1329087600000, 32.35], + [1329174000000, 32.44], + [1329260400000, 32.46], + [1329346800000, 32.86], + [1329433200000, 32.75], + [1329778800000, 32.54], + [1329865200000, 32.33], + [1329951600000, 32.97], + [1330038000000, 33.41], + [1330297200000, 33.27], + [1330383600000, 33.27], + [1330470000000, 32.89], + [1330556400000, 33.1], + [1330642800000, 33.73], + [1330902000000, 33.22], + [1330988400000, 31.99], + [1331074800000, 32.41], + [1331161200000, 33.05], + [1331247600000, 33.64], + [1331506800000, 33.56], + [1331593200000, 34.22], + [1331679600000, 33.77], + [1331766000000, 34.17], + [1331852400000, 33.82], + [1332111600000, 34.51], + [1332198000000, 33.16], + [1332284400000, 33.56], + [1332370800000, 33.71], + [1332457200000, 33.81], + [1332712800000, 34.4], + [1332799200000, 34.63], + [1332885600000, 34.46], + [1332972000000, 34.48], + [1333058400000, 34.31], + [1333317600000, 34.7], + [1333404000000, 34.31], + [1333490400000, 33.46], + [1333576800000, 33.59], + [1333922400000, 33.22], + [1334008800000, 32.61], + [1334095200000, 33.01], + [1334181600000, 33.55], + [1334268000000, 33.18], + [1334527200000, 32.84], + [1334613600000, 33.84], + [1334700000000, 33.39], + [1334786400000, 32.91], + [1334872800000, 33.06], + [1335132000000, 32.62], + [1335218400000, 32.4], + [1335304800000, 33.13], + [1335391200000, 33.26], + [1335477600000, 33.58], + [1335736800000, 33.55], + [1335823200000, 33.77], + [1335909600000, 33.76], + [1335996000000, 33.32], + [1336082400000, 32.61], + [1336341600000, 32.52], + [1336428000000, 32.67], + [1336514400000, 32.52], + [1336600800000, 31.92], + [1336687200000, 32.2], + [1336946400000, 32.23], + [1337032800000, 32.33], + [1337119200000, 32.36], + [1337205600000, 32.01], + [1337292000000, 31.31], + [1337551200000, 32.01], + [1337637600000, 32.01], + [1337724000000, 32.18], + [1337810400000, 31.54], + [1337896800000, 31.6], + [1338242400000, 32.05], + [1338328800000, 31.29], + [1338415200000, 31.05], + [1338501600000, 29.82], + [1338760800000, 30.31], + [1338847200000, 30.7], + [1338933600000, 31.69], + [1339020000000, 31.32], + [1339106400000, 31.65], + [1339365600000, 31.13], + [1339452000000, 31.77], + [1339538400000, 31.79], + [1339624800000, 31.67], + [1339711200000, 32.39], + [1339970400000, 32.63], + [1340056800000, 32.89], + [1340143200000, 31.99], + [1340229600000, 31.23], + [1340316000000, 31.57], + [1340575200000, 30.84], + [1340661600000, 31.07], + [1340748000000, 31.41], + [1340834400000, 31.17], + [1340920800000, 32.37], + [1341180000000, 32.19], + [1341266400000, 32.51], + [1341439200000, 32.53], + [1341525600000, 31.37], + [1341784800000, 30.43], + [1341871200000, 30.44], + [1341957600000, 30.2], + [1342044000000, 30.14], + [1342130400000, 30.65], + [1342389600000, 30.4], + [1342476000000, 30.65], + [1342562400000, 31.43], + [1342648800000, 31.89], + [1342735200000, 31.38], + [1342994400000, 30.64], + [1343080800000, 30.02], + [1343167200000, 30.33], + [1343253600000, 30.95], + [1343340000000, 31.89], + [1343599200000, 31.01], + [1343685600000, 30.88], + [1343772000000, 30.69], + [1343858400000, 30.58], + [1343944800000, 32.02], + [1344204000000, 32.14], + [1344290400000, 32.37], + [1344376800000, 32.51], + [1344463200000, 32.65], + [1344549600000, 32.64], + [1344808800000, 32.27], + [1344895200000, 32.1], + [1344981600000, 32.91], + [1345068000000, 33.65], + [1345154400000, 33.8], + [1345413600000, 33.92], + [1345500000000, 33.75], + [1345586400000, 33.84], + [1345672800000, 33.5], + [1345759200000, 32.26], + [1346018400000, 32.32], + [1346104800000, 32.06], + [1346191200000, 31.96], + [1346277600000, 31.46], + [1346364000000, 31.27], + [1346709600000, 31.43], + [1346796000000, 32.26], + [1346882400000, 32.79], + [1346968800000, 32.46], + [1347228000000, 32.13], + [1347314400000, 32.43], + [1347400800000, 32.42], + [1347487200000, 32.81], + [1347573600000, 33.34], + [1347832800000, 33.41], + [1347919200000, 32.57], + [1348005600000, 33.12], + [1348092000000, 34.53], + [1348178400000, 33.83], + [1348437600000, 33.41], + [1348524000000, 32.9], + [1348610400000, 32.53], + [1348696800000, 32.8], + [1348783200000, 32.44], + [1349042400000, 32.62], + [1349128800000, 32.57], + [1349215200000, 32.6], + [1349301600000, 32.68], + [1349388000000, 32.47], + [1349647200000, 32.23], + [1349733600000, 31.68], + [1349820000000, 31.51], + [1349906400000, 31.78], + [1349992800000, 31.94], + [1350252000000, 32.33], + [1350338400000, 33.24], + [1350424800000, 33.44], + [1350511200000, 33.48], + [1350597600000, 33.24], + [1350856800000, 33.49], + [1350943200000, 33.31], + [1351029600000, 33.36], + [1351116000000, 33.4], + [1351202400000, 34.01], + [1351638000000, 34.02], + [1351724400000, 34.36], + [1351810800000, 34.39], + [1352070000000, 34.24], + [1352156400000, 34.39], + [1352242800000, 33.47], + [1352329200000, 32.98], + [1352415600000, 32.9], + [1352674800000, 32.7], + [1352761200000, 32.54], + [1352847600000, 32.23], + [1352934000000, 32.64], + [1353020400000, 32.65], + [1353279600000, 32.92], + [1353366000000, 32.64], + [1353452400000, 32.84], + [1353625200000, 33.4], + [1353884400000, 33.3], + [1353970800000, 33.18], + [1354057200000, 33.88], + [1354143600000, 34.09], + [1354230000000, 34.61], + [1354489200000, 34.7], + [1354575600000, 35.3], + [1354662000000, 35.4], + [1354748400000, 35.14], + [1354834800000, 35.48], + [1355094000000, 35.75], + [1355180400000, 35.54], + [1355266800000, 35.96], + [1355353200000, 35.53], + [1355439600000, 37.56], + [1355698800000, 37.42], + [1355785200000, 37.49], + [1355871600000, 38.09], + [1355958000000, 37.87], + [1356044400000, 37.71], + [1356303600000, 37.53], + [1356476400000, 37.55], + [1356562800000, 37.3], + [1356649200000, 36.9], + [1356908400000, 37.68], + [1357081200000, 38.34], + [1357167600000, 37.75], + [1357254000000, 38.13], + [1357513200000, 37.94], + [1357599600000, 38.14], + [1357686000000, 38.66], + [1357772400000, 38.62], + [1357858800000, 38.09], + [1358118000000, 38.16], + [1358204400000, 38.15], + [1358290800000, 37.88], + [1358377200000, 37.73], + [1358463600000, 37.98], + [1358809200000, 37.95], + [1358895600000, 38.25], + [1358982000000, 38.1], + [1359068400000, 38.32], + [1359327600000, 38.24], + [1359414000000, 38.52], + [1359500400000, 37.94], + [1359586800000, 37.83], + [1359673200000, 38.34], + [1359932400000, 38.1], + [1360018800000, 38.51], + [1360105200000, 38.4], + [1360191600000, 38.07], + [1360278000000, 39.12], + [1360537200000, 38.64], + [1360623600000, 38.89], + [1360710000000, 38.81], + [1360796400000, 38.61], + [1360882800000, 38.63], + [1361228400000, 38.99], + [1361314800000, 38.77], + [1361401200000, 38.34], + [1361487600000, 38.55], + [1361746800000, 38.11], + [1361833200000, 38.59], + [1361919600000, 39.6], + ], + }, + ], + markers: { + size: 0, + }, + xaxis: { + type: 'datetime', + min: new Date('01 Mar 2012').getTime(), + tickAmount: 6, + }, + tooltip: { + x: { + format: 'dd MMM yyyy', + }, + }, + fill: { + type: 'gradient', + gradient: { + shadeIntensity: 1, + opacityFrom: 0.7, + opacityTo: 0.9, + stops: [0, 100], + }, + }, + } + + negativeAreaChart: Partial = { + chart: { + height: 380, + type: 'area', + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 2, + curve: 'straight', + }, + colors: ['#0acf97', '#ffbc00'], + series: [ + { + name: 'North', + data: [ + { + x: 1996, + y: 396, + }, + { + x: 1997, + y: 334, + }, + { + x: 1998, + y: 242, + }, + { + x: 1999, + y: 356, + }, + { + x: 2000, + y: 351, + }, + { + x: 2001, + y: 334, + }, + { + x: 2002, + y: 392, + }, + { + x: 2003, + y: 317, + }, + { + x: 2004, + y: 320, + }, + { + x: 2005, + y: 335, + }, + { + x: 2006, + y: 365, + }, + { + x: 2007, + y: 376, + }, + { + x: 2008, + y: 334, + }, + { + x: 2009, + y: 365, + }, + { + x: 2010, + y: 388, + }, + { + x: 2011, + y: 398, + }, + { + x: 2012, + y: 354, + }, + { + x: 2013, + y: 368, + }, + { + x: 2014, + y: 398, + }, + { + x: 2015, + y: 356, + }, + ], + }, + { + name: 'South', + data: [ + { + x: 1996, + y: 162, + }, + { + x: 1997, + y: 90, + }, + { + x: 1998, + y: 50, + }, + { + x: 1999, + y: 77, + }, + { + x: 2000, + y: 35, + }, + { + x: 2001, + y: -45, + }, + { + x: 2002, + y: -88, + }, + { + x: 2003, + y: -120, + }, + { + x: 2004, + y: -156, + }, + { + x: 2005, + y: -123, + }, + { + x: 2006, + y: -88, + }, + { + x: 2007, + y: -66, + }, + { + x: 2008, + y: -45, + }, + { + x: 2009, + y: -29, + }, + { + x: 2010, + y: -45, + }, + { + x: 2011, + y: -88, + }, + { + x: 2012, + y: -132, + }, + { + x: 2013, + y: -146, + }, + { + x: 2014, + y: -169, + }, + { + x: 2015, + y: -184, + }, + ], + }, + ], + xaxis: { + type: 'datetime', + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + }, + yaxis: { + tickAmount: 4, + floating: false, + + labels: { + style: { + colors: '#8e8da4', + }, + offsetY: -7, + offsetX: 0, + }, + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + }, + fill: { + opacity: 0.5, + }, + tooltip: { + x: { + format: 'yyyy', + }, + fixed: { + enabled: false, + position: 'topRight', + }, + }, + legend: { + offsetY: 5, + }, + grid: { + yaxis: { + lines: { + offsetX: -30, + }, + }, + padding: { + left: 0, + bottom: 10, + }, + borderColor: '#f1f3fa', + }, + } + + /** + * Negative Months Values Chart + */ + + githubmMonthAreaChart: Partial = { + chart: { + height: 175, + type: 'area', + toolbar: { + autoSelected: 'selection', + }, + brush: { + enabled: true, + target: 'chartyear', + }, + selection: { + enabled: true, + xaxis: { + min: new Date('05 Jan 2014').getTime(), + max: new Date('04 Jan 2015').getTime(), + }, + }, + }, + colors: ['#4ecac2'], + dataLabels: { + enabled: false, + }, + stroke: { + width: 0, + curve: 'smooth', + }, + + series: [ + { + name: 'commits', + data: githubdata.series, + }, + ], + fill: { + opacity: 1, + type: 'solid', + }, + legend: { + position: 'top', + horizontalAlign: 'left', + }, + xaxis: { + type: 'datetime', + }, + } + + /** + * Negative Years Values Chart + */ + + githubmYearAreaChart: Partial = { + chart: { + id: 'chartyear', + type: 'area', + height: 200, + toolbar: { + show: false, + autoSelected: 'pan', + }, + }, + colors: ['#1c84ee'], + stroke: { + width: 0, + curve: 'smooth', + }, + dataLabels: { + enabled: false, + }, + fill: { + opacity: 1, + type: 'solid', + }, + series: [ + { + name: 'commits', + data: githubdata.series, + }, + ], + yaxis: { + tickAmount: 10, + labels: { + show: false, + }, + }, + xaxis: { + type: 'datetime', + }, + } + + generateDayWiseTimeSeries( + baseval: number, + count: number, + yrange: { max: number; min: number } + ) { + var i = 0 + var series = [] + while (i < count) { + var x = baseval + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + + series.push([x, y]) + baseval += 86400000 + i++ + } + return series + } + + stackedAreaChart: Partial = { + chart: { + height: 422, + type: 'area', + stacked: true, + events: { + selection: function (chart, e) {}, + }, + toolbar: { + show: false, + }, + }, + colors: ['#1c84ee', '#7f56da', '#4ecac2'], + dataLabels: { + enabled: false, + }, + stroke: { + width: 2, + curve: 'smooth', + }, + + series: [ + { + name: 'South', + data: this.generateDayWiseTimeSeries( + new Date('12 Apr ' + currentYear).getTime(), + 20, + { + min: 40, + max: 80, + } + ), + }, + { + name: 'North', + data: this.generateDayWiseTimeSeries( + new Date('12 Apr ' + currentYear).getTime(), + 20, + { + min: 30, + max: 50, + } + ), + }, + + { + name: 'Central', + data: this.generateDayWiseTimeSeries( + new Date('12 Apr ' + currentYear).getTime(), + 20, + { + min: 20, + max: 30, + } + ), + }, + ], + fill: { + gradient: { + opacityFrom: 0.6, + opacityTo: 0.8, + }, + }, + legend: { + position: 'top', + horizontalAlign: 'left', + }, + xaxis: { + type: 'datetime', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + }, + }, + ], + } + + timeSeriesChart: Partial = { + chart: { + type: 'area', + stacked: false, + height: 380, + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + plotOptions: { + line: {}, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + name: 'Product A', + data: dataSet[0], + }, + { + name: 'Product B', + data: dataSet[1], + }, + { + name: 'Product C', + data: dataSet[2], + }, + ], + colors: ['#1c84ee', '#7f56da', '#ef5f5f'], + markers: { + size: 0, + }, + stroke: { + width: 3, + }, + fill: { + gradient: { + shadeIntensity: 1, + inverseColors: false, + opacityFrom: 0.45, + opacityTo: 0.05, + stops: [20, 100, 100, 100], + }, + }, + yaxis: { + labels: { + style: { + colors: ['#8e8da4'], + }, + offsetX: 0, + formatter: function (val) { + return (val / 1000000).toFixed(0) + }, + }, + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + }, + xaxis: { + type: 'datetime', + tickAmount: 8, + labels: { + formatter: function (val) { + return moment(new Date(val)).format('DD MMM YYYY') + }, + }, + }, + title: { + text: 'Irregular Data in Time Series', + align: 'left', + offsetX: 0, + }, + tooltip: { + shared: true, + y: { + formatter: function (val) { + return (val / 1000000).toFixed(0) + ' points' + }, + }, + }, + legend: { + position: 'top', + horizontalAlign: 'center', + offsetX: -10, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + nullvaluesChart: Partial = { + chart: { + toolbar: { + show: false, + }, + height: 380, + type: 'area', + animations: { + enabled: false, + }, + zoom: { + enabled: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + curve: 'straight', + }, + colors: ['#ff6c2f'], + series: [ + { + name: 'Network', + data: [ + { + x: 'Dec 23 2022', + y: null, + }, + { + x: 'Dec 24 2022', + y: 44, + }, + { + x: 'Dec 25 2022', + y: 31, + }, + { + x: 'Dec 26 2022', + y: 38, + }, + { + x: 'Dec 27 2022', + y: null, + }, + { + x: 'Dec 28 2022', + y: 32, + }, + { + x: 'Dec 29 2022', + y: 55, + }, + { + x: 'Dec 30 2022', + y: 51, + }, + { + x: 'Dec 31 2022', + y: 67, + }, + { + x: 'Jan 01 ' + currentYear, + y: 22, + }, + { + x: 'Jan 02 ' + currentYear, + y: 34, + }, + { + x: 'Jan 03 ' + currentYear, + y: null, + }, + { + x: 'Jan 04 ' + currentYear, + y: null, + }, + { + x: 'Jan 05 ' + currentYear, + y: 11, + }, + { + x: 'Jan 06 ' + currentYear, + y: 4, + }, + { + x: 'Jan 07 ' + currentYear, + y: 15, + }, + { + x: 'Jan 08 ' + currentYear, + y: null, + }, + { + x: 'Jan 09 ' + currentYear, + y: 9, + }, + { + x: 'Jan 10 ' + currentYear, + y: 34, + }, + { + x: 'Jan 11 ' + currentYear, + y: null, + }, + { + x: 'Jan 12 ' + currentYear, + y: null, + }, + { + x: 'Jan 13 ' + currentYear, + y: 13, + }, + { + x: 'Jan 14 ' + currentYear, + y: null, + }, + ], + }, + ], + fill: { + opacity: 0.8, + gradient: {}, + pattern: { + style: ['verticalLines', 'horizontalLines'], + width: 5, + }, + }, + markers: { + size: 5, + hover: { + size: 9, + }, + }, + title: { + text: 'Network Monitoring', + }, + tooltip: { + intersect: true, + shared: false, + }, + // theme: { + // palette: 'palette1', + // }, + xaxis: { + type: 'datetime', + }, + yaxis: { + title: { + text: 'Bytes Received', + }, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + }, + }, + ], + } +} diff --git a/apiferia/src/app/views/charts/bar/bar.component.html b/apiferia/src/app/views/charts/bar/bar.component.html new file mode 100644 index 00000000..36c05d92 --- /dev/null +++ b/apiferia/src/app/views/charts/bar/bar.component.html @@ -0,0 +1,272 @@ + + +
    +
    +
    +
    +
    Overview
    +

    + Find the TS file for the following chart at: + src/app/views/charts/bar.component.ts +

    +
    +
    + +
    +
    +
    + Basic Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Grouped Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Stacked Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + 100% Stacked Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Bar with Negative Values# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Reversed Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Bar with Image Fill# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Custom DataLabels Bar# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Patterned Bar Chart# +
    + +
    + + +
    +
    +
    + +
    +
    +
    + Bar with Markers# +
    + +
    + + +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/bar/bar.component.spec.ts b/apiferia/src/app/views/charts/bar/bar.component.spec.ts new file mode 100644 index 00000000..62c3e804 --- /dev/null +++ b/apiferia/src/app/views/charts/bar/bar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BarComponent } from './bar.component' + +describe('BarComponent', () => { + let component: BarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/bar/bar.component.ts b/apiferia/src/app/views/charts/bar/bar.component.ts new file mode 100644 index 00000000..950052c8 --- /dev/null +++ b/apiferia/src/app/views/charts/bar/bar.component.ts @@ -0,0 +1,784 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-bar', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './bar.component.html', + styles: ``, +}) +export class BarComponent { + barChart: Partial = { + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + data: [455, 435, 410, 480, 530, 575, 685, 1345, 1165, 1075], + }, + ], + colors: ['#1c84ee'], + xaxis: { + categories: [ + 'South Korea', + 'Canada', + 'United Kingdom', + 'Netherlands', + 'Italy', + 'France', + 'Japan', + 'United States', + 'China', + 'Germany', + ], + }, + states: { + hover: {}, + }, + grid: { + borderColor: '#f1f3fa', + }, + } + + // Group bar chart + groupedChart: Partial = { + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + dataLabels: { + position: 'top', + }, + }, + }, + dataLabels: { + enabled: true, + offsetX: -6, + style: { + fontSize: '12px', + colors: ['#fff'], + }, + }, + colors: ['#1c84ee', '#4ecac2'], + stroke: { + show: true, + width: 1, + colors: ['#fff'], + }, + series: [ + { + name: 'Series 1', + data: [51, 30, 31, 50, 11, 42, 30], + }, + { + name: 'Series 2', + data: [46, 57, 43, 66, 24, 45, 23], + }, + ], + xaxis: { + categories: [2016, 2017, 2018, 2019, 2021, 2022, 2023], + }, + legend: { + offsetY: 5, + }, + states: { + hover: {}, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } + + // Group bar chart + stackedChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + stroke: { + show: false, + }, + series: [ + { + name: 'Marine Sprite', + data: [30, 17, 24, 37, 30, 29, 15], + }, + { + name: 'Striking Calf', + data: [11, 9, 7, 10, 8, 11, 6], + }, + { + name: 'Tank Picture', + data: [14, 19, 13, 11, 17, 13, 22], + }, + { + name: 'Bucket Slope', + data: [55, 34, 35, 54, 15, 45, 34], + }, + { + name: 'Reborn Kid', + data: [46, 57, 43, 39, 24, 45, 23], + }, + ], + xaxis: { + categories: [2016, 2017, 2018, 2019, 2021, 2022, 2023], + labels: { + formatter: function (val) { + return val + 'K' + }, + }, + }, + yaxis: { + title: { + text: undefined, + }, + }, + colors: ['#1c84ee', '#4ecac2', '#22c55e', '#f9b931', '#ff6c2f'], + tooltip: { + y: { + formatter: function (val) { + return val + 'K' + }, + }, + }, + fill: { + opacity: 1, + }, + states: { + hover: {}, + }, + legend: { + position: 'top', + horizontalAlign: 'center', + offsetY: 10, + }, + grid: { + borderColor: '#f1f3fa', + }, + } + + // full stacked bar chart + fullstackedChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + stackType: '100%', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + stroke: { + width: 1, + colors: ['#fff'], + }, + series: [ + { + name: 'Marine Sprite', + data: [30, 17, 24, 37, 30, 29, 15], + }, + { + name: 'Striking Calf', + data: [11, 9, 7, 10, 8, 11, 6], + }, + { + name: 'Tank Picture', + data: [14, 19, 13, 11, 17, 13, 22], + }, + { + name: 'Bucket Slope', + data: [55, 34, 35, 54, 15, 45, 34], + }, + { + name: 'Reborn Kid', + data: [46, 57, 43, 39, 24, 45, 23], + }, + ], + xaxis: { + categories: [2008, 2009, 2010, 2011, 2012, 2013, 2014], + }, + colors: ['#1c84ee', '#4ecac2', '#22c55e', '#f9b931', '#ff6c2f'], + tooltip: { + y: { + formatter: function (val) { + return val + 'K' + }, + }, + }, + fill: { + opacity: 1, + }, + states: { + hover: { + filter: { + type: 'none', + }, + }, + }, + legend: { + position: 'top', + horizontalAlign: 'center', + offsetY: 10, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + top: 0, + }, + }, + } + + // Negative Bar Chart + + negativeChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + toolbar: { + show: false, + }, + }, + colors: ['#1c84ee', '#4ecac2'], + plotOptions: { + bar: { + horizontal: true, + barHeight: '80%', + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 1, + colors: ['#fff'], + }, + series: [ + { + name: 'Males', + data: [ + 0.75, 0.85, 0.96, 1.08, 1.7, 2.3, 3.1, 4.0, 4.1, 4.4, 4.2, 4.5, 4.3, + 4.4, 4.7, 4.1, 3.7, 3.2, + ], + }, + { + name: 'Females', + data: [ + -0.75, -0.85, -0.86, -0.98, -1.2, -2.0, -2.65, -3.5, -3.76, -4.02, + -4.1, -4.2, -3.9, -3.8, -3.9, -3.2, -2.9, -2.6, + ], + }, + ], + yaxis: { + min: -5, + max: 5, + title: { + // text: 'Age', + }, + }, + tooltip: { + shared: false, + x: { + formatter: function (val) { + return val.toString() + }, + }, + y: { + formatter: function (val) { + return Math.abs(val) + '%' + }, + }, + }, + xaxis: { + categories: [ + '90+', + '85-89', + '80-84', + '75-79', + '70-74', + '65-69', + '60-64', + '55-59', + '50-54', + '45-49', + '40-44', + '35-39', + '30-34', + '25-29', + '20-24', + '15-19', + '10-14', + '0-9', + ], + title: { + text: 'Percent', + }, + labels: { + formatter: function (val) { + return Math.abs(Math.round(Number(val))) + '%' + }, + }, + }, + legend: { + offsetY: 7, + }, + } + + reversedChart: Partial = { + series: [ + { + data: [380, 400, 418, 440, 500, 530, 580], + }, + ], + chart: { + type: 'bar', + height: 380, + toolbar: { + show: false, + }, + }, + annotations: { + xaxis: [ + { + x: 500, + borderColor: '#f9b931', + label: { + borderColor: '#f9b931', + style: { + color: '#fff', + background: '#f9b931', + }, + text: 'X annotation', + }, + }, + ], + yaxis: [ + { + y: 'July', + y2: 'September', + label: { + text: 'Y annotation', + }, + }, + ], + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + dataLabels: { + enabled: true, + }, + xaxis: { + categories: ['Jul', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec', 'Jan'], + }, + colors: ['#f9b931'], + grid: { + xaxis: { + lines: { + show: true, + }, + }, + }, + yaxis: { + reversed: true, + axisTicks: { + show: true, + }, + }, + } + + imagefillChart: Partial = { + chart: { + height: 450, + type: 'bar', + toolbar: { + show: false, + }, + animations: { + enabled: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + barHeight: '100%', + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + colors: ['#fff'], + width: 0.2, + }, + series: [ + { + name: 'coins', + data: [ + 2, 4, 3, 4, 3, 5, 5, 6.5, 6, 5, 4, 5, 8, 7, 7, 8, 8, 10, 9, 9, 12, 12, + 11, 12, 13, 14, 16, 14, 15, 17, 19, 21, + ], + }, + ], + yaxis: { + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + labels: { + show: false, + }, + title: { + text: 'Weight', + }, + }, + grid: { + position: 'back', + borderColor: '#f1f3fa', + }, + fill: { + type: 'image', + opacity: 0.87, + image: { + src: ['../../../assets/images/small/img-4.jpg'], + width: 466, + height: 406, + }, + }, + } + + datalablesChart: Partial = { + chart: { + height: 450, + type: 'bar', + }, + plotOptions: { + bar: { + barHeight: '100%', + distributed: true, + horizontal: true, + dataLabels: { + position: 'bottom', + }, + }, + }, + colors: [ + '#1c84ee', + '#53389f', + '#7f56da', + '#ff86c8', + '#ef5f5f', + '#ff6c2f', + '#f9b931', + '#22c55e', + '#040505', + '#4ecac2', + ], + dataLabels: { + enabled: true, + textAnchor: 'start', + style: { + colors: ['#fff'], + }, + formatter: function (val, opt) { + return opt.w.globals.labels[opt.dataPointIndex] + ': ' + val + }, + offsetX: 0, + dropShadow: { + enabled: false, + }, + }, + series: [ + { + data: [400, 430, 448, 470, 540, 580, 690, 1100, 1200, 1380], + }, + ], + stroke: { + width: 0, + colors: ['#fff'], + }, + xaxis: { + categories: [ + 'South Korea', + 'Canada', + 'United Kingdom', + 'Netherlands', + 'Italy', + 'France', + 'Japan', + 'United States', + 'China', + 'India', + ], + axisBorder: { + show: false, + }, + }, + yaxis: { + labels: { + show: false, + }, + }, + grid: { + borderColor: '#f1f3fa', + }, + + tooltip: { + theme: 'dark', + x: { + show: false, + }, + y: { + title: { + formatter: function () { + return '' + }, + }, + }, + }, + } + + patternChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + barHeight: '60%', + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 0, + }, + series: [ + { + name: 'Marine Sprite', + data: [44, 55, 41, 37, 22, 43, 21], + }, + { + name: 'Striking Calf', + data: [53, 32, 33, 52, 13, 43, 32], + }, + { + name: 'Tank Picture', + data: [12, 17, 11, 9, 15, 11, 20], + }, + { + name: 'Bucket Slope', + data: [9, 7, 5, 8, 6, 9, 4], + }, + ], + xaxis: { + categories: [2008, 2009, 2010, 2011, 2012, 2013, 2014], + }, + yaxis: { + title: { + text: undefined, + }, + }, + tooltip: { + shared: false, + y: { + formatter: function (val) { + return val + 'K' + }, + }, + }, + colors: ['#1c84ee', '#22c55e', '#040505', '#4ecac2'], + fill: { + type: 'pattern', + opacity: 1, + pattern: { + style: ['circles', 'slantedLines', 'verticalLines', 'horizontalLines'], // string or array of strings + }, + }, + states: { + hover: { + filter: { type: 'none' }, + }, + }, + legend: { + position: 'right', + }, + grid: { + borderColor: '#f1f3fa', + }, + responsive: [ + { + breakpoint: 600, + options: { + legend: { + show: false, + }, + }, + }, + ], + } + + markerChart: Partial = { + series: [ + { + name: 'Actual', + data: [ + { + x: '2017', + y: 12, + goals: [ + { + name: 'Expected', + value: 14, + strokeWidth: 2, + strokeDashArray: 2, + strokeColor: '#22c55e', + }, + ], + }, + { + x: '2018', + y: 44, + goals: [ + { + name: 'Expected', + value: 54, + strokeWidth: 5, + strokeHeight: 10, + strokeColor: '#22c55e', + }, + ], + }, + { + x: '2019', + y: 54, + goals: [ + { + name: 'Expected', + value: 52, + strokeWidth: 10, + strokeHeight: 0, + strokeLineCap: 'round', + strokeColor: '#22c55e', + }, + ], + }, + { + x: '2020', + y: 66, + goals: [ + { + name: 'Expected', + value: 61, + strokeWidth: 10, + strokeHeight: 0, + strokeLineCap: 'round', + strokeColor: '#22c55e', + }, + ], + }, + { + x: '2021', + y: 81, + goals: [ + { + name: 'Expected', + value: 66, + strokeWidth: 10, + strokeHeight: 0, + strokeLineCap: 'round', + strokeColor: '#22c55e1', + }, + ], + }, + { + x: '2022', + y: 67, + goals: [ + { + name: 'Expected', + value: 70, + strokeWidth: 5, + strokeHeight: 10, + strokeColor: '#22c55e', + }, + ], + }, + ], + }, + ], + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + colors: ['#f9b931', '#22c55e'], + dataLabels: {}, + legend: { + show: true, + showForSingleSeries: true, + customLegendItems: ['Actual', 'Expected'], + }, + xaxis: { + axisBorder: { + show: false, + }, + }, + } +} diff --git a/apiferia/src/app/views/charts/boxplot/boxplot.component.html b/apiferia/src/app/views/charts/boxplot/boxplot.component.html new file mode 100644 index 00000000..0adbfb17 --- /dev/null +++ b/apiferia/src/app/views/charts/boxplot/boxplot.component.html @@ -0,0 +1,68 @@ + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/boxplot.component.ts +

    +
    +
    + +
    +
    +

    Basic Boxplot

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

    Scatter Boxplot

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/boxplot/boxplot.component.spec.ts b/apiferia/src/app/views/charts/boxplot/boxplot.component.spec.ts new file mode 100644 index 00000000..22697f33 --- /dev/null +++ b/apiferia/src/app/views/charts/boxplot/boxplot.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BoxplotComponent } from './boxplot.component' + +describe('BoxplotComponent', () => { + let component: BoxplotComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BoxplotComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BoxplotComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/boxplot/boxplot.component.ts b/apiferia/src/app/views/charts/boxplot/boxplot.component.ts new file mode 100644 index 00000000..5eee06d4 --- /dev/null +++ b/apiferia/src/app/views/charts/boxplot/boxplot.component.ts @@ -0,0 +1,165 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-boxplot', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './boxplot.component.html', + styles: ``, +}) +export class BoxplotComponent { + boxplotChart: Partial = { + series: [ + { + type: 'boxPlot', + data: [ + { + x: 'Jan 2015', + y: [54, 66, 69, 75, 88], + }, + { + x: 'Jan 2016', + y: [43, 65, 69, 76, 81], + }, + { + x: 'Jan 2017', + y: [31, 39, 45, 51, 59], + }, + { + x: 'Jan 2018', + y: [39, 46, 55, 65, 71], + }, + { + x: 'Jan 2019', + y: [29, 31, 35, 39, 44], + }, + { + x: 'Jan 2020', + y: [41, 49, 58, 61, 67], + }, + { + x: 'Jan 2021', + y: [54, 59, 66, 71, 88], + }, + ], + }, + ], + chart: { + type: 'boxPlot', + height: 350, + toolbar: { + show: false, + }, + }, + plotOptions: { + boxPlot: { + colors: { + upper: '#1c84ee', + lower: '#22c55e', + }, + }, + }, + stroke: { + colors: ['#a1a9b1'], + }, + } + + scatterChart: Partial = { + series: [ + { + name: 'Box', + type: 'boxPlot', + data: [ + { + x: new Date('2017-01-01').getTime(), + y: [54, 66, 69, 75, 88], + }, + { + x: new Date('2018-01-01').getTime(), + y: [43, 65, 69, 76, 81], + }, + { + x: new Date('2019-01-01').getTime(), + y: [31, 39, 45, 51, 59], + }, + { + x: new Date('2020-01-01').getTime(), + y: [39, 46, 55, 65, 71], + }, + { + x: new Date('2021-01-01').getTime(), + y: [29, 31, 35, 39, 44], + }, + ], + }, + { + name: 'Outliers', + type: 'scatter', + data: [ + { + x: new Date('2017-01-01').getTime(), + y: 32, + }, + { + x: new Date('2018-01-01').getTime(), + y: 25, + }, + { + x: new Date('2019-01-01').getTime(), + y: 64, + }, + { + x: new Date('2020-01-01').getTime(), + y: 27, + }, + { + x: new Date('2020-01-01').getTime(), + y: 78, + }, + { + x: new Date('2021-01-01').getTime(), + y: 15, + }, + ], + }, + ], + chart: { + type: 'boxPlot', + height: 350, + toolbar: { + show: false, + }, + }, + colors: ['#1c84ee', '#22c55e'], + stroke: { + colors: ['#a1a9b1'], + }, + legend: { + offsetY: 10, + }, + xaxis: { + type: 'datetime', + }, + grid: { + padding: { + bottom: 5, + }, + }, + tooltip: { + shared: false, + intersect: true, + }, + plotOptions: { + boxPlot: { + colors: { + upper: '#1c84ee', + lower: '#22c55e', + }, + }, + }, + } +} diff --git a/apiferia/src/app/views/charts/bubble/bubble.component.html b/apiferia/src/app/views/charts/bubble/bubble.component.html new file mode 100644 index 00000000..c41f5c1d --- /dev/null +++ b/apiferia/src/app/views/charts/bubble/bubble.component.html @@ -0,0 +1,73 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the TS file for the following chart at: + src/app/views/charts/bubble.component.ts +

    +
    +
    + +
    +
    +

    Simple Bubble Chart

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

    3D Bubble Chart

    +
    +
    + + +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/bubble/bubble.component.spec.ts b/apiferia/src/app/views/charts/bubble/bubble.component.spec.ts new file mode 100644 index 00000000..fe9c4c77 --- /dev/null +++ b/apiferia/src/app/views/charts/bubble/bubble.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BubbleComponent } from './bubble.component' + +describe('BubbleComponent', () => { + let component: BubbleComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BubbleComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BubbleComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/bubble/bubble.component.ts b/apiferia/src/app/views/charts/bubble/bubble.component.ts new file mode 100644 index 00000000..a5794481 --- /dev/null +++ b/apiferia/src/app/views/charts/bubble/bubble.component.ts @@ -0,0 +1,205 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { currentYear } from '@/app/common/constants' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-bubble', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './bubble.component.html', + styles: ``, +}) +export class BubbleComponent { + generateData( + baseval: number, + count: number, + yrange: { min: number; max: number } + ) { + var i = 0 + var series = [] + while (i < count) { + var x = Math.floor(Math.random() * (750 - 1 + 1)) + 1 + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + var z = Math.floor(Math.random() * (75 - 15 + 1)) + 15 + + series.push([x, y, z]) + baseval += 86400000 + i++ + } + return series + } + + generateData1( + baseval: number, + count: number, + yrange: { min: number; max: number } + ) { + var i = 0 + var series = [] + while (i < count) { + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + var z = Math.floor(Math.random() * (75 - 15 + 1)) + 15 + + series.push([baseval, y, z]) + baseval += 86400000 + i++ + } + return series + } + + bubbleChart: Partial = { + chart: { + height: 380, + type: 'bubble', + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + name: 'Bubble 1', + data: this.generateData( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Bubble 2', + data: this.generateData( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Bubble 3', + data: this.generateData( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 60, + } + ), + }, + ], + fill: { + opacity: 0.8, + }, + colors: ['#1c84ee', '#7f56da'], + xaxis: { + tickAmount: 12, + type: 'category', + }, + yaxis: { + max: 70, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + legend: { + offsetY: 7, + }, + } + + secondbubbleChart: Partial = { + chart: { + height: 380, + type: 'bubble', + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + name: 'Product 1', + data: this.generateData1( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 80, + } + ), + }, + { + name: 'Product 2', + data: this.generateData1( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 80, + } + ), + }, + { + name: 'Product 3', + data: this.generateData1( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 80, + } + ), + }, + { + name: 'Product 4', + data: this.generateData1( + new Date('23 Oct ' + currentYear + ' GMT').getTime(), + 20, + { + min: 10, + max: 80, + } + ), + }, + ], + fill: { + type: 'gradient', + }, + colors: ['#1c84ee', '#7f56da', '#ff6c2f', '#4ecac2'], + xaxis: { + tickAmount: 12, + type: 'datetime', + + labels: { + rotate: 0, + }, + }, + yaxis: { + max: 70, + }, + legend: { + offsetY: 7, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } +} diff --git a/apiferia/src/app/views/charts/candlestick/candlestick.component.html b/apiferia/src/app/views/charts/candlestick/candlestick.component.html new file mode 100644 index 00000000..a03795b2 --- /dev/null +++ b/apiferia/src/app/views/charts/candlestick/candlestick.component.html @@ -0,0 +1,124 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the TS file for the following chart at: + src/app/views/charts/candlestick.component.ts +

    +
    +
    + +
    +
    +

    Simple Candlestick Chart

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

    Combo Candlestick Chart

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

    Category X-Axis

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

    Candlestick with Line

    +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/candlestick/candlestick.component.spec.ts b/apiferia/src/app/views/charts/candlestick/candlestick.component.spec.ts new file mode 100644 index 00000000..d70666b3 --- /dev/null +++ b/apiferia/src/app/views/charts/candlestick/candlestick.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CandlestickComponent } from './candlestick.component' + +describe('CandlestickComponent', () => { + let component: CandlestickComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CandlestickComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CandlestickComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/candlestick/candlestick.component.ts b/apiferia/src/app/views/charts/candlestick/candlestick.component.ts new file mode 100644 index 00000000..95b595d7 --- /dev/null +++ b/apiferia/src/app/views/charts/candlestick/candlestick.component.ts @@ -0,0 +1,1000 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' +import dayjs from 'dayjs' +import { ChartOptions } from '@/app/common/apexchart.model' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +const seriesData = [ + { + x: new Date(2016, 1, 1), + y: [51.98, 56.29, 51.59, 53.85], + }, + { + x: new Date(2016, 2, 1), + y: [53.66, 54.99, 51.35, 52.95], + }, + { + x: new Date(2016, 3, 1), + y: [52.96, 53.78, 51.54, 52.48], + }, + { + x: new Date(2016, 4, 1), + y: [52.54, 52.79, 47.88, 49.24], + }, + { + x: new Date(2016, 5, 1), + y: [49.1, 52.86, 47.7, 52.78], + }, + { + x: new Date(2016, 6, 1), + y: [52.83, 53.48, 50.32, 52.29], + }, + { + x: new Date(2016, 7, 1), + y: [52.2, 54.48, 51.64, 52.58], + }, + { + x: new Date(2016, 8, 1), + y: [52.76, 57.35, 52.15, 57.03], + }, + { + x: new Date(2016, 9, 1), + y: [57.04, 58.15, 48.88, 56.19], + }, + { + x: new Date(2016, 10, 1), + y: [56.09, 58.85, 55.48, 58.79], + }, + { + x: new Date(2016, 11, 1), + y: [58.78, 59.65, 58.23, 59.05], + }, + { + x: new Date(2017, 0, 1), + y: [59.37, 61.11, 59.35, 60.34], + }, + { + x: new Date(2017, 1, 1), + y: [60.4, 60.52, 56.71, 56.93], + }, + { + x: new Date(2017, 2, 1), + y: [57.02, 59.71, 56.04, 56.82], + }, + { + x: new Date(2017, 3, 1), + y: [56.97, 59.62, 54.77, 59.3], + }, + { + x: new Date(2017, 4, 1), + y: [59.11, 62.29, 59.1, 59.85], + }, + { + x: new Date(2017, 5, 1), + y: [59.97, 60.11, 55.66, 58.42], + }, + { + x: new Date(2017, 6, 1), + y: [58.34, 60.93, 56.75, 57.42], + }, + { + x: new Date(2017, 7, 1), + y: [57.76, 58.08, 51.18, 54.71], + }, + { + x: new Date(2017, 8, 1), + y: [54.8, 61.42, 53.18, 57.35], + }, + { + x: new Date(2017, 9, 1), + y: [57.56, 63.09, 57.0, 62.99], + }, + { + x: new Date(2017, 10, 1), + y: [62.89, 63.42, 59.72, 61.76], + }, + { + x: new Date(2017, 11, 1), + y: [61.71, 64.15, 61.29, 63.04], + }, +] +const seriesDataLinear = [ + { + x: new Date(2016, 1, 1), + y: 3.85, + }, + { + x: new Date(2016, 2, 1), + y: 2.95, + }, + { + x: new Date(2016, 3, 1), + y: -12.48, + }, + { + x: new Date(2016, 4, 1), + y: 19.24, + }, + { + x: new Date(2016, 5, 1), + y: 12.78, + }, + { + x: new Date(2016, 6, 1), + y: 22.29, + }, + { + x: new Date(2016, 7, 1), + y: -12.58, + }, + { + x: new Date(2016, 8, 1), + y: -17.03, + }, + { + x: new Date(2016, 9, 1), + y: -19.19, + }, + { + x: new Date(2016, 10, 1), + y: -28.79, + }, + { + x: new Date(2016, 11, 1), + y: -39.05, + }, + { + x: new Date(2017, 0, 1), + y: 20.34, + }, + { + x: new Date(2017, 1, 1), + y: 36.93, + }, + { + x: new Date(2017, 2, 1), + y: 36.82, + }, + { + x: new Date(2017, 3, 1), + y: 29.3, + }, + { + x: new Date(2017, 4, 1), + y: 39.85, + }, + { + x: new Date(2017, 5, 1), + y: 28.42, + }, + { + x: new Date(2017, 6, 1), + y: 37.42, + }, + { + x: new Date(2017, 7, 1), + y: 24.71, + }, + { + x: new Date(2017, 8, 1), + y: 37.35, + }, + { + x: new Date(2017, 9, 1), + y: 32.99, + }, + { + x: new Date(2017, 10, 1), + y: 31.76, + }, + { + x: new Date(2017, 11, 1), + y: 43.04, + }, +] + +@Component({ + selector: 'app-candlestick', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './candlestick.component.html', + styles: ``, +}) +export class CandlestickComponent { + candlestickChart: Partial = { + chart: { + height: 400, + type: 'candlestick', + toolbar: { + show: false, + }, + }, + plotOptions: { + candlestick: { + colors: { + upward: '#ef5f5f', + downward: '#22c55e', + }, + }, + }, + series: [ + { + data: seriesData, + }, + ], + + stroke: { + show: true, + width: 1, + }, + xaxis: { + type: 'datetime', + }, + grid: { + borderColor: '#f1f3fa', + }, + } + + comboChart: Partial = { + chart: { + height: 240, + type: 'candlestick', + toolbar: { + show: false, + }, + zoom: { + enabled: false, + }, + }, + series: [ + { + data: seriesData, + }, + ], + plotOptions: { + candlestick: { + colors: { + upward: '#ef5f5f', + downward: '#22c55e', + }, + }, + }, + xaxis: { + type: 'datetime', + }, + grid: { + borderColor: '#f1f3fa', + }, + } + + combobarChart: Partial = { + chart: { + height: 160, + type: 'bar', + toolbar: { + show: false, + autoSelected: 'selection', + }, + selection: { + xaxis: { + min: new Date('20 Jan 2017').getTime(), + max: new Date('10 Dec 2017').getTime(), + }, + fill: { + color: '#6c757d', + opacity: 0.4, + }, + stroke: { + color: '#6c757d', + }, + }, + }, + dataLabels: { + enabled: false, + }, + plotOptions: { + bar: { + columnWidth: '80%', + colors: { + ranges: [ + { + from: -1000, + to: 0, + color: '#1c84ee', + }, + { + from: 1, + to: 10000, + color: '#4ecac2', + }, + ], + }, + }, + }, + series: [ + { + name: 'volume', + data: seriesDataLinear, + }, + ], + xaxis: { + type: 'datetime', + axisBorder: { + offsetX: 13, + }, + }, + yaxis: { + labels: { + show: false, + }, + }, + grid: { + borderColor: '#f1f3fa', + }, + } + + xaxiscandlestickChart: Partial = { + series: [ + { + name: 'candle', + data: [ + { + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33], + }, + { + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11], + }, + { + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65], + }, + { + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24], + }, + { + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47], + }, + { + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31], + }, + { + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02], + }, + { + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02], + }, + { + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01], + }, + { + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02], + }, + { + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91], + }, + { + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612], + }, + { + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612], + }, + { + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95], + }, + { + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67], + }, + { + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4], + }, + { + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9], + }, + { + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45], + }, + { + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35], + }, + { + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53], + }, + { + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19], + }, + { + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620], + }, + { + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620], + }, + { + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61], + }, + { + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58], + }, + { + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86], + }, + { + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16], + }, + { + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4], + }, + { + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81], + }, + { + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578], + }, + { + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579], + }, + { + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96], + }, + { + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92], + }, + { + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22], + }, + { + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08], + }, + { + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25], + }, + { + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97], + }, + { + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602], + }, + { + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95], + }, + { + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02], + }, + { + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591], + }, + { + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592], + }, + { + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34], + }, + { + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86], + }, + { + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01], + }, + { + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25], + }, + { + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99], + }, + { + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81], + }, + { + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96], + }, + { + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39], + }, + { + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27], + }, + { + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55], + }, + { + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02], + }, + { + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01], + }, + { + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06], + }, + { + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89], + }, + { + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5], + }, + { + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86], + }, + { + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07], + }, + { + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606], + }, + ], + }, + ], + chart: { + height: 380, + type: 'candlestick', + toolbar: { + show: false, + }, + }, + title: { + text: 'CandleStick Chart - Category X-axis', + align: 'left', + }, + grid: { + padding: { + top: 0, + right: -2, + bottom: -25, + left: 0, + }, + }, + annotations: { + xaxis: [ + { + x: 'Oct 06 14:00', + borderColor: '#22c55e', + label: { + borderColor: '#22c55e', + style: { + fontSize: '12px', + color: '#fff', + background: '#22c55e', + }, + orientation: 'horizontal', + offsetY: 7, + text: 'Annotation Test', + }, + }, + ], + }, + plotOptions: { + candlestick: { + colors: { + upward: '#ef5f5f', + downward: '#22c55e', + }, + }, + }, + tooltip: { + enabled: true, + }, + colors: ['#ef5f5f', '#22c55e'], + xaxis: { + type: 'category', + labels: { + formatter: function (val) { + return dayjs(val).format('MMM DD HH:mm') + }, + }, + }, + yaxis: { + tooltip: { + enabled: true, + }, + }, + } + + linecandlestickChart: Partial = { + series: [ + { + name: 'Line', + type: 'line', + data: [ + { + x: new Date(1538778600000), + y: 6604, + }, + { + x: new Date(1538782200000), + y: 6602, + }, + { + x: new Date(1538814600000), + y: 6607, + }, + { + x: new Date(1538884800000), + y: 6620, + }, + ], + }, + { + name: 'Candle', + type: 'candlestick', + data: [ + { + x: new Date(1538778600000), + y: [6629.81, 6650.5, 6623.04, 6633.33], + }, + { + x: new Date(1538780400000), + y: [6632.01, 6643.59, 6620, 6630.11], + }, + { + x: new Date(1538782200000), + y: [6630.71, 6648.95, 6623.34, 6635.65], + }, + { + x: new Date(1538784000000), + y: [6635.65, 6651, 6629.67, 6638.24], + }, + { + x: new Date(1538785800000), + y: [6638.24, 6640, 6620, 6624.47], + }, + { + x: new Date(1538787600000), + y: [6624.53, 6636.03, 6621.68, 6624.31], + }, + { + x: new Date(1538789400000), + y: [6624.61, 6632.2, 6617, 6626.02], + }, + { + x: new Date(1538791200000), + y: [6627, 6627.62, 6584.22, 6603.02], + }, + { + x: new Date(1538793000000), + y: [6605, 6608.03, 6598.95, 6604.01], + }, + { + x: new Date(1538794800000), + y: [6604.5, 6614.4, 6602.26, 6608.02], + }, + { + x: new Date(1538796600000), + y: [6608.02, 6610.68, 6601.99, 6608.91], + }, + { + x: new Date(1538798400000), + y: [6608.91, 6618.99, 6608.01, 6612], + }, + { + x: new Date(1538800200000), + y: [6612, 6615.13, 6605.09, 6612], + }, + { + x: new Date(1538802000000), + y: [6612, 6624.12, 6608.43, 6622.95], + }, + { + x: new Date(1538803800000), + y: [6623.91, 6623.91, 6615, 6615.67], + }, + { + x: new Date(1538805600000), + y: [6618.69, 6618.74, 6610, 6610.4], + }, + { + x: new Date(1538807400000), + y: [6611, 6622.78, 6610.4, 6614.9], + }, + { + x: new Date(1538809200000), + y: [6614.9, 6626.2, 6613.33, 6623.45], + }, + { + x: new Date(1538811000000), + y: [6623.48, 6627, 6618.38, 6620.35], + }, + { + x: new Date(1538812800000), + y: [6619.43, 6620.35, 6610.05, 6615.53], + }, + { + x: new Date(1538814600000), + y: [6615.53, 6617.93, 6610, 6615.19], + }, + { + x: new Date(1538816400000), + y: [6615.19, 6621.6, 6608.2, 6620], + }, + { + x: new Date(1538818200000), + y: [6619.54, 6625.17, 6614.15, 6620], + }, + { + x: new Date(1538820000000), + y: [6620.33, 6634.15, 6617.24, 6624.61], + }, + { + x: new Date(1538821800000), + y: [6625.95, 6626, 6611.66, 6617.58], + }, + { + x: new Date(1538823600000), + y: [6619, 6625.97, 6595.27, 6598.86], + }, + { + x: new Date(1538825400000), + y: [6598.86, 6598.88, 6570, 6587.16], + }, + { + x: new Date(1538827200000), + y: [6588.86, 6600, 6580, 6593.4], + }, + { + x: new Date(1538829000000), + y: [6593.99, 6598.89, 6585, 6587.81], + }, + { + x: new Date(1538830800000), + y: [6587.81, 6592.73, 6567.14, 6578], + }, + { + x: new Date(1538832600000), + y: [6578.35, 6581.72, 6567.39, 6579], + }, + { + x: new Date(1538834400000), + y: [6579.38, 6580.92, 6566.77, 6575.96], + }, + { + x: new Date(1538836200000), + y: [6575.96, 6589, 6571.77, 6588.92], + }, + { + x: new Date(1538838000000), + y: [6588.92, 6594, 6577.55, 6589.22], + }, + { + x: new Date(1538839800000), + y: [6589.3, 6598.89, 6589.1, 6596.08], + }, + { + x: new Date(1538841600000), + y: [6597.5, 6600, 6588.39, 6596.25], + }, + { + x: new Date(1538843400000), + y: [6598.03, 6600, 6588.73, 6595.97], + }, + { + x: new Date(1538845200000), + y: [6595.97, 6602.01, 6588.17, 6602], + }, + { + x: new Date(1538847000000), + y: [6602, 6607, 6596.51, 6599.95], + }, + { + x: new Date(1538848800000), + y: [6600.63, 6601.21, 6590.39, 6591.02], + }, + { + x: new Date(1538850600000), + y: [6591.02, 6603.08, 6591, 6591], + }, + { + x: new Date(1538852400000), + y: [6591, 6601.32, 6585, 6592], + }, + { + x: new Date(1538854200000), + y: [6593.13, 6596.01, 6590, 6593.34], + }, + { + x: new Date(1538856000000), + y: [6593.34, 6604.76, 6582.63, 6593.86], + }, + { + x: new Date(1538857800000), + y: [6593.86, 6604.28, 6586.57, 6600.01], + }, + { + x: new Date(1538859600000), + y: [6601.81, 6603.21, 6592.78, 6596.25], + }, + { + x: new Date(1538861400000), + y: [6596.25, 6604.2, 6590, 6602.99], + }, + { + x: new Date(1538863200000), + y: [6602.99, 6606, 6584.99, 6587.81], + }, + { + x: new Date(1538865000000), + y: [6587.81, 6595, 6583.27, 6591.96], + }, + { + x: new Date(1538866800000), + y: [6591.97, 6596.07, 6585, 6588.39], + }, + { + x: new Date(1538868600000), + y: [6587.6, 6598.21, 6587.6, 6594.27], + }, + { + x: new Date(1538870400000), + y: [6596.44, 6601, 6590, 6596.55], + }, + { + x: new Date(1538872200000), + y: [6598.91, 6605, 6596.61, 6600.02], + }, + { + x: new Date(1538874000000), + y: [6600.55, 6605, 6589.14, 6593.01], + }, + { + x: new Date(1538875800000), + y: [6593.15, 6605, 6592, 6603.06], + }, + { + x: new Date(1538877600000), + y: [6603.07, 6604.5, 6599.09, 6603.89], + }, + { + x: new Date(1538879400000), + y: [6604.44, 6604.44, 6600, 6603.5], + }, + { + x: new Date(1538881200000), + y: [6603.5, 6603.99, 6597.5, 6603.86], + }, + { + x: new Date(1538883000000), + y: [6603.85, 6605, 6600, 6604.07], + }, + { + x: new Date(1538884800000), + y: [6604.98, 6606, 6604.07, 6606], + }, + ], + }, + ], + chart: { + height: 380, + type: 'line', + toolbar: { + show: false, + }, + }, + title: { + text: 'CandleStick Chart', + align: 'left', + }, + stroke: { + width: [3, 1], + }, + legend: { + show: true, + horizontalAlign: 'center', + offsetX: 0, + offsetY: 5, + }, + grid: { + padding: { + top: 0, + right: -2, + bottom: 15, + left: 10, + }, + }, + colors: ['#22c55e', '#ef5f5f'], + plotOptions: { + candlestick: { + colors: { + upward: '#ef5f5f', + downward: '#ef5f5f', + }, + }, + }, + + tooltip: { + shared: true, + custom: [ + function (_ref) { + var seriesIndex = _ref.seriesIndex + var dataPointIndex = _ref.dataPointIndex + var w = _ref.w + + return w.globals.series[seriesIndex][dataPointIndex] + }, + function (_ref2) { + var seriesIndex = _ref2.seriesIndex + var dataPointIndex = _ref2.dataPointIndex + var w = _ref2.w + + var o = w.globals.seriesCandleO[seriesIndex][dataPointIndex] + var h = w.globals.seriesCandleH[seriesIndex][dataPointIndex] + var l = w.globals.seriesCandleL[seriesIndex][dataPointIndex] + var c = w.globals.seriesCandleC[seriesIndex][dataPointIndex] + return ( + '
    ' + + '
    Open: ' + + o + + '
    ' + + '
    High: ' + + h + + '
    ' + + '
    Low: ' + + l + + '
    ' + + '
    Close: ' + + c + + '
    ' + + '
    ' + ) + }, + ], + }, + xaxis: { + type: 'datetime', + }, + } +} diff --git a/apiferia/src/app/views/charts/charts.route.ts b/apiferia/src/app/views/charts/charts.route.ts new file mode 100644 index 00000000..c8ff06ab --- /dev/null +++ b/apiferia/src/app/views/charts/charts.route.ts @@ -0,0 +1,101 @@ +import type { Route } from '@angular/router' +import { AreaComponent } from './area/area.component' +import { BarComponent } from './bar/bar.component' +import { BubbleComponent } from './bubble/bubble.component' +import { CandlestickComponent } from './candlestick/candlestick.component' +import { ColumnComponent } from './column/column.component' +import { HeatmapComponent } from './heatmap/heatmap.component' +import { LineComponent } from './line/line.component' +import { MixedComponent } from './mixed/mixed.component' +import { TimelineComponent } from './timeline/timeline.component' +import { BoxplotComponent } from './boxplot/boxplot.component' +import { TreemapComponent } from './treemap/treemap.component' +import { PieComponent } from './pie/pie.component' +import { RadarComponent } from './radar/radar.component' +import { RadialBarComponent } from './radial-bar/radial-bar.component' +import { ScatterComponent } from './scatter/scatter.component' +import { PolarComponent } from './polar/polar.component' + +export const CHART_ROUTE: Route[] = [ + { + path: 'area', + component: AreaComponent, + data: { title: 'Apex Area Charts' }, + }, + { + path: 'bar', + component: BarComponent, + data: { title: 'Apex Bar Charts' }, + }, + { + path: 'bubble', + component: BubbleComponent, + data: { title: 'Apex Bubble Charts' }, + }, + { + path: 'candlestick', + component: CandlestickComponent, + data: { title: 'Apex Candlestick Charts' }, + }, + { + path: 'column', + component: ColumnComponent, + data: { title: 'Apex Column Charts' }, + }, + { + path: 'heatmap', + component: HeatmapComponent, + data: { title: 'Apex Heatmap Charts' }, + }, + { + path: 'line', + component: LineComponent, + data: { title: 'Apex Line Charts' }, + }, + { + path: 'mixed', + component: MixedComponent, + data: { title: 'Apex Mixed Charts' }, + }, + { + path: 'timeline', + component: TimelineComponent, + data: { title: 'Apex Timeline Charts' }, + }, + { + path: 'boxplot', + component: BoxplotComponent, + data: { title: 'Apex Boxplot Charts' }, + }, + { + path: 'treemap', + component: TreemapComponent, + data: { title: 'Apex Treemap Charts' }, + }, + { + path: 'pie', + component: PieComponent, + data: { title: 'Apex Pie Charts' }, + }, + { + path: 'radar', + component: RadarComponent, + data: { title: 'Apex Radar Charts' }, + }, + { + path: 'radial-bar', + component: RadialBarComponent, + data: { title: 'Apex RadialBar Charts' }, + }, + { + path: 'scatter', + component: ScatterComponent, + data: { title: 'Apex Scatter Charts' }, + }, + + { + path: 'polar', + component: PolarComponent, + data: { title: 'Apex Polar Area Charts' }, + }, +] diff --git a/apiferia/src/app/views/charts/column/column.component.html b/apiferia/src/app/views/charts/column/column.component.html new file mode 100644 index 00000000..193f9766 --- /dev/null +++ b/apiferia/src/app/views/charts/column/column.component.html @@ -0,0 +1,327 @@ + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/column.component.ts +

    +
    +
    + +
    +
    +

    Basic Column Chart

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

    + Column Chart with Datalabels +

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

    Stacked Column Chart

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

    + 100% Stacked Column Chart +

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

    Column with Markers

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

    Column with Group Label

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

    + Column Chart with rotated labels & Annotations +

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

    + Column Chart with negative values +

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

    + Distributed Column Chart +

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

    Range Column Chart

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

    + Dynamic Loaded Chart +

    +
    + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/column/column.component.spec.ts b/apiferia/src/app/views/charts/column/column.component.spec.ts new file mode 100644 index 00000000..ae9ce26e --- /dev/null +++ b/apiferia/src/app/views/charts/column/column.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ColumnComponent } from './column.component' + +describe('ColumnComponent', () => { + let component: ColumnComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ColumnComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ColumnComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/column/column.component.ts b/apiferia/src/app/views/charts/column/column.component.ts new file mode 100644 index 00000000..0981d572 --- /dev/null +++ b/apiferia/src/app/views/charts/column/column.component.ts @@ -0,0 +1,1256 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' +import ApexCharts from 'apexcharts' +import { ChartOptions } from '@/app/common/apexchart.model' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' + +function updateQuarterChart(sourceChart: any, destChartIDToUpdate: string) { + let series = [] + let seriesIndex = 0 + let colors = [] + if (sourceChart.w.globals.selectedDataPoints[0]) { + let selectedPoints = sourceChart.w.globals.selectedDataPoints + for (let i = 0; i < selectedPoints[seriesIndex].length; i++) { + let selectedIndex = selectedPoints[seriesIndex][i] + let yearSeries = sourceChart.w.config.series[seriesIndex] + series.push({ + name: yearSeries.data[selectedIndex].x, + data: yearSeries.data[selectedIndex].quarters, + }) + colors.push(yearSeries.data[selectedIndex].color) + } + if (series.length === 0) + series = [ + { + data: [], + }, + ] + return ApexCharts.exec(destChartIDToUpdate, 'updateOptions', { + series: series, + colors: colors, + fill: { + colors: colors, + }, + }) + } +} + +function shuffleArray( + array: { y: number; quarters: { x: string; y: number }[] }[] +) { + for (let i = array.length - 1; i > 0; i--) { + let j = Math.floor(Math.random() * (i + 1)) + let temp = array[i] + array[i] = array[j] + array[j] = temp + } + return array +} + +let arrayData = [ + { + y: 400, + quarters: [ + { + x: 'Q1', + y: 120, + }, + { + x: 'Q2', + y: 90, + }, + { + x: 'Q3', + y: 100, + }, + { + x: 'Q4', + y: 90, + }, + ], + }, + { + y: 430, + quarters: [ + { + x: 'Q1', + y: 120, + }, + { + x: 'Q2', + y: 110, + }, + { + x: 'Q3', + y: 90, + }, + { + x: 'Q4', + y: 110, + }, + ], + }, + { + y: 448, + quarters: [ + { + x: 'Q1', + y: 70, + }, + { + x: 'Q2', + y: 100, + }, + { + x: 'Q3', + y: 140, + }, + { + x: 'Q4', + y: 138, + }, + ], + }, + { + y: 470, + quarters: [ + { + x: 'Q1', + y: 150, + }, + { + x: 'Q2', + y: 60, + }, + { + x: 'Q3', + y: 190, + }, + { + x: 'Q4', + y: 70, + }, + ], + }, + { + y: 540, + quarters: [ + { + x: 'Q1', + y: 120, + }, + { + x: 'Q2', + y: 120, + }, + { + x: 'Q3', + y: 130, + }, + { + x: 'Q4', + y: 170, + }, + ], + }, + { + y: 580, + quarters: [ + { + x: 'Q1', + y: 170, + }, + { + x: 'Q2', + y: 130, + }, + { + x: 'Q3', + y: 120, + }, + { + x: 'Q4', + y: 160, + }, + ], + }, +] + +@Component({ + selector: 'app-column', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './column.component.html', + styles: ``, +}) +export class ColumnComponent { + basicColumnChart: Partial = { + chart: { + height: 396, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: false, + columnWidth: '55%', + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + show: true, + width: 0, + colors: ['transparent'], + }, + colors: ['#f9b931', '#ef5f5f', '#4ecac2'], + series: [ + { + name: 'Net Profit', + data: [47, 58, 59, 54, 62, 59, 65, 61, 68], + }, + { + name: 'Revenue', + data: [79, 86, 103, 97, 89, 107, 93, 116, 96], + }, + { + name: 'Free Cash Flow', + data: [38, 42, 39, 28, 47, 50, 54, 55, 43], + }, + ], + xaxis: { + categories: [ + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + ], + }, + legend: { + offsetY: 7, + }, + yaxis: { + title: { + text: '$ (thousands)', + }, + }, + fill: { + opacity: 1, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + tooltip: { + y: { + formatter: function (val) { + return '$ ' + val + ' thousands' + }, + }, + }, + } + + datalabelsColumnChart: Partial = { + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + borderRadius: 10, + dataLabels: { + position: 'top', // top, center, bottom + }, + }, + }, + dataLabels: { + enabled: true, + formatter: function (val) { + return val + '%' + }, + offsetY: -25, + style: { + fontSize: '12px', + colors: ['#4ecac2'], + }, + }, + colors: ['#4ecac2'], + legend: { + show: true, + horizontalAlign: 'center', + offsetX: 0, + offsetY: -5, + }, + series: [ + { + name: 'Inflation', + data: [2.3, 3.1, 4.0, 10.1, 4.0, 3.6, 3.2, 2.3, 1.4, 0.8, 0.5, 0.2], + }, + ], + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + position: 'top', + labels: { + offsetY: 0, + }, + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + crosshairs: { + fill: { + type: 'gradient', + gradient: { + colorFrom: '#D8E3F0', + colorTo: '#BED1E6', + stops: [0, 100], + opacityFrom: 0.4, + opacityTo: 0.5, + }, + }, + }, + tooltip: { + enabled: true, + offsetY: -10, + }, + }, + fill: { + gradient: { + shade: 'light', + type: 'horizontal', + shadeIntensity: 0.25, + gradientToColors: undefined, + inverseColors: true, + opacityFrom: 1, + opacityTo: 1, + stops: [50, 0, 100, 100], + }, + }, + yaxis: { + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + labels: { + show: false, + formatter: function (val) { + return val + '%' + }, + }, + }, + title: { + text: 'Monthly Inflation in Argentina, 2002', + floating: true, + offsetY: 360, + align: 'center', + style: { + color: '#444', + }, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + stackedColumnChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: false, + columnWidth: '50%', + }, + }, + series: [ + { + name: 'Product A', + data: [47, 58, 44, 70, 25, 46, 24, 52], + }, + { + name: 'Product B', + data: [16, 26, 23, 11, 16, 30, 36, 15], + }, + { + name: 'Product C', + data: [14, 20, 18, 18, 24, 17, 18, 16], + }, + ], + xaxis: { + categories: [ + '2011 Q1', + '2011 Q2', + '2011 Q3', + '2011 Q4', + '2012 Q1', + '2012 Q2', + '2012 Q3', + '2012 Q4', + ], + }, + colors: ['#1c84ee', '#f9b931', '#4ecac2'], + fill: { + opacity: 1, + }, + legend: { + offsetY: 7, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } + + fullstackedColumnChart: Partial = { + chart: { + height: 380, + type: 'bar', + stacked: true, + stackType: '100%', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + columnWidth: '50%', + }, + }, + series: [ + { + name: 'Product A', + data: [11, 17, 15, 15, 21, 14, 15, 13], + }, + { + name: 'Product B', + data: [44, 55, 41, 67, 22, 43, 21, 49], + }, + { + name: 'Product C', + data: [13, 23, 20, 8, 13, 27, 33, 12], + }, + ], + xaxis: { + categories: [ + '2011 Q1', + '2011 Q2', + '2011 Q3', + '2011 Q4', + '2012 Q1', + '2012 Q2', + '2012 Q3', + '2012 Q4', + ], + }, + fill: { + opacity: 1, + }, + legend: { + offsetY: 7, + }, + colors: ['#e3eaef', '#1c84ee', '#323a46'], + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } + + markersColumnChart: Partial = { + series: [ + { + name: 'Actual', + data: [ + { + x: '2011', + y: 1292, + goals: [ + { + name: 'Expected', + value: 1400, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2012', + y: 4432, + goals: [ + { + name: 'Expected', + value: 5400, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2013', + y: 5423, + goals: [ + { + name: 'Expected', + value: 5200, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2014', + y: 6653, + goals: [ + { + name: 'Expected', + value: 6500, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2015', + y: 8133, + goals: [ + { + name: 'Expected', + value: 6600, + strokeHeight: 13, + strokeWidth: 0, + strokeLineCap: 'round', + strokeColor: '#57606c', + }, + ], + }, + { + x: '2016', + y: 7132, + goals: [ + { + name: 'Expected', + value: 7500, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2017', + y: 7332, + goals: [ + { + name: 'Expected', + value: 8700, + strokeHeight: 5, + strokeColor: '#57606c', + }, + ], + }, + { + x: '2018', + y: 6553, + goals: [ + { + name: 'Expected', + value: 7300, + strokeHeight: 2, + strokeDashArray: 2, + strokeColor: '#57606c', + }, + ], + }, + ], + }, + ], + chart: { + height: 380, + type: 'bar', + }, + plotOptions: { + bar: { + columnWidth: '60%', + }, + }, + colors: ['#ff6c2f', '#57606c'], + dataLabels: { + enabled: false, + }, + legend: { + show: true, + showForSingleSeries: true, + customLegendItems: ['Actual', 'Expected'], + markers: { + fillColors: ['#ff6c2f', '#57606c'], + }, + }, + } + + groupColumnChart: Partial = { + series: [ + { + name: 'Sales', + data: [ + { + x: 'Q1', + y: 400, + }, + { + x: 'Q2', + y: 430, + }, + { + x: 'Q3', + y: 448, + }, + { + x: 'Q4', + y: 470, + }, + { + x: 'Q1', + y: 540, + }, + { + x: 'Q2', + y: 580, + }, + { + x: 'Q3', + y: 690, + }, + { + x: 'Q4', + y: 690, + }, + ], + }, + ], + chart: { + type: 'bar', + height: 380, + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: false, + columnWidth: '45%', + }, + }, + colors: ['#1c84ee', '#fa5c7c'], + xaxis: { + type: 'category', + group: { + style: { + fontSize: '10px', + fontWeight: 700, + }, + groups: [ + { + title: '2020', + cols: 4, + }, + { + title: '2021', + cols: 4, + }, + ], + }, + }, + } + + rotatelabelColumnChart: Partial = { + annotations: { + points: [ + { + x: 'Bananas', + seriesIndex: 0, + label: { + borderColor: '#727cf5', + offsetY: 0, + style: { + color: '#fff', + background: '#727cf5', + }, + text: 'Bananas are good', + }, + }, + ], + }, + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + columnWidth: '50%', + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: 2, + }, + colors: ['#f9b931'], + series: [ + { + name: 'Servings', + data: [20, 15, 30, 25, 35, 40, 45, 50, 55, 60, 65, 70, 75], + }, + ], + grid: { + borderColor: '#f1f3fa', + padding: { + top: 0, + right: -2, + bottom: -35, + left: 10, + }, + }, + xaxis: { + labels: { + rotate: -45, + }, + categories: [ + 'Apples', + 'Oranges', + 'Strawberries', + 'Pineapples', + 'Mangoes', + 'Bananas', + 'Blackberries', + 'Pears', + 'Watermelons', + 'Cherries', + 'Pomegranates', + 'Tangerines', + 'Papayas', + ], + }, + yaxis: { + title: { + text: 'Servings', + }, + }, + fill: { + type: 'gradient', + gradient: { + shade: 'light', + type: 'horizontal', + shadeIntensity: 0.25, + gradientToColors: undefined, + inverseColors: true, + opacityFrom: 0.85, + opacityTo: 0.85, + stops: [50, 0, 100], + }, + }, + } + + negativeColumnChart: Partial = { + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + colors: { + ranges: [ + { + from: -100, + to: -46, + color: '#ff86c8', + }, + { + from: -45, + to: 0, + color: '#7f56da', + }, + ], + }, + columnWidth: '80%', + }, + }, + dataLabels: { + enabled: false, + }, + colors: ['#22c55e'], + series: [ + { + name: 'Cash Flow', + data: [ + 1.45, 5.42, 5.9, -0.42, -12.6, -18.1, -18.2, -14.16, -11.1, -6.09, + 0.34, 3.88, 13.07, 5.8, 2, 7.37, 8.1, 13.57, 15.75, 17.1, 19.8, + -27.03, -54.4, -47.2, -43.3, -18.6, -48.6, -41.1, -39.6, -37.6, -29.4, + -21.4, -2.4, + ], + }, + ], + yaxis: { + title: { + text: 'Growth', + }, + labels: { + formatter: function (y) { + return y.toFixed(0) + '%' + }, + }, + }, + xaxis: { + // TODO: uncomment below and fix the error + //type: 'datetime', + categories: [ + '2021-01-01', + '2021-02-01', + '2021-03-01', + '2021-04-01', + '2021-05-01', + '2021-06-01', + '2021-07-01', + '2021-08-01', + '2021-09-01', + '2021-10-01', + '2021-11-01', + '2021-12-01', + '2022-01-01', + '2022-02-01', + '2022-03-01', + '2022-04-01', + '2022-05-01', + '2022-06-01', + '2022-07-01', + '2022-08-01', + '2022-09-01', + '2022-10-01', + '2022-11-01', + '2022-12-01', + '2023-01-01', + '2023-02-01', + '2023-03-01', + '2023-04-01', + '2023-05-01', + '2023-06-01', + '2023-07-01', + '2023-08-01', + '2023-09-01', + ], + labels: { + rotate: -90, + }, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + distributedChart: Partial = { + chart: { + height: 380, + type: 'bar', + toolbar: { + show: false, + }, + }, + colors: [ + '#1c84ee', + '#53389f', + '#7f56da', + '#ff86c8', + '#ef5f5f', + '#ff6c2f', + '#f9b931', + '#22c55e', + ], + plotOptions: { + bar: { + columnWidth: '45%', + distributed: true, + }, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + data: [21, 22, 10, 28, 16, 21, 13, 30], + }, + ], + xaxis: { + categories: [ + 'John', + 'Joe', + 'Jake', + 'Amber', + 'Peter', + 'Mary', + 'David', + 'Lily', + ], + labels: { + style: { + colors: [ + '#1c84ee', + '#53389f', + '#7f56da', + '#ff86c8', + '#ef5f5f', + '#ff6c2f', + '#f9b931', + '#22c55e', + ], + fontSize: '14px', + }, + }, + }, + legend: { + offsetY: 7, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + rangeColumnChart: Partial = { + chart: { + height: 380, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: false, + }, + }, + dataLabels: { + enabled: true, + }, + legend: { + offsetY: 7, + }, + colors: ['#1c84ee', '#7f56da'], + series: [ + { + name: 'Product A', + data: [ + { + x: 'Team A', + y: [1, 5], + }, + { + x: 'Team B', + y: [4, 6], + }, + { + x: 'Team C', + y: [5, 8], + }, + { + x: 'Team D', + y: [3, 11], + }, + ], + }, + { + name: 'Product B', + data: [ + { + x: 'Team A', + y: [2, 6], + }, + { + x: 'Team B', + y: [1, 3], + }, + { + x: 'Team C', + y: [7, 8], + }, + { + x: 'Team D', + y: [5, 9], + }, + ], + }, + ], + } + makeData() { + let dataSet = shuffleArray(arrayData) + + return [ + { + x: '2011', + y: dataSet[0].y, + color: '#727cf5', + quarters: dataSet[0].quarters, + }, + { + x: '2012', + y: dataSet[1].y, + color: '#6c757d', + quarters: dataSet[1].quarters, + }, + { + x: '2013', + y: dataSet[2].y, + color: '#0acf97', + quarters: dataSet[2].quarters, + }, + { + x: '2014', + y: dataSet[3].y, + color: '#fa5c7c', + quarters: dataSet[3].quarters, + }, + { + x: '2015', + y: dataSet[4].y, + color: '#ffbc00', + quarters: dataSet[4].quarters, + }, + { + x: '2016', + y: dataSet[5].y, + color: '#39afd1', + quarters: dataSet[5].quarters, + }, + ] + } + + yearColumnChart: Partial = { + series: [ + { + data: this.makeData(), + }, + ], + chart: { + id: 'barYear', + height: 400, + width: '100%', + type: 'bar', + toolbar: { + show: false, + }, + events: { + dataPointSelection: function (e, chart, opts) { + let quarterChartEl = document.querySelector('#chart-quarter') + var yearChartEl = document.querySelector('#chart-year') + + if (opts.selectedDataPoints[0].length === 1) { + if (quarterChartEl?.classList.contains('active')) { + updateQuarterChart(chart, 'barQuarter') + } else { + yearChartEl?.classList.add('chart-quarter-activated') + quarterChartEl?.classList.add('active') + updateQuarterChart(chart, 'barQuarter') + } + } else { + updateQuarterChart(chart, 'barQuarter') + } + + if (opts.selectedDataPoints[0].length === 0) { + yearChartEl?.classList.remove('chart-quarter-activated') + quarterChartEl?.classList.remove('active') + } + }, + updated: function (chart) { + updateQuarterChart(chart, 'barQuarter') + }, + }, + }, + plotOptions: { + bar: { + distributed: true, + horizontal: true, + barHeight: '75%', + dataLabels: { + position: 'bottom', + }, + }, + }, + dataLabels: { + enabled: true, + textAnchor: 'start', + style: { + colors: ['#fff'], + }, + formatter: function (val, opt) { + return opt.w.globals.labels[opt.dataPointIndex] + }, + offsetX: 0, + dropShadow: { + enabled: true, + }, + }, + legend: { + show: false, + }, + colors: ['#727cf5', '#6c757d', '#0acf97', '#fa5c7c', '#ffbc00', '#39afd1'], + + states: { + active: { + allowMultipleDataPointsSelection: true, + filter: { + type: 'darken', + }, + }, + }, + tooltip: { + x: { + show: false, + }, + }, + title: { + text: 'Yearly Results', + offsetX: 15, + }, + subtitle: { + text: '(Click on bar to see details)', + offsetX: 15, + }, + yaxis: { + labels: { + show: false, + }, + }, + } + + quarterChart: Partial = { + series: [ + { + data: [], + }, + ], + chart: { + id: 'barQuarter', + height: 400, + width: '100%', + type: 'bar', + stacked: true, + }, + plotOptions: { + bar: { + columnWidth: '50%', + horizontal: false, + }, + }, + legend: { + show: false, + }, + colors: ['#1c84ee', '#7f56da', '#ff86c8', '#ef5f5f', '#f9b931', '#22c55e'], + grid: { + yaxis: { + lines: { + show: false, + }, + }, + xaxis: { + lines: { + show: true, + }, + }, + }, + xaxis: { + axisBorder: { + show: false, + }, + }, + yaxis: { + labels: { + show: false, + }, + }, + title: { + text: 'Quarterly Results', + offsetX: 10, + }, + tooltip: { + x: { + formatter: function (val, opts) { + return opts.w.globals.seriesNames[opts.seriesIndex] + }, + }, + }, + } + + updateQuarter() { + this.yearColumnChart.series = [ + { + data: this.makeData(), + }, + ] + } +} diff --git a/apiferia/src/app/views/charts/heatmap/heatmap.component.html b/apiferia/src/app/views/charts/heatmap/heatmap.component.html new file mode 100644 index 00000000..5d56065e --- /dev/null +++ b/apiferia/src/app/views/charts/heatmap/heatmap.component.html @@ -0,0 +1,116 @@ + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/heatmap.component.ts +

    +
    +
    + +
    +
    +

    + Basic Heatmap - Single Series +

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

    + Heatmap - Multiple Series +

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

    + Heatmap - Color Range +

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

    + Heatmap - Range without Shades +

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/heatmap/heatmap.component.spec.ts b/apiferia/src/app/views/charts/heatmap/heatmap.component.spec.ts new file mode 100644 index 00000000..d2ab4305 --- /dev/null +++ b/apiferia/src/app/views/charts/heatmap/heatmap.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { HeatmapComponent } from './heatmap.component' + +describe('HeatmapComponent', () => { + let component: HeatmapComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [HeatmapComponent], + }).compileComponents() + + fixture = TestBed.createComponent(HeatmapComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/heatmap/heatmap.component.ts b/apiferia/src/app/views/charts/heatmap/heatmap.component.ts new file mode 100644 index 00000000..0b802aea --- /dev/null +++ b/apiferia/src/app/views/charts/heatmap/heatmap.component.ts @@ -0,0 +1,429 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +function generateData(count: number, yrange: { min: number; max: number }) { + var i = 0 + var series = [] + while (i < count) { + var x = (i + 1).toString() + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + + series.push({ + x: x, + y: y, + }) + i++ + } + return series +} + +@Component({ + selector: 'app-heatmap', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './heatmap.component.html', + styles: ``, +}) +export class HeatmapComponent { + basicheatmapChart: Partial = { + chart: { + height: 380, + type: 'heatmap', + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + colors: ['#1c84ee'], + series: [ + { + name: 'Metric 1', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 2', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 3', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 4', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 5', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 6', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 7', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 8', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 9', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + ], + xaxis: { + type: 'category', + }, + } + + multipleheatmapChart: Partial = { + chart: { + height: 380, + type: 'heatmap', + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + colors: [ + '#1c84ee', + '#53389f', + '#7f56da', + '#ff86c8', + '#ef5f5f', + '#ff6c2f', + '#f9b931', + '#22c55e', + '#4ecac2', + ], + series: [ + { + name: 'Metric 1', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 2', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 3', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 4', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 5', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 6', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 7', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 8', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric 9', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + ], + xaxis: { + type: 'category', + }, + } + + colorheatmapChart: Partial = { + chart: { + height: 380, + type: 'heatmap', + toolbar: { + show: false, + }, + }, + plotOptions: { + heatmap: { + shadeIntensity: 0.5, + + colorScale: { + ranges: [ + { + from: -30, + to: 5, + name: 'Low', + color: '#1c84ee', + }, + { + from: 6, + to: 20, + name: 'Medium', + color: '#ef5f5f', + }, + { + from: 21, + to: 45, + name: 'High', + color: '#f9b931', + }, + { + from: 46, + to: 55, + name: 'Extreme', + color: '#22c55e', + }, + ], + }, + }, + }, + dataLabels: { + enabled: false, + }, + series: [ + { + name: 'Jan', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Feb', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Mar', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Apr', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'May', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Jun', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Jul', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Aug', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + { + name: 'Sep', + data: generateData(20, { + min: -30, + max: 55, + }), + }, + ], + } + + roundedheatmapChart: Partial = { + chart: { + height: 380, + type: 'heatmap', + toolbar: { + show: false, + }, + }, + stroke: { + width: 0, + }, + plotOptions: { + heatmap: { + radius: 30, + enableShades: false, + colorScale: { + ranges: [ + { + from: 0, + to: 50, + color: '#1c84ee', + }, + { + from: 51, + to: 100, + color: '#4ecac2', + }, + ], + }, + }, + }, + colors: ['#1c84ee', '#4ecac2'], + dataLabels: { + enabled: true, + style: { + colors: ['#fff'], + }, + }, + series: [ + { + name: 'Metric1', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric2', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric3', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric4', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric5', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric6', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric7', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric8', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + { + name: 'Metric8', + data: generateData(20, { + min: 0, + max: 90, + }), + }, + ], + + xaxis: { + type: 'category', + }, + grid: { + borderColor: '#f1f3fa', + }, + } +} diff --git a/apiferia/src/app/views/charts/line/line.component.html b/apiferia/src/app/views/charts/line/line.component.html new file mode 100644 index 00000000..c84140ae --- /dev/null +++ b/apiferia/src/app/views/charts/line/line.component.html @@ -0,0 +1,307 @@ + + +
    +
    +
    +
    +
    Overview
    +

    + Find the TS file for the following chart at: + src/app/views/charts/line.component.ts +

    +
    +
    + +
    +
    +

    Simple line chart

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

    + Line with Data Labels +

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

    + Zoomable Timeseries +

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

    + Line Chart with Annotations +

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

    Syncing charts

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

    + Gradient Line Chart +

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

    + Missing / Null values +

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

    Dashed Line Chart

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

    Stepline Chart

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

    Brush Chart

    +
    +
    + + +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/line/line.component.spec.ts b/apiferia/src/app/views/charts/line/line.component.spec.ts new file mode 100644 index 00000000..18541f8a --- /dev/null +++ b/apiferia/src/app/views/charts/line/line.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { LineComponent } from './line.component' + +describe('LineComponent', () => { + let component: LineComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LineComponent], + }).compileComponents() + + fixture = TestBed.createComponent(LineComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/line/line.component.ts b/apiferia/src/app/views/charts/line/line.component.ts new file mode 100644 index 00000000..a2ae6042 --- /dev/null +++ b/apiferia/src/app/views/charts/line/line.component.ts @@ -0,0 +1,2572 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' +const dataSeries = [ + [ + { + date: '2014-01-01', + value: 20000000, + }, + { + date: '2014-01-02', + value: 10379978, + }, + { + date: '2014-01-03', + value: 30493749, + }, + { + date: '2014-01-04', + value: 10785250, + }, + { + date: '2014-01-05', + value: 33901904, + }, + { + date: '2014-01-06', + value: 11576838, + }, + { + date: '2014-01-07', + value: 14413854, + }, + { + date: '2014-01-08', + value: 15177211, + }, + { + date: '2014-01-09', + value: 16622100, + }, + { + date: '2014-01-10', + value: 17381072, + }, + { + date: '2014-01-11', + value: 18802310, + }, + { + date: '2014-01-12', + value: 15531790, + }, + { + date: '2014-01-13', + value: 15748881, + }, + { + date: '2014-01-14', + value: 18706437, + }, + { + date: '2014-01-15', + value: 19752685, + }, + { + date: '2014-01-16', + value: 21016418, + }, + { + date: '2014-01-17', + value: 25622924, + }, + { + date: '2014-01-18', + value: 25337480, + }, + { + date: '2014-01-19', + value: 22258882, + }, + { + date: '2014-01-20', + value: 23829538, + }, + { + date: '2014-01-21', + value: 24245689, + }, + { + date: '2014-01-22', + value: 26429711, + }, + { + date: '2014-01-23', + value: 26259017, + }, + { + date: '2014-01-24', + value: 25396183, + }, + { + date: '2014-01-25', + value: 23107346, + }, + { + date: '2014-01-26', + value: 28659852, + }, + { + date: '2014-01-27', + value: 25270783, + }, + { + date: '2014-01-28', + value: 26270783, + }, + { + date: '2014-01-29', + value: 27270783, + }, + { + date: '2014-01-30', + value: 28270783, + }, + { + date: '2014-01-31', + value: 29270783, + }, + { + date: '2014-02-01', + value: 30270783, + }, + { + date: '2014-02-02', + value: 31270783, + }, + { + date: '2014-02-03', + value: 32270783, + }, + { + date: '2014-02-04', + value: 33270783, + }, + { + date: '2014-02-05', + value: 28270783, + }, + { + date: '2014-02-06', + value: 27270783, + }, + { + date: '2014-02-07', + value: 35270783, + }, + { + date: '2014-02-08', + value: 34270783, + }, + { + date: '2014-02-09', + value: 28270783, + }, + { + date: '2014-02-10', + value: 35270783, + }, + { + date: '2014-02-11', + value: 36270783, + }, + { + date: '2014-02-12', + value: 34127078, + }, + { + date: '2014-02-13', + value: 33124078, + }, + { + date: '2014-02-14', + value: 36227078, + }, + { + date: '2014-02-15', + value: 37827078, + }, + { + date: '2014-02-16', + value: 36427073, + }, + { + date: '2014-02-17', + value: 37570783, + }, + { + date: '2014-02-18', + value: 38627073, + }, + { + date: '2014-02-19', + value: 37727078, + }, + { + date: '2014-02-20', + value: 38827073, + }, + { + date: '2014-02-21', + value: 40927078, + }, + { + date: '2014-02-22', + value: 41027078, + }, + { + date: '2014-02-23', + value: 42127073, + }, + { + date: '2014-02-24', + value: 43220783, + }, + { + date: '2014-02-25', + value: 44327078, + }, + { + date: '2014-02-26', + value: 40427078, + }, + { + date: '2014-02-27', + value: 41027078, + }, + { + date: '2014-02-28', + value: 45627078, + }, + { + date: '2014-03-01', + value: 44727078, + }, + { + date: '2014-03-02', + value: 44227078, + }, + { + date: '2014-03-03', + value: 45227078, + }, + { + date: '2014-03-04', + value: 46027078, + }, + { + date: '2014-03-05', + value: 46927078, + }, + { + date: '2014-03-06', + value: 47027078, + }, + { + date: '2014-03-07', + value: 46227078, + }, + { + date: '2014-03-08', + value: 47027078, + }, + { + date: '2014-03-09', + value: 48027078, + }, + { + date: '2014-03-10', + value: 47027078, + }, + { + date: '2014-03-11', + value: 47027078, + }, + { + date: '2014-03-12', + value: 48017078, + }, + { + date: '2014-03-13', + value: 48077078, + }, + { + date: '2014-03-14', + value: 48087078, + }, + { + date: '2014-03-15', + value: 48017078, + }, + { + date: '2014-03-16', + value: 48047078, + }, + { + date: '2014-03-17', + value: 48067078, + }, + { + date: '2014-03-18', + value: 48077078, + }, + { + date: '2014-03-19', + value: 48027074, + }, + { + date: '2014-03-20', + value: 48927079, + }, + { + date: '2014-03-21', + value: 48727071, + }, + { + date: '2014-03-22', + value: 48127072, + }, + { + date: '2014-03-23', + value: 48527072, + }, + { + date: '2014-03-24', + value: 48627027, + }, + { + date: '2014-03-25', + value: 48027040, + }, + { + date: '2014-03-26', + value: 48027043, + }, + { + date: '2014-03-27', + value: 48057022, + }, + { + date: '2014-03-28', + value: 49057022, + }, + { + date: '2014-03-29', + value: 50057022, + }, + { + date: '2014-03-30', + value: 51057022, + }, + { + date: '2014-03-31', + value: 52057022, + }, + { + date: '2014-04-01', + value: 53057022, + }, + { + date: '2014-04-02', + value: 54057022, + }, + { + date: '2014-04-03', + value: 52057022, + }, + { + date: '2014-04-04', + value: 55057022, + }, + { + date: '2014-04-05', + value: 58270783, + }, + { + date: '2014-04-06', + value: 56270783, + }, + { + date: '2014-04-07', + value: 55270783, + }, + { + date: '2014-04-08', + value: 58270783, + }, + { + date: '2014-04-09', + value: 59270783, + }, + { + date: '2014-04-10', + value: 60270783, + }, + { + date: '2014-04-11', + value: 61270783, + }, + { + date: '2014-04-12', + value: 62270783, + }, + { + date: '2014-04-13', + value: 63270783, + }, + { + date: '2014-04-14', + value: 64270783, + }, + { + date: '2014-04-15', + value: 65270783, + }, + { + date: '2014-04-16', + value: 66270783, + }, + { + date: '2014-04-17', + value: 67270783, + }, + { + date: '2014-04-18', + value: 68270783, + }, + { + date: '2014-04-19', + value: 69270783, + }, + { + date: '2014-04-20', + value: 70270783, + }, + { + date: '2014-04-21', + value: 71270783, + }, + { + date: '2014-04-22', + value: 72270783, + }, + { + date: '2014-04-23', + value: 73270783, + }, + { + date: '2014-04-24', + value: 74270783, + }, + { + date: '2014-04-25', + value: 75270783, + }, + { + date: '2014-04-26', + value: 76660783, + }, + { + date: '2014-04-27', + value: 77270783, + }, + { + date: '2014-04-28', + value: 78370783, + }, + { + date: '2014-04-29', + value: 79470783, + }, + { + date: '2014-04-30', + value: 80170783, + }, + ], + [ + { + date: '2014-01-01', + value: 150000000, + }, + { + date: '2014-01-02', + value: 160379978, + }, + { + date: '2014-01-03', + value: 170493749, + }, + { + date: '2014-01-04', + value: 160785250, + }, + { + date: '2014-01-05', + value: 167391904, + }, + { + date: '2014-01-06', + value: 161576838, + }, + { + date: '2014-01-07', + value: 161413854, + }, + { + date: '2014-01-08', + value: 152177211, + }, + { + date: '2014-01-09', + value: 140762210, + }, + { + date: '2014-01-10', + value: 144381072, + }, + { + date: '2014-01-11', + value: 154352310, + }, + { + date: '2014-01-12', + value: 165531790, + }, + { + date: '2014-01-13', + value: 175748881, + }, + { + date: '2014-01-14', + value: 187064037, + }, + { + date: '2014-01-15', + value: 197520685, + }, + { + date: '2014-01-16', + value: 210176418, + }, + { + date: '2014-01-17', + value: 196122924, + }, + { + date: '2014-01-18', + value: 207337480, + }, + { + date: '2014-01-19', + value: 200258882, + }, + { + date: '2014-01-20', + value: 186829538, + }, + { + date: '2014-01-21', + value: 192456897, + }, + { + date: '2014-01-22', + value: 204299711, + }, + { + date: '2014-01-23', + value: 192759017, + }, + { + date: '2014-01-24', + value: 203596183, + }, + { + date: '2014-01-25', + value: 208107346, + }, + { + date: '2014-01-26', + value: 196359852, + }, + { + date: '2014-01-27', + value: 192570783, + }, + { + date: '2014-01-28', + value: 177967768, + }, + { + date: '2014-01-29', + value: 190632803, + }, + { + date: '2014-01-30', + value: 203725316, + }, + { + date: '2014-01-31', + value: 218226177, + }, + { + date: '2014-02-01', + value: 210698669, + }, + { + date: '2014-02-02', + value: 217640656, + }, + { + date: '2014-02-03', + value: 216142362, + }, + { + date: '2014-02-04', + value: 201410971, + }, + { + date: '2014-02-05', + value: 196704289, + }, + { + date: '2014-02-06', + value: 190436945, + }, + { + date: '2014-02-07', + value: 178891686, + }, + { + date: '2014-02-08', + value: 171613962, + }, + { + date: '2014-02-09', + value: 157579773, + }, + { + date: '2014-02-10', + value: 158677098, + }, + { + date: '2014-02-11', + value: 147129977, + }, + { + date: '2014-02-12', + value: 151561876, + }, + { + date: '2014-02-13', + value: 151627421, + }, + { + date: '2014-02-14', + value: 143543872, + }, + { + date: '2014-02-15', + value: 136581057, + }, + { + date: '2014-02-16', + value: 135560715, + }, + { + date: '2014-02-17', + value: 122625263, + }, + { + date: '2014-02-18', + value: 112091484, + }, + { + date: '2014-02-19', + value: 98810329, + }, + { + date: '2014-02-20', + value: 99882912, + }, + { + date: '2014-02-21', + value: 94943095, + }, + { + date: '2014-02-22', + value: 104875743, + }, + { + date: '2014-02-23', + value: 116383678, + }, + { + date: '2014-02-24', + value: 125028841, + }, + { + date: '2014-02-25', + value: 123967310, + }, + { + date: '2014-02-26', + value: 133167029, + }, + { + date: '2014-02-27', + value: 128577263, + }, + { + date: '2014-02-28', + value: 115836969, + }, + { + date: '2014-03-01', + value: 119264529, + }, + { + date: '2014-03-02', + value: 109363374, + }, + { + date: '2014-03-03', + value: 113985628, + }, + { + date: '2014-03-04', + value: 114650999, + }, + { + date: '2014-03-05', + value: 110866108, + }, + { + date: '2014-03-06', + value: 96473454, + }, + { + date: '2014-03-07', + value: 104075886, + }, + { + date: '2014-03-08', + value: 103568384, + }, + { + date: '2014-03-09', + value: 101534883, + }, + { + date: '2014-03-10', + value: 115825447, + }, + { + date: '2014-03-11', + value: 126133916, + }, + { + date: '2014-03-12', + value: 116502109, + }, + { + date: '2014-03-13', + value: 130169411, + }, + { + date: '2014-03-14', + value: 124296886, + }, + { + date: '2014-03-15', + value: 126347399, + }, + { + date: '2014-03-16', + value: 131483669, + }, + { + date: '2014-03-17', + value: 142811333, + }, + { + date: '2014-03-18', + value: 129675396, + }, + { + date: '2014-03-19', + value: 115514483, + }, + { + date: '2014-03-20', + value: 117630630, + }, + { + date: '2014-03-21', + value: 122340239, + }, + { + date: '2014-03-22', + value: 132349091, + }, + { + date: '2014-03-23', + value: 125613305, + }, + { + date: '2014-03-24', + value: 135592466, + }, + { + date: '2014-03-25', + value: 123408762, + }, + { + date: '2014-03-26', + value: 111991454, + }, + { + date: '2014-03-27', + value: 116123955, + }, + { + date: '2014-03-28', + value: 112817214, + }, + { + date: '2014-03-29', + value: 113029590, + }, + { + date: '2014-03-30', + value: 108753398, + }, + { + date: '2014-03-31', + value: 99383763, + }, + { + date: '2014-04-01', + value: 100151737, + }, + { + date: '2014-04-02', + value: 94985209, + }, + { + date: '2014-04-03', + value: 82913669, + }, + { + date: '2014-04-04', + value: 78748268, + }, + { + date: '2014-04-05', + value: 63829135, + }, + { + date: '2014-04-06', + value: 78694727, + }, + { + date: '2014-04-07', + value: 80868994, + }, + { + date: '2014-04-08', + value: 93799013, + }, + { + date: '2014-04-09', + value: 99042416, + }, + { + date: '2014-04-10', + value: 97298692, + }, + { + date: '2014-04-11', + value: 83353499, + }, + { + date: '2014-04-12', + value: 71248129, + }, + { + date: '2014-04-13', + value: 75253744, + }, + { + date: '2014-04-14', + value: 68976648, + }, + { + date: '2014-04-15', + value: 71002284, + }, + { + date: '2014-04-16', + value: 75052401, + }, + { + date: '2014-04-17', + value: 83894030, + }, + { + date: '2014-04-18', + value: 90236528, + }, + { + date: '2014-04-19', + value: 99739114, + }, + { + date: '2014-04-20', + value: 96407136, + }, + { + date: '2014-04-21', + value: 108323177, + }, + { + date: '2014-04-22', + value: 101578914, + }, + { + date: '2014-04-23', + value: 115877608, + }, + { + date: '2014-04-24', + value: 112088857, + }, + { + date: '2014-04-25', + value: 112071353, + }, + { + date: '2014-04-26', + value: 101790062, + }, + { + date: '2014-04-27', + value: 115003761, + }, + { + date: '2014-04-28', + value: 120457727, + }, + { + date: '2014-04-29', + value: 118253926, + }, + { + date: '2014-04-30', + value: 117956992, + }, + ], + [ + { + date: '2014-01-01', + value: 50000000, + }, + { + date: '2014-01-02', + value: 60379978, + }, + { + date: '2014-01-03', + value: 40493749, + }, + { + date: '2014-01-04', + value: 60785250, + }, + { + date: '2014-01-05', + value: 67391904, + }, + { + date: '2014-01-06', + value: 61576838, + }, + { + date: '2014-01-07', + value: 61413854, + }, + { + date: '2014-01-08', + value: 82177211, + }, + { + date: '2014-01-09', + value: 103762210, + }, + { + date: '2014-01-10', + value: 84381072, + }, + { + date: '2014-01-11', + value: 54352310, + }, + { + date: '2014-01-12', + value: 65531790, + }, + { + date: '2014-01-13', + value: 75748881, + }, + { + date: '2014-01-14', + value: 47064037, + }, + { + date: '2014-01-15', + value: 67520685, + }, + { + date: '2014-01-16', + value: 60176418, + }, + { + date: '2014-01-17', + value: 66122924, + }, + { + date: '2014-01-18', + value: 57337480, + }, + { + date: '2014-01-19', + value: 100258882, + }, + { + date: '2014-01-20', + value: 46829538, + }, + { + date: '2014-01-21', + value: 92456897, + }, + { + date: '2014-01-22', + value: 94299711, + }, + { + date: '2014-01-23', + value: 62759017, + }, + { + date: '2014-01-24', + value: 103596183, + }, + { + date: '2014-01-25', + value: 108107346, + }, + { + date: '2014-01-26', + value: 66359852, + }, + { + date: '2014-01-27', + value: 62570783, + }, + { + date: '2014-01-28', + value: 77967768, + }, + { + date: '2014-01-29', + value: 60632803, + }, + { + date: '2014-01-30', + value: 103725316, + }, + { + date: '2014-01-31', + value: 98226177, + }, + { + date: '2014-02-01', + value: 60698669, + }, + { + date: '2014-02-02', + value: 67640656, + }, + { + date: '2014-02-03', + value: 66142362, + }, + { + date: '2014-02-04', + value: 101410971, + }, + { + date: '2014-02-05', + value: 66704289, + }, + { + date: '2014-02-06', + value: 60436945, + }, + { + date: '2014-02-07', + value: 78891686, + }, + { + date: '2014-02-08', + value: 71613962, + }, + { + date: '2014-02-09', + value: 107579773, + }, + { + date: '2014-02-10', + value: 58677098, + }, + { + date: '2014-02-11', + value: 87129977, + }, + { + date: '2014-02-12', + value: 51561876, + }, + { + date: '2014-02-13', + value: 51627421, + }, + { + date: '2014-02-14', + value: 83543872, + }, + { + date: '2014-02-15', + value: 66581057, + }, + { + date: '2014-02-16', + value: 65560715, + }, + { + date: '2014-02-17', + value: 62625263, + }, + { + date: '2014-02-18', + value: 92091484, + }, + { + date: '2014-02-19', + value: 48810329, + }, + { + date: '2014-02-20', + value: 49882912, + }, + { + date: '2014-02-21', + value: 44943095, + }, + { + date: '2014-02-22', + value: 104875743, + }, + { + date: '2014-02-23', + value: 96383678, + }, + { + date: '2014-02-24', + value: 105028841, + }, + { + date: '2014-02-25', + value: 63967310, + }, + { + date: '2014-02-26', + value: 63167029, + }, + { + date: '2014-02-27', + value: 68577263, + }, + { + date: '2014-02-28', + value: 95836969, + }, + { + date: '2014-03-01', + value: 99264529, + }, + { + date: '2014-03-02', + value: 109363374, + }, + { + date: '2014-03-03', + value: 93985628, + }, + { + date: '2014-03-04', + value: 94650999, + }, + { + date: '2014-03-05', + value: 90866108, + }, + { + date: '2014-03-06', + value: 46473454, + }, + { + date: '2014-03-07', + value: 84075886, + }, + { + date: '2014-03-08', + value: 103568384, + }, + { + date: '2014-03-09', + value: 101534883, + }, + { + date: '2014-03-10', + value: 95825447, + }, + { + date: '2014-03-11', + value: 66133916, + }, + { + date: '2014-03-12', + value: 96502109, + }, + { + date: '2014-03-13', + value: 80169411, + }, + { + date: '2014-03-14', + value: 84296886, + }, + { + date: '2014-03-15', + value: 86347399, + }, + { + date: '2014-03-16', + value: 31483669, + }, + { + date: '2014-03-17', + value: 82811333, + }, + { + date: '2014-03-18', + value: 89675396, + }, + { + date: '2014-03-19', + value: 95514483, + }, + { + date: '2014-03-20', + value: 97630630, + }, + { + date: '2014-03-21', + value: 62340239, + }, + { + date: '2014-03-22', + value: 62349091, + }, + { + date: '2014-03-23', + value: 65613305, + }, + { + date: '2014-03-24', + value: 65592466, + }, + { + date: '2014-03-25', + value: 63408762, + }, + { + date: '2014-03-26', + value: 91991454, + }, + { + date: '2014-03-27', + value: 96123955, + }, + { + date: '2014-03-28', + value: 92817214, + }, + { + date: '2014-03-29', + value: 93029590, + }, + { + date: '2014-03-30', + value: 108753398, + }, + { + date: '2014-03-31', + value: 49383763, + }, + { + date: '2014-04-01', + value: 100151737, + }, + { + date: '2014-04-02', + value: 44985209, + }, + { + date: '2014-04-03', + value: 52913669, + }, + { + date: '2014-04-04', + value: 48748268, + }, + { + date: '2014-04-05', + value: 23829135, + }, + { + date: '2014-04-06', + value: 58694727, + }, + { + date: '2014-04-07', + value: 50868994, + }, + { + date: '2014-04-08', + value: 43799013, + }, + { + date: '2014-04-09', + value: 4042416, + }, + { + date: '2014-04-10', + value: 47298692, + }, + { + date: '2014-04-11', + value: 53353499, + }, + { + date: '2014-04-12', + value: 71248129, + }, + { + date: '2014-04-13', + value: 75253744, + }, + { + date: '2014-04-14', + value: 68976648, + }, + { + date: '2014-04-15', + value: 71002284, + }, + { + date: '2014-04-16', + value: 75052401, + }, + { + date: '2014-04-17', + value: 83894030, + }, + { + date: '2014-04-18', + value: 50236528, + }, + { + date: '2014-04-19', + value: 59739114, + }, + { + date: '2014-04-20', + value: 56407136, + }, + { + date: '2014-04-21', + value: 108323177, + }, + { + date: '2014-04-22', + value: 101578914, + }, + { + date: '2014-04-23', + value: 95877608, + }, + { + date: '2014-04-24', + value: 62088857, + }, + { + date: '2014-04-25', + value: 92071353, + }, + { + date: '2014-04-26', + value: 81790062, + }, + { + date: '2014-04-27', + value: 105003761, + }, + { + date: '2014-04-28', + value: 100457727, + }, + { + date: '2014-04-29', + value: 98253926, + }, + { + date: '2014-04-30', + value: 67956992, + }, + ], +] + +const series = { + monthDataSeries1: { + prices: [ + 8107.85, 8128.0, 8122.9, 8165.5, 8340.7, 8423.7, 8423.5, 8514.3, 8481.85, + 8487.7, 8506.9, 8626.2, 8668.95, 8602.3, 8607.55, 8512.9, 8496.25, + 8600.65, 8881.1, 9340.85, + ], + dates: [ + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + '29 Nov 2017', + '30 Nov 2017', + '01 Dec 2017', + '04 Dec 2017', + '05 Dec 2017', + '06 Dec 2017', + '07 Dec 2017', + '08 Dec 2017', + ], + }, + monthDataSeries2: { + prices: [ + 8423.7, 8423.5, 8514.3, 8481.85, 8487.7, 8506.9, 8626.2, 8668.95, 8602.3, + 8607.55, 8512.9, 8496.25, 8600.65, 8881.1, 9040.85, 8340.7, 8165.5, + 8122.9, 8107.85, 8128.0, + ], + dates: [ + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + '29 Nov 2017', + '30 Nov 2017', + '01 Dec 2017', + '04 Dec 2017', + '05 Dec 2017', + '06 Dec 2017', + '07 Dec 2017', + '08 Dec 2017', + ], + }, + monthDataSeries3: { + prices: [ + 7114.25, 7126.6, 7116.95, 7203.7, 7233.75, 7451.0, 7381.15, 7348.95, + 7347.75, 7311.25, 7266.4, 7253.25, 7215.45, 7266.35, 7315.25, 7237.2, + 7191.4, 7238.95, 7222.6, 7217.9, 7359.3, 7371.55, 7371.15, 7469.2, + 7429.25, 7434.65, 7451.1, 7475.25, 7566.25, 7556.8, 7525.55, 7555.45, + 7560.9, 7490.7, 7527.6, 7551.9, 7514.85, 7577.95, 7592.3, 7621.95, + 7707.95, 7859.1, 7815.7, 7739.0, 7778.7, 7839.45, 7756.45, 7669.2, + 7580.45, 7452.85, 7617.25, 7701.6, 7606.8, 7620.05, 7513.85, 7498.45, + 7575.45, 7601.95, 7589.1, 7525.85, 7569.5, 7702.5, 7812.7, 7803.75, + 7816.3, 7851.15, 7912.2, 7972.8, 8145.0, 8161.1, 8121.05, 8071.25, 8088.2, + 8154.45, 8148.3, 8122.05, 8132.65, 8074.55, 7952.8, 7885.55, 7733.9, + 7897.15, 7973.15, 7888.5, 7842.8, 7838.4, 7909.85, 7892.75, 7897.75, + 7820.05, 7904.4, 7872.2, 7847.5, 7849.55, 7789.6, 7736.35, 7819.4, + 7875.35, 7871.8, 8076.5, 8114.8, 8193.55, 8217.1, 8235.05, 8215.3, 8216.4, + 8301.55, 8235.25, 8229.75, 8201.95, 8164.95, 8107.85, 8128.0, 8122.9, + 8165.5, 8340.7, 8423.7, 8423.5, 8514.3, 8481.85, 8487.7, 8506.9, 8626.2, + ], + dates: [ + '02 Jun 2017', + '05 Jun 2017', + '06 Jun 2017', + '07 Jun 2017', + '08 Jun 2017', + '09 Jun 2017', + '12 Jun 2017', + '13 Jun 2017', + '14 Jun 2017', + '15 Jun 2017', + '16 Jun 2017', + '19 Jun 2017', + '20 Jun 2017', + '21 Jun 2017', + '22 Jun 2017', + '23 Jun 2017', + '27 Jun 2017', + '28 Jun 2017', + '29 Jun 2017', + '30 Jun 2017', + '03 Jul 2017', + '04 Jul 2017', + '05 Jul 2017', + '06 Jul 2017', + '07 Jul 2017', + '10 Jul 2017', + '11 Jul 2017', + '12 Jul 2017', + '13 Jul 2017', + '14 Jul 2017', + '17 Jul 2017', + '18 Jul 2017', + '19 Jul 2017', + '20 Jul 2017', + '21 Jul 2017', + '24 Jul 2017', + '25 Jul 2017', + '26 Jul 2017', + '27 Jul 2017', + '28 Jul 2017', + '31 Jul 2017', + '01 Aug 2017', + '02 Aug 2017', + '03 Aug 2017', + '04 Aug 2017', + '07 Aug 2017', + '08 Aug 2017', + '09 Aug 2017', + '10 Aug 2017', + '11 Aug 2017', + '14 Aug 2017', + '16 Aug 2017', + '17 Aug 2017', + '18 Aug 2017', + '21 Aug 2017', + '22 Aug 2017', + '23 Aug 2017', + '24 Aug 2017', + '28 Aug 2017', + '29 Aug 2017', + '30 Aug 2017', + '31 Aug 2017', + '01 Sep 2017', + '04 Sep 2017', + '05 Sep 2017', + '06 Sep 2017', + '07 Sep 2017', + '08 Sep 2017', + '11 Sep 2017', + '12 Sep 2017', + '13 Sep 2017', + '14 Sep 2017', + '15 Sep 2017', + '18 Sep 2017', + '19 Sep 2017', + '20 Sep 2017', + '21 Sep 2017', + '22 Sep 2017', + '25 Sep 2017', + '26 Sep 2017', + '27 Sep 2017', + '28 Sep 2017', + '29 Sep 2017', + '03 Oct 2017', + '04 Oct 2017', + '05 Oct 2017', + '06 Oct 2017', + '09 Oct 2017', + '10 Oct 2017', + '11 Oct 2017', + '12 Oct 2017', + '13 Oct 2017', + '16 Oct 2017', + '17 Oct 2017', + '18 Oct 2017', + '19 Oct 2017', + '23 Oct 2017', + '24 Oct 2017', + '25 Oct 2017', + '26 Oct 2017', + '27 Oct 2017', + '30 Oct 2017', + '31 Oct 2017', + '01 Nov 2017', + '02 Nov 2017', + '03 Nov 2017', + '06 Nov 2017', + '07 Nov 2017', + '08 Nov 2017', + '09 Nov 2017', + '10 Nov 2017', + '13 Nov 2017', + '14 Nov 2017', + '15 Nov 2017', + '16 Nov 2017', + '17 Nov 2017', + '20 Nov 2017', + '21 Nov 2017', + '22 Nov 2017', + '23 Nov 2017', + '24 Nov 2017', + '27 Nov 2017', + '28 Nov 2017', + ], + }, +} + +let ts2 = 1484418600000 +let dates: number[][] = [] +let spikes = [5, -5, 3, -3, 8, -8] +for (let i = 0; i < 120; i++) { + ts2 = ts2 + 86400000 + let innerArr = [ts2, dataSeries[1][i].value] + dates.push(innerArr) +} + +function generateDayWiseTimeSeries( + baseval: number, + count: number, + yrange: { min: number; max: number } +) { + var i = 0 + var series = [] + while (i < count) { + var x = baseval + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + + series.push([x, y]) + baseval += 86400000 + i++ + } + return series +} +@Component({ + selector: 'app-line', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './line.component.html', + styles: ``, +}) +export class LineComponent { + lineChart: Partial = { + chart: { + height: 380, + type: 'line', + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + colors: ['#7f56da'], + stroke: { + width: [4], + curve: 'straight', + }, + series: [ + { + name: 'Desktops', + data: [30, 41, 35, 51, 49, 62, 69, 91, 126], + }, + ], + title: { + text: 'Product Trends by Month', + align: 'center', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + labels: series.monthDataSeries1.dates, + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + ], + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + datalabellineChart: Partial = { + chart: { + height: 380, + type: 'line', + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + colors: ['#ef5f5f', '#22c55e'], + dataLabels: { + enabled: true, + }, + stroke: { + width: [3, 3], + curve: 'smooth', + }, + series: [ + { + name: 'High - 2018', + data: [28, 29, 33, 36, 32, 32, 33], + }, + { + name: 'Low - 2018', + data: [12, 11, 14, 18, 17, 13, 13], + }, + ], + title: { + text: 'Average High & Low Temperature', + align: 'left', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + markers: { + size: 6, + }, + xaxis: { + categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul'], + title: { + text: 'Month', + }, + }, + yaxis: { + title: { + text: 'Temperature', + }, + min: 5, + max: 40, + }, + legend: { + position: 'top', + horizontalAlign: 'right', + floating: true, + offsetY: -25, + offsetX: -5, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + zoomablelineChart: Partial = { + chart: { + type: 'area', + stacked: false, + height: 380, + zoom: { + enabled: true, + }, + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: [3], + }, + series: [ + { + name: 'XYZ MOTORS', + data: dates, + }, + ], + markers: { + size: 0, + }, + colors: ['#7f56da'], + title: { + text: 'Stock Price Movement', + align: 'left', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + fill: { + gradient: { + shadeIntensity: 1, + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0.1, + stops: [0, 70, 80, 100], + }, + }, + yaxis: { + min: 20000000, + max: 250000000, + labels: { + formatter: function (val) { + return (val / 1000000).toFixed(0) + }, + }, + title: { + text: 'Price', + }, + }, + xaxis: { + type: 'datetime', + }, + + tooltip: { + shared: false, + y: { + formatter: function (val) { + return (val / 1000000).toFixed(0) + }, + }, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + annotationslineChart: Partial = { + annotations: { + yaxis: [ + { + y: 8200, + borderColor: '#f9b931', + label: { + borderColor: '#f9b931', + style: { + color: '#fff', + background: '#f9b931', + }, + text: 'Support', + }, + }, + ], + xaxis: [ + { + x: new Date('23 Nov 2017').getTime(), + borderColor: '#1c84ee', + label: { + borderColor: '#1c84ee', + style: { + color: '#fff', + background: '#1c84ee', + }, + text: 'Anno Test', + }, + }, + { + x: new Date('03 Dec 2017').getTime(), + borderColor: '#ffbc00', + label: { + borderColor: '#ffbc00', + style: { + color: '#fff', + background: '#ffbc00', + }, + orientation: 'horizontal', + text: 'New Beginning', + }, + }, + ], + points: [ + { + x: new Date('27 Nov 2017').getTime(), + y: 8506.9, + marker: { + size: 8, + fillColor: '#fff', + strokeColor: '#fa5c7c', + }, + label: { + borderColor: '#fa5c7c', + offsetY: 0, + style: { + color: '#fff', + background: '#fa5c7c', + }, + + text: 'Point Annotation', + }, + }, + ], + }, + chart: { + height: 380, + type: 'line', + id: 'areachart-2', + toolbar: { + show: false, + }, + }, + colors: ['#ef5f5f'], + dataLabels: { + enabled: false, + }, + stroke: { + width: [3], + curve: 'straight', + }, + series: [ + { + data: series.monthDataSeries1.prices, + }, + ], + title: { + text: 'Line with Annotations', + align: 'left', + }, + labels: series.monthDataSeries1.dates, + xaxis: { + type: 'datetime', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + syncinglineChart: Partial = { + chart: { + type: 'line', + height: 160, + id: 'fb', + group: 'social', + toolbar: { + show: false, + tools: { + selection: false, + }, + }, + }, + colors: ['#1c84ee'], + stroke: { + width: [3], + curve: 'straight', + }, + + fill: { + opacity: 1, + }, + tooltip: { + followCursor: false, + theme: 'dark', + x: { + show: false, + }, + marker: { + show: false, + }, + y: { + title: { + formatter: function () { + return '' + }, + }, + }, + }, + series: [ + { + data: generateDayWiseTimeSeries(new Date('11 Feb 2017').getTime(), 20, { + min: 10, + max: 30, + }), + }, + ], + xaxis: { + type: 'datetime', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + syncing2lineChart: Partial = { + chart: { + height: 200, + type: 'line', + id: 'yt', + group: 'social', + toolbar: { + show: false, + tools: { + selection: false, + }, + }, + }, + colors: ['#4ecac2'], + dataLabels: { + enabled: false, + }, + + tooltip: { + followCursor: false, + theme: 'dark', + x: { + show: false, + }, + marker: { + show: false, + }, + y: { + title: { + formatter: function () { + return '' + }, + }, + }, + }, + stroke: { + width: [3], + curve: 'smooth', + }, + + series: [ + { + data: generateDayWiseTimeSeries(new Date('11 Feb 2017').getTime(), 20, { + min: 10, + max: 60, + }), + }, + ], + fill: { + gradient: { + opacityFrom: 0.6, + opacityTo: 0.8, + }, + }, + legend: { + position: 'top', + horizontalAlign: 'left', + }, + xaxis: { + type: 'datetime', + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + } + + gradientlineChart: Partial = { + chart: { + height: 374, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + width: 5, + curve: 'smooth', + }, + series: [ + { + name: 'Likes', + data: [4, 3, 10, 9, 29, 19, 22, 9, 12, 7, 19, 5, 13, 9, 17, 2, 7, 5], + }, + ], + xaxis: { + type: 'datetime', + categories: [ + '1/11/2000', + '2/11/2000', + '3/11/2000', + '4/11/2000', + '5/11/2000', + '6/11/2000', + '7/11/2000', + '8/11/2000', + '9/11/2000', + '10/11/2000', + '11/11/2000', + '12/11/2000', + '1/11/2001', + '2/11/2001', + '3/11/2001', + '4/11/2001', + '5/11/2001', + '6/11/2001', + ], + }, + title: { + text: 'Social Media', + align: 'left', + style: { + fontSize: '16px', + color: '#666', + }, + }, + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + gradientToColors: ['#fa5c7c'], + shadeIntensity: 1, + type: 'horizontal', + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100, 100, 100], + }, + }, + markers: { + size: 4, + colors: ['#ffbc00'], + strokeWidth: 2, + hover: { + size: 7, + }, + }, + yaxis: { + min: -10, + max: 40, + title: { + text: 'Engagement', + }, + }, + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + missinglineChart: Partial = { + chart: { + height: 380, + type: 'line', + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + animations: { + enabled: false, + }, + }, + stroke: { + width: [5, 5, 4], + curve: 'straight', + }, + + series: [ + { + name: 'Peter', + data: [5, 5, 10, 8, 7, 5, 4, null, null, null, 10, 10, 7, 8, 6, 9], + }, + { + name: 'Johnny', + data: [ + 10, + 15, + null, + 12, + null, + 10, + 12, + 15, + null, + null, + 12, + null, + 14, + null, + null, + null, + ], + }, + { + name: 'David', + data: [ + null, + null, + null, + null, + 3, + 4, + 1, + 3, + 4, + 6, + 7, + 9, + 5, + null, + null, + null, + ], + }, + ], + colors: ['#1c84ee', '#ef5f5f', '#4ecac2'], + labels: [ + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + '10', + '11', + '12', + '13', + '14', + '15', + '16', + ], + grid: { + row: { + colors: ['transparent', 'transparent'], // takes an array which will be repeated on columns + opacity: 0.2, + }, + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + legend: { + offsetY: 7, + }, + } + + dashedlineChart: Partial = { + chart: { + height: 380, + type: 'line', + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: [3, 5, 3], + curve: 'straight', + dashArray: [0, 8, 5], + }, + 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], + }, + ], + markers: { + size: 0, + }, + xaxis: { + 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', + ], + }, + colors: ['#1c84ee', '#ef5f5f', '#4ecac2'], + tooltip: { + y: { + title: { + formatter: function (val) { + if (val === 'Session Duration') return val + ' (mins)' + else if (val === 'Page Views') return val + ' per session' + return val + }, + }, + }, + }, + grid: { + borderColor: '#f1f3fa', + }, + legend: { + offsetY: 7, + }, + } + + steplineChart: Partial = { + chart: { + type: 'line', + height: 344, + toolbar: { + show: false, + }, + }, + stroke: { + curve: 'stepline', + }, + dataLabels: { + enabled: false, + }, + series: [ + { + data: [34, 44, 54, 21, 12, 43, 33, 23, 66, 66, 58], + }, + ], + colors: ['#ff6c2f'], + title: { + text: 'Stepline Chart', + align: 'left', + }, + markers: { + hover: { + sizeOffset: 4, + }, + }, + } + + brushlineChart: Partial = { + series: [ + { + data: generateDayWiseTimeSeries( + new Date('11 Feb 2017').getTime(), + 185, + { + min: 30, + max: 90, + } + ), + }, + ], + chart: { + id: 'chart2', + type: 'line', + height: 230, + toolbar: { + autoSelected: 'pan', + show: false, + }, + }, + colors: ['#1c84ee'], + stroke: { + width: 3, + }, + dataLabels: { + enabled: false, + }, + fill: { + opacity: 1, + }, + markers: { + size: 0, + }, + xaxis: { + type: 'datetime', + }, + } + + brushline2Chart: Partial = { + series: [ + { + data: generateDayWiseTimeSeries( + new Date('11 Feb 2017').getTime(), + 185, + { + min: 30, + max: 90, + } + ), + }, + ], + chart: { + id: 'chart1', + height: 130, + type: 'area', + toolbar: { + show: false, + }, + brush: { + target: 'chart2', + enabled: true, + }, + selection: { + enabled: true, + xaxis: { + min: new Date('19 Jun 2017').getTime(), + max: new Date('14 Aug 2017').getTime(), + }, + }, + }, + colors: ['#1c84ee'], + fill: { + type: 'gradient', + gradient: { + opacityFrom: 0.91, + opacityTo: 0.1, + }, + }, + xaxis: { + type: 'datetime', + tooltip: { + enabled: false, + }, + }, + yaxis: { + tickAmount: 2, + }, + } +} diff --git a/apiferia/src/app/views/charts/mixed/mixed.component.html b/apiferia/src/app/views/charts/mixed/mixed.component.html new file mode 100644 index 00000000..781f5297 --- /dev/null +++ b/apiferia/src/app/views/charts/mixed/mixed.component.html @@ -0,0 +1,137 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/mixed.component.ts +

    +
    +
    + +
    +
    +

    + Line & Column Chart +

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

    + Multiple Y-Axis Chart +

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

    Line & Area Chart

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

    + Line, Column & Area Chart +

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/mixed/mixed.component.spec.ts b/apiferia/src/app/views/charts/mixed/mixed.component.spec.ts new file mode 100644 index 00000000..f923dd1a --- /dev/null +++ b/apiferia/src/app/views/charts/mixed/mixed.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MixedComponent } from './mixed.component' + +describe('MixedComponent', () => { + let component: MixedComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MixedComponent], + }).compileComponents() + + fixture = TestBed.createComponent(MixedComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/mixed/mixed.component.ts b/apiferia/src/app/views/charts/mixed/mixed.component.ts new file mode 100644 index 00000000..17c74a36 --- /dev/null +++ b/apiferia/src/app/views/charts/mixed/mixed.component.ts @@ -0,0 +1,395 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-mixed', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './mixed.component.html', + styles: ``, +}) +export class MixedComponent { + lineMixedChart: Partial = { + chart: { + height: 380, + type: 'line', + toolbar: { + show: false, + }, + }, + series: [ + { + name: 'Website Blog', + type: 'column', + data: [440, 505, 414, 671, 227, 413, 201, 352, 752, 320, 257, 160], + }, + { + name: 'Social Media', + type: 'line', + data: [23, 42, 35, 27, 43, 22, 17, 31, 22, 22, 12, 16], + }, + ], + stroke: { + width: [0, 4], + }, + labels: [ + '01 Jan 2001', + '02 Jan 2001', + '03 Jan 2001', + '04 Jan 2001', + '05 Jan 2001', + '06 Jan 2001', + '07 Jan 2001', + '08 Jan 2001', + '09 Jan 2001', + '10 Jan 2001', + '11 Jan 2001', + '12 Jan 2001', + ], + xaxis: { + type: 'datetime', + }, + colors: ['#1c84ee', '#4ecac2'], + yaxis: [ + { + title: { + text: 'Website Blog', + }, + }, + { + opposite: true, + title: { + text: 'Social Media', + }, + }, + ], + legend: { + offsetY: 7, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } + + multipleMixedChart: Partial = { + chart: { + height: 380, + type: 'line', + stacked: false, + toolbar: { + show: false, + }, + }, + dataLabels: { + enabled: false, + }, + stroke: { + width: [0, 0, 3], + }, + series: [ + { + name: 'Income', + type: 'column', + data: [1.4, 2, 2.5, 1.5, 2.5, 2.8, 3.8, 4.6], + }, + { + name: 'Cashflow', + type: 'column', + data: [1.1, 3, 3.1, 4, 4.1, 4.9, 6.5, 8.5], + }, + { + name: 'Revenue', + type: 'line', + data: [20, 29, 37, 36, 44, 45, 50, 58], + }, + ], + colors: ['#1c84ee', '#4ecac2', '#f9b931'], + xaxis: { + categories: [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016], + }, + yaxis: [ + { + axisTicks: { + show: true, + }, + axisBorder: { + show: true, + color: '#727cf5', + }, + labels: { + // style: { + // color: '#727cf5', + // }, + }, + title: { + text: 'Income (thousand crores)', + }, + }, + + { + axisTicks: { + show: true, + }, + axisBorder: { + show: true, + color: '#4ecac2', + }, + labels: { + style: { + colors: '#39afd1', + }, + offsetX: 10, + }, + title: { + text: 'Operating Cashflow (thousand crores)', + }, + }, + { + opposite: true, + axisTicks: { + show: true, + }, + axisBorder: { + show: true, + color: '#fa5c7c', + }, + labels: { + style: { + colors: '#fa5c7c', + }, + }, + title: { + text: 'Revenue (thousand crores)', + }, + }, + ], + tooltip: { + followCursor: true, + y: { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y + ' thousand crores' + } + return y + }, + }, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + legend: { + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + yaxis: { + show: false, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + lineareaChart: Partial = { + chart: { + height: 380, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + curve: 'smooth', + width: 2, + }, + series: [ + { + name: 'Team A', + type: 'area', + data: [44, 55, 31, 47, 31, 43, 26, 41, 31, 47, 33], + }, + { + name: 'Team B', + type: 'line', + data: [55, 69, 45, 61, 43, 54, 37, 52, 44, 61, 43], + }, + ], + fill: { + type: 'solid', + opacity: [0.35, 1], + }, + labels: [ + 'Dec 01', + 'Dec 02', + 'Dec 03', + 'Dec 04', + 'Dec 05', + 'Dec 06', + 'Dec 07', + 'Dec 08', + 'Dec 09 ', + 'Dec 10', + 'Dec 11', + ], + markers: { + size: 0, + }, + legend: { + offsetY: 7, + }, + colors: ['#4ecac2', '#1c84ee'], + + yaxis: [ + { + title: { + text: 'Series A', + }, + }, + { + opposite: true, + title: { + text: 'Series B', + }, + }, + ], + tooltip: { + shared: true, + intersect: false, + y: { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(0) + ' points' + } + return y + }, + }, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + responsive: [ + { + breakpoint: 600, + options: { + yaxis: { + show: false, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + linecolumnareaChart: Partial = { + chart: { + height: 380, + type: 'line', + stacked: false, + toolbar: { + show: false, + }, + }, + stroke: { + width: [0, 2, 4], + curve: 'smooth', + }, + plotOptions: { + bar: { + columnWidth: '50%', + }, + }, + colors: ['#4ecac2', '#f9b931', '#ff6c2f'], + series: [ + { + name: 'Team A', + type: 'column', + data: [23, 11, 22, 27, 13, 22, 37, 21, 44, 22, 30], + }, + { + name: 'Team B', + type: 'area', + data: [44, 55, 41, 67, 22, 43, 21, 41, 56, 27, 43], + }, + { + name: 'Team C', + type: 'line', + data: [30, 25, 36, 30, 45, 35, 64, 52, 59, 36, 39], + }, + ], + fill: { + opacity: [0.85, 0.25, 1], + gradient: { + inverseColors: false, + shade: 'light', + type: 'vertical', + opacityFrom: 0.85, + opacityTo: 0.55, + stops: [0, 100, 100, 100], + }, + }, + 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', + ], + markers: { + size: 0, + }, + legend: { + offsetY: 7, + }, + xaxis: { + type: 'datetime', + }, + yaxis: { + title: { + text: 'Points', + }, + }, + tooltip: { + shared: true, + intersect: false, + y: { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(0) + ' points' + } + return y + }, + }, + }, + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + } +} diff --git a/apiferia/src/app/views/charts/pie/pie.component.html b/apiferia/src/app/views/charts/pie/pie.component.html new file mode 100644 index 00000000..323d126e --- /dev/null +++ b/apiferia/src/app/views/charts/pie/pie.component.html @@ -0,0 +1,201 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/pie.component.ts +

    +
    +
    + +
    +
    +

    Simple Pie Chart

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

    + Simple Donut Chart +

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

    + Monochrome Pie Chart +

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

    + Gradient Donut Chart +

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

    + Patterned Donut Chart +

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

    + Pie Chart with Image fill +

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

    Donut Update

    +
    +
    + + +
    +
    + +
    + + + + +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/pie/pie.component.spec.ts b/apiferia/src/app/views/charts/pie/pie.component.spec.ts new file mode 100644 index 00000000..e2fadda0 --- /dev/null +++ b/apiferia/src/app/views/charts/pie/pie.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PieComponent } from './pie.component' + +describe('PieComponent', () => { + let component: PieComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PieComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PieComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/pie/pie.component.ts b/apiferia/src/app/views/charts/pie/pie.component.ts new file mode 100644 index 00000000..c7ff884e --- /dev/null +++ b/apiferia/src/app/views/charts/pie/pie.component.ts @@ -0,0 +1,315 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-pie', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './pie.component.html', + styles: ``, +}) +export class PieComponent { + pieChart: Partial = { + chart: { + height: 320, + type: 'pie', + }, + series: [44, 55, 41, 17, 15], + labels: ['Series 1', 'Series 2', 'Series 3', 'Series 4', 'Series 5'], + colors: ['#1c84ee', '#7f56da', '#ff6c2f', '#f9b931', '#4ecac2'], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + donutChart: Partial = { + chart: { + height: 320, + type: 'donut', + }, + series: [44, 55, 41, 17, 15], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + labels: ['Series 1', 'Series 2', 'Series 3', 'Series 4', 'Series 5'], + colors: ['#7f56da', '#1c84ee', '#ff6c2f', '#4ecac2', '#f9b931'], + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + monochromeChart: Partial = { + chart: { + height: 320, + type: 'pie', + }, + series: [25, 15, 44, 55, 41, 17], + labels: [ + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + ], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + theme: { + monochrome: { + enabled: true, + }, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + gradientChart: Partial = { + chart: { + height: 320, + type: 'donut', + }, + series: [44, 55, 41, 17, 15], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + labels: ['Series 1', 'Series 2', 'Series 3', 'Series 4', 'Series 5'], + colors: ['#7f56da', '#1c84ee', '#ff6c2f', '#4ecac2', '#f9b931'], + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + fill: { + type: 'gradient', + }, + } + + patternedChart: Partial = { + chart: { + height: 320, + type: 'donut', + dropShadow: { + enabled: true, + color: '#111', + top: -1, + left: 3, + blur: 3, + opacity: 0.2, + }, + }, + stroke: { + show: true, + width: 2, + }, + series: [44, 55, 41, 17, 15], + colors: ['#7f56da', '#1c84ee', '#ff6c2f', '#4ecac2', '#f9b931'], + labels: ['Comedy', 'Action', 'SciFi', 'Drama', 'Horror'], + dataLabels: { + dropShadow: { + blur: 3, + opacity: 0.8, + }, + }, + fill: { + type: 'pattern', + opacity: 1, + pattern: { + style: [ + 'verticalLines', + 'squares', + 'horizontalLines', + 'circles', + 'slantedLines', + ], + }, + }, + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + imagePieChart: Partial = { + chart: { + height: 320, + type: 'pie', + }, + labels: ['Series 1', 'Series 2', 'Series 3', 'Series 4'], + colors: ['#7f56da', '#1c84ee', '#ff6c2f', '#4ecac2', '#f9b931'], + series: [44, 33, 54, 45], + fill: { + type: 'image', + opacity: 0.85, + image: { + src: [ + 'assets/images/small/img-1.jpg', + 'assets/images/small/img-2.jpg', + 'assets/images/small/img-3.jpg', + 'assets/images/small/img-4.jpg', + ], + width: 25, + }, + }, + stroke: { + width: 4, + }, + dataLabels: { + enabled: false, + }, + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + updatedonutChart: Partial = { + chart: { + height: 320, + type: 'donut', + }, + dataLabels: { + enabled: false, + }, + series: [44, 55, 13, 33], + colors: [ + '#1c84ee', + '#53389f', + '#7f56da', + '#ff86c8', + '#ef5f5f', + '#ff6c2f', + '#f9b931', + '#22c55e', + '#040505', + '#4ecac2', + ], + legend: { + show: true, + position: 'bottom', + horizontalAlign: 'center', + floating: false, + fontSize: '14px', + offsetX: 0, + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + height: 240, + }, + legend: { + show: false, + }, + }, + }, + ], + } +} diff --git a/apiferia/src/app/views/charts/polar/polar.component.html b/apiferia/src/app/views/charts/polar/polar.component.html new file mode 100644 index 00000000..6173daa9 --- /dev/null +++ b/apiferia/src/app/views/charts/polar/polar.component.html @@ -0,0 +1,77 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/polar.component.ts +

    +
    +
    + +
    +
    +

    + Basic Polar Area Chart +

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

    + Monochrome Polar Area +

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/polar/polar.component.spec.ts b/apiferia/src/app/views/charts/polar/polar.component.spec.ts new file mode 100644 index 00000000..466d8c02 --- /dev/null +++ b/apiferia/src/app/views/charts/polar/polar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PolarComponent } from './polar.component' + +describe('PolarComponent', () => { + let component: PolarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PolarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PolarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/polar/polar.component.ts b/apiferia/src/app/views/charts/polar/polar.component.ts new file mode 100644 index 00000000..6839144c --- /dev/null +++ b/apiferia/src/app/views/charts/polar/polar.component.ts @@ -0,0 +1,88 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-polar', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './polar.component.html', + styles: ``, +}) +export class PolarComponent { + basicPolarChart: Partial = { + series: [14, 23, 21, 17, 15, 10], + chart: { + height: 380, + type: 'polarArea', + toolbar: { + show: false, + }, + }, + stroke: { + colors: ['#fff'], + }, + fill: { + opacity: 0.8, + }, + labels: ['Vote A', 'Vote B', 'Vote C', 'Vote D', 'Vote E', 'Vote F'], + legend: { + position: 'bottom', + }, + colors: ['#1c84ee', '#f9b931', '#4ecac2'], + responsive: [ + { + breakpoint: 480, + options: { + chart: { + width: 200, + }, + legend: { + position: 'bottom', + }, + }, + }, + ], + } + + monochromePolarChart: Partial = { + series: [42, 47, 52, 58, 65], + chart: { + height: 380, + type: 'polarArea', + }, + labels: ['Rose A', 'Rose B', 'Rose C', 'Rose D', 'Rose E'], + fill: { + opacity: 1, + }, + stroke: { + width: 1, + }, + yaxis: { + show: false, + }, + legend: { + position: 'bottom', + }, + plotOptions: { + polarArea: { + rings: { + strokeWidth: 0, + }, + spokes: { + strokeWidth: 0, + }, + }, + }, + theme: { + monochrome: { + enabled: true, + shadeTo: 'light', + color: '#727cf5', + shadeIntensity: 0.6, + }, + }, + } +} diff --git a/apiferia/src/app/views/charts/radar/radar.component.html b/apiferia/src/app/views/charts/radar/radar.component.html new file mode 100644 index 00000000..443f5316 --- /dev/null +++ b/apiferia/src/app/views/charts/radar/radar.component.html @@ -0,0 +1,99 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/radar.component.ts +

    +
    +
    + +
    +
    +

    Basic Radar Chart

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

    + Radar with Polygon-fill +

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

    + Radar – Multiple Series +

    +
    +
    + + +
    +
    + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/radar/radar.component.spec.ts b/apiferia/src/app/views/charts/radar/radar.component.spec.ts new file mode 100644 index 00000000..45554e1b --- /dev/null +++ b/apiferia/src/app/views/charts/radar/radar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RadarComponent } from './radar.component' + +describe('RadarComponent', () => { + let component: RadarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RadarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RadarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/radar/radar.component.ts b/apiferia/src/app/views/charts/radar/radar.component.ts new file mode 100644 index 00000000..ff985824 --- /dev/null +++ b/apiferia/src/app/views/charts/radar/radar.component.ts @@ -0,0 +1,138 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { shuffleArray } from '@/app/components/commonFunction' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-radar', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './radar.component.html', + styles: ``, +}) +export class RadarComponent { + radarChart: Partial = { + chart: { + height: 350, + type: 'radar', + toolbar: { + show: false, + }, + }, + series: [ + { + name: 'Series 1', + data: [80, 50, 30, 40, 100, 20], + }, + ], + colors: ['#7f56da'], + labels: ['January', 'February', 'March', 'April', 'May', 'June'], + } + + polygonradarChart: Partial = { + chart: { + height: 350, + type: 'radar', + toolbar: { + show: false, + }, + }, + series: [ + { + name: 'Series 1', + data: [20, 100, 40, 30, 50, 80, 33], + }, + ], + labels: [ + 'Sunday', + 'Monday', + 'Tuesday', + 'Wednesday', + 'Thursday', + 'Friday', + 'Saturday', + ], + plotOptions: { + radar: { + size: 140, + }, + }, + colors: ['#ff6c2f'], + markers: { + size: 4, + colors: ['#fff'], + strokeWidth: 2, + }, + yaxis: { + tickAmount: 7, + }, + } + + multipleradarChart: Partial = { + chart: { + height: 350, + type: 'radar', + toolbar: { + show: false, + }, + }, + series: [ + { + name: 'Series 1', + data: [80, 50, 30, 40, 100, 20], + }, + { + name: 'Series 2', + data: [20, 30, 40, 80, 20, 80], + }, + { + name: 'Series 3', + data: [44, 76, 78, 13, 43, 10], + }, + ], + stroke: { + width: 0, + }, + fill: { + opacity: 0.4, + }, + markers: { + size: 0, + }, + legend: { + offsetY: -10, + }, + colors: ['#1c84ee', '#ef5f5f', '#4ecac2'], + labels: ['2011', '2012', '2013', '2014', '2015', '2016'], + } + + changeTraffic() { + setTimeout(() => { + this.multipleradarChart.series = [ + { + name: 'Series 1', + data: randomSeries(), + }, + { + name: 'Series 2', + data: randomSeries(), + }, + { + name: 'Series 3', + data: randomSeries(), + }, + ] + }, 500) + } +} + +function randomSeries() { + var arr = [] + for (var i = 0; i < 6; i++) { + arr.push(Math.floor(Math.random() * 100)) + } + + return arr +} diff --git a/apiferia/src/app/views/charts/radial-bar/radial-bar.component.html b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.html new file mode 100644 index 00000000..6deb456c --- /dev/null +++ b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.html @@ -0,0 +1,190 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/radial-bar.component.ts +

    +
    +
    + +
    +
    +

    Basic RadialBar Chart

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

    + Multiple RadialBars +

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

    + Circle Chart - Custom Angle +

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

    + Circle Chart with Image +

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

    + Stroked Circular Gauge +

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

    + Gradient Circular Chart +

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

    + Semi Circle Gauge +

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/radial-bar/radial-bar.component.spec.ts b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.spec.ts new file mode 100644 index 00000000..22fc1687 --- /dev/null +++ b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RadialBarComponent } from './radial-bar.component' + +describe('RadialBarComponent', () => { + let component: RadialBarComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RadialBarComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RadialBarComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/radial-bar/radial-bar.component.ts b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.ts new file mode 100644 index 00000000..71ea284b --- /dev/null +++ b/apiferia/src/app/views/charts/radial-bar/radial-bar.component.ts @@ -0,0 +1,339 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-radial-bar', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './radial-bar.component.html', + styles: ``, +}) +export class RadialBarComponent { + radialbarChart: Partial = { + chart: { + height: 320, + type: 'radialBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + radialBar: { + hollow: { + size: '70%', + }, + track: { + background: 'rgba(170,184,197, 0.2)', + }, + }, + }, + colors: ['#7f56da'], + series: [70], + labels: ['CRICKET'], + } + + multipleradialbarChart: Partial = { + chart: { + height: 320, + type: 'radialBar', + }, + plotOptions: { + radialBar: { + track: { + background: 'rgba(170,184,197, 0.2)', + }, + }, + }, + colors: ['#1c84ee', '#7f56da', '#ff6c2f', '#4ecac2'], + series: [44, 55, 67, 83], + labels: ['Apples', 'Oranges', 'Bananas', 'Berries'], + responsive: [ + { + breakpoint: 380, + options: { + chart: { + height: 260, + }, + }, + }, + ], + } + + circleradialbarChart: Partial = { + chart: { + height: 380, + type: 'radialBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + radialBar: { + offsetY: -30, + startAngle: 0, + endAngle: 270, + hollow: { + margin: 5, + size: '30%', + background: 'transparent', + image: undefined, + }, + track: { + background: 'rgba(170,184,197, 0.2)', + }, + dataLabels: { + name: { + show: false, + }, + value: { + show: false, + }, + }, + }, + }, + colors: ['#1c84ee', '#7f56da', '#ff6c2f', '#4ecac2'], + series: [76, 67, 61, 90], + labels: ['Vimeo', 'Messenger', 'Facebook', 'LinkedIn'], + legend: { + show: true, + floating: true, + fontSize: '13px', + position: 'left', + offsetX: 10, + offsetY: 10, + labels: { + useSeriesColors: true, + }, + formatter: function (seriesName, opts) { + return seriesName + ': ' + opts.w.globals.series[opts.seriesIndex] + }, + itemMargin: { + horizontal: 1, + }, + }, + responsive: [ + { + breakpoint: 480, + options: { + legend: { + show: false, + }, + }, + }, + ], + } + + imageradialbarChart: Partial = { + chart: { + height: 360, + type: 'radialBar', + }, + fill: { + type: 'image', + image: { + src: ['assets/images/small/img-2.jpg'], + }, + }, + plotOptions: { + radialBar: { + hollow: { + size: '70%', + }, + }, + }, + series: [70], + stroke: { + lineCap: 'round', + }, + labels: ['Volatility'], + responsive: [ + { + breakpoint: 380, + options: { + chart: { + height: 280, + }, + }, + }, + ], + } + + guageradialbarChart: Partial = { + chart: { + height: 380, + type: 'radialBar', + }, + plotOptions: { + radialBar: { + startAngle: -135, + endAngle: 135, + dataLabels: { + name: { + fontSize: '16px', + color: undefined, + offsetY: 120, + }, + value: { + offsetY: 76, + fontSize: '22px', + color: undefined, + formatter: function (val) { + return val + '%' + }, + }, + }, + track: { + background: 'rgba(170,184,197, 0.2)', + margin: 0, + }, + }, + }, + fill: { + gradient: { + shade: 'dark', + shadeIntensity: 0.2, + inverseColors: false, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 50, 65, 91], + }, + }, + stroke: { + dashArray: 4, + }, + colors: ['#ff6c2f'], + series: [67], + labels: ['Median Ratio'], + responsive: [ + { + breakpoint: 380, + options: { + chart: { + height: 280, + }, + }, + }, + ], + } + + gradientradialbarChart: Partial = { + chart: { + height: 330, + type: 'radialBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + radialBar: { + startAngle: -135, + endAngle: 225, + hollow: { + margin: 0, + size: '70%', + background: 'transparent', + image: undefined, + imageOffsetX: 0, + imageOffsetY: 0, + position: 'front', + dropShadow: { + enabled: true, + top: 3, + left: 0, + blur: 4, + opacity: 0.24, + }, + }, + track: { + background: 'rgba(170,184,197, 0.2)', + strokeWidth: '67%', + margin: 0, + }, + + dataLabels: { + name: { + offsetY: -10, + show: true, + color: '#888', + fontSize: '17px', + }, + value: { + color: '#111', + fontSize: '36px', + show: true, + }, + }, + }, + }, + fill: { + type: 'gradient', + gradient: { + shade: 'dark', + type: 'horizontal', + shadeIntensity: 0.5, + gradientToColors: ['#8f75da', '#727cf5'], + inverseColors: true, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 100], + }, + }, + series: [75], + stroke: { + lineCap: 'round', + }, + labels: ['Percent'], + } + + semicircleQuageChart: Partial = { + series: [76], + chart: { + type: 'radialBar', + offsetY: -20, + height: 400, + toolbar: { + show: false, + }, + sparkline: { + enabled: true, + }, + }, + plotOptions: { + radialBar: { + startAngle: -90, + endAngle: 90, + track: { + background: 'rgba(170,184,197, 0.2)', + strokeWidth: '97%', + margin: 5, // margin is in pixels + dropShadow: { + top: 2, + left: 0, + color: '#727cf5', + opacity: 1, + blur: 2, + }, + }, + dataLabels: { + name: { + show: false, + }, + value: { + offsetY: -2, + fontSize: '22px', + }, + }, + }, + }, + grid: { + padding: { + top: -10, + }, + }, + colors: ['#1c84ee'], + labels: ['Average Results'], + } +} diff --git a/apiferia/src/app/views/charts/scatter/scatter.component.html b/apiferia/src/app/views/charts/scatter/scatter.component.html new file mode 100644 index 00000000..24cf7a15 --- /dev/null +++ b/apiferia/src/app/views/charts/scatter/scatter.component.html @@ -0,0 +1,96 @@ + + +
    +
    +
    +
    +
    Overview
    +

    + Find the JS file for the following chart at: + src/app/views/charts/scatter.component.ts +

    +
    +
    + +
    +
    +

    Scatter (XY) Chart

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

    + Scatter Chart - Datetime +

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

    Scatter - Images

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/scatter/scatter.component.spec.ts b/apiferia/src/app/views/charts/scatter/scatter.component.spec.ts new file mode 100644 index 00000000..155e214a --- /dev/null +++ b/apiferia/src/app/views/charts/scatter/scatter.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ScatterComponent } from './scatter.component' + +describe('ScatterComponent', () => { + let component: ScatterComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ScatterComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ScatterComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/scatter/scatter.component.ts b/apiferia/src/app/views/charts/scatter/scatter.component.ts new file mode 100644 index 00000000..95b310f7 --- /dev/null +++ b/apiferia/src/app/views/charts/scatter/scatter.component.ts @@ -0,0 +1,380 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-scatter', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './scatter.component.html', + styles: ``, +}) +export class ScatterComponent { + basicscatterChart: Partial = { + chart: { + height: 380, + type: 'scatter', + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + + series: [ + { + name: 'Sample A', + data: [ + [16.4, 5.4], + [21.7, 2], + [25.4, 3], + [19, 2], + [10.9, 1], + [13.6, 3.2], + [10.9, 7.4], + [10.9, 0], + [10.9, 8.2], + [16.4, 0], + [16.4, 1.8], + [13.6, 0.3], + [13.6, 0], + [29.9, 0], + [27.1, 2.3], + [16.4, 0], + [13.6, 3.7], + [10.9, 5.2], + [16.4, 6.5], + [10.9, 0], + [24.5, 7.1], + [10.9, 0], + [8.1, 4.7], + [19, 0], + [21.7, 1.8], + [27.1, 0], + [24.5, 0], + [27.1, 0], + [29.9, 1.5], + [27.1, 0.8], + [22.1, 2], + ], + }, + { + name: 'Sample B', + data: [ + [6.4, 13.4], + [1.7, 11], + [5.4, 8], + [9, 17], + [1.9, 4], + [3.6, 12.2], + [1.9, 14.4], + [1.9, 9], + [1.9, 13.2], + [1.4, 7], + [6.4, 8.8], + [3.6, 4.3], + [1.6, 10], + [9.9, 2], + [7.1, 15], + [1.4, 0], + [3.6, 13.7], + [1.9, 15.2], + [6.4, 16.5], + [0.9, 10], + [4.5, 17.1], + [10.9, 10], + [0.1, 14.7], + [9, 10], + [12.7, 11.8], + [2.1, 10], + [2.5, 10], + [27.1, 10], + [2.9, 11.5], + [7.1, 10.8], + [2.1, 12], + ], + }, + { + name: 'Sample C', + data: [ + [21.7, 3], + [23.6, 3.5], + [24.6, 3], + [29.9, 3], + [21.7, 20], + [23, 2], + [10.9, 3], + [28, 4], + [27.1, 0.3], + [16.4, 4], + [13.6, 0], + [19, 5], + [22.4, 3], + [24.5, 3], + [32.6, 3], + [27.1, 4], + [29.6, 6], + [31.6, 8], + [21.6, 5], + [20.9, 4], + [22.4, 0], + [32.6, 10.3], + [29.7, 20.8], + [24.5, 0.8], + [21.4, 0], + [21.7, 6.9], + [28.6, 7.7], + [15.4, 0], + [18.1, 0], + [33.4, 0], + [16.4, 0], + ], + }, + ], + xaxis: { + tickAmount: 10, + }, + yaxis: { + tickAmount: 7, + }, + colors: ['#1c84ee', '#f9b931', '#4ecac2'], + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + legend: { + offsetY: 7, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + datetimescatterChart: Partial = { + chart: { + height: 380, + type: 'scatter', + zoom: { + type: 'xy', + }, + }, + series: [ + { + name: 'Team 1', + data: this.generateDayWiseTimeSeries( + new Date('11 Feb 2017 GMT').getTime(), + 20, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Team 2', + data: this.generateDayWiseTimeSeries( + new Date('11 Feb 2017 GMT').getTime(), + 20, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Team 3', + data: this.generateDayWiseTimeSeries( + new Date('11 Feb 2017 GMT').getTime(), + 30, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Team 4', + data: this.generateDayWiseTimeSeries( + new Date('11 Feb 2017 GMT').getTime(), + 10, + { + min: 10, + max: 60, + } + ), + }, + { + name: 'Team 5', + data: this.generateDayWiseTimeSeries( + new Date('11 Feb 2017 GMT').getTime(), + 30, + { + min: 10, + max: 60, + } + ), + }, + ], + dataLabels: { + enabled: false, + }, + colors: ['#1c84ee', '#7f56da', '#ef5f5f', '#f9b931', '#22c55e'], + grid: { + borderColor: '#f1f3fa', + padding: { + bottom: 5, + }, + }, + legend: { + offsetY: 10, + }, + xaxis: { + type: 'datetime', + }, + yaxis: { + max: 70, + }, + responsive: [ + { + breakpoint: 600, + options: { + chart: { + toolbar: { + show: false, + }, + }, + legend: { + show: false, + }, + }, + }, + ], + } + + generateDayWiseTimeSeries( + baseval: number, + count: number, + yrange: { min: number; max: number } + ) { + var i = 0 + var series = [] + while (i < count) { + var y = + Math.floor(Math.random() * (yrange.max - yrange.min + 1)) + yrange.min + + series.push([baseval, y]) + baseval += 86400000 + i++ + } + return series + } + + imagescatterChart: Partial = { + chart: { + height: 380, + type: 'scatter', + animations: { + enabled: false, + }, + zoom: { + enabled: false, + }, + toolbar: { + show: false, + }, + }, + colors: ['#3b5998', '#e1306c'], + series: [ + { + name: 'Dribbble', + data: [ + [16.4, 5.4], + [21.7, 4], + [25.4, 3], + [19, 2], + [10.9, 1], + [13.6, 3.2], + [10.9, 7], + [10.9, 8.2], + [16.4, 4], + [13.6, 4.3], + [13.6, 12], + [29.9, 3], + [10.9, 5.2], + [16.4, 6.5], + [10.9, 8], + [24.5, 7.1], + [10.9, 7], + [8.1, 4.7], + [19, 10], + [27.1, 10], + [24.5, 8], + [27.1, 3], + [29.9, 11.5], + [27.1, 0.8], + [22.1, 2], + ], + }, + { + name: 'Github', + data: [ + [6.4, 5.4], + [11.7, 4], + [15.4, 3], + [9, 2], + [10.9, 11], + [20.9, 7], + [12.9, 8.2], + [6.4, 14], + [11.6, 12], + ], + }, + ], + xaxis: { + tickAmount: 10, + min: 0, + max: 40, + }, + yaxis: { + tickAmount: 7, + }, + markers: { + size: 20, + }, + fill: { + type: 'image', + opacity: 1, + image: { + src: [ + 'assets/images/brands/dribbble.svg', + 'assets/images/brands/github.svg', + ], + width: 40, + height: 40, + }, + }, + legend: { + labels: { + useSeriesColors: true, + }, + offsetY: 7, + }, + } +} diff --git a/apiferia/src/app/views/charts/timeline/timeline.component.html b/apiferia/src/app/views/charts/timeline/timeline.component.html new file mode 100644 index 00000000..216bde72 --- /dev/null +++ b/apiferia/src/app/views/charts/timeline/timeline.component.html @@ -0,0 +1,142 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/timeline.component.ts +

    +
    +
    + +
    +
    +

    Basic Timeline

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

    + Distributed Timeline +

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

    + Multi Series Timeline +

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

    Advanced Timeline

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

    + Multiple Series - Group Rows +

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/timeline/timeline.component.spec.ts b/apiferia/src/app/views/charts/timeline/timeline.component.spec.ts new file mode 100644 index 00000000..525f8794 --- /dev/null +++ b/apiferia/src/app/views/charts/timeline/timeline.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TimelineComponent } from './timeline.component' + +describe('TimelineComponent', () => { + let component: TimelineComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TimelineComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TimelineComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/timeline/timeline.component.ts b/apiferia/src/app/views/charts/timeline/timeline.component.ts new file mode 100644 index 00000000..6e63b876 --- /dev/null +++ b/apiferia/src/app/views/charts/timeline/timeline.component.ts @@ -0,0 +1,619 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import moment from 'moment' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-timeline', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './timeline.component.html', + styles: ``, +}) +export class TimelineComponent { + timelineChart: Partial = { + series: [ + { + data: [ + { + x: 'Code', + y: [ + new Date('2019-03-02').getTime(), + new Date('2019-03-04').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-04').getTime(), + new Date('2019-03-08').getTime(), + ], + }, + { + x: 'Validation', + y: [ + new Date('2019-03-08').getTime(), + new Date('2019-03-12').getTime(), + ], + }, + { + x: 'Deployment', + y: [ + new Date('2019-03-12').getTime(), + new Date('2019-03-18').getTime(), + ], + }, + ], + }, + ], + chart: { + height: 350, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + colors: ['#4ecac2'], + plotOptions: { + bar: { + horizontal: true, + }, + }, + xaxis: { + type: 'datetime', + axisBorder: { + show: false, + }, + }, + } + + distributedChart: Partial = { + series: [ + { + data: [ + { + x: 'Analysis', + y: [ + new Date('2019-02-27').getTime(), + new Date('2019-03-04').getTime(), + ], + fillColor: '#1c84ee', + }, + { + x: 'Design', + y: [ + new Date('2019-03-04').getTime(), + new Date('2019-03-08').getTime(), + ], + fillColor: '#7f56da', + }, + { + x: 'Coding', + y: [ + new Date('2019-03-07').getTime(), + new Date('2019-03-10').getTime(), + ], + fillColor: '#ff86c8', + }, + { + x: 'Testing', + y: [ + new Date('2019-03-08').getTime(), + new Date('2019-03-12').getTime(), + ], + fillColor: '#f9b931', + }, + { + x: 'Deployment', + y: [ + new Date('2019-03-12').getTime(), + new Date('2019-03-17').getTime(), + ], + fillColor: '#4ecac2', + }, + ], + }, + ], + chart: { + height: 350, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + distributed: true, + dataLabels: { + hideOverflowingLabels: false, + }, + }, + }, + dataLabels: { + enabled: true, + formatter: function (val: any, opts: any) { + var label = opts.w.globals.labels[opts.dataPointIndex] + var a = moment(val[0]) + var b = moment(val[1]) + var diff = b.diff(a, 'days') + return label + ': ' + diff + (diff > 1 ? ' days' : ' day') + }, + + style: { + colors: ['#f3f4f5', '#fff'], + }, + }, + xaxis: { + type: 'datetime', + }, + yaxis: { + show: false, + }, + grid: { + row: { + colors: ['#f3f4f5', '#fff'], + opacity: 1, + }, + padding: { + top: -15, + right: 10, + bottom: -15, + left: -10, + }, + }, + } + + multitimelineChart: Partial = { + series: [ + { + name: 'Bob', + data: [ + { + x: 'Design', + y: [ + new Date('2019-03-05').getTime(), + new Date('2019-03-08').getTime(), + ], + }, + { + x: 'Code', + y: [ + new Date('2019-03-08').getTime(), + new Date('2019-03-11').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-11').getTime(), + new Date('2019-03-16').getTime(), + ], + }, + ], + }, + { + name: 'Joe', + data: [ + { + x: 'Design', + y: [ + new Date('2019-03-02').getTime(), + new Date('2019-03-05').getTime(), + ], + }, + { + x: 'Code', + y: [ + new Date('2019-03-06').getTime(), + new Date('2019-03-09').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-10').getTime(), + new Date('2019-03-19').getTime(), + ], + }, + ], + }, + ], + chart: { + height: 350, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + }, + }, + dataLabels: { + enabled: true, + formatter: function (val: any, opts: any) { + var label = opts.w.globals.labels[opts.dataPointIndex] + var a = moment(val[0]) + var b = moment(val[1]) + var diff = b.diff(a, 'days') + return label + ': ' + diff + (diff > 1 ? ' days' : ' day') + }, + }, + + fill: { + type: 'gradient', + gradient: { + shade: 'light', + type: 'vertical', + shadeIntensity: 0.25, + gradientToColors: undefined, + inverseColors: true, + opacityFrom: 1, + opacityTo: 1, + stops: [50, 0, 100, 100], + }, + }, + colors: ['#ff6c2f', '#f9b931'], + xaxis: { + type: 'datetime', + }, + legend: { + position: 'top', + }, + } + + advancedtimelineChart: Partial = { + series: [ + { + name: 'Bob', + data: [ + { + x: 'Design', + y: [ + new Date('2019-03-05').getTime(), + new Date('2019-03-08').getTime(), + ], + }, + { + x: 'Code', + y: [ + new Date('2019-03-02').getTime(), + new Date('2019-03-05').getTime(), + ], + }, + { + x: 'Code', + y: [ + new Date('2019-03-05').getTime(), + new Date('2019-03-07').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-03').getTime(), + new Date('2019-03-09').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-08').getTime(), + new Date('2019-03-11').getTime(), + ], + }, + { + x: 'Validation', + y: [ + new Date('2019-03-11').getTime(), + new Date('2019-03-16').getTime(), + ], + }, + { + x: 'Design', + y: [ + new Date('2019-03-01').getTime(), + new Date('2019-03-03').getTime(), + ], + }, + ], + }, + { + name: 'Joe', + data: [ + { + x: 'Design', + y: [ + new Date('2019-03-02').getTime(), + new Date('2019-03-05').getTime(), + ], + }, + { + x: 'Test', + y: [ + new Date('2019-03-06').getTime(), + new Date('2019-03-16').getTime(), + ], + goals: [ + { + name: 'Break', + value: new Date('2019-03-10').getTime(), + strokeColor: '#CD2F2A', + }, + ], + }, + { + x: 'Code', + y: [ + new Date('2019-03-03').getTime(), + new Date('2019-03-07').getTime(), + ], + }, + { + x: 'Deployment', + y: [ + new Date('2019-03-20').getTime(), + new Date('2019-03-22').getTime(), + ], + }, + { + x: 'Design', + y: [ + new Date('2019-03-10').getTime(), + new Date('2019-03-16').getTime(), + ], + }, + ], + }, + { + name: 'Dan', + data: [ + { + x: 'Code', + y: [ + new Date('2019-03-10').getTime(), + new Date('2019-03-17').getTime(), + ], + }, + { + x: 'Validation', + y: [ + new Date('2019-03-05').getTime(), + new Date('2019-03-09').getTime(), + ], + goals: [ + { + name: 'Break', + value: new Date('2019-03-07').getTime(), + strokeColor: '#CD2F2A', + }, + ], + }, + ], + }, + ], + chart: { + height: 350, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + barHeight: '80%', + }, + }, + xaxis: { + type: 'datetime', + }, + stroke: { + width: 1, + }, + colors: ['#ef5f5f', '#f9b931', '#4ecac2'], + fill: { + type: 'solid', + opacity: 0.6, + }, + legend: { + position: 'top', + horizontalAlign: 'left', + }, + } + + grouptimelineChart: Partial = { + series: [ + // George Washington + { + name: 'George Washington', + data: [ + { + x: 'President', + y: [ + new Date(1789, 3, 30).getTime(), + new Date(1797, 2, 4).getTime(), + ], + }, + ], + }, + // John Adams + { + name: 'John Adams', + data: [ + { + x: 'President', + y: [new Date(1797, 2, 4).getTime(), new Date(1801, 2, 4).getTime()], + }, + { + x: 'Vice President', + y: [ + new Date(1789, 3, 21).getTime(), + new Date(1797, 2, 4).getTime(), + ], + }, + ], + }, + // Thomas Jefferson + { + name: 'Thomas Jefferson', + data: [ + { + x: 'President', + y: [new Date(1801, 2, 4).getTime(), new Date(1809, 2, 4).getTime()], + }, + { + x: 'Vice President', + y: [new Date(1797, 2, 4).getTime(), new Date(1801, 2, 4).getTime()], + }, + { + x: 'Secretary of State', + y: [ + new Date(1790, 2, 22).getTime(), + new Date(1793, 11, 31).getTime(), + ], + }, + ], + }, + // Aaron Burr + { + name: 'Aaron Burr', + data: [ + { + x: 'Vice President', + y: [new Date(1801, 2, 4).getTime(), new Date(1805, 2, 4).getTime()], + }, + ], + }, + // George Clinton + { + name: 'George Clinton', + data: [ + { + x: 'Vice President', + y: [ + new Date(1805, 2, 4).getTime(), + new Date(1812, 3, 20).getTime(), + ], + }, + ], + }, + // John Jay + { + name: 'John Jay', + data: [ + { + x: 'Secretary of State', + y: [ + new Date(1789, 8, 25).getTime(), + new Date(1790, 2, 22).getTime(), + ], + }, + ], + }, + // Edmund Randolph + { + name: 'Edmund Randolph', + data: [ + { + x: 'Secretary of State', + y: [ + new Date(1794, 0, 2).getTime(), + new Date(1795, 7, 20).getTime(), + ], + }, + ], + }, + // Timothy Pickering + { + name: 'Timothy Pickering', + data: [ + { + x: 'Secretary of State', + y: [ + new Date(1795, 7, 20).getTime(), + new Date(1800, 4, 12).getTime(), + ], + }, + ], + }, + // Charles Lee + { + name: 'Charles Lee', + data: [ + { + x: 'Secretary of State', + y: [ + new Date(1800, 4, 13).getTime(), + new Date(1800, 5, 5).getTime(), + ], + }, + ], + }, + // John Marshall + { + name: 'John Marshall', + data: [ + { + x: 'Secretary of State', + y: [ + new Date(1800, 5, 13).getTime(), + new Date(1801, 2, 4).getTime(), + ], + }, + ], + }, + // Levi Lincoln + { + name: 'Levi Lincoln', + data: [ + { + x: 'Secretary of State', + y: [new Date(1801, 2, 5).getTime(), new Date(1801, 4, 1).getTime()], + }, + ], + }, + // James Madison + { + name: 'James Madison', + data: [ + { + x: 'Secretary of State', + y: [new Date(1801, 4, 2).getTime(), new Date(1809, 2, 3).getTime()], + }, + ], + }, + ], + chart: { + height: 350, + type: 'rangeBar', + toolbar: { + show: false, + }, + }, + plotOptions: { + bar: { + horizontal: true, + barHeight: '50%', + rangeBarGroupRows: true, + }, + }, + colors: ['#1c84ee', '#7f56da', '#ff86c8', '#f9b931', '#4ecac2'], + fill: { + type: 'solid', + }, + xaxis: { + type: 'datetime', + axisBorder: { + show: false, + }, + }, + legend: { + position: 'right', + }, + } +} diff --git a/apiferia/src/app/views/charts/treemap/treemap.component.html b/apiferia/src/app/views/charts/treemap/treemap.component.html new file mode 100644 index 00000000..5a5a8f3d --- /dev/null +++ b/apiferia/src/app/views/charts/treemap/treemap.component.html @@ -0,0 +1,107 @@ + + +
    +
    +
    +
    +
    Overview
    + +

    + Find the JS file for the following chart at: + src/app/views/charts/treemap.component.ts +

    +
    +
    + +
    +
    +

    Basic Treemap

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

    Treemap Multiple Series

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

    Distributed Treemap

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

    Color Range Treemap

    +
    +
    + + +
    +
    +
    + +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/charts/treemap/treemap.component.spec.ts b/apiferia/src/app/views/charts/treemap/treemap.component.spec.ts new file mode 100644 index 00000000..562ed373 --- /dev/null +++ b/apiferia/src/app/views/charts/treemap/treemap.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TreemapComponent } from './treemap.component' + +describe('TreemapComponent', () => { + let component: TreemapComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TreemapComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TreemapComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/charts/treemap/treemap.component.ts b/apiferia/src/app/views/charts/treemap/treemap.component.ts new file mode 100644 index 00000000..4276b842 --- /dev/null +++ b/apiferia/src/app/views/charts/treemap/treemap.component.ts @@ -0,0 +1,341 @@ +import { ChartOptions } from '@/app/common/apexchart.model' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'app-treemap', + standalone: true, + imports: [PageTitleComponent, NgApexchartsModule, UIExamplesListComponent], + templateUrl: './treemap.component.html', + styles: ``, +}) +export class TreemapComponent { + treemapChart: Partial = { + series: [ + { + data: [ + { + x: 'New Delhi', + y: 218, + }, + { + x: 'Kolkata', + y: 149, + }, + { + x: 'Mumbai', + y: 184, + }, + { + x: 'Ahmedabad', + y: 55, + }, + { + x: 'Bangaluru', + y: 84, + }, + { + x: 'Pune', + y: 31, + }, + { + x: 'Chennai', + y: 70, + }, + { + x: 'Jaipur', + y: 30, + }, + { + x: 'Surat', + y: 44, + }, + { + x: 'Hyderabad', + y: 68, + }, + { + x: 'Lucknow', + y: 28, + }, + { + x: 'Indore', + y: 19, + }, + { + x: 'Kanpur', + y: 29, + }, + ], + }, + ], + colors: ['#1c84ee'], + legend: { + show: false, + }, + chart: { + height: 350, + type: 'treemap', + toolbar: { + show: false, + }, + }, + title: { + text: 'Basic Treemap', + align: 'center', + }, + } + + multipletreemapChart: Partial = { + series: [ + { + name: 'Desktops', + data: [ + { + x: 'ABC', + y: 10, + }, + { + x: 'DEF', + y: 60, + }, + { + x: 'XYZ', + y: 41, + }, + ], + }, + { + name: 'Mobile', + data: [ + { + x: 'ABCD', + y: 10, + }, + { + x: 'DEFG', + y: 20, + }, + { + x: 'WXYZ', + y: 51, + }, + { + x: 'PQR', + y: 30, + }, + { + x: 'MNO', + y: 20, + }, + { + x: 'CDE', + y: 30, + }, + ], + }, + ], + legend: { + show: false, + }, + chart: { + height: 350, + type: 'treemap', + toolbar: { + show: false, + }, + }, + colors: ['#f9b931', '#22c55e'], + title: { + text: 'Multi-dimensional Treemap', + align: 'center', + }, + } + + distributedtreemapChart: Partial = { + series: [ + { + data: [ + { + x: 'New Delhi', + y: 218, + }, + { + x: 'Kolkata', + y: 149, + }, + { + x: 'Mumbai', + y: 184, + }, + { + x: 'Ahmedabad', + y: 55, + }, + { + x: 'Bangaluru', + y: 84, + }, + { + x: 'Pune', + y: 31, + }, + { + x: 'Chennai', + y: 70, + }, + { + x: 'Jaipur', + y: 30, + }, + { + x: 'Surat', + y: 44, + }, + { + x: 'Hyderabad', + y: 68, + }, + { + x: 'Lucknow', + y: 28, + }, + { + x: 'Indore', + y: 19, + }, + { + x: 'Kanpur', + y: 29, + }, + ], + }, + ], + legend: { + show: false, + }, + chart: { + height: 350, + type: 'treemap', + toolbar: { + show: false, + }, + }, + title: { + text: 'Distibuted Treemap (different color for each cell)', + align: 'center', + }, + colors: ['#1c84ee', '#ff6c2f', '#f9b931'], + plotOptions: { + treemap: { + distributed: true, + enableShades: false, + }, + }, + } + + rangetreemapChart: Partial = { + series: [ + { + data: [ + { + x: 'INTC', + y: 1.2, + }, + { + x: 'GS', + y: 0.4, + }, + { + x: 'CVX', + y: -1.4, + }, + { + x: 'GE', + y: 2.7, + }, + { + x: 'CAT', + y: -0.3, + }, + { + x: 'RTX', + y: 5.1, + }, + { + x: 'CSCO', + y: -2.3, + }, + { + x: 'JNJ', + y: 2.1, + }, + { + x: 'PG', + y: 0.3, + }, + { + x: 'TRV', + y: 0.12, + }, + { + x: 'MMM', + y: -2.31, + }, + { + x: 'NKE', + y: 3.98, + }, + { + x: 'IYT', + y: 1.67, + }, + ], + }, + ], + legend: { + show: false, + }, + chart: { + height: 350, + type: 'treemap', + toolbar: { + show: false, + }, + }, + title: { + text: 'Treemap with Color scale', + align: 'center', + }, + dataLabels: { + enabled: true, + style: { + fontSize: '12px', + }, + offsetY: -4, + }, + plotOptions: { + treemap: { + enableShades: true, + shadeIntensity: 0.5, + reverseNegativeShade: true, + colorScale: { + ranges: [ + { + from: -6, + to: 0, + color: '#1c84ee', + }, + { + from: 0.001, + to: 6, + color: '#4ecac2', + }, + ], + }, + }, + }, + } +} diff --git a/apiferia/src/app/views/dashboards/analytics/analytics.component.html b/apiferia/src/app/views/dashboards/analytics/analytics.component.html new file mode 100644 index 00000000..01d44221 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/analytics.component.html @@ -0,0 +1,41 @@ + +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + +
    +
    + diff --git a/apiferia/src/app/views/dashboards/analytics/analytics.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/analytics.component.spec.ts new file mode 100644 index 00000000..24639712 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/analytics.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AnalyticsComponent } from './analytics.component' + +describe('AnalyticsComponent', () => { + let component: AnalyticsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AnalyticsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AnalyticsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/analytics.component.ts b/apiferia/src/app/views/dashboards/analytics/analytics.component.ts new file mode 100644 index 00000000..c994d26f --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/analytics.component.ts @@ -0,0 +1,27 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { StateComponent } from './components/state/state.component' +import { ConversationComponent } from './components/conversation/conversation.component' +import { PerformanceComponent } from './components/performance/performance.component' +import { SessionbycountyComponent } from './components/sessionbycounty/sessionbycounty.component' +import { BrowserComponent } from './components/browser/browser.component' +import { TopPageComponent } from './components/top-page/top-page.component' + +@Component({ + selector: 'app-analytics', + standalone: true, + imports: [ + PageTitleComponent, + StateComponent, + ConversationComponent, + PerformanceComponent, + SessionbycountyComponent, + BrowserComponent, + TopPageComponent, + BrowserComponent, + ], + templateUrl: './analytics.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class AnalyticsComponent {} diff --git a/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.html b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.html new file mode 100644 index 00000000..edd683d1 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.html @@ -0,0 +1,39 @@ +
    +
    +

    Session By Browser

    + +
    +
    + + @for (data of browserData; track $index) { +
    + {{ data.name }} + {{ data.percentage }}% + {{ data.amount }}k +
    + } +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.spec.ts new file mode 100644 index 00000000..02daa459 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BrowserComponent } from './browser.component' + +describe('BrowserComponent', () => { + let component: BrowserComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BrowserComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BrowserComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.ts b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.ts new file mode 100644 index 00000000..267259f3 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/browser/browser.component.ts @@ -0,0 +1,16 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { browserList } from '../../data' +import { SimplebarAngularModule } from 'simplebar-angular' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'analytics-browser', + standalone: true, + imports: [SimplebarAngularModule, NgbDropdownModule], + templateUrl: './browser.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class BrowserComponent { + browserData = browserList +} diff --git a/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.html b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.html new file mode 100644 index 00000000..fdd90a2f --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.html @@ -0,0 +1,33 @@ +
    +
    Conversions
    +
    + +
    +
    +
    +

    This Week

    +

    23.5k

    +
    + +
    +

    Last Week

    +

    41.05k

    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.spec.ts new file mode 100644 index 00000000..ef305a7b --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ConversationComponent } from './conversation.component' + +describe('ConversationComponent', () => { + let component: ConversationComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ConversationComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ConversationComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.ts b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.ts new file mode 100644 index 00000000..45415c09 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/conversation/conversation.component.ts @@ -0,0 +1,78 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'analytics-conversation', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './conversation.component.html', + styles: ``, +}) +export class ConversationComponent { + conversationChart: Partial = { + chart: { + height: 292, + type: 'radialBar', + }, + plotOptions: { + radialBar: { + startAngle: -135, + endAngle: 135, + dataLabels: { + name: { + fontSize: '14px', + color: 'undefined', + offsetY: 100, + }, + value: { + offsetY: 55, + fontSize: '20px', + color: undefined, + formatter: function (val: number) { + return val + '%' + }, + }, + }, + track: { + background: 'rgba(170,184,197, 0.2)', + margin: 0, + }, + }, + }, + fill: { + gradient: { + shade: 'dark', + shadeIntensity: 0.2, + inverseColors: false, + opacityFrom: 1, + opacityTo: 1, + stops: [0, 50, 65, 91], + }, + }, + stroke: { + dashArray: 4, + }, + colors: ['#7f56da', '#22c55e'], + series: [65.2], + labels: ['Returning Customer'], + responsive: [ + { + breakpoint: 380, + options: { + chart: { + height: 180, + }, + }, + }, + ], + grid: { + padding: { + top: 0, + right: 0, + bottom: 0, + left: 0, + }, + }, + } +} diff --git a/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.html b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.html new file mode 100644 index 00000000..dd668173 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.html @@ -0,0 +1,44 @@ +
    +
    +

    Performance

    +
    + + + + +
    +
    + + + + +
    +
    + +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.spec.ts new file mode 100644 index 00000000..a0f897b6 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PerformanceComponent } from './performance.component' + +describe('PerformanceComponent', () => { + let component: PerformanceComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PerformanceComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PerformanceComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.ts b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.ts new file mode 100644 index 00000000..e17a6a44 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/performance/performance.component.ts @@ -0,0 +1,144 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'analytics-performance', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './performance.component.html', + styles: ``, +}) +export class PerformanceComponent { + performanceChart: Partial = { + series: [ + { + name: 'Page Views', + type: 'bar', + data: [34, 65, 46, 68, 49, 61, 42, 44, 78, 52, 63, 67], + }, + { + name: 'Clicks', + type: 'area', + data: [8, 12, 7, 17, 21, 11, 5, 9, 7, 29, 12, 35], + }, + ], + chart: { + height: 313, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + dashArray: [0, 0], + width: [0, 2], + curve: 'smooth', + }, + fill: { + opacity: [1, 1], + type: ['solid', 'gradient'], + gradient: { + type: 'vertical', + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0, + stops: [0, 90], + }, + }, + markers: { + size: [0, 0], + strokeWidth: 2, + hover: { + size: 4, + }, + }, + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + axisTicks: { + show: false, + }, + axisBorder: { + show: false, + }, + }, + yaxis: { + min: 0, + axisBorder: { + show: false, + }, + }, + grid: { + show: true, + strokeDashArray: 3, + xaxis: { + lines: { + show: false, + }, + }, + yaxis: { + lines: { + show: true, + }, + }, + padding: { + top: 0, + right: -2, + bottom: 0, + left: 10, + }, + }, + legend: { + show: true, + horizontalAlign: 'center', + offsetX: 0, + offsetY: 5, + itemMargin: { + horizontal: 10, + vertical: 0, + }, + }, + plotOptions: { + bar: { + columnWidth: '30%', + barHeight: '70%', + borderRadius: 3, + }, + }, + colors: ['#7f56da', '#22c55e'], + tooltip: { + shared: true, + y: [ + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(1) + 'k' + } + return y + }, + }, + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return y.toFixed(1) + 'k' + } + return y + }, + }, + ], + }, + } +} diff --git a/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.html b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.html new file mode 100644 index 00000000..e6abc86d --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.html @@ -0,0 +1,67 @@ +
    +
    +

    Sessions by Country

    + +
    + +
    +
    +
    + +
    +
    +
    + @for (item of countryList; track $index) { +
    +

    + + {{ item.name }} +

    +
    +
    +
    + +
    +
    +

    {{ item.progressAmount }}k

    +
    +
    + } +
    +
    +
    +
    + +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.spec.ts new file mode 100644 index 00000000..3c6a5594 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SessionbycountyComponent } from './sessionbycounty.component' + +describe('SessionbycountyComponent', () => { + let component: SessionbycountyComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SessionbycountyComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SessionbycountyComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.ts b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.ts new file mode 100644 index 00000000..ecd7f1e1 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/sessionbycounty/sessionbycounty.component.ts @@ -0,0 +1,51 @@ +import { WorldVectorMapComponent } from '@/app/components/vector-maps/world-vector-map.component' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import 'jsvectormap' +import 'jsvectormap/dist/maps/world.js' +import { countryList } from '../../data' +import { + NgbDropdownModule, + NgbProgressbarModule, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'analytics-sessionbycounty', + standalone: true, + imports: [WorldVectorMapComponent, NgbProgressbarModule, NgbDropdownModule], + templateUrl: './sessionbycounty.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class SessionbycountyComponent { + countryList = countryList + + worldMapConfig = { + map: 'world', + selector: '#world-map-markers', + zoomOnScroll: true, + zoomButtons: false, + markersSelectable: true, + markers: [ + { name: 'Canada', coords: [56.1304, -106.3468] }, + { name: 'Brazil', coords: [-14.235, -51.9253] }, + { name: 'Russia', coords: [61, 105] }, + { name: 'China', coords: [35.8617, 104.1954] }, + { name: 'United States', coords: [37.0902, -95.7129] }, + ], + markerStyle: { + initial: { fill: '#7f56da' }, + selected: { fill: '#22c55e' }, + }, + labels: { + markers: { + render: (marker: any) => marker.name, + }, + }, + regionStyle: { + initial: { + fill: 'rgba(169,183,197, 0.3)', + fillOpacity: 1, + }, + }, + } +} diff --git a/apiferia/src/app/views/dashboards/analytics/components/state/state.component.html b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.html new file mode 100644 index 00000000..e5f8a232 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.html @@ -0,0 +1,32 @@ +
    + @for (data of stateList; track $index) { +
    +
    +
    +
    +
    +
    + +
    +
    + +
    +

    + {{ data.name }} +

    +

    + {{ data.amount }} +

    +
    +
    + +
    +
    +
    + } +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/state/state.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.spec.ts new file mode 100644 index 00000000..60e9e50f --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { StateComponent } from './state.component' + +describe('StateComponent', () => { + let component: StateComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [StateComponent], + }).compileComponents() + + fixture = TestBed.createComponent(StateComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/state/state.component.ts b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.ts new file mode 100644 index 00000000..3ea3ede9 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/state/state.component.ts @@ -0,0 +1,14 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { stateData } from '../../data' + +@Component({ + selector: 'analytics-state', + standalone: true, + imports: [], + templateUrl: './state.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class StateComponent { + stateList = stateData +} diff --git a/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.html b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.html new file mode 100644 index 00000000..c4f5cd9b --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.html @@ -0,0 +1,42 @@ +
    +
    +

    Top Pages

    +
    + View All +
    +
    +
    + + + + + + + + + + + @for (item of pageList; track $index) { + + + + + + + } + +
    Page PathPage ViewsAvg Time on PageExit Rate
    + {{ + item.path + }} + {{ item.views }}{{ item.time }} + {{ item.rate }}% +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.spec.ts b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.spec.ts new file mode 100644 index 00000000..84255247 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TopPageComponent } from './top-page.component' + +describe('TopPageComponent', () => { + let component: TopPageComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TopPageComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TopPageComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.ts b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.ts new file mode 100644 index 00000000..e5c3e0f1 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/components/top-page/top-page.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { pageList } from '../../data' + +@Component({ + selector: 'analytics-top-page', + standalone: true, + imports: [], + templateUrl: './top-page.component.html', + styles: ``, +}) +export class TopPageComponent { + pageList = pageList +} diff --git a/apiferia/src/app/views/dashboards/analytics/data.ts b/apiferia/src/app/views/dashboards/analytics/data.ts new file mode 100644 index 00000000..e2b2faf2 --- /dev/null +++ b/apiferia/src/app/views/dashboards/analytics/data.ts @@ -0,0 +1,161 @@ +type StateType = { + icon: string + name: string + amount: string + iconColor: string +} + +type CountryType = { + icon: string + name: string + progressValue: number + progressAmount: number + progressType: string +} + +type BrowserType = { + name: string + percentage: number + amount: number +} + +export const stateData: StateType[] = [ + { + icon: 'iconamoon:eye-duotone', + name: 'Page View', + amount: '13,647', + iconColor: 'primary', + }, + { + icon: 'iconamoon:link-external-duotone', + name: 'Clicks', + amount: '9,526', + iconColor: 'success', + }, + { + icon: 'iconamoon:trend-up-bold', + name: 'Conversions', + amount: '65.2%', + iconColor: 'danger', + }, + { + icon: 'iconamoon:profile-circle-duotone', + name: 'New Users', + amount: '9.5k', + iconColor: 'warning', + }, +] + +export const countryList: CountryType[] = [ + { + icon: 'circle-flags:us', + name: 'United States', + progressValue: 82.5, + progressAmount: 659, + progressType: 'secondary', + }, + { + icon: 'circle-flags:ru', + name: 'Russia', + progressValue: 70.5, + progressAmount: 485, + progressType: 'info', + }, + { + icon: 'circle-flags:cn', + name: 'China', + progressValue: 65.8, + progressAmount: 355, + progressType: 'warning', + }, + { + icon: 'circle-flags:ca', + name: 'Canada', + progressValue: 55.8, + progressAmount: 204, + progressType: 'success', + }, + { + icon: 'circle-flags:br', + name: 'Brazil', + progressValue: 35.9, + progressAmount: 109, + progressType: 'primary', + }, +] + +export const browserList: BrowserType[] = [ + { + name: 'Chrome', + percentage: 62.5, + amount: 5.06, + }, + { + name: 'Firefox', + percentage: 12.3, + amount: 1.5, + }, + { + name: 'Safari', + percentage: 9.86, + amount: 1.03, + }, + { + name: 'Brave', + percentage: 3.15, + amount: 0.3, + }, + { + name: 'Opera', + percentage: 3.01, + amount: 1.58, + }, + { + name: 'Falkon', + percentage: 2.8, + amount: 0.01, + }, + { + name: 'Other', + percentage: 6.38, + amount: 3.6, + }, +] + +export const pageList = [ + { + path: 'reback/dashboard.html', + views: 4265, + time: '09m:45s', + rate: '20.4', + rateColor: 'danger', + }, + { + path: 'reback/chat.html', + views: 2584, + time: '05m:02s', + rate: '12.25', + rateColor: 'warning', + }, + { + path: 'reback/auth-login.html', + views: 3369, + time: '04m:25s', + rate: '5.2', + rateColor: 'success', + }, + { + path: 'reback/email.html', + views: 985, + time: '02m:03s', + rate: '64.2', + rateColor: 'danger', + }, + { + path: 'reback/social.html', + views: 653, + time: '15m:56s', + rate: '2.4', + rateColor: 'success', + }, +] diff --git a/apiferia/src/app/views/dashboards/dashboards.route.ts b/apiferia/src/app/views/dashboards/dashboards.route.ts new file mode 100644 index 00000000..41a34c0f --- /dev/null +++ b/apiferia/src/app/views/dashboards/dashboards.route.ts @@ -0,0 +1,22 @@ +import { Route } from '@angular/router' +import { AnalyticsComponent } from './analytics/analytics.component' +import { FinanceComponent } from './finance/finance.component' +import { SalesComponent } from './sales/sales.component' + +export const DASHBOARD_ROUTES: Route[] = [ + { + path: 'analytics', + component: AnalyticsComponent, + data: { title: 'Analytics' }, + }, + { + path: 'finance', + component: FinanceComponent, + data: { title: 'Finance' }, + }, + { + path: 'sales', + component: SalesComponent, + data: { title: 'Sales' }, + }, +] diff --git a/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.html b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.html new file mode 100644 index 00000000..57971c41 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.html @@ -0,0 +1,37 @@ +
    +
    +

    Expenses

    +
    + + + + +
    +
    + +
    +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.spec.ts b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.spec.ts new file mode 100644 index 00000000..c78966f9 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ExpensesComponent } from './expenses.component' + +describe('ExpensesComponent', () => { + let component: ExpensesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ExpensesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ExpensesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.ts b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.ts new file mode 100644 index 00000000..7b96f2d7 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/expenses/expenses.component.ts @@ -0,0 +1,105 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'finance-expenses', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './expenses.component.html', + styles: ``, +}) +export class ExpensesComponent { + expenseChart: Partial = { + series: [ + { + name: '2024', + data: [2.7, 2.2, 1.3, 2.5, 1, 2.5, 1.2, 1.2, 2.7, 1, 3.6, 2.1], + }, + { + name: '2023', + data: [ + -2.3, -1.9, -1, -2.1, -1.3, -2.2, -1.1, -2.3, -2.8, -1.1, -2.5, -1.5, + ], + }, + ], + chart: { + toolbar: { + show: false, + }, + type: 'bar', + fontFamily: 'inherit', + foreColor: '#ADB0BB', + height: 280, + stacked: true, + offsetX: -15, + }, + colors: ['var(--bs-primary)', 'var(--bs-info)'], + plotOptions: { + bar: { + horizontal: false, + barHeight: '80%', + columnWidth: '25%', + borderRadiusApplication: 'end', + borderRadiusWhenStacked: 'all', + }, + }, + dataLabels: { + enabled: false, + }, + legend: { + show: false, + }, + grid: { + show: true, + strokeDashArray: 3, + padding: { + top: -10, + right: 0, + bottom: -10, + left: 0, + }, + borderColor: 'rgba(0,0,0,0.05)', + xaxis: { + lines: { + show: true, + }, + }, + yaxis: { + lines: { + show: false, + }, + }, + }, + yaxis: { + tickAmount: 4, + labels: { + formatter: function (val) { + return val + 'k' + }, + }, + }, + xaxis: { + axisBorder: { + show: false, + }, + axisTicks: { + show: false, + }, + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'July', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + }, + } +} diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.html b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.html new file mode 100644 index 00000000..2e627f0f --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.html @@ -0,0 +1,84 @@ +
    +
    +

    Revenue Sources

    + +
    + +
    +
    + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    SourcesRevenuePerc.
    Online{{ currency }}187,232 + 48.63% + 2.5% Up +
    Offline{{ currency }}126,874 + 36.08% + 8.5% Up +
    Direct{{ currency }}90,127 + 23.41% + 10.98% Down +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.spec.ts b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.spec.ts new file mode 100644 index 00000000..5d868e34 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RevenueSourcesComponent } from './revenue-sources.component' + +describe('RevenueSourcesComponent', () => { + let component: RevenueSourcesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RevenueSourcesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RevenueSourcesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.ts b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.ts new file mode 100644 index 00000000..632ddf35 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue-sources/revenue-sources.component.ts @@ -0,0 +1,58 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { currency } from '@/app/common/constants' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'finance-revenue-sources', + standalone: true, + imports: [NgApexchartsModule, NgbDropdownModule], + templateUrl: './revenue-sources.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class RevenueSourcesComponent { + currency = currency + + revenueSourceChart: Partial = { + chart: { + height: 205, + type: 'donut', + }, + legend: { + show: false, + position: 'bottom', + horizontalAlign: 'center', + offsetX: 0, + offsetY: -5, + itemMargin: { + horizontal: 10, + vertical: 0, + }, + }, + stroke: { + width: 0, + }, + plotOptions: { + pie: { + donut: { + size: '70%', + labels: { + show: true, + total: { + showAlways: true, + show: true, + }, + }, + }, + }, + }, + series: [140, 125, 85], + labels: ['Online', 'Offline', 'Direct'], + colors: ['var(--bs-primary)', 'var(--bs-info)', 'var(--bs-light)'], + dataLabels: { + enabled: false, + }, + } +} diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.html b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.html new file mode 100644 index 00000000..e20e883b --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.html @@ -0,0 +1,40 @@ +
    +
    +

    Revenue

    +
    + + + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.spec.ts b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.spec.ts new file mode 100644 index 00000000..d30667d2 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RevenueComponent } from './revenue.component' + +describe('RevenueComponent', () => { + let component: RevenueComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RevenueComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RevenueComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.ts b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.ts new file mode 100644 index 00000000..0f6c3b26 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/revenue/revenue.component.ts @@ -0,0 +1,138 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'finance-revenue', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './revenue.component.html', + styles: ``, +}) +export class RevenueComponent { + revenueChart: Partial = { + series: [ + { + name: 'Revenue', + type: 'area', + data: [34, 65, 46, 68, 49, 61, 42, 44, 78, 52, 63, 67], + }, + { + name: 'Expenses', + type: 'line', + data: [8, 12, 7, 17, 21, 11, 5, 9, 7, 29, 12, 35], + }, + ], + chart: { + height: 280, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + dashArray: [0, 8], + width: [2, 2], + curve: 'smooth', + }, + fill: { + opacity: [1, 1], + type: ['gradient', 'solid'], + gradient: { + type: 'vertical', + // shadeIntensity: 1, + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0, + stops: [0, 70], + }, + }, + markers: { + size: [0, 0, 0], + strokeWidth: 2, + hover: { + size: 4, + }, + }, + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + axisTicks: { + show: false, + }, + axisBorder: { + show: false, + }, + }, + yaxis: { + min: 0, + tickAmount: 4, + labels: { + formatter: function (val) { + return val + 'k' + }, + offsetX: -15, + }, + axisBorder: { + show: false, + }, + }, + grid: { + show: true, + strokeDashArray: 3, + xaxis: { + lines: { + show: false, + }, + }, + yaxis: { + lines: { + show: true, + }, + }, + padding: { + top: -10, + right: -2, + bottom: -10, + left: -5, + }, + }, + legend: { + show: false, + }, + colors: ['#7f56da', '#22c55e'], + tooltip: { + shared: true, + y: [ + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return '$' + y.toFixed(2) + 'k' + } + return y + }, + }, + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return '$' + y.toFixed(2) + 'k' + } + return y + }, + }, + ], + }, + } +} diff --git a/apiferia/src/app/views/dashboards/finance/components/state/state.component.html b/apiferia/src/app/views/dashboards/finance/components/state/state.component.html new file mode 100644 index 00000000..7b5b1295 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/state/state.component.html @@ -0,0 +1,33 @@ +
    + @for (data of stateData; track $index) { +
    +
    +
    +
    +
    +

    ${{ data.amount }}k

    +

    + {{ data.name }} +

    + + {{ data.percentage }}% +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + } +
    diff --git a/apiferia/src/app/views/dashboards/finance/components/state/state.component.spec.ts b/apiferia/src/app/views/dashboards/finance/components/state/state.component.spec.ts new file mode 100644 index 00000000..60e9e50f --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/state/state.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { StateComponent } from './state.component' + +describe('StateComponent', () => { + let component: StateComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [StateComponent], + }).compileComponents() + + fixture = TestBed.createComponent(StateComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/components/state/state.component.ts b/apiferia/src/app/views/dashboards/finance/components/state/state.component.ts new file mode 100644 index 00000000..2052d0a3 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/state/state.component.ts @@ -0,0 +1,14 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { stateData } from '../../data' + +@Component({ + selector: 'finance-state', + standalone: true, + imports: [], + templateUrl: './state.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class StateComponent { + stateData = stateData +} diff --git a/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.html b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.html new file mode 100644 index 00000000..7611416f --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.html @@ -0,0 +1,108 @@ +
    +
    +

    Transactions

    +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + @for (data of transaction$ | async; track $index) { + + + + + + + + } + +
    NameDescriptionAmountTimestampStatus
    + + + {{ data.name }} + {{ data.description }} + {{ data.amount }} + + {{ data.date }} + {{ data.time }} + + {{ data.status }} +
    +
    +
    + + +
    diff --git a/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.spec.ts b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.spec.ts new file mode 100644 index 00000000..45940e47 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TransactionComponent } from './transaction.component' + +describe('TransactionComponent', () => { + let component: TransactionComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TransactionComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TransactionComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.ts b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.ts new file mode 100644 index 00000000..acead12a --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/components/transaction/transaction.component.ts @@ -0,0 +1,29 @@ +import { Component, inject } from '@angular/core' +import { transactionList, type TransactionType } from '../../data' +import { CommonModule } from '@angular/common' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'finance-transaction', + standalone: true, + imports: [CommonModule, NgbPaginationModule], + templateUrl: './transaction.component.html', + styles: ``, +}) +export class TransactionComponent { + transaction$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.transaction$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(transactionList, 10) + } +} diff --git a/apiferia/src/app/views/dashboards/finance/data.ts b/apiferia/src/app/views/dashboards/finance/data.ts new file mode 100644 index 00000000..0e1a08a5 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/data.ts @@ -0,0 +1,107 @@ +const avatar1 = 'assets/images/users/avatar-6.jpg' +const avatar2 = 'assets/images/users/avatar-2.jpg' +const avatar3 = 'assets/images/users/avatar-10.jpg' +const avatar4 = 'assets/images/users/avatar-5.jpg' +const avatar5 = 'assets/images/users/avatar-4.jpg' + +export type StateType = { + name: string + amount: string + icon: string + iconColor: string + percentage: string + percentageColor: string +} + +export type TransactionType = { + image: string + name: string + description: string + amount: string + date: string + time: string + status: string +} + +export const stateData: StateType[] = [ + { + name: 'Wallet Balance', + amount: '55.6', + icon: 'iconamoon:credit-card-duotone', + iconColor: 'info', + percentage: '8.72', + percentageColor: 'success', + }, + { + name: 'Total Income', + amount: '75.09', + icon: 'iconamoon:store-duotone', + iconColor: 'primary', + percentage: '7.36', + percentageColor: 'success', + }, + { + name: 'Total Expenses', + amount: '62.8', + icon: 'iconamoon:3d-duotone', + iconColor: 'success', + percentage: '5.62', + percentageColor: 'danger', + }, + { + name: 'Investments', + amount: '6.4', + icon: 'iconamoon:3d-duotone', + iconColor: 'warning', + percentage: '2.53', + percentageColor: 'success', + }, +] + +export const transactionList: TransactionType[] = [ + { + image: avatar1, + name: 'Adam M', + description: 'Licensing Revenue', + amount: 'USD $750.00', + date: '20 Apr,24', + time: '10:31:23 am', + status: 'Success', + }, + { + image: avatar2, + name: 'Alexa Newsome', + description: 'Invoice #1001', + amount: '-AUD $90.99', + date: '18 Apr,24', + time: '06:22:09 pm', + status: 'Cancelled', + }, + { + image: avatar3, + name: 'Shelly Dorey', + description: 'Custom Software Development', + amount: 'USD $500.00', + date: '16 Apr,24', + time: '05:09:58 pm', + status: 'Success', + }, + { + image: avatar4, + name: 'Fredrick Arnett', + description: 'Envato Payout - Collaboration', + amount: 'USD $1250.95', + date: '16 Apr,24', + time: '0:21:25 am', + status: 'Onhold', + }, + { + image: avatar5, + name: 'Barbara Frink', + description: 'Personal Payment', + amount: '-AUD $90.99', + date: '12 Apr,24', + time: '06:22:09 pm', + status: 'Failed', + }, +] diff --git a/apiferia/src/app/views/dashboards/finance/finance.component.html b/apiferia/src/app/views/dashboards/finance/finance.component.html new file mode 100644 index 00000000..3b5d9f35 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/finance.component.html @@ -0,0 +1,26 @@ + + + + +
    +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    diff --git a/apiferia/src/app/views/dashboards/finance/finance.component.spec.ts b/apiferia/src/app/views/dashboards/finance/finance.component.spec.ts new file mode 100644 index 00000000..18ccb5ba --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/finance.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FinanceComponent } from './finance.component' + +describe('FinanceComponent', () => { + let component: FinanceComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FinanceComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FinanceComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/finance/finance.component.ts b/apiferia/src/app/views/dashboards/finance/finance.component.ts new file mode 100644 index 00000000..4f4b82e5 --- /dev/null +++ b/apiferia/src/app/views/dashboards/finance/finance.component.ts @@ -0,0 +1,24 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { StateComponent } from './components/state/state.component' +import { RevenueComponent } from './components/revenue/revenue.component' +import { ExpensesComponent } from './components/expenses/expenses.component' +import { TransactionComponent } from './components/transaction/transaction.component' +import { RevenueSourcesComponent } from './components/revenue-sources/revenue-sources.component' + +@Component({ + selector: 'app-finance', + standalone: true, + imports: [ + PageTitleComponent, + StateComponent, + RevenueComponent, + ExpensesComponent, + TransactionComponent, + RevenueSourcesComponent, + ], + templateUrl: './finance.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class FinanceComponent {} diff --git a/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.html b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.html new file mode 100644 index 00000000..72c51646 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.html @@ -0,0 +1,51 @@ +
    +
    +

    New Accounts

    + View All +
    + + +
    +
    + + + + + + + + + + + + @for (data of accountList; track $index) { + + + + + + + + } + +
    IDDateUserAccountUsername
    {{ data.id }}{{ data.date }} + avatar-2 + {{ data.user.name }} + + {{ data.status }} + {{ data.username }}
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.spec.ts b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.spec.ts new file mode 100644 index 00000000..6546b50b --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { NewAccountsComponent } from './new-accounts.component' + +describe('NewAccountsComponent', () => { + let component: NewAccountsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [NewAccountsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(NewAccountsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.ts b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.ts new file mode 100644 index 00000000..7e2678a6 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/new-accounts/new-accounts.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core' +import { accountData } from '../../data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'sales-new-accounts', + standalone: true, + imports: [CommonModule], + templateUrl: './new-accounts.component.html', + styles: ``, +}) +export class NewAccountsComponent { + accountList = accountData +} diff --git a/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.html b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.html new file mode 100644 index 00000000..ee5d23a1 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.html @@ -0,0 +1,41 @@ +
    +
    +

    Overview

    +
    + + + + +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.spec.ts b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.spec.ts new file mode 100644 index 00000000..44dc6887 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { OverviewComponent } from './overview.component' + +describe('OverviewComponent', () => { + let component: OverviewComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [OverviewComponent], + }).compileComponents() + + fixture = TestBed.createComponent(OverviewComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.ts b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.ts new file mode 100644 index 00000000..ed70f247 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/overview/overview.component.ts @@ -0,0 +1,148 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component } from '@angular/core' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'sales-overview', + standalone: true, + imports: [NgApexchartsModule], + templateUrl: './overview.component.html', + styles: ``, +}) +export class OverviewComponent { + overviewChart: Partial = { + series: [ + { + name: 'Revenue', + type: 'area', + data: [34, 65, 46, 68, 49, 61, 42, 44, 78, 52, 63, 67], + }, + { + name: 'Orders', + type: 'line', + data: [8, 12, 7, 17, 21, 11, 5, 9, 7, 29, 12, 35], + }, + ], + chart: { + height: 369, + type: 'line', + toolbar: { + show: false, + }, + }, + stroke: { + dashArray: [0, 8], + width: [2, 2], + curve: 'smooth', + }, + fill: { + opacity: [1, 1], + type: ['gradient', 'solid'], + gradient: { + type: 'vertical', + inverseColors: false, + opacityFrom: 0.5, + opacityTo: 0, + stops: [0, 70], + }, + }, + markers: { + size: [0, 0, 0], + strokeWidth: 2, + hover: { + size: 4, + }, + }, + xaxis: { + categories: [ + 'Jan', + 'Feb', + 'Mar', + 'Apr', + 'May', + 'Jun', + 'Jul', + 'Aug', + 'Sep', + 'Oct', + 'Nov', + 'Dec', + ], + axisTicks: { + show: false, + }, + axisBorder: { + show: false, + }, + }, + yaxis: { + min: 0, + labels: { + formatter: function (val) { + return val + 'k' + }, + }, + axisBorder: { + show: false, + }, + }, + grid: { + show: true, + xaxis: { + lines: { + show: false, + }, + }, + yaxis: { + lines: { + show: true, + }, + }, + padding: { + top: 0, + right: -2, + bottom: 15, + left: 15, + }, + }, + legend: { + show: true, + horizontalAlign: 'center', + offsetX: 0, + offsetY: 5, + itemMargin: { + horizontal: 10, + vertical: 0, + }, + }, + plotOptions: { + bar: { + columnWidth: '30%', + barHeight: '70%', + borderRadius: 3, + }, + }, + colors: ['#7f56da', '#22c55e'], + tooltip: { + shared: true, + y: [ + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return '$' + y.toFixed(2) + 'k' + } + return y + }, + }, + { + formatter: function (y) { + if (typeof y !== 'undefined') { + return '$' + y.toFixed(2) + 'k' + } + return y + }, + }, + ], + }, + } +} diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.html b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.html new file mode 100644 index 00000000..bab0be8d --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.html @@ -0,0 +1,96 @@ +
    +
    +
    +

    Recent Orders

    + + + Create Order + +
    +
    + +
    + + + + + + + + + + + + + + + + + @for (data of order$ | async; track $index) { + + + + + + + + + + + + } + +
    Order ID.DateProductCustomer NameEmail IDPhone No.AddressPayment TypeStatus
    + {{ + data.orderId + }} + {{ data.date }} + product-1(1) + + {{ data.name }} + {{ data.email }}{{ data.phone }}{{ data.address }}{{ data.paymentType }} + {{ data.status }} +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + orders +
    +
    +
    +
      + + + + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.spec.ts b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.spec.ts new file mode 100644 index 00000000..b0ae61dc --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RecentOrdersComponent } from './recent-orders.component' + +describe('RecentOrdersComponent', () => { + let component: RecentOrdersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RecentOrdersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RecentOrdersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.ts b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.ts new file mode 100644 index 00000000..1bdbd5db --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-orders/recent-orders.component.ts @@ -0,0 +1,30 @@ +import { Component, inject } from '@angular/core' +import { ordersList, type OrderType } from '../../data' +import { CommonModule } from '@angular/common' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'sales-recent-orders', + standalone: true, + imports: [CommonModule, NgbPaginationModule, RouterLink], + templateUrl: './recent-orders.component.html', + styles: ``, +}) +export class RecentOrdersComponent { + order$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.order$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(ordersList, 5) + } +} diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.html b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.html new file mode 100644 index 00000000..a96a85f5 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.html @@ -0,0 +1,41 @@ +
    +
    +

    Recent Transactions

    + + View All +
    + + +
    +
    + + + + + + + + + + + + @for (data of transactionList; track $index) { + + + + + + + + } + +
    IDDateAmountStatusDescription
    {{ data.id }}{{ data.date }}${{ data.amount }} + {{ data.status }} + {{ data.description }}
    +
    +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.spec.ts b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.spec.ts new file mode 100644 index 00000000..64b52215 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { RecentTransactionComponent } from './recent-transaction.component' + +describe('RecentTransactionComponent', () => { + let component: RecentTransactionComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RecentTransactionComponent], + }).compileComponents() + + fixture = TestBed.createComponent(RecentTransactionComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.ts b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.ts new file mode 100644 index 00000000..881e0f09 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/recent-transaction/recent-transaction.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core' +import { TransactionsList } from '../../data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'sales-recent-transaction', + standalone: true, + imports: [CommonModule], + templateUrl: './recent-transaction.component.html', + styles: ``, +}) +export class RecentTransactionComponent { + transactionList = TransactionsList.slice(0, 5) +} diff --git a/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.html b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.html new file mode 100644 index 00000000..b0f1a989 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.html @@ -0,0 +1,85 @@ +
    +
    +

    Sales By Category

    + +
    + +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryOrdersPerc.
    Grocery187,232 + 48.63% + 2.5% Up +
    Electonics126,874 + 36.08% + 8.5% Up +
    Other90,127 + 23.41% + 10.98% Down +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.spec.ts b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.spec.ts new file mode 100644 index 00000000..7c327177 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SalesByCategoryComponent } from './sales-by-category.component' + +describe('SalesByCategoryComponent', () => { + let component: SalesByCategoryComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SalesByCategoryComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SalesByCategoryComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.ts b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.ts new file mode 100644 index 00000000..4ebaf95c --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/components/sales-by-category/sales-by-category.component.ts @@ -0,0 +1,54 @@ +import type { ChartOptions } from '@/app/common/apexchart.model' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { NgApexchartsModule } from 'ng-apexcharts' + +@Component({ + selector: 'sales-by-category', + standalone: true, + imports: [NgApexchartsModule, NgbDropdownModule], + templateUrl: './sales-by-category.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class SalesByCategoryComponent { + categoryChart: Partial = { + chart: { + height: 250, + type: 'donut', + }, + legend: { + show: false, + position: 'bottom', + horizontalAlign: 'center', + offsetX: 0, + offsetY: -5, + itemMargin: { + horizontal: 10, + vertical: 0, + }, + }, + stroke: { + width: 0, + }, + plotOptions: { + pie: { + donut: { + size: '80%', + labels: { + show: true, + total: { + showAlways: true, + show: true, + }, + }, + }, + }, + }, + series: [140, 125, 85, 60], + labels: ['Electronics', 'Grocery', 'Clothing', 'Other'], + colors: ['#f9b931', '#ff86c8', '#4ecac2', '#7f56da'], + dataLabels: { + enabled: false, + }, + } +} diff --git a/apiferia/src/app/views/dashboards/sales/data.ts b/apiferia/src/app/views/dashboards/sales/data.ts new file mode 100644 index 00000000..69a69490 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/data.ts @@ -0,0 +1,212 @@ +import { currentYear } from '@/app/common/constants' + +type UserType = { + avatar: string + name: string +} + +type AccountType = { + id: string + date: string + user: UserType + status: string + username: string +} + +export type TransactionType = { + id: string + date: string + amount: string + status: string + description: string +} + +export type OrderType = { + orderId: string + date: string + productImage: string + name: string + email: string + phone: string + address: string + paymentType: string + status: string +} + +export const accountData: AccountType[] = [ + { + id: '#US523', + date: '24 April, ' + currentYear, + user: { + avatar: 'assets/images/users/avatar-2.jpg', + name: 'Dan Adrick', + }, + status: 'Verified', + username: '@omions', + }, + { + id: '#US652', + date: '24 April, ' + currentYear, + user: { + avatar: 'assets/images/users/avatar-3.jpg', + name: 'Daniel Olsen', + }, + status: 'Verified', + username: '@alliates', + }, + { + id: '#US862', + date: '20 April, ' + currentYear, + user: { + avatar: 'assets/images/users/avatar-4.jpg', + name: 'Jack Roldan', + }, + status: 'Pending', + username: '@griys', + }, + { + id: '#US756', + date: '18 April, ' + currentYear, + user: { + avatar: 'assets/images/users/avatar-5.jpg', + name: 'Betty Cox', + }, + status: 'Verified', + username: '@reffon', + }, + { + id: '#US420', + date: '18 April, ' + currentYear, + user: { + avatar: 'assets/images/users/avatar-6.jpg', + name: 'Carlos Johnson', + }, + status: 'Blocked', + username: '@bebo', + }, +] + +export const TransactionsList: TransactionType[] = [ + { + id: '#98521', + date: '24 April, ' + currentYear, + amount: '120.55', + status: 'Cr', + description: 'Commisions', + }, + { + id: '#20158', + date: '24 April, ' + currentYear, + amount: '9.68', + status: 'Cr', + description: 'Affiliates', + }, + { + id: '#36589', + date: '20 April, ' + currentYear, + amount: '105.22', + status: 'Dr', + description: 'Grocery', + }, + { + id: '#95362', + date: '18 April, ' + currentYear, + amount: '80.59', + status: 'Cr', + description: 'Refunds', + }, + { + id: '#75214', + date: '18 April, ' + currentYear, + amount: '750.95', + status: 'Dr', + description: 'Bill Payments', + }, + + { + id: '#75215', + date: '17 April, ' + currentYear, + amount: '455.62', + status: 'Dr', + description: 'Electricity', + }, + { + id: '#75216', + date: '17 April, ' + currentYear, + amount: '102.77', + status: 'Cr', + description: 'Interest', + }, + { + id: '#75217', + date: '16 April, ' + currentYear, + amount: '79.49', + status: 'Cr', + description: 'Refunds', + }, + { + id: '#75218', + date: '05 April, ' + currentYear, + amount: '980.00', + status: 'Dr', + description: 'Shopping', + }, +] + +export const ordersList: OrderType[] = [ + { + orderId: '#RB5625', + date: '29 April ' + currentYear, + productImage: 'assets/images/products/product-1(1).png', + name: 'Anna M. Hines', + email: 'anna.hines@mail.com', + phone: '(+1)-555-1564-261', + address: 'Burr Ridge/Illinois', + paymentType: 'Credit Card', + status: 'Completed', + }, + { + orderId: '#RB9652', + date: '25 April ' + currentYear, + productImage: 'assets/images/products/product-4.png', + name: 'Judith H. Fritsche', + email: 'judith.fritsche.com', + phone: '(+57)-305-5579-759', + address: 'SULLIVAN/Kentucky', + paymentType: 'Credit Card', + status: 'Completed', + }, + { + orderId: '#RB5984', + date: '25 April ' + currentYear, + productImage: 'assets/images/products/product-5.png', + name: 'Peter T. Smith', + email: 'peter.smith@mail.com', + phone: '(+33)-655-5187-93', + address: 'Yreka/California', + paymentType: 'Pay Pal', + status: 'Completed', + }, + { + orderId: '#RB3625', + date: '21 April ' + currentYear, + productImage: 'assets/images/products/product-6.png', + name: 'Emmanuel J. Delcid', + email: 'emmanuel.delicid@mail.com', + phone: '(+30)-693-5553-637', + address: 'Atlanta/Georgia', + paymentType: 'Pay Pal', + status: 'Processing', + }, + { + orderId: '#RB8652', + date: '18 April ' + currentYear, + productImage: 'assets/images/products/product-1(2).png', + name: 'William J. Cook', + email: 'william.cook@mail.com', + phone: '(+91)-855-5446-150', + address: 'Rosenberg/Texas', + paymentType: 'Credit Card', + status: 'Processing', + }, +] diff --git a/apiferia/src/app/views/dashboards/sales/sales.component.html b/apiferia/src/app/views/dashboards/sales/sales.component.html new file mode 100644 index 00000000..a0455506 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/sales.component.html @@ -0,0 +1,34 @@ + + + + + + +
    +
    + +
    + +
    + + +
    +
    + +
    +
    + + +
    + +
    + + +
    +
    + +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/dashboards/sales/sales.component.spec.ts b/apiferia/src/app/views/dashboards/sales/sales.component.spec.ts new file mode 100644 index 00000000..0131b0b2 --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/sales.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SalesComponent } from './sales.component' + +describe('SalesComponent', () => { + let component: SalesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SalesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SalesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/dashboards/sales/sales.component.ts b/apiferia/src/app/views/dashboards/sales/sales.component.ts new file mode 100644 index 00000000..8f46d2be --- /dev/null +++ b/apiferia/src/app/views/dashboards/sales/sales.component.ts @@ -0,0 +1,25 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { OverviewComponent } from './components/overview/overview.component' +import { SalesByCategoryComponent } from './components/sales-by-category/sales-by-category.component' +import { NewAccountsComponent } from './components/new-accounts/new-accounts.component' +import { RecentTransactionComponent } from './components/recent-transaction/recent-transaction.component' +import { RecentOrdersComponent } from './components/recent-orders/recent-orders.component' +import { StateCardComponent } from '@/app/components/state-card/state-card.component' + +@Component({ + selector: 'app-sales', + standalone: true, + imports: [ + PageTitleComponent, + StateCardComponent, + OverviewComponent, + SalesByCategoryComponent, + NewAccountsComponent, + RecentTransactionComponent, + RecentOrdersComponent, + ], + templateUrl: './sales.component.html', + styles: ``, +}) +export class SalesComponent {} diff --git a/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.html b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.html new file mode 100644 index 00000000..376ff73c --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.html @@ -0,0 +1,14 @@ +
    +
    +
    +
    + +

    Congratulations !

    + +
    + Your Product has been successfully added! +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.spec.ts b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.spec.ts new file mode 100644 index 00000000..8bfe4008 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FinishComponent } from './finish.component' + +describe('FinishComponent', () => { + let component: FinishComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FinishComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FinishComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.ts b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.ts new file mode 100644 index 00000000..cc6487ee --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/finish/finish.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'create-finish', + standalone: true, + imports: [], + templateUrl: './finish.component.html', + styles: ``, +}) +export class FinishComponent {} diff --git a/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.html b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.html new file mode 100644 index 00000000..3036c661 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.html @@ -0,0 +1,132 @@ +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.spec.ts b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.spec.ts new file mode 100644 index 00000000..d327567f --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { GeneralDEtailComponent } from './general-detail.component' + +describe('GeneralDEtailComponent', () => { + let component: GeneralDEtailComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GeneralDEtailComponent], + }).compileComponents() + + fixture = TestBed.createComponent(GeneralDEtailComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.ts b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.ts new file mode 100644 index 00000000..2e7ef1b3 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/general-detail/general-detail.component.ts @@ -0,0 +1,52 @@ +import { SelectFormInputDirective } from '@/app/directive/select-form-input.directive' +import { Component, inject } from '@angular/core' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + type UntypedFormGroup, +} from '@angular/forms' +import { QuillModule } from 'ngx-quill' + +@Component({ + selector: 'create-general-detail', + standalone: true, + imports: [ + QuillModule, + FormsModule, + ReactiveFormsModule, + SelectFormInputDirective, + ], + templateUrl: './general-detail.component.html', + styles: ``, +}) +export class GeneralDEtailComponent { + generalForm!: UntypedFormGroup + + private fb = inject(UntypedFormBuilder) + + ngOnInit(): void { + this.generalForm = this.fb.group({ + content: ['Describe Your Product Description...'], + }) + } + + editorConfig = { + toolbar: [ + [{ font: [] }, { size: [] }], + ['bold', 'italic', 'underline', 'strike'], + [{ color: [] }, { background: [] }], + [{ script: 'super' }, { script: 'sub' }], + [{ header: [false, 1, 2, 3, 4, 5, 6] }, 'blockquote', 'code-block'], + [ + { list: 'ordered' }, + { list: 'bullet' }, + { indent: '-1' }, + { indent: '+1' }, + ], + ['direction', { align: [] }], + ['link', 'image', 'video'], + ['clean'], + ], + } +} diff --git a/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.html b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.html new file mode 100644 index 00000000..ac03c038 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.html @@ -0,0 +1,33 @@ +
    +
    +
    Fill all information below
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.spec.ts b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.spec.ts new file mode 100644 index 00000000..3887284e --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MetadataComponent } from './metadata.component' + +describe('MetadataComponent', () => { + let component: MetadataComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MetadataComponent], + }).compileComponents() + + fixture = TestBed.createComponent(MetadataComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.ts b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.ts new file mode 100644 index 00000000..aff4062d --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/components/metadata/metadata.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'create-metadata', + standalone: true, + imports: [], + templateUrl: './metadata.component.html', + styles: ``, +}) +export class MetadataComponent {} diff --git a/apiferia/src/app/views/ecommerce/create/create.component.html b/apiferia/src/app/views/ecommerce/create/create.component.html new file mode 100644 index 00000000..cd6c84e3 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/create.component.html @@ -0,0 +1,184 @@ + + +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/create/create.component.spec.ts b/apiferia/src/app/views/ecommerce/create/create.component.spec.ts new file mode 100644 index 00000000..1a26231e --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/create.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CreateComponent } from './create.component' + +describe('CreateComponent', () => { + let component: CreateComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CreateComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CreateComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/create/create.component.ts b/apiferia/src/app/views/ecommerce/create/create.component.ts new file mode 100644 index 00000000..2e0decfc --- /dev/null +++ b/apiferia/src/app/views/ecommerce/create/create.component.ts @@ -0,0 +1,25 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap' +import { GeneralDEtailComponent } from './components/general-detail/general-detail.component' +import { MetadataComponent } from './components/metadata/metadata.component' +import { FinishComponent } from './components/finish/finish.component' +import { FileUploaderComponent } from '@/app/components/file-uploader' + +@Component({ + selector: 'app-create', + standalone: true, + imports: [ + PageTitleComponent, + NgbNavModule, + GeneralDEtailComponent, + MetadataComponent, + FinishComponent, + FileUploaderComponent, + ], + templateUrl: './create.component.html', +}) +export class CreateComponent { + active = 1 + active1 = 1 +} diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.html b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.html new file mode 100644 index 00000000..74331e44 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.html @@ -0,0 +1,37 @@ +
    +
    + @for (item of customers$ | async; track $index) { + + } +
    +
    diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.spec.ts b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.spec.ts new file mode 100644 index 00000000..c218f983 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CustomerGridComponent } from './customer-grid.component' + +describe('CustomerGridComponent', () => { + let component: CustomerGridComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CustomerGridComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CustomerGridComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.ts b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.ts new file mode 100644 index 00000000..4defb100 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-grid/customer-grid.component.ts @@ -0,0 +1,28 @@ +import { Component, inject } from '@angular/core' +import { customerList, type CustomerType } from '../../data' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'customer-grid', + standalone: true, + imports: [CommonModule], + templateUrl: './customer-grid.component.html', + styles: ``, +}) +export class CustomerGridComponent { + customers$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.customers$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(customerList, 10) + } +} diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.html b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.html new file mode 100644 index 00000000..eb7e814b --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.html @@ -0,0 +1,82 @@ +
    +
    +
    + + + + + + + + + + + + + + + @for (item of customers$ | async; track $index) { + + + + + + + + + + } + +
    Customer NameDateEmail IDPhone No.LocationOrdersAction
    + + {{ item.date }}{{ item.email }}{{ item.phone }}{{ item.location }}{{ item.orders }} + + +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + Results +
    +
    +
    +
      + + + + +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.spec.ts b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.spec.ts new file mode 100644 index 00000000..6684a50c --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CustomerListComponent } from './customer-list.component' + +describe('CustomerListComponent', () => { + let component: CustomerListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CustomerListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CustomerListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.ts b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.ts new file mode 100644 index 00000000..3e362cb5 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/components/customer-list/customer-list.component.ts @@ -0,0 +1,29 @@ +import { Component, inject } from '@angular/core' +import { customerList, type CustomerType } from '../../data' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'customer-list', + standalone: true, + imports: [NgbPaginationModule, CommonModule], + templateUrl: './customer-list.component.html', + styles: ``, +}) +export class CustomerListComponent { + customers$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.customers$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(customerList, 10) + } +} diff --git a/apiferia/src/app/views/ecommerce/customers/customers.component.html b/apiferia/src/app/views/ecommerce/customers/customers.component.html new file mode 100644 index 00000000..8d2ecf64 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/customers.component.html @@ -0,0 +1,127 @@ + + +
    +
    +
    +
    +
    +
    +
    + + + + +
    + +
    +
    +
    +
    +
    + + + + + + Add Customer + +
    +
    + +
    +
    +
    +
    + +
    + +
    diff --git a/apiferia/src/app/views/ecommerce/customers/customers.component.spec.ts b/apiferia/src/app/views/ecommerce/customers/customers.component.spec.ts new file mode 100644 index 00000000..b11adcd6 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/customers.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CustomersComponent } from './customers.component' + +describe('CustomersComponent', () => { + let component: CustomersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CustomersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CustomersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/customers/customers.component.ts b/apiferia/src/app/views/ecommerce/customers/customers.component.ts new file mode 100644 index 00000000..7f261eb9 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/customers.component.ts @@ -0,0 +1,55 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { TableService } from '@/app/core/services/table.service' +import { NgbdSortableHeader } from '@/app/directive/sortable.directive' +import { Component, inject, ViewChildren, type QueryList } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { + NgbDropdownModule, + NgbNavModule, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' +import { CustomerGridComponent } from './components/customer-grid/customer-grid.component' +import { CustomerListComponent } from './components/customer-list/customer-list.component' +import { type CustomerType } from './data' + +@Component({ + selector: 'app-customers', + standalone: true, + imports: [ + PageTitleComponent, + CustomerListComponent, + CustomerGridComponent, + NgbNavModule, + NgbDropdownModule, + FormsModule, + NgbTooltipModule, + ], + templateUrl: './customers.component.html', + styles: ``, +}) +export class CustomersComponent { + active = 2 + sort!: '' | keyof CustomerType + + @ViewChildren(NgbdSortableHeader) headers!: QueryList< + NgbdSortableHeader + > + + public tableService = inject(TableService) + + sortData(column: any) { + this.sort = column + this.onSort() + } + + onSort() { + const column = this.sort + this.headers.forEach((header) => { + if (header.sortable !== column) { + header.direction = '' + } + }) + + this.tableService.sortColumn = column + } +} diff --git a/apiferia/src/app/views/ecommerce/customers/data.ts b/apiferia/src/app/views/ecommerce/customers/data.ts new file mode 100644 index 00000000..e72873a4 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/customers/data.ts @@ -0,0 +1,115 @@ +import { currentYear } from '@/app/common/constants' + +export type CustomerType = { + id: number + image: string + name: string + date: string + email: string + phone: string + location: string + orders: number +} + +export const customerList: CustomerType[] = [ + { + id: 1, + image: 'assets/images/users/avatar-1.jpg', + name: 'Anna M. Hines', + date: '23 April ' + currentYear, + email: 'anna.hines@mail.com', + phone: '(+1)-555-1564-261', + location: 'Burr Ridge/Illinois', + orders: 15, + }, + { + id: 2, + image: 'assets/images/users/avatar-2.jpg', + name: 'Candice F. Gilmore', + date: '12 April ' + currentYear, + email: 'candice.gilmore@mail.com', + phone: '(+257)-755-5532-588', + location: 'Roselle/Illinois', + orders: 215, + }, + { + id: 3, + image: 'assets/images/users/avatar-3.jpg', + name: 'Vanessa R. Davis', + date: '15 March ' + currentYear, + email: 'vanessa.davis@mail.com', + phone: '(+1)-441-5558-183', + location: 'Wann/Oklahoma', + orders: 125, + }, + { + id: 4, + image: 'assets/images/users/avatar-4.jpg', + name: 'Judith H. Fritsche', + date: '11 January ' + currentYear, + email: 'judith.fritsche.com', + phone: '(+57)-305-5579-759', + location: 'SULLIVAN/Kentucky', + orders: 5, + }, + { + id: 5, + image: 'assets/images/users/avatar-5.jpg', + name: 'Peter T. Smith', + date: '03 December ' + currentYear, + email: 'peter.smith@mail.com', + phone: '(+33)-655-5187-93', + location: 'Yreka/California', + orders: 15, + }, + { + id: 6, + image: 'assets/images/users/avatar-6.jpg', + name: 'Emmanuel J. Delcid', + date: '12 April ' + currentYear, + email: 'emmanuel.delicid@mail.com', + phone: '(+30)-693-5553-637', + location: 'Atlanta/Georgia', + orders: 10, + }, + { + id: 7, + image: 'assets/images/users/avatar-7.jpg', + name: 'William J. Cook', + date: '13 November ' + currentYear, + email: 'william.cook@mail.com', + phone: '(+91)-855-5446-150', + location: 'Rosenberg/Texas', + orders: 85, + }, + { + id: 8, + image: 'assets/images/users/avatar-8.jpg', + name: 'Martin R. Peters', + date: '25 August ' + currentYear, + email: 'martin.peters@mail.com', + phone: '(+61)-455-5943-13', + location: 'Youngstown/Ohio', + orders: 3, + }, + { + id: 9, + image: 'assets/images/users/avatar-9.jpg', + name: 'Paul M. Schubert', + date: '28 April ' + currentYear, + email: 'paul.schubert@mail.com', + phone: '(+61)-035-5531-64', + location: 'Austin/Texas', + orders: 181, + }, + { + id: 10, + image: 'assets/images/users/avatar-10.jpg', + name: 'Janet J. Champine', + date: '06 May ' + currentYear, + email: 'janet.champine@mail.com', + phone: '(+880)-115-5592-916', + location: 'Nashville/Tennessee', + orders: 521, + }, +] diff --git a/apiferia/src/app/views/ecommerce/ecommerce.route.ts b/apiferia/src/app/views/ecommerce/ecommerce.route.ts new file mode 100644 index 00000000..7a9fb416 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/ecommerce.route.ts @@ -0,0 +1,52 @@ +import { Route } from '@angular/router' +import { ProductsComponent } from './products/products.component' +import { ProductDetailsComponent } from './product-details/product-details.component' +import { CreateComponent } from './create/create.component' +import { CustomersComponent } from './customers/customers.component' +import { SellersComponent } from './sellers/sellers.component' +import { OrdersComponent } from './orders/orders.component' +import { OrderDetailsComponent } from './order-details/order-details.component' +import { InventoryComponent } from './inventory/inventory.component' + +export const ECOMMERCE_ROUTES: Route[] = [ + { + path: 'products', + component: ProductsComponent, + data: { title: 'Products' }, + }, + { + path: 'product/:id', + component: ProductDetailsComponent, + data: { title: 'Product Details' }, + }, + { + path: 'create', + component: CreateComponent, + data: { title: 'Create Product' }, + }, + { + path: 'customers', + component: CustomersComponent, + data: { title: 'Customers List' }, + }, + { + path: 'sellers', + component: SellersComponent, + data: { title: 'Sellers List' }, + }, + { + path: 'orders', + component: OrdersComponent, + data: { title: 'Orders List' }, + }, + { + path: 'orders/:id', + component: OrderDetailsComponent, + data: { title: 'Order details' }, + }, + { + path: 'inventory', + component: InventoryComponent, + data: { title: 'Inventory' }, + }, +] diff --git a/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.html b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.html new file mode 100644 index 00000000..4cd2c9bb --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.html @@ -0,0 +1,63 @@ +
    +
    +
    Filter Products
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + Clear +
    + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.spec.ts b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.spec.ts new file mode 100644 index 00000000..321af899 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FilterComponent } from './filter.component' + +describe('FilterComponent', () => { + let component: FilterComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FilterComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FilterComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.ts b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.ts new file mode 100644 index 00000000..66bb65d6 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/filter/filter.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'inventory-filter', + standalone: true, + imports: [], + templateUrl: './filter.component.html', + styles: ``, +}) +export class FilterComponent {} diff --git a/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.html b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.html new file mode 100644 index 00000000..cdd7561e --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.html @@ -0,0 +1,82 @@ +
    +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + + + + @for (data of inventoryData; track $index) { + + + + + + + + + + + } + +
    IDProductConditionLocationAvailableReservedOn handModified
    {{ data.id }} +
    +
    + product-1(1) +
    +
    +
    + {{ data.product.name }} +
    + Added: {{ data.product.added_date }} +
    +
    +
    + {{ data.condition }} + {{ data.location }}{{ data.available }}{{ data.reserved }}{{ data.on_hand }}{{ data.modified }}
    + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.spec.ts b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.spec.ts new file mode 100644 index 00000000..9fb2bf87 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InventoryProductComponent } from './inventory-product.component' + +describe('InventoryProductComponent', () => { + let component: InventoryProductComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InventoryProductComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InventoryProductComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.ts b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.ts new file mode 100644 index 00000000..0860ff1d --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/components/inventory-product/inventory-product.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { inventoryList } from '../../data' +import { CommonModule } from '@angular/common' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'inventory-product', + standalone: true, + imports: [CommonModule, RouterLink], + templateUrl: './inventory-product.component.html', + styles: ``, +}) +export class InventoryProductComponent { + inventoryData = inventoryList +} diff --git a/apiferia/src/app/views/ecommerce/inventory/data.ts b/apiferia/src/app/views/ecommerce/inventory/data.ts new file mode 100644 index 00000000..0447e9d8 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/data.ts @@ -0,0 +1,95 @@ +export type InventoryProductType = { + id: number + name: string + image: string + added_date: string +} + +export type InventoryType = { + id: string + product: InventoryProductType + condition: string + location: string + available: number + reserved: number + on_hand: number + modified: string +} + +export const inventoryList = [ + { + id: '#a113', + product: { + id: 1, + name: 'G15 Gaming Laptop', + image: 'assets/images/products/product-1(1).png', + added_date: '12 April 2018', + }, + condition: 'New', + location: 'WareHouse 1', + available: 3521, + reserved: 6532, + on_hand: 1236, + modified: '12/03/2021', + }, + { + id: '#a123', + product: { + id: 2, + name: 'Sony Alpha ILCE 6000Y', + image: 'assets/images/products/product-2.png', + added_date: '10 April 2018', + }, + condition: 'New', + location: 'WareHouse 2', + available: 4562, + reserved: 256, + on_hand: 214, + modified: '06/04/2021', + }, + { + id: '#a133', + product: { + id: 3, + name: 'Sony Wireless Headphone', + image: 'assets/images/products/product-3.png', + added_date: '25 December 2017', + }, + condition: 'Return', + location: 'WareHouse 3', + available: 125, + reserved: 4512, + on_hand: 412, + modified: '21/05/2020', + }, + { + id: '#a143', + product: { + id: 4, + name: 'Apple iPad Pro', + image: 'assets/images/products/product-4.png', + added_date: '05 May 2018', + }, + condition: 'Damaged', + location: 'WareHouse 1', + available: 4523, + reserved: 1241, + on_hand: 852, + modified: '15/03/2021', + }, + { + id: '#a153', + product: { + id: 5, + name: 'Adam ROMA USB-C', + image: 'assets/images/products/product-5.png', + added_date: '31 March 2018', + }, + condition: 'New', + location: 'WareHouse 2', + available: 1475, + reserved: 2345, + on_hand: 1256, + modified: '15/10/2020', + }, +] diff --git a/apiferia/src/app/views/ecommerce/inventory/inventory.component.html b/apiferia/src/app/views/ecommerce/inventory/inventory.component.html new file mode 100644 index 00000000..e62aa9ca --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/inventory.component.html @@ -0,0 +1,11 @@ + + +
    +
    + +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ecommerce/inventory/inventory.component.spec.ts b/apiferia/src/app/views/ecommerce/inventory/inventory.component.spec.ts new file mode 100644 index 00000000..3a54c96b --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/inventory.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InventoryComponent } from './inventory.component' + +describe('InventoryComponent', () => { + let component: InventoryComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InventoryComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InventoryComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/inventory/inventory.component.ts b/apiferia/src/app/views/ecommerce/inventory/inventory.component.ts new file mode 100644 index 00000000..b926f64d --- /dev/null +++ b/apiferia/src/app/views/ecommerce/inventory/inventory.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { FilterComponent } from './components/filter/filter.component' +import { InventoryProductComponent } from './components/inventory-product/inventory-product.component' + +@Component({ + selector: 'app-inventory', + standalone: true, + imports: [PageTitleComponent, FilterComponent, InventoryProductComponent], + templateUrl: './inventory.component.html', + styles: ``, +}) +export class InventoryComponent {} diff --git a/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.html b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.html new file mode 100644 index 00000000..a34ac591 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.html @@ -0,0 +1,32 @@ +
    +
    + +
    Billing Information
    +

    + Payment Type : + + Credit Card +

    + +

    + Provider : + + Visa ending in 4589 +

    +

    + Valid Date : + + 21/05 +

    +

    + CVV : + + xxx +

    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.spec.ts b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.spec.ts new file mode 100644 index 00000000..e16292a9 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BillingComponent } from './billing.component' + +describe('BillingComponent', () => { + let component: BillingComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BillingComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BillingComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.ts b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.ts new file mode 100644 index 00000000..22d35442 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/billing/billing.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'order-detail-billing', + standalone: true, + imports: [], + templateUrl: './billing.component.html', + styles: ``, +}) +export class BillingComponent {} diff --git a/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.html b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.html new file mode 100644 index 00000000..23ae1bc0 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.html @@ -0,0 +1,22 @@ +
    +
    + +
    Delivery Information
    +
    + +
    UPS Delivery
    +

    + Order ID : + + #123456 +

    +

    + Payment Mode : + + COD +

    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.spec.ts b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.spec.ts new file mode 100644 index 00000000..8bc2b356 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { DeliveryComponent } from './delivery.component' + +describe('DeliveryComponent', () => { + let component: DeliveryComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DeliveryComponent], + }).compileComponents() + + fixture = TestBed.createComponent(DeliveryComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.ts b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.ts new file mode 100644 index 00000000..93671d05 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/delivery/delivery.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'order-detail-delivery', + standalone: true, + imports: [], + templateUrl: './delivery.component.html', + styles: ``, +}) +export class DeliveryComponent {} diff --git a/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.html b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.html new file mode 100644 index 00000000..66e4c741 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.html @@ -0,0 +1,89 @@ +
    +
    +
    +
    +
    Products From Order #123456
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Product NameQuantityPriceTotal
    G15 Gaming Laptop3{{ currency }}240.59{{ currency }}721.77
    + Sony Alpha ILCE 6000Y 24.3 MP Mirrorless Digital SLR Camera + 5{{ currency }}135.99{{ currency }}679.95
    Sony Over-Ear Wireless Headphone with Mic1{{ currency }}99.49{{ currency }}99.49
    + Adam ROMA USB-C / USB-A 3.1 (2-in-1 Flash Drive) – 128GB + 2{{ currency }}350.19700.38
    +
    +
    +
    +
    + +
    +
    +
    +
    Products From Order #123456
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    DescriptionPrice
    Grand Total :{{ currency }}2201.59
    Shipping Charge :FREE
    Estimated tax :{{ currency }}15
    Total :{{ currency }}2266.59
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.spec.ts b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.spec.ts new file mode 100644 index 00000000..d316e183 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProductsComponent } from './products.component' + +describe('ProductsComponent', () => { + let component: ProductsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProductsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProductsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.ts b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.ts new file mode 100644 index 00000000..7a6dcb54 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/products/products.component.ts @@ -0,0 +1,13 @@ +import { currency } from '@/app/common/constants' +import { Component } from '@angular/core' + +@Component({ + selector: 'order-detail-products', + standalone: true, + imports: [], + templateUrl: './products.component.html', + styles: ``, +}) +export class ProductsComponent { + currency = currency +} diff --git a/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.html b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.html new file mode 100644 index 00000000..70468474 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.html @@ -0,0 +1,20 @@ +
    +
    + +
    Shipping Information
    +
    Alice S. Shepherd
    +
    + 4251 Private Lane,
    + Valdosta, GA 31601
    + Phone : + 229-269-1411
    + Mobile : + 740-302-6656 +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.spec.ts b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.spec.ts new file mode 100644 index 00000000..95f7b983 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ShippingComponent } from './shipping.component' + +describe('ShippingComponent', () => { + let component: ShippingComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ShippingComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ShippingComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.ts b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.ts new file mode 100644 index 00000000..2102b5d2 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/components/shipping/shipping.component.ts @@ -0,0 +1,10 @@ +import { Component } from '@angular/core' + +@Component({ + selector: 'order-detail-shipping', + standalone: true, + imports: [], + templateUrl: './shipping.component.html', + styles: ``, +}) +export class ShippingComponent {} diff --git a/apiferia/src/app/views/ecommerce/order-details/order-details.component.html b/apiferia/src/app/views/ecommerce/order-details/order-details.component.html new file mode 100644 index 00000000..6f405d24 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/order-details.component.html @@ -0,0 +1,28 @@ + + +
    +
    +
      +
    • Order Placed
    • +
    • Packed
    • +
    • Shipped
    • +
    • Delivered
    • +
    +
    +
    + + + +
    +
    + +
    + +
    + +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ecommerce/order-details/order-details.component.spec.ts b/apiferia/src/app/views/ecommerce/order-details/order-details.component.spec.ts new file mode 100644 index 00000000..00fa29c6 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/order-details.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { OrderDetailsComponent } from './order-details.component' + +describe('OrderDetailsComponent', () => { + let component: OrderDetailsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [OrderDetailsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(OrderDetailsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/order-details/order-details.component.ts b/apiferia/src/app/views/ecommerce/order-details/order-details.component.ts new file mode 100644 index 00000000..fb0f3965 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/order-details/order-details.component.ts @@ -0,0 +1,21 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { ProductsComponent } from './components/products/products.component' +import { ShippingComponent } from './components/shipping/shipping.component' +import { BillingComponent } from './components/billing/billing.component' +import { DeliveryComponent } from './components/delivery/delivery.component' + +@Component({ + selector: 'app-order-details', + standalone: true, + imports: [ + PageTitleComponent, + ProductsComponent, + ShippingComponent, + BillingComponent, + DeliveryComponent, + ], + templateUrl: './order-details.component.html', + styles: ``, +}) +export class OrderDetailsComponent {} diff --git a/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.html b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.html new file mode 100644 index 00000000..dca731a7 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.html @@ -0,0 +1,85 @@ +
    + + + + + + + + + + + + + + + + + @for (item of orders$ | async; track $index) { + + + + + + + + + + + + } + +
    Order ID.DateProductCustomer NameEmail IDPhone No.AddressPayment TypeStatus
    + {{ + item.orderID + }} + {{ item.date }} + product-1(1) + + {{ item.name }} + {{ item.email }}{{ item.phone }}{{ item.address }}{{ item.payment_type }} + {{ item.status }} +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + orders +
    +
    +
    +
      + + + + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.spec.ts b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.spec.ts new file mode 100644 index 00000000..4b3bfc43 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { OrderDataComponent } from './order-data.component' + +describe('OrderDataComponent', () => { + let component: OrderDataComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [OrderDataComponent], + }).compileComponents() + + fixture = TestBed.createComponent(OrderDataComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.ts b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.ts new file mode 100644 index 00000000..ad948240 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/component/order-data/order-data.component.ts @@ -0,0 +1,30 @@ +import { Component, inject } from '@angular/core' +import { orderList, type OrderType } from '../../data' +import { CommonModule } from '@angular/common' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'order-data', + standalone: true, + imports: [CommonModule, NgbPaginationModule, RouterLink], + templateUrl: './order-data.component.html', + styles: ``, +}) +export class OrderDataComponent { + orders$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.orders$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(orderList, 10) + } +} diff --git a/apiferia/src/app/views/ecommerce/orders/data.ts b/apiferia/src/app/views/ecommerce/orders/data.ts new file mode 100644 index 00000000..89a657bb --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/data.ts @@ -0,0 +1,124 @@ +export type OrderType = { + orderID: string + date: string + product: string + name: string + email: string + phone: string + address: string + payment_type: string + status: string +} + +export const orderList: OrderType[] = [ + { + orderID: '#RB5625', + date: '23/07/2021', + product: 'product-1(1).png', + name: 'Anna M. Hines', + email: 'anna.hines@mail.com', + phone: '(+1)-555-1564-261', + address: 'Burr Ridge/Illinois', + payment_type: 'Credit Card', + status: 'Completed', + }, + { + orderID: '#RB0025', + date: '06/09/2018', + product: 'product-2.png', + name: 'Candice F. Gilmore', + email: 'candice.gilmore@mail.com', + phone: '(+257)-755-5532-588', + address: 'Roselle/Illinois', + payment_type: 'Credit Card', + status: 'Processing', + }, + { + orderID: '#RB9064', + date: '12/07/2019', + product: 'product-3.png', + name: 'Vanessa R. Davis', + email: 'vanessa.davis@mail.com', + phone: '(+1)-441-5558-183', + address: 'Wann/Oklahoma', + payment_type: 'Pay Pal', + status: 'Cancel', + }, + { + orderID: '#RB9652', + date: '31/12/2021', + product: 'product-4.png', + name: 'Judith H. Fritsche', + email: 'judith.fritsche.com', + phone: '(+57)-305-5579-759', + address: 'SULLIVAN/Kentucky', + payment_type: 'Credit Card', + status: 'Completed', + }, + { + orderID: '#RB5984', + date: '01/05/2018', + product: 'product-5.png', + name: 'Peter T. Smith', + email: 'peter.smith@mail.com', + phone: '(+33)-655-5187-93', + address: 'Yreka/California', + payment_type: 'Pay Pal', + status: 'Completed', + }, + { + orderID: '#RB3625', + date: '12/06/2020', + product: 'product-6.png', + name: 'Emmanuel J. Delcid', + email: 'emmanuel.delicid@mail.com', + phone: '(+30)-693-5553-637', + address: 'Atlanta/Georgia', + payment_type: 'Pay Pal', + status: 'Processing', + }, + { + orderID: '#RB8652', + date: '14/08/2017', + product: 'product-1(2).png', + name: 'William J. Cook', + email: 'william.cook@mail.com', + phone: '(+91)-855-5446-150', + address: 'Rosenberg/Texas', + payment_type: 'Credit Card', + status: 'Processing', + }, + { + orderID: '#RB1002', + date: '13/07/2018', + product: 'product-1(3).png', + name: 'Martin R. Peters', + email: 'martin.peters@mail.com', + phone: '(+61)-455-5943-13', + address: 'Youngstown/Ohio', + payment_type: 'Credit Card', + status: 'Cancel', + }, + { + orderID: '#RB9622', + date: '18/11/2019', + product: 'product-3.png', + name: 'Paul M. Schubert', + email: 'paul.schubert@mail.com', + phone: '(+61)-035-5531-64', + address: 'Austin/Texas', + payment_type: 'Google Pay', + status: 'Completed', + }, + { + orderID: '#RB8745', + date: '07/03/2019', + product: 'product-4.png', + name: 'Janet J. Champine', + email: 'janet.champine@mail.com', + phone: '(+880)-115-5592-916', + address: 'Nashville/Tennessee', + payment_type: 'Google Pay', + status: 'Processing', + }, +] diff --git a/apiferia/src/app/views/ecommerce/orders/orders.component.html b/apiferia/src/app/views/ecommerce/orders/orders.component.html new file mode 100644 index 00000000..2f5d9a16 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/orders.component.html @@ -0,0 +1,62 @@ + + +
    +
    +
    +
    + +
    + + +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/orders/orders.component.spec.ts b/apiferia/src/app/views/ecommerce/orders/orders.component.spec.ts new file mode 100644 index 00000000..862c27f7 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/orders.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { OrdersComponent } from './orders.component' + +describe('OrdersComponent', () => { + let component: OrdersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [OrdersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(OrdersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/orders/orders.component.ts b/apiferia/src/app/views/ecommerce/orders/orders.component.ts new file mode 100644 index 00000000..85fca46e --- /dev/null +++ b/apiferia/src/app/views/ecommerce/orders/orders.component.ts @@ -0,0 +1,38 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject, ViewChildren, type QueryList } from '@angular/core' +import { OrderDataComponent } from './component/order-data/order-data.component' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { TableService } from '@/app/core/services/table.service' +import type { OrderType } from './data' +import { FormsModule } from '@angular/forms' +import { NgbdSortableHeader } from '@/app/directive/sortable.directive' + +@Component({ + selector: 'app-orders', + standalone: true, + imports: [ + PageTitleComponent, + OrderDataComponent, + NgbDropdownModule, + FormsModule, + ], + templateUrl: './orders.component.html', + styles: ``, +}) +export class OrdersComponent { + @ViewChildren(NgbdSortableHeader) headers!: QueryList< + NgbdSortableHeader + > + + public tableService = inject(TableService) + + onSort(column: '' | keyof OrderType) { + this.headers.forEach((header) => { + if (header.sortable !== column) { + header.direction = '' + } + }) + + this.tableService.sortColumn = column + } +} diff --git a/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.html b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.html new file mode 100644 index 00000000..3599b2c9 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.html @@ -0,0 +1,224 @@ +
    +
    +
    +
    +
    + +
    + +
    +
    + {{ productDetail.category }} +

    + {{ productDetail.productName }} +

    +

    + + + + + +

    +

    + ( 36 Customer Reviews) +

    +
    20 % Off
    +

    + Price : + {{ currency }}999 USD + + ${{ productDetail.price }} USD +

    +

    + Instock +

    + +
    + +
    + +
    + + +
    + +
    +
    + +
    +
    + Processor Brand : + + Apple +
    +
    + Processor Name : + + M1 +
    +
    + SSD : + + Yes +
    +
    + SSD Capacity : + + 256 GB +
    +
    + RAM : + + 8 GB +
    +
    +
    +
    About this item:
    +

    + Quad LED + Backlit IPS Display (227 PPI, 400 nits Brightness, Wide Colour + (P3), True Tone Technology) +

    +

    + Built-in + Speakers +

    +

    + Three-mic + Array with Directional Beamforming +

    +

    + Stereo + Speakers, Wide Stereo Sound, Support for Dolby Atmos Playback +

    +

    + 49.9 WHr + Li-polymer Battery +

    +

    + Backlit Magic + Keyboard +

    +
    + +
    + + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.spec.ts b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.spec.ts new file mode 100644 index 00000000..f5b59a75 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { DetailcardComponent } from './detailcard.component' + +describe('DetailcardComponent', () => { + let component: DetailcardComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DetailcardComponent], + }).compileComponents() + + fixture = TestBed.createComponent(DetailcardComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.ts b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.ts new file mode 100644 index 00000000..387d1b85 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/components/detailcard/detailcard.component.ts @@ -0,0 +1,28 @@ +import { Component, Input } from '@angular/core' +import { productDetail } from '../../data' +import { NgbNavModule, NgbRatingModule } from '@ng-bootstrap/ng-bootstrap' +import { products, type ProductType } from '../../../products/data' +import { currency } from '@/app/common/constants' + +@Component({ + selector: 'detail-card', + standalone: true, + imports: [NgbNavModule, NgbRatingModule], + templateUrl: './detailcard.component.html', + styles: ``, +}) +export class DetailcardComponent { + productDetail!: ProductType + discountPrice: number = 0 + currency = currency + + @Input() productId: number = 1 + + ngOnInit() { + products.forEach((product) => { + if (product.id == this.productId) { + this.productDetail = product + } + }) + } +} diff --git a/apiferia/src/app/views/ecommerce/product-details/data.ts b/apiferia/src/app/views/ecommerce/product-details/data.ts new file mode 100644 index 00000000..994a8fb4 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/data.ts @@ -0,0 +1,52 @@ +export type DetailType = { + id: number + category: string + images: string[] + title: string + rating: number + review: number + discount: number + price: number + stock: string + color: string[] + size: string[] + processorBrand: string + processorName: string + ssd: string + ssdCapacity: string + ram: string + about: string[] +} + +export const productDetail: DetailType = { + id: 1, + category: 'Apple MacBook Air M1', + images: [ + 'assets/images/products/product-1(2).png', + 'assets/images/products/product-1(1).png', + 'assets/images/products/product-1(3).png', + 'assets/images/products/product-1(4).png', + ], + title: + '(8 GB/256 GB SSD/Mac OS Big Sur) MGN63HN/A (13.3 inch, Space Grey, 1.29 kg)', + rating: 5, + review: 36, + discount: 20, + price: 999, + stock: 'Instock', + color: ['Black', 'Blue', 'Midnight'], + size: ['256 GB', '512 GB'], + processorBrand: 'Apple', + processorName: 'M1', + ssd: 'Yes', + ssdCapacity: '256 GB', + ram: '8 GB', + about: [ + 'Quad LED Backlit IPS Display (227 PPI, 400 nits Brightness, Wide Colour (P3), True Tone Technology)', + 'Built-in Speakers', + 'Three-mic Array with Directional Beamforming', + 'Stereo Speakers, Wide Stereo Sound, Support for Dolby Atmos Playback', + '49.9 WHr Li-polymer Battery', + 'Backlit Magic Keyboard', + ], +} diff --git a/apiferia/src/app/views/ecommerce/product-details/product-details.component.html b/apiferia/src/app/views/ecommerce/product-details/product-details.component.html new file mode 100644 index 00000000..74ddfce4 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/product-details.component.html @@ -0,0 +1,6 @@ + +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/ecommerce/product-details/product-details.component.spec.ts b/apiferia/src/app/views/ecommerce/product-details/product-details.component.spec.ts new file mode 100644 index 00000000..986033a6 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/product-details.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProductDetailsComponent } from './product-details.component' + +describe('ProductDetailsComponent', () => { + let component: ProductDetailsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProductDetailsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProductDetailsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/product-details/product-details.component.ts b/apiferia/src/app/views/ecommerce/product-details/product-details.component.ts new file mode 100644 index 00000000..eba65f42 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/product-details/product-details.component.ts @@ -0,0 +1,23 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, type OnInit } from '@angular/core' +import { ActivatedRoute } from '@angular/router' +import { DetailcardComponent } from './components/detailcard/detailcard.component' + +@Component({ + selector: 'app-product-details', + standalone: true, + imports: [PageTitleComponent, DetailcardComponent], + templateUrl: './product-details.component.html', + styles: ``, +}) +export class ProductDetailsComponent implements OnInit { + productId: any + + constructor(private route: ActivatedRoute) {} + + ngOnInit(): void { + this.route.paramMap.subscribe((params) => { + this.productId = params.get('id') + }) + } +} diff --git a/apiferia/src/app/views/ecommerce/products/data.ts b/apiferia/src/app/views/ecommerce/products/data.ts new file mode 100644 index 00000000..50b00069 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/products/data.ts @@ -0,0 +1,79 @@ +export type ProductType = { + id: number + productImage: string | string[] + productName: string + subtitle: string + category: string + price: string + inventory: string +} + +export const products: ProductType[] = [ + { + id: 1, + productImage: 'assets/images/products/product-1(1).png', + productName: 'G15 Gaming Laptop', + subtitle: + 'Power Your Laptop with a Long-Lasting and Fast-Charging Battery.', + category: 'Computer', + price: '240.59', + inventory: 'Limited', + }, + { + id: 2, + productImage: 'assets/images/products/product-2.png', + productName: 'Sony Alpha ILCE 6000Y 24.3 MP Mirrorless Digital SLR Camera', + subtitle: 'Capture special moments and portraits to remember and share.', + category: 'Camera', + price: '135.99', + inventory: 'Limited', + }, + { + id: 3, + productImage: 'assets/images/products/product-3.png', + productName: 'Sony Over-Ear Wireless Headphone with Mic', + subtitle: + " Headphones are a pair of small loudspeaker drivers worn on or around the head over a user's ears.", + category: 'Headphones', + price: '99.49', + inventory: 'In Stock', + }, + { + id: 4, + productImage: 'assets/images/products/product-4.png', + productName: 'Apple iPad Pro with Apple M1 chip', + subtitle: 'The new iPad mini and iPad.', + category: 'Mobile', + price: '27.59', + inventory: 'Out of Stock', + }, + { + id: 5, + productImage: 'assets/images/products/product-5.png', + productName: 'Adam ROMA USB-C / USB-A 3.1 (2-in-1 Flash Drive) – 128GB', + subtitle: + 'A USB flash drive is a data storage device that includes flash memory with an integrated USB interface.', + category: 'Pendrive', + price: '350.19', + inventory: 'Limited', + }, + { + id: 6, + productImage: 'assets/images/products/product-6.png', + productName: 'Apple iPHone 13', + subtitle: 'The new iPHone 1 and iPad.', + category: 'Mobile', + price: '75.59', + inventory: 'Out of Stock', + }, + { + id: 7, + productImage: 'assets/images/products/product-1(2).png', + productName: 'Apple Mac', + subtitle: + 'Power Your Laptop with a Long-Lasting and Fast-Charging Battery.', + category: 'Computer', + price: '350.00', + inventory: 'Limited', + }, +] diff --git a/apiferia/src/app/views/ecommerce/products/products.component.html b/apiferia/src/app/views/ecommerce/products/products.component.html new file mode 100644 index 00000000..31f2e39f --- /dev/null +++ b/apiferia/src/app/views/ecommerce/products/products.component.html @@ -0,0 +1,134 @@ + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + @for (item of products$ | async; track $index) { + + + + + + + + } + +
    Product NameCategoryPriceInventoryAction
    +
    +
    + product-1(1) +
    +
    +
    + {{ item.productName }} +
    + {{ item.subtitle }} +
    +
    +
    {{ item.category }}${{ item.price }} + {{ item.inventory }} + + + +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + Results +
    +
    +
    +
      + + + + +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/products/products.component.spec.ts b/apiferia/src/app/views/ecommerce/products/products.component.spec.ts new file mode 100644 index 00000000..d316e183 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/products/products.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProductsComponent } from './products.component' + +describe('ProductsComponent', () => { + let component: ProductsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProductsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProductsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/products/products.component.ts b/apiferia/src/app/views/ecommerce/products/products.component.ts new file mode 100644 index 00000000..5391a17b --- /dev/null +++ b/apiferia/src/app/views/ecommerce/products/products.component.ts @@ -0,0 +1,36 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { TableService } from '@/app/core/services/table.service' +import { CommonModule } from '@angular/common' +import { Component, type OnInit } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { RouterModule } from '@angular/router' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import type { Observable } from 'rxjs' +import { products, type ProductType } from './data' + +@Component({ + selector: 'app-products', + standalone: true, + imports: [ + PageTitleComponent, + CommonModule, + RouterModule, + NgbPaginationModule, + FormsModule, + ], + templateUrl: './products.component.html', + styles: ``, +}) +export class ProductsComponent implements OnInit { + products$: Observable + total$: Observable + + constructor(public tableService: TableService) { + this.products$ = tableService.items$ + this.total$ = tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(products, 5) + } +} diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.html b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.html new file mode 100644 index 00000000..6275c745 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.html @@ -0,0 +1,62 @@ +
    +
    + @for (item of sellers$ | async; track $index) { +
    +
    +
    + +
    + + avatar-1 + +
    +
    +

    + {{ item.name }} +

    +
    +
    +

    + {{ item.store_name }} +

    +

    Store Name

    +
    +
    +

    + {{ item.products }} +

    +

    Products

    +
    + View All Detail +
    +
    +
    + } +
    +
    diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.spec.ts b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.spec.ts new file mode 100644 index 00000000..d3cefd8c --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SellerGridComponent } from './seller-grid.component' + +describe('SellerGridComponent', () => { + let component: SellerGridComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SellerGridComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SellerGridComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.ts b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.ts new file mode 100644 index 00000000..16c0b159 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-grid/seller-grid.component.ts @@ -0,0 +1,29 @@ +import { Component, inject } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { sellersList, type SellerType } from '../../data' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'seller-grid', + standalone: true, + imports: [NgbDropdownModule, CommonModule], + templateUrl: './seller-grid.component.html', + styles: ``, +}) +export class SellerGridComponent { + sellers$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.sellers$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(sellersList, 10) + } +} diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.html b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.html new file mode 100644 index 00000000..355fa422 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.html @@ -0,0 +1,93 @@ +
    +
    +
    + + + + + + + + + + + + + + + + @for (data of sellers$ | async; track $index) { + + + + + + + + + + + } + +
    SellerStore NameRatingProductsWallet BalanceCreate DateRevenueAction
    + + {{ data.store_name }} + {{ data.rating }} + {{ data.products }}${{ data.wallet_balance }}{{ data.create_date }}${{ data.revenue }} + + +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + Results +
    +
    +
    +
      + + + + +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.spec.ts b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.spec.ts new file mode 100644 index 00000000..95986154 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SellerListComponent } from './seller-list.component' + +describe('SellerListComponent', () => { + let component: SellerListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SellerListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SellerListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.ts b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.ts new file mode 100644 index 00000000..5bfab997 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/components/seller-list/seller-list.component.ts @@ -0,0 +1,29 @@ +import { Component, inject } from '@angular/core' +import { sellersList, type SellerType } from '../../data' +import { CommonModule } from '@angular/common' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'seller-list', + standalone: true, + imports: [CommonModule, NgbPaginationModule], + templateUrl: './seller-list.component.html', + styles: ``, +}) +export class SellerListComponent { + sellers$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.sellers$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(sellersList, 10) + } +} diff --git a/apiferia/src/app/views/ecommerce/sellers/data.ts b/apiferia/src/app/views/ecommerce/sellers/data.ts new file mode 100644 index 00000000..1739f869 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/data.ts @@ -0,0 +1,124 @@ +export type SellerType = { + id: number + image: string + name: string + store_name: string + rating: number + products: number + wallet_balance: number + create_date: string + revenue: number +} + +export const sellersList: SellerType[] = [ + { + id: 1, + image: 'assets/images/users/avatar-1.jpg', + name: 'Anna M. Hines', + store_name: 'Acme', + rating: 4.9, + products: 356, + wallet_balance: 256.45, + create_date: '09/04/2021', + revenue: 269.56, + }, + { + id: 2, + image: 'assets/images/users/avatar-2.jpg', + name: 'Candice F. Gilmore', + store_name: 'Globex', + rating: 3.2, + products: 289, + wallet_balance: 156.98, + create_date: '13/05/2021', + revenue: 89.75, + }, + { + id: 3, + image: 'assets/images/users/avatar-3.jpg', + name: 'Vanessa R. Davis', + store_name: 'Soylent', + rating: 4.1, + products: 71, + wallet_balance: 859.5, + create_date: '21/02/2020', + revenue: 452.5, + }, + { + id: 4, + image: 'assets/images/users/avatar-4.jpg', + name: 'Judith H. Fritsche', + store_name: 'Initech', + rating: 2.5, + products: 125, + wallet_balance: 163.75, + create_date: '09/05/2020', + revenue: 365, + }, + { + id: 5, + image: 'assets/images/users/avatar-5.jpg', + name: 'Peter T. Smith', + store_name: 'Hooli', + rating: 3.7, + products: 265, + wallet_balance: 545, + create_date: '15/06/2019', + revenue: 465.59, + }, + { + id: 6, + image: 'assets/images/users/avatar-6.jpg', + name: 'Emmanuel J. Delcid', + store_name: 'Vehement', + rating: 4.3, + products: 68, + wallet_balance: 136.54, + create_date: '11/12/2019', + revenue: 278.95, + }, + { + id: 7, + image: 'assets/images/users/avatar-7.jpg', + name: 'William J. Cook', + store_name: 'Massive', + rating: 1.8, + products: 550, + wallet_balance: 365.85, + create_date: '26/1/2021', + revenue: 475.96, + }, + { + id: 8, + image: 'assets/images/users/avatar-8.jpg', + name: 'Martin R. Peters', + store_name: 'Fringe', + rating: 3.5, + products: 123, + wallet_balance: 95.7, + create_date: '13/04/2020', + revenue: 142, + }, + { + id: 9, + image: 'assets/images/users/avatar-9.jpg', + name: 'Paul M. Schubert', + store_name: 'Weeds', + rating: 2.4, + products: 789, + wallet_balance: 423.4, + create_date: '05/07/2020', + revenue: 652.9, + }, + { + id: 10, + image: 'assets/images/users/avatar-10.jpg', + name: 'Janet J. Champine', + store_name: 'Soylent', + rating: 4.6, + products: 75, + wallet_balance: 216.8, + create_date: '17/03/2019', + revenue: 180.75, + }, +] diff --git a/apiferia/src/app/views/ecommerce/sellers/sellers.component.html b/apiferia/src/app/views/ecommerce/sellers/sellers.component.html new file mode 100644 index 00000000..59e5226f --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/sellers.component.html @@ -0,0 +1,90 @@ + + +
    +
    +
    +
    +
    + + + + +
    + +
    +
    +
    +
    +
    + + + Add Seller + +
    +
    + +
    +
    +
    + +
    diff --git a/apiferia/src/app/views/ecommerce/sellers/sellers.component.spec.ts b/apiferia/src/app/views/ecommerce/sellers/sellers.component.spec.ts new file mode 100644 index 00000000..3d43c3e7 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/sellers.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SellersComponent } from './sellers.component' + +describe('SellersComponent', () => { + let component: SellersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SellersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SellersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ecommerce/sellers/sellers.component.ts b/apiferia/src/app/views/ecommerce/sellers/sellers.component.ts new file mode 100644 index 00000000..c1548941 --- /dev/null +++ b/apiferia/src/app/views/ecommerce/sellers/sellers.component.ts @@ -0,0 +1,44 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject, ViewChildren, type QueryList } from '@angular/core' +import { SellerListComponent } from './components/seller-list/seller-list.component' +import { SellerGridComponent } from './components/seller-grid/seller-grid.component' +import { NgbNavModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' +import type { SellerType } from './data' +import { TableService } from '@/app/core/services/table.service' +import { FormsModule } from '@angular/forms' +import { NgbdSortableHeader } from '@/app/directive/sortable.directive' + +@Component({ + selector: 'app-sellers', + standalone: true, + imports: [ + PageTitleComponent, + SellerListComponent, + SellerGridComponent, + NgbNavModule, + FormsModule, + NgbTooltipModule, + ], + templateUrl: './sellers.component.html', + styles: ``, +}) +export class SellersComponent { + sort!: '' | keyof SellerType + + @ViewChildren(NgbdSortableHeader) headers!: QueryList< + NgbdSortableHeader + > + + public tableService = inject(TableService) + + onSort() { + const column = this.sort + this.headers.forEach((header) => { + if (header.sortable !== column) { + header.direction = '' + } + }) + + this.tableService.sortColumn = column + } +} diff --git a/apiferia/src/app/views/forms/basic/basic.component.html b/apiferia/src/app/views/forms/basic/basic.component.html new file mode 100644 index 00000000..890795d0 --- /dev/null +++ b/apiferia/src/app/views/forms/basic/basic.component.html @@ -0,0 +1,311 @@ + + +
    +
    +
    +
    +
    + Basic Example# +
    +

    + Give textual form controls like <input>s and + <textarea>s an upgrade with custom styles, sizing, + focus states, and more. +

    +
    +
    +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    + +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Input Sizing# +
    +

    + Set heights using classes like .form-control-lg and + .form-control-sm. +

    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Disabled Input# +
    +

    + Add the disabled boolean attribute on an input to give it + a grayed out appearance, remove pointer events, and prevent focusing. +

    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Readonly Input# +
    +

    + Add the readonly boolean attribute on an input to prevent + modification of the input’s value. readonly inputs can + still be focused and selected, while disabled inputs + cannot. +

    +

    + If you want to have <input readonly> elements in + your form styled as plain text, replace + .form-control with + .form-control-plaintext to remove the default form field + styling and preserve the correct margin and + padding. +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Datalists input# +
    +

    + If you want to have <input readonly> elements in + your form styled as plain text, replace + .form-control with + .form-control-plaintext to remove the default form field + styling and preserve the correct margin and + padding. +

    +
    +
    +
    +
    + + + + + + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Select# +
    +

    + Custom <select> menus need only a custom class, + .form-select to trigger the custom styles. Custom styles + are limited to the <select>’s initial appearance + and cannot modify the <option>s due to browser + limitations. +

    + +
    +
    +
    +
    + + +
    + +

    + The multiple attribute is also supported: +

    + +
    + + +
    + +

    As is the size attribute:

    + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/basic/basic.component.spec.ts b/apiferia/src/app/views/forms/basic/basic.component.spec.ts new file mode 100644 index 00000000..2d3ca620 --- /dev/null +++ b/apiferia/src/app/views/forms/basic/basic.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BasicComponent } from './basic.component' + +describe('BasicComponent', () => { + let component: BasicComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BasicComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BasicComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/basic/basic.component.ts b/apiferia/src/app/views/forms/basic/basic.component.ts new file mode 100644 index 00000000..84a89bec --- /dev/null +++ b/apiferia/src/app/views/forms/basic/basic.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-basic', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './basic.component.html', + styles: ``, +}) +export class BasicComponent {} diff --git a/apiferia/src/app/views/forms/checkbox/checkbox.component.html b/apiferia/src/app/views/forms/checkbox/checkbox.component.html new file mode 100644 index 00000000..5b64417e --- /dev/null +++ b/apiferia/src/app/views/forms/checkbox/checkbox.component.html @@ -0,0 +1,477 @@ + + +
    +
    +
    +
    +
    + Checkbox# +
    +

    + Each checkbox and radio + <input> and <label> pairing is + wrapped in a <div> to create our custom control. + Structurally, this is the same approach as our default + .form-check. +

    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Inline Checkbox# +
    + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Disabled Checkbox# +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Colors Checkbox# +
    + +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Radio# +
    +

    + Each Radio + <input> and <label> pairing is + wrapped in a <div> to create our custom control. + Structurally, this is the same approach as our default + .form-check. +

    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Inline Radio# +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Disabled Radio# +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Colors Radio# +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + +
    +
    +
    + Switch# +
    +

    + A switch has the markup of a custom checkbox but uses the + .form-switch class to render a toggle switch. Switches + also support the disabled attribute. +

    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/checkbox/checkbox.component.spec.ts b/apiferia/src/app/views/forms/checkbox/checkbox.component.spec.ts new file mode 100644 index 00000000..9acced00 --- /dev/null +++ b/apiferia/src/app/views/forms/checkbox/checkbox.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CheckboxComponent } from './checkbox.component' + +describe('CheckboxComponent', () => { + let component: CheckboxComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CheckboxComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CheckboxComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/checkbox/checkbox.component.ts b/apiferia/src/app/views/forms/checkbox/checkbox.component.ts new file mode 100644 index 00000000..3531520a --- /dev/null +++ b/apiferia/src/app/views/forms/checkbox/checkbox.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-checkbox', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './checkbox.component.html', + styles: ``, +}) +export class CheckboxComponent {} diff --git a/apiferia/src/app/views/forms/clipboard/clipboard.component.html b/apiferia/src/app/views/forms/clipboard/clipboard.component.html new file mode 100644 index 00000000..a5fe148f --- /dev/null +++ b/apiferia/src/app/views/forms/clipboard/clipboard.component.html @@ -0,0 +1,162 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Choices.js is a lightweight and powerful datetime picker. +

    + +
    Usage
    +

    + To use ngx-clipboard, follow the instructions from its documentation + over + + here + +

    +
    +
    + +
    +
    +
    + Copy text from another element + # +
    +

    + The value you include on this attribute needs to match another's + element selector. +

    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Cut text from another element + # +
    +

    + Additionally, you can define a + data-clipboard-action + attribute to specify if you want to either copy or + cut content. +

    + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Copy text from attribute + # +
    + +

    + Truth is, you don't even need another element to copy its content + from. You can just include a + data-clipboard-text + attribute in your trigger element. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/clipboard/clipboard.component.spec.ts b/apiferia/src/app/views/forms/clipboard/clipboard.component.spec.ts new file mode 100644 index 00000000..e311da36 --- /dev/null +++ b/apiferia/src/app/views/forms/clipboard/clipboard.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ClipboardComponent } from './clipboard.component' + +describe('ClipboardComponent', () => { + let component: ClipboardComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ClipboardComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ClipboardComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/clipboard/clipboard.component.ts b/apiferia/src/app/views/forms/clipboard/clipboard.component.ts new file mode 100644 index 00000000..aee0a60f --- /dev/null +++ b/apiferia/src/app/views/forms/clipboard/clipboard.component.ts @@ -0,0 +1,57 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { ClipboardModule, ClipboardService } from 'ngx-clipboard' +import { Subscription, take } from 'rxjs' + +@Component({ + selector: 'app-clipboard', + standalone: true, + imports: [ + PageTitleComponent, + ClipboardModule, + FormsModule, + UIExamplesListComponent, + ], + templateUrl: './clipboard.component.html', + styles: ``, +}) +export class ClipboardComponent { + text1: string = 'name@example.com' + text2: string = + 'Mussum ipsum cacilds, vidis litro abertis. Consetis adipiscings elitis. Pra lá , depois divoltis porris, paradis. Paisis, filhis, espiritis santis. Mé faiz elementum girarzis, nisi eros vermeio, in elementis mé pra quem é amistosis quis leo. Manduma pindureta quium dia nois paga.' + isCopied1!: boolean + isCopied2!: boolean + isCopied3!: boolean + copiedValue: string = '' + + private copySubscription: Subscription | null = null + + constructor(private _clipboardService: ClipboardService) {} + + callServiceToCopy1() { + this.copySubscription = this._clipboardService.copyResponse$ + .pipe(take(1)) + .subscribe((re) => { + if (re.isSuccess) { + alert('Copied text:' + re.content) + } + }) + } + + callServiceToCopy() { + this.copySubscription = this._clipboardService.copyResponse$ + .pipe(take(1)) + .subscribe((re) => { + if (re.isSuccess) { + alert('Copied text:' + re.content) + } + }) + this.text2 = '' + } + + onCopyFailure() { + alert('copy fail!') + } +} diff --git a/apiferia/src/app/views/forms/editors/editors.component.html b/apiferia/src/app/views/forms/editors/editors.component.html new file mode 100644 index 00000000..00ee5406 --- /dev/null +++ b/apiferia/src/app/views/forms/editors/editors.component.html @@ -0,0 +1,77 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + ngx-quill is an open source Angular module for the quill cross-browser + Rich Text editor. +

    + +
    Usage
    +

    + To use Ngx Quill, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Snow Editor# +
    +

    + Use snow-editor id to set snow editor. +

    +
    + +
    +
    +
    + +
    +
    +
    + Bubble Editor# +
    +

    + Use bubble-editor id to set bubble editor. +

    +
    + +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/forms/editors/editors.component.spec.ts b/apiferia/src/app/views/forms/editors/editors.component.spec.ts new file mode 100644 index 00000000..26810a95 --- /dev/null +++ b/apiferia/src/app/views/forms/editors/editors.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { EditorsComponent } from './editors.component' + +describe('EditorsComponent', () => { + let component: EditorsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [EditorsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(EditorsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/editors/editors.component.ts b/apiferia/src/app/views/forms/editors/editors.component.ts new file mode 100644 index 00000000..6677c590 --- /dev/null +++ b/apiferia/src/app/views/forms/editors/editors.component.ts @@ -0,0 +1,90 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { QuillEditorComponent } from 'ngx-quill' +import Editor from 'quill/core/editor' + +@Component({ + selector: 'app-editors', + standalone: true, + imports: [PageTitleComponent, QuillEditorComponent, FormsModule], + templateUrl: './editors.component.html', + styles: ``, +}) +export class EditorsComponent { + editor!: Editor + + content: string = `
    +

    + Hello World! +

    +


    +

    + This is a simple editable area. +

    +


    +
      +
    • + Select a text to reveal the + toolbar. +
    • +
    • + Edit rich document + on-the-fly, so elastic! +
    • +
    +


    +

    End of simple area

    +
    ` + content1: string = `
    +

    + Hello World! +

    +


    +

    + This is a simple editable area. +

    +


    +
      +
    • + Select a text to reveal the + toolbar. +
    • +
    • + Edit rich document + on-the-fly, so elastic! +
    • +
    +


    +

    End of simple area

    +
    ` + + public model = { + editorData: this.content, + } + + editorConfig = { + toolbar: [ + [{ font: [] }, { size: ['small', false, 'large', 'huge'] }], + ['bold', 'italic', 'underline', 'strike'], + [{ color: [] }, { background: [] }], + [{ script: 'sub' }, { script: 'super' }], + [{ header: [1, 2, 3, 4, 5, 6, false] }], + ['blockquote', 'code-block'], + [{ list: 'ordered' }, { list: 'bullet' }], + [{ indent: '-1' }, { indent: '+1' }], + [{ direction: 'rtl' }], + [{ align: [] }], + + ['link', 'image', 'video'], + ['clean'], + ], + } + + editorConfigBubble = { + toolbar: [ + ['bold', 'italic', 'link', 'blockquote'], + [{ header: 1 }, { header: 2 }], + ], + } +} diff --git a/apiferia/src/app/views/forms/file-uploads/file-uploads.component.html b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.html new file mode 100644 index 00000000..e2278833 --- /dev/null +++ b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.html @@ -0,0 +1,46 @@ + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    Angular wrapper library for the Dropzone

    + +
    Usage
    +

    + To use Dropzone, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Dropzone File Upload# +
    +

    + DropzoneJS is an open source library that provides drag’n’drop file + uploads with image previews. +

    +
    + +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/forms/file-uploads/file-uploads.component.spec.ts b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.spec.ts new file mode 100644 index 00000000..24c595bf --- /dev/null +++ b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FileUploadsComponent } from './file-uploads.component' + +describe('FileUploadsComponent', () => { + let component: FileUploadsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FileUploadsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FileUploadsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/file-uploads/file-uploads.component.ts b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.ts new file mode 100644 index 00000000..d3da7b5a --- /dev/null +++ b/apiferia/src/app/views/forms/file-uploads/file-uploads.component.ts @@ -0,0 +1,12 @@ +import { FileUploaderComponent } from '@/app/components/file-uploader' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-file-uploads', + standalone: true, + imports: [PageTitleComponent, FileUploaderComponent], + templateUrl: './file-uploads.component.html', + styles: ``, +}) +export class FileUploadsComponent {} diff --git a/apiferia/src/app/views/forms/flat-picker/flat-picker.component.html b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.html new file mode 100644 index 00000000..5fb167df --- /dev/null +++ b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.html @@ -0,0 +1,400 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + angularx-flatpickr is a lightweight and powerful datetime picker. +

    + +
    Usage
    +

    + To use angularx-flatpickr, follow the instructions from its + documentation over + + here +

    +
    +
    + +
    +
    +
    + Basic# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + DateTime# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Human-friendly Dates# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + MinDate and MaxDate# +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + Disabling dates# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Selecting multiple dates# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Selecting multiple dates - Conjunction# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Range Calendar# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Inline Calendar# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Basic Timepicker# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + 24-hour Time Picker# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Time Picker w/ Limits# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Preloading Time# +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/flat-picker/flat-picker.component.spec.ts b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.spec.ts new file mode 100644 index 00000000..6905a7dc --- /dev/null +++ b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FlatPickerComponent } from './flat-picker.component' + +describe('FlatPickerComponent', () => { + let component: FlatPickerComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FlatPickerComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FlatPickerComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/flat-picker/flat-picker.component.ts b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.ts new file mode 100644 index 00000000..67a6f5c1 --- /dev/null +++ b/apiferia/src/app/views/forms/flat-picker/flat-picker.component.ts @@ -0,0 +1,16 @@ +import { currentYear } from '@/app/common/constants' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { FlatpickrDirective } from '@/app/directive/flatpickr.directive' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-flat-picker', + standalone: true, + imports: [PageTitleComponent, FlatpickrDirective, UIExamplesListComponent], + templateUrl: './flat-picker.component.html', + styles: ``, +}) +export class FlatPickerComponent { + currentYear = currentYear +} diff --git a/apiferia/src/app/views/forms/forms.route.ts b/apiferia/src/app/views/forms/forms.route.ts new file mode 100644 index 00000000..f93e8513 --- /dev/null +++ b/apiferia/src/app/views/forms/forms.route.ts @@ -0,0 +1,70 @@ +import type { Route } from '@angular/router' +import { BasicComponent } from './basic/basic.component' +import { CheckboxComponent } from './checkbox/checkbox.component' +import { SelectComponent } from './select/select.component' +import { FlatPickerComponent } from './flat-picker/flat-picker.component' +import { ValidationComponent } from './validation/validation.component' +import { WizardComponent } from './wizard/wizard.component' +import { FileUploadsComponent } from './file-uploads/file-uploads.component' +import { EditorsComponent } from './editors/editors.component' +import { InputMaskComponent } from './input-mask/input-mask.component' +import { SliderComponent } from './slider/slider.component' +import { ClipboardComponent } from './clipboard/clipboard.component' + +export const FOMRS_ROUTE: Route[] = [ + { + path: 'basic', + component: BasicComponent, + data: { title: 'Form Basic' }, + }, + { + path: 'checkbox', + component: CheckboxComponent, + data: { title: 'Checkbox & Radio' }, + }, + { + path: 'clipboard', + component: ClipboardComponent, + data: { title: 'Clipboard' }, + }, + { + path: 'select', + component: SelectComponent, + data: { title: 'Form Select' }, + }, + { + path: 'flat-picker', + component: FlatPickerComponent, + data: { title: 'Flatpicker' }, + }, + { + path: 'validation', + component: ValidationComponent, + data: { title: 'Form Validation' }, + }, + { + path: 'wizard', + component: WizardComponent, + data: { title: 'Wizard' }, + }, + { + path: 'file-uploads', + component: FileUploadsComponent, + data: { title: 'File Uploads' }, + }, + { + path: 'editors', + component: EditorsComponent, + data: { title: 'Editors' }, + }, + { + path: 'input-mask', + component: InputMaskComponent, + data: { title: 'Input Mask' }, + }, + { + path: 'slider', + component: SliderComponent, + data: { title: 'Range Slider' }, + }, +] diff --git a/apiferia/src/app/views/forms/input-mask/input-mask.component.html b/apiferia/src/app/views/forms/input-mask/input-mask.component.html new file mode 100644 index 00000000..007fcf0d --- /dev/null +++ b/apiferia/src/app/views/forms/input-mask/input-mask.component.html @@ -0,0 +1,219 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Ngx Mask is the best directive to solve masking input with needed + pattern. +

    + +
    Usage
    +

    + To use ngx-mask, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Input Masks# +
    +

    + A Java-Script Plugin to make masks on form fields and HTML elements. +

    +
    +
    +
    +
    +
    + + + e.g "DD/MM/YYYY" +

    + Add attribute [mask]="'d0/M0/0000' +

    +
    +
    + + + e.g "HH:MM:SS" +

    + Add attribute [mask]="'Hh:m0:s0'" +

    +
    +
    + + + e.g "DD/MM/YYYY HH:MM:SS" +

    + Add attribute [mask]="'d0/M0/0000 Hh:m0:s0'" +

    +
    +
    + + + e.g "xxxxx-xxx" +

    + Add attribute [mask]="'00000-000'" +

    +
    +
    + + + e.g "x-xx-xx-xx" +

    + Add attribute [mask]="'0-00-00-00'" +

    +
    +
    + + + e.g "Your money" +

    + Add attribute + [mask]="'000.000.000.000.000,00'" +

    +
    +
    + + + e.g "#.##0,00" +

    + Add attribute [mask]="'0.000,00'" +

    +
    +
    +
    + +
    +
    +
    + + + e.g "xxxx-xxxx" +

    + Add attribute [mask]="'0000-0000'" +

    +
    +
    + + + e.g "(xx) xxxx-xxxx" +

    + Add attribute [mask]="'(00) 0000-0000'" +

    +
    +
    + + + e.g "(xxx) xxx-xxxx" +

    + Add attribute [mask]="'(000) 000-0000'" +

    +
    +
    + + + e.g "(xx) xxxxx-xxxx" +

    + Add attribute [mask]="'(00) 00000-0000'" +

    +
    +
    + + + e.g "xxx.xxx.xxxx-xx" +

    + Add attribute [mask]="'000.000.000-00'" +

    +
    +
    + + + e.g "xx.xxx.xxx/xxxx-xx" +

    + Add attribute [mask]="'00.000.000/0000-00'" +

    +
    +
    + + + e.g "xxx.xxx.xxx.xxx" +

    + Add attribute [mask]="'099.099.099.099'" +

    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/forms/input-mask/input-mask.component.spec.ts b/apiferia/src/app/views/forms/input-mask/input-mask.component.spec.ts new file mode 100644 index 00000000..787b8907 --- /dev/null +++ b/apiferia/src/app/views/forms/input-mask/input-mask.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InputMaskComponent } from './input-mask.component' + +describe('InputMaskComponent', () => { + let component: InputMaskComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InputMaskComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InputMaskComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/input-mask/input-mask.component.ts b/apiferia/src/app/views/forms/input-mask/input-mask.component.ts new file mode 100644 index 00000000..75c941b8 --- /dev/null +++ b/apiferia/src/app/views/forms/input-mask/input-mask.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgxMaskDirective, provideNgxMask } from 'ngx-mask' + +@Component({ + selector: 'app-input-mask', + standalone: true, + imports: [PageTitleComponent, NgxMaskDirective], + templateUrl: './input-mask.component.html', + styles: ``, + providers: [provideNgxMask()], +}) +export class InputMaskComponent {} diff --git a/apiferia/src/app/views/forms/select/select.component.html b/apiferia/src/app/views/forms/select/select.component.html new file mode 100644 index 00000000..0ef6dcf5 --- /dev/null +++ b/apiferia/src/app/views/forms/select/select.component.html @@ -0,0 +1,499 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Choices.js is a A vanilla, lightweight, configurable select box/text + input plugin. Similar to Select2 and Selectize but without the jQuery + dependency. +

    + +
    Usage
    +

    + To use Choices.js, follow the instructions from its documentation over + + here +

    +
    +
    + +
    +
    +
    + Basic Example + # +
    +

    + Set selectFormInput attribute to set a default single + select. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Option Groups Example + # +
    +

    + Set + selectFormInput + attribute to set option group +

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

    + Set + selectFormInput + [options]="{searchEnabled:false,removeItemButton:true}" +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Options added via config with no sorting + # +
    +

    + Set + data-choices data-choices-sorting-false + attribute. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Multiple select input + # +
    +

    + Set + [multiple]="true" + attribute. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Multiple select With remove button input + # +
    +

    + Set + [options]="{searchEnabled:false,removeItemButton:true}" + [multiple]="true" + attribute. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Multiple select With Option groups + # +
    +

    + Set + selectFormInput [options]="{searchEnabled:false}" + [multiple]="true" + attribute. +

    + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Text inputs + # +
    +

    + Set + data-choices data-choices-limit="Required Limit" + data-choices-removeItem + attribute. +

    + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Text inputs in Unique values only, no pasting + # +
    +

    + Set + [options]="{uniqueItemText:''}" + attribute. +

    + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    + Disabled Text Inputs + # +
    +

    + Set + [disabled]="true" + attribute.ta-ch +

    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/select/select.component.spec.ts b/apiferia/src/app/views/forms/select/select.component.spec.ts new file mode 100644 index 00000000..46de6e30 --- /dev/null +++ b/apiferia/src/app/views/forms/select/select.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SelectComponent } from './select.component' + +describe('SelectComponent', () => { + let component: SelectComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SelectComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SelectComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/select/select.component.ts b/apiferia/src/app/views/forms/select/select.component.ts new file mode 100644 index 00000000..bd21b526 --- /dev/null +++ b/apiferia/src/app/views/forms/select/select.component.ts @@ -0,0 +1,17 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { SelectFormInputDirective } from '@/app/directive/select-form-input.directive' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-select', + standalone: true, + imports: [ + PageTitleComponent, + SelectFormInputDirective, + UIExamplesListComponent, + ], + templateUrl: './select.component.html', + styles: ``, +}) +export class SelectComponent {} diff --git a/apiferia/src/app/views/forms/slider/slider.component.html b/apiferia/src/app/views/forms/slider/slider.component.html new file mode 100644 index 00000000..9eee95bf --- /dev/null +++ b/apiferia/src/app/views/forms/slider/slider.component.html @@ -0,0 +1,160 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + ng2-nouislider is a lightweight JavaScript range slider. +

    + +
    Usage
    +

    + To use ng2-nouislider, follow the instructions from its documentation + over + + here +

    +
    +
    + +
    +
    +
    + Default# +
    + +
    + +
    +
    +
    + +
    +
    +
    + Range# +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Keyboard support# +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Tooltips# +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Range With Config + # +
    + +
    +
    + +
    +
    +
    +
    + +
    +
    +
    + Disable + # +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/slider/slider.component.spec.ts b/apiferia/src/app/views/forms/slider/slider.component.spec.ts new file mode 100644 index 00000000..2f6bd72f --- /dev/null +++ b/apiferia/src/app/views/forms/slider/slider.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SliderComponent } from './slider.component' + +describe('SliderComponent', () => { + let component: SliderComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SliderComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SliderComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/slider/slider.component.ts b/apiferia/src/app/views/forms/slider/slider.component.ts new file mode 100644 index 00000000..cdcda980 --- /dev/null +++ b/apiferia/src/app/views/forms/slider/slider.component.ts @@ -0,0 +1,59 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { NouisliderModule } from 'ng2-nouislider' + +@Component({ + selector: 'app-slider', + standalone: true, + imports: [ + PageTitleComponent, + NouisliderModule, + FormsModule, + UIExamplesListComponent, + ], + templateUrl: './slider.component.html', + styles: ``, +}) +export class SliderComponent { + someKeyboard = [1, 3] + + someRange3 = 8 + someRange = 10 + range = [-500, 500] + someRange2config = { + behaviour: 'drag', + connect: true, + margin: 1, + limit: 5, + range: { + min: 0, + max: 20, + }, + pips: { + mode: 'steps', + density: 5, + }, + } + someRange2 = [6.8, 15] + + someKeyboardConfig = { + behaviour: 'drag', + connect: true, + start: [0, 5], + keyboard: true, + step: 0.1, + pageSteps: 10, + range: { + min: 0, + max: 5, + }, + pips: { + mode: 'count', + density: 2, + values: 6, + stepped: true, + }, + } +} diff --git a/apiferia/src/app/views/forms/validation/validation.component.html b/apiferia/src/app/views/forms/validation/validation.component.html new file mode 100644 index 00000000..1e2d94ba --- /dev/null +++ b/apiferia/src/app/views/forms/validation/validation.component.html @@ -0,0 +1,655 @@ + + +
    +
    +
    +
    +
    + Browser Default# +
    +

    + Depending on your browser and OS, you’ll see a slightly different + style of feedback. +

    +
    +
    +
    + + +
    +
    + + +
    +
    + +
    + @ + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Custom styles# +
    + +

    + For custom Bootstrap form validation messages in Angular, you’ll need + to add the + novalidate boolean attribute to your + <form>. Use Angular's form validation APIs to + handle form control validation, and apply the + :invalid and :valid styles applied to your + form controls. +

    +
    +
    +
    + + +
    Looks good!
    +
    +
    + + +
    Looks good!
    +
    +
    + +
    + @ + +
    Please choose a username.
    +
    +
    +
    + + +
    Please provide a valid city.
    +
    +
    + + +
    Please select a valid state.
    +
    +
    + + +
    Please provide a valid zip.
    +
    +
    +
    + + +
    + You must agree before submitting. +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Server side# +
    +

    + We recommend using client-side validation, but in case you require + server-side validation, you can indicate invalid and valid form fields + with + .is-invalid and .is-valid. Note that + .invalid-feedback is also supported with these classes. +

    +
    +
    +
    + + +
    Looks good!
    +
    +
    + + +
    Looks good!
    +
    +
    + +
    + @ + +
    + Please choose a username. +
    +
    +
    +
    + + +
    + Please provide a valid city. +
    +
    +
    + + +
    + Please select a valid state. +
    +
    +
    + + +
    + Please provide a valid zip. +
    +
    +
    +
    + + +
    + You must agree before submitting. +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Supported elements# +
    +

    + Validation styles are available for the following form controls and + components: +

    +
      +
    • + <input>s and <textarea>s with + .form-control + (including up to one + .form-control in input groups) +
    • +
    • + <select>s with + .form-select +
    • +
    • .form-checks
    • +
    +
    +
    +
    + + +
    + Please enter a message in the textarea. +
    +
    + +
    + + +
    Example invalid feedback text
    +
    + +
    + + +
    +
    + + +
    + More example invalid feedback text +
    +
    + +
    + +
    + Example invalid select feedback +
    +
    + +
    + +
    + Example invalid form file feedback +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Tooltips# +
    +

    + If your form layout allows it, you can swap the + .{valid|invalid}-feedback + classes for + .{valid|invalid}-tooltip + classes to display validation feedback in a styled tooltip. Be sure to + have a parent with + position: relative on it for tooltip positioning. In the + example below, our column classes have this already, but your project + may require an alternative setup. +

    +
    +
    +
    + + +
    Looks good!
    +
    +
    + + +
    Looks good!
    +
    +
    + +
    + @ + +
    + Please choose a unique and valid username. +
    +
    +
    +
    + + +
    Please provide a valid city.
    +
    +
    + + +
    Please select a valid state.
    +
    +
    + + +
    Please provide a valid zip.
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/forms/validation/validation.component.spec.ts b/apiferia/src/app/views/forms/validation/validation.component.spec.ts new file mode 100644 index 00000000..fe841ef5 --- /dev/null +++ b/apiferia/src/app/views/forms/validation/validation.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ValidationComponent } from './validation.component' + +describe('ValidationComponent', () => { + let component: ValidationComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ValidationComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ValidationComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/validation/validation.component.ts b/apiferia/src/app/views/forms/validation/validation.component.ts new file mode 100644 index 00000000..39df437c --- /dev/null +++ b/apiferia/src/app/views/forms/validation/validation.component.ts @@ -0,0 +1,86 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { CommonModule } from '@angular/common' +import { Component, inject } from '@angular/core' +import { + FormsModule, + ReactiveFormsModule, + UntypedFormBuilder, + UntypedFormGroup, + Validators, +} from '@angular/forms' + +@Component({ + selector: 'app-validation', + standalone: true, + imports: [ + PageTitleComponent, + FormsModule, + ReactiveFormsModule, + CommonModule, + UIExamplesListComponent, + ], + templateUrl: './validation.component.html', + styles: ``, +}) +export class ValidationComponent { + validationform!: UntypedFormGroup + tooltipvalidationform!: UntypedFormGroup + supportedForm!: UntypedFormGroup + submit!: boolean + formsubmit!: boolean + + public formBuilder = inject(UntypedFormBuilder) + + ngOnInit(): void { + this.validationform = this.formBuilder.group({ + firstName: [ + 'Mark', + [Validators.required, Validators.pattern('[a-zA-Z0-9]+')], + ], + lastName: [ + 'Otto', + [Validators.required, Validators.pattern('[a-zA-Z0-9]+')], + ], + username: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + city: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + state: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + zip: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + agree: ['', [Validators.required]], + }) + + /** + * Bootstrap tooltip validation form data + */ + this.tooltipvalidationform = this.formBuilder.group({ + firstName: [ + 'Mark', + [Validators.required, Validators.pattern('[a-zA-Z0-9]+')], + ], + lastName: [ + 'Otto', + [Validators.required, Validators.pattern('[a-zA-Z0-9]+')], + ], + userName: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + city: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + state: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + zip: ['', [Validators.required, Validators.pattern('[a-zA-Z0-9]+')]], + }) + } + + validSubmit() { + this.submit = true + } + + get form() { + return this.validationform.controls + } + + formSubmit() { + this.formsubmit = true + } + + get formData() { + return this.tooltipvalidationform.controls + } +} diff --git a/apiferia/src/app/views/forms/wizard/wizard.component.html b/apiferia/src/app/views/forms/wizard/wizard.component.html new file mode 100644 index 00000000..19263ffc --- /dev/null +++ b/apiferia/src/app/views/forms/wizard/wizard.component.html @@ -0,0 +1,1184 @@ + + +
    +
    +
    +
    +
    + Horizontal Wizard# +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Vertical Wizard# +
    +
    + +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/forms/wizard/wizard.component.spec.ts b/apiferia/src/app/views/forms/wizard/wizard.component.spec.ts new file mode 100644 index 00000000..43ecb60f --- /dev/null +++ b/apiferia/src/app/views/forms/wizard/wizard.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WizardComponent } from './wizard.component' + +describe('WizardComponent', () => { + let component: WizardComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WizardComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WizardComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/forms/wizard/wizard.component.ts b/apiferia/src/app/views/forms/wizard/wizard.component.ts new file mode 100644 index 00000000..37444cc5 --- /dev/null +++ b/apiferia/src/app/views/forms/wizard/wizard.component.ts @@ -0,0 +1,16 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core' +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-wizard', + standalone: true, + imports: [PageTitleComponent, NgbNavModule], + templateUrl: './wizard.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class WizardComponent { + active = 1 + activeId = 1 +} diff --git a/apiferia/src/app/views/icons/boxicons/boxicons.component.html b/apiferia/src/app/views/icons/boxicons/boxicons.component.html new file mode 100644 index 00000000..107ae02d --- /dev/null +++ b/apiferia/src/app/views/icons/boxicons/boxicons.component.html @@ -0,0 +1,525 @@ + + +
    +
    +
    + +
    Child
    +
    +
    +
    +
    + +
    Balloon
    +
    +
    +
    +
    + +
    Coffee Bean
    +
    +
    +
    +
    + +
    Sushi
    +
    +
    +
    +
    + +
    Shower
    +
    +
    + +
    +
    + +
    Typescript
    +
    +
    +
    +
    + +
    Graphql
    +
    +
    +
    +
    + +
    Rfid
    +
    +
    +
    +
    + +
    Universal
    +
    +
    +
    +
    + +
    Castle
    +
    +
    +
    +
    + +
    Shield Minus
    +
    +
    +
    +
    + +
    Shield Plus
    +
    +
    +
    +
    + +
    ObjectsVertical
    +
    +
    +
    +
    + +
    Vertical Top
    +
    +
    +
    +
    + +
    Color
    +
    +
    +
    +
    + +
    HorizontalLeft
    +
    +
    +
    +
    + +
    ReflectVertical
    +
    +
    +
    +
    + +
    Postgresql
    +
    +
    +
    +
    + +
    Mongodb
    +
    +
    +
    +
    + +
    Deezer
    +
    +
    +
    +
    + +
    Xing
    +
    +
    +
    +
    + +
    Cart Add
    +
    +
    +
    +
    + +
    CartDownload
    +
    +
    +
    +
    + +
    No Signal
    +
    +
    +
    +
    + +
    Signal 5
    +
    +
    +
    +
    + +
    Cheese
    +
    +
    +
    +
    + +
    Hard Hat
    +
    +
    +
    +
    + +
    Home Alt 2
    +
    +
    +
    +
    + +
    Meta
    +
    +
    +
    +
    + +
    Lemon
    +
    +
    +
    +
    + +
    Cable Car
    +
    +
    +
    +
    + +
    Cricket Ball
    +
    +
    +
    +
    + +
    Tree Alt
    +
    +
    +
    +
    + +
    Male Female
    +
    +
    +
    +
    + +
    Invader
    +
    +
    +
    +
    + +
    Baguette
    +
    +
    +
    +
    + +
    Fork
    +
    +
    +
    +
    + +
    Knife
    +
    +
    +
    +
    + +
    Circle Half
    +
    +
    +
    +
    + +
    Circle Quarter
    +
    +
    +
    +
    + +
    Bowl Rice
    +
    +
    +
    +
    + +
    Bowl Hot
    +
    +
    +
    +
    + +
    Popsicle
    +
    +
    +
    +
    + +
    Cross
    +
    +
    +
    +
    + +
    Scatter Chart
    +
    +
    +
    +
    + +
    MoneyWithdraw
    +
    +
    +
    +
    + +
    Candles
    +
    +
    +
    +
    + +
    Math
    +
    +
    +
    +
    + +
    Party
    +
    +
    +
    +
    + +
    Leaf
    +
    +
    +
    +
    + +
    Injection
    +
    +
    +
    +
    + +
    ExpandVertical
    +
    +
    +
    +
    + +
    Dog
    +
    +
    +
    +
    + +
    Cat
    +
    +
    +
    +
    + +
    Upwork
    +
    +
    +
    +
    + +
    Netlify
    +
    +
    +
    +
    + +
    Java
    +
    +
    +
    +
    + +
    Heroku
    +
    +
    +
    +
    + +
    Go Lang
    +
    +
    +
    +
    + +
    Gmail
    +
    +
    +
    +
    + +
    Flask
    +
    +
    +
    +
    + +
    99designs
    +
    +
    +
    +
    + +
    Venmo
    +
    +
    +
    +
    + +
    Qr
    +
    +
    +
    + + diff --git a/apiferia/src/app/views/icons/boxicons/boxicons.component.spec.ts b/apiferia/src/app/views/icons/boxicons/boxicons.component.spec.ts new file mode 100644 index 00000000..ab3238ca --- /dev/null +++ b/apiferia/src/app/views/icons/boxicons/boxicons.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BoxiconsComponent } from './boxicons.component' + +describe('BoxiconsComponent', () => { + let component: BoxiconsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BoxiconsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BoxiconsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/icons/boxicons/boxicons.component.ts b/apiferia/src/app/views/icons/boxicons/boxicons.component.ts new file mode 100644 index 00000000..1499d596 --- /dev/null +++ b/apiferia/src/app/views/icons/boxicons/boxicons.component.ts @@ -0,0 +1,11 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-boxicons', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './boxicons.component.html', + styles: ``, +}) +export class BoxiconsComponent {} diff --git a/apiferia/src/app/views/icons/iconamoon/iconamoon.component.html b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.html new file mode 100644 index 00000000..117d97b9 --- /dev/null +++ b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.html @@ -0,0 +1,612 @@ + + +
    +
    +
    + +
    3d
    +
    +
    +
    +
    + +
    Apps bold
    +
    +
    +
    +
    + +
    Arrow bottom
    +
    +
    +
    +
    + +
    Arrow bottom
    +
    +
    +
    +
    + +
    Attachment
    +
    +
    + +
    +
    + +
    Attention
    +
    +
    +
    +
    + +
    Backspace
    +
    +
    +
    +
    + +
    Badge
    +
    +
    +
    +
    + +
    Bluetooth
    +
    +
    +
    +
    + +
    Bookmark
    +
    +
    +
    +
    + +
    Bookmark Off
    +
    +
    +
    +
    + +
    Box
    +
    +
    +
    +
    + +
    Briefcase
    +
    +
    +
    +
    + +
    Calculator
    +
    +
    +
    +
    + +
    Calendar
    +
    +
    +
    +
    + +
    Camera
    +
    +
    +
    +
    + +
    CameraVideo
    +
    +
    +
    +
    + +
    Category
    +
    +
    +
    +
    + +
    Certificate
    +
    +
    +
    +
    + +
    Check Circle
    +
    +
    +
    +
    + +
    Cheque
    +
    +
    +
    +
    + +
    Clock
    +
    +
    +
    +
    + +
    Close
    +
    +
    +
    +
    + +
    Cloud
    +
    +
    +
    +
    + +
    Cloud Clock
    +
    +
    +
    +
    + +
    CloudDownload
    +
    +
    +
    +
    + +
    Cloud Error
    +
    +
    +
    +
    + +
    Comment
    +
    +
    +
    +
    + +
    Compare
    +
    +
    +
    +
    + +
    Component
    +
    +
    +
    +
    + +
    Confused
    +
    +
    +
    +
    + +
    Copy
    +
    +
    +
    +
    + +
    Credit Card
    +
    +
    +
    +
    + +
    Cursor
    +
    +
    +
    +
    + +
    Delivery
    +
    +
    +
    +
    + +
    Disappointed
    +
    +
    +
    +
    + +
    Discount
    +
    +
    +
    +
    + +
    Discover
    +
    +
    +
    +
    + +
    Dislike
    +
    +
    +
    +
    + +
    Do Redo
    +
    +
    +
    +
    + +
    Do Undo
    +
    +
    +
    +
    + +
    Download
    +
    +
    +
    +
    + +
    Edit Duotone
    +
    +
    +
    +
    + +
    Email
    +
    +
    +
    +
    + +
    Enter
    +
    +
    +
    +
    + +
    Exit
    +
    +
    +
    +
    + +
    Expressionless
    +
    +
    +
    +
    + +
    Eye
    +
    +
    +
    +
    + +
    Eye Off
    +
    +
    +
    +
    + +
    Face Open
    +
    +
    +
    +
    + +
    Face Without
    +
    +
    +
    +
    + +
    File Add
    +
    +
    +
    +
    + +
    File Audio
    +
    +
    +
    +
    + +
    Flag
    +
    +
    +
    +
    + +
    Frame
    +
    +
    +
    +
    + +
    Frowning
    +
    +
    +
    +
    + +
    Funnel
    +
    +
    +
    +
    + +
    Gift
    +
    +
    +
    +
    + +
    Headphone
    +
    +
    +
    +
    + +
    Heart
    +
    +
    +
    +
    + +
    History
    +
    +
    +
    +
    + +
    Home
    +
    +
    +
    +
    + +
    Information
    +
    +
    +
    +
    + +
    Invoice
    +
    +
    +
    + + diff --git a/apiferia/src/app/views/icons/iconamoon/iconamoon.component.spec.ts b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.spec.ts new file mode 100644 index 00000000..825b4f31 --- /dev/null +++ b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { IconamoonComponent } from './iconamoon.component' + +describe('IconamoonComponent', () => { + let component: IconamoonComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [IconamoonComponent], + }).compileComponents() + + fixture = TestBed.createComponent(IconamoonComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/icons/iconamoon/iconamoon.component.ts b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.ts new file mode 100644 index 00000000..c4bf0e9f --- /dev/null +++ b/apiferia/src/app/views/icons/iconamoon/iconamoon.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core' + +@Component({ + selector: 'app-iconamoon', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './iconamoon.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class IconamoonComponent {} diff --git a/apiferia/src/app/views/icons/icons.route.ts b/apiferia/src/app/views/icons/icons.route.ts new file mode 100644 index 00000000..e98f5683 --- /dev/null +++ b/apiferia/src/app/views/icons/icons.route.ts @@ -0,0 +1,16 @@ +import type { Route } from '@angular/router' +import { BoxiconsComponent } from './boxicons/boxicons.component' +import { IconamoonComponent } from './iconamoon/iconamoon.component' + +export const ICONS_ROUTES: Route[] = [ + { + path: 'boxicons', + component: BoxiconsComponent, + data: { title: 'Boxicons' }, + }, + { + path: 'iconamoon', + component: IconamoonComponent, + data: { title: 'IconaMoon' }, + }, +] diff --git a/apiferia/src/app/views/invoices/data.ts b/apiferia/src/app/views/invoices/data.ts new file mode 100644 index 00000000..fa98a998 --- /dev/null +++ b/apiferia/src/app/views/invoices/data.ts @@ -0,0 +1,168 @@ +import { currentYear } from '@/app/common/constants' + +export type ClientType = { + name: string + avatar: string +} + +export type InvoiceType = { + invoice_number: string + client: ClientType + issue_date: string + due_date: string + amount: number + status: string + payment_method: string +} + +export type ProductType = { + name: string + qty: number + price: number +} + +export const InvoicesData: InvoiceType[] = [ + { + invoice_number: 'RB6985', + client: { + name: 'Sean Kemper', + avatar: 'assets/images/users/avatar-2.jpg', + }, + issue_date: currentYear + '-04-23T17:09:00', + due_date: currentYear + '-04-30', + amount: 852.25, + status: 'Unpaid', + payment_method: 'PayPal', + }, + { + invoice_number: 'RB1002', + client: { + name: 'Victoria Sullivan', + avatar: 'assets/images/users/avatar-3.jpg', + }, + issue_date: currentYear + '-05-14T10:51:00', + due_date: currentYear + '-08-25', + amount: 953.0, + status: 'Send', + payment_method: 'PayPal', + }, + { + invoice_number: 'RB3652', + client: { + name: 'Liam Martinez', + avatar: 'assets/images/users/avatar-4.jpg', + }, + issue_date: currentYear + '-04-12T12:09:00', + due_date: currentYear + '-04-28', + amount: 99.0, + status: 'Unpaid', + payment_method: 'Swift Transfer', + }, + { + invoice_number: 'RB7854', + client: { + name: 'Emma Johnson', + avatar: 'assets/images/users/avatar-5.jpg', + }, + issue_date: currentYear + '-04-10T22:09:00', + due_date: currentYear + '-04-15', + amount: 1250.0, + status: 'Paid', + payment_method: 'PayPal', + }, + { + invoice_number: 'RB9521', + client: { + name: 'Olivia Thompson', + avatar: 'assets/images/users/avatar-1.jpg', + }, + issue_date: currentYear + '-05-22T15:41:00', + due_date: currentYear + '-07-05', + amount: 500.0, + status: 'Send', + payment_method: 'Payoneer', + }, + { + invoice_number: 'RB9634', + client: { + name: 'Noah Garcia', + avatar: 'assets/images/users/avatar-6.jpg', + }, + issue_date: currentYear + '-05-18T09:09:00', + due_date: currentYear + '-05-30', + amount: 250.0, + status: 'Paid', + payment_method: 'Bank', + }, + { + invoice_number: 'RB8520', + client: { + name: 'Sophia Davis', + avatar: 'assets/images/users/avatar-7.jpg', + }, + issue_date: currentYear + '-04-05T08:50:00', + due_date: currentYear + '-04-22', + amount: 29.0, + status: 'Paid', + payment_method: 'PayPal', + }, + { + invoice_number: 'RB3590', + client: { + name: 'Isabella Lopez', + avatar: 'assets/images/users/avatar-8.jpg', + }, + issue_date: currentYear + '-06-15T23:09:00', + due_date: currentYear + '-08-01', + amount: 24.99, + status: 'Send', + payment_method: 'Swift', + }, + { + invoice_number: 'RB5872', + client: { + name: 'Ava Wilson', + avatar: 'assets/images/users/avatar-9.jpg', + }, + issue_date: currentYear + '-04-22T17:09:00', + due_date: currentYear + '-04-30', + amount: 1000.0, + status: 'Unpaid', + payment_method: 'Payoneer', + }, + { + invoice_number: 'RB1158', + client: { + name: 'Oliver Lee', + avatar: 'assets/images/users/avatar-10.jpg', + }, + issue_date: currentYear + '-04-23T12:09:00', + due_date: currentYear + '-04-30', + amount: 1999.0, + status: 'Unpaid', + payment_method: 'Wise', + }, +] + +export const InvoiceDetailsProduct: ProductType[] = [ + { + name: 'G15 Gaming Laptop', + qty: 3, + price: 240.59, + }, + { + name: 'Sony Alpha ILCE 6000Y 24.3 MP Mirrorless Digital SLR Camera', + qty: 5, + price: 135.99, + }, + { + name: 'Sony Over-Ear Wireless Headphone with Mic', + qty: 1, + price: 99.49, + }, + { + name: 'Adam ROMA USB-C / USB-A 3.1 (2-in-1 Flash Drive) – 128GB', + qty: 2, + price: 350.19, + }, +] diff --git a/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.html b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.html new file mode 100644 index 00000000..9318da9e --- /dev/null +++ b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.html @@ -0,0 +1,121 @@ + + +
    +
    +
    +
    +
    +
    + +
    + 1729 Bangor St,
    + Houlton, ME, 04730
    + P: + (207) 532-9109 +
    +
    +
    +
    + Invoice: {{ invoiceDetail.invoice_number }} +
    +
    +
    + +
    +
    +
    Customer
    +
    {{ invoiceDetail.client.name }}
    +
    + 135 White Cemetery Rd,
    + Perryville, KY, 40468
    + P: + (304) 584-4345 +
    +
    +
    + +
    +
    +
    + + + + + + + + + + + + @for (product of productList; track $index) { + + + + + + + } + +
    Product NameQuantityPriceTotal
    {{ product.name }}{{ product.qty }}${{ product.price }} + ${{ product.qty * product.price }} +
    +
    +
    +
    + +
    +
    +
    +
    Notes:
    + + + All accounts are to be paid within 7 days from receipt of + invoice. To be paid by cheque or credit card or direct payment + online. If account is not paid within 7 days the credits details + supplied as confirmation of work undertaken will be charged the + agreed quoted fee noted above. + +
    +
    +
    +
    +

    + Sub-total : + ${{ subTotal }} +

    +

    + Discount (10%) : + +     ${{ discountPrice.toFixed(3) }} +

    +

    ${{ totalAmount.toFixed(2) }} USD

    +
    +
    +
    +
    + +
    +
    + Print + Submit +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.spec.ts b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.spec.ts new file mode 100644 index 00000000..aeb445f9 --- /dev/null +++ b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InvoiceDetailsComponent } from './invoice-details.component' + +describe('InvoiceDetailsComponent', () => { + let component: InvoiceDetailsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InvoiceDetailsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InvoiceDetailsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.ts b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.ts new file mode 100644 index 00000000..254a9e0b --- /dev/null +++ b/apiferia/src/app/views/invoices/invoice-details/invoice-details.component.ts @@ -0,0 +1,41 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject, type OnInit } from '@angular/core' +import { InvoiceDetailsProduct, InvoicesData, type InvoiceType } from '../data' +import { ActivatedRoute, Router } from '@angular/router' + +@Component({ + selector: 'app-invoice-details', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './invoice-details.component.html', + styles: ``, +}) +export class InvoiceDetailsComponent implements OnInit { + invoiceDetail!: InvoiceType + productList = InvoiceDetailsProduct + subTotal: number = 0 + discountPrice: number = 0 + totalAmount: number = 0 + + private router = inject(ActivatedRoute) + + ngOnInit(): void { + let invoiceId: string | null + this.router.paramMap.subscribe((params) => { + invoiceId = params.get('id') + }) + + InvoicesData.forEach((invoice) => { + if (invoice.invoice_number == invoiceId) { + this.invoiceDetail = invoice + } + }) + + this.productList.forEach((item) => { + this.subTotal += item.qty * item.price + }) + + this.discountPrice = this.subTotal * 0.1 + this.totalAmount = this.subTotal - this.discountPrice + } +} diff --git a/apiferia/src/app/views/invoices/invoices/invoices.component.html b/apiferia/src/app/views/invoices/invoices/invoices.component.html new file mode 100644 index 00000000..05b39c75 --- /dev/null +++ b/apiferia/src/app/views/invoices/invoices/invoices.component.html @@ -0,0 +1,139 @@ + + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + @for (item of invoices$ | async; track $index) { + + + + + + @if (item.amount) { + + } + + + + + } + +
    Invoice IDCustomerCreated DateDue DateAmountPayment StatusViaAction
    + #{{ item.invoice_number }} + + @if (item.client) { +
    + +
    +
    + {{ item.client.name }} +
    +
    +
    + } +
    + {{ item.issue_date | date: 'dd MMM, YYYY' }} + {{ item.issue_date | date: 'hh:mm a' }} + {{ item.due_date | date: 'dd MMM, YYYY' }}${{ item.amount.toFixed(2) }} + {{ item.status }} + {{ item.payment_method }} + + +
    +
    + +
    +
    +
    + Showing + {{ (total$ | async)! }} + of + {{ tableService.endIndex }} + invoices +
    +
    +
    +
      + + + + +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/invoices/invoices/invoices.component.spec.ts b/apiferia/src/app/views/invoices/invoices/invoices.component.spec.ts new file mode 100644 index 00000000..1fd29844 --- /dev/null +++ b/apiferia/src/app/views/invoices/invoices/invoices.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InvoicesComponent } from './invoices.component' + +describe('InvoicesComponent', () => { + let component: InvoicesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InvoicesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InvoicesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/invoices/invoices/invoices.component.ts b/apiferia/src/app/views/invoices/invoices/invoices.component.ts new file mode 100644 index 00000000..cf937fcc --- /dev/null +++ b/apiferia/src/app/views/invoices/invoices/invoices.component.ts @@ -0,0 +1,39 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component, inject } from '@angular/core' +import { InvoicesData, type InvoiceType } from '../data' +import { CommonModule, DatePipe } from '@angular/common' +import type { Observable } from 'rxjs' +import { TableService } from '@/app/core/services/table.service' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import { FormsModule } from '@angular/forms' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-invoices', + standalone: true, + imports: [ + PageTitleComponent, + DatePipe, + CommonModule, + NgbPaginationModule, + FormsModule, + RouterLink, + ], + templateUrl: './invoices.component.html', + styles: ``, +}) +export class InvoicesComponent { + invoices$: Observable + total$: Observable + + public tableService = inject(TableService) + + constructor() { + this.invoices$ = this.tableService.items$ + this.total$ = this.tableService.total$ + } + + ngOnInit(): void { + this.tableService.setItems(InvoicesData, 10) + } +} diff --git a/apiferia/src/app/views/map/google/google.component.html b/apiferia/src/app/views/map/google/google.component.html new file mode 100644 index 00000000..4c82aa2b --- /dev/null +++ b/apiferia/src/app/views/map/google/google.component.html @@ -0,0 +1,153 @@ + + +
    +
    +
    +
    +
    + Basic Example# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Markers Google Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + + @for (marker of markers; track $index) { + + } + +
    +
    +
    +
    +
    + +
    +
    +
    + Google Map Types# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Ultra Light With Labels# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Dark# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/map/google/google.component.spec.ts b/apiferia/src/app/views/map/google/google.component.spec.ts new file mode 100644 index 00000000..fc1ea7d6 --- /dev/null +++ b/apiferia/src/app/views/map/google/google.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { GoogleComponent } from './google.component' + +describe('GoogleComponent', () => { + let component: GoogleComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [GoogleComponent], + }).compileComponents() + + fixture = TestBed.createComponent(GoogleComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/map/google/google.component.ts b/apiferia/src/app/views/map/google/google.component.ts new file mode 100644 index 00000000..2bb38d60 --- /dev/null +++ b/apiferia/src/app/views/map/google/google.component.ts @@ -0,0 +1,49 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { CUSTOM_ELEMENTS_SCHEMA, Component, Input } from '@angular/core' +import { GoogleMapsModule } from '@angular/google-maps' + +type MarkerProperties = { + position: { + lat: number + lng: number + } +} +@Component({ + selector: 'app-google', + standalone: true, + imports: [PageTitleComponent, GoogleMapsModule, UIExamplesListComponent], + templateUrl: './google.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class GoogleComponent { + longitude = -77.028333 + latitude = -12.043333 + zoom: number = 9 + + @Input() pitch: number = 10 + @Input() scrollwheel: boolean = false + + ngOnInit(): void {} + + mapOptions: google.maps.MapOptions = { + center: { lat: 48.8588548, lng: 2.347035 }, + zoom: 13, + } + + markers: MarkerProperties[] = [ + { position: { lat: 48.8584, lng: 2.2945 } }, + { position: { lat: 48.8606, lng: 2.3376 } }, + { position: { lat: 48.853, lng: 2.3499 } }, + ] + + options: google.maps.MapOptions = { + mapTypeId: 'hybrid', + zoomControl: false, + scrollwheel: false, + disableDoubleClickZoom: true, + maxZoom: 15, + minZoom: 8, + } +} diff --git a/apiferia/src/app/views/map/map.route.ts b/apiferia/src/app/views/map/map.route.ts new file mode 100644 index 00000000..52857205 --- /dev/null +++ b/apiferia/src/app/views/map/map.route.ts @@ -0,0 +1,16 @@ +import type { Route } from '@angular/router' +import { GoogleComponent } from './google/google.component' +import { VectorComponent } from './vector/vector.component' + +export const MAPS_ROUTE: Route[] = [ + { + path: 'google', + component: GoogleComponent, + data: { title: 'Google Maps' }, + }, + { + path: 'vector', + component: VectorComponent, + data: { title: 'Vector Maps' }, + }, +] diff --git a/apiferia/src/app/views/map/vector/vector.component.html b/apiferia/src/app/views/map/vector/vector.component.html new file mode 100644 index 00000000..3f9211fa --- /dev/null +++ b/apiferia/src/app/views/map/vector/vector.component.html @@ -0,0 +1,149 @@ + + +
    +
    +
    +
    +
    + World Vector Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Canada Vector Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Russia Vector Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Iraq Vector Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Spain Vector Map# +
    +

    + Give textual form controls like + <input>s and <textarea>s an + upgrade with custom styles, sizing, focus states, and more. +

    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/map/vector/vector.component.spec.ts b/apiferia/src/app/views/map/vector/vector.component.spec.ts new file mode 100644 index 00000000..534aecc4 --- /dev/null +++ b/apiferia/src/app/views/map/vector/vector.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { VectorComponent } from './vector.component' + +describe('VectorComponent', () => { + let component: VectorComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [VectorComponent], + }).compileComponents() + + fixture = TestBed.createComponent(VectorComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/map/vector/vector.component.ts b/apiferia/src/app/views/map/vector/vector.component.ts new file mode 100644 index 00000000..67457720 --- /dev/null +++ b/apiferia/src/app/views/map/vector/vector.component.ts @@ -0,0 +1,105 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { WorldVectorMapComponent } from '@/app/components/vector-maps/world-vector-map.component' +import 'jsvectormap' +import 'jsvectormap/dist/maps/world.js' +import 'jsvectormap/dist/maps/russia.js' +import 'jsvectormap/dist/maps/canada.js' +import 'jsvectormap/dist/maps/iraq.js' +import 'jsvectormap/dist/maps/spain.js' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' + +@Component({ + selector: 'app-vector', + standalone: true, + imports: [ + PageTitleComponent, + WorldVectorMapComponent, + UIExamplesListComponent, + ], + templateUrl: './vector.component.html', + styles: ``, +}) +export class VectorComponent { + worldMapConfig = { + map: 'world', + selector: '#world-map-markers', + zoomOnScroll: false, + zoomButtons: true, + markersSelectable: true, + markers: [ + { name: 'Greenland', coords: [72, -42] }, + { name: 'Canada', coords: [56.1304, -106.3468] }, + { name: 'Brazil', coords: [-14.235, -51.9253] }, + { name: 'Egypt', coords: [26.8206, 30.8025] }, + { name: 'Russia', coords: [61, 105] }, + { name: 'China', coords: [35.8617, 104.1954] }, + { name: 'United States', coords: [37.0902, -95.7129] }, + { name: 'Norway', coords: [60.472024, 8.468946] }, + { name: 'Ukraine', coords: [48.379433, 31.16558] }, + ], + markerStyle: { + initial: { fill: '#5B8DEC' }, + selected: { fill: '#ef5f5f' }, + }, + labels: { + markers: { + render: (marker: any) => marker.name, + }, + }, + regionStyle: { + initial: { + fill: 'rgba(169,183,197, 0.2)', + fillOpacity: 1, + }, + }, + } + + canadaMapConfig = { + zoomOnScroll: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: '#5b8dec', + }, + }, + } + + russiaMapConfig = { + zoomOnScroll: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: '#5d7186', + }, + }, + } + spainMapConfig = { + zoomOnScroll: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: '#ffe381', + }, + }, + } + + italyMapConfig = { + zoomOnScroll: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: '#fa5c7c', + }, + }, + } + iraqMapConfig = { + zoomOnScroll: false, + backgroundColor: 'transparent', + regionStyle: { + initial: { + fill: '#20c8e9', + }, + }, + } +} diff --git a/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.html b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.html new file mode 100644 index 00000000..a00b9fa1 --- /dev/null +++ b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.html @@ -0,0 +1,44 @@ +
    +
    +
    +
    + + +

    We Are Launching Soon...

    +

    + Exciting news is on the horizon! We're thrilled to announce that + something incredible is coming your way very soon. Our team has been + hard at work behind the scenes, crafting something special just for + you. +

    + +
    +
    +

    {{ countdown.days }}

    +

    Days

    +
    +
    +

    {{ countdown.hours }}

    +

    Hours

    +
    +
    +

    {{ countdown.minutes }}

    +

    Minutes

    +
    +
    +

    {{ countdown.seconds }}

    +

    Seconds

    +
    +
    + + Contact Us +
    +
    +
    +
    diff --git a/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.spec.ts b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.spec.ts new file mode 100644 index 00000000..6760f0b6 --- /dev/null +++ b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ComingsoonComponent } from './comingsoon.component' + +describe('ComingsoonComponent', () => { + let component: ComingsoonComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ComingsoonComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ComingsoonComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.ts b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.ts new file mode 100644 index 00000000..6886558f --- /dev/null +++ b/apiferia/src/app/views/other-pages/comingsoon/comingsoon.component.ts @@ -0,0 +1,38 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import calculateTimeToEvent from '@/app/helpers/countDown' +import { Component, type OnDestroy, type OnInit } from '@angular/core' +import { RouterLink } from '@angular/router' +import { interval, type Subscription } from 'rxjs' + +@Component({ + selector: 'app-comingsoon', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './comingsoon.component.html', + styles: ``, +}) +export class ComingsoonComponent implements OnInit, OnDestroy { + _days?: number + _hours?: number + _minutes?: number + _seconds?: number + countdown: { days: number; hours: number; minutes: number; seconds: number } = + { + days: 0, + hours: 0, + minutes: 0, + seconds: 0, + } + private intervalSubscription!: Subscription + + ngOnInit(): void { + this.countdown = calculateTimeToEvent() + this.intervalSubscription = interval(1000).subscribe(() => { + this.countdown = calculateTimeToEvent() + }) + } + + ngOnDestroy(): void { + this.intervalSubscription.unsubscribe() + } +} diff --git a/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.html b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.html new file mode 100644 index 00000000..d21f05c5 --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.html @@ -0,0 +1,28 @@ +
    +
    +
    +
    +
    +
    + + +

    404

    +

    Page Not Found !

    +

    + The page you're trying to reach seems to have gone
    + missing in the digital wilderness. +

    + + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.spec.ts b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.spec.ts new file mode 100644 index 00000000..a87e5749 --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { Error4042Component } from './error-404-2.component' + +describe('Error4042Component', () => { + let component: Error4042Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Error4042Component], + }).compileComponents() + + fixture = TestBed.createComponent(Error4042Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.ts b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.ts new file mode 100644 index 00000000..f7d85dfd --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404-2/error-404-2.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-error-404-2', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './error-404-2.component.html', + styles: ``, +}) +export class Error4042Component {} diff --git a/apiferia/src/app/views/other-pages/error-404/error-404.component.html b/apiferia/src/app/views/other-pages/error-404/error-404.component.html new file mode 100644 index 00000000..f3c0ef3d --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404/error-404.component.html @@ -0,0 +1,42 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    +
    +
    +
    + + +

    404

    +

    Page Not Found !

    +

    + The page you're trying to reach seems to have gone +
    + missing in the digital wilderness. +

    + + +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/other-pages/error-404/error-404.component.spec.ts b/apiferia/src/app/views/other-pages/error-404/error-404.component.spec.ts new file mode 100644 index 00000000..f69661ca --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404/error-404.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { Error404Component } from './error-404.component' + +describe('Error404Component', () => { + let component: Error404Component + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Error404Component], + }).compileComponents() + + fixture = TestBed.createComponent(Error404Component) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/other-pages/error-404/error-404.component.ts b/apiferia/src/app/views/other-pages/error-404/error-404.component.ts new file mode 100644 index 00000000..89774c6f --- /dev/null +++ b/apiferia/src/app/views/other-pages/error-404/error-404.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-error-404', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './error-404.component.html', + styles: ``, +}) +export class Error404Component {} diff --git a/apiferia/src/app/views/other-pages/maintenance/maintenance.component.html b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.html new file mode 100644 index 00000000..1525c958 --- /dev/null +++ b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.html @@ -0,0 +1,41 @@ +
    +
    +
    +
    +
    +
    +
    + auth +
    +
    +
    +
    + + +

    + We are currently performing maintenance +

    +

    + We're making the system more awesome. We'll be back shortly. +

    + + +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/other-pages/maintenance/maintenance.component.spec.ts b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.spec.ts new file mode 100644 index 00000000..613e6dee --- /dev/null +++ b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MaintenanceComponent } from './maintenance.component' + +describe('MaintenanceComponent', () => { + let component: MaintenanceComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MaintenanceComponent], + }).compileComponents() + + fixture = TestBed.createComponent(MaintenanceComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/other-pages/maintenance/maintenance.component.ts b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.ts new file mode 100644 index 00000000..fffc7dd2 --- /dev/null +++ b/apiferia/src/app/views/other-pages/maintenance/maintenance.component.ts @@ -0,0 +1,12 @@ +import { LogoBoxComponent } from '@/app/components/logo-box.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-maintenance', + standalone: true, + imports: [LogoBoxComponent, RouterLink], + templateUrl: './maintenance.component.html', + styles: ``, +}) +export class MaintenanceComponent {} diff --git a/apiferia/src/app/views/other-pages/other-page.route.ts b/apiferia/src/app/views/other-pages/other-page.route.ts new file mode 100644 index 00000000..92b75ecd --- /dev/null +++ b/apiferia/src/app/views/other-pages/other-page.route.ts @@ -0,0 +1,28 @@ +import { Route } from '@angular/router' +import { ComingsoonComponent } from './comingsoon/comingsoon.component' +import { Error4042Component } from './error-404-2/error-404-2.component' +import { Error404Component } from './error-404/error-404.component' +import { MaintenanceComponent } from './maintenance/maintenance.component' + +export const OTHER_PAGES_ROUTES: Route[] = [ + { + path: 'coming-soon', + component: ComingsoonComponent, + data: { title: 'Coming Soon' }, + }, + { + path: 'maintenance', + component: MaintenanceComponent, + data: { title: 'Maintenance' }, + }, + { + path: 'error-404', + component: Error404Component, + data: { title: 'Page Not Found - 404' }, + }, + { + path: 'error-404-2', + component: Error4042Component, + data: { title: 'Page Not Found - 404' }, + }, +] diff --git a/apiferia/src/app/views/pages/about-us/about-us.component.html b/apiferia/src/app/views/pages/about-us/about-us.component.html new file mode 100644 index 00000000..41e1907e --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/about-us.component.html @@ -0,0 +1,11 @@ + + +
    +
    + + + + + +
    +
    diff --git a/apiferia/src/app/views/pages/about-us/about-us.component.spec.ts b/apiferia/src/app/views/pages/about-us/about-us.component.spec.ts new file mode 100644 index 00000000..620b16cb --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/about-us.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AboutUsComponent } from './about-us.component' + +describe('AboutUsComponent', () => { + let component: AboutUsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AboutUsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AboutUsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/about-us/about-us.component.ts b/apiferia/src/app/views/pages/about-us/about-us.component.ts new file mode 100644 index 00000000..c276478d --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/about-us.component.ts @@ -0,0 +1,14 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { HeroComponent } from './components/hero/hero.component' +import { ServiceComponent } from './components/service/service.component' +import { TeamComponent } from './components/team/team.component' + +@Component({ + selector: 'app-about-us', + standalone: true, + imports: [PageTitleComponent, HeroComponent, ServiceComponent, TeamComponent], + templateUrl: './about-us.component.html', + styles: ``, +}) +export class AboutUsComponent {} diff --git a/apiferia/src/app/views/pages/about-us/components/hero/hero.component.html b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.html new file mode 100644 index 00000000..bf5e4102 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.html @@ -0,0 +1,86 @@ +
    +
    +
    +
    +
    +

    About Us

    +

    + Over the past decade, we've distributed more than 45,000 copies of our + administrative themes, all of which have been effectively
    + utilized by businesses ranging from small-scale enterprises to + multinational corporations. +

    +
    + Join US +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +

    1,994+

    +
    Projects
    +
    +
    +
    + +
    +
    +
    +
    + +
    +

    1,962

    +
    Complated
    +
    +
    +
    + +
    +
    +
    +
    + +
    +

    98M+

    +
    Payment
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/about-us/components/hero/hero.component.spec.ts b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.spec.ts new file mode 100644 index 00000000..6b696e4e --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { HeroComponent } from './hero.component' + +describe('HeroComponent', () => { + let component: HeroComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [HeroComponent], + }).compileComponents() + + fixture = TestBed.createComponent(HeroComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/about-us/components/hero/hero.component.ts b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.ts new file mode 100644 index 00000000..2b448362 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/hero/hero.component.ts @@ -0,0 +1,10 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' + +@Component({ + selector: 'about-hero', + standalone: true, + imports: [], + templateUrl: './hero.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class HeroComponent {} diff --git a/apiferia/src/app/views/pages/about-us/components/service/service.component.html b/apiferia/src/app/views/pages/about-us/components/service/service.component.html new file mode 100644 index 00000000..49475d7f --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/service/service.component.html @@ -0,0 +1,48 @@ +
    +
    +

    Our Services

    +

    + Our work stands as a testament to dedication, innovation, and excellence. + With meticulous attention to detail and a passion for surpassing + expectations, we strive to deliver solutions that inspire and empower. +

    + +
    + @for (service of serviceList; track $index) { +
    +
    +
    +
    + +
    +
    + +
    +
    + {{ + service.title + }} +
    + + {{ + service.description + }} +
    +
    +
    + } +
    + + + +
    +
    diff --git a/apiferia/src/app/views/pages/about-us/components/service/service.component.spec.ts b/apiferia/src/app/views/pages/about-us/components/service/service.component.spec.ts new file mode 100644 index 00000000..2454ca44 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/service/service.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ServiceComponent } from './service.component' + +describe('ServiceComponent', () => { + let component: ServiceComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ServiceComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ServiceComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/about-us/components/service/service.component.ts b/apiferia/src/app/views/pages/about-us/components/service/service.component.ts new file mode 100644 index 00000000..0214a044 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/service/service.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { ServiceData } from '../../data' + +@Component({ + selector: 'about-service', + standalone: true, + imports: [], + templateUrl: './service.component.html', + styles: ``, +}) +export class ServiceComponent { + serviceList = ServiceData +} diff --git a/apiferia/src/app/views/pages/about-us/components/team/team.component.html b/apiferia/src/app/views/pages/about-us/components/team/team.component.html new file mode 100644 index 00000000..bb573e99 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/team/team.component.html @@ -0,0 +1,85 @@ +
    +
    +

    Our Creative Team

    +

    + A dedicated group of experts committed to crafting visually stunning and + highly functional user interfaces. With a keen eye for design and a + passion for innovation, our team transforms concepts into captivating + HTML-based interfaces. From sleek layouts to seamless interactions, we + deliver UI solutions that elevate user experiences and exceed + expectations. +

    + +
    + @for (team of teamList; track $index) { +
    +
    +
    +
    +
    + +
    +
    + {{ team.name }} +

    {{ team.email }}

    +
    +
    +
    + + + + +
    +
    +
    +
    + } +
    + + +
    +
    diff --git a/apiferia/src/app/views/pages/about-us/components/team/team.component.spec.ts b/apiferia/src/app/views/pages/about-us/components/team/team.component.spec.ts new file mode 100644 index 00000000..b223b80d --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/team/team.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TeamComponent } from './team.component' + +describe('TeamComponent', () => { + let component: TeamComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TeamComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TeamComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/about-us/components/team/team.component.ts b/apiferia/src/app/views/pages/about-us/components/team/team.component.ts new file mode 100644 index 00000000..85a03904 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/components/team/team.component.ts @@ -0,0 +1,15 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { TeamData } from '../../data' +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'about-team', + standalone: true, + imports: [NgbTooltipModule, RouterLink], + templateUrl: './team.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class TeamComponent { + teamList = TeamData +} diff --git a/apiferia/src/app/views/pages/about-us/data.ts b/apiferia/src/app/views/pages/about-us/data.ts new file mode 100644 index 00000000..d055ceb6 --- /dev/null +++ b/apiferia/src/app/views/pages/about-us/data.ts @@ -0,0 +1,73 @@ +export type ServiceType = { + icon: string + iconColor: string + title: string + description: string +} + +export type TeamType = { + profile: string + name: string + email: string +} + +export const ServiceData: ServiceType[] = [ + { + icon: 'bxl-react', + iconColor: 'bg-primary', + title: 'Creative React Bootstrap Admin', + description: + 'Introducing our Creative React Bootstrap Admin, a dynamic solution merging versatility with sleek design. Unlock seamless management and intuitive user experiences with our innovative toolkit.', + }, + { + icon: 'bxl-bootstrap', + iconColor: 'bg-purple', + title: 'Bootstrap Saas Admin', + description: + "Introducing our Bootstrap SaaS Admin, a cutting-edge platform tailored for streamlined management. Harness the power of Bootstrap's robust framework infused with SaaS capabilities for scalable solutions.", + }, + { + icon: 'bxl-vuejs', + iconColor: 'bg-cyan', + title: 'VueJS Client Project', + description: + 'Introducing our VueJS Client Project, a dynamic and responsive web application powered by Vue.js. Seamlessly blending functionality with elegance, this project delivers an immersive user experience.', + }, + { + icon: 'bxl-html5', + iconColor: 'bg-danger', + title: 'Pure Html Css Landing', + description: + 'Introducing our Pure HTML CSS Landing, a minimalist yet impactful landing page solution. Crafted with precision using HTML and CSS, it embodies simplicity and elegance.', + }, + { + icon: 'bxl-nodejs', + iconColor: 'bg-green', + title: 'Nodejs Backend Project', + description: + 'Introducing our Node.js Backend Project, a robust and scalable solution for powering your applications. Leveraging the power of Node.js, we deliver efficient and high-performance backend systems.', + }, +] + +export const TeamData: TeamType[] = [ + { + profile: 'assets/images/users/avatar-1.jpg', + name: 'Willie T. Anderson', + email: 'willieandr@armyspy.com', + }, + { + profile: 'assets/images/users/avatar-2.jpg', + name: 'Harold J. Hurley', + email: 'haroldlhurly@armyspy.com', + }, + { + profile: 'assets/images/users/avatar-3.jpg', + name: 'Harold Hurley', + email: 'snadraaimon@armyspy.com', + }, + { + profile: 'assets/images/users/avatar-4.jpg', + name: 'Richard Lewis', + email: 'richaaedllewis@armyspy.com', + }, +] diff --git a/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.html b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.html new file mode 100644 index 00000000..6d2e4a7d --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.html @@ -0,0 +1,173 @@ +
    +
    +

    Ask your different questions

    +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    Services
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.spec.ts b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.spec.ts new file mode 100644 index 00000000..0d3bdbcf --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ContactFormComponent } from './contact-form.component' + +describe('ContactFormComponent', () => { + let component: ContactFormComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ContactFormComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ContactFormComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.ts b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.ts new file mode 100644 index 00000000..d5d1d05b --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/contact-form/contact-form.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'contact-form', + standalone: true, + imports: [NgbDropdownModule], + templateUrl: './contact-form.component.html', + styles: ``, +}) +export class ContactFormComponent {} diff --git a/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.html b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.html new file mode 100644 index 00000000..8772de9f --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.html @@ -0,0 +1,100 @@ +
    +

    + Do you need quick help with some general inquiries ? +

    +

    + You can use any of the support systems below if your query is urgent, We + will be happy to be of help. +

    +
    +
    +
    +
    + + + +
    +
    +
    Office Address
    + 660 Courtright Bismarck, ND +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    Telephone number
    + 1-888-452-1505 +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    Email Address
    + rachelmtrojano@armyspy.com +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    Social Contact
    +
    + + + + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.spec.ts b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.spec.ts new file mode 100644 index 00000000..f56785da --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { InquiriesComponent } from './inquiries.component' + +describe('InquiriesComponent', () => { + let component: InquiriesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [InquiriesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(InquiriesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.ts b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.ts new file mode 100644 index 00000000..1b9f6495 --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/components/inquiries/inquiries.component.ts @@ -0,0 +1,11 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'contact-inquiries', + standalone: true, + imports: [NgbTooltipModule], + templateUrl: './inquiries.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class InquiriesComponent {} diff --git a/apiferia/src/app/views/pages/contact-us/contact-us.component.html b/apiferia/src/app/views/pages/contact-us/contact-us.component.html new file mode 100644 index 00000000..4226d93f --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/contact-us.component.html @@ -0,0 +1,42 @@ +
    +
    +

    Contact Us with Our Team

    +

    + Got any questions about the product or scaling on our platform? We're here + to help. Chat to our friendly team 24/7 and get onboard in less than 5 + minutes. +

    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + Strands +
    +
    + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/contact-us/contact-us.component.spec.ts b/apiferia/src/app/views/pages/contact-us/contact-us.component.spec.ts new file mode 100644 index 00000000..92590e1c --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/contact-us.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ContactUsComponent } from './contact-us.component' + +describe('ContactUsComponent', () => { + let component: ContactUsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ContactUsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ContactUsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/contact-us/contact-us.component.ts b/apiferia/src/app/views/pages/contact-us/contact-us.component.ts new file mode 100644 index 00000000..af3fb1e6 --- /dev/null +++ b/apiferia/src/app/views/pages/contact-us/contact-us.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core' +import { ContactFormComponent } from './components/contact-form/contact-form.component' +import { InquiriesComponent } from './components/inquiries/inquiries.component' + +@Component({ + selector: 'app-contact-us', + standalone: true, + imports: [ContactFormComponent, InquiriesComponent], + templateUrl: './contact-us.component.html', + styles: ``, +}) +export class ContactUsComponent {} diff --git a/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.html b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.html new file mode 100644 index 00000000..f9a5b422 --- /dev/null +++ b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.html @@ -0,0 +1,24 @@ + + +
    +
    +
    +
    +
    +
    +

    404

    +

    Page Not Found !

    +

    + The page you're trying to reach seems to have gone
    + missing in the digital wilderness. +

    + + +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.spec.ts b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.spec.ts new file mode 100644 index 00000000..0c6c2b29 --- /dev/null +++ b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { Error404AltComponent } from './error-404-alt.component' + +describe('Error404AltComponent', () => { + let component: Error404AltComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [Error404AltComponent], + }).compileComponents() + + fixture = TestBed.createComponent(Error404AltComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.ts b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.ts new file mode 100644 index 00000000..345c334a --- /dev/null +++ b/apiferia/src/app/views/pages/error-404-alt/error-404-alt.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { RouterLink } from '@angular/router' + +@Component({ + selector: 'app-error-404-alt', + standalone: true, + imports: [PageTitleComponent, RouterLink], + templateUrl: './error-404-alt.component.html', + styles: ``, +}) +export class Error404AltComponent {} diff --git a/apiferia/src/app/views/pages/faqs/data.ts b/apiferia/src/app/views/pages/faqs/data.ts new file mode 100644 index 00000000..e8b53176 --- /dev/null +++ b/apiferia/src/app/views/pages/faqs/data.ts @@ -0,0 +1,95 @@ +export type FAQType = { + question: string + answer: string +} + +export type FAQDataType = { + title: string + faqs: FAQType[] +} + +export const FaqData: FAQDataType[] = [ + { + title: 'General', + faqs: [ + { + question: 'Can I use Dummy FAQs for my website or project?', + answer: + 'Yes, you can use Dummy FAQs to populate your website or project during development or testing phases. They help simulate the appearance and functionality of a real FAQ section without requiring actual content.', + }, + { + question: 'Are Dummy FAQs suitable for customer support purposes?', + answer: + 'While Dummy FAQs can be used internally for training customer support teams, they are not suitable for public-facing customer support. Real FAQs should be based on genuine customer inquiries to provide accurate and helpful information.', + }, + { + question: 'Do Dummy FAQs require attribution?', + answer: + 'No, Dummy FAQs do not require attribution since they are not based on real questions or contributed by individuals. You can use them freely for internal testing or demonstration purposes.', + }, + ], + }, + + { + title: 'Payments', + faqs: [ + { + question: 'Can I test my website/app with Dummy Payments?', + answer: + 'Yes, Dummy Payments are commonly used by developers and businesses to test the functionality of e-commerce platforms, mobile apps, and payment gateways. They help identify and resolve issues without risking real transactions.', + }, + { + question: 'Are Dummy Payments secure?', + answer: + "Dummy Payments used in controlled environments for training or demonstration purposes are generally secure. However, it's crucial not to confuse them with real transactions and avoid entering genuine financial information.", + }, + { + question: + 'How can I differentiate between a Dummy Payment and a real one?', + answer: + 'Real payments involve the transfer of actual funds, resulting in a change in financial balances. Dummy Payments, on the other hand, do not involve any monetary exchange and are typically labeled or indicated as test transactions. Always verify the authenticity of transactions before proceeding with any action.', + }, + ], + }, + { + title: 'Refunds', + faqs: [ + { + question: 'How do I request a refund?', + answer: + 'To request a refund, simply contact our customer support team through email or phone and provide details about your purchase and reason for the refund. Our representatives will guide you through the process.', + }, + { + question: 'What is the refund policy?', + answer: + "Our refund policy allows customers to request a refund within 30 days of purchase for eligible products or services. Certain restrictions may apply, so it's essential to review the terms and conditions specific to your purchase.", + }, + { + question: 'How long does it take to process a refund?', + answer: + 'Refunds are typically processed within 3-5 business days after the request is approved. However, it may take longer depending on the payment method and financial institution involved.', + }, + ], + }, + { + title: 'Support', + faqs: [ + { + question: 'How do I contact customer support?', + answer: + 'You can contact our customer support team via email, phone, or live chat. Our representatives are available to assist you during business hours, Monday through Friday.', + }, + { + question: 'Is customer support available 24/7?', + answer: + "Our customer support is available during regular business hours, Monday through Friday. However, you can leave us a message outside of these hours, and we'll respond to you as soon as possible.", + }, + { + question: + 'How long does it take to receive a response from customer support?', + answer: + 'We strive to respond to all customer inquiries within 24 hours during regular business hours. Response times may vary depending on the volume of inquiries received.', + }, + ], + }, +] diff --git a/apiferia/src/app/views/pages/faqs/faqs.component.html b/apiferia/src/app/views/pages/faqs/faqs.component.html new file mode 100644 index 00000000..e56aea84 --- /dev/null +++ b/apiferia/src/app/views/pages/faqs/faqs.component.html @@ -0,0 +1,71 @@ + + +
    +
    +
    +
    +
    + @for (data of faqList; track $index; let first = $first) { +
    +

    + {{ data.title }} +

    + +
    + @for (item of data.faqs; track $index) { +
    +

    + +

    +
    +
    + {{ item.answer }} +
    +
    +
    + } +
    +
    + } +
    + + +
    +
    +

    Can't find a questions?

    + + +
    +
    +
    + +
    + +
    + +
    diff --git a/apiferia/src/app/views/pages/faqs/faqs.component.spec.ts b/apiferia/src/app/views/pages/faqs/faqs.component.spec.ts new file mode 100644 index 00000000..e82c51a9 --- /dev/null +++ b/apiferia/src/app/views/pages/faqs/faqs.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FaqsComponent } from './faqs.component' + +describe('FaqsComponent', () => { + let component: FaqsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FaqsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FaqsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/faqs/faqs.component.ts b/apiferia/src/app/views/pages/faqs/faqs.component.ts new file mode 100644 index 00000000..ab3c0a27 --- /dev/null +++ b/apiferia/src/app/views/pages/faqs/faqs.component.ts @@ -0,0 +1,15 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { FaqData } from './data' +import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-faqs', + standalone: true, + imports: [PageTitleComponent, NgbAccordionModule], + templateUrl: './faqs.component.html', + styles: ``, +}) +export class FaqsComponent { + faqList = FaqData +} diff --git a/apiferia/src/app/views/pages/pages.route.ts b/apiferia/src/app/views/pages/pages.route.ts new file mode 100644 index 00000000..36c39a4e --- /dev/null +++ b/apiferia/src/app/views/pages/pages.route.ts @@ -0,0 +1,59 @@ +import { Route } from '@angular/router' +import { AboutUsComponent } from './about-us/about-us.component' +import { ContactUsComponent } from './contact-us/contact-us.component' +import { FaqsComponent } from './faqs/faqs.component' +import { PricingComponent } from './pricing/pricing.component' +import { ProfileComponent } from './profile/profile.component' +import { TeamComponent } from './team/team.component' +import { TimelineComponent } from './timeline/timeline.component' +import { WelcomeComponent } from './welcome/welcome.component' +import { Error404AltComponent } from './error-404-alt/error-404-alt.component' + +export const PAGES_ROUTES: Route[] = [ + { + path: 'welcome', + component: WelcomeComponent, + data: { title: 'Welcome' }, + }, + { + path: 'faqs', + component: FaqsComponent, + data: { title: 'FAQs' }, + }, + { + path: 'profile', + component: ProfileComponent, + data: { title: 'Profile' }, + }, + + { + path: 'contact-us', + component: ContactUsComponent, + data: { title: 'Contact Us' }, + }, + { + path: 'about-us', + component: AboutUsComponent, + data: { title: 'About Us' }, + }, + { + path: 'our-team', + component: TeamComponent, + data: { title: 'Our Team' }, + }, + { + path: 'timeline', + component: TimelineComponent, + data: { title: 'Timeline' }, + }, + { + path: 'pricing', + component: PricingComponent, + data: { title: 'Pricing' }, + }, + { + path: 'error-404-alt', + component: Error404AltComponent, + data: { title: '404' }, + }, +] diff --git a/apiferia/src/app/views/pages/pricing/data.ts b/apiferia/src/app/views/pages/pricing/data.ts new file mode 100644 index 00000000..84d504da --- /dev/null +++ b/apiferia/src/app/views/pages/pricing/data.ts @@ -0,0 +1,84 @@ +export type ButtonType = { + text: string + enabled: boolean +} +export type PlanType = { + name: string + price: number + period: string + ribbon?: string + features: string[] + button: ButtonType +} + +export const PricingPlans: PlanType[] = [ + { + name: 'Free Pack', + price: 0, + period: 'Month', + features: [ + '5 GB Storage', + '100 GB Bandwidth', + '1 Domain', + 'No Support', + '24x7 Support', + '1 User', + ], + button: { + text: 'Get Started', + enabled: true, + }, + }, + { + name: 'Professional Pack', + price: 19, + period: 'Month', + ribbon: 'Popular', + features: [ + '50 GB Storage', + '900 GB Bandwidth', + '2 Domains', + 'Email Support', + '24x7 Support', + '5 Users', + ], + button: { + text: 'Current Plan', + enabled: false, + }, + }, + { + name: 'Business Pack', + price: 29, + period: 'Month', + features: [ + '500 GB Storage', + '2.5 TB Bandwidth', + '5 Domains', + 'Email Support', + '24x7 Support', + '10 Users', + ], + button: { + text: 'Get Started', + enabled: true, + }, + }, + { + name: 'Enterprise Pack', + price: 49, + period: 'Month', + features: [ + '2 TB Storage', + 'Unlimited Bandwidth', + '50 Domains', + 'Email Support', + '24x7 Support', + 'Unlimited Users', + ], + button: { + text: 'Get Started', + enabled: true, + }, + }, +] diff --git a/apiferia/src/app/views/pages/pricing/pricing.component.html b/apiferia/src/app/views/pages/pricing/pricing.component.html new file mode 100644 index 00000000..b382e9ca --- /dev/null +++ b/apiferia/src/app/views/pages/pricing/pricing.component.html @@ -0,0 +1,57 @@ + + +
    +
    +
    +

    Simple Pricing Plans

    +

    + Get the power and control you need to manage your organization's + technical documentation +

    +
    +
    + @for (plan of plans; track $index) { +
    +
    +
    + @if (plan.ribbon) { +
    + {{ plan.ribbon }} +
    + } +
    + {{ plan.name }} +
    +

    + ${{ plan.price }} + / {{ plan.period }} +

    + +
      + @for (feature of plan.features; track $index) { +
    • + {{ feature }} +
    • + } +
    + +
    + +
    +
    +
    +
    + } +
    +
    +
    diff --git a/apiferia/src/app/views/pages/pricing/pricing.component.spec.ts b/apiferia/src/app/views/pages/pricing/pricing.component.spec.ts new file mode 100644 index 00000000..8273545a --- /dev/null +++ b/apiferia/src/app/views/pages/pricing/pricing.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PricingComponent } from './pricing.component' + +describe('PricingComponent', () => { + let component: PricingComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PricingComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PricingComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/pricing/pricing.component.ts b/apiferia/src/app/views/pages/pricing/pricing.component.ts new file mode 100644 index 00000000..5c4ee620 --- /dev/null +++ b/apiferia/src/app/views/pages/pricing/pricing.component.ts @@ -0,0 +1,14 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { PricingPlans } from './data' + +@Component({ + selector: 'app-pricing', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './pricing.component.html', + styles: ``, +}) +export class PricingComponent { + plans = PricingPlans +} diff --git a/apiferia/src/app/views/pages/profile/components/activities/activities.component.html b/apiferia/src/app/views/pages/profile/components/activities/activities.component.html new file mode 100644 index 00000000..40acc551 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/activities/activities.component.html @@ -0,0 +1,152 @@ +
    +
    +
    Activities
    + +
    +
    +
    +

    12:15

    +
    + +
    + UI +
    +
    +
    + Completed UX design project for our client +
    + Important +
    +
    +
    +
    +
    +
    +

    11:00

    +
    + +
    + avatar-5 +
    +
    +
    + Yes! We are celebrating our first admin release. +
    + + IMG_201 + IMG_202 + IMG_203 + +
    +
    +
    +
    +
    +
    +

    10:30

    +
    + +
    + +
    +
    +
    + We have archieved 25k sales in our themes +
    +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    +
    4.5/5 Rating
    +
    +
    +
    +
    +
    +
    +
    +

    09:00

    +
    + +
    + avatar-5 +
    +
    +
    + Join new team member Alex Smith +
    + Designer + Developer + Ui/Ux +
    +
    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/activities/activities.component.spec.ts b/apiferia/src/app/views/pages/profile/components/activities/activities.component.spec.ts new file mode 100644 index 00000000..9ea4b3b0 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/activities/activities.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ActivitiesComponent } from './activities.component' + +describe('ActivitiesComponent', () => { + let component: ActivitiesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ActivitiesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ActivitiesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/activities/activities.component.ts b/apiferia/src/app/views/pages/profile/components/activities/activities.component.ts new file mode 100644 index 00000000..6cbe171a --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/activities/activities.component.ts @@ -0,0 +1,10 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' + +@Component({ + selector: 'profile-activities', + standalone: true, + imports: [], + templateUrl: './activities.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ActivitiesComponent {} diff --git a/apiferia/src/app/views/pages/profile/components/followers/followers.component.html b/apiferia/src/app/views/pages/profile/components/followers/followers.component.html new file mode 100644 index 00000000..00b4b676 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/followers/followers.component.html @@ -0,0 +1,42 @@ +
    +
    +
    Followers
    + +
    +
    +
      + @for ( + data of followerList; + track $index; + let first = $first; + let last = $last + ) { +
    • +
      + +
      +
      + {{ data.name }} +
      +
      + {{ data.email }} +
      +
      +
      + Follow +
      +
      +
    • + } +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/followers/followers.component.spec.ts b/apiferia/src/app/views/pages/profile/components/followers/followers.component.spec.ts new file mode 100644 index 00000000..600ca839 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/followers/followers.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { FollowersComponent } from './followers.component' + +describe('FollowersComponent', () => { + let component: FollowersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [FollowersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(FollowersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/followers/followers.component.ts b/apiferia/src/app/views/pages/profile/components/followers/followers.component.ts new file mode 100644 index 00000000..212c5a5e --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/followers/followers.component.ts @@ -0,0 +1,14 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { FollowersData } from '../../data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'profile-followers', + standalone: true, + imports: [CommonModule], + templateUrl: './followers.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class FollowersComponent { + followerList = FollowersData +} diff --git a/apiferia/src/app/views/pages/profile/components/messages/messages.component.html b/apiferia/src/app/views/pages/profile/components/messages/messages.component.html new file mode 100644 index 00000000..1fb5bf78 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/messages/messages.component.html @@ -0,0 +1,52 @@ +
    +
    +
    Messages
    + +
    +
    +
      + @for ( + msg of messageList; + track $index; + let first = $first; + let last = $last + ) { +
    • +
      + avatar-2 +
      +
      + {{ msg.name }} +
      +

      + {{ msg.content }} +

      +
      +
      +

      + {{ msg.time }} +

      +
      +
      +
    • + } +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/messages/messages.component.spec.ts b/apiferia/src/app/views/pages/profile/components/messages/messages.component.spec.ts new file mode 100644 index 00000000..4c965ea9 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/messages/messages.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { MessagesComponent } from './messages.component' + +describe('MessagesComponent', () => { + let component: MessagesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [MessagesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(MessagesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/messages/messages.component.ts b/apiferia/src/app/views/pages/profile/components/messages/messages.component.ts new file mode 100644 index 00000000..93a0c6b3 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/messages/messages.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core' +import { MessagesData } from '../../data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'profile-messages', + standalone: true, + imports: [CommonModule], + templateUrl: './messages.component.html', + styles: ``, +}) +export class MessagesComponent { + messageList = MessagesData +} diff --git a/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.html b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.html new file mode 100644 index 00000000..5b42525d --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.html @@ -0,0 +1,64 @@ +
    +
    +
    Personal Info
    +
    +
    +
      +
    • +
      +
      Name :
      + {{ profileInfo.name }} +
      +
    • +
    • +
      +
      Email :
      + {{ profileInfo.email }} +
      +
    • +
    • +
      +
      Phone :
      + {{ profileInfo.phone }} +
      +
    • +
    • +
      +
      Designation :
      + {{ profileInfo.designation }} +
      +
    • +
    • +
      +
      Age :
      + {{ profileInfo.age }} Year +
      +
    • +
    • + +
    • +
    • +
      +
      Experience :
      + {{ profileInfo.experience }} Years +
      +
    • +
    • +
      +
      Language :
      + + {{ profileInfo.language }} +
      +
    • +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.spec.ts b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.spec.ts new file mode 100644 index 00000000..a288ed32 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PersonalInfoComponent } from './personal-info.component' + +describe('PersonalInfoComponent', () => { + let component: PersonalInfoComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PersonalInfoComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PersonalInfoComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.ts b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.ts new file mode 100644 index 00000000..c598454c --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/personal-info/personal-info.component.ts @@ -0,0 +1,13 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { ProfileInfo } from '../../data' + +@Component({ + selector: 'profile-personal-info', + standalone: true, + imports: [], + templateUrl: './personal-info.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class PersonalInfoComponent { + profileInfo = ProfileInfo +} diff --git a/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.html b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.html new file mode 100644 index 00000000..1a91307d --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.html @@ -0,0 +1,127 @@ +
    +
    + + +
    +
    +
    +
    +
    +

    + {{ profileInfo.name }} +

    +

    + {{ profileInfo.post }} +

    +
    + +
    +
    +
    +
    + About Me +
    +

    + {{ profileInfo.about }} +

    +
    +
    + @for (skill of profileInfo.skill; track $index) { + {{ skill }} + } +
    +
    +
    +
    Links :
    + @for (link of profileInfo.link; track $index; let first = $first) { + @if (first) { + {{ link }} + } @else { +

    + {{ link }} +

    + } + } +
    +
    +
    +
    +
    + + +
    diff --git a/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.spec.ts b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.spec.ts new file mode 100644 index 00000000..ebd7e903 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProfileInfoComponent } from './profile-info.component' + +describe('ProfileInfoComponent', () => { + let component: ProfileInfoComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProfileInfoComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProfileInfoComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.ts b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.ts new file mode 100644 index 00000000..13170dd1 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/profile-info/profile-info.component.ts @@ -0,0 +1,15 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { ProfileInfo } from '../../data' +import { CommonModule } from '@angular/common' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'profile-info', + standalone: true, + imports: [CommonModule, NgbDropdownModule], + templateUrl: './profile-info.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ProfileInfoComponent { + profileInfo = ProfileInfo +} diff --git a/apiferia/src/app/views/pages/profile/components/projects/projects.component.html b/apiferia/src/app/views/pages/profile/components/projects/projects.component.html new file mode 100644 index 00000000..09dc3245 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/projects/projects.component.html @@ -0,0 +1,106 @@ +
    + +
    +
    + @for (data of projectList; track $index) { +
    +
    +
    +
    +
    + + + +
    + {{ + data.title + }} +
    + +
    +
    +
    +
    + + {{ data.days }} day left +
    +
    + + {{ data.file }} Files +
    +
    +
    +

    8/12

    +

    {{ data.progressValue }}%

    + +
    + +
    +
    + @for (img of data.teamMebmer; track $index) { +
    + +
    + } +
    +
    {{ data.team }}+ Team Work
    +
    +
    +
    +
    + } +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/projects/projects.component.spec.ts b/apiferia/src/app/views/pages/profile/components/projects/projects.component.spec.ts new file mode 100644 index 00000000..c154fb8f --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/projects/projects.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProjectsComponent } from './projects.component' + +describe('ProjectsComponent', () => { + let component: ProjectsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProjectsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProjectsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/projects/projects.component.ts b/apiferia/src/app/views/pages/profile/components/projects/projects.component.ts new file mode 100644 index 00000000..c87c615e --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/projects/projects.component.ts @@ -0,0 +1,18 @@ +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { ProjectData } from '../../data' +import { + NgbDropdownModule, + NgbProgressbarModule, + NgbTooltipModule, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'profile-projects', + standalone: true, + imports: [NgbProgressbarModule, NgbDropdownModule, NgbTooltipModule], + templateUrl: './projects.component.html', + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ProjectsComponent { + projectList = ProjectData +} diff --git a/apiferia/src/app/views/pages/profile/components/skill/skill.component.html b/apiferia/src/app/views/pages/profile/components/skill/skill.component.html new file mode 100644 index 00000000..fffe8e02 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/skill/skill.component.html @@ -0,0 +1,25 @@ +
    +
    +
    Skill
    +
    +
    +
    +
    + @for (item of skillData; track $index; let last = $last) { +

    {{ item.progressValue }}%

    +

    + {{ item.title }} +

    + + } +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/components/skill/skill.component.spec.ts b/apiferia/src/app/views/pages/profile/components/skill/skill.component.spec.ts new file mode 100644 index 00000000..6355c138 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/skill/skill.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SkillComponent } from './skill.component' + +describe('SkillComponent', () => { + let component: SkillComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SkillComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SkillComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/components/skill/skill.component.ts b/apiferia/src/app/views/pages/profile/components/skill/skill.component.ts new file mode 100644 index 00000000..675593bf --- /dev/null +++ b/apiferia/src/app/views/pages/profile/components/skill/skill.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core' +import { SkillData } from '../../data' +import { NgbProgressbarModule } from '@ng-bootstrap/ng-bootstrap' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'profile-skill', + standalone: true, + imports: [NgbProgressbarModule, CommonModule], + templateUrl: './skill.component.html', + styles: ``, +}) +export class SkillComponent { + skillData = SkillData +} diff --git a/apiferia/src/app/views/pages/profile/data.ts b/apiferia/src/app/views/pages/profile/data.ts new file mode 100644 index 00000000..da4f7cd1 --- /dev/null +++ b/apiferia/src/app/views/pages/profile/data.ts @@ -0,0 +1,204 @@ +export type ProfileType = { + cover: string + profile: string + name: string + post: string + about: string + skill: string[] + link: string[] + email: string + phone: string + designation: string + age: number + experience: number + language: string +} + +export type SkillType = { + title: string + progressValue: number +} + +export type FollowersType = { + profile: string + name: string + email: string +} + +export type ProjectType = { + icon: string + iconColor: string + title: string + days: number + file: number + progressValue: number + progressType: string + team: number + teamMebmer: string[] +} + +export type MessageType = { + profile: string + name: string + content: string + time: string +} + +export const ProfileInfo: ProfileType = { + cover: 'assets/images/small/img-6.jpg', + profile: 'assets/images/users/avatar-1.jpg', + name: 'Jeannette C. Mullin', + post: 'Front End Developer', + about: + "Hi I'm Jeannette Mullin. I am user experience and user interface designer. I have been working on Full Stack Developer since last 10 years.", + skill: [ + 'Code', + 'UX Researcher', + 'Python', + 'HTML', + 'JavaScript', + 'WordPress', + 'App Development', + 'SQL', + 'MongoDB', + ], + link: [ + 'https://myworkbench-portfolio.com', + 'https://scaly-paddock.biz//a.portfolio', + ], + + email: 'jeannette@rhyta.com', + phone: '+909 707-302-2110', + designation: 'Full Stack Developer', + age: 31, + experience: 10, + language: 'English , Spanish , German , Japanese', +} + +export const SkillData: SkillType[] = [ + { + title: 'MongoDB', + progressValue: 82, + }, + { + title: 'WordPress', + progressValue: 55, + }, + { + title: 'UX Researcher', + progressValue: 68, + }, + { + title: 'SQL', + progressValue: 37, + }, +] + +export const FollowersData: FollowersType[] = [ + { + profile: 'assets/images/users/avatar-6.jpg', + name: 'Hilda B. Brid', + email: 'hildabbridges@teleworm.us', + }, + { + profile: 'assets/images/users/avatar-2.jpg', + name: 'Kevin M. Bacon', + email: 'kevinmbacon@dayrep.com', + }, + { + profile: 'assets/images/users/avatar-3.jpg', + name: 'Sherrie W. Torres', + email: 'sherriewtorres@dayrep.com', + }, + { + profile: 'assets/images/users/avatar-4.jpg', + name: 'David R. Willi', + email: 'davidrwill@teleworm.us', + }, + { + profile: 'assets/images/users/avatar-7.jpg', + name: 'Daryl V. Donn', + email: 'darylvdonnellan@teleworm.us', + }, + { + profile: 'assets/images/users/avatar-5.jpg', + name: 'Risa H. Cuevas', + email: 'risahcuevas@jourrapide.com', + }, +] + +export const ProjectData: ProjectType[] = [ + { + icon: 'iconamoon:pen-duotone', + iconColor: 'primary', + title: 'UI/UX Figma Design', + days: 10, + file: 13, + progressValue: 59, + progressType: 'primary', + team: 20, + teamMebmer: [ + 'assets/images/users/avatar-4.jpg', + 'assets/images/users/avatar-5.jpg', + 'assets/images/users/avatar-3.jpg', + 'assets/images/users/avatar-6.jpg', + ], + }, + { + icon: 'iconamoon:file-document-duotone', + iconColor: 'warning', + title: 'Multipurpose Template', + days: 15, + file: 8, + progressValue: 78, + progressType: 'warning', + team: 12, + teamMebmer: [ + 'assets/images/users/avatar-5.jpg', + 'assets/images/users/avatar-7.jpg', + 'assets/images/users/avatar-8.jpg', + 'assets/images/users/avatar-1.jpg', + ], + }, +] + +export const MessagesData: MessageType[] = [ + { + profile: 'assets/images/users/avatar-2.jpg', + name: 'Kelly Winsler', + content: + "Hello! I just got your assignment, everything's alright, excellent of you!", + time: '4.24 PM', + }, + { + profile: 'assets/images/users/avatar-3.jpg', + name: 'Mary R. Olson', + content: 'Hey! Okay, thank you for letting me know. See you!', + time: '3.21 PM', + }, + { + profile: 'assets/images/users/avatar-4.jpg', + name: 'Andre J. Stricker', + content: "Hello! I just got your assignment, everything's alright, exce", + time: '5.12 AM', + }, + { + profile: 'assets/images/users/avatar-5.jpg', + name: 'Amy R. Whitaker', + content: + 'Hello! You asked me for some extra excercises to train CO. Here you are, like I promissed.', + time: '12.03 AM', + }, + { + profile: 'assets/images/users/avatar-6.jpg', + name: 'Alice R. Owens', + content: 'Hey! Okay, thank you for letting me know. See you!', + time: '1.23 PM', + }, + { + profile: 'assets/images/users/avatar-7.jpg', + name: 'Marcel M. McCall', + content: 'Hey! Okay, thank you for letting me know. See you!', + time: '8.32 AM', + }, +] diff --git a/apiferia/src/app/views/pages/profile/profile.component.html b/apiferia/src/app/views/pages/profile/profile.component.html new file mode 100644 index 00000000..4944b71b --- /dev/null +++ b/apiferia/src/app/views/pages/profile/profile.component.html @@ -0,0 +1,42 @@ + + +
    +
    +
    +
    + + + +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    diff --git a/apiferia/src/app/views/pages/profile/profile.component.spec.ts b/apiferia/src/app/views/pages/profile/profile.component.spec.ts new file mode 100644 index 00000000..1cca759b --- /dev/null +++ b/apiferia/src/app/views/pages/profile/profile.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProfileComponent } from './profile.component' + +describe('ProfileComponent', () => { + let component: ProfileComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProfileComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProfileComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/profile/profile.component.ts b/apiferia/src/app/views/pages/profile/profile.component.ts new file mode 100644 index 00000000..4d8b36bf --- /dev/null +++ b/apiferia/src/app/views/pages/profile/profile.component.ts @@ -0,0 +1,27 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { ProfileInfoComponent } from './components/profile-info/profile-info.component' +import { PersonalInfoComponent } from './components/personal-info/personal-info.component' +import { ProjectsComponent } from './components/projects/projects.component' +import { ActivitiesComponent } from './components/activities/activities.component' +import { SkillComponent } from './components/skill/skill.component' +import { MessagesComponent } from './components/messages/messages.component' +import { FollowersComponent } from './components/followers/followers.component' + +@Component({ + selector: 'app-profile', + standalone: true, + imports: [ + PageTitleComponent, + ProfileInfoComponent, + PersonalInfoComponent, + ProjectsComponent, + ActivitiesComponent, + SkillComponent, + MessagesComponent, + FollowersComponent, + ], + templateUrl: './profile.component.html', + styles: ``, +}) +export class ProfileComponent {} diff --git a/apiferia/src/app/views/pages/team/component/team-list/team-list.component.html b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.html new file mode 100644 index 00000000..421fe9e5 --- /dev/null +++ b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.html @@ -0,0 +1,105 @@ +
    + @for (team of ourTeamList; track $index) { +
    +
    +
    + + +
    +
    + {{ + team.name + }} +

    + + {{ team.email }} +

    +
    +

    + {{ team.post }} +

    +
    +
    + + + + +
    +
    + +
    +
    + } +
    diff --git a/apiferia/src/app/views/pages/team/component/team-list/team-list.component.spec.ts b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.spec.ts new file mode 100644 index 00000000..2bbbcc1f --- /dev/null +++ b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TeamListComponent } from './team-list.component' + +describe('TeamListComponent', () => { + let component: TeamListComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TeamListComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TeamListComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/team/component/team-list/team-list.component.ts b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.ts new file mode 100644 index 00000000..c0b7d539 --- /dev/null +++ b/apiferia/src/app/views/pages/team/component/team-list/team-list.component.ts @@ -0,0 +1,14 @@ +import { Component } from '@angular/core' +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' +import { OurTeamData } from '../../data' + +@Component({ + selector: 'team-list', + standalone: true, + imports: [NgbTooltipModule], + templateUrl: './team-list.component.html', + styles: ``, +}) +export class TeamListComponent { + ourTeamList = OurTeamData +} diff --git a/apiferia/src/app/views/pages/team/data.ts b/apiferia/src/app/views/pages/team/data.ts new file mode 100644 index 00000000..c14beabd --- /dev/null +++ b/apiferia/src/app/views/pages/team/data.ts @@ -0,0 +1,66 @@ +export type OurTeamType = { + profile: string + name: string + email: string + post: string + projects: number + duration: string + tasks: number +} + +export const OurTeamData: OurTeamType[] = [ + { + profile: 'assets/images/users/avatar-1.jpg', + name: 'Willie T. Anderson', + email: 'willieandr@armyspy.com', + post: 'HR Manager', + projects: 342, + duration: '2y', + tasks: 1032, + }, + { + profile: 'assets/images/users/avatar-2.jpg', + name: 'Harold J. Hurley', + email: 'haroldlhurly@armyspy.com', + post: 'Web Designer', + projects: 231, + duration: '1.3y', + tasks: 543, + }, + { + profile: 'assets/images/users/avatar-3.jpg', + name: 'Sandra E. Simon', + email: 'snadraaimon@armyspy.com', + post: 'UI/UX Designer', + projects: 123, + duration: '7m', + tasks: 231, + }, + { + profile: 'assets/images/users/avatar-4.jpg', + name: 'Richard J. Lewis', + email: 'richaaedllewis@armyspy.com', + post: 'Software Engineer', + projects: 452, + duration: '4y', + tasks: 331, + }, + { + profile: 'assets/images/users/avatar-5.jpg', + name: 'Margo M. Garris', + email: 'margogarr@armyspy.com', + post: 'Lead Product Design', + projects: 352, + duration: '6m', + tasks: 463, + }, + { + profile: 'assets/images/users/avatar-6.jpg', + name: 'Ruby L. Fisher', + email: 'rubylfisher@armyspy.com', + post: 'Project Manager', + projects: 231, + duration: '4y', + tasks: 573, + }, +] diff --git a/apiferia/src/app/views/pages/team/team.component.html b/apiferia/src/app/views/pages/team/team.component.html new file mode 100644 index 00000000..926a5632 --- /dev/null +++ b/apiferia/src/app/views/pages/team/team.component.html @@ -0,0 +1,75 @@ + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    + + + + +
    +
    + +
    +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/pages/team/team.component.spec.ts b/apiferia/src/app/views/pages/team/team.component.spec.ts new file mode 100644 index 00000000..b223b80d --- /dev/null +++ b/apiferia/src/app/views/pages/team/team.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TeamComponent } from './team.component' + +describe('TeamComponent', () => { + let component: TeamComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TeamComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TeamComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/team/team.component.ts b/apiferia/src/app/views/pages/team/team.component.ts new file mode 100644 index 00000000..f165cd5a --- /dev/null +++ b/apiferia/src/app/views/pages/team/team.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' +import { TeamListComponent } from './component/team-list/team-list.component' + +@Component({ + selector: 'app-team', + standalone: true, + imports: [PageTitleComponent, NgbDropdownModule, TeamListComponent], + templateUrl: './team.component.html', + styles: ``, +}) +export class TeamComponent {} diff --git a/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.html b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.html new file mode 100644 index 00000000..5ecb0dd1 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.html @@ -0,0 +1,28 @@ +@for (item of timelineList; track $index) { +
    +
    {{ item.date }}
    +
    + @if (item.events) { +
      + @for (event of item.events; track event) { +
    • +
      +
      +
      + {{ event.title }} + @if (event.badge) { + {{ + event.badge + }} + } +
      +

      + {{ event.description }} +

      +
      +
      +
    • + } +
    + } +} diff --git a/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.spec.ts b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.spec.ts new file mode 100644 index 00000000..671b8604 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { LeftTimelineComponent } from './left-timeline.component' + +describe('LeftTimelineComponent', () => { + let component: LeftTimelineComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LeftTimelineComponent], + }).compileComponents() + + fixture = TestBed.createComponent(LeftTimelineComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.ts b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.ts new file mode 100644 index 00000000..700312f7 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/components/left-timeline/left-timeline.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core' +import { LeftTimeLine } from '../../data' + +@Component({ + selector: 'left-timeline', + standalone: true, + imports: [], + templateUrl: './left-timeline.component.html', + styles: ``, +}) +export class LeftTimelineComponent { + timelineList = LeftTimeLine +} diff --git a/apiferia/src/app/views/pages/timeline/data.ts b/apiferia/src/app/views/pages/timeline/data.ts new file mode 100644 index 00000000..a2cb1817 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/data.ts @@ -0,0 +1,106 @@ +export type EventType = { + side?: string + title: string + badge?: string + description: string +} +export type TimelineType = { + date: string + events: EventType[] +} + +export const TimelineData: TimelineType[] = [ + { + date: 'Today', + events: [ + { + side: 'left', + title: 'Completed UX design project for our client', + badge: 'important', + description: + 'Dolorum provident rerum aut hic quasi placeat iure tempora laudantium ipsa ad debitis unde?', + }, + { + side: 'right', + title: 'Yes! We are celebrating our first admin release.', + description: + 'Consectetur adipisicing elit. Iusto, optio, dolorum John deon provident.', + }, + { + side: 'left', + title: 'We released new version of our theme Reback.', + description: '3 new photo Uploaded on facebook fan page', + }, + ], + }, + { + date: 'Yesterday', + events: [ + { + side: 'right', + title: 'We have archieved 25k sales in our themes', + description: + 'Dolorum provident rerum aut hic quasi placeat iure tempora laudantium ipsa ad debitis unde?', + }, + { + side: 'left', + title: 'Yes! We are celebrating our first admin release.', + description: + 'Outdoor visit at California State Route 85 with John Boltana & Harry Piterson.', + }, + ], + }, +] + +export const LeftTimeLine: TimelineType[] = [ + { + date: 'Today', + events: [ + { + title: 'Completed UX design project for our client', + badge: 'important', + description: + 'Dolorum provident rerum aut hic quasi placeat iure tempora laudantium ipsa ad debitis unde?', + }, + { + title: 'Yes! We are celebrating our first admin release.', + description: + 'Consectetur adipisicing elit. Iusto, optio, dolorum John deon provident rerum aut hic quasi placeat iure tempora laudantium', + }, + { + title: 'We released new version of our theme Reback.', + description: '3 new photo Uploaded on facebook fan page', + }, + ], + }, + { + date: 'Yesterday', + events: [ + { + title: 'We have archieved 25k sales in our themes', + description: + 'Dolorum provident rerum aut hic quasi placeat iure tempora laudantium ipsa ad debitis unde?', + }, + { + title: 'Yes! We are celebrating our first admin release.', + description: + 'Outdoor visit at California State Route 85 with John Boltana & Harry Piterson regarding to setup a new show room.', + }, + ], + }, + { + date: '5 days ago', + events: [ + { + title: 'Join new team member Alex Smith', + description: + 'Alex Smith is a Senior Software (Full Stack) engineer with a deep passion for building usable, functional & pretty web applications.', + }, + { + title: 'First release of Reback admin dashboard template', + description: + 'Outdoor visit at California State Route 85 with John Boltana & Harry Piterson regarding to setup a new show room.', + }, + ], + }, +] diff --git a/apiferia/src/app/views/pages/timeline/timeline.component.html b/apiferia/src/app/views/pages/timeline/timeline.component.html new file mode 100644 index 00000000..c1781c66 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/timeline.component.html @@ -0,0 +1,59 @@ + + +
    +
    +
    + @for (item of timelineList; track $index) { +
    +
    +
    + {{ item.date }} +
    +
    +
    + + @if (item.events) { + @for (event of item.events; track event) { +
    +
    +
    + +
    +
    +
    +
    + {{ event.title }} + @if (event.badge) { + {{ event.badge }} + } +
    +

    + {{ event.description }} +

    +
    +
    +
    +
    +
    +
    + } + } + } +
    +
    +
    + +
    +
    +
    Left Timeline
    + +
    +
    diff --git a/apiferia/src/app/views/pages/timeline/timeline.component.spec.ts b/apiferia/src/app/views/pages/timeline/timeline.component.spec.ts new file mode 100644 index 00000000..525f8794 --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/timeline.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TimelineComponent } from './timeline.component' + +describe('TimelineComponent', () => { + let component: TimelineComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TimelineComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TimelineComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/timeline/timeline.component.ts b/apiferia/src/app/views/pages/timeline/timeline.component.ts new file mode 100644 index 00000000..0842660d --- /dev/null +++ b/apiferia/src/app/views/pages/timeline/timeline.component.ts @@ -0,0 +1,16 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { LeftTimelineComponent } from './components/left-timeline/left-timeline.component' +import { TimelineData } from './data' +import { CommonModule } from '@angular/common' + +@Component({ + selector: 'app-timeline', + standalone: true, + imports: [PageTitleComponent, LeftTimelineComponent, CommonModule], + templateUrl: './timeline.component.html', + styles: ``, +}) +export class TimelineComponent { + timelineList = TimelineData +} diff --git a/apiferia/src/app/views/pages/welcome/welcome.component.html b/apiferia/src/app/views/pages/welcome/welcome.component.html new file mode 100644 index 00000000..2a090eb8 --- /dev/null +++ b/apiferia/src/app/views/pages/welcome/welcome.component.html @@ -0,0 +1 @@ + diff --git a/apiferia/src/app/views/pages/welcome/welcome.component.spec.ts b/apiferia/src/app/views/pages/welcome/welcome.component.spec.ts new file mode 100644 index 00000000..c0b85b5b --- /dev/null +++ b/apiferia/src/app/views/pages/welcome/welcome.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { WelcomeComponent } from './welcome.component' + +describe('WelcomeComponent', () => { + let component: WelcomeComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [WelcomeComponent], + }).compileComponents() + + fixture = TestBed.createComponent(WelcomeComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/pages/welcome/welcome.component.ts b/apiferia/src/app/views/pages/welcome/welcome.component.ts new file mode 100644 index 00000000..d87d4a0f --- /dev/null +++ b/apiferia/src/app/views/pages/welcome/welcome.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core' +import { PageTitleComponent } from '@/app/components/page-title.component' + +@Component({ + selector: 'app-welcome', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './welcome.component.html', + styles: ``, +}) +export class WelcomeComponent {} diff --git a/apiferia/src/app/views/tables/basic/basic.component.html b/apiferia/src/app/views/tables/basic/basic.component.html new file mode 100644 index 00000000..8790427b --- /dev/null +++ b/apiferia/src/app/views/tables/basic/basic.component.html @@ -0,0 +1,1785 @@ + + +
    +
    +
    +
    +
    + Basic Example # +
    +

    + For basic styling—light padding and only horizontal dividers—add the + base class .table to any <table>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Variants # +
    +

    + Use contextual classes to color tables, table rows or individual + cells. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassHeadingHeading
    DefaultCellCell
    PrimaryCellCell
    SecondaryCellCell
    SuccessCellCell
    DangerCellCell
    WarningCellCell
    InfoCellCell
    LightCellCell
    DarkCellCell
    +
    +
    +
    + +
    +
    +
    + Striped Rows Table # +
    +

    + Use .table-striped to add zebra-striping to any table row + within the <tbody>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Striped Rows Table Dark # +
    +

    + Use .table-dark .table-striped to add zebra-striping to + any table row within the <tbody>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Striped Rows Table Success + # +
    +

    + Use .table-success .table-striped to add zebra-striping + to any table row within the <tbody>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Striped columns + # +
    +

    + Use .table-striped-columns to add zebra-striping to any + table column. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Striped columns Dark# +
    +

    + Use .table-dark .table-striped-columns to add + zebra-striping to any table column. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Striped columns Dark# +
    +

    + Use .table-success .table-striped-columns to add + zebra-striping to any table column. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Hoverable rows # +
    +

    + Add .table-hover to enable a hover state on table rows + within a <tbody>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Hoverable rows Dark + # +
    +

    + Add .table-dark .table-hover to enable a hover state on + table rows within a <tbody>. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Active Tables # +
    +

    + Highlight a table row or cell by adding a + .table-active class. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Active Tables Dark# +
    +

    + Highlight a table row or cell by adding a + .table-dark .table-active class. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Bordered Table # +
    +

    + Add .table-bordered for borders on all sides of the table + and cells. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Bordered color Table # +
    +

    + Add .table-bordered & .border-primary can be + added to change colors. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Tables without borders # +
    +

    + Add .table-borderless for a table without borders.. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Tables without borders Dark# +
    +

    + Add .table-borderless .table-dark for a + table without borders and dark table. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Small tables # +
    +

    + Add .table-sm to make any .table more compact by cutting + all cell padding in half. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Small Tables Dark# +
    +

    + Add .table-sm .table-dark to make any + .table more compact by cutting all cell padding in half. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Table group dividers # +
    +

    + Add a thicker border, darker between table + groups—<thead>, <tbody>, and + <tfoot>—with .table-group-divider. + Customize the color by changing the + border-top-color (which we don’t currently provide a + utility class for at this time). +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    + +
    +
    +
    + Vertical alignment # +
    +

    + Table cells of <thead> are always vertical aligned + to the bottom. Table cells in <tbody> inherit their + alignment from <table> and are aligned to the top + by default. Use the + vertical align + classes to re-align where needed. +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Heading 1Heading 2Heading 3Heading 4
    + This cell inherits vertical-align: middle; from + the table + + This cell inherits vertical-align: middle; from + the table + + This cell inherits vertical-align: middle; from + the table + + This here is some placeholder text, intended to take up + quite a bit of vertical space, to demonstrate how the + vertical alignment works in the preceding cells. +
    + This cell inherits vertical-align: bottom; from + the table row + + This cell inherits vertical-align: bottom; from + the table row + + This cell inherits vertical-align: bottom; from + the table row + + This here is some placeholder text, intended to take up + quite a bit of vertical space, to demonstrate how the + vertical alignment works in the preceding cells. +
    + This cell inherits vertical-align: middle; from + the table + + This cell inherits vertical-align: middle; from + the table + This cell is aligned to the top. + This here is some placeholder text, intended to take up + quite a bit of vertical space, to demonstrate how the + vertical alignment works in the preceding cells. +
    +
    +
    +
    +
    + +
    +
    +
    + Nesting Table # +
    +

    + Border styles, active styles, and table variants are not inherited by + nested tables. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    HeaderHeaderHeader
    AFirstLast
    BFirstLast
    CFirstLast
    +
    3Larrythe Bird@twitter
    +
    +
    +
    + +
    +
    +
    + Table head # +
    +

    + Similar to tables and dark tables, use the modifier classes + .table-lightto make <thead>s appear + light or dark gray. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +
    +
    +
    +
    + Table head Dark# +
    +

    + Similar to tables and dark tables, use the modifier classes + .table-dark to make <thead>s appear + light or dark gray. +

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +
    + +
    +
    +
    + Table foot# +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    FooterFooterFooterFooter
    +
    +
    +
    + +
    +
    +
    + Captions# +
    +

    + A <caption> functions like a heading for a table. + It helps users with screen readers to find a table and understand what + it’s about and decide if they want to read it. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + List of users +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the BirdSimsons@twitter
    +
    +
    +
    +
    +
    +
    + Captions# +
    +

    + You can also put the <caption> on the top of the + table with .caption-top +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + List of users +
    #FirstLastHandle
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +
    + +
    +
    +
    + Always responsive # +
    +

    + Across every breakpoint, use .table-responsive for + horizontally scrolling tables. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #HeadingHeadingHeadingHeadingHeadingHeadingHeadingHeadingHeading
    1CellCellCellCellCellCellCellCellCell
    2CellCellCellCellCellCellCellCellCell
    3CellCellCellCellCellCellCellCellCell
    +
    +
    +
    +
    +
    +
    + With avatars # +
    +

    + A list of all the users in your account including their name, title, + email and role. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTitleEmailRoleAction
    +
    + +
    +
    Tony M. Carter
    +
    +
    +
    Designertonymcarter@jourrapide.comMember + Edit +
    +
    + +
    +
    James E. Chamb
    +
    +
    +
    UI/UX Designerjamesechambliss@teleworm.usAdmin + Edit +
    +
    + +
    +
    Charlotte J. Torres
    +
    +
    +
    Copywritercharlotte@jourrapide.comMember + Edit +
    +
    + +
    +
    + Mary J. Germain +
    +
    +
    +
    Full Stackmaryjgermain@jourrapide.comCEO + Edit +
    +
    + +
    +
    Kevin C. Reyes
    +
    +
    +
    Director of Productkevincreyes@jourrapide.comMember + Edit +
    +
    +
    +
    +
    +
    +
    + With checkboxes # +
    +

    + A list of all the users in your account including their name, title, + email and role. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    NameTitleEmailRoleAction
    +
    + +
    +
    Tony M. CarterDesignertonymcarter@jourrapide.comMember + Edit +
    +
    + +
    +
    James E. ChambUI/UX Designerjamesechambliss@teleworm.usAdmin + Edit +
    +
    + +
    +
    Charlotte J. TorresCopywritercharlotte@jourrapide.comMember + Edit +
    +
    + +
    +
    + Mary J. Germain + + Full Stackmaryjgermain@jourrapide.comCEO + Edit +
    +
    + +
    +
    Kevin C. ReyesDirector of Productkevincreyes@jourrapide.comMember + Edit +
    +
    +
    +
    +
    +
    +
    + Nesting Table # +
    +

    + Border styles, active styles, and table variants are not inherited by + nested tables. +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Invoice NumberInvoice AmountConfirmation by the clientPlanned payment date
    F-011221/21$ 879.50011/05/{{ currentYear }}12/05/{{ currentYear }}
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ERP numberCarrier legal entityResponsible logisticianStatus
    3-128-3ToBrookfield Asset Management +
    + +
    +
    Kevin C. Reyes
    +
    +
    +
    + Verified +
    3-128-2Brookfield Asset Management +
    + +
    +
    Mary J. Germain
    +
    +
    +
    + Pending +
    3-128-1Westfield Asset Management +
    + +
    +
    Charlotte J. Torres
    +
    +
    +
    + Rejected +
    +
    F-011221/19$ 93.2509/05/{{ currentYear }}10/05/{{ currentYear }}
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/tables/basic/basic.component.spec.ts b/apiferia/src/app/views/tables/basic/basic.component.spec.ts new file mode 100644 index 00000000..2d3ca620 --- /dev/null +++ b/apiferia/src/app/views/tables/basic/basic.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BasicComponent } from './basic.component' + +describe('BasicComponent', () => { + let component: BasicComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BasicComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BasicComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/tables/basic/basic.component.ts b/apiferia/src/app/views/tables/basic/basic.component.ts new file mode 100644 index 00000000..507c1d39 --- /dev/null +++ b/apiferia/src/app/views/tables/basic/basic.component.ts @@ -0,0 +1,15 @@ +import { currentYear } from '@/app/common/constants' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-basic', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './basic.component.html', + styles: ``, +}) +export class BasicComponent { + currentYear = currentYear +} diff --git a/apiferia/src/app/views/tables/data.ts b/apiferia/src/app/views/tables/data.ts new file mode 100644 index 00000000..65bb79f1 --- /dev/null +++ b/apiferia/src/app/views/tables/data.ts @@ -0,0 +1,139 @@ +export type DataTableItemsType = { + id: number + name: string + flag: string + area: number + population: number +} + +export const DataTableItems: DataTableItemsType[] = [ + { + id: 1, + name: 'Russia', + flag: 'f/f3/Flag_of_Russia.svg', + area: 17075200, + population: 146989754, + }, + { + id: 2, + name: 'France', + flag: 'c/c3/Flag_of_France.svg', + area: 640679, + population: 64979548, + }, + { + id: 3, + name: 'Germany', + flag: 'b/ba/Flag_of_Germany.svg', + area: 357114, + population: 82114224, + }, + { + id: 4, + name: 'Portugal', + flag: '5/5c/Flag_of_Portugal.svg', + area: 92090, + population: 10329506, + }, + { + id: 5, + name: 'Canada', + flag: 'c/cf/Flag_of_Canada.svg', + area: 9976140, + population: 36624199, + }, +] + +export const paginateData: DataTableItemsType[] = [ + { + id: 1, + name: 'Russia', + flag: 'f/f3/Flag_of_Russia.svg', + area: 17075200, + population: 146989754, + }, + { + id: 2, + name: 'France', + flag: 'c/c3/Flag_of_France.svg', + area: 640679, + population: 64979548, + }, + { + id: 3, + name: 'Germany', + flag: 'b/ba/Flag_of_Germany.svg', + area: 357114, + population: 82114224, + }, + { + id: 4, + name: 'Portugal', + flag: '5/5c/Flag_of_Portugal.svg', + area: 92090, + population: 10329506, + }, + { + id: 5, + name: 'Canada', + flag: 'c/cf/Flag_of_Canada.svg', + area: 9976140, + population: 36624199, + }, + { + id: 6, + name: 'Vietnam', + flag: '2/21/Flag_of_Vietnam.svg', + area: 331212, + population: 95540800, + }, + { + id: 7, + name: 'Brazil', + flag: '0/05/Flag_of_Brazil.svg', + area: 8515767, + population: 209288278, + }, + { + id: 8, + name: 'Mexico', + flag: 'f/fc/Flag_of_Mexico.svg', + area: 1964375, + population: 129163276, + }, + { + id: 9, + name: 'United States', + flag: 'a/a4/Flag_of_the_United_States.svg', + area: 9629091, + population: 324459463, + }, + { + id: 10, + name: 'India', + flag: '4/41/Flag_of_India.svg', + area: 3287263, + population: 1324171354, + }, + { + id: 11, + name: 'Indonesia', + flag: '9/9f/Flag_of_Indonesia.svg', + area: 1910931, + population: 263991379, + }, + { + id: 12, + name: 'Tuvalu', + flag: '3/38/Flag_of_Tuvalu.svg', + area: 26, + population: 11097, + }, + { + id: 13, + name: 'China', + flag: 'f/fa/Flag_of_the_People%27s_Republic_of_China.svg', + area: 9596960, + population: 1409517397, + }, +] diff --git a/apiferia/src/app/views/tables/datatable/datatable.component.html b/apiferia/src/app/views/tables/datatable/datatable.component.html new file mode 100644 index 00000000..d284393a --- /dev/null +++ b/apiferia/src/app/views/tables/datatable/datatable.component.html @@ -0,0 +1,411 @@ + + +
    +
    +
    +
    +
    + Overview + + Official Website + +
    +

    + Table is just a mapping of objects to table rows with @for +

    +
    + Basic# +
    +

    + The most basic list group is an unordered list with list items and the + proper classes. +

    +
    +
    + + + + + + + + + + + @for ( + country of basicCountries; + track country.name; + let i = $index + ) { + + + + + + + } + +
    #CountryAreaPopulation
    {{ i + 1 }} + + {{ country.name }} + {{ country.area | number }}{{ country.population | number }}
    +
    +
    +
    +
    + +
    +
    +
    + Pagination# +
    +

    + You can bind our NgbPagination component with slicing the + data list +

    +
    + + + + + + + + + + + @for (country of countries; track country.name) { + + + + + + + } + +
    #CountryAreaPopulation
    {{ country.id }} + + {{ country.name }} + {{ country.area | number }}{{ country.population | number }}
    + +
    + + + + +
    +
    +
    +
    + +
    +
    + +

    + You can do filter table data, in this case with observables and our + NgbHighlight component used in Typeahead +

    +
    +
    + +
    + +
    +
    + + + + + + + + + + + + @for ( + country of searchCountries; + track country.name; + let i = $index + ) { + + + + + + + } @empty { + + + + } + +
    #CountryAreaPopulation
    {{ i + 1 }} + + + + + + +
    + No countries found +
    +
    +
    +
    + +
    +
    +
    + Sorting# +
    +

    + You can introduce custom directives for table headers to sort columns +

    +
    + + + + + + + + + + + @for (country of sortCountries; track country.name) { + + + + + + + } + +
    # + Country + + Area + + Population +
    {{ country.id }} + + {{ country.name }} + {{ country.area | number }}{{ country.population | number }}
    +
    +
    +
    + +
    +
    +
    + Complete example# +
    +

    + This is a more complete example with a service that simulates server + calling: +

    + +
      +
    • an observable async service to fetch a list of countries
    • +
    • sorting, filtering and pagination
    • +
    • simulated delay and loading indicator
    • +
    • debouncing of search requests
    • +
    +
    +
    +
    + +
    + +
    + @if (tableService.loading$ | async) { + Loading... + } +
    + + + + + + + + + + + + @for (country of records$ | async; track country) { + + + + + + + } @empty { + + + + } + +
    # + Country + + Area + + Population +
    {{ country.id }} + + + + + + +
    + No countries found +
    + +
    + + + + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/tables/datatable/datatable.component.spec.ts b/apiferia/src/app/views/tables/datatable/datatable.component.spec.ts new file mode 100644 index 00000000..b80e1e01 --- /dev/null +++ b/apiferia/src/app/views/tables/datatable/datatable.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { DatatableComponent } from './datatable.component' + +describe('DatatableComponent', () => { + let component: DatatableComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DatatableComponent], + }).compileComponents() + + fixture = TestBed.createComponent(DatatableComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/tables/datatable/datatable.component.ts b/apiferia/src/app/views/tables/datatable/datatable.component.ts new file mode 100644 index 00000000..82caf628 --- /dev/null +++ b/apiferia/src/app/views/tables/datatable/datatable.component.ts @@ -0,0 +1,158 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { TableService } from '@/app/core/services/table.service' +import { NgbdSortableHeader } from '@/app/directive/sortable.directive' +import { CommonModule, DecimalPipe } from '@angular/common' +import { + Component, + Directive, + EventEmitter, + inject, + Input, + Output, + ViewChildren, + type PipeTransform, + type QueryList, +} from '@angular/core' +import { FormsModule } from '@angular/forms' +import { NgbHighlight, NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' +import { Observable } from 'rxjs' +import { DataTableItems, paginateData, type DataTableItemsType } from '../data' + +export type SortColumn = keyof DataTableItemsType | '' +export type SortDirection = 'asc' | 'desc' | '' +const rotate: { [key: string]: SortDirection } = { + asc: 'desc', + desc: '', + '': 'asc', +} + +const compare = (v1: string | number, v2: string | number) => + v1 < v2 ? -1 : v1 > v2 ? 1 : 0 + +export type CustomSortEvent = { + column: SortColumn + direction: SortDirection +} + +@Directive({ + selector: 'th[sortable]', + standalone: true, + host: { + '[class.asc]': 'direction === "asc"', + '[class.desc]': 'direction === "desc"', + '(click)': 'rotate()', + }, +}) +export class NgbdCustomSortableHeader { + @Input() sortable: SortColumn = '' + @Input() direction: SortDirection = '' + @Output() sort = new EventEmitter() + + rotate() { + this.direction = rotate[this.direction] + this.sort.emit({ column: this.sortable, direction: this.direction }) + } +} + +function search(text: string, pipe: PipeTransform): DataTableItemsType[] { + return DataTableItems.filter((country) => { + const term = text.toLowerCase() + return ( + country.name.toLowerCase().includes(term) || + pipe.transform(country.area).includes(term) || + pipe.transform(country.population).includes(term) + ) + }) +} + +@Component({ + selector: 'app-datatable', + standalone: true, + imports: [ + PageTitleComponent, + NgbPaginationModule, + CommonModule, + FormsModule, + UIExamplesListComponent, + NgbHighlight, + NgbdSortableHeader, + ], + templateUrl: './datatable.component.html', + styles: ``, +}) +export class DatatableComponent { + filter!: string + + page = 1 + pageSize = 4 + collectionSize = DataTableItems.length + countries!: DataTableItemsType[] + basicCountries = DataTableItems.slice(0, 5) + searchCountries = DataTableItems.slice(0, 5) + sortCountries = DataTableItems.slice(0, 5) + + records$: Observable + total$: Observable + + @ViewChildren(NgbdSortableHeader) headers!: QueryList< + NgbdSortableHeader + > + + public tableService = inject(TableService) + + constructor(public pipe: DecimalPipe) { + this.records$ = this.tableService.items$ + this.total$ = this.tableService.total$ + + this.refreshCountries() + } + + ngOnInit(): void { + this.tableService.setItems(DataTableItems, 5) + } + + onSort({ column, direction }: CustomSortEvent) { + // resetting other headers + for (const header of this.headers) { + if (header.sortable !== column) { + header.direction = '' + } + } + // sorting countries + if (direction === '' || column === '') { + this.sortCountries = DataTableItems + } else { + this.sortCountries = [...DataTableItems].sort((a, b) => { + const res = compare(a[column], b[column]) + return direction === 'asc' ? res : -res + }) + } + } + + searchfilter() { + this.searchCountries = search(this.filter, this.pipe) + } + + refreshCountries() { + this.countries = paginateData + .map((country, i) => ({ + ...country, + })) + .slice( + (this.page - 1) * this.pageSize, + (this.page - 1) * this.pageSize + this.pageSize + ) + } + + onCompleteSort({ column, direction }: CustomSortEvent) { + for (const header of this.headers) { + if (header.sortable !== column) { + header.direction = '' + } + } + + this.tableService.sortColumn = column + this.tableService.sortDirection = direction + } +} diff --git a/apiferia/src/app/views/tables/datatable/datatable.ts b/apiferia/src/app/views/tables/datatable/datatable.ts new file mode 100644 index 00000000..08e473b3 --- /dev/null +++ b/apiferia/src/app/views/tables/datatable/datatable.ts @@ -0,0 +1,164 @@ +import { currentYear } from '@/app/common/constants' + +export type Employees = { + id: string + name: string + email: string + position: string + company: string + country: string +} + +export type PaginationType = { + id: string + name: string + date: string + price: string +} + +const records: Employees[] = [ + { + id: '11', + name: 'Alice', + email: 'alice@example.com', + position: 'Software Engineer', + company: 'ABC Company', + country: 'United States', + }, + { + id: '12', + name: 'Bob', + email: 'bob@example.com', + position: 'Product Manager', + company: 'XYZ Inc', + country: 'Canada', + }, + { + id: '13', + name: 'Charlie', + email: 'charlie@example.com', + position: 'Data Analyst', + company: '123 Corp', + country: 'Australia', + }, + { + id: '14', + name: 'David', + email: 'david@example.com', + position: 'UI/UX Designer', + company: '456 Ltd', + country: 'United Kingdom', + }, + { + id: '15', + name: 'Eve', + email: 'eve@example.com', + position: 'Marketing Specialist', + company: '789 Enterprises', + country: 'France', + }, + { + id: '16', + name: 'Frank', + email: 'frank@example.com', + position: 'HR Manager', + company: 'ABC Company', + country: 'Germany', + }, + { + id: '17', + name: 'Grace', + email: 'grace@example.com', + position: 'Financial Analyst', + company: 'XYZ Inc', + country: 'Japan', + }, + { + id: '18', + name: 'Hannah', + email: 'hannah@example.com', + position: 'Sales Representative', + company: '123 Corp', + country: 'Brazil', + }, + { + id: '19', + name: 'Ian', + email: 'ian@example.com', + position: 'Software Developer', + company: '456 Ltd', + country: 'India', + }, + { + id: '20', + name: 'Jane', + email: 'jane@example.com', + position: 'Operations Manager', + company: '789 Enterprises', + country: 'China', + }, +] + +const pagination: PaginationType[] = [ + { + id: '#RB2320', + name: 'Alice', + date: '07 Oct, ' + currentYear, + price: '$24.05', + }, + { + id: '#RB8652', + name: 'Bob', + date: '07 Oct, ' + currentYear, + price: '$26.15', + }, + { + id: '#RB8520', + name: 'Charlie', + date: '06 Oct, ' + currentYear, + price: '$21.25', + }, + { + id: '#RB9512', + name: 'David', + date: '05 Oct, ' + currentYear, + price: '$25.03', + }, + { + id: '#RB7532', + name: 'Eve', + date: '05 Oct, ' + currentYear, + price: '$22.61', + }, + { + id: '#RB9632', + name: 'Frank', + date: '04 Oct, ' + currentYear, + price: '$24.05', + }, + { + id: '#RB7456', + name: 'Grace', + date: '04 Oct, ' + currentYear, + price: '$26.15', + }, + { + id: '#RB3002', + name: 'Hannah', + date: '04 Oct, ' + currentYear, + price: '$21.25', + }, + { + id: '#RB9857', + name: 'Ian', + date: '03 Oct, ' + currentYear, + price: '$22.61', + }, + { + id: '#RB2589', + name: 'Jane', + date: '03 Oct, ' + currentYear, + price: '$25.03', + }, +] +export { records, pagination } diff --git a/apiferia/src/app/views/tables/table.route.ts b/apiferia/src/app/views/tables/table.route.ts new file mode 100644 index 00000000..69e4159e --- /dev/null +++ b/apiferia/src/app/views/tables/table.route.ts @@ -0,0 +1,16 @@ +import type { Route } from '@angular/router' +import { BasicComponent } from './basic/basic.component' +import { DatatableComponent } from './datatable/datatable.component' + +export const TABLES_ROUTE: Route[] = [ + { + path: 'basic', + component: BasicComponent, + data: { title: 'Basic Tables' }, + }, + { + path: 'datatable', + component: DatatableComponent, + data: { title: 'Data Tables' }, + }, +] diff --git a/apiferia/src/app/views/ui/accordions/accordions.component.html b/apiferia/src/app/views/ui/accordions/accordions.component.html new file mode 100644 index 00000000..7cba7014 --- /dev/null +++ b/apiferia/src/app/views/ui/accordions/accordions.component.html @@ -0,0 +1,192 @@ + +
    +
    +
    +
    +
    + Basic Example + # +
    +

    + Using the card component, you can extend the default collapse behavior + to create an accordion. To properly achieve the accordion style, be + sure to use + .accordion as a wrapper. +

    + +
    +
    + @for (item of accordionData; track $index) { +
    +

    + +

    +
    +
    +
    +
    + } +
    +
    +
    +
    + +
    +
    +
    + Flush Accordion + # +
    +

    + Add .accordion-flush to remove the default + background-color, some borders, and some rounded corners + to render accordions edge-to-edge with their parent container. +

    + +
    +
    + @for (data of accordionData; track $index) { +
    +

    + +

    +
    +
    +
    +
    + } +
    +
    +
    +
    + +
    +
    +
    + Always Open Accordion + # +
    +

    + Omit the + data-bs-parent attribute on each + .accordion-collapse to make accordion items stay open + when another item is opened. +

    + +
    +
    + @for (data of accordionData; track $index; let first = $first) { +
    +

    + +

    +
    +
    +
    +
    + } +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/accordions/accordions.component.spec.ts b/apiferia/src/app/views/ui/accordions/accordions.component.spec.ts new file mode 100644 index 00000000..31e5a7d2 --- /dev/null +++ b/apiferia/src/app/views/ui/accordions/accordions.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AccordionsComponent } from './accordions.component' + +describe('AccordionsComponent', () => { + let component: AccordionsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AccordionsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AccordionsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/accordions/accordions.component.ts b/apiferia/src/app/views/ui/accordions/accordions.component.ts new file mode 100644 index 00000000..c063c547 --- /dev/null +++ b/apiferia/src/app/views/ui/accordions/accordions.component.ts @@ -0,0 +1,19 @@ +import { Component } from '@angular/core' +import { + NgbAccordionModule, + NgbScrollSpyModule, +} from '@ng-bootstrap/ng-bootstrap' +import { accordionItem } from './data' +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' + +@Component({ + selector: 'app-accordions', + standalone: true, + imports: [NgbAccordionModule, PageTitleComponent, UIExamplesListComponent], + templateUrl: './accordions.component.html', + styles: ``, +}) +export class AccordionsComponent { + accordionData = accordionItem +} diff --git a/apiferia/src/app/views/ui/accordions/data.ts b/apiferia/src/app/views/ui/accordions/data.ts new file mode 100644 index 00000000..d007bf1e --- /dev/null +++ b/apiferia/src/app/views/ui/accordions/data.ts @@ -0,0 +1,18 @@ +export type AccordionItemType = { + header: string + body: string +} +export const accordionItem: AccordionItemType[] = [ + { + header: 'Accordion Item #1', + body: `This is the first item's accordion body. It is shown by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow`, + }, + { + header: 'Accordion Item #2', + body: `This is the second item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body, though the transition does limit overflow.`, + }, + { + header: 'Accordion Item #3', + body: "This is the third item's accordion body. It is hidden by default, until the collapse plugin adds the appropriate classes that we use to style each element. These classes control the overall appearance, as well as the showing and hiding via CSS transitions. You can modify any of this with custom CSS or overriding our default variables. It's also worth noting that just about any HTML can go within the .accordion-body , though the transition does limit overflow.", + }, +] diff --git a/apiferia/src/app/views/ui/alerts/alerts.component.html b/apiferia/src/app/views/ui/alerts/alerts.component.html new file mode 100644 index 00000000..34779f2f --- /dev/null +++ b/apiferia/src/app/views/ui/alerts/alerts.component.html @@ -0,0 +1,198 @@ + + +
    +
    +
    +
    +
    + Basic Example + # +
    +

    + Provide contextual feedback messages for typical user actions with the + handful of available and flexible alert messages. Alerts are available + for any length of text, as well as an optional dismiss button. +

    +
    + @for (item of alertData; track $index) { + + {{ item.message }} + + } +
    +
    +
    + +
    +
    +
    + Dismissible Alerts Example + # +
    +

    + Add a dismiss button and the + [dismissible]="false" attribute, which adds extra + padding to the right of the alert and positions the + .btn-close button. +

    +
    + @for (item of alertData; track $index) { + + {{ item.message }} + + + } +
    +
    +
    + +
    +
    + +

    + Use the .alert-link utility class to quickly provide + matching colored links within any alert. +

    + +
    + @for (item of alertData; track $index) { + @if ($index <= 3) { + + A simple {{ item.type }} alert with + an example link + . Give it a click if you like. + + } + } +
    +
    +
    + +
    +
    +
    + Icons Alert Example + # +
    +

    + You can also include additional elements like icons, heading, etc + along side the actual message. +

    + +
    + @for (item of alertData; track $index) { + @if ($index <= 3) { + +
    +
    + +
    +
    + A simple {{ item.type }} alert—check it out! +
    +
    +
    + } + } +
    +
    +
    + +
    +
    +
    + Additional Content Alert Example + # +
    +

    + Alerts can also contain additional HTML elements like headings, + paragraphs and dividers. +

    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/alerts/alerts.component.spec.ts b/apiferia/src/app/views/ui/alerts/alerts.component.spec.ts new file mode 100644 index 00000000..1ba47afe --- /dev/null +++ b/apiferia/src/app/views/ui/alerts/alerts.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AlertsComponent } from './alerts.component' + +describe('AlertsComponent', () => { + let component: AlertsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AlertsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AlertsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/alerts/alerts.component.ts b/apiferia/src/app/views/ui/alerts/alerts.component.ts new file mode 100644 index 00000000..c55b694b --- /dev/null +++ b/apiferia/src/app/views/ui/alerts/alerts.component.ts @@ -0,0 +1,20 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { NgbAlertModule } from '@ng-bootstrap/ng-bootstrap' +import { AlertType, alert } from './data' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' + +@Component({ + selector: 'app-alerts', + standalone: true, + imports: [PageTitleComponent, NgbAlertModule, UIExamplesListComponent], + templateUrl: './alerts.component.html', + styles: ``, +}) +export class AlertsComponent { + alertData: AlertType[] = alert + + close(index: number) { + this.alertData.splice(index, 1) + } +} diff --git a/apiferia/src/app/views/ui/alerts/data.ts b/apiferia/src/app/views/ui/alerts/data.ts new file mode 100644 index 00000000..53df9718 --- /dev/null +++ b/apiferia/src/app/views/ui/alerts/data.ts @@ -0,0 +1,39 @@ +export type AlertType = { + message: string + type: string +} + +export const alert: AlertType[] = [ + { + type: 'primary', + message: 'A simple primary alert—check it out!', + }, + { + type: 'secondary', + message: 'A simple secondary alert—check it out!', + }, + { + type: 'success', + message: 'A simple success alert—check it out!', + }, + { + type: 'danger', + message: 'A simple danger alert—check it out!', + }, + { + type: 'warning', + message: 'A simple warning alert—check it out!', + }, + { + type: 'info', + message: 'A simple info alert—check it out!', + }, + { + type: 'light', + message: 'A simple light alert—check it out!', + }, + { + type: 'dark', + message: 'A simple dark alert—check it out!', + }, +] diff --git a/apiferia/src/app/views/ui/avatars/avatars.component.html b/apiferia/src/app/views/ui/avatars/avatars.component.html new file mode 100644 index 00000000..cff22120 --- /dev/null +++ b/apiferia/src/app/views/ui/avatars/avatars.component.html @@ -0,0 +1,203 @@ + + +
    +
    +
    +
    +
    + Basic Example + # +
    +

    + Create and group avatars of different sizes and shapes with the css + classes. Using Bootstrap's naming convention, you can control size of + avatar including standard avatar, or scale it up to different sizes. +

    + +
    +
    + image +

    + .avatar-xs +

    + image +

    + .avatar-sm +

    +
    +
    + image +

    + .avatar-md +

    +
    + +
    + image +

    + .avatar-lg +

    +
    + +
    + image +

    + .avatar-xl +

    +
    +
    +
    +
    + +
    +
    +
    + Rounded Circle# +
    +

    + Using an additional class + .rounded-circle in <img> element + creates the rounded avatar. +

    + +
    +
    + image +

    + .avatar-md .rounded-circle +

    +
    + +
    + image +

    + .avatar-lg .rounded-circle +

    +
    + +
    + image +

    + .avatar-xl .rounded-circle +

    +
    +
    +
    +
    + +
    +
    +
    + Images Shapes# +
    +

    + Avatars with different sizes and shapes. +

    + +
    +
    + image +

    + .rounded +

    +
    + +
    + image +

    + .rounded +

    +
    + +
    + image +

    + .rounded-circle +

    +
    + +
    + image +

    + .img-thumbnail +

    +
    + +
    + image +

    + .rounded-circle .img-thumbnail +

    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/avatars/avatars.component.spec.ts b/apiferia/src/app/views/ui/avatars/avatars.component.spec.ts new file mode 100644 index 00000000..8a6814fc --- /dev/null +++ b/apiferia/src/app/views/ui/avatars/avatars.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { AvatarsComponent } from './avatars.component' + +describe('AvatarsComponent', () => { + let component: AvatarsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AvatarsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(AvatarsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/avatars/avatars.component.ts b/apiferia/src/app/views/ui/avatars/avatars.component.ts new file mode 100644 index 00000000..239f82f5 --- /dev/null +++ b/apiferia/src/app/views/ui/avatars/avatars.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-avatars', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './avatars.component.html', + styles: ``, +}) +export class AvatarsComponent {} diff --git a/apiferia/src/app/views/ui/badges/badges.component.html b/apiferia/src/app/views/ui/badges/badges.component.html new file mode 100644 index 00000000..d8c455b4 --- /dev/null +++ b/apiferia/src/app/views/ui/badges/badges.component.html @@ -0,0 +1,211 @@ + + +
    +
    +
    +
    +
    + Heading + # +
    +

    + Provide contextual feedback messages for typical user actions with the + handful of available and flexible alert messages. Alerts are available + for any length of text, as well as an optional dismiss button. +

    +
    +

    + h1.Example heading + New +

    +

    + h2.Example heading + New +

    +

    + h3.Example heading + New +

    +

    + h4.Example heading + New +

    +
    + h5.Example heading + New +
    +
    + h6.Example heading + New +
    +
    +
    +
    + +
    +
    +
    + Default & Pill Badges + # +
    +

    + Use our background utility classes to quickly change the appearance of + a badge. And use the + .rounded-pill class to make badges more rounded. +

    +
    +
    + @for (item of badges; track $index) { + {{ + item + }} + } +
    + +
    + @for (item of badges; track $index) { + {{ item }} + } +
    +
    +
    +
    + +
    +
    +
    + Outline & Outline Pill Badges + # +
    +

    + Using the + .badge-outline-** to quickly create a bordered badges. +

    + +
    +
    + @for (item of badges; track $index) { + {{ + item + }} + } +
    + +
    + @for (item of badges; track $index) { + {{ item }} + } +
    +
    +
    +
    + +
    +
    +
    + Soft & Soft Pill Badges + # +
    +

    + Using the + .badge-soft-** modifier class, you can have more soften + variation. +

    + +
    +
    + @for (item of badges; track $index) { + {{ + item + }} + } +
    + +
    + @for (item of badges; track $index) { + {{ item }} + } +
    +
    +
    +
    + +
    +
    +
    + Buttons & Position + # +
    +

    + Alerts can also contain additional HTML elements like headings, + paragraphs and dividers. +

    + +
    +
    + + + + + Notifications + 90+ + +
    + +
    + + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/badges/badges.component.spec.ts b/apiferia/src/app/views/ui/badges/badges.component.spec.ts new file mode 100644 index 00000000..1a18e971 --- /dev/null +++ b/apiferia/src/app/views/ui/badges/badges.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BadgesComponent } from './badges.component' + +describe('BadgesComponent', () => { + let component: BadgesComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BadgesComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BadgesComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/badges/badges.component.ts b/apiferia/src/app/views/ui/badges/badges.component.ts new file mode 100644 index 00000000..7aa7e050 --- /dev/null +++ b/apiferia/src/app/views/ui/badges/badges.component.ts @@ -0,0 +1,25 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-badges', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './badges.component.html', + styles: ``, +}) +export class BadgesComponent { + badges = [ + 'Primary', + 'Secondary', + 'Success', + 'Info', + 'Warning', + 'Danger', + 'Dark', + 'Purple', + 'Pink', + 'Orange', + ] +} diff --git a/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.html b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.html new file mode 100644 index 00000000..b0d2a3cd --- /dev/null +++ b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.html @@ -0,0 +1,100 @@ + + +
    +
    +
    +
    +
    + Default Example# +
    +

    + Use an ordered or unordered list with linked list items to create a + minimally styled breadcrumb. Use our utilities to add additional + styles as desired. +

    + +
    + + + + + +
    +
    +
    + +
    +
    +
    + Dividers Breadcrumb + # +
    +

    + Optionally you can also specify the icon with your breadcrumb item. +

    +
    + + + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.spec.ts b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.spec.ts new file mode 100644 index 00000000..3862f38d --- /dev/null +++ b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { BreadcrumbComponent } from './breadcrumb.component' + +describe('BreadcrumbComponent', () => { + let component: BreadcrumbComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BreadcrumbComponent], + }).compileComponents() + + fixture = TestBed.createComponent(BreadcrumbComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.ts b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.ts new file mode 100644 index 00000000..b18f7f9d --- /dev/null +++ b/apiferia/src/app/views/ui/breadcrumb/breadcrumb.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-breadcrumb', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './breadcrumb.component.html', + styles: ``, +}) +export class BreadcrumbComponent {} diff --git a/apiferia/src/app/views/ui/buttons/buttons.component.html b/apiferia/src/app/views/ui/buttons/buttons.component.html new file mode 100644 index 00000000..ca8c6d54 --- /dev/null +++ b/apiferia/src/app/views/ui/buttons/buttons.component.html @@ -0,0 +1,408 @@ + + +
    +
    +
    +
    +
    + Default Buttons# +
    +

    + Use the button classes on an + <a>, <button> or + <input> element. +

    +
    +
    + @for (item of buttons; track $index) { + + } +
    +
    +
    +
    + +
    +
    +
    + Rounded Buttons + # +
    +

    + Add .rounded-pill to default button to get rounded + corners. +

    +
    +
    + @for (item of buttons; track $index) { + + } +
    +
    +
    +
    + +
    +
    +
    + Outline Buttons + # +
    +

    + Use a classes + .btn-outline-** to quickly create a bordered buttons. +

    +
    +
    + @for (item of outlineButton; track $index) { + + } +
    +
    +
    +
    + +
    +
    +
    + Outline Rounded Buttons + # +
    +

    + Use a classes + .btn-outline-** to quickly create a bordered buttons. +

    +
    +
    + @for (item of buttons; track $index) { + @if ($index <= 4) { + + } + } +
    +
    +
    +
    + +
    +
    +
    + Soft Buttons + # +
    +

    + Use a classes + .btn-soft-** to quickly create buttons with soft + background. +

    +
    +
    + @for (item of buttons; track $index) { + @if ($index <= 4) { + + } + } +
    +
    +
    +
    + +
    +
    +
    + Soft Rounded Buttons + # +
    +

    + Use a classes + .rounded-pill** with .btn-soft-** to quickly + create a Outline Soft buttons. +

    +
    +
    + @for (item of buttons; track $index) { + @if ($index <= 4) { + + } + } +
    +
    +
    +
    + +
    +
    +
    + Button Width + # +
    +

    + Create buttons with minimum width by adding add + .width-xs, .width-sm, + .width-md, .width-lg or + .width-xl. +

    +
    +
    + + + + + +
    +
    +
    +
    + +
    +
    +
    + Button Sizes + # +
    +

    + Add .btn-lg, .btn-sm for additional sizes. +

    +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + Disabled Button + # +
    +

    + Add disabled attribute to buttons. +

    +
    +
    + @for (item of buttons; track $index) { + @if ($index <= 4) { + + } + } +
    +
    +
    +
    + +
    +
    +
    + Icon Button + # +
    +

    Icon only Button.

    +
    +
    + + + + + +
    +
    +
    +
    + +
    +
    +
    + Button Group + # +
    +

    + Wrap a series of buttons with + .btn in .btn-group. +

    +
    +
    +
    +
    + + + +
    +
    + + + + +
    +
    + + + + + +
    +
    +
    +
    + + + +
    +
    + + + + +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Block Button + # +
    +

    + Create block level buttons by adding class .d-grid to + parent div. +

    +
    +
    + + + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/buttons/buttons.component.spec.ts b/apiferia/src/app/views/ui/buttons/buttons.component.spec.ts new file mode 100644 index 00000000..63fe5d88 --- /dev/null +++ b/apiferia/src/app/views/ui/buttons/buttons.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ButtonsComponent } from './buttons.component' + +describe('ButtonsComponent', () => { + let component: ButtonsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ButtonsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ButtonsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/buttons/buttons.component.ts b/apiferia/src/app/views/ui/buttons/buttons.component.ts new file mode 100644 index 00000000..177653f3 --- /dev/null +++ b/apiferia/src/app/views/ui/buttons/buttons.component.ts @@ -0,0 +1,44 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { CommonModule } from '@angular/common' +import { Component } from '@angular/core' +import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-buttons', + standalone: true, + imports: [ + PageTitleComponent, + CommonModule, + NgbDropdownModule, + UIExamplesListComponent, + ], + templateUrl: './buttons.component.html', + styles: ``, +}) +export class ButtonsComponent { + buttons = [ + 'Primary', + 'Secondary', + 'Success', + 'Info', + 'Warning', + 'Danger', + 'Dark', + 'Purple', + 'Pink', + 'Orange', + 'Light', + 'Link', + ] + outlineButton = [ + 'Primary', + 'Secondary', + 'Success', + 'Info', + 'Warning', + 'Purple', + 'Pink', + 'Orange', + ] +} diff --git a/apiferia/src/app/views/ui/cards/cards.component.html b/apiferia/src/app/views/ui/cards/cards.component.html new file mode 100644 index 00000000..f89b544c --- /dev/null +++ b/apiferia/src/app/views/ui/cards/cards.component.html @@ -0,0 +1,636 @@ + + +
    +
    +
    + img-1 +
    +
    Card title
    +

    + Some quick example text to build on the card title and make up the + bulk of the card's content. With supporting text below as a natural + lead-in to additional content. +

    + Button +
    +
    +
    + +
    +
    + img-2 +
    +
    Card title
    +

    + Some quick example text to build on the card title. +

    +
    + +
      +
    • Dapibus ac facilisis in
    • +
    + +
    +
    + +
    +
    + img-4 +
    +

    + Some quick example text to build on the card title and make up the + bulk of the card's content. With supporting text below as a natural + lead-in to additional content. +

    + Button +
    +
    +
    + +
    +
    +
    +
    Card title
    +
    + img-5 +
    +

    + Some quick example text to build on the card title. +

    + Card link + Another link +
    +
    +
    +
    + +
    +
    +
    +
    Special title treatment
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

    + Go somewhere +
    + +
    + +
    +
    +
    Special title treatment
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

    + Go somewhere +
    + +
    + +
    + +
    +
    +
    +
    Featured
    +
    +
    Special title treatment
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

    + Go somewhere +
    + +
    + +
    + +
    +
    +
    Quote
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + +
    +
    +
    Featured
    + + +
    + +
    + +
    + +
    +
    +
    Card Colored
    +
    +
    + +
    +
    +
    +
    +
    Special title treatment
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. +

    + Button +
    + +
    + +
    + + +
    +
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer + posuere erat a ante. +

    +
    + Someone famous in + Source Title +
    +
    +
    + +
    + +
    + +
    + +
    +
    +
    Card Bordered
    +
    +
    + +
    +
    +
    +
    +
    Special title treatment
    +

    + With supporting text below as a natural lead-in to additional content. +

    + Button +
    + +
    + +
    + + +
    +
    +
    +
    Special title treatment
    +

    + With supporting text below as a natural lead-in to additional content. +

    + Button +
    + +
    + +
    + + +
    +
    +
    +
    Special title treatment
    +

    + With supporting text below as a natural lead-in to additional content. +

    + Button +
    + +
    + +
    + +
    + +
    +
    +
    Horizontal Card
    +
    +
    + +
    +
    +
    +
    +
    + img-1 +
    +
    +
    +
    Card title
    +

    + This is a wider card with supporting text below as a natural + lead-in to additional content. This content is a little bit + longer. +

    +

    + Last updated 3 mins ago +

    +
    + +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    +
    Card title
    +

    + This is a wider card with supporting text below as a natural + lead-in to additional content. This content is a little bit + longer. +

    +

    + Last updated 3 mins ago +

    +
    +
    + +
    + img-2 +
    +
    + +
    +
    + +
    + +
    +
    +
    Stretched link
    +
    +
    + +
    +
    +
    + img-1 +
    +
    Card with stretched link
    + Go somewhere +
    +
    +
    + +
    +
    + img-2 +
    +
    + Card with stretched link +
    +

    + Some quick example text to build on the card up the bulk of the card's + content. +

    +
    +
    +
    + +
    +
    + img-3 +
    +
    Card with stretched link
    + Go somewhere +
    +
    +
    + +
    +
    + img-4 +
    +
    + Card with stretched link +
    +

    + Some quick example text to build on the card up the bulk of the card's + content. +

    +
    +
    +
    + +
    + +
    +
    +
    Card Group
    +
    +
    + +
    +
    +
    +
    + img-1 +
    +
    Card title
    +

    + This is a wider card with supporting text below as a natural lead-in + to additional content. This content is a little bit longer. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    + img-2 +
    +
    Card title
    +

    + This card has supporting text below as a natural lead-in to + additional content. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    + img-3 +
    +
    Card title
    +

    + This is a wider card with supporting text below as a natural lead-in + to additional content. This card has even longer content than the + first to show that equal height action. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    + +
    + +
    + +
    +
    +
    Card Decks
    +
    +
    + +
    +
    +
    +
    +
    + img-4 +
    +
    Card title
    +

    + This is a longer card with supporting text below as a natural + lead-in to additional content. This content is a little bit + longer. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    +
    +
    + img-3 +
    +
    Card title
    +

    + This is a longer card with supporting text below as a natural + lead-in to additional content. This content is a little bit + longer. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    +
    +
    + img-2 +
    +
    Card title
    +

    + This is a longer card with supporting text below as a natural + lead-in to additional content. This content is a little bit + longer. +

    +

    + Last updated 3 mins ago +

    +
    +
    +
    +
    +
    + +
    diff --git a/apiferia/src/app/views/ui/cards/cards.component.spec.ts b/apiferia/src/app/views/ui/cards/cards.component.spec.ts new file mode 100644 index 00000000..7e1997a2 --- /dev/null +++ b/apiferia/src/app/views/ui/cards/cards.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CardsComponent } from './cards.component' + +describe('CardsComponent', () => { + let component: CardsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CardsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CardsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/cards/cards.component.ts b/apiferia/src/app/views/ui/cards/cards.component.ts new file mode 100644 index 00000000..9457c696 --- /dev/null +++ b/apiferia/src/app/views/ui/cards/cards.component.ts @@ -0,0 +1,11 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-cards', + standalone: true, + imports: [PageTitleComponent], + templateUrl: './cards.component.html', + styles: ``, +}) +export class CardsComponent {} diff --git a/apiferia/src/app/views/ui/carousel/carousel.component.html b/apiferia/src/app/views/ui/carousel/carousel.component.html new file mode 100644 index 00000000..e2c89f04 --- /dev/null +++ b/apiferia/src/app/views/ui/carousel/carousel.component.html @@ -0,0 +1,538 @@ + + +
    +
    +
    +
    +
    + Slides Only# +
    +

    + Here’s a carousel with slides only. Note the presence of the + .d-block and .img-fluid on carousel images + to prevent browser default image alignment. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + With Controls + # +
    +

    Adding in the previous and next controls:

    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + With Indicators + # +
    +

    + You can also add the indicators to the carousel, alongside the + controls, too. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + With Captions + # +
    +

    + Add captions to your slides easily with the + .carousel-caption element within any + .carousel-item. They can be easily hidden on smaller + viewports, as shown below, with optional display utilities. We hide + them initially with .d-none and bring them back on + medium-sized devices with .d-md-block. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Crossfade + # +
    +

    + Add [animation]="true" to your carousel to animate slides + with a fade transition instead of a slide. Depending on your carousel + content (e.g., text only slides), you may want to add + .bg-body or some custom CSS to the + .carousel-items for proper crossfading. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Individual + .carousel-item interval + # +
    +

    + Add [interval]="" to a .carousel-item to + change the amount of time to delay between automatically cycling to + the next item. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Disable touch swiping + .carousel-item interval + # +
    +

    + Carousels support swiping left/right on touchscreen devices to move + between slides. This can be disabled using the + data-bs-touch attribute. The example below also does not + include the data-bs-ride attribute so it doesn’t + autoplay. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + Dark Variant + .carousel-item interval + # +
    +

    + Add .carousel-dark to the .carousel for + darker controls, indicators, and captions. Controls have been inverted + from their default white fill with the filter CSS + property. Captions and controls have additional Sass variables that + customize the color and background-color. +

    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/carousel/carousel.component.spec.ts b/apiferia/src/app/views/ui/carousel/carousel.component.spec.ts new file mode 100644 index 00000000..97fa65dc --- /dev/null +++ b/apiferia/src/app/views/ui/carousel/carousel.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CarouselComponent } from './carousel.component' + +describe('CarouselComponent', () => { + let component: CarouselComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CarouselComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CarouselComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/carousel/carousel.component.ts b/apiferia/src/app/views/ui/carousel/carousel.component.ts new file mode 100644 index 00000000..9795c2c8 --- /dev/null +++ b/apiferia/src/app/views/ui/carousel/carousel.component.ts @@ -0,0 +1,38 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { CommonModule } from '@angular/common' +import { Component, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core' +import { FormsModule } from '@angular/forms' +import { + NgbCarouselConfig, + NgbCarouselModule, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-carousel', + standalone: true, + imports: [ + PageTitleComponent, + NgbCarouselModule, + UIExamplesListComponent, + CommonModule, + FormsModule, + ], + templateUrl: './carousel.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class CarouselComponent { + show = true + show1 = true + show2 = true + + curentsection: string = 'slides-only' + showNavigationArrows = false + showNavigationIndicators = false + + constructor(config: NgbCarouselConfig) { + config.showNavigationArrows = true + config.showNavigationIndicators = true + } +} diff --git a/apiferia/src/app/views/ui/collapse/collapse.component.html b/apiferia/src/app/views/ui/collapse/collapse.component.html new file mode 100644 index 00000000..5774a14b --- /dev/null +++ b/apiferia/src/app/views/ui/collapse/collapse.component.html @@ -0,0 +1,213 @@ + + +
    +
    +
    +
    +
    + Default Example# +
    +

    + Click the buttons below to show and hide another element via class + changes: +

    +
      +
    • .collapse hides content
    • +
    • .collapsing is applied during transitions
    • +
    • .collapse.show shows content
    • +
    +

    + Generally, we recommend using a button with the + data-bs-target attribute. While not recommended from a + semantic point of view, you can also use a link with the + href attribute (and a role="button"). In + both cases, the + data-bs-toggle="collapse" + is required. +

    + +
    +
    + + +
    +
    +
    +
    + Some placeholder content for the collapse component. This panel + is hidden by default but revealed when the user activates the + relevant trigger. +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Horizontal + # +
    +

    + The collapse plugin also supports horizontal collapsing. Add the + .collapse-horizontal + modifier class to transition the + width instead of height and set a + width on the immediate child element. Feel free to write + your own custom Sass, use inline styles, or use our width utilities. +

    +
    + +
    +
    +
    + This is some placeholder content for a horizontal collapse. It's + hidden by default and shown when triggered. +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Multiple Targets + # +
    +

    + A <button> or <a> can show and + hide multiple elements by referencing them with a selector in its + href or data-bs-target attribute. Multiple + <button> or <a> can show and + hide an element if they each reference it with their + href or data-bs-target attribute +

    +
    +
    + + + +
    +
    +
    +
    +
    + Some placeholder content for the first collapse component of + this multi-collapse example. This panel is hidden by default + but revealed when the user activates the relevant trigger. +
    +
    +
    +
    +
    +
    + Some placeholder content for the second collapse component of + this multi-collapse example. This panel is hidden by default + but revealed when the user activates the relevant trigger. +
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/collapse/collapse.component.spec.ts b/apiferia/src/app/views/ui/collapse/collapse.component.spec.ts new file mode 100644 index 00000000..89737096 --- /dev/null +++ b/apiferia/src/app/views/ui/collapse/collapse.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { CollapseComponent } from './collapse.component' + +describe('CollapseComponent', () => { + let component: CollapseComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [CollapseComponent], + }).compileComponents() + + fixture = TestBed.createComponent(CollapseComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/collapse/collapse.component.ts b/apiferia/src/app/views/ui/collapse/collapse.component.ts new file mode 100644 index 00000000..2c60a309 --- /dev/null +++ b/apiferia/src/app/views/ui/collapse/collapse.component.ts @@ -0,0 +1,18 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-collapse', + standalone: true, + imports: [PageTitleComponent, NgbCollapseModule, UIExamplesListComponent], + templateUrl: './collapse.component.html', + styles: ``, +}) +export class CollapseComponent { + isCollapsed = true + isHorizontal = true + isFirstToggle = true + isSecondToggle = true +} diff --git a/apiferia/src/app/views/ui/dropdowns/dropdowns.component.html b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.html new file mode 100644 index 00000000..16dd1a51 --- /dev/null +++ b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.html @@ -0,0 +1,1024 @@ +
    +
    +
    +
    +
    + Single Button Dropdowns# +
    +

    + Any single .btn can be turned into a dropdown toggle with + some markup changes. Here's how you can put them to work with + either <button> elements. +

    + +
    + +
    +
    +
    + +
    +
    +
    + Single Button Variant Dropdowns + # +
    +

    + Any single .btn can be turned into a dropdown toggle with + some markup changes. Here's how you can put them to work with + either <button> elements. +

    +
    + + + + + + + +
    +
    +
    + +
    +
    +
    + Split Button Dropdowns + # +
    +

    + Similarly, create split button dropdowns with virtually the same + markup as single button dropdowns, but with the addition of + .dropdown-toggle-split for proper spacing around the + dropdown caret. +

    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    + +
    +
    +
    + Dark Dropdowns + # +
    +

    + Opt into darker dropdowns to match a dark navbar or custom style by + adding + .dropdown-menu-dark onto an existing + .dropdown-menu. No changes are required to the dropdown + items. +

    + +
    + +
    +
    +
    + +
    +
    +
    + Dropdown Direction + # +
    +

    + Trigger dropdown menus above elements by adding .dropup, + dropdown menus at the left of the elements by adding + .dropstart or dropdown menus at the right of the elements + by adding .dropend. +

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

    + Add .active to items in the dropdown to + style them as active. To convey the active state to + assistive technologies, use the aria-current attribute — + using the page value for the current page, or + true for the current item in a set. +

    +

    + Add .disabled to items in the dropdown to + style them as disabled. +

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

    + Use data-bs-offset or data-bs-reference to + change the location of the dropdown. +

    + +
    + + +
    + + + +
    +
    +
    +
    + +
    +
    +
    + Auto close behavior + # +
    +

    + By default, the dropdown menu is closed when clicking inside or + outside the dropdown menu. You can use the + autoClose option to change this behavior of the dropdown. +

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

    Add a header to label sections of actions in any dropdown menu.

    +

    Separate groups of related menu items with a divider.

    +

    + Place any freeform text within a dropdown menu with text and use + spacing utilities. Note that you’ll likely need additional sizing + styles to constrain the menu width. +

    +

    + Put a form within a dropdown menu, or make it into a dropdown menu, + and use margin or padding utilities to give it the negative space you + require. +

    + +
    + + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/dropdowns/dropdowns.component.spec.ts b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.spec.ts new file mode 100644 index 00000000..36549d51 --- /dev/null +++ b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { DropdownsComponent } from './dropdowns.component' + +describe('DropdownsComponent', () => { + let component: DropdownsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [DropdownsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(DropdownsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/dropdowns/dropdowns.component.ts b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.ts new file mode 100644 index 00000000..8b55cd99 --- /dev/null +++ b/apiferia/src/app/views/ui/dropdowns/dropdowns.component.ts @@ -0,0 +1,36 @@ +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { CUSTOM_ELEMENTS_SCHEMA, Component } from '@angular/core' +import { + NgbDropdownConfig, + NgbDropdownModule, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-dropdowns', + standalone: true, + imports: [NgbDropdownModule, UIExamplesListComponent], + templateUrl: './dropdowns.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class DropdownsComponent { + constructor(config: NgbDropdownConfig) { + // config.placement = 'top-start'; + config.autoClose = false + } + + navItems = [ + { label: 'Single Button Dropdowns', link: '#single-button' }, + { + label: 'Single Button Variant Dropdowns', + link: '#single-button-variant', + }, + { label: 'Split Button Dropdowns', link: '#split-button' }, + { label: 'Dark Dropdown', link: '#dark-dropdown' }, + { label: 'Dropdown Direction', link: '#direction' }, + { label: 'Dropdown Menu Items', link: '#menu-items' }, + { label: 'Dropdown Options', link: '#dropdown-options' }, + { label: 'Auto Close Behavior', link: '#auto-close-behavior' }, + { label: 'Menu content', link: '#menu-content' }, + ] +} diff --git a/apiferia/src/app/views/ui/list-group/list-group.component.html b/apiferia/src/app/views/ui/list-group/list-group.component.html new file mode 100644 index 00000000..f2b3fa24 --- /dev/null +++ b/apiferia/src/app/views/ui/list-group/list-group.component.html @@ -0,0 +1,507 @@ + + +
    +
    +
    +
    +
    + Basic# +
    +

    + The most basic list group is an unordered list with list items and the + proper classes. Build upon it with the options that follow, or with + your own CSS as needed. +

    +
    +
    +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    • A fourth item
    • +
    • And a fifth one
    • +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Active items# +
    +

    + Add .active to a .list-group-item to + indicate the current active selection. +

    + +
    +
    +
    +
      +
    • + An active item +
    • +
    • A second item
    • +
    • A third item
    • +
    • A fourth item
    • +
    • And a fifth one
    • +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Disabled items# +
    +

    + Add .disabled to a .list-group-item to make + it appear disabled. Note that some elements with + .disabled will also require custom JavaScript to fully + disable their click events (e.g., links). +

    + +
    +
    +
    +
      +
    • + A disabled item +
    • +
    • A second item
    • +
    • A third item
    • +
    • A fourth item
    • +
    • And a fifth one
    • +
    +
    +
    +
    +
    +
    + +
    +
    + +

    + Use <a>s or <button>s to create + actionable list group items with hover, disabled, and active + states by adding .list-group-item-action. We separate + these pseudo-classes to ensure list groups made of non-interactive + elements (like <li>s or <div>s) + don’t provide a click or tap affordance. +

    +
    + +
    +
    + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    + Flush# +
    +

    + Add .list-group-flush to remove some borders and rounded + corners to render list group items edge-to-edge in a parent container + (e.g., cards). +

    + +
    +
    +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    • A fourth item
    • +
    • And a fifth one
    • +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Numbered# +
    +

    + Add the + .list-group-numbered + modifier class (and optionally use an + <ol> element) to opt into numbered list group + items. Numbers are generated via CSS (as opposed to a + <ol>s default browser styling) for better placement + inside list group items and to allow for better customization. +

    +

    + Numbers are generated by + counter-reset on the <ol>, and then + styled and placed with a ::before pseudo-element on the + <li> with counter-increment and + content. +

    +
    +
    +
      +
    1. A list item
    2. +
    3. A list item
    4. +
    5. A list item
    6. +
    +
    +
    +
      +
    1. +
      +
      Subheading
      + Content for list item +
      + 14 +
    2. +
    3. +
      +
      Subheading
      + Content for list item +
      + 14 +
    4. +
    5. +
      +
      Subheading
      + Content for list item +
      + 14 +
    6. +
    +
    +
    +
    +
    + +
    +
    +
    + Horizontal# +
    +

    + Add + .list-group-horizontal to change the layout of list group + items from vertical to horizontal across all breakpoints. + Alternatively, choose a responsive variant + .list-group-horizontal- {|md|lg|xl|xxl } + to make a list group horizontal starting at that breakpoint’s + min-width. Currently + horizontal list groups cannot be combined with flush list + groups. +

    + +

    + ProTip: Want equal-width list group items when + horizontal? Add .flex-fill to each list group item. +

    + +
    +
    +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
      +
    • An item
    • +
    • A second item
    • +
    • A third item
    • +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Contextual classes# +
    +

    + Use contextual classes to style list items with a stateful background + and color. +

    + +
    +
    +
    +
      +
    • + A simple default list group item +
    • +
    • + A simple primary list group item +
    • +
    • + A simple secondary list group item +
    • +
    • + A simple success list group item +
    • +
    • + A simple danger list group item +
    • +
    • + A simple warning list group item +
    • +
    • + A simple info list group item +
    • +
    • + A simple light list group item +
    • +
    • + A simple dark list group item +
    • +
    +
    +
    +
    +
    +
    + + + +
    +
    +
    + Checkboxes and radios# +
    +

    + Place Bootstrap’s checkboxes and radios within list group items and + customize as needed. You can use them without + <label>s, but please remember to include an + aria-label attribute and value for accessibility. +

    + +
    +
    +
    +
      +
    • + + +
    • +
    • + + +
    • +
    • + + +
    • +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/list-group/list-group.component.spec.ts b/apiferia/src/app/views/ui/list-group/list-group.component.spec.ts new file mode 100644 index 00000000..399cef0a --- /dev/null +++ b/apiferia/src/app/views/ui/list-group/list-group.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ListGroupComponent } from './list-group.component' + +describe('ListGroupComponent', () => { + let component: ListGroupComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ListGroupComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ListGroupComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/list-group/list-group.component.ts b/apiferia/src/app/views/ui/list-group/list-group.component.ts new file mode 100644 index 00000000..1e192c97 --- /dev/null +++ b/apiferia/src/app/views/ui/list-group/list-group.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-list-group', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './list-group.component.html', + styles: ``, +}) +export class ListGroupComponent {} diff --git a/apiferia/src/app/views/ui/modals/modals.component.html b/apiferia/src/app/views/ui/modals/modals.component.html new file mode 100644 index 00000000..137bde14 --- /dev/null +++ b/apiferia/src/app/views/ui/modals/modals.component.html @@ -0,0 +1,1171 @@ + + +
    +
    +
    +
    +
    + Default Modals# +
    +

    + Toggle a working modal demo by clicking the button below. It will + slide down and fade in from the top of the page. +

    +
    + + + +
    +
    +
    + +
    +
    +
    + Static Backdrop + # +
    +

    + When backdrop is set to static, the modal will not close when clicking + outside of it. Click the button below to try it. +

    +
    + + + +
    +
    +
    + +
    +
    +
    + Scrolling Long Content + # +
    +

    + When modals become too long for the user’s viewport or device, + they scroll independent of the page itself. Try the demo below to see + what we mean. +

    +
    + + + +
    + +

    + You can also create a scrollable modal that allows scroll the modal + body by adding + .modal-dialog-scrollable to .modal-dialog. +

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

    + Add + .modal-dialog-centered to .modal-dialog to + vertically center the modal. +

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

    + Specify the position for the modal. You can display modal at top, + bottom of page by specifying classes + modal-top. +

    + +
    +
    +
    + +
    + + +
    +
    +
    +
    + +
    +
    +
    + Toggle Between Modals + # +
    +

    + Toggle between multiple modals with some clever placement of the + data-bs-target and + data-bs-toggle attributes. For example, you could toggle + a password reset modal from within an already open sign in modal. + Please note multiple modals cannot be open at the same time—this method simply toggles between two separate modals. +

    + +
    + Open first modal + + +
    + + +
    +
    + +
    +
    +
    + Optional Sizes + # +
    +

    + Modals have three optional sizes, available via modifier classes to be + placed on a .modal-dialog. These sizes kick in at certain + breakpoints to avoid horizontal scrollbars on narrower viewports. +

    + +
    +
    + + + +
    + + + + +
    +
    +
    + +
    +
    +
    + Fullscreen Modal + # +
    +

    + Modals have three optional sizes, available via modifier classes to be + placed on a .modal-dialog. These sizes kick in at certain + breakpoints to avoid horizontal scrollbars on narrower viewports. +

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

    + Modals have three optional sizes, available via modifier classes to be + placed on a .modal-dialog. These sizes kick in at certain + breakpoints to avoid horizontal scrollbars on narrower viewports. +

    + +
    +
    + + + + +
    + + + + + + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/modals/modals.component.spec.ts b/apiferia/src/app/views/ui/modals/modals.component.spec.ts new file mode 100644 index 00000000..7d2f7256 --- /dev/null +++ b/apiferia/src/app/views/ui/modals/modals.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ModalsComponent } from './modals.component' + +describe('ModalsComponent', () => { + let component: ModalsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ModalsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ModalsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/modals/modals.component.ts b/apiferia/src/app/views/ui/modals/modals.component.ts new file mode 100644 index 00000000..04dff104 --- /dev/null +++ b/apiferia/src/app/views/ui/modals/modals.component.ts @@ -0,0 +1,37 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component, TemplateRef, inject } from '@angular/core' +import { + NgbModal, + NgbModalConfig, + NgbModalModule, + NgbModalOptions, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-modals', + standalone: true, + imports: [PageTitleComponent, NgbModalModule, UIExamplesListComponent], + templateUrl: './modals.component.html', + styles: ``, + providers: [NgbModalConfig, NgbModal], +}) +export class ModalsComponent { + private modalService = inject(NgbModal) + constructor(config: NgbModalConfig) { + config.backdrop = 'static' + config.keyboard = false + } + + staticBackdrop(content: TemplateRef) { + this.modalService.open(content) + } + + open(content: TemplateRef) { + this.modalService.open(content) + } + + openModal(content: TemplateRef, options: NgbModalOptions) { + this.modalService.open(content, options) + } +} diff --git a/apiferia/src/app/views/ui/offcanvas/offcanvas.component.html b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.html new file mode 100644 index 00000000..935a41e6 --- /dev/null +++ b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.html @@ -0,0 +1,658 @@ + + +
    +
    +
    +
    +
    + Default Buttons# +
    +

    + You can use a link with the href attribute, or a button. +

    +
    +
    + + Link with href + + +
    + + +
    +
    + Offcanvas +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    +
    +
    +
    + +
    +
    +
    + Static Backdrop + # +
    +

    + Scrolling the + <body> element is disabled when an offcanvas and + its backdrop are visible. Use the scroll: true attribute + to toggle <body> scrolling and + backdrop: true to toggle the backdrop. +

    +
    +
    + + + +
    + + +
    +
    + Colored with scrolling +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    + + +
    +
    + Offcanvas with backdrop +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    + + +
    +
    + Backdroped with scrolling +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    +
    +
    +
    + +
    +
    +
    + Offcanvas Position + # +
    +

    + Try the top, right, bottom and left examples out below. +

    +
      +
    • + position: 'top' places offcanvas on the top of the + viewport +
    • +
    • + position: 'right' places offcanvas on the right of the + viewport +
    • +
    • + position: 'bottom' + places offcanvas on the bottom of the viewport +
    • +
    • + position: 'end' places offcanvas on the left of the + viewport +
    • +
    +
    +
    + + + + +
    + + +
    +
    + Offcanvas +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    + + +
    +
    + Offcanvas +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    + + +
    +
    + Offcanvas +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    + + +
    +
    + Offcanvas +
    + +
    +
    +

    + Some text as placeholder. In real life you can have the elements + you have chosen. Like, text, images, lists, etc. +

    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/offcanvas/offcanvas.component.spec.ts b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.spec.ts new file mode 100644 index 00000000..6d48e8ad --- /dev/null +++ b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { OffcanvasComponent } from './offcanvas.component' + +describe('OffcanvasComponent', () => { + let component: OffcanvasComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [OffcanvasComponent], + }).compileComponents() + + fixture = TestBed.createComponent(OffcanvasComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/offcanvas/offcanvas.component.ts b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.ts new file mode 100644 index 00000000..806793eb --- /dev/null +++ b/apiferia/src/app/views/ui/offcanvas/offcanvas.component.ts @@ -0,0 +1,49 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component, TemplateRef, inject } from '@angular/core' +import { NgbDropdownModule, NgbOffcanvas } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-offcanvas', + standalone: true, + imports: [PageTitleComponent, NgbDropdownModule, UIExamplesListComponent], + templateUrl: './offcanvas.component.html', + styles: ``, +}) +export class OffcanvasComponent { + private offcanvasService = inject(NgbOffcanvas) + + openStart(content: TemplateRef) { + this.offcanvasService.dismiss() + this.offcanvasService.open(content, { + position: 'start', + }) + } + + openEnd(content: TemplateRef) { + this.offcanvasService.open(content, { position: 'end' }) + } + + openTop(content: TemplateRef) { + this.offcanvasService.open(content, { position: 'top' }) + } + + openBottom(content: TemplateRef) { + this.offcanvasService.open(content, { position: 'bottom' }) + } + + openNoBackdrop(content: TemplateRef) { + this.offcanvasService.open(content, { backdrop: false }) + } + + openDark(content: TemplateRef) { + this.offcanvasService.open(content, { + position: 'start', + panelClass: 'bg-dark text-white', + }) + } + + openScroll(scroll: TemplateRef) { + this.offcanvasService.open(scroll, { scroll: true }) + } +} diff --git a/apiferia/src/app/views/ui/pagination/pagination.component.html b/apiferia/src/app/views/ui/pagination/pagination.component.html new file mode 100644 index 00000000..a86497bd --- /dev/null +++ b/apiferia/src/app/views/ui/pagination/pagination.component.html @@ -0,0 +1,146 @@ + + +
    +
    +
    +
    +
    + Default Buttons# +
    +

    + Use the button classes on an + <a>, <button> or + <input> element. +

    +
    + + +
    +
    +
    + +
    +
    +
    + Rounded Pagination + # +
    +

    + Simple pagination inspired by Rdio, great for apps and search results. +

    +
    + + +
    +
    +
    + +
    +
    +
    + Alignment + # +
    +

    + Change the alignment of pagination components with flexbox utilitie +

    +
    + + + +
    +
    +
    + +
    +
    +
    + Sizing + # +
    +

    + Add .pagination-lg or .pagination-sm for + additional sizes. +

    + +
    + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/pagination/pagination.component.spec.ts b/apiferia/src/app/views/ui/pagination/pagination.component.spec.ts new file mode 100644 index 00000000..f3d18750 --- /dev/null +++ b/apiferia/src/app/views/ui/pagination/pagination.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PaginationComponent } from './pagination.component' + +describe('PaginationComponent', () => { + let component: PaginationComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PaginationComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PaginationComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/pagination/pagination.component.ts b/apiferia/src/app/views/ui/pagination/pagination.component.ts new file mode 100644 index 00000000..e929554d --- /dev/null +++ b/apiferia/src/app/views/ui/pagination/pagination.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbPaginationModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-pagination', + standalone: true, + imports: [PageTitleComponent, NgbPaginationModule, UIExamplesListComponent], + templateUrl: './pagination.component.html', + styles: ``, +}) +export class PaginationComponent {} diff --git a/apiferia/src/app/views/ui/placeholders/placeholders.component.html b/apiferia/src/app/views/ui/placeholders/placeholders.component.html new file mode 100644 index 00000000..26fde0a4 --- /dev/null +++ b/apiferia/src/app/views/ui/placeholders/placeholders.component.html @@ -0,0 +1,168 @@ + + +
    +
    +
    +
    +
    + Default# +
    +

    + A progress bar can be used to show a user how far along he/she is in a + process. +

    + +
    +
    +
    +
    + + Placeholder + + + +
    +
    Card title
    +

    + Some quick example text to build on the card title and make + up the bulk of the card's content. +

    + Go somewhere +
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + How it works# +
    +

    + Create placeholders with the + .placeholder class and a grid column class (e.g., + .col-6) to set the width. They can replace + the text inside an element or be added as a modifier class to an + existing component. +

    + +
    + + + +
    +
    +
    + +
    +
    +
    + Width# +
    +

    + You can change the + width through grid column classes, width utilities, or + inline styles. +

    + +
    + + + +
    +
    +
    + +
    +
    +
    + Color# +
    +

    + By default, the + placeholder uses currentColor. This can be + overridden with a custom color or utility class. +

    + +
    + + + + + + + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/placeholders/placeholders.component.spec.ts b/apiferia/src/app/views/ui/placeholders/placeholders.component.spec.ts new file mode 100644 index 00000000..8679d9cb --- /dev/null +++ b/apiferia/src/app/views/ui/placeholders/placeholders.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PlaceholdersComponent } from './placeholders.component' + +describe('PlaceholdersComponent', () => { + let component: PlaceholdersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PlaceholdersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PlaceholdersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/placeholders/placeholders.component.ts b/apiferia/src/app/views/ui/placeholders/placeholders.component.ts new file mode 100644 index 00000000..c7c18368 --- /dev/null +++ b/apiferia/src/app/views/ui/placeholders/placeholders.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-placeholders', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './placeholders.component.html', + styles: ``, +}) +export class PlaceholdersComponent {} diff --git a/apiferia/src/app/views/ui/popovers/popovers.component.html b/apiferia/src/app/views/ui/popovers/popovers.component.html new file mode 100644 index 00000000..ffc913d1 --- /dev/null +++ b/apiferia/src/app/views/ui/popovers/popovers.component.html @@ -0,0 +1,254 @@ + + +
    +
    +
    +
    +
    +
    + Live demo# +
    +

    + We use JavaScript similar to the snippet above to render the + following live popover. Titles are set via + popoverTitle and body content is set via + ngbPopover. +

    + +
    + +
    +
    +
    +
    + +
    +
    +
    + Popover Directions + # +
    +

    + Four options are available: top, right, bottom, and left aligned. +

    + +
    +
    + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + Dismiss on Next Click + # +
    +

    + Use the focus trigger to dismiss popovers on the user’s + next click of a different element than the toggle element. +

    + +
    + +
    +
    +
    + +
    +
    +
    + Hover + # +
    +

    + Use the + triggers="mouseenter:mouseleave" + trigger Hover to show popover. +

    + +
    + +
    +
    +
    + +
    +
    +
    + Custom Popovers + # +
    +

    + ou can customize the appearance of popovers using CSS variables. We + set a custom class with + popoverClass="primary-popover" + to scope our custom appearance and use it to override some of the + local CSS variables. +

    + +
    +
    + + + + + + + +
    +
    +
    +
    + +
    +
    +
    + Disabled Elements + # +
    +

    + Elements with the + disabled attribute aren’t interactive, meaning users + cannot hover or click them to trigger a popover (or tooltip). As a + workaround, you’ll want to trigger the popover from a wrapper + <div> or <span> and override the + pointer-events on the disabled element. +

    + +
    + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/popovers/popovers.component.spec.ts b/apiferia/src/app/views/ui/popovers/popovers.component.spec.ts new file mode 100644 index 00000000..47b4d298 --- /dev/null +++ b/apiferia/src/app/views/ui/popovers/popovers.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { PopoversComponent } from './popovers.component' + +describe('PopoversComponent', () => { + let component: PopoversComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [PopoversComponent], + }).compileComponents() + + fixture = TestBed.createComponent(PopoversComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/popovers/popovers.component.ts b/apiferia/src/app/views/ui/popovers/popovers.component.ts new file mode 100644 index 00000000..c4366b44 --- /dev/null +++ b/apiferia/src/app/views/ui/popovers/popovers.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbPopoverModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-popovers', + standalone: true, + imports: [PageTitleComponent, NgbPopoverModule, UIExamplesListComponent], + templateUrl: './popovers.component.html', + styles: ``, +}) +export class PopoversComponent {} diff --git a/apiferia/src/app/views/ui/progress/progress.component.html b/apiferia/src/app/views/ui/progress/progress.component.html new file mode 100644 index 00000000..63e2bc29 --- /dev/null +++ b/apiferia/src/app/views/ui/progress/progress.component.html @@ -0,0 +1,155 @@ + + +
    +
    +
    +
    +
    + How it works# +
    +

    + A progress bar can be used to show a user how far along he/she is in a + process. +

    + +
    + + + + + +
    +
    +
    + +
    +
    +
    + Backgrounds Color + # +
    +

    + Use background utility classes to change the appearance of individual + progress bars. +

    +
    + + + + + + + + + +
    +
    +
    + +
    +
    +
    + Striped Progress Bar + # +
    +

    + Add + [striped]="true" to any ngb-progressbar to + apply a stripe via CSS gradient over the progress bar’s background + color. +

    + + + + + +
    +
    + +
    +
    +
    + Height + # +
    +

    + We only set a height value on the + .progress, so if you change that value the inner + .progress-bar will automatically resize accordingly. Use + [height] inputs. +

    + +
    + + + + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/progress/progress.component.spec.ts b/apiferia/src/app/views/ui/progress/progress.component.spec.ts new file mode 100644 index 00000000..f087ab61 --- /dev/null +++ b/apiferia/src/app/views/ui/progress/progress.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ProgressComponent } from './progress.component' + +describe('ProgressComponent', () => { + let component: ProgressComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ProgressComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ProgressComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/progress/progress.component.ts b/apiferia/src/app/views/ui/progress/progress.component.ts new file mode 100644 index 00000000..4e050d15 --- /dev/null +++ b/apiferia/src/app/views/ui/progress/progress.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbProgressbarModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-progress', + standalone: true, + imports: [PageTitleComponent, NgbProgressbarModule, UIExamplesListComponent], + templateUrl: './progress.component.html', + styles: ``, +}) +export class ProgressComponent {} diff --git a/apiferia/src/app/views/ui/scrollspy/scrollspy.component.html b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.html new file mode 100644 index 00000000..6514992b --- /dev/null +++ b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.html @@ -0,0 +1,121 @@ + +
    +
    +
    +
    + +
    +

    First heading

    +

    + This is some placeholder content for the scrollspy page. Note that + as you scroll down the page, the appropriate navigation link is + highlighted. It's repeated throughout the component example. We keep + adding some more example copy here to emphasize the scrolling and + highlighting. +

    +

    Second heading

    +

    + This is some placeholder content for the scrollspy page. Note that + as you scroll down the page, the appropriate navigation link is + highlighted. It's repeated throughout the component example. We keep + adding some more example copy here to emphasize the scrolling and + highlighting. +

    +

    Third heading

    +

    + This is some placeholder content for the scrollspy page. Note that + as you scroll down the page, the appropriate navigation link is + highlighted. It's repeated throughout the component example. We keep + adding some more example copy here to emphasize the scrolling and + highlighting. +

    +

    Fourth heading

    +

    + This is some placeholder content for the scrollspy page. Note that + as you scroll down the page, the appropriate navigation link is + highlighted. It's repeated throughout the component example. We keep + adding some more example copy here to emphasize the scrolling and + highlighting. +

    +

    Fifth heading

    +

    + This is some placeholder content for the scrollspy page. Note that + as you scroll down the page, the appropriate navigation link is + highlighted. It's repeated throughout the component example. We keep + adding some more example copy here to emphasize the scrolling and + highlighting. +

    +
    +
    +
    +
    +
    diff --git a/apiferia/src/app/views/ui/scrollspy/scrollspy.component.spec.ts b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.spec.ts new file mode 100644 index 00000000..7455c043 --- /dev/null +++ b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ScrollspyComponent } from './scrollspy.component' + +describe('ScrollspyComponent', () => { + let component: ScrollspyComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ScrollspyComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ScrollspyComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/scrollspy/scrollspy.component.ts b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.ts new file mode 100644 index 00000000..b0f989b3 --- /dev/null +++ b/apiferia/src/app/views/ui/scrollspy/scrollspy.component.ts @@ -0,0 +1,15 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { Component } from '@angular/core' +import { + NgbDropdownModule, + NgbScrollSpyModule, +} from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-scrollspy', + standalone: true, + imports: [PageTitleComponent, NgbScrollSpyModule, NgbDropdownModule], + templateUrl: './scrollspy.component.html', + styles: ``, +}) +export class ScrollspyComponent {} diff --git a/apiferia/src/app/views/ui/spinners/spinners.component.html b/apiferia/src/app/views/ui/spinners/spinners.component.html new file mode 100644 index 00000000..343f0073 --- /dev/null +++ b/apiferia/src/app/views/ui/spinners/spinners.component.html @@ -0,0 +1,242 @@ + + +
    +
    +
    +
    +
    + Border Spinners# +
    +

    + Use the border spinners for a lightweight loading indicator. +

    + +
    +
    + Loading... +
    +
    +
    +
    + +
    +
    +
    + Color Spinners + # +
    +

    + You can use any of our text color utilities on the standard spinner. +

    + +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    +
    +
    + +
    +
    +
    + Growing Spinners + # +
    +

    + If you don’t fancy a border spinner, switch to the grow spinner. While + it doesn’t technically spin, it does repeatedly grow! +

    + +
    +
    + Loading... +
    +
    +
    +
    + +
    +
    +
    + Color Growing Spinners + # +
    +

    + You can use any of our text color utilities on the standard spinner. +

    + +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    +
    +
    + +
    +
    +
    + Alignment + # +
    +

    + Use flexbox utilities, float utilities, or text alignment utilities to + place spinners exactly where you need them in any situation. +

    + +
    +
    +
    + Loading... +
    +
    +
    +
    +
    + +
    +
    +
    + Size + # +
    +

    + Add .spinner-border-sm and + .spinner-border.sm-** to make a smaller spinner that can + quickly be used within other components. +

    + +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    + Loading... +
    +
    +
    +
    + +
    +
    +
    + Placement + # +
    +

    + Use flexbox utilities, float utilities, or + text alignment utilities to place spinners exactly where + you need them in any situation. +

    + +
    +
    + Loading... + +
    +
    +
    +
    + +
    +
    +
    + Buttons Spinner + # +
    +

    + Use spinners within buttons to indicate an action is currently + processing or taking place. You may also swap the text out of the + spinner element and utilize button text as needed. +

    + +
    + + +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/spinners/spinners.component.spec.ts b/apiferia/src/app/views/ui/spinners/spinners.component.spec.ts new file mode 100644 index 00000000..0dbf0ef4 --- /dev/null +++ b/apiferia/src/app/views/ui/spinners/spinners.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { SpinnersComponent } from './spinners.component' + +describe('SpinnersComponent', () => { + let component: SpinnersComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [SpinnersComponent], + }).compileComponents() + + fixture = TestBed.createComponent(SpinnersComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/spinners/spinners.component.ts b/apiferia/src/app/views/ui/spinners/spinners.component.ts new file mode 100644 index 00000000..d5fe2f36 --- /dev/null +++ b/apiferia/src/app/views/ui/spinners/spinners.component.ts @@ -0,0 +1,12 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' + +@Component({ + selector: 'app-spinners', + standalone: true, + imports: [PageTitleComponent, UIExamplesListComponent], + templateUrl: './spinners.component.html', + styles: ``, +}) +export class SpinnersComponent {} diff --git a/apiferia/src/app/views/ui/tabs/tabs.component.html b/apiferia/src/app/views/ui/tabs/tabs.component.html new file mode 100644 index 00000000..9bc9b4ba --- /dev/null +++ b/apiferia/src/app/views/ui/tabs/tabs.component.html @@ -0,0 +1,726 @@ + + +
    +
    +
    +
    +
    + Nav Tabs# +
    +

    + Use the .nav-tabs class to generate a tabbed interface. +

    + +
    +
    +
    + +
    +
    +
    + Tabs Justified + # +
    +

    + Using class .nav-justified, you can force your tabs menu + items to use the full available width. +

    + +
    + +
    +
    +
    +
    + +
    +
    +
    + Nav Pills + # +
    +

    + Use the .nav-pills class to generate a pilled interface. +

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

    + Using class .nav-justified, you can force your pills menu + items to use the full available width. +

    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + Tabs Vertical Left + # +
    +

    + You can stack your navigation by changing the flex item direction with + the .flex-column utility. +

    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    + Tabs Vertical Right + # +
    +

    + You can stack your navigation by changing the flex item direction with + the .flex-column utility. +

    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/tabs/tabs.component.spec.ts b/apiferia/src/app/views/ui/tabs/tabs.component.spec.ts new file mode 100644 index 00000000..8a9cfb78 --- /dev/null +++ b/apiferia/src/app/views/ui/tabs/tabs.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TabsComponent } from './tabs.component' + +describe('TabsComponent', () => { + let component: TabsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TabsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TabsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/tabs/tabs.component.ts b/apiferia/src/app/views/ui/tabs/tabs.component.ts new file mode 100644 index 00000000..bb222a69 --- /dev/null +++ b/apiferia/src/app/views/ui/tabs/tabs.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbNavModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-tabs', + standalone: true, + imports: [PageTitleComponent, NgbNavModule, UIExamplesListComponent], + templateUrl: './tabs.component.html', + styles: ``, +}) +export class TabsComponent {} diff --git a/apiferia/src/app/views/ui/toasts/toast.service.ts b/apiferia/src/app/views/ui/toasts/toast.service.ts new file mode 100644 index 00000000..a02b50bb --- /dev/null +++ b/apiferia/src/app/views/ui/toasts/toast.service.ts @@ -0,0 +1,24 @@ +import { Injectable, TemplateRef } from '@angular/core' +import { SafeHtml } from '@angular/platform-browser' + +export type Toast = { + template?: TemplateRef + content?: string + classname?: string + delay?: number + textOrTpl?: string + header?: SafeHtml | string +} + +@Injectable({ providedIn: 'root' }) +export class ToastService { + toasts: Toast[] = [] + + show(toast: Toast) { + this.toasts.push(toast) + } + + remove(toast: Toast) { + this.toasts = this.toasts.filter((t) => t !== toast) + } +} diff --git a/apiferia/src/app/views/ui/toasts/toasts-container.component.ts b/apiferia/src/app/views/ui/toasts/toasts-container.component.ts new file mode 100644 index 00000000..81bd9e80 --- /dev/null +++ b/apiferia/src/app/views/ui/toasts/toasts-container.component.ts @@ -0,0 +1,69 @@ +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + TemplateRef, + inject, +} from '@angular/core' +import { ToastService } from './toast.service' +import { NgbToastModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-toasts', + standalone: true, + imports: [NgbToastModule], + schemas: [CUSTOM_ELEMENTS_SCHEMA], + styles: ``, + template: ` + @for (toast of toastService.toasts; track $index) { + +
    + + just now + +
    + @if (isTemplate(toast)) { + + + + } @else { +
    {{ toast.content }}
    + } +
    + } + `, + host: { + class: 'toast-container position-fixed top-0 end-0 p-3', + style: 'z-index: 1200', + }, +}) +export class ToastsContainer { + toastService = inject(ToastService) + + isTemplate(toast: any) { + return toast.content instanceof TemplateRef + } +} diff --git a/apiferia/src/app/views/ui/toasts/toasts.component.html b/apiferia/src/app/views/ui/toasts/toasts.component.html new file mode 100644 index 00000000..a76603ef --- /dev/null +++ b/apiferia/src/app/views/ui/toasts/toasts.component.html @@ -0,0 +1,265 @@ + + +
    +
    +
    +
    +
    + Basic Examples# +
    +

    + Toasts are as flexible as you need and have very little required + markup. At a minimum, we require a single element to contain your + “toasted” content and strongly encourage a dismiss button. +

    + +
    + + + +
    + 11 mins ago +
    +
    + Hello, world! This is a toast message. +
    +
    +
    +
    +
    +
    +
    + Live example# +
    +

    + Click the button below to show a toast (positioned with our utilities + in the lower right corner) that has been hidden by default. +

    + +
    + + +
    + @if (liveToast) { + + + + 11 mins ago + + Hello, world! This is a toast message. + + } +
    +
    +
    +
    + +
    +
    +
    + Default Buttons# +
    +

    + Toasts are as flexible as you need and have very little required + markup. At a minimum, we require a single element to contain your + “toasted” content and strongly encourage a dismiss button. +

    + +
    + + +
    + +
    +
    + +
    +
    +
    + Custom Content# +
    +

    + Alternatively, you can also add additional controls and components to + toasts. +

    + +
    +
    +
    + @if (show) { + +
    + Hello, world! This is a toast message. + +
    +
    + } +
    +
    + @if (show1) { + +
    + Hello, world! This is a toast message. + +
    +
    + } +
    +
    + +
    +
    + @if (show2) { + + Hello, world! This is a toast message. +
    + + +
    +
    + } +
    +
    + @if (show3) { + +
    + Hello, world! This is a toast message. +
    + + +
    +
    +
    + } +
    +
    +
    +
    +
    +
    +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/toasts/toasts.component.spec.ts b/apiferia/src/app/views/ui/toasts/toasts.component.spec.ts new file mode 100644 index 00000000..81a40afa --- /dev/null +++ b/apiferia/src/app/views/ui/toasts/toasts.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { ToastsComponent } from './toasts.component' + +describe('ToastsComponent', () => { + let component: ToastsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ToastsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(ToastsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/toasts/toasts.component.ts b/apiferia/src/app/views/ui/toasts/toasts.component.ts new file mode 100644 index 00000000..4ac29dc0 --- /dev/null +++ b/apiferia/src/app/views/ui/toasts/toasts.component.ts @@ -0,0 +1,53 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { + CUSTOM_ELEMENTS_SCHEMA, + Component, + TemplateRef, + inject, +} from '@angular/core' +import { NgbToastModule } from '@ng-bootstrap/ng-bootstrap' +import { ToastService } from './toast.service' +import { ToastsContainer } from './toasts-container.component' + +@Component({ + selector: 'app-toastss', + standalone: true, + imports: [ + PageTitleComponent, + NgbToastModule, + UIExamplesListComponent, + ToastsContainer, + ], + templateUrl: './toasts.component.html', + styles: ``, + schemas: [CUSTOM_ELEMENTS_SCHEMA], +}) +export class ToastsComponent { + toastService = inject(ToastService) + liveToast = false + show = true + show1 = true + show2 = true + show3 = true + + close() { + this.show = false + } + + showStandard() { + this.toastService.show({ + content: 'See Just like this', + delay: 10000, + classname: 'standard', + }) + } + + showSuccess() { + this.toastService.show({ + content: 'Heads up, toasts will stack automatically', + delay: 10000, + classname: 'standard', + }) + } +} diff --git a/apiferia/src/app/views/ui/tooltips/tooltips.component.html b/apiferia/src/app/views/ui/tooltips/tooltips.component.html new file mode 100644 index 00000000..b663f9fa --- /dev/null +++ b/apiferia/src/app/views/ui/tooltips/tooltips.component.html @@ -0,0 +1,117 @@ + + + +
    +
    +
    +
    +
    + Tooltip Direction# +
    +

    + Four options are available: top, right, bottom, and left aligned. +

    +
    +
    + + + + +
    +
    +
    +
    + +
    +
    +
    + Color Tooltip + # +
    +

    + We set a custom class with ex. + tooltipClass="primary-tooltip" + to scope our background-color primary appearance and use it to + override a local CSS variable. +

    +
    +
    + + + + +
    +
    +
    +
    +
    + +
    + +
    +
    diff --git a/apiferia/src/app/views/ui/tooltips/tooltips.component.spec.ts b/apiferia/src/app/views/ui/tooltips/tooltips.component.spec.ts new file mode 100644 index 00000000..1381de69 --- /dev/null +++ b/apiferia/src/app/views/ui/tooltips/tooltips.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TooltipsComponent } from './tooltips.component' + +describe('TooltipsComponent', () => { + let component: TooltipsComponent + let fixture: ComponentFixture + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TooltipsComponent], + }).compileComponents() + + fixture = TestBed.createComponent(TooltipsComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/apiferia/src/app/views/ui/tooltips/tooltips.component.ts b/apiferia/src/app/views/ui/tooltips/tooltips.component.ts new file mode 100644 index 00000000..927a4eb4 --- /dev/null +++ b/apiferia/src/app/views/ui/tooltips/tooltips.component.ts @@ -0,0 +1,13 @@ +import { PageTitleComponent } from '@/app/components/page-title.component' +import { UIExamplesListComponent } from '@/app/components/ui-examples-list/ui-examples-list.component' +import { Component } from '@angular/core' +import { NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap' + +@Component({ + selector: 'app-tooltips', + standalone: true, + imports: [PageTitleComponent, NgbTooltipModule, UIExamplesListComponent], + templateUrl: './tooltips.component.html', + styles: ``, +}) +export class TooltipsComponent {} diff --git a/apiferia/src/app/views/ui/ui.route.ts b/apiferia/src/app/views/ui/ui.route.ts new file mode 100644 index 00000000..9a4674aa --- /dev/null +++ b/apiferia/src/app/views/ui/ui.route.ts @@ -0,0 +1,136 @@ +import { Route } from '@angular/router' +import { AccordionsComponent } from './accordions/accordions.component' +import { AlertsComponent } from './alerts/alerts.component' +import { AvatarsComponent } from './avatars/avatars.component' +import { BreadcrumbComponent } from './breadcrumb/breadcrumb.component' +import { ButtonsComponent } from './buttons/buttons.component' +import { CardsComponent } from './cards/cards.component' +import { CarouselComponent } from './carousel/carousel.component' +import { DropdownsComponent } from './dropdowns/dropdowns.component' +import { ListGroupComponent } from './list-group/list-group.component' +import { ModalsComponent } from './modals/modals.component' +import { TabsComponent } from './tabs/tabs.component' +import { OffcanvasComponent } from './offcanvas/offcanvas.component' +import { PaginationComponent } from './pagination/pagination.component' +import { PlaceholdersComponent } from './placeholders/placeholders.component' +import { PopoversComponent } from './popovers/popovers.component' +import { ProgressComponent } from './progress/progress.component' +import { ScrollspyComponent } from './scrollspy/scrollspy.component' +import { SpinnersComponent } from './spinners/spinners.component' +import { ToastsComponent } from './toasts/toasts.component' +import { TooltipsComponent } from './tooltips/tooltips.component' +import { BadgesComponent } from './badges/badges.component' +import { CollapseComponent } from './collapse/collapse.component' + +export const UI_ROUTES: Route[] = [ + { + path: 'accordions', + component: AccordionsComponent, + data: { title: 'Accordion' }, + }, + { + path: 'alerts', + component: AlertsComponent, + data: { title: 'Alerts' }, + }, + { + path: 'avatars', + component: AvatarsComponent, + data: { title: 'Avatar' }, + }, + { + path: 'badges', + component: BadgesComponent, + data: { title: 'Badges' }, + }, + { + path: 'breadcrumb', + component: BreadcrumbComponent, + data: { title: 'Breadcrumb' }, + }, + { + path: 'buttons', + component: ButtonsComponent, + data: { title: 'Buttons' }, + }, + { + path: 'cards', + component: CardsComponent, + data: { title: 'Card' }, + }, + { + path: 'carousel', + component: CarouselComponent, + data: { title: 'Carousel' }, + }, + { + path: 'collapse', + component: CollapseComponent, + data: { title: 'Collapse' }, + }, + { + path: 'dropdowns', + component: DropdownsComponent, + data: { title: 'Dropdown' }, + }, + { + path: 'list-group', + component: ListGroupComponent, + data: { title: 'List Group' }, + }, + { + path: 'modals', + component: ModalsComponent, + data: { title: 'Modal' }, + }, + { + path: 'tabs', + component: TabsComponent, + data: { title: 'Tabs' }, + }, + { + path: 'offcanvas', + component: OffcanvasComponent, + data: { title: 'Offcanvas' }, + }, + { + path: 'pagination', + component: PaginationComponent, + data: { title: 'Pagination' }, + }, + { + path: 'placeholders', + component: PlaceholdersComponent, + data: { title: 'Placeholders' }, + }, + { + path: 'popovers', + component: PopoversComponent, + data: { title: 'Popovers' }, + }, + { + path: 'progress', + component: ProgressComponent, + data: { title: 'Progress' }, + }, + { + path: 'scrollspy', + component: ScrollspyComponent, + data: { title: 'Scrollspy' }, + }, + { + path: 'spinners', + component: SpinnersComponent, + data: { title: 'Spinners' }, + }, + { + path: 'toasts', + component: ToastsComponent, + data: { title: 'Toasts' }, + }, + { + path: 'tooltips', + component: TooltipsComponent, + data: { title: 'Tooltips' }, + }, +] diff --git a/apiferia/src/app/views/vehicles/vehicles-list.component.ts b/apiferia/src/app/views/vehicles/vehicles-list.component.ts new file mode 100644 index 00000000..a7ff159d --- /dev/null +++ b/apiferia/src/app/views/vehicles/vehicles-list.component.ts @@ -0,0 +1,134 @@ +import { Component, OnInit } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { RouterModule } from '@angular/router'; +import { VehiclesService, Vehicle } from '@/app/core/services/api/vehicles.service'; + +@Component({ + selector: 'app-vehicles-list', + standalone: true, + imports: [CommonModule, RouterModule], + template: ` +
    +
    +
    +
    +
    +
    +
    +

    Vehículos

    +
    +
    + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    MarcaModeloAñoPrecioEstadoAcciones
    {{ vehicle.brand }}{{ vehicle.model }}{{ vehicle.year }}{{ vehicle.price | currency:'DOP' }} + + {{ getStatusLabel(vehicle.status) }} + + + + + +
    +
    +
    + Cargando... +
    +
    +
    +

    No hay vehículos registrados

    +
    +
    +
    +
    +
    +
    +
    + `, + styles: [` + .badge { + font-size: 0.75rem; + padding: 0.25rem 0.5rem; + } + `] +}) +export class VehiclesListComponent implements OnInit { + vehicles: Vehicle[] = []; + loading = true; + + constructor(private vehiclesService: VehiclesService) {} + + ngOnInit() { + this.loadVehicles(); + } + + loadVehicles() { + this.loading = true; + this.vehiclesService.getAll().subscribe({ + next: (data) => { + this.vehicles = data; + this.loading = false; + }, + error: (error) => { + console.error('Error loading vehicles:', error); + this.loading = false; + } + }); + } + + getStatusClass(status: string): string { + const statusClasses: { [key: string]: string } = { + 'disponible': 'bg-success', + 'en_evaluacion': 'bg-warning', + 'reservado': 'bg-info', + 'vendido_financiado': 'bg-primary', + 'vendido_cash': 'bg-secondary', + 'entregado': 'bg-dark' + }; + return statusClasses[status] || 'bg-secondary'; + } + + getStatusLabel(status: string): string { + const statusLabels: { [key: string]: string } = { + 'disponible': 'Disponible', + 'en_evaluacion': 'En Evaluación', + 'reservado': 'Reservado', + 'vendido_financiado': 'Vendido (Financiado)', + 'vendido_cash': 'Vendido (Efectivo)', + 'entregado': 'Entregado' + }; + return statusLabels[status] || status; + } +} diff --git a/apiferia/src/app/views/vehicles/vehicles.route.ts b/apiferia/src/app/views/vehicles/vehicles.route.ts new file mode 100644 index 00000000..ade7895e --- /dev/null +++ b/apiferia/src/app/views/vehicles/vehicles.route.ts @@ -0,0 +1,15 @@ +import { Route } from '@angular/router'; +import { VehiclesListComponent } from './vehicles-list.component'; + +export const VEHICLES_ROUTES: Route[] = [ + { + path: '', + component: VehiclesListComponent, + data: { title: 'Lista de Vehículos' } + }, + { + path: 'create', + component: VehiclesListComponent, // Por ahora usa el mismo, después creamos el formulario + data: { title: 'Nuevo Vehículo' } + } +]; diff --git a/apiferia/src/app/views/views.route.ts b/apiferia/src/app/views/views.route.ts new file mode 100644 index 00000000..afb85d06 --- /dev/null +++ b/apiferia/src/app/views/views.route.ts @@ -0,0 +1,87 @@ +import { Route } from '@angular/router' +import { WidgetsComponent } from './apps/widgets/widgets.component' +import { InvoiceDetailsComponent } from './invoices/invoice-details/invoice-details.component' +import { InvoicesComponent } from './invoices/invoices/invoices.component' + +export const VIEW_ROUTES: Route[] = [ + { + path: 'pages', + loadChildren: () => + import('./pages/pages.route').then((mod) => mod.PAGES_ROUTES), + }, + { + path: 'dashboard', + loadChildren: () => + import('./dashboards/dashboards.route').then( + (mod) => mod.DASHBOARD_ROUTES + ), + }, + { + path: 'ecommerce', + loadChildren: () => + import('./ecommerce/ecommerce.route').then((mod) => mod.ECOMMERCE_ROUTES), + }, + { + path: 'apps', + loadChildren: () => + import('./apps/apps.route').then((mod) => mod.APPS_ROUTES), + }, + { + path: 'calendar', + loadChildren: () => + import('./calendar/calendar.route').then((mod) => mod.CALENDAR_ROUTES), + }, + { + path: 'invoices', + component: InvoicesComponent, + data: { title: 'Invoices' }, + }, + { + path: 'invoice/:id', + component: InvoiceDetailsComponent, + data: { title: 'Invoice Details' }, + }, + { + path: 'widgets', + component: WidgetsComponent, + data: { title: 'Widgets' }, + }, + { + path: 'ui', + loadChildren: () => import('./ui/ui.route').then((mod) => mod.UI_ROUTES), + }, + { + path: 'advanced', + loadChildren: () => + import('./advanced-ui/advanced.route').then((mod) => mod.ADVANCED_ROUTES), + }, + { + path: 'charts', + loadChildren: () => + import('./charts/charts.route').then((mod) => mod.CHART_ROUTE), + }, + { + path: 'forms', + loadChildren: () => + import('./forms/forms.route').then((mod) => mod.FOMRS_ROUTE), + }, + { + path: 'tables', + loadChildren: () => + import('./tables/table.route').then((mod) => mod.TABLES_ROUTE), + }, + { + path: 'icons', + loadChildren: () => + import('./icons/icons.route').then((mod) => mod.ICONS_ROUTES), + }, + { + path: 'maps', + loadChildren: () => import('./map/map.route').then((mod) => mod.MAPS_ROUTE), + }, + { + path: 'vehicles', + loadChildren: () => + import('./vehicles/vehicles.route').then((mod) => mod.VEHICLES_ROUTES), + } +] diff --git a/apiferia/src/assets/css/animate.css b/apiferia/src/assets/css/animate.css new file mode 100644 index 00000000..5089166d --- /dev/null +++ b/apiferia/src/assets/css/animate.css @@ -0,0 +1,2205 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.5.2 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2017 Daniel Eden + */ + +.animated { + animation-duration: 1s; + animation-fill-mode: both; +} + +.animated.infinite { + animation-iteration-count: infinite; +} + +.animated.hinge { + animation-duration: 2s; +} + +.animated.flipOutX, +.animated.flipOutY, +.animated.bounceIn, +.animated.bounceOut { + animation-duration: .75s; +} + +@keyframes bounce { + from, 20%, 53%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + transform: translate3d(0,0,0); + } + + 40%, 43% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -30px, 0); + } + + 70% { + animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); + transform: translate3d(0, -15px, 0); + } + + 90% { + transform: translate3d(0,-4px,0); + } +} + +.bounce { + animation-name: bounce; + transform-origin: center bottom; +} + +@keyframes flash { + from, 50%, to { + opacity: 1; + } + + 25%, 75% { + opacity: 0; + } +} + +.flash { + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes pulse { + from { + transform: scale3d(1, 1, 1); + } + + 50% { + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.pulse { + animation-name: pulse; +} + +@keyframes rubberBand { + from { + transform: scale3d(1, 1, 1); + } + + 30% { + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + transform: scale3d(.95, 1.05, 1); + } + + 75% { + transform: scale3d(1.05, .95, 1); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + animation-name: rubberBand; +} + +@keyframes shake { + from, to { + transform: translate3d(0, 0, 0); + } + + 10%, 30%, 50%, 70%, 90% { + transform: translate3d(-10px, 0, 0); + } + + 20%, 40%, 60%, 80% { + transform: translate3d(10px, 0, 0); + } +} + +.shake { + animation-name: shake; +} + +@keyframes headShake { + 0% { + transform: translateX(0); + } + + 6.5% { + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + transform: translateX(2px) rotateY(3deg); + } + + 50% { + transform: translateX(0); + } +} + +.headShake { + animation-timing-function: ease-in-out; + animation-name: headShake; +} + +@keyframes swing { + 20% { + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + transform-origin: top center; + animation-name: swing; +} + +@keyframes tada { + from { + transform: scale3d(1, 1, 1); + } + + 10%, 20% { + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + } + + 30%, 50%, 70%, 90% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, 60%, 80% { + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + transform: scale3d(1, 1, 1); + } +} + +.tada { + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes wobble { + from { + transform: none; + } + + 15% { + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + transform: none; + } +} + +.wobble { + animation-name: wobble; +} + +@keyframes jello { + from, 11.1%, to { + transform: none; + } + + 22.2% { + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + animation-name: jello; + transform-origin: center; +} + +@keyframes bounceIn { + from, 20%, 40%, 60%, 80%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + 20% { + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + transform: scale3d(.9, .9, .9); + } + + 60% { + opacity: 1; + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + transform: scale3d(.97, .97, .97); + } + + to { + opacity: 1; + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + animation-name: bounceIn; +} + +@keyframes bounceInDown { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, 25px, 0); + } + + 75% { + transform: translate3d(0, -10px, 0); + } + + 90% { + transform: translate3d(0, 5px, 0); + } + + to { + transform: none; + } +} + +.bounceInDown { + animation-name: bounceInDown; +} + +@keyframes bounceInLeft { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + 0% { + opacity: 0; + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(25px, 0, 0); + } + + 75% { + transform: translate3d(-10px, 0, 0); + } + + 90% { + transform: translate3d(5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInLeft { + animation-name: bounceInLeft; +} + +@keyframes bounceInRight { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + transform: translate3d(-25px, 0, 0); + } + + 75% { + transform: translate3d(10px, 0, 0); + } + + 90% { + transform: translate3d(-5px, 0, 0); + } + + to { + transform: none; + } +} + +.bounceInRight { + animation-name: bounceInRight; +} + +@keyframes bounceInUp { + from, 60%, 75%, 90%, to { + animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); + } + + from { + opacity: 0; + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + 75% { + transform: translate3d(0, 10px, 0); + } + + 90% { + transform: translate3d(0, -5px, 0); + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + animation-name: bounceInUp; +} + +@keyframes bounceOut { + 20% { + transform: scale3d(.9, .9, .9); + } + + 50%, 55% { + opacity: 1; + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + transform: scale3d(.3, .3, .3); + } +} + +.bounceOut { + animation-name: bounceOut; +} + +@keyframes bounceOutDown { + 20% { + transform: translate3d(0, 10px, 0); + } + + 40%, 45% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + animation-name: bounceOutDown; +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + animation-name: bounceOutLeft; +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + animation-name: bounceOutRight; +} + +@keyframes bounceOutUp { + 20% { + transform: translate3d(0, -10px, 0); + } + + 40%, 45% { + opacity: 1; + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + animation-name: bounceOutUp; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + animation-name: fadeIn; +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDown { + animation-name: fadeInDown; +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInDownBig { + animation-name: fadeInDownBig; +} + +@keyframes fadeInLeftSmall { + from { + opacity: 0; + transform: translate3d(-100px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeftSmall { + animation-name: fadeInLeftSmall; +} + +.fadeInLeft { + animation-name: fadeInLeft; +} + +@keyframes fadeInLeft { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeft { + animation-name: fadeInLeft; +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInLeftBig { + animation-name: fadeInLeftBig; +} + +@keyframes fadeInRightSmall { + from { + opacity: 0; + transform: translate3d(100px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRightSmall { + animation-name: fadeInRightSmall; +} + +@keyframes fadeInRight { + from { + opacity: 0; + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRight { + animation-name: fadeInRight; +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInRightBig { + animation-name: fadeInRightBig; +} + +@keyframes fadeInUpSmall { + from { + opacity: 0; + transform: translate3d(0, 40px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUpSmall { + animation-name: fadeInUpSmall; +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUp { + animation-name: fadeInUp; +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + transform: none; + } +} + +.fadeInUpBig { + animation-name: fadeInUpBig; +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + animation-name: fadeOut; +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + animation-name: fadeOutDown; +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + animation-name: fadeOutDownBig; +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + animation-name: fadeOutLeft; +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + animation-name: fadeOutLeftBig; +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + animation-name: fadeOutRight; +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + animation-name: fadeOutRightBig; +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + animation-name: fadeOutUp; +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + animation-name: fadeOutUpBig; +} + +@keyframes flip { + from { + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + animation-timing-function: ease-out; + } + + 40% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + animation-timing-function: ease-out; + } + + 50% { + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + animation-timing-function: ease-in; + } + + 80% { + transform: perspective(400px) scale3d(.95, .95, .95); + animation-timing-function: ease-in; + } + + to { + transform: perspective(400px); + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + animation-name: flip; +} + +@keyframes flipInX { + from { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInX; +} + +@keyframes flipInY { + from { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + animation-timing-function: ease-in; + } + + 60% { + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipInY; +} + +@keyframes flipOutX { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@keyframes flipOutY { + from { + transform: perspective(400px); + } + + 30% { + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + animation-name: flipOutY; +} + +@keyframes lightSpeedIn { + from { + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + transform: skewX(20deg); + opacity: 1; + } + + 80% { + transform: skewX(-5deg); + opacity: 1; + } + + to { + transform: none; + opacity: 1; + } +} + +.lightSpeedIn { + animation-name: lightSpeedIn; + animation-timing-function: ease-out; +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + animation-name: lightSpeedOut; + animation-timing-function: ease-in; +} + +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + transform-origin: center; + transform: none; + opacity: 1; + } +} + +.rotateIn { + animation-name: rotateIn; +} + +@keyframes rotateInDownLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownLeft { + animation-name: rotateInDownLeft; +} + +@keyframes rotateInDownRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInDownRight { + animation-name: rotateInDownRight; +} + +@keyframes rotateInUpLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpLeft { + animation-name: rotateInUpLeft; +} + +@keyframes rotateInUpRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} + +.rotateInUpRight { + animation-name: rotateInUpRight; +} + +@keyframes rotateOut { + from { + transform-origin: center; + opacity: 1; + } + + to { + transform-origin: center; + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + animation-name: rotateOut; +} + +@keyframes rotateOutDownLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + animation-name: rotateOutDownLeft; +} + +@keyframes rotateOutDownRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + animation-name: rotateOutDownRight; +} + +@keyframes rotateOutUpLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + animation-name: rotateOutUpLeft; +} + +@keyframes rotateOutUpRight { + from { + transform-origin: right bottom; + opacity: 1; + } + + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + animation-name: rotateOutUpRight; +} + +@keyframes hinge { + 0% { + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 20%, 60% { + transform: rotate3d(0, 0, 1, 80deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + } + + 40%, 80% { + transform: rotate3d(0, 0, 1, 60deg); + transform-origin: top left; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + animation-name: hinge; +} + +@keyframes jackInTheBox { + from { + opacity: 0; + transform: scale(0.1) rotate(30deg); + transform-origin: center bottom; + } + + 50% { + transform: rotate(-10deg); + } + + 70% { + transform: rotate(3deg); + } + + to { + opacity: 1; + transform: scale(1); + } +} + +.jackInTheBox { + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollIn { + from { + opacity: 0; + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + transform: none; + } +} + +.rollIn { + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + animation-name: rollOut; +} + +@keyframes zoomIn { + from { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + animation-name: zoomIn; +} + +@keyframes zoomInDown { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInDown { + animation-name: zoomInDown; +} + +@keyframes zoomInLeft { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInLeft { + animation-name: zoomInLeft; +} + +@keyframes zoomInRight { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInRight { + animation-name: zoomInRight; +} + +@keyframes zoomInUp { + from { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + 60% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomInUp { + animation-name: zoomInUp; +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + transform: scale3d(.3, .3, .3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + animation-name: zoomOut; +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutDown { + animation-name: zoomOutDown; +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(.1) translate3d(-2000px, 0, 0); + transform-origin: left center; + } +} + +.zoomOutLeft { + animation-name: zoomOutLeft; +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + transform: scale(.1) translate3d(2000px, 0, 0); + transform-origin: right center; + } +} + +.zoomOutRight { + animation-name: zoomOutRight; +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); + } + + to { + opacity: 0; + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform-origin: center bottom; + animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); + } +} + +.zoomOutUp { + animation-name: zoomOutUp; +} + +@keyframes slideInDown { + from { + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + animation-name: slideInDown; +} + +@keyframes slideInLeft { + from { + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + animation-name: slideInLeft; +} + +@keyframes slideInRight { + from { + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + animation-name: slideInRight; +} + +@keyframes slideInUp { + from { + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + animation-name: slideInUp; +} + +@keyframes slideOutDown { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + animation-name: slideOutDown; +} + +@keyframes slideOutLeft { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + animation-name: slideOutLeft; +} + +@keyframes slideOutRight { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + animation-name: slideOutRight; +} + +@keyframes slideOutUp { + from { + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + animation-name: slideOutUp; +} + +@keyframes move2 { + 0% { + -webkit-transform: rotate( +1deg +) translate(2px,2px); + transform: rotate( +1deg +) translate(2px,2px); +} +50% { + -webkit-transform: rotate( +-1deg +) translate(-2px,-2px); + transform: rotate( +-1deg +) translate(-2px,-2px); +} +100% { + -webkit-transform: rotate( +1deg +) translate(2px,2px); + transform: rotate( +1deg +) translate(2px,2px); +} +} + +@keyframes move3 { + 0% { + -webkit-transform: translate(0); + transform: translate(0); +} +50% { + -webkit-transform: translate(30px); + transform: translate(30px); +} +100% { + -webkit-transform: translate(0); + transform: translate(0); +} +} + +@keyframes move4 { + 0% { + -webkit-transform: translate(0); + transform: translate(0); +} +50% { + -webkit-transform: translate(-30px); + transform: translate(-30px); +} +100% { + -webkit-transform: translate(0); + transform: translate(0); +} +} + +@keyframes move5 { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); +} +50% { + -webkit-transform: translateY(-30px); + transform: translateY(-30px); +} +100% { + -webkit-transform: translateY(0); + transform: translateY(0); +} +} + +@keyframes myanimation { + 0% { + width: 0; + } +} + +@keyframes myanimation { + 0% { + width: 0; + } +} +@keyframes ripple { + 70% { + box-shadow: 0 0 0 8px rgba(255, 255, 255, 0); + } + + 100% { + box-shadow: 0 0 0 0 rgba(255, 255, 255, 0); + } +} +@keyframes rotated { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); +} +100% { + -webkit-transform: rotate( +360deg); + transform: rotate( +360deg); +} +} + +.animate-rotate { + animation-name: rotateme2; + animation-duration: 15s; + animation-iteration-count: infinite; + animation-timing-function: linear; + -webkit-animation-name: rotateme2; + -webkit-animation-duration: 15s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + -moz-animation-name: rotateme2; + -moz-animation-duration: 15s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -ms-animation-name: rotateme2; + -ms-animation-duration: 15s; + -ms-animation-iteration-count: infinite; + -ms-animation-timing-function: linear; + -o-animation-name: rotateme2; + -o-animation-duration: 15s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; +} + +@keyframes rotateme2 { + + 0% { + transform: rotate(0deg); + opacity: 1; + } + + 50% { + transform: rotate(-180deg); + } + 100% { + transform: rotate(-360deg); + opacity: 1; + } +} + +.animate-up { + animation-name: float_up_down; + animation-duration: 5s; + animation-iteration-count: infinite; + animation-timing-function: linear; + -moz-animation-name: float_up_down; + -moz-animation-duration: 5s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + -ms-animation-name: float_up_down; + -ms-animation-duration: 5s; + -ms-animation-iteration-count: infinite; + -ms-animation-timing-function: linear; + -o-animation-name: float_left_right; + -o-animation-duration: 5s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; +} + +@keyframes float_up_down { + 0% { + transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + } + + 25% { + transform: translateY(-20px); + transform: translateY(-20px); + opacity: 1; + } + + 50% { + transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + } + + 75% { + transform: translateY(20px); + transform: translateY(20px); + opacity: 1; + } + + 100% { + transform: translateY(0px); + transform: translateY(0px); + opacity: 1; + } +} + + +.animate-zoom { + animation-name: zoom; + animation-duration: 3s; + animation-iteration-count: infinite; + animation-timing-function: linear; + +-webkit-animation-name: zoom; + -webkit-animation-duration: 3s; + -webkit-animation-iteration-count: infinite; + -webkit-animation-timing-function: linear; + +-moz-animation-name: zoom; + -moz-animation-duration: 3s; + -moz-animation-iteration-count: infinite; + -moz-animation-timing-function: linear; + +-ms-animation-name: zoom-fade; + -ms-animation-duration: 3s; + -ms-animation-iteration-count: infinite; + -ms-animation-timing-function: linear; + +-o-animation-name: zoom-fade; + -o-animation-duration: 3s; + -o-animation-iteration-count: infinite; + -o-animation-timing-function: linear; +} + +@keyframes zoom { +0% { + -webkit-transform: scale(0.9); + transform: scale(0.9); +} + +50% { + -webkit-transform: scale(1); + transform: scale(1); +} + +100% { + -webkit-transform: scale(0.9); + transform: scale(0.9); +} +} + +@keyframes link-icon { + 0% { + transform: translateX(0); opacity: 1; + } + 49% { + transform: translateX(20px); opacity: 0; + } + 50% { + transform: translateX(-20px); opacity: 0; + } + 100% { + transform: translateX(0); opacity: 1; + } +} + +@keyframes link-icon2 { + 0% { + transform: translateY(0); opacity: 1; + } + 49% { + transform: translateY(20px); opacity: 0; + } + 50% { + transform: translateY(-20px); opacity: 0; + } + 100% { + transform: translateY(0); opacity: 1; + } +} + +@keyframes criss-cross-left { + 0% { + left: -20px; + } + 50% { + left: 50%; + + width: 20px; + height: 20px; + } + 100% { + left: 50%; + width: 375px; + height: 375px; + + } +} + +@keyframes criss-cross-right { + 0% { + right: -20px; + } + 50% { + right: 50%; + width: 20px; + height: 20px; + + } + 100% { + right: 50%; + width: 375px; + height: 375px; + + } +} + +/* */ +@-webkit-keyframes toRightFromLeft { + 49% { + -webkit-transform: translate(100%); + } + 50% { + opacity: 0; + -webkit-transform: translate(-100%); + } + 51% { + opacity: 1; + } +} + +@-moz-keyframes toRightFromLeft { + 49% { + -moz-transform: translate(100%); + } + 50% { + opacity: 0; + -moz-transform: translate(-100%); + } + 51% { + opacity: 1; + } +} + +@keyframes toRightFromLeft { + 49% { + transform: translate(100%); + } + 50% { + opacity: 0; + transform: translate(-100%); + } + 51% { + opacity: 1; + } +} + +@-webkit-keyframes toLeftFromRight { + 49% { + -webkit-transform: translate(-100%); + } + 50% { + opacity: 0; + -webkit-transform: translate(100%); + } + 51% { + opacity: 1; + } +} + +@-moz-keyframes toLeftFromRight { + 49% { + -moz-transform: translate(-100%); + } + 50% { + opacity: 0; + -moz-transform: translate(100%); + } + 51% { + opacity: 1; + } +} + +@keyframes toLeftFromRight { + 49% { + transform: translate(-100%); + } + 50% { + opacity: 0; + transform: translate(100%); + } + 51% { + opacity: 1; + } +} + +@-webkit-keyframes toTopFromBottom { + 49% { + -webkit-transform: translateY(-100%); + } + 50% { + opacity: 0; + -webkit-transform: translateY(100%); + } + 51% { + opacity: 1; + } +} + +@-moz-keyframes toTopFromBottom { + 49% { + -moz-transform: translateY(-100%); + } + 50% { + opacity: 0; + -moz-transform: translateY(100%); + } + 51% { + opacity: 1; + } +} + +@keyframes toTopFromBottom { + 49% { + transform: translateY(-100%); + } + 50% { + opacity: 0; + transform: translateY(100%); + } + 51% { + opacity: 1; + } +} + +@-webkit-keyframes toBottomFromTop { + 49% { + -webkit-transform: translateY(100%); + } + 50% { + opacity: 0; + -webkit-transform: translateY(-100%); + } + 51% { + opacity: 1; + } +} + +@-moz-keyframes toBottomFromTop { + 49% { + -moz-transform: translateY(100%); + } + 50% { + opacity: 0; + -moz-transform: translateY(-100%); + } + 51% { + opacity: 1; + } +} + +@keyframes toBottomFromTop { + 49% { + transform: translateY(100%); + } + 50% { + opacity: 0; + transform: translateY(-100%); + } + 51% { + opacity: 1; + } +} + +.animate-new { + animation: move4 5s infinite linear; +} + +@keyframes nime1 { + 0% { + -webkit-transform: translate(0px, 0px) rotate(0deg); + transform: translate(0px, 0px) rotate(0deg); + } + 20% { + -webkit-transform: translate(20px, 1px) rotate(-36deg); + transform: translate(20px, 1px) rotate(-36deg); + } + 40% { + -webkit-transform: translate(60px, 52px) rotate(-72deg); + transform: translate(60px, 52px) rotate(-72deg); + } + 60% { + -webkit-transform: translate(53px, 100px) rotate(-108deg); + transform: translate(53px, 100px) rotate(-108deg); + } + 80% { + -webkit-transform: translate(40px, 72px) rotate(-144deg); + transform: translate(40px, 72px) rotate(-144deg); + } + 100% { + -webkit-transform: translate(0px, 0px) rotate(0deg); + transform: translate(0px, 0px) rotate(0deg); + } +} + +@keyframes nime2 { + 0% { + -webkit-transform: translate(0px, 0px) rotate(0deg); + transform: translate(0px, 0px) rotate(0deg); + } + 20% { + -webkit-transform: translate(20px, 1px) rotate(36deg); + transform: translate(20px, 1px) rotate(36deg); + } + 40% { + -webkit-transform: translate(100px, 72px) rotate(72deg); + transform: translate(100px, 72px) rotate(72deg); + } + 60% { + -webkit-transform: translate(83px, 122px) rotate(108deg); + transform: translate(83px, 122px) rotate(108deg); + } + 80% { + -webkit-transform: translate(40px, 72px) rotate(144deg); + transform: translate(40px, 72px) rotate(144deg); + } + 100% { + -webkit-transform: translate(0px, 0px) rotate(0deg); + transform: translate(0px, 0px) rotate(0deg); + } +} +@keyframes ani5 { + + 0%, + 100% { + transform: translateX(0); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + } + + 50% { + transform: translateX(10px); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + } +} +@keyframes ani4 { + 0%, + 100% { + transform: translateX(0); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + } + + 50% { + transform: translateX(-20px); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + } +} + +.ani5 { + -webkit-animation: ani5 7s infinite ease-in-out alternate; + animation: ani5 7s infinite ease-in-out alternate; +} +.ani4 { + -webkit-animation: ani4 7s infinite ease-in-out alternate; + animation: ani4 7s infinite ease-in-out alternate; +} + + + diff --git a/apiferia/src/assets/css/bootstrap.css b/apiferia/src/assets/css/bootstrap.css new file mode 100644 index 00000000..1abc4cbb --- /dev/null +++ b/apiferia/src/assets/css/bootstrap.css @@ -0,0 +1,12057 @@ +@charset "UTF-8"; +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root, +[data-bs-theme=light] { + --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-primary-text-emphasis: #052c65; + --bs-secondary-text-emphasis: #2b2f32; + --bs-success-text-emphasis: #0a3622; + --bs-info-text-emphasis: #055160; + --bs-warning-text-emphasis: #664d03; + --bs-danger-text-emphasis: #58151c; + --bs-light-text-emphasis: #495057; + --bs-dark-text-emphasis: #495057; + --bs-primary-bg-subtle: #cfe2ff; + --bs-secondary-bg-subtle: #e2e3e5; + --bs-success-bg-subtle: #d1e7dd; + --bs-info-bg-subtle: #cff4fc; + --bs-warning-bg-subtle: #fff3cd; + --bs-danger-bg-subtle: #f8d7da; + --bs-light-bg-subtle: #fcfcfd; + --bs-dark-bg-subtle: #ced4da; + --bs-primary-border-subtle: #9ec5fe; + --bs-secondary-border-subtle: #c4c8cb; + --bs-success-border-subtle: #a3cfbb; + --bs-info-border-subtle: #9eeaf9; + --bs-warning-border-subtle: #ffe69c; + --bs-danger-border-subtle: #f1aeb5; + --bs-light-border-subtle: #e9ecef; + --bs-dark-border-subtle: #adb5bd; + --bs-white-rgb: 255, 255, 255; + --bs-black-rgb: 0, 0, 0; + --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-color-rgb: 33, 37, 41; + --bs-body-bg: #fff; + --bs-body-bg-rgb: 255, 255, 255; + --bs-emphasis-color: #000; + --bs-emphasis-color-rgb: 0, 0, 0; + --bs-secondary-color: rgba(33, 37, 41, 0.75); + --bs-secondary-color-rgb: 33, 37, 41; + --bs-secondary-bg: #e9ecef; + --bs-secondary-bg-rgb: 233, 236, 239; + --bs-tertiary-color: rgba(33, 37, 41, 0.5); + --bs-tertiary-color-rgb: 33, 37, 41; + --bs-tertiary-bg: #f8f9fa; + --bs-tertiary-bg-rgb: 248, 249, 250; + --bs-heading-color: inherit; + --bs-link-color: #0d6efd; + --bs-link-color-rgb: 13, 110, 253; + --bs-link-decoration: underline; + --bs-link-hover-color: #0a58ca; + --bs-link-hover-color-rgb: 10, 88, 202; + --bs-code-color: #d63384; + --bs-highlight-color: #212529; + --bs-highlight-bg: #fff3cd; + --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-xxl: 2rem; + --bs-border-radius-2xl: var(--bs-border-radius-xxl); + --bs-border-radius-pill: 50rem; + --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); + --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); + --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); + --bs-focus-ring-width: 0.25rem; + --bs-focus-ring-opacity: 0.25; + --bs-focus-ring-color: rgba(13, 110, 253, 0.25); + --bs-form-valid-color: #198754; + --bs-form-valid-border-color: #198754; + --bs-form-invalid-color: #dc3545; + --bs-form-invalid-border-color: #dc3545; +} + +[data-bs-theme=dark] { + color-scheme: dark; + --bs-body-color: #dee2e6; + --bs-body-color-rgb: 222, 226, 230; + --bs-body-bg: #212529; + --bs-body-bg-rgb: 33, 37, 41; + --bs-emphasis-color: #fff; + --bs-emphasis-color-rgb: 255, 255, 255; + --bs-secondary-color: rgba(222, 226, 230, 0.75); + --bs-secondary-color-rgb: 222, 226, 230; + --bs-secondary-bg: #343a40; + --bs-secondary-bg-rgb: 52, 58, 64; + --bs-tertiary-color: rgba(222, 226, 230, 0.5); + --bs-tertiary-color-rgb: 222, 226, 230; + --bs-tertiary-bg: #2b3035; + --bs-tertiary-bg-rgb: 43, 48, 53; + --bs-primary-text-emphasis: #6ea8fe; + --bs-secondary-text-emphasis: #a7acb1; + --bs-success-text-emphasis: #75b798; + --bs-info-text-emphasis: #6edff6; + --bs-warning-text-emphasis: #ffda6a; + --bs-danger-text-emphasis: #ea868f; + --bs-light-text-emphasis: #f8f9fa; + --bs-dark-text-emphasis: #dee2e6; + --bs-primary-bg-subtle: #031633; + --bs-secondary-bg-subtle: #161719; + --bs-success-bg-subtle: #051b11; + --bs-info-bg-subtle: #032830; + --bs-warning-bg-subtle: #332701; + --bs-danger-bg-subtle: #2c0b0e; + --bs-light-bg-subtle: #343a40; + --bs-dark-bg-subtle: #1a1d20; + --bs-primary-border-subtle: #084298; + --bs-secondary-border-subtle: #41464b; + --bs-success-border-subtle: #0f5132; + --bs-info-border-subtle: #087990; + --bs-warning-border-subtle: #997404; + --bs-danger-border-subtle: #842029; + --bs-light-border-subtle: #495057; + --bs-dark-border-subtle: #343a40; + --bs-heading-color: inherit; + --bs-link-color: #6ea8fe; + --bs-link-hover-color: #8bb9fe; + --bs-link-color-rgb: 110, 168, 254; + --bs-link-hover-color-rgb: 139, 185, 254; + --bs-code-color: #e685b5; + --bs-highlight-color: #dee2e6; + --bs-highlight-bg: #664d03; + --bs-border-color: #495057; + --bs-border-color-translucent: rgba(255, 255, 255, 0.15); + --bs-form-valid-color: #75b798; + --bs-form-valid-border-color: #75b798; + --bs-form-invalid-color: #ea868f; + --bs-form-invalid-border-color: #ea868f; +} + +*, +*::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: var(--bs-border-width) solid; + opacity: 0.25; +} + +h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 { + margin-top: 0; + margin-bottom: 0.5rem; + font-weight: 500; + line-height: 1.2; + color: var(--bs-heading-color); +} + +h1, .h1 { + font-size: calc(1.375rem + 1.5vw); +} +@media (min-width: 1200px) { + h1, .h1 { + font-size: 2.5rem; + } +} + +h2, .h2 { + font-size: calc(1.325rem + 0.9vw); +} +@media (min-width: 1200px) { + h2, .h2 { + font-size: 2rem; + } +} + +h3, .h3 { + font-size: calc(1.3rem + 0.6vw); +} +@media (min-width: 1200px) { + h3, .h3 { + font-size: 1.75rem; + } +} + +h4, .h4 { + font-size: calc(1.275rem + 0.3vw); +} +@media (min-width: 1200px) { + h4, .h4 { + font-size: 1.5rem; + } +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .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, .small { + font-size: 0.875em; +} + +mark, .mark { + padding: 0.1875em; + color: var(--bs-highlight-color); + 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: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); + text-decoration: underline; +} +a:hover { + --bs-link-color-rgb: var(--bs-link-hover-color-rgb); +} + +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: var(--bs-secondary-color); + 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] { + -webkit-appearance: textfield; + outline-offset: -2px; +} + +/* 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; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: calc(1.625rem + 4.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-1 { + font-size: 5rem; + } +} + +.display-2 { + font-size: calc(1.575rem + 3.9vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-2 { + font-size: 4.5rem; + } +} + +.display-3 { + font-size: calc(1.525rem + 3.3vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-3 { + font-size: 4rem; + } +} + +.display-4 { + font-size: calc(1.475rem + 2.7vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-4 { + font-size: 3.5rem; + } +} + +.display-5 { + font-size: calc(1.425rem + 2.1vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-5 { + font-size: 3rem; + } +} + +.display-6 { + font-size: calc(1.375rem + 1.5vw); + font-weight: 300; + line-height: 1.2; +} +@media (min-width: 1200px) { + .display-6 { + font-size: 2.5rem; + } +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 0.875em; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 1rem; + font-size: 1.25rem; +} +.blockquote > :last-child { + margin-bottom: 0; +} + +.blockquote-footer { + margin-top: -1rem; + margin-bottom: 1rem; + font-size: 0.875em; + color: #6c757d; +} +.blockquote-footer::before { + content: "— "; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: var(--bs-body-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.5rem; + line-height: 1; +} + +.figure-caption { + font-size: 0.875em; + color: var(--bs-secondary-color); +} + +.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; + } +} +:root { + --bs-breakpoint-xs: 0; + --bs-breakpoint-sm: 576px; + --bs-breakpoint-md: 768px; + --bs-breakpoint-lg: 992px; + --bs-breakpoint-xl: 1200px; + --bs-breakpoint-xxl: 1400px; +} + +.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 > * { + 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.33333333%; +} + +.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.66666667%; +} + +.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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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.33333333%; + } + .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.66666667%; + } + .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; + } +} +.table { + --bs-table-color-type: initial; + --bs-table-bg-type: initial; + --bs-table-color-state: initial; + --bs-table-bg-state: initial; + --bs-table-color: var(--bs-emphasis-color); + --bs-table-bg: var(--bs-body-bg); + --bs-table-border-color: var(--bs-border-color); + --bs-table-accent-bg: transparent; + --bs-table-striped-color: var(--bs-emphasis-color); + --bs-table-striped-bg: rgba(var(--bs-emphasis-color-rgb), 0.05); + --bs-table-active-color: var(--bs-emphasis-color); + --bs-table-active-bg: rgba(var(--bs-emphasis-color-rgb), 0.1); + --bs-table-hover-color: var(--bs-emphasis-color); + --bs-table-hover-bg: rgba(var(--bs-emphasis-color-rgb), 0.075); + width: 100%; + margin-bottom: 1rem; + vertical-align: top; + border-color: var(--bs-table-border-color); +} +.table > :not(caption) > * > * { + padding: 0.5rem 0.5rem; + color: var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color))); + background-color: var(--bs-table-bg); + border-bottom-width: var(--bs-border-width); + box-shadow: inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg))); +} +.table > tbody { + vertical-align: inherit; +} +.table > thead { + vertical-align: bottom; +} + +.table-group-divider { + border-top: calc(var(--bs-border-width) * 2) solid currentcolor; +} + +.caption-top { + caption-side: top; +} + +.table-sm > :not(caption) > * > * { + padding: 0.25rem 0.25rem; +} + +.table-bordered > :not(caption) > * { + border-width: var(--bs-border-width) 0; +} +.table-bordered > :not(caption) > * > * { + border-width: 0 var(--bs-border-width); +} + +.table-borderless > :not(caption) > * > * { + border-bottom-width: 0; +} +.table-borderless > :not(:first-child) { + border-top-width: 0; +} + +.table-striped > tbody > tr:nth-of-type(odd) > * { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); +} + +.table-striped-columns > :not(caption) > tr > :nth-child(even) { + --bs-table-color-type: var(--bs-table-striped-color); + --bs-table-bg-type: var(--bs-table-striped-bg); +} + +.table-active { + --bs-table-color-state: var(--bs-table-active-color); + --bs-table-bg-state: var(--bs-table-active-bg); +} + +.table-hover > tbody > tr:hover > * { + --bs-table-color-state: var(--bs-table-hover-color); + --bs-table-bg-state: var(--bs-table-hover-bg); +} + +.table-primary { + --bs-table-color: #000; + --bs-table-bg: #cfe2ff; + --bs-table-border-color: #a6b5cc; + --bs-table-striped-bg: #c5d7f2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bacbe6; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfd1ec; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-secondary { + --bs-table-color: #000; + --bs-table-bg: #e2e3e5; + --bs-table-border-color: #b5b6b7; + --bs-table-striped-bg: #d7d8da; + --bs-table-striped-color: #000; + --bs-table-active-bg: #cbccce; + --bs-table-active-color: #000; + --bs-table-hover-bg: #d1d2d4; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-success { + --bs-table-color: #000; + --bs-table-bg: #d1e7dd; + --bs-table-border-color: #a7b9b1; + --bs-table-striped-bg: #c7dbd2; + --bs-table-striped-color: #000; + --bs-table-active-bg: #bcd0c7; + --bs-table-active-color: #000; + --bs-table-hover-bg: #c1d6cc; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-info { + --bs-table-color: #000; + --bs-table-bg: #cff4fc; + --bs-table-border-color: #a6c3ca; + --bs-table-striped-bg: #c5e8ef; + --bs-table-striped-color: #000; + --bs-table-active-bg: #badce3; + --bs-table-active-color: #000; + --bs-table-hover-bg: #bfe2e9; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-warning { + --bs-table-color: #000; + --bs-table-bg: #fff3cd; + --bs-table-border-color: #ccc2a4; + --bs-table-striped-bg: #f2e7c3; + --bs-table-striped-color: #000; + --bs-table-active-bg: #e6dbb9; + --bs-table-active-color: #000; + --bs-table-hover-bg: #ece1be; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-danger { + --bs-table-color: #000; + --bs-table-bg: #f8d7da; + --bs-table-border-color: #c6acae; + --bs-table-striped-bg: #eccccf; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfc2c4; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5c7ca; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-light { + --bs-table-color: #000; + --bs-table-bg: #f8f9fa; + --bs-table-border-color: #c6c7c8; + --bs-table-striped-bg: #ecedee; + --bs-table-striped-color: #000; + --bs-table-active-bg: #dfe0e1; + --bs-table-active-color: #000; + --bs-table-hover-bg: #e5e6e7; + --bs-table-hover-color: #000; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-dark { + --bs-table-color: #fff; + --bs-table-bg: #212529; + --bs-table-border-color: #4d5154; + --bs-table-striped-bg: #2c3034; + --bs-table-striped-color: #fff; + --bs-table-active-bg: #373b3e; + --bs-table-active-color: #fff; + --bs-table-hover-bg: #323539; + --bs-table-hover-color: #fff; + color: var(--bs-table-color); + border-color: var(--bs-table-border-color); +} + +.table-responsive { + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 767.98px) { + .table-responsive-md { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 991.98px) { + .table-responsive-lg { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1199.98px) { + .table-responsive-xl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +@media (max-width: 1399.98px) { + .table-responsive-xxl { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } +} +.form-label { + margin-bottom: 0.5rem; +} + +.col-form-label { + padding-top: calc(0.375rem + var(--bs-border-width)); + padding-bottom: calc(0.375rem + var(--bs-border-width)); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + var(--bs-border-width)); + padding-bottom: calc(0.5rem + var(--bs-border-width)); + font-size: 1.25rem; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + var(--bs-border-width)); + padding-bottom: calc(0.25rem + var(--bs-border-width)); + font-size: 0.875rem; +} + +.form-text { + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-secondary-color); +} + +.form-control { + display: block; + width: 100%; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--bs-body-bg); + background-clip: padding-box; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} +.form-control[type=file] { + overflow: hidden; +} +.form-control[type=file]:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control:focus { + color: var(--bs-body-color); + background-color: var(--bs-body-bg); + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-control::-webkit-date-and-time-value { + min-width: 85px; + height: 1.5em; + margin: 0; +} +.form-control::-webkit-datetime-edit { + display: block; + padding: 0; +} +.form-control::-moz-placeholder { + color: var(--bs-secondary-color); + opacity: 1; +} +.form-control::placeholder { + color: var(--bs-secondary-color); + opacity: 1; +} +.form-control:disabled { + background-color: var(--bs-secondary-bg); + opacity: 1; +} +.form-control::-webkit-file-upload-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +.form-control::file-selector-button { + padding: 0.375rem 0.75rem; + margin: -0.375rem -0.75rem; + -webkit-margin-end: 0.75rem; + margin-inline-end: 0.75rem; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); + pointer-events: none; + border-color: inherit; + border-style: solid; + border-width: 0; + border-inline-end-width: var(--bs-border-width); + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-control::-webkit-file-upload-button { + -webkit-transition: none; + transition: none; + } + .form-control::file-selector-button { + transition: none; + } +} +.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button { + background-color: var(--bs-secondary-bg); +} +.form-control:hover:not(:disabled):not([readonly])::file-selector-button { + background-color: var(--bs-secondary-bg); +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + line-height: 1.5; + color: var(--bs-body-color); + background-color: transparent; + border: solid transparent; + border-width: var(--bs-border-width) 0; +} +.form-control-plaintext:focus { + outline: 0; +} +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} +.form-control-sm::-webkit-file-upload-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} +.form-control-sm::file-selector-button { + padding: 0.25rem 0.5rem; + margin: -0.25rem -0.5rem; + -webkit-margin-end: 0.5rem; + margin-inline-end: 0.5rem; +} + +.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} +.form-control-lg::-webkit-file-upload-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} +.form-control-lg::file-selector-button { + padding: 0.5rem 1rem; + margin: -0.5rem -1rem; + -webkit-margin-end: 1rem; + margin-inline-end: 1rem; +} + +textarea.form-control { + min-height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); +} +textarea.form-control-sm { + min-height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); +} +textarea.form-control-lg { + min-height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); +} + +.form-control-color { + width: 3rem; + height: calc(1.5em + 0.75rem + calc(var(--bs-border-width) * 2)); + padding: 0.375rem; +} +.form-control-color:not(:disabled):not([readonly]) { + cursor: pointer; +} +.form-control-color::-moz-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); +} +.form-control-color::-webkit-color-swatch { + border: 0 !important; + border-radius: var(--bs-border-radius); +} +.form-control-color.form-control-sm { + height: calc(1.5em + 0.5rem + calc(var(--bs-border-width) * 2)); +} +.form-control-color.form-control-lg { + height: calc(1.5em + 1rem + calc(var(--bs-border-width) * 2)); +} + +.form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + display: block; + width: 100%; + padding: 0.375rem 2.25rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--bs-body-bg); + background-image: var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-select { + transition: none; + } +} +.form-select:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-select[multiple], .form-select[size]:not([size="1"]) { + padding-right: 0.75rem; + background-image: none; +} +.form-select:disabled { + background-color: var(--bs-secondary-bg); +} +.form-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 var(--bs-body-color); +} + +.form-select-sm { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} + +.form-select-lg { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} + +[data-bs-theme=dark] .form-select { + --bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); +} + +.form-check { + display: block; + min-height: 1.5rem; + padding-left: 1.5em; + margin-bottom: 0.125rem; +} +.form-check .form-check-input { + float: left; + margin-left: -1.5em; +} + +.form-check-reverse { + padding-right: 1.5em; + padding-left: 0; + text-align: right; +} +.form-check-reverse .form-check-input { + float: right; + margin-right: -1.5em; + margin-left: 0; +} + +.form-check-input { + --bs-form-check-bg: var(--bs-body-bg); + flex-shrink: 0; + width: 1em; + height: 1em; + margin-top: 0.25em; + vertical-align: top; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: var(--bs-form-check-bg); + background-image: var(--bs-form-check-bg-image); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: var(--bs-border-width) solid var(--bs-border-color); + -webkit-print-color-adjust: exact; + color-adjust: exact; + print-color-adjust: exact; +} +.form-check-input[type=checkbox] { + border-radius: 0.25em; +} +.form-check-input[type=radio] { + border-radius: 50%; +} +.form-check-input:active { + filter: brightness(90%); +} +.form-check-input:focus { + border-color: #86b7fe; + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-check-input:checked { + background-color: #0d6efd; + border-color: #0d6efd; +} +.form-check-input:checked[type=checkbox] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e"); +} +.form-check-input:checked[type=radio] { + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-check-input[type=checkbox]:indeterminate { + background-color: #0d6efd; + border-color: #0d6efd; + --bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"); +} +.form-check-input:disabled { + pointer-events: none; + filter: none; + opacity: 0.5; +} +.form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label { + cursor: default; + opacity: 0.5; +} + +.form-switch { + padding-left: 2.5em; +} +.form-switch .form-check-input { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); + width: 2em; + margin-left: -2.5em; + background-image: var(--bs-form-switch-bg); + background-position: left center; + border-radius: 2em; + transition: background-position 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-switch .form-check-input { + transition: none; + } +} +.form-switch .form-check-input:focus { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); +} +.form-switch .form-check-input:checked { + background-position: right center; + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} +.form-switch.form-check-reverse { + padding-right: 2.5em; + padding-left: 0; +} +.form-switch.form-check-reverse .form-check-input { + margin-right: -2.5em; + margin-left: 0; +} + +.form-check-inline { + display: inline-block; + margin-right: 1rem; +} + +.btn-check { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.btn-check[disabled] + .btn, .btn-check:disabled + .btn { + pointer-events: none; + filter: none; + opacity: 0.65; +} + +[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus) { + --bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e"); +} + +.form-range { + width: 100%; + height: 1.5rem; + padding: 0; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: transparent; +} +.form-range:focus { + outline: 0; +} +.form-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.form-range::-moz-focus-outer { + border: 0; +} +.form-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + -webkit-appearance: none; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -webkit-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-webkit-slider-thumb { + -webkit-transition: none; + transition: none; + } +} +.form-range::-webkit-slider-thumb:active { + background-color: #b6d4fe; +} +.form-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.form-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + -moz-appearance: none; + appearance: none; + background-color: #0d6efd; + border: 0; + border-radius: 1rem; + -moz-transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-range::-moz-range-thumb { + -moz-transition: none; + transition: none; + } +} +.form-range::-moz-range-thumb:active { + background-color: #b6d4fe; +} +.form-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: var(--bs-secondary-bg); + border-color: transparent; + border-radius: 1rem; +} +.form-range:disabled { + pointer-events: none; +} +.form-range:disabled::-webkit-slider-thumb { + background-color: var(--bs-secondary-color); +} +.form-range:disabled::-moz-range-thumb { + background-color: var(--bs-secondary-color); +} + +.form-floating { + position: relative; +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext, +.form-floating > .form-select { + height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + min-height: calc(3.5rem + calc(var(--bs-border-width) * 2)); + line-height: 1.25; +} +.form-floating > label { + position: absolute; + top: 0; + left: 0; + z-index: 2; + height: 100%; + padding: 1rem 0.75rem; + overflow: hidden; + text-align: start; + text-overflow: ellipsis; + white-space: nowrap; + pointer-events: none; + border: var(--bs-border-width) solid transparent; + transform-origin: 0 0; + transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .form-floating > label { + transition: none; + } +} +.form-floating > .form-control, +.form-floating > .form-control-plaintext { + padding: 1rem 0.75rem; +} +.form-floating > .form-control::-moz-placeholder, .form-floating > .form-control-plaintext::-moz-placeholder { + color: transparent; +} +.form-floating > .form-control::placeholder, +.form-floating > .form-control-plaintext::placeholder { + color: transparent; +} +.form-floating > .form-control:not(:-moz-placeholder-shown), .form-floating > .form-control-plaintext:not(:-moz-placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown), +.form-floating > .form-control-plaintext:focus, +.form-floating > .form-control-plaintext:not(:placeholder-shown) { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:-webkit-autofill, +.form-floating > .form-control-plaintext:-webkit-autofill { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-select { + padding-top: 1.625rem; + padding-bottom: 0.625rem; +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:focus ~ label, +.form-floating > .form-control:not(:placeholder-shown) ~ label, +.form-floating > .form-control-plaintext ~ label, +.form-floating > .form-select ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control:not(:-moz-placeholder-shown) ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); +} +.form-floating > .form-control:focus ~ label::after, +.form-floating > .form-control:not(:placeholder-shown) ~ label::after, +.form-floating > .form-control-plaintext ~ label::after, +.form-floating > .form-select ~ label::after { + position: absolute; + inset: 1rem 0.375rem; + z-index: -1; + height: 1.5em; + content: ""; + background-color: var(--bs-body-bg); + border-radius: var(--bs-border-radius); +} +.form-floating > .form-control:-webkit-autofill ~ label { + color: rgba(var(--bs-body-color-rgb), 0.65); + transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); +} +.form-floating > .form-control-plaintext ~ label { + border-width: var(--bs-border-width) 0; +} +.form-floating > :disabled ~ label, +.form-floating > .form-control:disabled ~ label { + color: #6c757d; +} +.form-floating > :disabled ~ label::after, +.form-floating > .form-control:disabled ~ label::after { + background-color: var(--bs-secondary-bg); +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} +.input-group > .form-control, +.input-group > .form-select, +.input-group > .form-floating { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; +} +.input-group > .form-control:focus, +.input-group > .form-select:focus, +.input-group > .form-floating:focus-within { + z-index: 5; +} +.input-group .btn { + position: relative; + z-index: 2; +} +.input-group .btn:focus { + z-index: 5; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: var(--bs-body-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-tertiary-bg); + border: var(--bs-border-width) solid var(--bs-border-color); + border-radius: var(--bs-border-radius); +} + +.input-group-lg > .form-control, +.input-group-lg > .form-select, +.input-group-lg > .input-group-text, +.input-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + border-radius: var(--bs-border-radius-lg); +} + +.input-group-sm > .form-control, +.input-group-sm > .form-select, +.input-group-sm > .input-group-text, +.input-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + border-radius: var(--bs-border-radius-sm); +} + +.input-group-lg > .form-select, +.input-group-sm > .form-select { + padding-right: 3rem; +} + +.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3), +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-control, +.input-group:not(.has-validation) > .form-floating:not(:last-child) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating), +.input-group.has-validation > .dropdown-toggle:nth-last-child(n+4), +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-control, +.input-group.has-validation > .form-floating:nth-last-child(n+3) > .form-select { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { + margin-left: calc(var(--bs-border-width) * -1); + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group > .form-floating:not(:first-child) > .form-control, +.input-group > .form-floating:not(:first-child) > .form-select { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-valid-color); +} + +.valid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-success); + border-radius: var(--bs-border-radius); +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: var(--bs-form-valid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:valid, .form-select.is-valid { + border-color: var(--bs-form-valid-border-color); +} +.was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:valid:focus, .form-select.is-valid:focus { + border-color: var(--bs-form-valid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} + +.was-validated .form-control-color:valid, .form-control-color.is-valid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:valid, .form-check-input.is-valid { + border-color: var(--bs-form-valid-border-color); +} +.was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { + background-color: var(--bs-form-valid-color); +} +.was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-success-rgb), 0.25); +} +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: var(--bs-form-valid-color); +} + +.form-check-inline .form-check-input ~ .valid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):valid, .input-group > .form-control:not(:focus).is-valid, +.was-validated .input-group > .form-select:not(:focus):valid, +.input-group > .form-select:not(:focus).is-valid, +.was-validated .input-group > .form-floating:not(:focus-within):valid, +.input-group > .form-floating:not(:focus-within).is-valid { + z-index: 3; +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 0.875em; + color: var(--bs-form-invalid-color); +} + +.invalid-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: 0.1rem; + font-size: 0.875rem; + color: #fff; + background-color: var(--bs-danger); + border-radius: var(--bs-border-radius); +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: var(--bs-form-invalid-border-color); + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .form-select:invalid, .form-select.is-invalid { + border-color: var(--bs-form-invalid-border-color); +} +.was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { + --bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); + padding-right: 4.125rem; + background-position: right 0.75rem center, center right 2.25rem; + background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} +.was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { + border-color: var(--bs-form-invalid-border-color); + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} + +.was-validated .form-control-color:invalid, .form-control-color.is-invalid { + width: calc(3rem + calc(1.5em + 0.75rem)); +} + +.was-validated .form-check-input:invalid, .form-check-input.is-invalid { + border-color: var(--bs-form-invalid-border-color); +} +.was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { + background-color: var(--bs-form-invalid-color); +} +.was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { + box-shadow: 0 0 0 0.25rem rgba(var(--bs-danger-rgb), 0.25); +} +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: var(--bs-form-invalid-color); +} + +.form-check-inline .form-check-input ~ .invalid-feedback { + margin-left: 0.5em; +} + +.was-validated .input-group > .form-control:not(:focus):invalid, .input-group > .form-control:not(:focus).is-invalid, +.was-validated .input-group > .form-select:not(:focus):invalid, +.input-group > .form-select:not(:focus).is-invalid, +.was-validated .input-group > .form-floating:not(:focus-within):invalid, +.input-group > .form-floating:not(:focus-within).is-invalid { + z-index: 4; +} + +.btn { + --bs-btn-padding-x: 0.75rem; + --bs-btn-padding-y: 0.375rem; + --bs-btn-font-family: ; + --bs-btn-font-size: 1rem; + --bs-btn-font-weight: 400; + --bs-btn-line-height: 1.5; + --bs-btn-color: var(--bs-body-color); + --bs-btn-bg: transparent; + --bs-btn-border-width: var(--bs-border-width); + --bs-btn-border-color: transparent; + --bs-btn-border-radius: var(--bs-border-radius); + --bs-btn-hover-border-color: transparent; + --bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); + --bs-btn-disabled-opacity: 0.65; + --bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5); + display: inline-block; + padding: var(--bs-btn-padding-y) var(--bs-btn-padding-x); + font-family: var(--bs-btn-font-family); + font-size: var(--bs-btn-font-size); + font-weight: var(--bs-btn-font-weight); + line-height: var(--bs-btn-line-height); + color: var(--bs-btn-color); + text-align: center; + text-decoration: none; + vertical-align: middle; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + border: var(--bs-btn-border-width) solid var(--bs-btn-border-color); + border-radius: var(--bs-btn-border-radius); + background-color: var(--bs-btn-bg); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} +.btn:hover { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); +} +.btn-check + .btn:hover { + color: var(--bs-btn-color); + background-color: var(--bs-btn-bg); + border-color: var(--bs-btn-border-color); +} +.btn:focus-visible { + color: var(--bs-btn-hover-color); + background-color: var(--bs-btn-hover-bg); + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:focus-visible + .btn { + border-color: var(--bs-btn-hover-border-color); + outline: 0; + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked + .btn, :not(.btn-check) + .btn:active, .btn:first-child:active, .btn.active, .btn.show { + color: var(--bs-btn-active-color); + background-color: var(--bs-btn-active-bg); + border-color: var(--bs-btn-active-border-color); +} +.btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn-check:checked:focus-visible + .btn { + box-shadow: var(--bs-btn-focus-box-shadow); +} +.btn:disabled, .btn.disabled, fieldset:disabled .btn { + color: var(--bs-btn-disabled-color); + pointer-events: none; + background-color: var(--bs-btn-disabled-bg); + border-color: var(--bs-btn-disabled-border-color); + opacity: var(--bs-btn-disabled-opacity); +} + +.btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0b5ed7; + --bs-btn-hover-border-color: #0a58ca; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0a58ca; + --bs-btn-active-border-color: #0a53be; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #0d6efd; + --bs-btn-disabled-border-color: #0d6efd; +} + +.btn-secondary { + --bs-btn-color: #fff; + --bs-btn-bg: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #5c636a; + --bs-btn-hover-border-color: #565e64; + --bs-btn-focus-shadow-rgb: 130, 138, 145; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #565e64; + --bs-btn-active-border-color: #51585e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #6c757d; + --bs-btn-disabled-border-color: #6c757d; +} + +.btn-success { + --bs-btn-color: #fff; + --bs-btn-bg: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #157347; + --bs-btn-hover-border-color: #146c43; + --bs-btn-focus-shadow-rgb: 60, 153, 110; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #146c43; + --bs-btn-active-border-color: #13653f; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #198754; + --bs-btn-disabled-border-color: #198754; +} + +.btn-info { + --bs-btn-color: #000; + --bs-btn-bg: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #31d2f2; + --bs-btn-hover-border-color: #25cff2; + --bs-btn-focus-shadow-rgb: 11, 172, 204; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #3dd5f3; + --bs-btn-active-border-color: #25cff2; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #0dcaf0; + --bs-btn-disabled-border-color: #0dcaf0; +} + +.btn-warning { + --bs-btn-color: #000; + --bs-btn-bg: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffca2c; + --bs-btn-hover-border-color: #ffc720; + --bs-btn-focus-shadow-rgb: 217, 164, 6; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffcd39; + --bs-btn-active-border-color: #ffc720; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #ffc107; + --bs-btn-disabled-border-color: #ffc107; +} + +.btn-danger { + --bs-btn-color: #fff; + --bs-btn-bg: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #bb2d3b; + --bs-btn-hover-border-color: #b02a37; + --bs-btn-focus-shadow-rgb: 225, 83, 97; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #b02a37; + --bs-btn-active-border-color: #a52834; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #dc3545; + --bs-btn-disabled-border-color: #dc3545; +} + +.btn-light { + --bs-btn-color: #000; + --bs-btn-bg: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #d3d4d5; + --bs-btn-hover-border-color: #c6c7c8; + --bs-btn-focus-shadow-rgb: 211, 212, 213; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #c6c7c8; + --bs-btn-active-border-color: #babbbc; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #000; + --bs-btn-disabled-bg: #f8f9fa; + --bs-btn-disabled-border-color: #f8f9fa; +} + +.btn-dark { + --bs-btn-color: #fff; + --bs-btn-bg: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #424649; + --bs-btn-hover-border-color: #373b3e; + --bs-btn-focus-shadow-rgb: 66, 70, 73; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #4d5154; + --bs-btn-active-border-color: #373b3e; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: #212529; + --bs-btn-disabled-border-color: #212529; +} + +.btn-outline-primary { + --bs-btn-color: #0d6efd; + --bs-btn-border-color: #0d6efd; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0d6efd; + --bs-btn-hover-border-color: #0d6efd; + --bs-btn-focus-shadow-rgb: 13, 110, 253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #0d6efd; + --bs-btn-active-border-color: #0d6efd; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0d6efd; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0d6efd; + --bs-gradient: none; +} + +.btn-outline-secondary { + --bs-btn-color: #6c757d; + --bs-btn-border-color: #6c757d; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #6c757d; + --bs-btn-hover-border-color: #6c757d; + --bs-btn-focus-shadow-rgb: 108, 117, 125; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #6c757d; + --bs-btn-active-border-color: #6c757d; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #6c757d; + --bs-gradient: none; +} + +.btn-outline-success { + --bs-btn-color: #198754; + --bs-btn-border-color: #198754; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #198754; + --bs-btn-hover-border-color: #198754; + --bs-btn-focus-shadow-rgb: 25, 135, 84; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #198754; + --bs-btn-active-border-color: #198754; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #198754; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #198754; + --bs-gradient: none; +} + +.btn-outline-info { + --bs-btn-color: #0dcaf0; + --bs-btn-border-color: #0dcaf0; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #0dcaf0; + --bs-btn-hover-border-color: #0dcaf0; + --bs-btn-focus-shadow-rgb: 13, 202, 240; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #0dcaf0; + --bs-btn-active-border-color: #0dcaf0; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #0dcaf0; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #0dcaf0; + --bs-gradient: none; +} + +.btn-outline-warning { + --bs-btn-color: #ffc107; + --bs-btn-border-color: #ffc107; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #ffc107; + --bs-btn-hover-border-color: #ffc107; + --bs-btn-focus-shadow-rgb: 255, 193, 7; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #ffc107; + --bs-btn-active-border-color: #ffc107; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #ffc107; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #ffc107; + --bs-gradient: none; +} + +.btn-outline-danger { + --bs-btn-color: #dc3545; + --bs-btn-border-color: #dc3545; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #dc3545; + --bs-btn-hover-border-color: #dc3545; + --bs-btn-focus-shadow-rgb: 220, 53, 69; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #dc3545; + --bs-btn-active-border-color: #dc3545; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #dc3545; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #dc3545; + --bs-gradient: none; +} + +.btn-outline-light { + --bs-btn-color: #f8f9fa; + --bs-btn-border-color: #f8f9fa; + --bs-btn-hover-color: #000; + --bs-btn-hover-bg: #f8f9fa; + --bs-btn-hover-border-color: #f8f9fa; + --bs-btn-focus-shadow-rgb: 248, 249, 250; + --bs-btn-active-color: #000; + --bs-btn-active-bg: #f8f9fa; + --bs-btn-active-border-color: #f8f9fa; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #f8f9fa; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #f8f9fa; + --bs-gradient: none; +} + +.btn-outline-dark { + --bs-btn-color: #212529; + --bs-btn-border-color: #212529; + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #212529; + --bs-btn-hover-border-color: #212529; + --bs-btn-focus-shadow-rgb: 33, 37, 41; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: #212529; + --bs-btn-active-border-color: #212529; + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #212529; + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: #212529; + --bs-gradient: none; +} + +.btn-link { + --bs-btn-font-weight: 400; + --bs-btn-color: var(--bs-link-color); + --bs-btn-bg: transparent; + --bs-btn-border-color: transparent; + --bs-btn-hover-color: var(--bs-link-hover-color); + --bs-btn-hover-border-color: transparent; + --bs-btn-active-color: var(--bs-link-hover-color); + --bs-btn-active-border-color: transparent; + --bs-btn-disabled-color: #6c757d; + --bs-btn-disabled-border-color: transparent; + --bs-btn-box-shadow: 0 0 0 #000; + --bs-btn-focus-shadow-rgb: 49, 132, 253; + text-decoration: underline; +} +.btn-link:focus-visible { + color: var(--bs-btn-color); +} +.btn-link:hover { + color: var(--bs-btn-hover-color); +} + +.btn-lg, .btn-group-lg > .btn { + --bs-btn-padding-y: 0.5rem; + --bs-btn-padding-x: 1rem; + --bs-btn-font-size: 1.25rem; + --bs-btn-border-radius: var(--bs-border-radius-lg); +} + +.btn-sm, .btn-group-sm > .btn { + --bs-btn-padding-y: 0.25rem; + --bs-btn-padding-x: 0.5rem; + --bs-btn-font-size: 0.875rem; + --bs-btn-border-radius: var(--bs-border-radius-sm); +} + +.fade { + transition: opacity 0.15s linear; +} +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} +.collapsing.collapse-horizontal { + width: 0; + height: auto; + transition: width 0.35s ease; +} +@media (prefers-reduced-motion: reduce) { + .collapsing.collapse-horizontal { + transition: none; + } +} + +.dropup, +.dropend, +.dropdown, +.dropstart, +.dropup-center, +.dropdown-center { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + --bs-dropdown-zindex: 1000; + --bs-dropdown-min-width: 10rem; + --bs-dropdown-padding-x: 0; + --bs-dropdown-padding-y: 0.5rem; + --bs-dropdown-spacer: 0.125rem; + --bs-dropdown-font-size: 1rem; + --bs-dropdown-color: var(--bs-body-color); + --bs-dropdown-bg: var(--bs-body-bg); + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-border-radius: var(--bs-border-radius); + --bs-dropdown-border-width: var(--bs-border-width); + --bs-dropdown-inner-border-radius: calc(var(--bs-border-radius) - var(--bs-border-width)); + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-divider-margin-y: 0.5rem; + --bs-dropdown-box-shadow: var(--bs-box-shadow); + --bs-dropdown-link-color: var(--bs-body-color); + --bs-dropdown-link-hover-color: var(--bs-body-color); + --bs-dropdown-link-hover-bg: var(--bs-tertiary-bg); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: var(--bs-tertiary-color); + --bs-dropdown-item-padding-x: 1rem; + --bs-dropdown-item-padding-y: 0.25rem; + --bs-dropdown-header-color: #6c757d; + --bs-dropdown-header-padding-x: 1rem; + --bs-dropdown-header-padding-y: 0.5rem; + position: absolute; + z-index: var(--bs-dropdown-zindex); + display: none; + min-width: var(--bs-dropdown-min-width); + padding: var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x); + margin: 0; + font-size: var(--bs-dropdown-font-size); + color: var(--bs-dropdown-color); + text-align: left; + list-style: none; + background-color: var(--bs-dropdown-bg); + background-clip: padding-box; + border: var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color); + border-radius: var(--bs-dropdown-border-radius); +} +.dropdown-menu[data-bs-popper] { + top: 100%; + left: 0; + margin-top: var(--bs-dropdown-spacer); +} + +.dropdown-menu-start { + --bs-position: start; +} +.dropdown-menu-start[data-bs-popper] { + right: auto; + left: 0; +} + +.dropdown-menu-end { + --bs-position: end; +} +.dropdown-menu-end[data-bs-popper] { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-start { + --bs-position: start; + } + .dropdown-menu-sm-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-sm-end { + --bs-position: end; + } + .dropdown-menu-sm-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 768px) { + .dropdown-menu-md-start { + --bs-position: start; + } + .dropdown-menu-md-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-md-end { + --bs-position: end; + } + .dropdown-menu-md-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 992px) { + .dropdown-menu-lg-start { + --bs-position: start; + } + .dropdown-menu-lg-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-lg-end { + --bs-position: end; + } + .dropdown-menu-lg-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1200px) { + .dropdown-menu-xl-start { + --bs-position: start; + } + .dropdown-menu-xl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xl-end { + --bs-position: end; + } + .dropdown-menu-xl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +@media (min-width: 1400px) { + .dropdown-menu-xxl-start { + --bs-position: start; + } + .dropdown-menu-xxl-start[data-bs-popper] { + right: auto; + left: 0; + } + .dropdown-menu-xxl-end { + --bs-position: end; + } + .dropdown-menu-xxl-end[data-bs-popper] { + right: 0; + left: auto; + } +} +.dropup .dropdown-menu[data-bs-popper] { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: var(--bs-dropdown-spacer); +} +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropend .dropdown-menu[data-bs-popper] { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: var(--bs-dropdown-spacer); +} +.dropend .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} +.dropend .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropend .dropdown-toggle::after { + vertical-align: 0; +} + +.dropstart .dropdown-menu[data-bs-popper] { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: var(--bs-dropdown-spacer); +} +.dropstart .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} +.dropstart .dropdown-toggle::after { + display: none; +} +.dropstart .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} +.dropstart .dropdown-toggle:empty::after { + margin-left: 0; +} +.dropstart .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-divider { + height: 0; + margin: var(--bs-dropdown-divider-margin-y) 0; + overflow: hidden; + border-top: 1px solid var(--bs-dropdown-divider-bg); + opacity: 1; +} + +.dropdown-item { + display: block; + width: 100%; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + clear: both; + font-weight: 400; + color: var(--bs-dropdown-link-color); + text-align: inherit; + text-decoration: none; + white-space: nowrap; + background-color: transparent; + border: 0; + border-radius: var(--bs-dropdown-item-border-radius, 0); +} +.dropdown-item:hover, .dropdown-item:focus { + color: var(--bs-dropdown-link-hover-color); + background-color: var(--bs-dropdown-link-hover-bg); +} +.dropdown-item.active, .dropdown-item:active { + color: var(--bs-dropdown-link-active-color); + text-decoration: none; + background-color: var(--bs-dropdown-link-active-bg); +} +.dropdown-item.disabled, .dropdown-item:disabled { + color: var(--bs-dropdown-link-disabled-color); + pointer-events: none; + background-color: transparent; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x); + margin-bottom: 0; + font-size: 0.875rem; + color: var(--bs-dropdown-header-color); + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x); + color: var(--bs-dropdown-link-color); +} + +.dropdown-menu-dark { + --bs-dropdown-color: #dee2e6; + --bs-dropdown-bg: #343a40; + --bs-dropdown-border-color: var(--bs-border-color-translucent); + --bs-dropdown-box-shadow: ; + --bs-dropdown-link-color: #dee2e6; + --bs-dropdown-link-hover-color: #fff; + --bs-dropdown-divider-bg: var(--bs-border-color-translucent); + --bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15); + --bs-dropdown-link-active-color: #fff; + --bs-dropdown-link-active-bg: #0d6efd; + --bs-dropdown-link-disabled-color: #adb5bd; + --bs-dropdown-header-color: #adb5bd; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} +.btn-group > .btn-check:checked + .btn, +.btn-group > .btn-check:focus + .btn, +.btn-group > .btn:hover, +.btn-group > .btn:focus, +.btn-group > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn-check:checked + .btn, +.btn-group-vertical > .btn-check:focus + .btn, +.btn-group-vertical > .btn:hover, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} +.btn-toolbar .input-group { + width: auto; +} + +.btn-group { + border-radius: var(--bs-border-radius); +} +.btn-group > :not(.btn-check:first-child) + .btn, +.btn-group > .btn-group:not(:first-child) { + margin-left: calc(var(--bs-border-width) * -1); +} +.btn-group > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group > .btn.dropdown-toggle-split:first-child, +.btn-group > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:nth-child(n+3), +.btn-group > :not(.btn-check) + .btn, +.btn-group > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} +.dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { + margin-left: 0; +} +.dropstart .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: calc(var(--bs-border-width) * -1); +} +.btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), +.btn-group-vertical > .btn-group:not(:last-child) > .btn { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn ~ .btn, +.btn-group-vertical > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav { + --bs-nav-link-padding-x: 1rem; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-link-color); + --bs-nav-link-hover-color: var(--bs-link-hover-color); + --bs-nav-link-disabled-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x); + font-size: var(--bs-nav-link-font-size); + font-weight: var(--bs-nav-link-font-weight); + color: var(--bs-nav-link-color); + text-decoration: none; + background: none; + border: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .nav-link { + transition: none; + } +} +.nav-link:hover, .nav-link:focus { + color: var(--bs-nav-link-hover-color); +} +.nav-link:focus-visible { + outline: 0; + box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); +} +.nav-link.disabled, .nav-link:disabled { + color: var(--bs-nav-link-disabled-color); + pointer-events: none; + cursor: default; +} + +.nav-tabs { + --bs-nav-tabs-border-width: var(--bs-border-width); + --bs-nav-tabs-border-color: var(--bs-border-color); + --bs-nav-tabs-border-radius: var(--bs-border-radius); + --bs-nav-tabs-link-hover-border-color: var(--bs-secondary-bg) var(--bs-secondary-bg) var(--bs-border-color); + --bs-nav-tabs-link-active-color: var(--bs-emphasis-color); + --bs-nav-tabs-link-active-bg: var(--bs-body-bg); + --bs-nav-tabs-link-active-border-color: var(--bs-border-color) var(--bs-border-color) var(--bs-body-bg); + border-bottom: var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color); +} +.nav-tabs .nav-link { + margin-bottom: calc(-1 * var(--bs-nav-tabs-border-width)); + border: var(--bs-nav-tabs-border-width) solid transparent; + border-top-left-radius: var(--bs-nav-tabs-border-radius); + border-top-right-radius: var(--bs-nav-tabs-border-radius); +} +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + isolation: isolate; + border-color: var(--bs-nav-tabs-link-hover-border-color); +} +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: var(--bs-nav-tabs-link-active-color); + background-color: var(--bs-nav-tabs-link-active-bg); + border-color: var(--bs-nav-tabs-link-active-border-color); +} +.nav-tabs .dropdown-menu { + margin-top: calc(-1 * var(--bs-nav-tabs-border-width)); + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.nav-pills { + --bs-nav-pills-border-radius: var(--bs-border-radius); + --bs-nav-pills-link-active-color: #fff; + --bs-nav-pills-link-active-bg: #0d6efd; +} +.nav-pills .nav-link { + border-radius: var(--bs-nav-pills-border-radius); +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: var(--bs-nav-pills-link-active-color); + background-color: var(--bs-nav-pills-link-active-bg); +} + +.nav-underline { + --bs-nav-underline-gap: 1rem; + --bs-nav-underline-border-width: 0.125rem; + --bs-nav-underline-link-active-color: var(--bs-emphasis-color); + gap: var(--bs-nav-underline-gap); +} +.nav-underline .nav-link { + padding-right: 0; + padding-left: 0; + border-bottom: var(--bs-nav-underline-border-width) solid transparent; +} +.nav-underline .nav-link:hover, .nav-underline .nav-link:focus { + border-bottom-color: currentcolor; +} +.nav-underline .nav-link.active, +.nav-underline .show > .nav-link { + font-weight: 700; + color: var(--bs-nav-underline-link-active-color); + border-bottom-color: currentcolor; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.nav-fill .nav-item .nav-link, +.nav-justified .nav-item .nav-link { + width: 100%; +} + +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} + +.navbar { + --bs-navbar-padding-x: 0; + --bs-navbar-padding-y: 0.5rem; + --bs-navbar-color: rgba(var(--bs-emphasis-color-rgb), 0.65); + --bs-navbar-hover-color: rgba(var(--bs-emphasis-color-rgb), 0.8); + --bs-navbar-disabled-color: rgba(var(--bs-emphasis-color-rgb), 0.3); + --bs-navbar-active-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-padding-y: 0.3125rem; + --bs-navbar-brand-margin-end: 1rem; + --bs-navbar-brand-font-size: 1.25rem; + --bs-navbar-brand-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-brand-hover-color: rgba(var(--bs-emphasis-color-rgb), 1); + --bs-navbar-nav-link-padding-x: 0.5rem; + --bs-navbar-toggler-padding-y: 0.25rem; + --bs-navbar-toggler-padding-x: 0.75rem; + --bs-navbar-toggler-font-size: 1.25rem; + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%2833, 37, 41, 0.75%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); + --bs-navbar-toggler-border-color: rgba(var(--bs-emphasis-color-rgb), 0.15); + --bs-navbar-toggler-border-radius: var(--bs-border-radius); + --bs-navbar-toggler-focus-width: 0.25rem; + --bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out; + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: var(--bs-navbar-padding-y) var(--bs-navbar-padding-x); +} +.navbar > .container, +.navbar > .container-fluid, +.navbar > .container-sm, +.navbar > .container-md, +.navbar > .container-lg, +.navbar > .container-xl, +.navbar > .container-xxl { + display: flex; + flex-wrap: inherit; + align-items: center; + justify-content: space-between; +} +.navbar-brand { + padding-top: var(--bs-navbar-brand-padding-y); + padding-bottom: var(--bs-navbar-brand-padding-y); + margin-right: var(--bs-navbar-brand-margin-end); + font-size: var(--bs-navbar-brand-font-size); + color: var(--bs-navbar-brand-color); + text-decoration: none; + white-space: nowrap; +} +.navbar-brand:hover, .navbar-brand:focus { + color: var(--bs-navbar-brand-hover-color); +} + +.navbar-nav { + --bs-nav-link-padding-x: 0; + --bs-nav-link-padding-y: 0.5rem; + --bs-nav-link-font-weight: ; + --bs-nav-link-color: var(--bs-navbar-color); + --bs-nav-link-hover-color: var(--bs-navbar-hover-color); + --bs-nav-link-disabled-color: var(--bs-navbar-disabled-color); + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.navbar-nav .nav-link.active, .navbar-nav .nav-link.show { + color: var(--bs-navbar-active-color); +} +.navbar-nav .dropdown-menu { + position: static; +} + +.navbar-text { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + color: var(--bs-navbar-color); +} +.navbar-text a, +.navbar-text a:hover, +.navbar-text a:focus { + color: var(--bs-navbar-active-color); +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x); + font-size: var(--bs-navbar-toggler-font-size); + line-height: 1; + color: var(--bs-navbar-color); + background-color: transparent; + border: var(--bs-border-width) solid var(--bs-navbar-toggler-border-color); + border-radius: var(--bs-navbar-toggler-border-radius); + transition: var(--bs-navbar-toggler-transition); +} +@media (prefers-reduced-motion: reduce) { + .navbar-toggler { + transition: none; + } +} +.navbar-toggler:hover { + text-decoration: none; +} +.navbar-toggler:focus { + text-decoration: none; + outline: 0; + box-shadow: 0 0 0 var(--bs-navbar-toggler-focus-width); +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + background-image: var(--bs-navbar-toggler-icon-bg); + background-repeat: no-repeat; + background-position: center; + background-size: 100%; +} + +.navbar-nav-scroll { + max-height: var(--bs-scroll-height, 75vh); + overflow-y: auto; +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-sm .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } + .navbar-expand-sm .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-sm .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-sm .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 768px) { + .navbar-expand-md { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-md .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } + .navbar-expand-md .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-md .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-md .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 992px) { + .navbar-expand-lg { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-lg .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } + .navbar-expand-lg .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-lg .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-lg .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } + .navbar-expand-xl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +@media (min-width: 1400px) { + .navbar-expand-xxl { + flex-wrap: nowrap; + justify-content: flex-start; + } + .navbar-expand-xxl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xxl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xxl .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); + } + .navbar-expand-xxl .navbar-nav-scroll { + overflow: visible; + } + .navbar-expand-xxl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xxl .navbar-toggler { + display: none; + } + .navbar-expand-xxl .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-header { + display: none; + } + .navbar-expand-xxl .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + } +} +.navbar-expand { + flex-wrap: nowrap; + justify-content: flex-start; +} +.navbar-expand .navbar-nav { + flex-direction: row; +} +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} +.navbar-expand .navbar-nav .nav-link { + padding-right: var(--bs-navbar-nav-link-padding-x); + padding-left: var(--bs-navbar-nav-link-padding-x); +} +.navbar-expand .navbar-nav-scroll { + overflow: visible; +} +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} +.navbar-expand .navbar-toggler { + display: none; +} +.navbar-expand .offcanvas { + position: static; + z-index: auto; + flex-grow: 1; + width: auto !important; + height: auto !important; + visibility: visible !important; + background-color: transparent !important; + border: 0 !important; + transform: none !important; + transition: none; +} +.navbar-expand .offcanvas .offcanvas-header { + display: none; +} +.navbar-expand .offcanvas .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; +} + +.navbar-dark, +.navbar[data-bs-theme=dark] { + --bs-navbar-color: rgba(255, 255, 255, 0.55); + --bs-navbar-hover-color: rgba(255, 255, 255, 0.75); + --bs-navbar-disabled-color: rgba(255, 255, 255, 0.25); + --bs-navbar-active-color: #fff; + --bs-navbar-brand-color: #fff; + --bs-navbar-brand-hover-color: #fff; + --bs-navbar-toggler-border-color: rgba(255, 255, 255, 0.1); + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +[data-bs-theme=dark] .navbar-toggler-icon { + --bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.card { + --bs-card-spacer-y: 1rem; + --bs-card-spacer-x: 1rem; + --bs-card-title-spacer-y: 0.5rem; + --bs-card-title-color: ; + --bs-card-subtitle-color: ; + --bs-card-border-width: var(--bs-border-width); + --bs-card-border-color: var(--bs-border-color-translucent); + --bs-card-border-radius: var(--bs-border-radius); + --bs-card-box-shadow: ; + --bs-card-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-card-cap-padding-y: 0.5rem; + --bs-card-cap-padding-x: 1rem; + --bs-card-cap-bg: rgba(var(--bs-body-color-rgb), 0.03); + --bs-card-cap-color: ; + --bs-card-height: ; + --bs-card-color: ; + --bs-card-bg: var(--bs-body-bg); + --bs-card-img-overlay-padding: 1rem; + --bs-card-group-margin: 0.75rem; + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + height: var(--bs-card-height); + color: var(--bs-body-color); + word-wrap: break-word; + background-color: var(--bs-card-bg); + background-clip: border-box; + border: var(--bs-card-border-width) solid var(--bs-card-border-color); + border-radius: var(--bs-card-border-radius); +} +.card > hr { + margin-right: 0; + margin-left: 0; +} +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} +.card > .list-group:first-child { + border-top-width: 0; + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} +.card > .list-group:last-child { + border-bottom-width: 0; + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + padding: var(--bs-card-spacer-y) var(--bs-card-spacer-x); + color: var(--bs-card-color); +} + +.card-title { + margin-bottom: var(--bs-card-title-spacer-y); + color: var(--bs-card-title-color); +} + +.card-subtitle { + margin-top: calc(-0.5 * var(--bs-card-title-spacer-y)); + margin-bottom: 0; + color: var(--bs-card-subtitle-color); +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link + .card-link { + margin-left: var(--bs-card-spacer-x); +} + +.card-header { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + margin-bottom: 0; + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-bottom: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-header:first-child { + border-radius: var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0; +} + +.card-footer { + padding: var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x); + color: var(--bs-card-cap-color); + background-color: var(--bs-card-cap-bg); + border-top: var(--bs-card-border-width) solid var(--bs-card-border-color); +} +.card-footer:last-child { + border-radius: 0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius); +} + +.card-header-tabs { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-bottom: calc(-1 * var(--bs-card-cap-padding-y)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); + border-bottom: 0; +} +.card-header-tabs .nav-link.active { + background-color: var(--bs-card-bg); + border-bottom-color: var(--bs-card-bg); +} + +.card-header-pills { + margin-right: calc(-0.5 * var(--bs-card-cap-padding-x)); + margin-left: calc(-0.5 * var(--bs-card-cap-padding-x)); +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: var(--bs-card-img-overlay-padding); + border-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-top, +.card-img-bottom { + width: 100%; +} + +.card-img, +.card-img-top { + border-top-left-radius: var(--bs-card-inner-border-radius); + border-top-right-radius: var(--bs-card-inner-border-radius); +} + +.card-img, +.card-img-bottom { + border-bottom-right-radius: var(--bs-card-inner-border-radius); + border-bottom-left-radius: var(--bs-card-inner-border-radius); +} + +.card-group > .card { + margin-bottom: var(--bs-card-group-margin); +} +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } + .card-group > .card:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-top, + .card-group > .card:not(:last-child) .card-header { + border-top-right-radius: 0; + } + .card-group > .card:not(:last-child) .card-img-bottom, + .card-group > .card:not(:last-child) .card-footer { + border-bottom-right-radius: 0; + } + .card-group > .card:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-top, + .card-group > .card:not(:first-child) .card-header { + border-top-left-radius: 0; + } + .card-group > .card:not(:first-child) .card-img-bottom, + .card-group > .card:not(:first-child) .card-footer { + border-bottom-left-radius: 0; + } +} + +.accordion { + --bs-accordion-color: var(--bs-body-color); + --bs-accordion-bg: var(--bs-body-bg); + --bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; + --bs-accordion-border-color: var(--bs-border-color); + --bs-accordion-border-width: var(--bs-border-width); + --bs-accordion-border-radius: var(--bs-border-radius); + --bs-accordion-inner-border-radius: calc(var(--bs-border-radius) - (var(--bs-border-width))); + --bs-accordion-btn-padding-x: 1.25rem; + --bs-accordion-btn-padding-y: 1rem; + --bs-accordion-btn-color: var(--bs-body-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-icon-width: 1.25rem; + --bs-accordion-btn-icon-transform: rotate(-180deg); + --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out; + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23052c65' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e"); + --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-accordion-body-padding-x: 1.25rem; + --bs-accordion-body-padding-y: 1rem; + --bs-accordion-active-color: var(--bs-primary-text-emphasis); + --bs-accordion-active-bg: var(--bs-primary-bg-subtle); +} + +.accordion-button { + position: relative; + display: flex; + align-items: center; + width: 100%; + padding: var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x); + font-size: 1rem; + color: var(--bs-accordion-btn-color); + text-align: left; + background-color: var(--bs-accordion-btn-bg); + border: 0; + border-radius: 0; + overflow-anchor: none; + transition: var(--bs-accordion-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button { + transition: none; + } +} +.accordion-button:not(.collapsed) { + color: var(--bs-accordion-active-color); + background-color: var(--bs-accordion-active-bg); + box-shadow: inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color); +} +.accordion-button:not(.collapsed)::after { + background-image: var(--bs-accordion-btn-active-icon); + transform: var(--bs-accordion-btn-icon-transform); +} +.accordion-button::after { + flex-shrink: 0; + width: var(--bs-accordion-btn-icon-width); + height: var(--bs-accordion-btn-icon-width); + margin-left: auto; + content: ""; + background-image: var(--bs-accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--bs-accordion-btn-icon-width); + transition: var(--bs-accordion-btn-icon-transition); +} +@media (prefers-reduced-motion: reduce) { + .accordion-button::after { + transition: none; + } +} +.accordion-button:hover { + z-index: 2; +} +.accordion-button:focus { + z-index: 3; + outline: 0; + box-shadow: var(--bs-accordion-btn-focus-box-shadow); +} + +.accordion-header { + margin-bottom: 0; +} + +.accordion-item { + color: var(--bs-accordion-color); + background-color: var(--bs-accordion-bg); + border: var(--bs-accordion-border-width) solid var(--bs-accordion-border-color); +} +.accordion-item:first-of-type { + border-top-left-radius: var(--bs-accordion-border-radius); + border-top-right-radius: var(--bs-accordion-border-radius); +} +.accordion-item:first-of-type > .accordion-header .accordion-button { + border-top-left-radius: var(--bs-accordion-inner-border-radius); + border-top-right-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:not(:first-of-type) { + border-top: 0; +} +.accordion-item:last-of-type { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} +.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed { + border-bottom-right-radius: var(--bs-accordion-inner-border-radius); + border-bottom-left-radius: var(--bs-accordion-inner-border-radius); +} +.accordion-item:last-of-type > .accordion-collapse { + border-bottom-right-radius: var(--bs-accordion-border-radius); + border-bottom-left-radius: var(--bs-accordion-border-radius); +} + +.accordion-body { + padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x); +} + +.accordion-flush > .accordion-item { + border-right: 0; + border-left: 0; + border-radius: 0; +} +.accordion-flush > .accordion-item:first-child { + border-top: 0; +} +.accordion-flush > .accordion-item:last-child { + border-bottom: 0; +} +.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed { + border-radius: 0; +} +.accordion-flush > .accordion-item > .accordion-collapse { + border-radius: 0; +} + +[data-bs-theme=dark] .accordion-button::after { + --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); + --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%236ea8fe'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); +} + +.breadcrumb { + --bs-breadcrumb-padding-x: 0; + --bs-breadcrumb-padding-y: 0; + --bs-breadcrumb-margin-bottom: 1rem; + --bs-breadcrumb-bg: ; + --bs-breadcrumb-border-radius: ; + --bs-breadcrumb-divider-color: var(--bs-secondary-color); + --bs-breadcrumb-item-padding-x: 0.5rem; + --bs-breadcrumb-item-active-color: var(--bs-secondary-color); + display: flex; + flex-wrap: wrap; + padding: var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x); + margin-bottom: var(--bs-breadcrumb-margin-bottom); + font-size: var(--bs-breadcrumb-font-size); + list-style: none; + background-color: var(--bs-breadcrumb-bg); + border-radius: var(--bs-breadcrumb-border-radius); +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: var(--bs-breadcrumb-item-padding-x); +} +.breadcrumb-item + .breadcrumb-item::before { + float: left; + padding-right: var(--bs-breadcrumb-item-padding-x); + color: var(--bs-breadcrumb-divider-color); + content: var(--bs-breadcrumb-divider, "https://themesflat.co/") /* rtl: var(--bs-breadcrumb-divider, "/") */; +} +.breadcrumb-item.active { + color: var(--bs-breadcrumb-item-active-color); +} + +.pagination { + --bs-pagination-padding-x: 0.75rem; + --bs-pagination-padding-y: 0.375rem; + --bs-pagination-font-size: 1rem; + --bs-pagination-color: var(--bs-link-color); + --bs-pagination-bg: var(--bs-body-bg); + --bs-pagination-border-width: var(--bs-border-width); + --bs-pagination-border-color: var(--bs-border-color); + --bs-pagination-border-radius: var(--bs-border-radius); + --bs-pagination-hover-color: var(--bs-link-hover-color); + --bs-pagination-hover-bg: var(--bs-tertiary-bg); + --bs-pagination-hover-border-color: var(--bs-border-color); + --bs-pagination-focus-color: var(--bs-link-hover-color); + --bs-pagination-focus-bg: var(--bs-secondary-bg); + --bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-pagination-active-color: #fff; + --bs-pagination-active-bg: #0d6efd; + --bs-pagination-active-border-color: #0d6efd; + --bs-pagination-disabled-color: var(--bs-secondary-color); + --bs-pagination-disabled-bg: var(--bs-secondary-bg); + --bs-pagination-disabled-border-color: var(--bs-border-color); + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + padding: var(--bs-pagination-padding-y) var(--bs-pagination-padding-x); + font-size: var(--bs-pagination-font-size); + color: var(--bs-pagination-color); + text-decoration: none; + background-color: var(--bs-pagination-bg); + border: var(--bs-pagination-border-width) solid var(--bs-pagination-border-color); + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .page-link { + transition: none; + } +} +.page-link:hover { + z-index: 2; + color: var(--bs-pagination-hover-color); + background-color: var(--bs-pagination-hover-bg); + border-color: var(--bs-pagination-hover-border-color); +} +.page-link:focus { + z-index: 3; + color: var(--bs-pagination-focus-color); + background-color: var(--bs-pagination-focus-bg); + outline: 0; + box-shadow: var(--bs-pagination-focus-box-shadow); +} +.page-link.active, .active > .page-link { + z-index: 3; + color: var(--bs-pagination-active-color); + background-color: var(--bs-pagination-active-bg); + border-color: var(--bs-pagination-active-border-color); +} +.page-link.disabled, .disabled > .page-link { + color: var(--bs-pagination-disabled-color); + pointer-events: none; + background-color: var(--bs-pagination-disabled-bg); + border-color: var(--bs-pagination-disabled-border-color); +} + +.page-item:not(:first-child) .page-link { + margin-left: calc(var(--bs-border-width) * -1); +} +.page-item:first-child .page-link { + border-top-left-radius: var(--bs-pagination-border-radius); + border-bottom-left-radius: var(--bs-pagination-border-radius); +} +.page-item:last-child .page-link { + border-top-right-radius: var(--bs-pagination-border-radius); + border-bottom-right-radius: var(--bs-pagination-border-radius); +} + +.pagination-lg { + --bs-pagination-padding-x: 1.5rem; + --bs-pagination-padding-y: 0.75rem; + --bs-pagination-font-size: 1.25rem; + --bs-pagination-border-radius: var(--bs-border-radius-lg); +} + +.pagination-sm { + --bs-pagination-padding-x: 0.5rem; + --bs-pagination-padding-y: 0.25rem; + --bs-pagination-font-size: 0.875rem; + --bs-pagination-border-radius: var(--bs-border-radius-sm); +} + +.badge { + --bs-badge-padding-x: 0.65em; + --bs-badge-padding-y: 0.35em; + --bs-badge-font-size: 0.75em; + --bs-badge-font-weight: 700; + --bs-badge-color: #fff; + --bs-badge-border-radius: var(--bs-border-radius); + display: inline-block; + padding: var(--bs-badge-padding-y) var(--bs-badge-padding-x); + font-size: var(--bs-badge-font-size); + font-weight: var(--bs-badge-font-weight); + line-height: 1; + color: var(--bs-badge-color); + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: var(--bs-badge-border-radius); +} +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.alert { + --bs-alert-bg: transparent; + --bs-alert-padding-x: 1rem; + --bs-alert-padding-y: 1rem; + --bs-alert-margin-bottom: 1rem; + --bs-alert-color: inherit; + --bs-alert-border-color: transparent; + --bs-alert-border: var(--bs-border-width) solid var(--bs-alert-border-color); + --bs-alert-border-radius: var(--bs-border-radius); + --bs-alert-link-color: inherit; + position: relative; + padding: var(--bs-alert-padding-y) var(--bs-alert-padding-x); + margin-bottom: var(--bs-alert-margin-bottom); + color: var(--bs-alert-color); + background-color: var(--bs-alert-bg); + border: var(--bs-alert-border); + border-radius: var(--bs-alert-border-radius); +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; + color: var(--bs-alert-link-color); +} + +.alert-dismissible { + padding-right: 3rem; +} +.alert-dismissible .btn-close { + position: absolute; + top: 0; + right: 0; + z-index: 2; + padding: 1.25rem 1rem; +} + +.alert-primary { + --bs-alert-color: var(--bs-primary-text-emphasis); + --bs-alert-bg: var(--bs-primary-bg-subtle); + --bs-alert-border-color: var(--bs-primary-border-subtle); + --bs-alert-link-color: var(--bs-primary-text-emphasis); +} + +.alert-secondary { + --bs-alert-color: var(--bs-secondary-text-emphasis); + --bs-alert-bg: var(--bs-secondary-bg-subtle); + --bs-alert-border-color: var(--bs-secondary-border-subtle); + --bs-alert-link-color: var(--bs-secondary-text-emphasis); +} + +.alert-success { + --bs-alert-color: var(--bs-success-text-emphasis); + --bs-alert-bg: var(--bs-success-bg-subtle); + --bs-alert-border-color: var(--bs-success-border-subtle); + --bs-alert-link-color: var(--bs-success-text-emphasis); +} + +.alert-info { + --bs-alert-color: var(--bs-info-text-emphasis); + --bs-alert-bg: var(--bs-info-bg-subtle); + --bs-alert-border-color: var(--bs-info-border-subtle); + --bs-alert-link-color: var(--bs-info-text-emphasis); +} + +.alert-warning { + --bs-alert-color: var(--bs-warning-text-emphasis); + --bs-alert-bg: var(--bs-warning-bg-subtle); + --bs-alert-border-color: var(--bs-warning-border-subtle); + --bs-alert-link-color: var(--bs-warning-text-emphasis); +} + +.alert-danger { + --bs-alert-color: var(--bs-danger-text-emphasis); + --bs-alert-bg: var(--bs-danger-bg-subtle); + --bs-alert-border-color: var(--bs-danger-border-subtle); + --bs-alert-link-color: var(--bs-danger-text-emphasis); +} + +.alert-light { + --bs-alert-color: var(--bs-light-text-emphasis); + --bs-alert-bg: var(--bs-light-bg-subtle); + --bs-alert-border-color: var(--bs-light-border-subtle); + --bs-alert-link-color: var(--bs-light-text-emphasis); +} + +.alert-dark { + --bs-alert-color: var(--bs-dark-text-emphasis); + --bs-alert-bg: var(--bs-dark-bg-subtle); + --bs-alert-border-color: var(--bs-dark-border-subtle); + --bs-alert-link-color: var(--bs-dark-text-emphasis); +} + +@keyframes progress-bar-stripes { + 0% { + background-position-x: 1rem; + } +} +.progress, +.progress-stacked { + --bs-progress-height: 1rem; + --bs-progress-font-size: 0.75rem; + --bs-progress-bg: var(--bs-secondary-bg); + --bs-progress-border-radius: var(--bs-border-radius); + --bs-progress-box-shadow: var(--bs-box-shadow-inset); + --bs-progress-bar-color: #fff; + --bs-progress-bar-bg: #0d6efd; + --bs-progress-bar-transition: width 0.6s ease; + display: flex; + height: var(--bs-progress-height); + overflow: hidden; + font-size: var(--bs-progress-font-size); + background-color: var(--bs-progress-bg); + border-radius: var(--bs-progress-border-radius); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: var(--bs-progress-bar-color); + text-align: center; + white-space: nowrap; + background-color: var(--bs-progress-bar-bg); + transition: var(--bs-progress-bar-transition); +} +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: var(--bs-progress-height) var(--bs-progress-height); +} + +.progress-stacked > .progress { + overflow: visible; +} + +.progress-stacked > .progress > .progress-bar { + width: 100%; +} + +.progress-bar-animated { + animation: 1s linear infinite progress-bar-stripes; +} +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; + } +} + +.list-group { + --bs-list-group-color: var(--bs-body-color); + --bs-list-group-bg: var(--bs-body-bg); + --bs-list-group-border-color: var(--bs-border-color); + --bs-list-group-border-width: var(--bs-border-width); + --bs-list-group-border-radius: var(--bs-border-radius); + --bs-list-group-item-padding-x: 1rem; + --bs-list-group-item-padding-y: 0.5rem; + --bs-list-group-action-color: var(--bs-secondary-color); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-tertiary-bg); + --bs-list-group-action-active-color: var(--bs-body-color); + --bs-list-group-action-active-bg: var(--bs-secondary-bg); + --bs-list-group-disabled-color: var(--bs-secondary-color); + --bs-list-group-disabled-bg: var(--bs-body-bg); + --bs-list-group-active-color: #fff; + --bs-list-group-active-bg: #0d6efd; + --bs-list-group-active-border-color: #0d6efd; + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + border-radius: var(--bs-list-group-border-radius); +} + +.list-group-numbered { + list-style-type: none; + counter-reset: section; +} +.list-group-numbered > .list-group-item::before { + content: counters(section, ".") ". "; + counter-increment: section; +} + +.list-group-item-action { + width: 100%; + color: var(--bs-list-group-action-color); + text-align: inherit; +} +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: var(--bs-list-group-action-hover-color); + text-decoration: none; + background-color: var(--bs-list-group-action-hover-bg); +} +.list-group-item-action:active { + color: var(--bs-list-group-action-active-color); + background-color: var(--bs-list-group-action-active-bg); +} + +.list-group-item { + position: relative; + display: block; + padding: var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x); + color: var(--bs-list-group-color); + text-decoration: none; + background-color: var(--bs-list-group-bg); + border: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color); +} +.list-group-item:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} +.list-group-item:last-child { + border-bottom-right-radius: inherit; + border-bottom-left-radius: inherit; +} +.list-group-item.disabled, .list-group-item:disabled { + color: var(--bs-list-group-disabled-color); + pointer-events: none; + background-color: var(--bs-list-group-disabled-bg); +} +.list-group-item.active { + z-index: 2; + color: var(--bs-list-group-active-color); + background-color: var(--bs-list-group-active-bg); + border-color: var(--bs-list-group-active-border-color); +} +.list-group-item + .list-group-item { + border-top-width: 0; +} +.list-group-item + .list-group-item.active { + margin-top: calc(-1 * var(--bs-list-group-border-width)); + border-top-width: var(--bs-list-group-border-width); +} + +.list-group-horizontal { + flex-direction: row; +} +.list-group-horizontal > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; +} +.list-group-horizontal > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; +} +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; +} +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-sm > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-md > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-lg > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +@media (min-width: 1400px) { + .list-group-horizontal-xxl { + flex-direction: row; + } + .list-group-horizontal-xxl > .list-group-item:first-child:not(:last-child) { + border-bottom-left-radius: var(--bs-list-group-border-radius); + border-top-right-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item:last-child:not(:first-child) { + border-top-right-radius: var(--bs-list-group-border-radius); + border-bottom-left-radius: 0; + } + .list-group-horizontal-xxl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item { + border-top-width: var(--bs-list-group-border-width); + border-left-width: 0; + } + .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { + margin-left: calc(-1 * var(--bs-list-group-border-width)); + border-left-width: var(--bs-list-group-border-width); + } +} +.list-group-flush { + border-radius: 0; +} +.list-group-flush > .list-group-item { + border-width: 0 0 var(--bs-list-group-border-width); +} +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + --bs-list-group-color: var(--bs-primary-text-emphasis); + --bs-list-group-bg: var(--bs-primary-bg-subtle); + --bs-list-group-border-color: var(--bs-primary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-primary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-primary-border-subtle); + --bs-list-group-active-color: var(--bs-primary-bg-subtle); + --bs-list-group-active-bg: var(--bs-primary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-primary-text-emphasis); +} + +.list-group-item-secondary { + --bs-list-group-color: var(--bs-secondary-text-emphasis); + --bs-list-group-bg: var(--bs-secondary-bg-subtle); + --bs-list-group-border-color: var(--bs-secondary-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-secondary-border-subtle); + --bs-list-group-active-color: var(--bs-secondary-bg-subtle); + --bs-list-group-active-bg: var(--bs-secondary-text-emphasis); + --bs-list-group-active-border-color: var(--bs-secondary-text-emphasis); +} + +.list-group-item-success { + --bs-list-group-color: var(--bs-success-text-emphasis); + --bs-list-group-bg: var(--bs-success-bg-subtle); + --bs-list-group-border-color: var(--bs-success-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-success-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-success-border-subtle); + --bs-list-group-active-color: var(--bs-success-bg-subtle); + --bs-list-group-active-bg: var(--bs-success-text-emphasis); + --bs-list-group-active-border-color: var(--bs-success-text-emphasis); +} + +.list-group-item-info { + --bs-list-group-color: var(--bs-info-text-emphasis); + --bs-list-group-bg: var(--bs-info-bg-subtle); + --bs-list-group-border-color: var(--bs-info-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-info-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-info-border-subtle); + --bs-list-group-active-color: var(--bs-info-bg-subtle); + --bs-list-group-active-bg: var(--bs-info-text-emphasis); + --bs-list-group-active-border-color: var(--bs-info-text-emphasis); +} + +.list-group-item-warning { + --bs-list-group-color: var(--bs-warning-text-emphasis); + --bs-list-group-bg: var(--bs-warning-bg-subtle); + --bs-list-group-border-color: var(--bs-warning-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-warning-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-warning-border-subtle); + --bs-list-group-active-color: var(--bs-warning-bg-subtle); + --bs-list-group-active-bg: var(--bs-warning-text-emphasis); + --bs-list-group-active-border-color: var(--bs-warning-text-emphasis); +} + +.list-group-item-danger { + --bs-list-group-color: var(--bs-danger-text-emphasis); + --bs-list-group-bg: var(--bs-danger-bg-subtle); + --bs-list-group-border-color: var(--bs-danger-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-danger-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-danger-border-subtle); + --bs-list-group-active-color: var(--bs-danger-bg-subtle); + --bs-list-group-active-bg: var(--bs-danger-text-emphasis); + --bs-list-group-active-border-color: var(--bs-danger-text-emphasis); +} + +.list-group-item-light { + --bs-list-group-color: var(--bs-light-text-emphasis); + --bs-list-group-bg: var(--bs-light-bg-subtle); + --bs-list-group-border-color: var(--bs-light-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-light-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-light-border-subtle); + --bs-list-group-active-color: var(--bs-light-bg-subtle); + --bs-list-group-active-bg: var(--bs-light-text-emphasis); + --bs-list-group-active-border-color: var(--bs-light-text-emphasis); +} + +.list-group-item-dark { + --bs-list-group-color: var(--bs-dark-text-emphasis); + --bs-list-group-bg: var(--bs-dark-bg-subtle); + --bs-list-group-border-color: var(--bs-dark-border-subtle); + --bs-list-group-action-hover-color: var(--bs-emphasis-color); + --bs-list-group-action-hover-bg: var(--bs-dark-border-subtle); + --bs-list-group-action-active-color: var(--bs-emphasis-color); + --bs-list-group-action-active-bg: var(--bs-dark-border-subtle); + --bs-list-group-active-color: var(--bs-dark-bg-subtle); + --bs-list-group-active-bg: var(--bs-dark-text-emphasis); + --bs-list-group-active-border-color: var(--bs-dark-text-emphasis); +} + +.btn-close { + --bs-btn-close-color: #000; + --bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e"); + --bs-btn-close-opacity: 0.5; + --bs-btn-close-hover-opacity: 0.75; + --bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); + --bs-btn-close-focus-opacity: 1; + --bs-btn-close-disabled-opacity: 0.25; + --bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); + box-sizing: content-box; + width: 1em; + height: 1em; + padding: 0.25em 0.25em; + color: var(--bs-btn-close-color); + background: transparent var(--bs-btn-close-bg) center/1em auto no-repeat; + border: 0; + border-radius: 0.375rem; + opacity: var(--bs-btn-close-opacity); +} +.btn-close:hover { + color: var(--bs-btn-close-color); + text-decoration: none; + opacity: var(--bs-btn-close-hover-opacity); +} +.btn-close:focus { + outline: 0; + box-shadow: var(--bs-btn-close-focus-shadow); + opacity: var(--bs-btn-close-focus-opacity); +} +.btn-close:disabled, .btn-close.disabled { + pointer-events: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + opacity: var(--bs-btn-close-disabled-opacity); +} + +.btn-close-white { + filter: var(--bs-btn-close-white-filter); +} + +[data-bs-theme=dark] .btn-close { + filter: var(--bs-btn-close-white-filter); +} + +.toast { + --bs-toast-zindex: 1090; + --bs-toast-padding-x: 0.75rem; + --bs-toast-padding-y: 0.5rem; + --bs-toast-spacing: 1.5rem; + --bs-toast-max-width: 350px; + --bs-toast-font-size: 0.875rem; + --bs-toast-color: ; + --bs-toast-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-border-width: var(--bs-border-width); + --bs-toast-border-color: var(--bs-border-color-translucent); + --bs-toast-border-radius: var(--bs-border-radius); + --bs-toast-box-shadow: var(--bs-box-shadow); + --bs-toast-header-color: var(--bs-secondary-color); + --bs-toast-header-bg: rgba(var(--bs-body-bg-rgb), 0.85); + --bs-toast-header-border-color: var(--bs-border-color-translucent); + width: var(--bs-toast-max-width); + max-width: 100%; + font-size: var(--bs-toast-font-size); + color: var(--bs-toast-color); + pointer-events: auto; + background-color: var(--bs-toast-bg); + background-clip: padding-box; + border: var(--bs-toast-border-width) solid var(--bs-toast-border-color); + box-shadow: var(--bs-toast-box-shadow); + border-radius: var(--bs-toast-border-radius); +} +.toast.showing { + opacity: 0; +} +.toast:not(.show) { + display: none; +} + +.toast-container { + --bs-toast-zindex: 1090; + position: absolute; + z-index: var(--bs-toast-zindex); + width: -webkit-max-content; + width: -moz-max-content; + width: max-content; + max-width: 100%; + pointer-events: none; +} +.toast-container > :not(:last-child) { + margin-bottom: var(--bs-toast-spacing); +} + +.toast-header { + display: flex; + align-items: center; + padding: var(--bs-toast-padding-y) var(--bs-toast-padding-x); + color: var(--bs-toast-header-color); + background-color: var(--bs-toast-header-bg); + background-clip: padding-box; + border-bottom: var(--bs-toast-border-width) solid var(--bs-toast-header-border-color); + border-top-left-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); + border-top-right-radius: calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width)); +} +.toast-header .btn-close { + margin-right: calc(-0.5 * var(--bs-toast-padding-x)); + margin-left: var(--bs-toast-padding-x); +} + +.toast-body { + padding: var(--bs-toast-padding-x); + word-wrap: break-word; +} + +.modal { + --bs-modal-zindex: 1055; + --bs-modal-width: 500px; + --bs-modal-padding: 1rem; + --bs-modal-margin: 0.5rem; + --bs-modal-color: ; + --bs-modal-bg: var(--bs-body-bg); + --bs-modal-border-color: var(--bs-border-color-translucent); + --bs-modal-border-width: var(--bs-border-width); + --bs-modal-border-radius: var(--bs-border-radius-lg); + --bs-modal-box-shadow: var(--bs-box-shadow-sm); + --bs-modal-inner-border-radius: calc(var(--bs-border-radius-lg) - (var(--bs-border-width))); + --bs-modal-header-padding-x: 1rem; + --bs-modal-header-padding-y: 1rem; + --bs-modal-header-padding: 1rem 1rem; + --bs-modal-header-border-color: var(--bs-border-color); + --bs-modal-header-border-width: var(--bs-border-width); + --bs-modal-title-line-height: 1.5; + --bs-modal-footer-gap: 0.5rem; + --bs-modal-footer-bg: ; + --bs-modal-footer-border-color: var(--bs-border-color); + --bs-modal-footer-border-width: var(--bs-border-width); + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-modal-zindex); + display: none; + width: 100%; + height: 100%; + overflow-x: hidden; + overflow-y: auto; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: var(--bs-modal-margin); + pointer-events: none; +} +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} +.modal.show .modal-dialog { + transform: none; +} +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + height: calc(100% - var(--bs-modal-margin) * 2); +} +.modal-dialog-scrollable .modal-content { + max-height: 100%; + overflow: hidden; +} +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - var(--bs-modal-margin) * 2); +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + color: var(--bs-modal-color); + pointer-events: auto; + background-color: var(--bs-modal-bg); + background-clip: padding-box; + border: var(--bs-modal-border-width) solid var(--bs-modal-border-color); + border-radius: var(--bs-modal-border-radius); + outline: 0; +} + +.modal-backdrop { + --bs-backdrop-zindex: 1050; + --bs-backdrop-bg: #000; + --bs-backdrop-opacity: 0.5; + position: fixed; + top: 0; + left: 0; + z-index: var(--bs-backdrop-zindex); + width: 100vw; + height: 100vh; + background-color: var(--bs-backdrop-bg); +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop.show { + opacity: var(--bs-backdrop-opacity); +} + +.modal-header { + display: flex; + flex-shrink: 0; + align-items: center; + padding: var(--bs-modal-header-padding); + border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color); + border-top-left-radius: var(--bs-modal-inner-border-radius); + border-top-right-radius: var(--bs-modal-inner-border-radius); +} +.modal-header .btn-close { + padding: calc(var(--bs-modal-header-padding-y) * 0.5) calc(var(--bs-modal-header-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-modal-header-padding-y)) calc(-0.5 * var(--bs-modal-header-padding-x)) calc(-0.5 * var(--bs-modal-header-padding-y)) auto; +} + +.modal-title { + margin-bottom: 0; + line-height: var(--bs-modal-title-line-height); +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: var(--bs-modal-padding); +} + +.modal-footer { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * 0.5); + background-color: var(--bs-modal-footer-bg); + border-top: var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color); + border-bottom-right-radius: var(--bs-modal-inner-border-radius); + border-bottom-left-radius: var(--bs-modal-inner-border-radius); +} +.modal-footer > * { + margin: calc(var(--bs-modal-footer-gap) * 0.5); +} + +@media (min-width: 576px) { + .modal { + --bs-modal-margin: 1.75rem; + --bs-modal-box-shadow: var(--bs-box-shadow); + } + .modal-dialog { + max-width: var(--bs-modal-width); + margin-right: auto; + margin-left: auto; + } + .modal-sm { + --bs-modal-width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + --bs-modal-width: 800px; + } +} +@media (min-width: 1200px) { + .modal-xl { + --bs-modal-width: 1140px; + } +} +.modal-fullscreen { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; +} +.modal-fullscreen .modal-content { + height: 100%; + border: 0; + border-radius: 0; +} +.modal-fullscreen .modal-header, +.modal-fullscreen .modal-footer { + border-radius: 0; +} +.modal-fullscreen .modal-body { + overflow-y: auto; +} + +@media (max-width: 575.98px) { + .modal-fullscreen-sm-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-sm-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-header, + .modal-fullscreen-sm-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-sm-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 767.98px) { + .modal-fullscreen-md-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-md-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-md-down .modal-header, + .modal-fullscreen-md-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-md-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 991.98px) { + .modal-fullscreen-lg-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-lg-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-header, + .modal-fullscreen-lg-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-lg-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1199.98px) { + .modal-fullscreen-xl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-header, + .modal-fullscreen-xl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xl-down .modal-body { + overflow-y: auto; + } +} +@media (max-width: 1399.98px) { + .modal-fullscreen-xxl-down { + width: 100vw; + max-width: none; + height: 100%; + margin: 0; + } + .modal-fullscreen-xxl-down .modal-content { + height: 100%; + border: 0; + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-header, + .modal-fullscreen-xxl-down .modal-footer { + border-radius: 0; + } + .modal-fullscreen-xxl-down .modal-body { + overflow-y: auto; + } +} +.tooltip { + --bs-tooltip-zindex: 1080; + --bs-tooltip-max-width: 200px; + --bs-tooltip-padding-x: 0.5rem; + --bs-tooltip-padding-y: 0.25rem; + --bs-tooltip-margin: ; + --bs-tooltip-font-size: 0.875rem; + --bs-tooltip-color: var(--bs-body-bg); + --bs-tooltip-bg: var(--bs-emphasis-color); + --bs-tooltip-border-radius: var(--bs-border-radius); + --bs-tooltip-opacity: 0.9; + --bs-tooltip-arrow-width: 0.8rem; + --bs-tooltip-arrow-height: 0.4rem; + z-index: var(--bs-tooltip-zindex); + display: block; + margin: var(--bs-tooltip-margin); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-tooltip-font-size); + word-wrap: break-word; + opacity: 0; +} +.tooltip.show { + opacity: var(--bs-tooltip-opacity); +} +.tooltip .tooltip-arrow { + display: block; + width: var(--bs-tooltip-arrow-width); + height: var(--bs-tooltip-arrow-height); +} +.tooltip .tooltip-arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { + bottom: calc(-1 * var(--bs-tooltip-arrow-height)); +} +.bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { + top: -1px; + border-width: var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-top-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { + left: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { + right: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * 0.5) 0; + border-right-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { + top: calc(-1 * var(--bs-tooltip-arrow-height)); +} +.bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { + bottom: -1px; + border-width: 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-bottom-color: var(--bs-tooltip-bg); +} + +/* rtl:begin:ignore */ +.bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { + right: calc(-1 * var(--bs-tooltip-arrow-height)); + width: var(--bs-tooltip-arrow-height); + height: var(--bs-tooltip-arrow-width); +} +.bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { + left: -1px; + border-width: calc(var(--bs-tooltip-arrow-width) * 0.5) 0 calc(var(--bs-tooltip-arrow-width) * 0.5) var(--bs-tooltip-arrow-height); + border-left-color: var(--bs-tooltip-bg); +} + +/* rtl:end:ignore */ +.tooltip-inner { + max-width: var(--bs-tooltip-max-width); + padding: var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x); + color: var(--bs-tooltip-color); + text-align: center; + background-color: var(--bs-tooltip-bg); + border-radius: var(--bs-tooltip-border-radius); +} + +.popover { + --bs-popover-zindex: 1070; + --bs-popover-max-width: 276px; + --bs-popover-font-size: 0.875rem; + --bs-popover-bg: var(--bs-body-bg); + --bs-popover-border-width: var(--bs-border-width); + --bs-popover-border-color: var(--bs-border-color-translucent); + --bs-popover-border-radius: var(--bs-border-radius-lg); + --bs-popover-inner-border-radius: calc(var(--bs-border-radius-lg) - var(--bs-border-width)); + --bs-popover-box-shadow: var(--bs-box-shadow); + --bs-popover-header-padding-x: 1rem; + --bs-popover-header-padding-y: 0.5rem; + --bs-popover-header-font-size: 1rem; + --bs-popover-header-color: inherit; + --bs-popover-header-bg: var(--bs-secondary-bg); + --bs-popover-body-padding-x: 1rem; + --bs-popover-body-padding-y: 1rem; + --bs-popover-body-color: var(--bs-body-color); + --bs-popover-arrow-width: 1rem; + --bs-popover-arrow-height: 0.5rem; + --bs-popover-arrow-border: var(--bs-popover-border-color); + z-index: var(--bs-popover-zindex); + display: block; + max-width: var(--bs-popover-max-width); + font-family: var(--bs-font-sans-serif); + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + white-space: normal; + word-spacing: normal; + line-break: auto; + font-size: var(--bs-popover-font-size); + word-wrap: break-word; + background-color: var(--bs-popover-bg); + background-clip: padding-box; + border: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-radius: var(--bs-popover-border-radius); +} +.popover .popover-arrow { + display: block; + width: var(--bs-popover-arrow-width); + height: var(--bs-popover-arrow-height); +} +.popover .popover-arrow::before, .popover .popover-arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; + border-width: 0; +} + +.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { + bottom: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before, .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + border-width: var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { + bottom: 0; + border-top-color: var(--bs-popover-arrow-border); +} +.bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { + bottom: var(--bs-popover-border-width); + border-top-color: var(--bs-popover-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { + left: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before, .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * 0.5) 0; +} +.bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { + left: 0; + border-right-color: var(--bs-popover-arrow-border); +} +.bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { + left: var(--bs-popover-border-width); + border-right-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { + top: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before, .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + border-width: 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { + top: 0; + border-bottom-color: var(--bs-popover-arrow-border); +} +.bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { + top: var(--bs-popover-border-width); + border-bottom-color: var(--bs-popover-bg); +} +.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: var(--bs-popover-arrow-width); + margin-left: calc(-0.5 * var(--bs-popover-arrow-width)); + content: ""; + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-header-bg); +} + +/* rtl:begin:ignore */ +.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { + right: calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width)); + width: var(--bs-popover-arrow-height); + height: var(--bs-popover-arrow-width); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before, .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + border-width: calc(var(--bs-popover-arrow-width) * 0.5) 0 calc(var(--bs-popover-arrow-width) * 0.5) var(--bs-popover-arrow-height); +} +.bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { + right: 0; + border-left-color: var(--bs-popover-arrow-border); +} +.bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { + right: var(--bs-popover-border-width); + border-left-color: var(--bs-popover-bg); +} + +/* rtl:end:ignore */ +.popover-header { + padding: var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x); + margin-bottom: 0; + font-size: var(--bs-popover-header-font-size); + color: var(--bs-popover-header-color); + background-color: var(--bs-popover-header-bg); + border-bottom: var(--bs-popover-border-width) solid var(--bs-popover-border-color); + border-top-left-radius: var(--bs-popover-inner-border-radius); + border-top-right-radius: var(--bs-popover-inner-border-radius); +} +.popover-header:empty { + display: none; +} + +.popover-body { + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x); + color: var(--bs-popover-body-color); +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-start), +.active.carousel-item-end { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-end), +.active.carousel-item-start { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-start, +.carousel-fade .carousel-item-prev.carousel-item-end { + z-index: 1; + opacity: 1; +} +.carousel-fade .active.carousel-item-start, +.carousel-fade .active.carousel-item-end { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-start, + .carousel-fade .active.carousel-item-end { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + padding: 0; + color: #fff; + text-align: center; + background: none; + border: 0; + opacity: 0.5; + transition: opacity 0.15s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; +} + +.carousel-control-next { + right: 0; +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 2rem; + height: 2rem; + background-repeat: no-repeat; + background-position: 50%; + background-size: 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/; +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/; +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: flex; + justify-content: center; + padding: 0; + margin-right: 15%; + margin-bottom: 1rem; + margin-left: 15%; +} +.carousel-indicators [data-bs-target] { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + padding: 0; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: 0.5; + transition: opacity 0.6s ease; +} +@media (prefers-reduced-motion: reduce) { + .carousel-indicators [data-bs-target] { + transition: none; + } +} +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 1.25rem; + left: 15%; + padding-top: 1.25rem; + padding-bottom: 1.25rem; + color: #fff; + text-align: center; +} + +.carousel-dark .carousel-control-prev-icon, +.carousel-dark .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +.carousel-dark .carousel-indicators [data-bs-target] { + background-color: #000; +} +.carousel-dark .carousel-caption { + color: #000; +} + +[data-bs-theme=dark] .carousel .carousel-control-prev-icon, +[data-bs-theme=dark] .carousel .carousel-control-next-icon, [data-bs-theme=dark].carousel .carousel-control-prev-icon, +[data-bs-theme=dark].carousel .carousel-control-next-icon { + filter: invert(1) grayscale(100); +} +[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target], [data-bs-theme=dark].carousel .carousel-indicators [data-bs-target] { + background-color: #000; +} +[data-bs-theme=dark] .carousel .carousel-caption, [data-bs-theme=dark].carousel .carousel-caption { + color: #000; +} + +.spinner-grow, +.spinner-border { + display: inline-block; + width: var(--bs-spinner-width); + height: var(--bs-spinner-height); + vertical-align: var(--bs-spinner-vertical-align); + border-radius: 50%; + animation: var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name); +} + +@keyframes spinner-border { + to { + transform: rotate(360deg) /* rtl:ignore */; + } +} +.spinner-border { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-border-width: 0.25em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-border; + border: var(--bs-spinner-border-width) solid currentcolor; + border-right-color: transparent; +} + +.spinner-border-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; + --bs-spinner-border-width: 0.2em; +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} +.spinner-grow { + --bs-spinner-width: 2rem; + --bs-spinner-height: 2rem; + --bs-spinner-vertical-align: -0.125em; + --bs-spinner-animation-speed: 0.75s; + --bs-spinner-animation-name: spinner-grow; + background-color: currentcolor; + opacity: 0; +} + +.spinner-grow-sm { + --bs-spinner-width: 1rem; + --bs-spinner-height: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .spinner-border, + .spinner-grow { + --bs-spinner-animation-speed: 1.5s; + } +} +.offcanvas, .offcanvas-xxl, .offcanvas-xl, .offcanvas-lg, .offcanvas-md, .offcanvas-sm { + --bs-offcanvas-zindex: 1045; + --bs-offcanvas-width: 400px; + --bs-offcanvas-height: 30vh; + --bs-offcanvas-padding-x: 1rem; + --bs-offcanvas-padding-y: 1rem; + --bs-offcanvas-color: var(--bs-body-color); + --bs-offcanvas-bg: var(--bs-body-bg); + --bs-offcanvas-border-width: var(--bs-border-width); + --bs-offcanvas-border-color: var(--bs-border-color-translucent); + --bs-offcanvas-box-shadow: var(--bs-box-shadow-sm); + --bs-offcanvas-transition: transform 0.3s ease-in-out; + --bs-offcanvas-title-line-height: 1.5; +} + +@media (max-width: 575.98px) { + .offcanvas-sm { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 575.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-sm { + transition: none; + } +} +@media (max-width: 575.98px) { + .offcanvas-sm.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-sm.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-sm.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-sm.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) { + transform: none; + } + .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show { + visibility: visible; + } +} +@media (min-width: 576px) { + .offcanvas-sm { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-sm .offcanvas-header { + display: none; + } + .offcanvas-sm .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 767.98px) { + .offcanvas-md { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-md { + transition: none; + } +} +@media (max-width: 767.98px) { + .offcanvas-md.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-md.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-md.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-md.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) { + transform: none; + } + .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show { + visibility: visible; + } +} +@media (min-width: 768px) { + .offcanvas-md { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-md .offcanvas-header { + display: none; + } + .offcanvas-md .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 991.98px) { + .offcanvas-lg { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-lg { + transition: none; + } +} +@media (max-width: 991.98px) { + .offcanvas-lg.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-lg.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-lg.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-lg.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) { + transform: none; + } + .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show { + visibility: visible; + } +} +@media (min-width: 992px) { + .offcanvas-lg { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-lg .offcanvas-header { + display: none; + } + .offcanvas-lg .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1199.98px) { + .offcanvas-xl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xl { + transition: none; + } +} +@media (max-width: 1199.98px) { + .offcanvas-xl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-xl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-xl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-xl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) { + transform: none; + } + .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show { + visibility: visible; + } +} +@media (min-width: 1200px) { + .offcanvas-xl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xl .offcanvas-header { + display: none; + } + .offcanvas-xl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +@media (max-width: 1399.98px) { + .offcanvas-xxl { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); + } +} +@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce) { + .offcanvas-xxl { + transition: none; + } +} +@media (max-width: 1399.98px) { + .offcanvas-xxl.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); + } + .offcanvas-xxl.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); + } + .offcanvas-xxl.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); + } + .offcanvas-xxl.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); + } + .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) { + transform: none; + } + .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show { + visibility: visible; + } +} +@media (min-width: 1400px) { + .offcanvas-xxl { + --bs-offcanvas-height: auto; + --bs-offcanvas-border-width: 0; + background-color: transparent !important; + } + .offcanvas-xxl .offcanvas-header { + display: none; + } + .offcanvas-xxl .offcanvas-body { + display: flex; + flex-grow: 0; + padding: 0; + overflow-y: visible; + background-color: transparent !important; + } +} + +.offcanvas { + position: fixed; + bottom: 0; + z-index: var(--bs-offcanvas-zindex); + display: flex; + flex-direction: column; + max-width: 100%; + color: var(--bs-offcanvas-color); + visibility: hidden; + background-color: var(--bs-offcanvas-bg); + background-clip: padding-box; + outline: 0; + transition: var(--bs-offcanvas-transition); +} +@media (prefers-reduced-motion: reduce) { + .offcanvas { + transition: none; + } +} +.offcanvas.offcanvas-start { + top: 0; + left: 0; + width: var(--bs-offcanvas-width); + border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(-100%); +} +.offcanvas.offcanvas-end { + top: 0; + right: 0; + width: var(--bs-offcanvas-width); + border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateX(100%); +} +.offcanvas.offcanvas-top { + top: 0; + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(-100%); +} +.offcanvas.offcanvas-bottom { + right: 0; + left: 0; + height: var(--bs-offcanvas-height); + max-height: 100%; + border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color); + transform: translateY(100%); +} +.offcanvas.showing, .offcanvas.show:not(.hiding) { + transform: none; +} +.offcanvas.showing, .offcanvas.hiding, .offcanvas.show { + visibility: visible; +} + +.offcanvas-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} +.offcanvas-backdrop.fade { + opacity: 0; +} +.offcanvas-backdrop.show { + opacity: 0.5; +} + +.offcanvas-header { + display: flex; + align-items: center; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); +} +.offcanvas-header .btn-close { + padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5); + margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto; +} + +.offcanvas-title { + margin-bottom: 0; + line-height: var(--bs-offcanvas-title-line-height); +} + +.offcanvas-body { + flex-grow: 1; + padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x); + overflow-y: auto; +} + +.placeholder { + display: inline-block; + min-height: 1em; + vertical-align: middle; + cursor: wait; + background-color: currentcolor; + opacity: 0.5; +} +.placeholder.btn::before { + display: inline-block; + content: ""; +} + +.placeholder-xs { + min-height: 0.6em; +} + +.placeholder-sm { + min-height: 0.8em; +} + +.placeholder-lg { + min-height: 1.2em; +} + +.placeholder-glow .placeholder { + animation: placeholder-glow 2s ease-in-out infinite; +} + +@keyframes placeholder-glow { + 50% { + opacity: 0.2; + } +} +.placeholder-wave { + -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); + -webkit-mask-size: 200% 100%; + mask-size: 200% 100%; + animation: placeholder-wave 2s linear infinite; +} + +@keyframes placeholder-wave { + 100% { + -webkit-mask-position: -200% 0%; + mask-position: -200% 0%; + } +} +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.text-bg-primary { + color: #fff !important; + background-color: RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-secondary { + color: #fff !important; + background-color: RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-success { + color: #fff !important; + background-color: RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-info { + color: #000 !important; + background-color: RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-warning { + color: #000 !important; + background-color: RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-danger { + color: #fff !important; + background-color: RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-light { + color: #000 !important; + background-color: RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.text-bg-dark { + color: #fff !important; + background-color: RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important; +} + +.link-primary { + color: RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-primary:hover, .link-primary:focus { + color: RGBA(10, 88, 202, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(10, 88, 202, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-secondary { + color: RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-secondary:hover, .link-secondary:focus { + color: RGBA(86, 94, 100, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(86, 94, 100, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-success { + color: RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-success:hover, .link-success:focus { + color: RGBA(20, 108, 67, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(20, 108, 67, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-info { + color: RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-info:hover, .link-info:focus { + color: RGBA(61, 213, 243, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(61, 213, 243, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-warning { + color: RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-warning:hover, .link-warning:focus { + color: RGBA(255, 205, 57, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(255, 205, 57, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-danger { + color: RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-danger:hover, .link-danger:focus { + color: RGBA(176, 42, 55, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(176, 42, 55, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-light { + color: RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-light:hover, .link-light:focus { + color: RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-dark { + color: RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-dark:hover, .link-dark:focus { + color: RGBA(26, 30, 33, var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(26, 30, 33, var(--bs-link-underline-opacity, 1)) !important; +} + +.link-body-emphasis { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important; +} +.link-body-emphasis:hover, .link-body-emphasis:focus { + color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important; + -webkit-text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; + text-decoration-color: RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important; +} + +.focus-ring:focus { + outline: 0; + box-shadow: var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color); +} + +.icon-link { + display: inline-flex; + gap: 0.375rem; + align-items: center; + -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5)); + text-underline-offset: 0.25em; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; +} +.icon-link > .bi { + flex-shrink: 0; + width: 1em; + height: 1em; + fill: currentcolor; + transition: 0.2s ease-in-out transform; +} +@media (prefers-reduced-motion: reduce) { + .icon-link > .bi { + transition: none; + } +} + +.icon-link-hover:hover > .bi, .icon-link-hover:focus-visible > .bi { + transform: var(--bs-icon-link-transform, translate3d(0.25em, 0, 0)); +} + +.ratio { + position: relative; + width: 100%; +} +.ratio::before { + display: block; + padding-top: var(--bs-aspect-ratio); + content: ""; +} +.ratio > * { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.ratio-1x1 { + --bs-aspect-ratio: 100%; +} + +.ratio-4x3 { + --bs-aspect-ratio: 75%; +} + +.ratio-16x9 { + --bs-aspect-ratio: 56.25%; +} + +.ratio-21x9 { + --bs-aspect-ratio: 42.8571428571%; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +.sticky-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; +} + +.sticky-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; +} + +@media (min-width: 576px) { + .sticky-sm-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-sm-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 768px) { + .sticky-md-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-md-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 992px) { + .sticky-lg-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-lg-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1200px) { + .sticky-xl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +@media (min-width: 1400px) { + .sticky-xxl-top { + position: -webkit-sticky; + position: sticky; + top: 0; + z-index: 1020; + } + .sticky-xxl-bottom { + position: -webkit-sticky; + position: sticky; + bottom: 0; + z-index: 1020; + } +} +.hstack { + display: flex; + flex-direction: row; + align-items: center; + align-self: stretch; +} + +.vstack { + display: flex; + flex: 1 1 auto; + flex-direction: column; + align-self: stretch; +} + +.visually-hidden, +.visually-hidden-focusable:not(:focus):not(:focus-within) { + width: 1px !important; + height: 1px !important; + padding: 0 !important; + margin: -1px !important; + overflow: hidden !important; + clip: rect(0, 0, 0, 0) !important; + white-space: nowrap !important; + border: 0 !important; +} +.visually-hidden:not(caption), +.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption) { + position: absolute !important; +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + content: ""; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.vr { + display: inline-block; + align-self: stretch; + width: var(--bs-border-width); + min-height: 1em; + background-color: currentcolor; + opacity: 0.25; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.float-start { + float: left !important; +} + +.float-end { + float: right !important; +} + +.float-none { + float: none !important; +} + +.object-fit-contain { + -o-object-fit: contain !important; + object-fit: contain !important; +} + +.object-fit-cover { + -o-object-fit: cover !important; + object-fit: cover !important; +} + +.object-fit-fill { + -o-object-fit: fill !important; + object-fit: fill !important; +} + +.object-fit-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; +} + +.object-fit-none { + -o-object-fit: none !important; + object-fit: none !important; +} + +.opacity-0 { + opacity: 0 !important; +} + +.opacity-25 { + opacity: 0.25 !important; +} + +.opacity-50 { + opacity: 0.5 !important; +} + +.opacity-75 { + opacity: 0.75 !important; +} + +.opacity-100 { + opacity: 1 !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.overflow-visible { + overflow: visible !important; +} + +.overflow-scroll { + overflow: scroll !important; +} + +.overflow-x-auto { + overflow-x: auto !important; +} + +.overflow-x-hidden { + overflow-x: hidden !important; +} + +.overflow-x-visible { + overflow-x: visible !important; +} + +.overflow-x-scroll { + overflow-x: scroll !important; +} + +.overflow-y-auto { + overflow-y: auto !important; +} + +.overflow-y-hidden { + overflow-y: hidden !important; +} + +.overflow-y-visible { + overflow-y: visible !important; +} + +.overflow-y-scroll { + overflow-y: scroll !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-grid { + display: grid !important; +} + +.d-inline-grid { + display: inline-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; +} + +.shadow { + box-shadow: var(--bs-box-shadow) !important; +} + +.shadow-sm { + box-shadow: var(--bs-box-shadow-sm) !important; +} + +.shadow-lg { + box-shadow: var(--bs-box-shadow-lg) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.focus-ring-primary { + --bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-secondary { + --bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-success { + --bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-info { + --bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-warning { + --bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-danger { + --bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-light { + --bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity)); +} + +.focus-ring-dark { + --bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity)); +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: -webkit-sticky !important; + position: sticky !important; +} + +.top-0 { + top: 0 !important; +} + +.top-50 { + top: 50% !important; +} + +.top-100 { + top: 100% !important; +} + +.bottom-0 { + bottom: 0 !important; +} + +.bottom-50 { + bottom: 50% !important; +} + +.bottom-100 { + bottom: 100% !important; +} + +.start-0 { + left: 0 !important; +} + +.start-50 { + left: 50% !important; +} + +.start-100 { + left: 100% !important; +} + +.end-0 { + right: 0 !important; +} + +.end-50 { + right: 50% !important; +} + +.end-100 { + right: 100% !important; +} + +.translate-middle { + transform: translate(-50%, -50%) !important; +} + +.translate-middle-x { + transform: translateX(-50%) !important; +} + +.translate-middle-y { + transform: translateY(-50%) !important; +} + +.border { + border: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top { + border-top: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-end { + border-right: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-end-0 { + border-right: 0 !important; +} + +.border-bottom { + border-bottom: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-start { + border-left: var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important; +} + +.border-start-0 { + border-left: 0 !important; +} + +.border-primary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important; +} + +.border-secondary { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important; +} + +.border-success { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important; +} + +.border-info { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important; +} + +.border-warning { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important; +} + +.border-danger { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important; +} + +.border-light { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important; +} + +.border-dark { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important; +} + +.border-black { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important; +} + +.border-white { + --bs-border-opacity: 1; + border-color: rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important; +} + +.border-primary-subtle { + border-color: var(--bs-primary-border-subtle) !important; +} + +.border-secondary-subtle { + border-color: var(--bs-secondary-border-subtle) !important; +} + +.border-success-subtle { + border-color: var(--bs-success-border-subtle) !important; +} + +.border-info-subtle { + border-color: var(--bs-info-border-subtle) !important; +} + +.border-warning-subtle { + border-color: var(--bs-warning-border-subtle) !important; +} + +.border-danger-subtle { + border-color: var(--bs-danger-border-subtle) !important; +} + +.border-light-subtle { + border-color: var(--bs-light-border-subtle) !important; +} + +.border-dark-subtle { + border-color: var(--bs-dark-border-subtle) !important; +} + +.border-1 { + border-width: 1px !important; +} + +.border-2 { + border-width: 2px !important; +} + +.border-3 { + border-width: 3px !important; +} + +.border-4 { + border-width: 4px !important; +} + +.border-5 { + border-width: 5px !important; +} + +.border-opacity-10 { + --bs-border-opacity: 0.1; +} + +.border-opacity-25 { + --bs-border-opacity: 0.25; +} + +.border-opacity-50 { + --bs-border-opacity: 0.5; +} + +.border-opacity-75 { + --bs-border-opacity: 0.75; +} + +.border-opacity-100 { + --bs-border-opacity: 1; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.vw-100 { + width: 100vw !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.vh-100 { + height: 100vh !important; +} + +.min-vh-100 { + min-height: 100vh !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; +} + +.gap-0 { + gap: 0 !important; +} + +.gap-1 { + gap: 0.25rem !important; +} + +.gap-2 { + gap: 0.5rem !important; +} + +.gap-3 { + gap: 1rem !important; +} + +.gap-4 { + gap: 1.5rem !important; +} + +.gap-5 { + gap: 3rem !important; +} + +.row-gap-0 { + row-gap: 0 !important; +} + +.row-gap-1 { + row-gap: 0.25rem !important; +} + +.row-gap-2 { + row-gap: 0.5rem !important; +} + +.row-gap-3 { + row-gap: 1rem !important; +} + +.row-gap-4 { + row-gap: 1.5rem !important; +} + +.row-gap-5 { + row-gap: 3rem !important; +} + +.column-gap-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; +} + +.column-gap-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; +} + +.column-gap-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; +} + +.column-gap-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; +} + +.column-gap-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; +} + +.column-gap-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; +} + +.font-monospace { + font-family: var(--bs-font-monospace) !important; +} + +.fs-1 { + font-size: calc(1.375rem + 1.5vw) !important; +} + +.fs-2 { + font-size: calc(1.325rem + 0.9vw) !important; +} + +.fs-3 { + font-size: calc(1.3rem + 0.6vw) !important; +} + +.fs-4 { + font-size: calc(1.275rem + 0.3vw) !important; +} + +.fs-5 { + font-size: 1.25rem !important; +} + +.fs-6 { + font-size: 1rem !important; +} + +.fst-italic { + font-style: italic !important; +} + +.fst-normal { + font-style: normal !important; +} + +.fw-lighter { + font-weight: lighter !important; +} + +.fw-light { + font-weight: 300 !important; +} + +.fw-normal { + font-weight: 400 !important; +} + +.fw-medium { + font-weight: 500 !important; +} + +.fw-semibold { + font-weight: 600 !important; +} + +.fw-bold { + font-weight: 700 !important; +} + +.fw-bolder { + font-weight: bolder !important; +} + +.lh-1 { + line-height: 1 !important; +} + +.lh-sm { + line-height: 1.25 !important; +} + +.lh-base { + line-height: 1.5 !important; +} + +.lh-lg { + line-height: 2 !important; +} + +.text-start { + text-align: left !important; +} + +.text-end { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-decoration-underline { + text-decoration: underline !important; +} + +.text-decoration-line-through { + text-decoration: line-through !important; +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +/* rtl:begin:remove */ +.text-break { + word-wrap: break-word !important; + word-break: break-word !important; +} + +/* rtl:end:remove */ +.text-primary { + --bs-text-opacity: 1; + color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; +} + +.text-secondary { + --bs-text-opacity: 1; + color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; +} + +.text-success { + --bs-text-opacity: 1; + color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; +} + +.text-info { + --bs-text-opacity: 1; + color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; +} + +.text-warning { + --bs-text-opacity: 1; + color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; +} + +.text-danger { + --bs-text-opacity: 1; + color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; +} + +.text-light { + --bs-text-opacity: 1; + color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; +} + +.text-dark { + --bs-text-opacity: 1; + color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; +} + +.text-black { + --bs-text-opacity: 1; + color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; +} + +.text-white { + --bs-text-opacity: 1; + color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; +} + +.text-body { + --bs-text-opacity: 1; + color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; +} + +.text-muted { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; +} + +.text-black-50 { + --bs-text-opacity: 1; + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + --bs-text-opacity: 1; + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-body-secondary { + --bs-text-opacity: 1; + color: var(--bs-secondary-color) !important; +} + +.text-body-tertiary { + --bs-text-opacity: 1; + color: var(--bs-tertiary-color) !important; +} + +.text-body-emphasis { + --bs-text-opacity: 1; + color: var(--bs-emphasis-color) !important; +} + +.text-reset { + --bs-text-opacity: 1; + color: inherit !important; +} + +.text-opacity-25 { + --bs-text-opacity: 0.25; +} + +.text-opacity-50 { + --bs-text-opacity: 0.5; +} + +.text-opacity-75 { + --bs-text-opacity: 0.75; +} + +.text-opacity-100 { + --bs-text-opacity: 1; +} + +.text-primary-emphasis { + color: var(--bs-primary-text-emphasis) !important; +} + +.text-secondary-emphasis { + color: var(--bs-secondary-text-emphasis) !important; +} + +.text-success-emphasis { + color: var(--bs-success-text-emphasis) !important; +} + +.text-info-emphasis { + color: var(--bs-info-text-emphasis) !important; +} + +.text-warning-emphasis { + color: var(--bs-warning-text-emphasis) !important; +} + +.text-danger-emphasis { + color: var(--bs-danger-text-emphasis) !important; +} + +.text-light-emphasis { + color: var(--bs-light-text-emphasis) !important; +} + +.text-dark-emphasis { + color: var(--bs-dark-text-emphasis) !important; +} + +.link-opacity-10 { + --bs-link-opacity: 0.1; +} + +.link-opacity-10-hover:hover { + --bs-link-opacity: 0.1; +} + +.link-opacity-25 { + --bs-link-opacity: 0.25; +} + +.link-opacity-25-hover:hover { + --bs-link-opacity: 0.25; +} + +.link-opacity-50 { + --bs-link-opacity: 0.5; +} + +.link-opacity-50-hover:hover { + --bs-link-opacity: 0.5; +} + +.link-opacity-75 { + --bs-link-opacity: 0.75; +} + +.link-opacity-75-hover:hover { + --bs-link-opacity: 0.75; +} + +.link-opacity-100 { + --bs-link-opacity: 1; +} + +.link-opacity-100-hover:hover { + --bs-link-opacity: 1; +} + +.link-offset-1 { + text-underline-offset: 0.125em !important; +} + +.link-offset-1-hover:hover { + text-underline-offset: 0.125em !important; +} + +.link-offset-2 { + text-underline-offset: 0.25em !important; +} + +.link-offset-2-hover:hover { + text-underline-offset: 0.25em !important; +} + +.link-offset-3 { + text-underline-offset: 0.375em !important; +} + +.link-offset-3-hover:hover { + text-underline-offset: 0.375em !important; +} + +.link-underline-primary { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-secondary { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-success { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-info { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-warning { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-danger { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-light { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline-dark { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; + text-decoration-color: rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important; +} + +.link-underline { + --bs-link-underline-opacity: 1; + -webkit-text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; + text-decoration-color: rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important; +} + +.link-underline-opacity-0 { + --bs-link-underline-opacity: 0; +} + +.link-underline-opacity-0-hover:hover { + --bs-link-underline-opacity: 0; +} + +.link-underline-opacity-10 { + --bs-link-underline-opacity: 0.1; +} + +.link-underline-opacity-10-hover:hover { + --bs-link-underline-opacity: 0.1; +} + +.link-underline-opacity-25 { + --bs-link-underline-opacity: 0.25; +} + +.link-underline-opacity-25-hover:hover { + --bs-link-underline-opacity: 0.25; +} + +.link-underline-opacity-50 { + --bs-link-underline-opacity: 0.5; +} + +.link-underline-opacity-50-hover:hover { + --bs-link-underline-opacity: 0.5; +} + +.link-underline-opacity-75 { + --bs-link-underline-opacity: 0.75; +} + +.link-underline-opacity-75-hover:hover { + --bs-link-underline-opacity: 0.75; +} + +.link-underline-opacity-100 { + --bs-link-underline-opacity: 1; +} + +.link-underline-opacity-100-hover:hover { + --bs-link-underline-opacity: 1; +} + +.bg-primary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-success { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-info { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-warning { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-danger { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-light { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-dark { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-black { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-white { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-transparent { + --bs-bg-opacity: 1; + background-color: transparent !important; +} + +.bg-body-secondary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-body-tertiary { + --bs-bg-opacity: 1; + background-color: rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important; +} + +.bg-opacity-10 { + --bs-bg-opacity: 0.1; +} + +.bg-opacity-25 { + --bs-bg-opacity: 0.25; +} + +.bg-opacity-50 { + --bs-bg-opacity: 0.5; +} + +.bg-opacity-75 { + --bs-bg-opacity: 0.75; +} + +.bg-opacity-100 { + --bs-bg-opacity: 1; +} + +.bg-primary-subtle { + background-color: var(--bs-primary-bg-subtle) !important; +} + +.bg-secondary-subtle { + background-color: var(--bs-secondary-bg-subtle) !important; +} + +.bg-success-subtle { + background-color: var(--bs-success-bg-subtle) !important; +} + +.bg-info-subtle { + background-color: var(--bs-info-bg-subtle) !important; +} + +.bg-warning-subtle { + background-color: var(--bs-warning-bg-subtle) !important; +} + +.bg-danger-subtle { + background-color: var(--bs-danger-bg-subtle) !important; +} + +.bg-light-subtle { + background-color: var(--bs-light-bg-subtle) !important; +} + +.bg-dark-subtle { + background-color: var(--bs-dark-bg-subtle) !important; +} + +.bg-gradient { + background-image: var(--bs-gradient) !important; +} + +.user-select-all { + -webkit-user-select: all !important; + -moz-user-select: all !important; + user-select: all !important; +} + +.user-select-auto { + -webkit-user-select: auto !important; + -moz-user-select: auto !important; + user-select: auto !important; +} + +.user-select-none { + -webkit-user-select: none !important; + -moz-user-select: none !important; + user-select: none !important; +} + +.pe-none { + pointer-events: none !important; +} + +.pe-auto { + pointer-events: auto !important; +} + +.rounded { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.rounded-1 { + border-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-2 { + border-radius: var(--bs-border-radius) !important; +} + +.rounded-3 { + border-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-4 { + border-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-5 { + border-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-top { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.rounded-top-0 { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} + +.rounded-top-1 { + border-top-left-radius: var(--bs-border-radius-sm) !important; + border-top-right-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-top-2 { + border-top-left-radius: var(--bs-border-radius) !important; + border-top-right-radius: var(--bs-border-radius) !important; +} + +.rounded-top-3 { + border-top-left-radius: var(--bs-border-radius-lg) !important; + border-top-right-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-top-4 { + border-top-left-radius: var(--bs-border-radius-xl) !important; + border-top-right-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-top-5 { + border-top-left-radius: var(--bs-border-radius-xxl) !important; + border-top-right-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-top-circle { + border-top-left-radius: 50% !important; + border-top-right-radius: 50% !important; +} + +.rounded-top-pill { + border-top-left-radius: var(--bs-border-radius-pill) !important; + border-top-right-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-end { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-end-0 { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +.rounded-end-1 { + border-top-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-right-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-end-2 { + border-top-right-radius: var(--bs-border-radius) !important; + border-bottom-right-radius: var(--bs-border-radius) !important; +} + +.rounded-end-3 { + border-top-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-right-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-end-4 { + border-top-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-right-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-end-5 { + border-top-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-end-circle { + border-top-right-radius: 50% !important; + border-bottom-right-radius: 50% !important; +} + +.rounded-end-pill { + border-top-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-right-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-bottom { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom-0 { + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; +} + +.rounded-bottom-1 { + border-bottom-right-radius: var(--bs-border-radius-sm) !important; + border-bottom-left-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-bottom-2 { + border-bottom-right-radius: var(--bs-border-radius) !important; + border-bottom-left-radius: var(--bs-border-radius) !important; +} + +.rounded-bottom-3 { + border-bottom-right-radius: var(--bs-border-radius-lg) !important; + border-bottom-left-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-bottom-4 { + border-bottom-right-radius: var(--bs-border-radius-xl) !important; + border-bottom-left-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-bottom-5 { + border-bottom-right-radius: var(--bs-border-radius-xxl) !important; + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-bottom-circle { + border-bottom-right-radius: 50% !important; + border-bottom-left-radius: 50% !important; +} + +.rounded-bottom-pill { + border-bottom-right-radius: var(--bs-border-radius-pill) !important; + border-bottom-left-radius: var(--bs-border-radius-pill) !important; +} + +.rounded-start { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start-0 { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; +} + +.rounded-start-1 { + border-bottom-left-radius: var(--bs-border-radius-sm) !important; + border-top-left-radius: var(--bs-border-radius-sm) !important; +} + +.rounded-start-2 { + border-bottom-left-radius: var(--bs-border-radius) !important; + border-top-left-radius: var(--bs-border-radius) !important; +} + +.rounded-start-3 { + border-bottom-left-radius: var(--bs-border-radius-lg) !important; + border-top-left-radius: var(--bs-border-radius-lg) !important; +} + +.rounded-start-4 { + border-bottom-left-radius: var(--bs-border-radius-xl) !important; + border-top-left-radius: var(--bs-border-radius-xl) !important; +} + +.rounded-start-5 { + border-bottom-left-radius: var(--bs-border-radius-xxl) !important; + border-top-left-radius: var(--bs-border-radius-xxl) !important; +} + +.rounded-start-circle { + border-bottom-left-radius: 50% !important; + border-top-left-radius: 50% !important; +} + +.rounded-start-pill { + border-bottom-left-radius: var(--bs-border-radius-pill) !important; + border-top-left-radius: var(--bs-border-radius-pill) !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +.z-n1 { + z-index: -1 !important; +} + +.z-0 { + z-index: 0 !important; +} + +.z-1 { + z-index: 1 !important; +} + +.z-2 { + z-index: 2 !important; +} + +.z-3 { + z-index: 3 !important; +} + +@media (min-width: 576px) { + .float-sm-start { + float: left !important; + } + .float-sm-end { + float: right !important; + } + .float-sm-none { + float: none !important; + } + .object-fit-sm-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .object-fit-sm-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .object-fit-sm-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .object-fit-sm-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .object-fit-sm-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .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-inline-grid { + display: inline-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; + } + .gap-sm-0 { + gap: 0 !important; + } + .gap-sm-1 { + gap: 0.25rem !important; + } + .gap-sm-2 { + gap: 0.5rem !important; + } + .gap-sm-3 { + gap: 1rem !important; + } + .gap-sm-4 { + gap: 1.5rem !important; + } + .gap-sm-5 { + gap: 3rem !important; + } + .row-gap-sm-0 { + row-gap: 0 !important; + } + .row-gap-sm-1 { + row-gap: 0.25rem !important; + } + .row-gap-sm-2 { + row-gap: 0.5rem !important; + } + .row-gap-sm-3 { + row-gap: 1rem !important; + } + .row-gap-sm-4 { + row-gap: 1.5rem !important; + } + .row-gap-sm-5 { + row-gap: 3rem !important; + } + .column-gap-sm-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .column-gap-sm-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .column-gap-sm-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .column-gap-sm-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .column-gap-sm-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .column-gap-sm-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .text-sm-start { + text-align: left !important; + } + .text-sm-end { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} +@media (min-width: 768px) { + .float-md-start { + float: left !important; + } + .float-md-end { + float: right !important; + } + .float-md-none { + float: none !important; + } + .object-fit-md-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .object-fit-md-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .object-fit-md-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .object-fit-md-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .object-fit-md-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .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-inline-grid { + display: inline-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; + } + .gap-md-0 { + gap: 0 !important; + } + .gap-md-1 { + gap: 0.25rem !important; + } + .gap-md-2 { + gap: 0.5rem !important; + } + .gap-md-3 { + gap: 1rem !important; + } + .gap-md-4 { + gap: 1.5rem !important; + } + .gap-md-5 { + gap: 3rem !important; + } + .row-gap-md-0 { + row-gap: 0 !important; + } + .row-gap-md-1 { + row-gap: 0.25rem !important; + } + .row-gap-md-2 { + row-gap: 0.5rem !important; + } + .row-gap-md-3 { + row-gap: 1rem !important; + } + .row-gap-md-4 { + row-gap: 1.5rem !important; + } + .row-gap-md-5 { + row-gap: 3rem !important; + } + .column-gap-md-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .column-gap-md-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .column-gap-md-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .column-gap-md-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .column-gap-md-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .column-gap-md-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .text-md-start { + text-align: left !important; + } + .text-md-end { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} +@media (min-width: 992px) { + .float-lg-start { + float: left !important; + } + .float-lg-end { + float: right !important; + } + .float-lg-none { + float: none !important; + } + .object-fit-lg-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .object-fit-lg-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .object-fit-lg-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .object-fit-lg-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .object-fit-lg-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .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-inline-grid { + display: inline-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; + } + .gap-lg-0 { + gap: 0 !important; + } + .gap-lg-1 { + gap: 0.25rem !important; + } + .gap-lg-2 { + gap: 0.5rem !important; + } + .gap-lg-3 { + gap: 1rem !important; + } + .gap-lg-4 { + gap: 1.5rem !important; + } + .gap-lg-5 { + gap: 3rem !important; + } + .row-gap-lg-0 { + row-gap: 0 !important; + } + .row-gap-lg-1 { + row-gap: 0.25rem !important; + } + .row-gap-lg-2 { + row-gap: 0.5rem !important; + } + .row-gap-lg-3 { + row-gap: 1rem !important; + } + .row-gap-lg-4 { + row-gap: 1.5rem !important; + } + .row-gap-lg-5 { + row-gap: 3rem !important; + } + .column-gap-lg-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .column-gap-lg-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .column-gap-lg-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .column-gap-lg-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .column-gap-lg-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .column-gap-lg-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .text-lg-start { + text-align: left !important; + } + .text-lg-end { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .float-xl-start { + float: left !important; + } + .float-xl-end { + float: right !important; + } + .float-xl-none { + float: none !important; + } + .object-fit-xl-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .object-fit-xl-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .object-fit-xl-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .object-fit-xl-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .object-fit-xl-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .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-inline-grid { + display: inline-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; + } + .gap-xl-0 { + gap: 0 !important; + } + .gap-xl-1 { + gap: 0.25rem !important; + } + .gap-xl-2 { + gap: 0.5rem !important; + } + .gap-xl-3 { + gap: 1rem !important; + } + .gap-xl-4 { + gap: 1.5rem !important; + } + .gap-xl-5 { + gap: 3rem !important; + } + .row-gap-xl-0 { + row-gap: 0 !important; + } + .row-gap-xl-1 { + row-gap: 0.25rem !important; + } + .row-gap-xl-2 { + row-gap: 0.5rem !important; + } + .row-gap-xl-3 { + row-gap: 1rem !important; + } + .row-gap-xl-4 { + row-gap: 1.5rem !important; + } + .row-gap-xl-5 { + row-gap: 3rem !important; + } + .column-gap-xl-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .column-gap-xl-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .column-gap-xl-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .column-gap-xl-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .column-gap-xl-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .column-gap-xl-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .text-xl-start { + text-align: left !important; + } + .text-xl-end { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} +@media (min-width: 1400px) { + .float-xxl-start { + float: left !important; + } + .float-xxl-end { + float: right !important; + } + .float-xxl-none { + float: none !important; + } + .object-fit-xxl-contain { + -o-object-fit: contain !important; + object-fit: contain !important; + } + .object-fit-xxl-cover { + -o-object-fit: cover !important; + object-fit: cover !important; + } + .object-fit-xxl-fill { + -o-object-fit: fill !important; + object-fit: fill !important; + } + .object-fit-xxl-scale { + -o-object-fit: scale-down !important; + object-fit: scale-down !important; + } + .object-fit-xxl-none { + -o-object-fit: none !important; + object-fit: none !important; + } + .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-inline-grid { + display: inline-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; + } + .gap-xxl-0 { + gap: 0 !important; + } + .gap-xxl-1 { + gap: 0.25rem !important; + } + .gap-xxl-2 { + gap: 0.5rem !important; + } + .gap-xxl-3 { + gap: 1rem !important; + } + .gap-xxl-4 { + gap: 1.5rem !important; + } + .gap-xxl-5 { + gap: 3rem !important; + } + .row-gap-xxl-0 { + row-gap: 0 !important; + } + .row-gap-xxl-1 { + row-gap: 0.25rem !important; + } + .row-gap-xxl-2 { + row-gap: 0.5rem !important; + } + .row-gap-xxl-3 { + row-gap: 1rem !important; + } + .row-gap-xxl-4 { + row-gap: 1.5rem !important; + } + .row-gap-xxl-5 { + row-gap: 3rem !important; + } + .column-gap-xxl-0 { + -moz-column-gap: 0 !important; + column-gap: 0 !important; + } + .column-gap-xxl-1 { + -moz-column-gap: 0.25rem !important; + column-gap: 0.25rem !important; + } + .column-gap-xxl-2 { + -moz-column-gap: 0.5rem !important; + column-gap: 0.5rem !important; + } + .column-gap-xxl-3 { + -moz-column-gap: 1rem !important; + column-gap: 1rem !important; + } + .column-gap-xxl-4 { + -moz-column-gap: 1.5rem !important; + column-gap: 1.5rem !important; + } + .column-gap-xxl-5 { + -moz-column-gap: 3rem !important; + column-gap: 3rem !important; + } + .text-xxl-start { + text-align: left !important; + } + .text-xxl-end { + text-align: right !important; + } + .text-xxl-center { + text-align: center !important; + } +} +@media (min-width: 1200px) { + .fs-1 { + font-size: 2.5rem !important; + } + .fs-2 { + font-size: 2rem !important; + } + .fs-3 { + font-size: 1.75rem !important; + } + .fs-4 { + font-size: 1.5rem !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-inline-grid { + display: inline-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.css.map */ \ No newline at end of file diff --git a/apiferia/src/assets/css/font-awesome.css b/apiferia/src/assets/css/font-awesome.css new file mode 100644 index 00000000..d03e67e1 --- /dev/null +++ b/apiferia/src/assets/css/font-awesome.css @@ -0,0 +1,12732 @@ +/*! + * Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license (Commercial License) + */ + .fa, + .fas, + .far, + .fal, + .fad, + .fab { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; } + + .fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -.0667em; } + + .fa-xs { + font-size: .75em; } + + .fa-sm { + font-size: .875em; } + + .fa-1x { + font-size: 1em; } + + .fa-2x { + font-size: 2em; } + + .fa-3x { + font-size: 3em; } + + .fa-4x { + font-size: 4em; } + + .fa-5x { + font-size: 5em; } + + .fa-6x { + font-size: 6em; } + + .fa-7x { + font-size: 7em; } + + .fa-8x { + font-size: 8em; } + + .fa-9x { + font-size: 9em; } + + .fa-10x { + font-size: 10em; } + + .fa-fw { + text-align: center; + width: 1.25em; } + + .fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; } + .fa-ul > li { + position: relative; } + + .fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; } + + .fa-border { + border: solid 0.08em #eee; + border-radius: .1em; + padding: .2em .25em .15em; } + + .fa-pull-left { + float: left; } + + .fa-pull-right { + float: right; } + + .fa.fa-pull-left, + .fas.fa-pull-left, + .far.fa-pull-left, + .fal.fa-pull-left, + .fab.fa-pull-left { + margin-right: .3em; } + + .fa.fa-pull-right, + .fas.fa-pull-right, + .far.fa-pull-right, + .fal.fa-pull-right, + .fab.fa-pull-right { + margin-left: .3em; } + + .fa-spin { + -webkit-animation: fa-spin 2s infinite linear; + animation: fa-spin 2s infinite linear; } + + .fa-pulse { + -webkit-animation: fa-spin 1s infinite steps(8); + animation: fa-spin 1s infinite steps(8); } + + @-webkit-keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + + @keyframes fa-spin { + 0% { + -webkit-transform: rotate(0deg); + transform: rotate(0deg); } + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); } } + + .fa-rotate-90 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; + -webkit-transform: rotate(90deg); + transform: rotate(90deg); } + + .fa-rotate-180 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; + -webkit-transform: rotate(180deg); + transform: rotate(180deg); } + + .fa-rotate-270 { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; + -webkit-transform: rotate(270deg); + transform: rotate(270deg); } + + .fa-flip-horizontal { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; + -webkit-transform: scale(-1, 1); + transform: scale(-1, 1); } + + .fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(1, -1); + transform: scale(1, -1); } + + .fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { + -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; + -webkit-transform: scale(-1, -1); + transform: scale(-1, -1); } + + :root .fa-rotate-90, + :root .fa-rotate-180, + :root .fa-rotate-270, + :root .fa-flip-horizontal, + :root .fa-flip-vertical, + :root .fa-flip-both { + -webkit-filter: none; + filter: none; } + + .fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; } + + .fa-stack-1x, + .fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; } + + .fa-stack-1x { + line-height: inherit; } + + .fa-stack-2x { + font-size: 2em; } + + .fa-inverse { + color: #fff; } + + /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen + readers do not read off random characters that represent icons */ + .fa-500px:before { + content: "\f26e"; } + + .fa-abacus:before { + content: "\f640"; } + + .fa-accessible-icon:before { + content: "\f368"; } + + .fa-accusoft:before { + content: "\f369"; } + + .fa-acorn:before { + content: "\f6ae"; } + + .fa-acquisitions-incorporated:before { + content: "\f6af"; } + + .fa-ad:before { + content: "\f641"; } + + .fa-address-book:before { + content: "\f2b9"; } + + .fa-address-card:before { + content: "\f2bb"; } + + .fa-adjust:before { + content: "\f042"; } + + .fa-adn:before { + content: "\f170"; } + + .fa-adobe:before { + content: "\f778"; } + + .fa-adversal:before { + content: "\f36a"; } + + .fa-affiliatetheme:before { + content: "\f36b"; } + + .fa-air-conditioner:before { + content: "\f8f4"; } + + .fa-air-freshener:before { + content: "\f5d0"; } + + .fa-airbnb:before { + content: "\f834"; } + + .fa-alarm-clock:before { + content: "\f34e"; } + + .fa-alarm-exclamation:before { + content: "\f843"; } + + .fa-alarm-plus:before { + content: "\f844"; } + + .fa-alarm-snooze:before { + content: "\f845"; } + + .fa-album:before { + content: "\f89f"; } + + .fa-album-collection:before { + content: "\f8a0"; } + + .fa-algolia:before { + content: "\f36c"; } + + .fa-alicorn:before { + content: "\f6b0"; } + + .fa-alien:before { + content: "\f8f5"; } + + .fa-alien-monster:before { + content: "\f8f6"; } + + .fa-align-center:before { + content: "\f037"; } + + .fa-align-justify:before { + content: "\f039"; } + + .fa-align-left:before { + content: "\f036"; } + + .fa-align-right:before { + content: "\f038"; } + + .fa-align-slash:before { + content: "\f846"; } + + .fa-alipay:before { + content: "\f642"; } + + .fa-allergies:before { + content: "\f461"; } + + .fa-amazon:before { + content: "\f270"; } + + .fa-amazon-pay:before { + content: "\f42c"; } + + .fa-ambulance:before { + content: "\f0f9"; } + + .fa-american-sign-language-interpreting:before { + content: "\f2a3"; } + + .fa-amilia:before { + content: "\f36d"; } + + .fa-amp-guitar:before { + content: "\f8a1"; } + + .fa-analytics:before { + content: "\f643"; } + + .fa-anchor:before { + content: "\f13d"; } + + .fa-android:before { + content: "\f17b"; } + + .fa-angel:before { + content: "\f779"; } + + .fa-angellist:before { + content: "\f209"; } + + .fa-angle-double-down:before { + content: "\f103"; } + + .fa-angle-double-left:before { + content: "\f100"; } + + .fa-angle-double-right:before { + content: "\f101"; } + + .fa-angle-double-up:before { + content: "\f102"; } + + .fa-angle-down:before { + content: "\f107"; } + + .fa-angle-left:before { + content: "\f104"; } + + .fa-angle-right:before { + content: "\f105"; } + + .fa-angle-up:before { + content: "\f106"; } + + .fa-angry:before { + content: "\f556"; } + + .fa-angrycreative:before { + content: "\f36e"; } + + .fa-angular:before { + content: "\f420"; } + + .fa-ankh:before { + content: "\f644"; } + + .fa-app-store:before { + content: "\f36f"; } + + .fa-app-store-ios:before { + content: "\f370"; } + + .fa-apper:before { + content: "\f371"; } + + .fa-apple:before { + content: "\f179"; } + + .fa-apple-alt:before { + content: "\f5d1"; } + + .fa-apple-crate:before { + content: "\f6b1"; } + + .fa-apple-pay:before { + content: "\f415"; } + + .fa-archive:before { + content: "\f187"; } + + .fa-archway:before { + content: "\f557"; } + + .fa-arrow-alt-circle-down:before { + content: "\f358"; } + + .fa-arrow-alt-circle-left:before { + content: "\f359"; } + + .fa-arrow-alt-circle-right:before { + content: "\f35a"; } + + .fa-arrow-alt-circle-up:before { + content: "\f35b"; } + + .fa-arrow-alt-down:before { + content: "\f354"; } + + .fa-arrow-alt-from-bottom:before { + content: "\f346"; } + + .fa-arrow-alt-from-left:before { + content: "\f347"; } + + .fa-arrow-alt-from-right:before { + content: "\f348"; } + + .fa-arrow-alt-from-top:before { + content: "\f349"; } + + .fa-arrow-alt-left:before { + content: "\f355"; } + + .fa-arrow-alt-right:before { + content: "\f356"; } + + .fa-arrow-alt-square-down:before { + content: "\f350"; } + + .fa-arrow-alt-square-left:before { + content: "\f351"; } + + .fa-arrow-alt-square-right:before { + content: "\f352"; } + + .fa-arrow-alt-square-up:before { + content: "\f353"; } + + .fa-arrow-alt-to-bottom:before { + content: "\f34a"; } + + .fa-arrow-alt-to-left:before { + content: "\f34b"; } + + .fa-arrow-alt-to-right:before { + content: "\f34c"; } + + .fa-arrow-alt-to-top:before { + content: "\f34d"; } + + .fa-arrow-alt-up:before { + content: "\f357"; } + + .fa-arrow-circle-down:before { + content: "\f0ab"; } + + .fa-arrow-circle-left:before { + content: "\f0a8"; } + + .fa-arrow-circle-right:before { + content: "\f0a9"; } + + .fa-arrow-circle-up:before { + content: "\f0aa"; } + + .fa-arrow-down:before { + content: "\f063"; } + + .fa-arrow-from-bottom:before { + content: "\f342"; } + + .fa-arrow-from-left:before { + content: "\f343"; } + + .fa-arrow-from-right:before { + content: "\f344"; } + + .fa-arrow-from-top:before { + content: "\f345"; } + + .fa-arrow-left:before { + content: "\f060"; } + + .fa-arrow-right:before { + content: "\f061"; } + + .fa-arrow-square-down:before { + content: "\f339"; } + + .fa-arrow-square-left:before { + content: "\f33a"; } + + .fa-arrow-square-right:before { + content: "\f33b"; } + + .fa-arrow-square-up:before { + content: "\f33c"; } + + .fa-arrow-to-bottom:before { + content: "\f33d"; } + + .fa-arrow-to-left:before { + content: "\f33e"; } + + .fa-arrow-to-right:before { + content: "\f340"; } + + .fa-arrow-to-top:before { + content: "\f341"; } + + .fa-arrow-up:before { + content: "\f062"; } + + .fa-arrows:before { + content: "\f047"; } + + .fa-arrows-alt:before { + content: "\f0b2"; } + + .fa-arrows-alt-h:before { + content: "\f337"; } + + .fa-arrows-alt-v:before { + content: "\f338"; } + + .fa-arrows-h:before { + content: "\f07e"; } + + .fa-arrows-v:before { + content: "\f07d"; } + + .fa-artstation:before { + content: "\f77a"; } + + .fa-assistive-listening-systems:before { + content: "\f2a2"; } + + .fa-asterisk:before { + content: "\f069"; } + + .fa-asymmetrik:before { + content: "\f372"; } + + .fa-at:before { + content: "\f1fa"; } + + .fa-atlas:before { + content: "\f558"; } + + .fa-atlassian:before { + content: "\f77b"; } + + .fa-atom:before { + content: "\f5d2"; } + + .fa-atom-alt:before { + content: "\f5d3"; } + + .fa-audible:before { + content: "\f373"; } + + .fa-audio-description:before { + content: "\f29e"; } + + .fa-autoprefixer:before { + content: "\f41c"; } + + .fa-avianex:before { + content: "\f374"; } + + .fa-aviato:before { + content: "\f421"; } + + .fa-award:before { + content: "\f559"; } + + .fa-aws:before { + content: "\f375"; } + + .fa-axe:before { + content: "\f6b2"; } + + .fa-axe-battle:before { + content: "\f6b3"; } + + .fa-baby:before { + content: "\f77c"; } + + .fa-baby-carriage:before { + content: "\f77d"; } + + .fa-backpack:before { + content: "\f5d4"; } + + .fa-backspace:before { + content: "\f55a"; } + + .fa-backward:before { + content: "\f04a"; } + + .fa-bacon:before { + content: "\f7e5"; } + + .fa-bacteria:before { + content: "\f959"; } + + .fa-bacterium:before { + content: "\f95a"; } + + .fa-badge:before { + content: "\f335"; } + + .fa-badge-check:before { + content: "\f336"; } + + .fa-badge-dollar:before { + content: "\f645"; } + + .fa-badge-percent:before { + content: "\f646"; } + + .fa-badge-sheriff:before { + content: "\f8a2"; } + + .fa-badger-honey:before { + content: "\f6b4"; } + + .fa-bags-shopping:before { + content: "\f847"; } + + .fa-bahai:before { + content: "\f666"; } + + .fa-balance-scale:before { + content: "\f24e"; } + + .fa-balance-scale-left:before { + content: "\f515"; } + + .fa-balance-scale-right:before { + content: "\f516"; } + + .fa-ball-pile:before { + content: "\f77e"; } + + .fa-ballot:before { + content: "\f732"; } + + .fa-ballot-check:before { + content: "\f733"; } + + .fa-ban:before { + content: "\f05e"; } + + .fa-band-aid:before { + content: "\f462"; } + + .fa-bandcamp:before { + content: "\f2d5"; } + + .fa-banjo:before { + content: "\f8a3"; } + + .fa-barcode:before { + content: "\f02a"; } + + .fa-barcode-alt:before { + content: "\f463"; } + + .fa-barcode-read:before { + content: "\f464"; } + + .fa-barcode-scan:before { + content: "\f465"; } + + .fa-bars:before { + content: "\f0c9"; } + + .fa-baseball:before { + content: "\f432"; } + + .fa-baseball-ball:before { + content: "\f433"; } + + .fa-basketball-ball:before { + content: "\f434"; } + + .fa-basketball-hoop:before { + content: "\f435"; } + + .fa-bat:before { + content: "\f6b5"; } + + .fa-bath:before { + content: "\f2cd"; } + + .fa-battery-bolt:before { + content: "\f376"; } + + .fa-battery-empty:before { + content: "\f244"; } + + .fa-battery-full:before { + content: "\f240"; } + + .fa-battery-half:before { + content: "\f242"; } + + .fa-battery-quarter:before { + content: "\f243"; } + + .fa-battery-slash:before { + content: "\f377"; } + + .fa-battery-three-quarters:before { + content: "\f241"; } + + .fa-battle-net:before { + content: "\f835"; } + + .fa-bed:before { + content: "\f236"; } + + .fa-bed-alt:before { + content: "\f8f7"; } + + .fa-bed-bunk:before { + content: "\f8f8"; } + + .fa-bed-empty:before { + content: "\f8f9"; } + + .fa-beer:before { + content: "\f0fc"; } + + .fa-behance:before { + content: "\f1b4"; } + + .fa-behance-square:before { + content: "\f1b5"; } + + .fa-bell:before { + content: "\f0f3"; } + + .fa-bell-exclamation:before { + content: "\f848"; } + + .fa-bell-on:before { + content: "\f8fa"; } + + .fa-bell-plus:before { + content: "\f849"; } + + .fa-bell-school:before { + content: "\f5d5"; } + + .fa-bell-school-slash:before { + content: "\f5d6"; } + + .fa-bell-slash:before { + content: "\f1f6"; } + + .fa-bells:before { + content: "\f77f"; } + + .fa-betamax:before { + content: "\f8a4"; } + + .fa-bezier-curve:before { + content: "\f55b"; } + + .fa-bible:before { + content: "\f647"; } + + .fa-bicycle:before { + content: "\f206"; } + + .fa-biking:before { + content: "\f84a"; } + + .fa-biking-mountain:before { + content: "\f84b"; } + + .fa-bimobject:before { + content: "\f378"; } + + .fa-binoculars:before { + content: "\f1e5"; } + + .fa-biohazard:before { + content: "\f780"; } + + .fa-birthday-cake:before { + content: "\f1fd"; } + + .fa-bitbucket:before { + content: "\f171"; } + + .fa-bitcoin:before { + content: "\f379"; } + + .fa-bity:before { + content: "\f37a"; } + + .fa-black-tie:before { + content: "\f27e"; } + + .fa-blackberry:before { + content: "\f37b"; } + + .fa-blanket:before { + content: "\f498"; } + + .fa-blender:before { + content: "\f517"; } + + .fa-blender-phone:before { + content: "\f6b6"; } + + .fa-blind:before { + content: "\f29d"; } + + .fa-blinds:before { + content: "\f8fb"; } + + .fa-blinds-open:before { + content: "\f8fc"; } + + .fa-blinds-raised:before { + content: "\f8fd"; } + + .fa-blog:before { + content: "\f781"; } + + .fa-blogger:before { + content: "\f37c"; } + + .fa-blogger-b:before { + content: "\f37d"; } + + .fa-bluetooth:before { + content: "\f293"; } + + .fa-bluetooth-b:before { + content: "\f294"; } + + .fa-bold:before { + content: "\f032"; } + + .fa-bolt:before { + content: "\f0e7"; } + + .fa-bomb:before { + content: "\f1e2"; } + + .fa-bone:before { + content: "\f5d7"; } + + .fa-bone-break:before { + content: "\f5d8"; } + + .fa-bong:before { + content: "\f55c"; } + + .fa-book:before { + content: "\f02d"; } + + .fa-book-alt:before { + content: "\f5d9"; } + + .fa-book-dead:before { + content: "\f6b7"; } + + .fa-book-heart:before { + content: "\f499"; } + + .fa-book-medical:before { + content: "\f7e6"; } + + .fa-book-open:before { + content: "\f518"; } + + .fa-book-reader:before { + content: "\f5da"; } + + .fa-book-spells:before { + content: "\f6b8"; } + + .fa-book-user:before { + content: "\f7e7"; } + + .fa-bookmark:before { + content: "\f02e"; } + + .fa-books:before { + content: "\f5db"; } + + .fa-books-medical:before { + content: "\f7e8"; } + + .fa-boombox:before { + content: "\f8a5"; } + + .fa-boot:before { + content: "\f782"; } + + .fa-booth-curtain:before { + content: "\f734"; } + + .fa-bootstrap:before { + content: "\f836"; } + + .fa-border-all:before { + content: "\f84c"; } + + .fa-border-bottom:before { + content: "\f84d"; } + + .fa-border-center-h:before { + content: "\f89c"; } + + .fa-border-center-v:before { + content: "\f89d"; } + + .fa-border-inner:before { + content: "\f84e"; } + + .fa-border-left:before { + content: "\f84f"; } + + .fa-border-none:before { + content: "\f850"; } + + .fa-border-outer:before { + content: "\f851"; } + + .fa-border-right:before { + content: "\f852"; } + + .fa-border-style:before { + content: "\f853"; } + + .fa-border-style-alt:before { + content: "\f854"; } + + .fa-border-top:before { + content: "\f855"; } + + .fa-bow-arrow:before { + content: "\f6b9"; } + + .fa-bowling-ball:before { + content: "\f436"; } + + .fa-bowling-pins:before { + content: "\f437"; } + + .fa-box:before { + content: "\f466"; } + + .fa-box-alt:before { + content: "\f49a"; } + + .fa-box-ballot:before { + content: "\f735"; } + + .fa-box-check:before { + content: "\f467"; } + + .fa-box-fragile:before { + content: "\f49b"; } + + .fa-box-full:before { + content: "\f49c"; } + + .fa-box-heart:before { + content: "\f49d"; } + + .fa-box-open:before { + content: "\f49e"; } + + .fa-box-tissue:before { + content: "\f95b"; } + + .fa-box-up:before { + content: "\f49f"; } + + .fa-box-usd:before { + content: "\f4a0"; } + + .fa-boxes:before { + content: "\f468"; } + + .fa-boxes-alt:before { + content: "\f4a1"; } + + .fa-boxing-glove:before { + content: "\f438"; } + + .fa-brackets:before { + content: "\f7e9"; } + + .fa-brackets-curly:before { + content: "\f7ea"; } + + .fa-braille:before { + content: "\f2a1"; } + + .fa-brain:before { + content: "\f5dc"; } + + .fa-bread-loaf:before { + content: "\f7eb"; } + + .fa-bread-slice:before { + content: "\f7ec"; } + + .fa-briefcase:before { + content: "\f0b1"; } + + .fa-briefcase-medical:before { + content: "\f469"; } + + .fa-bring-forward:before { + content: "\f856"; } + + .fa-bring-front:before { + content: "\f857"; } + + .fa-broadcast-tower:before { + content: "\f519"; } + + .fa-broom:before { + content: "\f51a"; } + + .fa-browser:before { + content: "\f37e"; } + + .fa-brush:before { + content: "\f55d"; } + + .fa-btc:before { + content: "\f15a"; } + + .fa-buffer:before { + content: "\f837"; } + + .fa-bug:before { + content: "\f188"; } + + .fa-building:before { + content: "\f1ad"; } + + .fa-bullhorn:before { + content: "\f0a1"; } + + .fa-bullseye:before { + content: "\f140"; } + + .fa-bullseye-arrow:before { + content: "\f648"; } + + .fa-bullseye-pointer:before { + content: "\f649"; } + + .fa-burger-soda:before { + content: "\f858"; } + + .fa-burn:before { + content: "\f46a"; } + + .fa-buromobelexperte:before { + content: "\f37f"; } + + .fa-burrito:before { + content: "\f7ed"; } + + .fa-bus:before { + content: "\f207"; } + + .fa-bus-alt:before { + content: "\f55e"; } + + .fa-bus-school:before { + content: "\f5dd"; } + + .fa-business-time:before { + content: "\f64a"; } + + .fa-buy-n-large:before { + content: "\f8a6"; } + + .fa-buysellads:before { + content: "\f20d"; } + + .fa-cabinet-filing:before { + content: "\f64b"; } + + .fa-cactus:before { + content: "\f8a7"; } + + .fa-calculator:before { + content: "\f1ec"; } + + .fa-calculator-alt:before { + content: "\f64c"; } + + .fa-calendar:before { + content: "\f133"; } + + .fa-calendar-alt:before { + content: "\f073"; } + + .fa-calendar-check:before { + content: "\f274"; } + + .fa-calendar-day:before { + content: "\f783"; } + + .fa-calendar-edit:before { + content: "\f333"; } + + .fa-calendar-exclamation:before { + content: "\f334"; } + + .fa-calendar-minus:before { + content: "\f272"; } + + .fa-calendar-plus:before { + content: "\f271"; } + + .fa-calendar-star:before { + content: "\f736"; } + + .fa-calendar-times:before { + content: "\f273"; } + + .fa-calendar-week:before { + content: "\f784"; } + + .fa-camcorder:before { + content: "\f8a8"; } + + .fa-camera:before { + content: "\f030"; } + + .fa-camera-alt:before { + content: "\f332"; } + + .fa-camera-home:before { + content: "\f8fe"; } + + .fa-camera-movie:before { + content: "\f8a9"; } + + .fa-camera-polaroid:before { + content: "\f8aa"; } + + .fa-camera-retro:before { + content: "\f083"; } + + .fa-campfire:before { + content: "\f6ba"; } + + .fa-campground:before { + content: "\f6bb"; } + + .fa-canadian-maple-leaf:before { + content: "\f785"; } + + .fa-candle-holder:before { + content: "\f6bc"; } + + .fa-candy-cane:before { + content: "\f786"; } + + .fa-candy-corn:before { + content: "\f6bd"; } + + .fa-cannabis:before { + content: "\f55f"; } + + .fa-capsules:before { + content: "\f46b"; } + + .fa-car:before { + content: "\f1b9"; } + + .fa-car-alt:before { + content: "\f5de"; } + + .fa-car-battery:before { + content: "\f5df"; } + + .fa-car-building:before { + content: "\f859"; } + + .fa-car-bump:before { + content: "\f5e0"; } + + .fa-car-bus:before { + content: "\f85a"; } + + .fa-car-crash:before { + content: "\f5e1"; } + + .fa-car-garage:before { + content: "\f5e2"; } + + .fa-car-mechanic:before { + content: "\f5e3"; } + + .fa-car-side:before { + content: "\f5e4"; } + + .fa-car-tilt:before { + content: "\f5e5"; } + + .fa-car-wash:before { + content: "\f5e6"; } + + .fa-caravan:before { + content: "\f8ff"; } + + .fa-caravan-alt:before { + content: "\f900"; } + + .fa-caret-circle-down:before { + content: "\f32d"; } + + .fa-caret-circle-left:before { + content: "\f32e"; } + + .fa-caret-circle-right:before { + content: "\f330"; } + + .fa-caret-circle-up:before { + content: "\f331"; } + + .fa-caret-down:before { + content: "\f0d7"; } + + .fa-caret-left:before { + content: "\f0d9"; } + + .fa-caret-right:before { + content: "\f0da"; } + + .fa-caret-square-down:before { + content: "\f150"; } + + .fa-caret-square-left:before { + content: "\f191"; } + + .fa-caret-square-right:before { + content: "\f152"; } + + .fa-caret-square-up:before { + content: "\f151"; } + + .fa-caret-up:before { + content: "\f0d8"; } + + .fa-carrot:before { + content: "\f787"; } + + .fa-cars:before { + content: "\f85b"; } + + .fa-cart-arrow-down:before { + content: "\f218"; } + + .fa-cart-plus:before { + content: "\f217"; } + + .fa-cash-register:before { + content: "\f788"; } + + .fa-cassette-tape:before { + content: "\f8ab"; } + + .fa-cat:before { + content: "\f6be"; } + + .fa-cat-space:before { + content: "\f901"; } + + .fa-cauldron:before { + content: "\f6bf"; } + + .fa-cc-amazon-pay:before { + content: "\f42d"; } + + .fa-cc-amex:before { + content: "\f1f3"; } + + .fa-cc-apple-pay:before { + content: "\f416"; } + + .fa-cc-diners-club:before { + content: "\f24c"; } + + .fa-cc-discover:before { + content: "\f1f2"; } + + .fa-cc-jcb:before { + content: "\f24b"; } + + .fa-cc-mastercard:before { + content: "\f1f1"; } + + .fa-cc-paypal:before { + content: "\f1f4"; } + + .fa-cc-stripe:before { + content: "\f1f5"; } + + .fa-cc-visa:before { + content: "\f1f0"; } + + .fa-cctv:before { + content: "\f8ac"; } + + .fa-centercode:before { + content: "\f380"; } + + .fa-centos:before { + content: "\f789"; } + + .fa-certificate:before { + content: "\f0a3"; } + + .fa-chair:before { + content: "\f6c0"; } + + .fa-chair-office:before { + content: "\f6c1"; } + + .fa-chalkboard:before { + content: "\f51b"; } + + .fa-chalkboard-teacher:before { + content: "\f51c"; } + + .fa-charging-station:before { + content: "\f5e7"; } + + .fa-chart-area:before { + content: "\f1fe"; } + + .fa-chart-bar:before { + content: "\f080"; } + + .fa-chart-line:before { + content: "\f201"; } + + .fa-chart-line-down:before { + content: "\f64d"; } + + .fa-chart-network:before { + content: "\f78a"; } + + .fa-chart-pie:before { + content: "\f200"; } + + .fa-chart-pie-alt:before { + content: "\f64e"; } + + .fa-chart-scatter:before { + content: "\f7ee"; } + + .fa-check:before { + content: "\f00c"; } + + .fa-check-circle:before { + content: "\f058"; } + + .fa-check-double:before { + content: "\f560"; } + + .fa-check-square:before { + content: "\f14a"; } + + .fa-cheese:before { + content: "\f7ef"; } + + .fa-cheese-swiss:before { + content: "\f7f0"; } + + .fa-cheeseburger:before { + content: "\f7f1"; } + + .fa-chess:before { + content: "\f439"; } + + .fa-chess-bishop:before { + content: "\f43a"; } + + .fa-chess-bishop-alt:before { + content: "\f43b"; } + + .fa-chess-board:before { + content: "\f43c"; } + + .fa-chess-clock:before { + content: "\f43d"; } + + .fa-chess-clock-alt:before { + content: "\f43e"; } + + .fa-chess-king:before { + content: "\f43f"; } + + .fa-chess-king-alt:before { + content: "\f440"; } + + .fa-chess-knight:before { + content: "\f441"; } + + .fa-chess-knight-alt:before { + content: "\f442"; } + + .fa-chess-pawn:before { + content: "\f443"; } + + .fa-chess-pawn-alt:before { + content: "\f444"; } + + .fa-chess-queen:before { + content: "\f445"; } + + .fa-chess-queen-alt:before { + content: "\f446"; } + + .fa-chess-rook:before { + content: "\f447"; } + + .fa-chess-rook-alt:before { + content: "\f448"; } + + .fa-chevron-circle-down:before { + content: "\f13a"; } + + .fa-chevron-circle-left:before { + content: "\f137"; } + + .fa-chevron-circle-right:before { + content: "\f138"; } + + .fa-chevron-circle-up:before { + content: "\f139"; } + + .fa-chevron-double-down:before { + content: "\f322"; } + + .fa-chevron-double-left:before { + content: "\f323"; } + + .fa-chevron-double-right:before { + content: "\f324"; } + + .fa-chevron-double-up:before { + content: "\f325"; } + + .fa-chevron-down:before { + content: "\f078"; } + + .fa-chevron-left:before { + content: "\f053"; } + + .fa-chevron-right:before { + content: "\f054"; } + + .fa-chevron-square-down:before { + content: "\f329"; } + + .fa-chevron-square-left:before { + content: "\f32a"; } + + .fa-chevron-square-right:before { + content: "\f32b"; } + + .fa-chevron-square-up:before { + content: "\f32c"; } + + .fa-chevron-up:before { + content: "\f077"; } + + .fa-child:before { + content: "\f1ae"; } + + .fa-chimney:before { + content: "\f78b"; } + + .fa-chrome:before { + content: "\f268"; } + + .fa-chromecast:before { + content: "\f838"; } + + .fa-church:before { + content: "\f51d"; } + + .fa-circle:before { + content: "\f111"; } + + .fa-circle-notch:before { + content: "\f1ce"; } + + .fa-city:before { + content: "\f64f"; } + + .fa-clarinet:before { + content: "\f8ad"; } + + .fa-claw-marks:before { + content: "\f6c2"; } + + .fa-clinic-medical:before { + content: "\f7f2"; } + + .fa-clipboard:before { + content: "\f328"; } + + .fa-clipboard-check:before { + content: "\f46c"; } + + .fa-clipboard-list:before { + content: "\f46d"; } + + .fa-clipboard-list-check:before { + content: "\f737"; } + + .fa-clipboard-prescription:before { + content: "\f5e8"; } + + .fa-clipboard-user:before { + content: "\f7f3"; } + + .fa-clock:before { + content: "\f017"; } + + .fa-clone:before { + content: "\f24d"; } + + .fa-closed-captioning:before { + content: "\f20a"; } + + .fa-cloud:before { + content: "\f0c2"; } + + .fa-cloud-download:before { + content: "\f0ed"; } + + .fa-cloud-download-alt:before { + content: "\f381"; } + + .fa-cloud-drizzle:before { + content: "\f738"; } + + .fa-cloud-hail:before { + content: "\f739"; } + + .fa-cloud-hail-mixed:before { + content: "\f73a"; } + + .fa-cloud-meatball:before { + content: "\f73b"; } + + .fa-cloud-moon:before { + content: "\f6c3"; } + + .fa-cloud-moon-rain:before { + content: "\f73c"; } + + .fa-cloud-music:before { + content: "\f8ae"; } + + .fa-cloud-rain:before { + content: "\f73d"; } + + .fa-cloud-rainbow:before { + content: "\f73e"; } + + .fa-cloud-showers:before { + content: "\f73f"; } + + .fa-cloud-showers-heavy:before { + content: "\f740"; } + + .fa-cloud-sleet:before { + content: "\f741"; } + + .fa-cloud-snow:before { + content: "\f742"; } + + .fa-cloud-sun:before { + content: "\f6c4"; } + + .fa-cloud-sun-rain:before { + content: "\f743"; } + + .fa-cloud-upload:before { + content: "\f0ee"; } + + .fa-cloud-upload-alt:before { + content: "\f382"; } + + .fa-clouds:before { + content: "\f744"; } + + .fa-clouds-moon:before { + content: "\f745"; } + + .fa-clouds-sun:before { + content: "\f746"; } + + .fa-cloudscale:before { + content: "\f383"; } + + .fa-cloudsmith:before { + content: "\f384"; } + + .fa-cloudversify:before { + content: "\f385"; } + + .fa-club:before { + content: "\f327"; } + + .fa-cocktail:before { + content: "\f561"; } + + .fa-code:before { + content: "\f121"; } + + .fa-code-branch:before { + content: "\f126"; } + + .fa-code-commit:before { + content: "\f386"; } + + .fa-code-merge:before { + content: "\f387"; } + + .fa-codepen:before { + content: "\f1cb"; } + + .fa-codiepie:before { + content: "\f284"; } + + .fa-coffee:before { + content: "\f0f4"; } + + .fa-coffee-pot:before { + content: "\f902"; } + + .fa-coffee-togo:before { + content: "\f6c5"; } + + .fa-coffin:before { + content: "\f6c6"; } + + .fa-coffin-cross:before { + content: "\f951"; } + + .fa-cog:before { + content: "\f013"; } + + .fa-cogs:before { + content: "\f085"; } + + .fa-coin:before { + content: "\f85c"; } + + .fa-coins:before { + content: "\f51e"; } + + .fa-columns:before { + content: "\f0db"; } + + .fa-comet:before { + content: "\f903"; } + + .fa-comment:before { + content: "\f075"; } + + .fa-comment-alt:before { + content: "\f27a"; } + + .fa-comment-alt-check:before { + content: "\f4a2"; } + + .fa-comment-alt-dollar:before { + content: "\f650"; } + + .fa-comment-alt-dots:before { + content: "\f4a3"; } + + .fa-comment-alt-edit:before { + content: "\f4a4"; } + + .fa-comment-alt-exclamation:before { + content: "\f4a5"; } + + .fa-comment-alt-lines:before { + content: "\f4a6"; } + + .fa-comment-alt-medical:before { + content: "\f7f4"; } + + .fa-comment-alt-minus:before { + content: "\f4a7"; } + + .fa-comment-alt-music:before { + content: "\f8af"; } + + .fa-comment-alt-plus:before { + content: "\f4a8"; } + + .fa-comment-alt-slash:before { + content: "\f4a9"; } + + .fa-comment-alt-smile:before { + content: "\f4aa"; } + + .fa-comment-alt-times:before { + content: "\f4ab"; } + + .fa-comment-check:before { + content: "\f4ac"; } + + .fa-comment-dollar:before { + content: "\f651"; } + + .fa-comment-dots:before { + content: "\f4ad"; } + + .fa-comment-edit:before { + content: "\f4ae"; } + + .fa-comment-exclamation:before { + content: "\f4af"; } + + .fa-comment-lines:before { + content: "\f4b0"; } + + .fa-comment-medical:before { + content: "\f7f5"; } + + .fa-comment-minus:before { + content: "\f4b1"; } + + .fa-comment-music:before { + content: "\f8b0"; } + + .fa-comment-plus:before { + content: "\f4b2"; } + + .fa-comment-slash:before { + content: "\f4b3"; } + + .fa-comment-smile:before { + content: "\f4b4"; } + + .fa-comment-times:before { + content: "\f4b5"; } + + .fa-comments:before { + content: "\f086"; } + + .fa-comments-alt:before { + content: "\f4b6"; } + + .fa-comments-alt-dollar:before { + content: "\f652"; } + + .fa-comments-dollar:before { + content: "\f653"; } + + .fa-compact-disc:before { + content: "\f51f"; } + + .fa-compass:before { + content: "\f14e"; } + + .fa-compass-slash:before { + content: "\f5e9"; } + + .fa-compress:before { + content: "\f066"; } + + .fa-compress-alt:before { + content: "\f422"; } + + .fa-compress-arrows-alt:before { + content: "\f78c"; } + + .fa-compress-wide:before { + content: "\f326"; } + + .fa-computer-classic:before { + content: "\f8b1"; } + + .fa-computer-speaker:before { + content: "\f8b2"; } + + .fa-concierge-bell:before { + content: "\f562"; } + + .fa-confluence:before { + content: "\f78d"; } + + .fa-connectdevelop:before { + content: "\f20e"; } + + .fa-construction:before { + content: "\f85d"; } + + .fa-container-storage:before { + content: "\f4b7"; } + + .fa-contao:before { + content: "\f26d"; } + + .fa-conveyor-belt:before { + content: "\f46e"; } + + .fa-conveyor-belt-alt:before { + content: "\f46f"; } + + .fa-cookie:before { + content: "\f563"; } + + .fa-cookie-bite:before { + content: "\f564"; } + + .fa-copy:before { + content: "\f0c5"; } + + .fa-copyright:before { + content: "\f1f9"; } + + .fa-corn:before { + content: "\f6c7"; } + + .fa-cotton-bureau:before { + content: "\f89e"; } + + .fa-couch:before { + content: "\f4b8"; } + + .fa-cow:before { + content: "\f6c8"; } + + .fa-cowbell:before { + content: "\f8b3"; } + + .fa-cowbell-more:before { + content: "\f8b4"; } + + .fa-cpanel:before { + content: "\f388"; } + + .fa-creative-commons:before { + content: "\f25e"; } + + .fa-creative-commons-by:before { + content: "\f4e7"; } + + .fa-creative-commons-nc:before { + content: "\f4e8"; } + + .fa-creative-commons-nc-eu:before { + content: "\f4e9"; } + + .fa-creative-commons-nc-jp:before { + content: "\f4ea"; } + + .fa-creative-commons-nd:before { + content: "\f4eb"; } + + .fa-creative-commons-pd:before { + content: "\f4ec"; } + + .fa-creative-commons-pd-alt:before { + content: "\f4ed"; } + + .fa-creative-commons-remix:before { + content: "\f4ee"; } + + .fa-creative-commons-sa:before { + content: "\f4ef"; } + + .fa-creative-commons-sampling:before { + content: "\f4f0"; } + + .fa-creative-commons-sampling-plus:before { + content: "\f4f1"; } + + .fa-creative-commons-share:before { + content: "\f4f2"; } + + .fa-creative-commons-zero:before { + content: "\f4f3"; } + + .fa-credit-card:before { + content: "\f09d"; } + + .fa-credit-card-blank:before { + content: "\f389"; } + + .fa-credit-card-front:before { + content: "\f38a"; } + + .fa-cricket:before { + content: "\f449"; } + + .fa-critical-role:before { + content: "\f6c9"; } + + .fa-croissant:before { + content: "\f7f6"; } + + .fa-crop:before { + content: "\f125"; } + + .fa-crop-alt:before { + content: "\f565"; } + + .fa-cross:before { + content: "\f654"; } + + .fa-crosshairs:before { + content: "\f05b"; } + + .fa-crow:before { + content: "\f520"; } + + .fa-crown:before { + content: "\f521"; } + + .fa-crutch:before { + content: "\f7f7"; } + + .fa-crutches:before { + content: "\f7f8"; } + + .fa-css3:before { + content: "\f13c"; } + + .fa-css3-alt:before { + content: "\f38b"; } + + .fa-cube:before { + content: "\f1b2"; } + + .fa-cubes:before { + content: "\f1b3"; } + + .fa-curling:before { + content: "\f44a"; } + + .fa-cut:before { + content: "\f0c4"; } + + .fa-cuttlefish:before { + content: "\f38c"; } + + .fa-d-and-d:before { + content: "\f38d"; } + + .fa-d-and-d-beyond:before { + content: "\f6ca"; } + + .fa-dagger:before { + content: "\f6cb"; } + + .fa-dailymotion:before { + content: "\f952"; } + + .fa-dashcube:before { + content: "\f210"; } + + .fa-database:before { + content: "\f1c0"; } + + .fa-deaf:before { + content: "\f2a4"; } + + .fa-debug:before { + content: "\f7f9"; } + + .fa-deer:before { + content: "\f78e"; } + + .fa-deer-rudolph:before { + content: "\f78f"; } + + .fa-delicious:before { + content: "\f1a5"; } + + .fa-democrat:before { + content: "\f747"; } + + .fa-deploydog:before { + content: "\f38e"; } + + .fa-deskpro:before { + content: "\f38f"; } + + .fa-desktop:before { + content: "\f108"; } + + .fa-desktop-alt:before { + content: "\f390"; } + + .fa-dev:before { + content: "\f6cc"; } + + .fa-deviantart:before { + content: "\f1bd"; } + + .fa-dewpoint:before { + content: "\f748"; } + + .fa-dharmachakra:before { + content: "\f655"; } + + .fa-dhl:before { + content: "\f790"; } + + .fa-diagnoses:before { + content: "\f470"; } + + .fa-diamond:before { + content: "\f219"; } + + .fa-diaspora:before { + content: "\f791"; } + + .fa-dice:before { + content: "\f522"; } + + .fa-dice-d10:before { + content: "\f6cd"; } + + .fa-dice-d12:before { + content: "\f6ce"; } + + .fa-dice-d20:before { + content: "\f6cf"; } + + .fa-dice-d4:before { + content: "\f6d0"; } + + .fa-dice-d6:before { + content: "\f6d1"; } + + .fa-dice-d8:before { + content: "\f6d2"; } + + .fa-dice-five:before { + content: "\f523"; } + + .fa-dice-four:before { + content: "\f524"; } + + .fa-dice-one:before { + content: "\f525"; } + + .fa-dice-six:before { + content: "\f526"; } + + .fa-dice-three:before { + content: "\f527"; } + + .fa-dice-two:before { + content: "\f528"; } + + .fa-digg:before { + content: "\f1a6"; } + + .fa-digging:before { + content: "\f85e"; } + + .fa-digital-ocean:before { + content: "\f391"; } + + .fa-digital-tachograph:before { + content: "\f566"; } + + .fa-diploma:before { + content: "\f5ea"; } + + .fa-directions:before { + content: "\f5eb"; } + + .fa-disc-drive:before { + content: "\f8b5"; } + + .fa-discord:before { + content: "\f392"; } + + .fa-discourse:before { + content: "\f393"; } + + .fa-disease:before { + content: "\f7fa"; } + + .fa-divide:before { + content: "\f529"; } + + .fa-dizzy:before { + content: "\f567"; } + + .fa-dna:before { + content: "\f471"; } + + .fa-do-not-enter:before { + content: "\f5ec"; } + + .fa-dochub:before { + content: "\f394"; } + + .fa-docker:before { + content: "\f395"; } + + .fa-dog:before { + content: "\f6d3"; } + + .fa-dog-leashed:before { + content: "\f6d4"; } + + .fa-dollar-sign:before { + content: "\f155"; } + + .fa-dolly:before { + content: "\f472"; } + + .fa-dolly-empty:before { + content: "\f473"; } + + .fa-dolly-flatbed:before { + content: "\f474"; } + + .fa-dolly-flatbed-alt:before { + content: "\f475"; } + + .fa-dolly-flatbed-empty:before { + content: "\f476"; } + + .fa-donate:before { + content: "\f4b9"; } + + .fa-door-closed:before { + content: "\f52a"; } + + .fa-door-open:before { + content: "\f52b"; } + + .fa-dot-circle:before { + content: "\f192"; } + + .fa-dove:before { + content: "\f4ba"; } + + .fa-download:before { + content: "\f019"; } + + .fa-draft2digital:before { + content: "\f396"; } + + .fa-drafting-compass:before { + content: "\f568"; } + + .fa-dragon:before { + content: "\f6d5"; } + + .fa-draw-circle:before { + content: "\f5ed"; } + + .fa-draw-polygon:before { + content: "\f5ee"; } + + .fa-draw-square:before { + content: "\f5ef"; } + + .fa-dreidel:before { + content: "\f792"; } + + .fa-dribbble:before { + content: "\f17d"; } + + .fa-dribbble-square:before { + content: "\f397"; } + + .fa-drone:before { + content: "\f85f"; } + + .fa-drone-alt:before { + content: "\f860"; } + + .fa-dropbox:before { + content: "\f16b"; } + + .fa-drum:before { + content: "\f569"; } + + .fa-drum-steelpan:before { + content: "\f56a"; } + + .fa-drumstick:before { + content: "\f6d6"; } + + .fa-drumstick-bite:before { + content: "\f6d7"; } + + .fa-drupal:before { + content: "\f1a9"; } + + .fa-dryer:before { + content: "\f861"; } + + .fa-dryer-alt:before { + content: "\f862"; } + + .fa-duck:before { + content: "\f6d8"; } + + .fa-dumbbell:before { + content: "\f44b"; } + + .fa-dumpster:before { + content: "\f793"; } + + .fa-dumpster-fire:before { + content: "\f794"; } + + .fa-dungeon:before { + content: "\f6d9"; } + + .fa-dyalog:before { + content: "\f399"; } + + .fa-ear:before { + content: "\f5f0"; } + + .fa-ear-muffs:before { + content: "\f795"; } + + .fa-earlybirds:before { + content: "\f39a"; } + + .fa-ebay:before { + content: "\f4f4"; } + + .fa-eclipse:before { + content: "\f749"; } + + .fa-eclipse-alt:before { + content: "\f74a"; } + + .fa-edge:before { + content: "\f282"; } + + .fa-edit:before { + content: "\f044"; } + + .fa-egg:before { + content: "\f7fb"; } + + .fa-egg-fried:before { + content: "\f7fc"; } + + .fa-eject:before { + content: "\f052"; } + + .fa-elementor:before { + content: "\f430"; } + + .fa-elephant:before { + content: "\f6da"; } + + .fa-ellipsis-h:before { + content: "\f141"; } + + .fa-ellipsis-h-alt:before { + content: "\f39b"; } + + .fa-ellipsis-v:before { + content: "\f142"; } + + .fa-ellipsis-v-alt:before { + content: "\f39c"; } + + .fa-ello:before { + content: "\f5f1"; } + + .fa-ember:before { + content: "\f423"; } + + .fa-empire:before { + content: "\f1d1"; } + + .fa-empty-set:before { + content: "\f656"; } + + .fa-engine-warning:before { + content: "\f5f2"; } + + .fa-envelope:before { + content: "\f0e0"; } + + .fa-envelope-open:before { + content: "\f2b6"; } + + .fa-envelope-open-dollar:before { + content: "\f657"; } + + .fa-envelope-open-text:before { + content: "\f658"; } + + .fa-envelope-square:before { + content: "\f199"; } + + .fa-envira:before { + content: "\f299"; } + + .fa-equals:before { + content: "\f52c"; } + + .fa-eraser:before { + content: "\f12d"; } + + .fa-erlang:before { + content: "\f39d"; } + + .fa-ethereum:before { + content: "\f42e"; } + + .fa-ethernet:before { + content: "\f796"; } + + .fa-etsy:before { + content: "\f2d7"; } + + .fa-euro-sign:before { + content: "\f153"; } + + .fa-evernote:before { + content: "\f839"; } + + .fa-exchange:before { + content: "\f0ec"; } + + .fa-exchange-alt:before { + content: "\f362"; } + + .fa-exclamation:before { + content: "\f12a"; } + + .fa-exclamation-circle:before { + content: "\f06a"; } + + .fa-exclamation-square:before { + content: "\f321"; } + + .fa-exclamation-triangle:before { + content: "\f071"; } + + .fa-expand:before { + content: "\f065"; } + + .fa-expand-alt:before { + content: "\f424"; } + + .fa-expand-arrows:before { + content: "\f31d"; } + + .fa-expand-arrows-alt:before { + content: "\f31e"; } + + .fa-expand-wide:before { + content: "\f320"; } + + .fa-expeditedssl:before { + content: "\f23e"; } + + .fa-external-link:before { + content: "\f08e"; } + + .fa-external-link-alt:before { + content: "\f35d"; } + + .fa-external-link-square:before { + content: "\f14c"; } + + .fa-external-link-square-alt:before { + content: "\f360"; } + + .fa-eye:before { + content: "\f06e"; } + + .fa-eye-dropper:before { + content: "\f1fb"; } + + .fa-eye-evil:before { + content: "\f6db"; } + + .fa-eye-slash:before { + content: "\f070"; } + + .fa-facebook:before { + content: "\f09a"; } + + .fa-facebook-f:before { + content: "\f39e"; } + + .fa-facebook-messenger:before { + content: "\f39f"; } + + .fa-facebook-square:before { + content: "\f082"; } + + .fa-fan:before { + content: "\f863"; } + + .fa-fan-table:before { + content: "\f904"; } + + .fa-fantasy-flight-games:before { + content: "\f6dc"; } + + .fa-farm:before { + content: "\f864"; } + + .fa-fast-backward:before { + content: "\f049"; } + + .fa-fast-forward:before { + content: "\f050"; } + + .fa-faucet:before { + content: "\f905"; } + + .fa-faucet-drip:before { + content: "\f906"; } + + .fa-fax:before { + content: "\f1ac"; } + + .fa-feather:before { + content: "\f52d"; } + + .fa-feather-alt:before { + content: "\f56b"; } + + .fa-fedex:before { + content: "\f797"; } + + .fa-fedora:before { + content: "\f798"; } + + .fa-female:before { + content: "\f182"; } + + .fa-field-hockey:before { + content: "\f44c"; } + + .fa-fighter-jet:before { + content: "\f0fb"; } + + .fa-figma:before { + content: "\f799"; } + + .fa-file:before { + content: "\f15b"; } + + .fa-file-alt:before { + content: "\f15c"; } + + .fa-file-archive:before { + content: "\f1c6"; } + + .fa-file-audio:before { + content: "\f1c7"; } + + .fa-file-certificate:before { + content: "\f5f3"; } + + .fa-file-chart-line:before { + content: "\f659"; } + + .fa-file-chart-pie:before { + content: "\f65a"; } + + .fa-file-check:before { + content: "\f316"; } + + .fa-file-code:before { + content: "\f1c9"; } + + .fa-file-contract:before { + content: "\f56c"; } + + .fa-file-csv:before { + content: "\f6dd"; } + + .fa-file-download:before { + content: "\f56d"; } + + .fa-file-edit:before { + content: "\f31c"; } + + .fa-file-excel:before { + content: "\f1c3"; } + + .fa-file-exclamation:before { + content: "\f31a"; } + + .fa-file-export:before { + content: "\f56e"; } + + .fa-file-image:before { + content: "\f1c5"; } + + .fa-file-import:before { + content: "\f56f"; } + + .fa-file-invoice:before { + content: "\f570"; } + + .fa-file-invoice-dollar:before { + content: "\f571"; } + + .fa-file-medical:before { + content: "\f477"; } + + .fa-file-medical-alt:before { + content: "\f478"; } + + .fa-file-minus:before { + content: "\f318"; } + + .fa-file-music:before { + content: "\f8b6"; } + + .fa-file-pdf:before { + content: "\f1c1"; } + + .fa-file-plus:before { + content: "\f319"; } + + .fa-file-powerpoint:before { + content: "\f1c4"; } + + .fa-file-prescription:before { + content: "\f572"; } + + .fa-file-search:before { + content: "\f865"; } + + .fa-file-signature:before { + content: "\f573"; } + + .fa-file-spreadsheet:before { + content: "\f65b"; } + + .fa-file-times:before { + content: "\f317"; } + + .fa-file-upload:before { + content: "\f574"; } + + .fa-file-user:before { + content: "\f65c"; } + + .fa-file-video:before { + content: "\f1c8"; } + + .fa-file-word:before { + content: "\f1c2"; } + + .fa-files-medical:before { + content: "\f7fd"; } + + .fa-fill:before { + content: "\f575"; } + + .fa-fill-drip:before { + content: "\f576"; } + + .fa-film:before { + content: "\f008"; } + + .fa-film-alt:before { + content: "\f3a0"; } + + .fa-film-canister:before { + content: "\f8b7"; } + + .fa-filter:before { + content: "\f0b0"; } + + .fa-fingerprint:before { + content: "\f577"; } + + .fa-fire:before { + content: "\f06d"; } + + .fa-fire-alt:before { + content: "\f7e4"; } + + .fa-fire-extinguisher:before { + content: "\f134"; } + + .fa-fire-smoke:before { + content: "\f74b"; } + + .fa-firefox:before { + content: "\f269"; } + + .fa-firefox-browser:before { + content: "\f907"; } + + .fa-fireplace:before { + content: "\f79a"; } + + .fa-first-aid:before { + content: "\f479"; } + + .fa-first-order:before { + content: "\f2b0"; } + + .fa-first-order-alt:before { + content: "\f50a"; } + + .fa-firstdraft:before { + content: "\f3a1"; } + + .fa-fish:before { + content: "\f578"; } + + .fa-fish-cooked:before { + content: "\f7fe"; } + + .fa-fist-raised:before { + content: "\f6de"; } + + .fa-flag:before { + content: "\f024"; } + + .fa-flag-alt:before { + content: "\f74c"; } + + .fa-flag-checkered:before { + content: "\f11e"; } + + .fa-flag-usa:before { + content: "\f74d"; } + + .fa-flame:before { + content: "\f6df"; } + + .fa-flashlight:before { + content: "\f8b8"; } + + .fa-flask:before { + content: "\f0c3"; } + + .fa-flask-poison:before { + content: "\f6e0"; } + + .fa-flask-potion:before { + content: "\f6e1"; } + + .fa-flickr:before { + content: "\f16e"; } + + .fa-flipboard:before { + content: "\f44d"; } + + .fa-flower:before { + content: "\f7ff"; } + + .fa-flower-daffodil:before { + content: "\f800"; } + + .fa-flower-tulip:before { + content: "\f801"; } + + .fa-flushed:before { + content: "\f579"; } + + .fa-flute:before { + content: "\f8b9"; } + + .fa-flux-capacitor:before { + content: "\f8ba"; } + + .fa-fly:before { + content: "\f417"; } + + .fa-fog:before { + content: "\f74e"; } + + .fa-folder:before { + content: "\f07b"; } + + .fa-folder-download:before { + content: "\f953"; } + + .fa-folder-minus:before { + content: "\f65d"; } + + .fa-folder-open:before { + content: "\f07c"; } + + .fa-folder-plus:before { + content: "\f65e"; } + + .fa-folder-times:before { + content: "\f65f"; } + + .fa-folder-tree:before { + content: "\f802"; } + + .fa-folder-upload:before { + content: "\f954"; } + + .fa-folders:before { + content: "\f660"; } + + .fa-font:before { + content: "\f031"; } + + .fa-font-awesome:before { + content: "\f2b4"; } + + .fa-font-awesome-alt:before { + content: "\f35c"; } + + .fa-font-awesome-flag:before { + content: "\f425"; } + + .fa-font-awesome-logo-full:before { + content: "\f4e6"; } + + .fa-font-case:before { + content: "\f866"; } + + .fa-fonticons:before { + content: "\f280"; } + + .fa-fonticons-fi:before { + content: "\f3a2"; } + + .fa-football-ball:before { + content: "\f44e"; } + + .fa-football-helmet:before { + content: "\f44f"; } + + .fa-forklift:before { + content: "\f47a"; } + + .fa-fort-awesome:before { + content: "\f286"; } + + .fa-fort-awesome-alt:before { + content: "\f3a3"; } + + .fa-forumbee:before { + content: "\f211"; } + + .fa-forward:before { + content: "\f04e"; } + + .fa-foursquare:before { + content: "\f180"; } + + .fa-fragile:before { + content: "\f4bb"; } + + .fa-free-code-camp:before { + content: "\f2c5"; } + + .fa-freebsd:before { + content: "\f3a4"; } + + .fa-french-fries:before { + content: "\f803"; } + + .fa-frog:before { + content: "\f52e"; } + + .fa-frosty-head:before { + content: "\f79b"; } + + .fa-frown:before { + content: "\f119"; } + + .fa-frown-open:before { + content: "\f57a"; } + + .fa-fulcrum:before { + content: "\f50b"; } + + .fa-function:before { + content: "\f661"; } + + .fa-funnel-dollar:before { + content: "\f662"; } + + .fa-futbol:before { + content: "\f1e3"; } + + .fa-galactic-republic:before { + content: "\f50c"; } + + .fa-galactic-senate:before { + content: "\f50d"; } + + .fa-galaxy:before { + content: "\f908"; } + + .fa-game-board:before { + content: "\f867"; } + + .fa-game-board-alt:before { + content: "\f868"; } + + .fa-game-console-handheld:before { + content: "\f8bb"; } + + .fa-gamepad:before { + content: "\f11b"; } + + .fa-gamepad-alt:before { + content: "\f8bc"; } + + .fa-garage:before { + content: "\f909"; } + + .fa-garage-car:before { + content: "\f90a"; } + + .fa-garage-open:before { + content: "\f90b"; } + + .fa-gas-pump:before { + content: "\f52f"; } + + .fa-gas-pump-slash:before { + content: "\f5f4"; } + + .fa-gavel:before { + content: "\f0e3"; } + + .fa-gem:before { + content: "\f3a5"; } + + .fa-genderless:before { + content: "\f22d"; } + + .fa-get-pocket:before { + content: "\f265"; } + + .fa-gg:before { + content: "\f260"; } + + .fa-gg-circle:before { + content: "\f261"; } + + .fa-ghost:before { + content: "\f6e2"; } + + .fa-gift:before { + content: "\f06b"; } + + .fa-gift-card:before { + content: "\f663"; } + + .fa-gifts:before { + content: "\f79c"; } + + .fa-gingerbread-man:before { + content: "\f79d"; } + + .fa-git:before { + content: "\f1d3"; } + + .fa-git-alt:before { + content: "\f841"; } + + .fa-git-square:before { + content: "\f1d2"; } + + .fa-github:before { + content: "\f09b"; } + + .fa-github-alt:before { + content: "\f113"; } + + .fa-github-square:before { + content: "\f092"; } + + .fa-gitkraken:before { + content: "\f3a6"; } + + .fa-gitlab:before { + content: "\f296"; } + + .fa-gitter:before { + content: "\f426"; } + + .fa-glass:before { + content: "\f804"; } + + .fa-glass-champagne:before { + content: "\f79e"; } + + .fa-glass-cheers:before { + content: "\f79f"; } + + .fa-glass-citrus:before { + content: "\f869"; } + + .fa-glass-martini:before { + content: "\f000"; } + + .fa-glass-martini-alt:before { + content: "\f57b"; } + + .fa-glass-whiskey:before { + content: "\f7a0"; } + + .fa-glass-whiskey-rocks:before { + content: "\f7a1"; } + + .fa-glasses:before { + content: "\f530"; } + + .fa-glasses-alt:before { + content: "\f5f5"; } + + .fa-glide:before { + content: "\f2a5"; } + + .fa-glide-g:before { + content: "\f2a6"; } + + .fa-globe:before { + content: "\f0ac"; } + + .fa-globe-africa:before { + content: "\f57c"; } + + .fa-globe-americas:before { + content: "\f57d"; } + + .fa-globe-asia:before { + content: "\f57e"; } + + .fa-globe-europe:before { + content: "\f7a2"; } + + .fa-globe-snow:before { + content: "\f7a3"; } + + .fa-globe-stand:before { + content: "\f5f6"; } + + .fa-gofore:before { + content: "\f3a7"; } + + .fa-golf-ball:before { + content: "\f450"; } + + .fa-golf-club:before { + content: "\f451"; } + + .fa-goodreads:before { + content: "\f3a8"; } + + .fa-goodreads-g:before { + content: "\f3a9"; } + + .fa-google:before { + content: "\f1a0"; } + + .fa-google-drive:before { + content: "\f3aa"; } + + .fa-google-play:before { + content: "\f3ab"; } + + .fa-google-plus:before { + content: "\f2b3"; } + + .fa-google-plus-g:before { + content: "\f0d5"; } + + .fa-google-plus-square:before { + content: "\f0d4"; } + + .fa-google-wallet:before { + content: "\f1ee"; } + + .fa-gopuram:before { + content: "\f664"; } + + .fa-graduation-cap:before { + content: "\f19d"; } + + .fa-gramophone:before { + content: "\f8bd"; } + + .fa-gratipay:before { + content: "\f184"; } + + .fa-grav:before { + content: "\f2d6"; } + + .fa-greater-than:before { + content: "\f531"; } + + .fa-greater-than-equal:before { + content: "\f532"; } + + .fa-grimace:before { + content: "\f57f"; } + + .fa-grin:before { + content: "\f580"; } + + .fa-grin-alt:before { + content: "\f581"; } + + .fa-grin-beam:before { + content: "\f582"; } + + .fa-grin-beam-sweat:before { + content: "\f583"; } + + .fa-grin-hearts:before { + content: "\f584"; } + + .fa-grin-squint:before { + content: "\f585"; } + + .fa-grin-squint-tears:before { + content: "\f586"; } + + .fa-grin-stars:before { + content: "\f587"; } + + .fa-grin-tears:before { + content: "\f588"; } + + .fa-grin-tongue:before { + content: "\f589"; } + + .fa-grin-tongue-squint:before { + content: "\f58a"; } + + .fa-grin-tongue-wink:before { + content: "\f58b"; } + + .fa-grin-wink:before { + content: "\f58c"; } + + .fa-grip-horizontal:before { + content: "\f58d"; } + + .fa-grip-lines:before { + content: "\f7a4"; } + + .fa-grip-lines-vertical:before { + content: "\f7a5"; } + + .fa-grip-vertical:before { + content: "\f58e"; } + + .fa-gripfire:before { + content: "\f3ac"; } + + .fa-grunt:before { + content: "\f3ad"; } + + .fa-guitar:before { + content: "\f7a6"; } + + .fa-guitar-electric:before { + content: "\f8be"; } + + .fa-guitars:before { + content: "\f8bf"; } + + .fa-gulp:before { + content: "\f3ae"; } + + .fa-h-square:before { + content: "\f0fd"; } + + .fa-h1:before { + content: "\f313"; } + + .fa-h2:before { + content: "\f314"; } + + .fa-h3:before { + content: "\f315"; } + + .fa-h4:before { + content: "\f86a"; } + + .fa-hacker-news:before { + content: "\f1d4"; } + + .fa-hacker-news-square:before { + content: "\f3af"; } + + .fa-hackerrank:before { + content: "\f5f7"; } + + .fa-hamburger:before { + content: "\f805"; } + + .fa-hammer:before { + content: "\f6e3"; } + + .fa-hammer-war:before { + content: "\f6e4"; } + + .fa-hamsa:before { + content: "\f665"; } + + .fa-hand-heart:before { + content: "\f4bc"; } + + .fa-hand-holding:before { + content: "\f4bd"; } + + .fa-hand-holding-box:before { + content: "\f47b"; } + + .fa-hand-holding-heart:before { + content: "\f4be"; } + + .fa-hand-holding-magic:before { + content: "\f6e5"; } + + .fa-hand-holding-medical:before { + content: "\f95c"; } + + .fa-hand-holding-seedling:before { + content: "\f4bf"; } + + .fa-hand-holding-usd:before { + content: "\f4c0"; } + + .fa-hand-holding-water:before { + content: "\f4c1"; } + + .fa-hand-lizard:before { + content: "\f258"; } + + .fa-hand-middle-finger:before { + content: "\f806"; } + + .fa-hand-paper:before { + content: "\f256"; } + + .fa-hand-peace:before { + content: "\f25b"; } + + .fa-hand-point-down:before { + content: "\f0a7"; } + + .fa-hand-point-left:before { + content: "\f0a5"; } + + .fa-hand-point-right:before { + content: "\f0a4"; } + + .fa-hand-point-up:before { + content: "\f0a6"; } + + .fa-hand-pointer:before { + content: "\f25a"; } + + .fa-hand-receiving:before { + content: "\f47c"; } + + .fa-hand-rock:before { + content: "\f255"; } + + .fa-hand-scissors:before { + content: "\f257"; } + + .fa-hand-sparkles:before { + content: "\f95d"; } + + .fa-hand-spock:before { + content: "\f259"; } + + .fa-hands:before { + content: "\f4c2"; } + + .fa-hands-heart:before { + content: "\f4c3"; } + + .fa-hands-helping:before { + content: "\f4c4"; } + + .fa-hands-usd:before { + content: "\f4c5"; } + + .fa-hands-wash:before { + content: "\f95e"; } + + .fa-handshake:before { + content: "\f2b5"; } + + .fa-handshake-alt:before { + content: "\f4c6"; } + + .fa-handshake-alt-slash:before { + content: "\f95f"; } + + .fa-handshake-slash:before { + content: "\f960"; } + + .fa-hanukiah:before { + content: "\f6e6"; } + + .fa-hard-hat:before { + content: "\f807"; } + + .fa-hashtag:before { + content: "\f292"; } + + .fa-hat-chef:before { + content: "\f86b"; } + + .fa-hat-cowboy:before { + content: "\f8c0"; } + + .fa-hat-cowboy-side:before { + content: "\f8c1"; } + + .fa-hat-santa:before { + content: "\f7a7"; } + + .fa-hat-winter:before { + content: "\f7a8"; } + + .fa-hat-witch:before { + content: "\f6e7"; } + + .fa-hat-wizard:before { + content: "\f6e8"; } + + .fa-hdd:before { + content: "\f0a0"; } + + .fa-head-side:before { + content: "\f6e9"; } + + .fa-head-side-brain:before { + content: "\f808"; } + + .fa-head-side-cough:before { + content: "\f961"; } + + .fa-head-side-cough-slash:before { + content: "\f962"; } + + .fa-head-side-headphones:before { + content: "\f8c2"; } + + .fa-head-side-mask:before { + content: "\f963"; } + + .fa-head-side-medical:before { + content: "\f809"; } + + .fa-head-side-virus:before { + content: "\f964"; } + + .fa-head-vr:before { + content: "\f6ea"; } + + .fa-heading:before { + content: "\f1dc"; } + + .fa-headphones:before { + content: "\f025"; } + + .fa-headphones-alt:before { + content: "\f58f"; } + + .fa-headset:before { + content: "\f590"; } + + .fa-heart:before { + content: "\f004"; } + + .fa-heart-broken:before { + content: "\f7a9"; } + + .fa-heart-circle:before { + content: "\f4c7"; } + + .fa-heart-rate:before { + content: "\f5f8"; } + + .fa-heart-square:before { + content: "\f4c8"; } + + .fa-heartbeat:before { + content: "\f21e"; } + + .fa-heat:before { + content: "\f90c"; } + + .fa-helicopter:before { + content: "\f533"; } + + .fa-helmet-battle:before { + content: "\f6eb"; } + + .fa-hexagon:before { + content: "\f312"; } + + .fa-highlighter:before { + content: "\f591"; } + + .fa-hiking:before { + content: "\f6ec"; } + + .fa-hippo:before { + content: "\f6ed"; } + + .fa-hips:before { + content: "\f452"; } + + .fa-hire-a-helper:before { + content: "\f3b0"; } + + .fa-history:before { + content: "\f1da"; } + + .fa-hockey-mask:before { + content: "\f6ee"; } + + .fa-hockey-puck:before { + content: "\f453"; } + + .fa-hockey-sticks:before { + content: "\f454"; } + + .fa-holly-berry:before { + content: "\f7aa"; } + + .fa-home:before { + content: "\f015"; } + + .fa-home-alt:before { + content: "\f80a"; } + + .fa-home-heart:before { + content: "\f4c9"; } + + .fa-home-lg:before { + content: "\f80b"; } + + .fa-home-lg-alt:before { + content: "\f80c"; } + + .fa-hood-cloak:before { + content: "\f6ef"; } + + .fa-hooli:before { + content: "\f427"; } + + .fa-horizontal-rule:before { + content: "\f86c"; } + + .fa-hornbill:before { + content: "\f592"; } + + .fa-horse:before { + content: "\f6f0"; } + + .fa-horse-head:before { + content: "\f7ab"; } + + .fa-horse-saddle:before { + content: "\f8c3"; } + + .fa-hospital:before { + content: "\f0f8"; } + + .fa-hospital-alt:before { + content: "\f47d"; } + + .fa-hospital-symbol:before { + content: "\f47e"; } + + .fa-hospital-user:before { + content: "\f80d"; } + + .fa-hospitals:before { + content: "\f80e"; } + + .fa-hot-tub:before { + content: "\f593"; } + + .fa-hotdog:before { + content: "\f80f"; } + + .fa-hotel:before { + content: "\f594"; } + + .fa-hotjar:before { + content: "\f3b1"; } + + .fa-hourglass:before { + content: "\f254"; } + + .fa-hourglass-end:before { + content: "\f253"; } + + .fa-hourglass-half:before { + content: "\f252"; } + + .fa-hourglass-start:before { + content: "\f251"; } + + .fa-house:before { + content: "\f90d"; } + + .fa-house-damage:before { + content: "\f6f1"; } + + .fa-house-day:before { + content: "\f90e"; } + + .fa-house-flood:before { + content: "\f74f"; } + + .fa-house-leave:before { + content: "\f90f"; } + + .fa-house-night:before { + content: "\f910"; } + + .fa-house-return:before { + content: "\f911"; } + + .fa-house-signal:before { + content: "\f912"; } + + .fa-house-user:before { + content: "\f965"; } + + .fa-houzz:before { + content: "\f27c"; } + + .fa-hryvnia:before { + content: "\f6f2"; } + + .fa-html5:before { + content: "\f13b"; } + + .fa-hubspot:before { + content: "\f3b2"; } + + .fa-humidity:before { + content: "\f750"; } + + .fa-hurricane:before { + content: "\f751"; } + + .fa-i-cursor:before { + content: "\f246"; } + + .fa-ice-cream:before { + content: "\f810"; } + + .fa-ice-skate:before { + content: "\f7ac"; } + + .fa-icicles:before { + content: "\f7ad"; } + + .fa-icons:before { + content: "\f86d"; } + + .fa-icons-alt:before { + content: "\f86e"; } + + .fa-id-badge:before { + content: "\f2c1"; } + + .fa-id-card:before { + content: "\f2c2"; } + + .fa-id-card-alt:before { + content: "\f47f"; } + + .fa-ideal:before { + content: "\f913"; } + + .fa-igloo:before { + content: "\f7ae"; } + + .fa-image:before { + content: "\f03e"; } + + .fa-image-polaroid:before { + content: "\f8c4"; } + + .fa-images:before { + content: "\f302"; } + + .fa-imdb:before { + content: "\f2d8"; } + + .fa-inbox:before { + content: "\f01c"; } + + .fa-inbox-in:before { + content: "\f310"; } + + .fa-inbox-out:before { + content: "\f311"; } + + .fa-indent:before { + content: "\f03c"; } + + .fa-industry:before { + content: "\f275"; } + + .fa-industry-alt:before { + content: "\f3b3"; } + + .fa-infinity:before { + content: "\f534"; } + + .fa-info:before { + content: "\f129"; } + + .fa-info-circle:before { + content: "\f05a"; } + + .fa-info-square:before { + content: "\f30f"; } + + .fa-inhaler:before { + content: "\f5f9"; } + + .fa-instagram:before { + content: "\f16d"; } + + .fa-instagram-square:before { + content: "\f955"; } + + .fa-integral:before { + content: "\f667"; } + + .fa-intercom:before { + content: "\f7af"; } + + .fa-internet-explorer:before { + content: "\f26b"; } + + .fa-intersection:before { + content: "\f668"; } + + .fa-inventory:before { + content: "\f480"; } + + .fa-invision:before { + content: "\f7b0"; } + + .fa-ioxhost:before { + content: "\f208"; } + + .fa-island-tropical:before { + content: "\f811"; } + + .fa-italic:before { + content: "\f033"; } + + .fa-itch-io:before { + content: "\f83a"; } + + .fa-itunes:before { + content: "\f3b4"; } + + .fa-itunes-note:before { + content: "\f3b5"; } + + .fa-jack-o-lantern:before { + content: "\f30e"; } + + .fa-java:before { + content: "\f4e4"; } + + .fa-jedi:before { + content: "\f669"; } + + .fa-jedi-order:before { + content: "\f50e"; } + + .fa-jenkins:before { + content: "\f3b6"; } + + .fa-jira:before { + content: "\f7b1"; } + + .fa-joget:before { + content: "\f3b7"; } + + .fa-joint:before { + content: "\f595"; } + + .fa-joomla:before { + content: "\f1aa"; } + + .fa-journal-whills:before { + content: "\f66a"; } + + .fa-joystick:before { + content: "\f8c5"; } + + .fa-js:before { + content: "\f3b8"; } + + .fa-js-square:before { + content: "\f3b9"; } + + .fa-jsfiddle:before { + content: "\f1cc"; } + + .fa-jug:before { + content: "\f8c6"; } + + .fa-kaaba:before { + content: "\f66b"; } + + .fa-kaggle:before { + content: "\f5fa"; } + + .fa-kazoo:before { + content: "\f8c7"; } + + .fa-kerning:before { + content: "\f86f"; } + + .fa-key:before { + content: "\f084"; } + + .fa-key-skeleton:before { + content: "\f6f3"; } + + .fa-keybase:before { + content: "\f4f5"; } + + .fa-keyboard:before { + content: "\f11c"; } + + .fa-keycdn:before { + content: "\f3ba"; } + + .fa-keynote:before { + content: "\f66c"; } + + .fa-khanda:before { + content: "\f66d"; } + + .fa-kickstarter:before { + content: "\f3bb"; } + + .fa-kickstarter-k:before { + content: "\f3bc"; } + + .fa-kidneys:before { + content: "\f5fb"; } + + .fa-kiss:before { + content: "\f596"; } + + .fa-kiss-beam:before { + content: "\f597"; } + + .fa-kiss-wink-heart:before { + content: "\f598"; } + + .fa-kite:before { + content: "\f6f4"; } + + .fa-kiwi-bird:before { + content: "\f535"; } + + .fa-knife-kitchen:before { + content: "\f6f5"; } + + .fa-korvue:before { + content: "\f42f"; } + + .fa-lambda:before { + content: "\f66e"; } + + .fa-lamp:before { + content: "\f4ca"; } + + .fa-lamp-desk:before { + content: "\f914"; } + + .fa-lamp-floor:before { + content: "\f915"; } + + .fa-landmark:before { + content: "\f66f"; } + + .fa-landmark-alt:before { + content: "\f752"; } + + .fa-language:before { + content: "\f1ab"; } + + .fa-laptop:before { + content: "\f109"; } + + .fa-laptop-code:before { + content: "\f5fc"; } + + .fa-laptop-house:before { + content: "\f966"; } + + .fa-laptop-medical:before { + content: "\f812"; } + + .fa-laravel:before { + content: "\f3bd"; } + + .fa-lasso:before { + content: "\f8c8"; } + + .fa-lastfm:before { + content: "\f202"; } + + .fa-lastfm-square:before { + content: "\f203"; } + + .fa-laugh:before { + content: "\f599"; } + + .fa-laugh-beam:before { + content: "\f59a"; } + + .fa-laugh-squint:before { + content: "\f59b"; } + + .fa-laugh-wink:before { + content: "\f59c"; } + + .fa-layer-group:before { + content: "\f5fd"; } + + .fa-layer-minus:before { + content: "\f5fe"; } + + .fa-layer-plus:before { + content: "\f5ff"; } + + .fa-leaf:before { + content: "\f06c"; } + + .fa-leaf-heart:before { + content: "\f4cb"; } + + .fa-leaf-maple:before { + content: "\f6f6"; } + + .fa-leaf-oak:before { + content: "\f6f7"; } + + .fa-leanpub:before { + content: "\f212"; } + + .fa-lemon:before { + content: "\f094"; } + + .fa-less:before { + content: "\f41d"; } + + .fa-less-than:before { + content: "\f536"; } + + .fa-less-than-equal:before { + content: "\f537"; } + + .fa-level-down:before { + content: "\f149"; } + + .fa-level-down-alt:before { + content: "\f3be"; } + + .fa-level-up:before { + content: "\f148"; } + + .fa-level-up-alt:before { + content: "\f3bf"; } + + .fa-life-ring:before { + content: "\f1cd"; } + + .fa-light-ceiling:before { + content: "\f916"; } + + .fa-light-switch:before { + content: "\f917"; } + + .fa-light-switch-off:before { + content: "\f918"; } + + .fa-light-switch-on:before { + content: "\f919"; } + + .fa-lightbulb:before { + content: "\f0eb"; } + + .fa-lightbulb-dollar:before { + content: "\f670"; } + + .fa-lightbulb-exclamation:before { + content: "\f671"; } + + .fa-lightbulb-on:before { + content: "\f672"; } + + .fa-lightbulb-slash:before { + content: "\f673"; } + + .fa-lights-holiday:before { + content: "\f7b2"; } + + .fa-line:before { + content: "\f3c0"; } + + .fa-line-columns:before { + content: "\f870"; } + + .fa-line-height:before { + content: "\f871"; } + + .fa-link:before { + content: "\f0c1"; } + + .fa-linkedin:before { + content: "\f08c"; } + + .fa-linkedin-in:before { + content: "\f0e1"; } + + .fa-linode:before { + content: "\f2b8"; } + + .fa-linux:before { + content: "\f17c"; } + + .fa-lips:before { + content: "\f600"; } + + .fa-lira-sign:before { + content: "\f195"; } + + .fa-list:before { + content: "\f03a"; } + + .fa-list-alt:before { + content: "\f022"; } + + .fa-list-music:before { + content: "\f8c9"; } + + .fa-list-ol:before { + content: "\f0cb"; } + + .fa-list-ul:before { + content: "\f0ca"; } + + .fa-location:before { + content: "\f601"; } + + .fa-location-arrow:before { + content: "\f124"; } + + .fa-location-circle:before { + content: "\f602"; } + + .fa-location-slash:before { + content: "\f603"; } + + .fa-lock:before { + content: "\f023"; } + + .fa-lock-alt:before { + content: "\f30d"; } + + .fa-lock-open:before { + content: "\f3c1"; } + + .fa-lock-open-alt:before { + content: "\f3c2"; } + + .fa-long-arrow-alt-down:before { + content: "\f309"; } + + .fa-long-arrow-alt-left:before { + content: "\f30a"; } + + .fa-long-arrow-alt-right:before { + content: "\f30b"; } + + .fa-long-arrow-alt-up:before { + content: "\f30c"; } + + .fa-long-arrow-down:before { + content: "\f175"; } + + .fa-long-arrow-left:before { + content: "\f177"; } + + .fa-long-arrow-right:before { + content: "\f178"; } + + .fa-long-arrow-up:before { + content: "\f176"; } + + .fa-loveseat:before { + content: "\f4cc"; } + + .fa-low-vision:before { + content: "\f2a8"; } + + .fa-luchador:before { + content: "\f455"; } + + .fa-luggage-cart:before { + content: "\f59d"; } + + .fa-lungs:before { + content: "\f604"; } + + .fa-lungs-virus:before { + content: "\f967"; } + + .fa-lyft:before { + content: "\f3c3"; } + + .fa-mace:before { + content: "\f6f8"; } + + .fa-magento:before { + content: "\f3c4"; } + + .fa-magic:before { + content: "\f0d0"; } + + .fa-magnet:before { + content: "\f076"; } + + .fa-mail-bulk:before { + content: "\f674"; } + + .fa-mailbox:before { + content: "\f813"; } + + .fa-mailchimp:before { + content: "\f59e"; } + + .fa-male:before { + content: "\f183"; } + + .fa-mandalorian:before { + content: "\f50f"; } + + .fa-mandolin:before { + content: "\f6f9"; } + + .fa-map:before { + content: "\f279"; } + + .fa-map-marked:before { + content: "\f59f"; } + + .fa-map-marked-alt:before { + content: "\f5a0"; } + + .fa-map-marker:before { + content: "\f041"; } + + .fa-map-marker-alt:before { + content: "\f3c5"; } + + .fa-map-marker-alt-slash:before { + content: "\f605"; } + + .fa-map-marker-check:before { + content: "\f606"; } + + .fa-map-marker-edit:before { + content: "\f607"; } + + .fa-map-marker-exclamation:before { + content: "\f608"; } + + .fa-map-marker-minus:before { + content: "\f609"; } + + .fa-map-marker-plus:before { + content: "\f60a"; } + + .fa-map-marker-question:before { + content: "\f60b"; } + + .fa-map-marker-slash:before { + content: "\f60c"; } + + .fa-map-marker-smile:before { + content: "\f60d"; } + + .fa-map-marker-times:before { + content: "\f60e"; } + + .fa-map-pin:before { + content: "\f276"; } + + .fa-map-signs:before { + content: "\f277"; } + + .fa-markdown:before { + content: "\f60f"; } + + .fa-marker:before { + content: "\f5a1"; } + + .fa-mars:before { + content: "\f222"; } + + .fa-mars-double:before { + content: "\f227"; } + + .fa-mars-stroke:before { + content: "\f229"; } + + .fa-mars-stroke-h:before { + content: "\f22b"; } + + .fa-mars-stroke-v:before { + content: "\f22a"; } + + .fa-mask:before { + content: "\f6fa"; } + + .fa-mastodon:before { + content: "\f4f6"; } + + .fa-maxcdn:before { + content: "\f136"; } + + .fa-mdb:before { + content: "\f8ca"; } + + .fa-meat:before { + content: "\f814"; } + + .fa-medal:before { + content: "\f5a2"; } + + .fa-medapps:before { + content: "\f3c6"; } + + .fa-medium:before { + content: "\f23a"; } + + .fa-medium-m:before { + content: "\f3c7"; } + + .fa-medkit:before { + content: "\f0fa"; } + + .fa-medrt:before { + content: "\f3c8"; } + + .fa-meetup:before { + content: "\f2e0"; } + + .fa-megaphone:before { + content: "\f675"; } + + .fa-megaport:before { + content: "\f5a3"; } + + .fa-meh:before { + content: "\f11a"; } + + .fa-meh-blank:before { + content: "\f5a4"; } + + .fa-meh-rolling-eyes:before { + content: "\f5a5"; } + + .fa-memory:before { + content: "\f538"; } + + .fa-mendeley:before { + content: "\f7b3"; } + + .fa-menorah:before { + content: "\f676"; } + + .fa-mercury:before { + content: "\f223"; } + + .fa-meteor:before { + content: "\f753"; } + + .fa-microblog:before { + content: "\f91a"; } + + .fa-microchip:before { + content: "\f2db"; } + + .fa-microphone:before { + content: "\f130"; } + + .fa-microphone-alt:before { + content: "\f3c9"; } + + .fa-microphone-alt-slash:before { + content: "\f539"; } + + .fa-microphone-slash:before { + content: "\f131"; } + + .fa-microphone-stand:before { + content: "\f8cb"; } + + .fa-microscope:before { + content: "\f610"; } + + .fa-microsoft:before { + content: "\f3ca"; } + + .fa-microwave:before { + content: "\f91b"; } + + .fa-mind-share:before { + content: "\f677"; } + + .fa-minus:before { + content: "\f068"; } + + .fa-minus-circle:before { + content: "\f056"; } + + .fa-minus-hexagon:before { + content: "\f307"; } + + .fa-minus-octagon:before { + content: "\f308"; } + + .fa-minus-square:before { + content: "\f146"; } + + .fa-mistletoe:before { + content: "\f7b4"; } + + .fa-mitten:before { + content: "\f7b5"; } + + .fa-mix:before { + content: "\f3cb"; } + + .fa-mixcloud:before { + content: "\f289"; } + + .fa-mixer:before { + content: "\f956"; } + + .fa-mizuni:before { + content: "\f3cc"; } + + .fa-mobile:before { + content: "\f10b"; } + + .fa-mobile-alt:before { + content: "\f3cd"; } + + .fa-mobile-android:before { + content: "\f3ce"; } + + .fa-mobile-android-alt:before { + content: "\f3cf"; } + + .fa-modx:before { + content: "\f285"; } + + .fa-monero:before { + content: "\f3d0"; } + + .fa-money-bill:before { + content: "\f0d6"; } + + .fa-money-bill-alt:before { + content: "\f3d1"; } + + .fa-money-bill-wave:before { + content: "\f53a"; } + + .fa-money-bill-wave-alt:before { + content: "\f53b"; } + + .fa-money-check:before { + content: "\f53c"; } + + .fa-money-check-alt:before { + content: "\f53d"; } + + .fa-money-check-edit:before { + content: "\f872"; } + + .fa-money-check-edit-alt:before { + content: "\f873"; } + + .fa-monitor-heart-rate:before { + content: "\f611"; } + + .fa-monkey:before { + content: "\f6fb"; } + + .fa-monument:before { + content: "\f5a6"; } + + .fa-moon:before { + content: "\f186"; } + + .fa-moon-cloud:before { + content: "\f754"; } + + .fa-moon-stars:before { + content: "\f755"; } + + .fa-mortar-pestle:before { + content: "\f5a7"; } + + .fa-mosque:before { + content: "\f678"; } + + .fa-motorcycle:before { + content: "\f21c"; } + + .fa-mountain:before { + content: "\f6fc"; } + + .fa-mountains:before { + content: "\f6fd"; } + + .fa-mouse:before { + content: "\f8cc"; } + + .fa-mouse-alt:before { + content: "\f8cd"; } + + .fa-mouse-pointer:before { + content: "\f245"; } + + .fa-mp3-player:before { + content: "\f8ce"; } + + .fa-mug:before { + content: "\f874"; } + + .fa-mug-hot:before { + content: "\f7b6"; } + + .fa-mug-marshmallows:before { + content: "\f7b7"; } + + .fa-mug-tea:before { + content: "\f875"; } + + .fa-music:before { + content: "\f001"; } + + .fa-music-alt:before { + content: "\f8cf"; } + + .fa-music-alt-slash:before { + content: "\f8d0"; } + + .fa-music-slash:before { + content: "\f8d1"; } + + .fa-napster:before { + content: "\f3d2"; } + + .fa-narwhal:before { + content: "\f6fe"; } + + .fa-neos:before { + content: "\f612"; } + + .fa-network-wired:before { + content: "\f6ff"; } + + .fa-neuter:before { + content: "\f22c"; } + + .fa-newspaper:before { + content: "\f1ea"; } + + .fa-nimblr:before { + content: "\f5a8"; } + + .fa-node:before { + content: "\f419"; } + + .fa-node-js:before { + content: "\f3d3"; } + + .fa-not-equal:before { + content: "\f53e"; } + + .fa-notes-medical:before { + content: "\f481"; } + + .fa-npm:before { + content: "\f3d4"; } + + .fa-ns8:before { + content: "\f3d5"; } + + .fa-nutritionix:before { + content: "\f3d6"; } + + .fa-object-group:before { + content: "\f247"; } + + .fa-object-ungroup:before { + content: "\f248"; } + + .fa-octagon:before { + content: "\f306"; } + + .fa-odnoklassniki:before { + content: "\f263"; } + + .fa-odnoklassniki-square:before { + content: "\f264"; } + + .fa-oil-can:before { + content: "\f613"; } + + .fa-oil-temp:before { + content: "\f614"; } + + .fa-old-republic:before { + content: "\f510"; } + + .fa-om:before { + content: "\f679"; } + + .fa-omega:before { + content: "\f67a"; } + + .fa-opencart:before { + content: "\f23d"; } + + .fa-openid:before { + content: "\f19b"; } + + .fa-opera:before { + content: "\f26a"; } + + .fa-optin-monster:before { + content: "\f23c"; } + + .fa-orcid:before { + content: "\f8d2"; } + + .fa-ornament:before { + content: "\f7b8"; } + + .fa-osi:before { + content: "\f41a"; } + + .fa-otter:before { + content: "\f700"; } + + .fa-outdent:before { + content: "\f03b"; } + + .fa-outlet:before { + content: "\f91c"; } + + .fa-oven:before { + content: "\f91d"; } + + .fa-overline:before { + content: "\f876"; } + + .fa-page-break:before { + content: "\f877"; } + + .fa-page4:before { + content: "\f3d7"; } + + .fa-pagelines:before { + content: "\f18c"; } + + .fa-pager:before { + content: "\f815"; } + + .fa-paint-brush:before { + content: "\f1fc"; } + + .fa-paint-brush-alt:before { + content: "\f5a9"; } + + .fa-paint-roller:before { + content: "\f5aa"; } + + .fa-palette:before { + content: "\f53f"; } + + .fa-palfed:before { + content: "\f3d8"; } + + .fa-pallet:before { + content: "\f482"; } + + .fa-pallet-alt:before { + content: "\f483"; } + + .fa-paper-plane:before { + content: "\f1d8"; } + + .fa-paperclip:before { + content: "\f0c6"; } + + .fa-parachute-box:before { + content: "\f4cd"; } + + .fa-paragraph:before { + content: "\f1dd"; } + + .fa-paragraph-rtl:before { + content: "\f878"; } + + .fa-parking:before { + content: "\f540"; } + + .fa-parking-circle:before { + content: "\f615"; } + + .fa-parking-circle-slash:before { + content: "\f616"; } + + .fa-parking-slash:before { + content: "\f617"; } + + .fa-passport:before { + content: "\f5ab"; } + + .fa-pastafarianism:before { + content: "\f67b"; } + + .fa-paste:before { + content: "\f0ea"; } + + .fa-patreon:before { + content: "\f3d9"; } + + .fa-pause:before { + content: "\f04c"; } + + .fa-pause-circle:before { + content: "\f28b"; } + + .fa-paw:before { + content: "\f1b0"; } + + .fa-paw-alt:before { + content: "\f701"; } + + .fa-paw-claws:before { + content: "\f702"; } + + .fa-paypal:before { + content: "\f1ed"; } + + .fa-peace:before { + content: "\f67c"; } + + .fa-pegasus:before { + content: "\f703"; } + + .fa-pen:before { + content: "\f304"; } + + .fa-pen-alt:before { + content: "\f305"; } + + .fa-pen-fancy:before { + content: "\f5ac"; } + + .fa-pen-nib:before { + content: "\f5ad"; } + + .fa-pen-square:before { + content: "\f14b"; } + + .fa-pencil:before { + content: "\f040"; } + + .fa-pencil-alt:before { + content: "\f303"; } + + .fa-pencil-paintbrush:before { + content: "\f618"; } + + .fa-pencil-ruler:before { + content: "\f5ae"; } + + .fa-pennant:before { + content: "\f456"; } + + .fa-penny-arcade:before { + content: "\f704"; } + + .fa-people-arrows:before { + content: "\f968"; } + + .fa-people-carry:before { + content: "\f4ce"; } + + .fa-pepper-hot:before { + content: "\f816"; } + + .fa-percent:before { + content: "\f295"; } + + .fa-percentage:before { + content: "\f541"; } + + .fa-periscope:before { + content: "\f3da"; } + + .fa-person-booth:before { + content: "\f756"; } + + .fa-person-carry:before { + content: "\f4cf"; } + + .fa-person-dolly:before { + content: "\f4d0"; } + + .fa-person-dolly-empty:before { + content: "\f4d1"; } + + .fa-person-sign:before { + content: "\f757"; } + + .fa-phabricator:before { + content: "\f3db"; } + + .fa-phoenix-framework:before { + content: "\f3dc"; } + + .fa-phoenix-squadron:before { + content: "\f511"; } + + .fa-phone:before { + content: "\f095"; } + + .fa-phone-alt:before { + content: "\f879"; } + + .fa-phone-laptop:before { + content: "\f87a"; } + + .fa-phone-office:before { + content: "\f67d"; } + + .fa-phone-plus:before { + content: "\f4d2"; } + + .fa-phone-rotary:before { + content: "\f8d3"; } + + .fa-phone-slash:before { + content: "\f3dd"; } + + .fa-phone-square:before { + content: "\f098"; } + + .fa-phone-square-alt:before { + content: "\f87b"; } + + .fa-phone-volume:before { + content: "\f2a0"; } + + .fa-photo-video:before { + content: "\f87c"; } + + .fa-php:before { + content: "\f457"; } + + .fa-pi:before { + content: "\f67e"; } + + .fa-piano:before { + content: "\f8d4"; } + + .fa-piano-keyboard:before { + content: "\f8d5"; } + + .fa-pie:before { + content: "\f705"; } + + .fa-pied-piper:before { + content: "\f2ae"; } + + .fa-pied-piper-alt:before { + content: "\f1a8"; } + + .fa-pied-piper-hat:before { + content: "\f4e5"; } + + .fa-pied-piper-pp:before { + content: "\f1a7"; } + + .fa-pied-piper-square:before { + content: "\f91e"; } + + .fa-pig:before { + content: "\f706"; } + + .fa-piggy-bank:before { + content: "\f4d3"; } + + .fa-pills:before { + content: "\f484"; } + + .fa-pinterest:before { + content: "\f0d2"; } + + .fa-pinterest-p:before { + content: "\f231"; } + + .fa-pinterest-square:before { + content: "\f0d3"; } + + .fa-pizza:before { + content: "\f817"; } + + .fa-pizza-slice:before { + content: "\f818"; } + + .fa-place-of-worship:before { + content: "\f67f"; } + + .fa-plane:before { + content: "\f072"; } + + .fa-plane-alt:before { + content: "\f3de"; } + + .fa-plane-arrival:before { + content: "\f5af"; } + + .fa-plane-departure:before { + content: "\f5b0"; } + + .fa-plane-slash:before { + content: "\f969"; } + + .fa-planet-moon:before { + content: "\f91f"; } + + .fa-planet-ringed:before { + content: "\f920"; } + + .fa-play:before { + content: "\f04b"; } + + .fa-play-circle:before { + content: "\f144"; } + + .fa-playstation:before { + content: "\f3df"; } + + .fa-plug:before { + content: "\f1e6"; } + + .fa-plus:before { + content: "\f067"; } + + .fa-plus-circle:before { + content: "\f055"; } + + .fa-plus-hexagon:before { + content: "\f300"; } + + .fa-plus-octagon:before { + content: "\f301"; } + + .fa-plus-square:before { + content: "\f0fe"; } + + .fa-podcast:before { + content: "\f2ce"; } + + .fa-podium:before { + content: "\f680"; } + + .fa-podium-star:before { + content: "\f758"; } + + .fa-police-box:before { + content: "\f921"; } + + .fa-poll:before { + content: "\f681"; } + + .fa-poll-h:before { + content: "\f682"; } + + .fa-poll-people:before { + content: "\f759"; } + + .fa-poo:before { + content: "\f2fe"; } + + .fa-poo-storm:before { + content: "\f75a"; } + + .fa-poop:before { + content: "\f619"; } + + .fa-popcorn:before { + content: "\f819"; } + + .fa-portal-enter:before { + content: "\f922"; } + + .fa-portal-exit:before { + content: "\f923"; } + + .fa-portrait:before { + content: "\f3e0"; } + + .fa-pound-sign:before { + content: "\f154"; } + + .fa-power-off:before { + content: "\f011"; } + + .fa-pray:before { + content: "\f683"; } + + .fa-praying-hands:before { + content: "\f684"; } + + .fa-prescription:before { + content: "\f5b1"; } + + .fa-prescription-bottle:before { + content: "\f485"; } + + .fa-prescription-bottle-alt:before { + content: "\f486"; } + + .fa-presentation:before { + content: "\f685"; } + + .fa-print:before { + content: "\f02f"; } + + .fa-print-search:before { + content: "\f81a"; } + + .fa-print-slash:before { + content: "\f686"; } + + .fa-procedures:before { + content: "\f487"; } + + .fa-product-hunt:before { + content: "\f288"; } + + .fa-project-diagram:before { + content: "\f542"; } + + .fa-projector:before { + content: "\f8d6"; } + + .fa-pump-medical:before { + content: "\f96a"; } + + .fa-pump-soap:before { + content: "\f96b"; } + + .fa-pumpkin:before { + content: "\f707"; } + + .fa-pushed:before { + content: "\f3e1"; } + + .fa-puzzle-piece:before { + content: "\f12e"; } + + .fa-python:before { + content: "\f3e2"; } + + .fa-qq:before { + content: "\f1d6"; } + + .fa-qrcode:before { + content: "\f029"; } + + .fa-question:before { + content: "\f128"; } + + .fa-question-circle:before { + content: "\f059"; } + + .fa-question-square:before { + content: "\f2fd"; } + + .fa-quidditch:before { + content: "\f458"; } + + .fa-quinscape:before { + content: "\f459"; } + + .fa-quora:before { + content: "\f2c4"; } + + .fa-quote-left:before { + content: "\f10d"; } + + .fa-quote-right:before { + content: "\f10e"; } + + .fa-quran:before { + content: "\f687"; } + + .fa-r-project:before { + content: "\f4f7"; } + + .fa-rabbit:before { + content: "\f708"; } + + .fa-rabbit-fast:before { + content: "\f709"; } + + .fa-racquet:before { + content: "\f45a"; } + + .fa-radar:before { + content: "\f924"; } + + .fa-radiation:before { + content: "\f7b9"; } + + .fa-radiation-alt:before { + content: "\f7ba"; } + + .fa-radio:before { + content: "\f8d7"; } + + .fa-radio-alt:before { + content: "\f8d8"; } + + .fa-rainbow:before { + content: "\f75b"; } + + .fa-raindrops:before { + content: "\f75c"; } + + .fa-ram:before { + content: "\f70a"; } + + .fa-ramp-loading:before { + content: "\f4d4"; } + + .fa-random:before { + content: "\f074"; } + + .fa-raspberry-pi:before { + content: "\f7bb"; } + + .fa-ravelry:before { + content: "\f2d9"; } + + .fa-raygun:before { + content: "\f925"; } + + .fa-react:before { + content: "\f41b"; } + + .fa-reacteurope:before { + content: "\f75d"; } + + .fa-readme:before { + content: "\f4d5"; } + + .fa-rebel:before { + content: "\f1d0"; } + + .fa-receipt:before { + content: "\f543"; } + + .fa-record-vinyl:before { + content: "\f8d9"; } + + .fa-rectangle-landscape:before { + content: "\f2fa"; } + + .fa-rectangle-portrait:before { + content: "\f2fb"; } + + .fa-rectangle-wide:before { + content: "\f2fc"; } + + .fa-recycle:before { + content: "\f1b8"; } + + .fa-red-river:before { + content: "\f3e3"; } + + .fa-reddit:before { + content: "\f1a1"; } + + .fa-reddit-alien:before { + content: "\f281"; } + + .fa-reddit-square:before { + content: "\f1a2"; } + + .fa-redhat:before { + content: "\f7bc"; } + + .fa-redo:before { + content: "\f01e"; } + + .fa-redo-alt:before { + content: "\f2f9"; } + + .fa-refrigerator:before { + content: "\f926"; } + + .fa-registered:before { + content: "\f25d"; } + + .fa-remove-format:before { + content: "\f87d"; } + + .fa-renren:before { + content: "\f18b"; } + + .fa-repeat:before { + content: "\f363"; } + + .fa-repeat-1:before { + content: "\f365"; } + + .fa-repeat-1-alt:before { + content: "\f366"; } + + .fa-repeat-alt:before { + content: "\f364"; } + + .fa-reply:before { + content: "\f3e5"; } + + .fa-reply-all:before { + content: "\f122"; } + + .fa-replyd:before { + content: "\f3e6"; } + + .fa-republican:before { + content: "\f75e"; } + + .fa-researchgate:before { + content: "\f4f8"; } + + .fa-resolving:before { + content: "\f3e7"; } + + .fa-restroom:before { + content: "\f7bd"; } + + .fa-retweet:before { + content: "\f079"; } + + .fa-retweet-alt:before { + content: "\f361"; } + + .fa-rev:before { + content: "\f5b2"; } + + .fa-ribbon:before { + content: "\f4d6"; } + + .fa-ring:before { + content: "\f70b"; } + + .fa-rings-wedding:before { + content: "\f81b"; } + + .fa-road:before { + content: "\f018"; } + + .fa-robot:before { + content: "\f544"; } + + .fa-rocket:before { + content: "\f135"; } + + .fa-rocket-launch:before { + content: "\f927"; } + + .fa-rocketchat:before { + content: "\f3e8"; } + + .fa-rockrms:before { + content: "\f3e9"; } + + .fa-route:before { + content: "\f4d7"; } + + .fa-route-highway:before { + content: "\f61a"; } + + .fa-route-interstate:before { + content: "\f61b"; } + + .fa-router:before { + content: "\f8da"; } + + .fa-rss:before { + content: "\f09e"; } + + .fa-rss-square:before { + content: "\f143"; } + + .fa-ruble-sign:before { + content: "\f158"; } + + .fa-ruler:before { + content: "\f545"; } + + .fa-ruler-combined:before { + content: "\f546"; } + + .fa-ruler-horizontal:before { + content: "\f547"; } + + .fa-ruler-triangle:before { + content: "\f61c"; } + + .fa-ruler-vertical:before { + content: "\f548"; } + + .fa-running:before { + content: "\f70c"; } + + .fa-rupee-sign:before { + content: "\f156"; } + + .fa-rv:before { + content: "\f7be"; } + + .fa-sack:before { + content: "\f81c"; } + + .fa-sack-dollar:before { + content: "\f81d"; } + + .fa-sad-cry:before { + content: "\f5b3"; } + + .fa-sad-tear:before { + content: "\f5b4"; } + + .fa-safari:before { + content: "\f267"; } + + .fa-salad:before { + content: "\f81e"; } + + .fa-salesforce:before { + content: "\f83b"; } + + .fa-sandwich:before { + content: "\f81f"; } + + .fa-sass:before { + content: "\f41e"; } + + .fa-satellite:before { + content: "\f7bf"; } + + .fa-satellite-dish:before { + content: "\f7c0"; } + + .fa-sausage:before { + content: "\f820"; } + + .fa-save:before { + content: "\f0c7"; } + + .fa-sax-hot:before { + content: "\f8db"; } + + .fa-saxophone:before { + content: "\f8dc"; } + + .fa-scalpel:before { + content: "\f61d"; } + + .fa-scalpel-path:before { + content: "\f61e"; } + + .fa-scanner:before { + content: "\f488"; } + + .fa-scanner-image:before { + content: "\f8f3"; } + + .fa-scanner-keyboard:before { + content: "\f489"; } + + .fa-scanner-touchscreen:before { + content: "\f48a"; } + + .fa-scarecrow:before { + content: "\f70d"; } + + .fa-scarf:before { + content: "\f7c1"; } + + .fa-schlix:before { + content: "\f3ea"; } + + .fa-school:before { + content: "\f549"; } + + .fa-screwdriver:before { + content: "\f54a"; } + + .fa-scribd:before { + content: "\f28a"; } + + .fa-scroll:before { + content: "\f70e"; } + + .fa-scroll-old:before { + content: "\f70f"; } + + .fa-scrubber:before { + content: "\f2f8"; } + + .fa-scythe:before { + content: "\f710"; } + + .fa-sd-card:before { + content: "\f7c2"; } + + .fa-search:before { + content: "\f002"; } + + .fa-search-dollar:before { + content: "\f688"; } + + .fa-search-location:before { + content: "\f689"; } + + .fa-search-minus:before { + content: "\f010"; } + + .fa-search-plus:before { + content: "\f00e"; } + + .fa-searchengin:before { + content: "\f3eb"; } + + .fa-seedling:before { + content: "\f4d8"; } + + .fa-sellcast:before { + content: "\f2da"; } + + .fa-sellsy:before { + content: "\f213"; } + + .fa-send-back:before { + content: "\f87e"; } + + .fa-send-backward:before { + content: "\f87f"; } + + .fa-sensor:before { + content: "\f928"; } + + .fa-sensor-alert:before { + content: "\f929"; } + + .fa-sensor-fire:before { + content: "\f92a"; } + + .fa-sensor-on:before { + content: "\f92b"; } + + .fa-sensor-smoke:before { + content: "\f92c"; } + + .fa-server:before { + content: "\f233"; } + + .fa-servicestack:before { + content: "\f3ec"; } + + .fa-shapes:before { + content: "\f61f"; } + + .fa-share:before { + content: "\f064"; } + + .fa-share-all:before { + content: "\f367"; } + + .fa-share-alt:before { + content: "\f1e0"; } + + .fa-share-alt-square:before { + content: "\f1e1"; } + + .fa-share-square:before { + content: "\f14d"; } + + .fa-sheep:before { + content: "\f711"; } + + .fa-shekel-sign:before { + content: "\f20b"; } + + .fa-shield:before { + content: "\f132"; } + + .fa-shield-alt:before { + content: "\f3ed"; } + + .fa-shield-check:before { + content: "\f2f7"; } + + .fa-shield-cross:before { + content: "\f712"; } + + .fa-shield-virus:before { + content: "\f96c"; } + + .fa-ship:before { + content: "\f21a"; } + + .fa-shipping-fast:before { + content: "\f48b"; } + + .fa-shipping-timed:before { + content: "\f48c"; } + + .fa-shirtsinbulk:before { + content: "\f214"; } + + .fa-shish-kebab:before { + content: "\f821"; } + + .fa-shoe-prints:before { + content: "\f54b"; } + + .fa-shopify:before { + content: "\f957"; } + + .fa-shopping-bag:before { + content: "\f290"; } + + .fa-shopping-basket:before { + content: "\f291"; } + + .fa-shopping-cart:before { + content: "\f07a"; } + + .fa-shopware:before { + content: "\f5b5"; } + + .fa-shovel:before { + content: "\f713"; } + + .fa-shovel-snow:before { + content: "\f7c3"; } + + .fa-shower:before { + content: "\f2cc"; } + + .fa-shredder:before { + content: "\f68a"; } + + .fa-shuttle-van:before { + content: "\f5b6"; } + + .fa-shuttlecock:before { + content: "\f45b"; } + + .fa-sickle:before { + content: "\f822"; } + + .fa-sigma:before { + content: "\f68b"; } + + .fa-sign:before { + content: "\f4d9"; } + + .fa-sign-in:before { + content: "\f090"; } + + .fa-sign-in-alt:before { + content: "\f2f6"; } + + .fa-sign-language:before { + content: "\f2a7"; } + + .fa-sign-out:before { + content: "\f08b"; } + + .fa-sign-out-alt:before { + content: "\f2f5"; } + + .fa-signal:before { + content: "\f012"; } + + .fa-signal-1:before { + content: "\f68c"; } + + .fa-signal-2:before { + content: "\f68d"; } + + .fa-signal-3:before { + content: "\f68e"; } + + .fa-signal-4:before { + content: "\f68f"; } + + .fa-signal-alt:before { + content: "\f690"; } + + .fa-signal-alt-1:before { + content: "\f691"; } + + .fa-signal-alt-2:before { + content: "\f692"; } + + .fa-signal-alt-3:before { + content: "\f693"; } + + .fa-signal-alt-slash:before { + content: "\f694"; } + + .fa-signal-slash:before { + content: "\f695"; } + + .fa-signal-stream:before { + content: "\f8dd"; } + + .fa-signature:before { + content: "\f5b7"; } + + .fa-sim-card:before { + content: "\f7c4"; } + + .fa-simplybuilt:before { + content: "\f215"; } + + .fa-sink:before { + content: "\f96d"; } + + .fa-siren:before { + content: "\f92d"; } + + .fa-siren-on:before { + content: "\f92e"; } + + .fa-sistrix:before { + content: "\f3ee"; } + + .fa-sitemap:before { + content: "\f0e8"; } + + .fa-sith:before { + content: "\f512"; } + + .fa-skating:before { + content: "\f7c5"; } + + .fa-skeleton:before { + content: "\f620"; } + + .fa-sketch:before { + content: "\f7c6"; } + + .fa-ski-jump:before { + content: "\f7c7"; } + + .fa-ski-lift:before { + content: "\f7c8"; } + + .fa-skiing:before { + content: "\f7c9"; } + + .fa-skiing-nordic:before { + content: "\f7ca"; } + + .fa-skull:before { + content: "\f54c"; } + + .fa-skull-cow:before { + content: "\f8de"; } + + .fa-skull-crossbones:before { + content: "\f714"; } + + .fa-skyatlas:before { + content: "\f216"; } + + .fa-skype:before { + content: "\f17e"; } + + .fa-slack:before { + content: "\f198"; } + + .fa-slack-hash:before { + content: "\f3ef"; } + + .fa-slash:before { + content: "\f715"; } + + .fa-sledding:before { + content: "\f7cb"; } + + .fa-sleigh:before { + content: "\f7cc"; } + + .fa-sliders-h:before { + content: "\f1de"; } + + .fa-sliders-h-square:before { + content: "\f3f0"; } + + .fa-sliders-v:before { + content: "\f3f1"; } + + .fa-sliders-v-square:before { + content: "\f3f2"; } + + .fa-slideshare:before { + content: "\f1e7"; } + + .fa-smile:before { + content: "\f118"; } + + .fa-smile-beam:before { + content: "\f5b8"; } + + .fa-smile-plus:before { + content: "\f5b9"; } + + .fa-smile-wink:before { + content: "\f4da"; } + + .fa-smog:before { + content: "\f75f"; } + + .fa-smoke:before { + content: "\f760"; } + + .fa-smoking:before { + content: "\f48d"; } + + .fa-smoking-ban:before { + content: "\f54d"; } + + .fa-sms:before { + content: "\f7cd"; } + + .fa-snake:before { + content: "\f716"; } + + .fa-snapchat:before { + content: "\f2ab"; } + + .fa-snapchat-ghost:before { + content: "\f2ac"; } + + .fa-snapchat-square:before { + content: "\f2ad"; } + + .fa-snooze:before { + content: "\f880"; } + + .fa-snow-blowing:before { + content: "\f761"; } + + .fa-snowboarding:before { + content: "\f7ce"; } + + .fa-snowflake:before { + content: "\f2dc"; } + + .fa-snowflakes:before { + content: "\f7cf"; } + + .fa-snowman:before { + content: "\f7d0"; } + + .fa-snowmobile:before { + content: "\f7d1"; } + + .fa-snowplow:before { + content: "\f7d2"; } + + .fa-soap:before { + content: "\f96e"; } + + .fa-socks:before { + content: "\f696"; } + + .fa-solar-panel:before { + content: "\f5ba"; } + + .fa-solar-system:before { + content: "\f92f"; } + + .fa-sort:before { + content: "\f0dc"; } + + .fa-sort-alpha-down:before { + content: "\f15d"; } + + .fa-sort-alpha-down-alt:before { + content: "\f881"; } + + .fa-sort-alpha-up:before { + content: "\f15e"; } + + .fa-sort-alpha-up-alt:before { + content: "\f882"; } + + .fa-sort-alt:before { + content: "\f883"; } + + .fa-sort-amount-down:before { + content: "\f160"; } + + .fa-sort-amount-down-alt:before { + content: "\f884"; } + + .fa-sort-amount-up:before { + content: "\f161"; } + + .fa-sort-amount-up-alt:before { + content: "\f885"; } + + .fa-sort-circle:before { + content: "\f930"; } + + .fa-sort-circle-down:before { + content: "\f931"; } + + .fa-sort-circle-up:before { + content: "\f932"; } + + .fa-sort-down:before { + content: "\f0dd"; } + + .fa-sort-numeric-down:before { + content: "\f162"; } + + .fa-sort-numeric-down-alt:before { + content: "\f886"; } + + .fa-sort-numeric-up:before { + content: "\f163"; } + + .fa-sort-numeric-up-alt:before { + content: "\f887"; } + + .fa-sort-shapes-down:before { + content: "\f888"; } + + .fa-sort-shapes-down-alt:before { + content: "\f889"; } + + .fa-sort-shapes-up:before { + content: "\f88a"; } + + .fa-sort-shapes-up-alt:before { + content: "\f88b"; } + + .fa-sort-size-down:before { + content: "\f88c"; } + + .fa-sort-size-down-alt:before { + content: "\f88d"; } + + .fa-sort-size-up:before { + content: "\f88e"; } + + .fa-sort-size-up-alt:before { + content: "\f88f"; } + + .fa-sort-up:before { + content: "\f0de"; } + + .fa-soundcloud:before { + content: "\f1be"; } + + .fa-soup:before { + content: "\f823"; } + + .fa-sourcetree:before { + content: "\f7d3"; } + + .fa-spa:before { + content: "\f5bb"; } + + .fa-space-shuttle:before { + content: "\f197"; } + + .fa-space-station-moon:before { + content: "\f933"; } + + .fa-space-station-moon-alt:before { + content: "\f934"; } + + .fa-spade:before { + content: "\f2f4"; } + + .fa-sparkles:before { + content: "\f890"; } + + .fa-speakap:before { + content: "\f3f3"; } + + .fa-speaker:before { + content: "\f8df"; } + + .fa-speaker-deck:before { + content: "\f83c"; } + + .fa-speakers:before { + content: "\f8e0"; } + + .fa-spell-check:before { + content: "\f891"; } + + .fa-spider:before { + content: "\f717"; } + + .fa-spider-black-widow:before { + content: "\f718"; } + + .fa-spider-web:before { + content: "\f719"; } + + .fa-spinner:before { + content: "\f110"; } + + .fa-spinner-third:before { + content: "\f3f4"; } + + .fa-splotch:before { + content: "\f5bc"; } + + .fa-spotify:before { + content: "\f1bc"; } + + .fa-spray-can:before { + content: "\f5bd"; } + + .fa-sprinkler:before { + content: "\f935"; } + + .fa-square:before { + content: "\f0c8"; } + + .fa-square-full:before { + content: "\f45c"; } + + .fa-square-root:before { + content: "\f697"; } + + .fa-square-root-alt:before { + content: "\f698"; } + + .fa-squarespace:before { + content: "\f5be"; } + + .fa-squirrel:before { + content: "\f71a"; } + + .fa-stack-exchange:before { + content: "\f18d"; } + + .fa-stack-overflow:before { + content: "\f16c"; } + + .fa-stackpath:before { + content: "\f842"; } + + .fa-staff:before { + content: "\f71b"; } + + .fa-stamp:before { + content: "\f5bf"; } + + .fa-star:before { + content: "\f005"; } + + .fa-star-and-crescent:before { + content: "\f699"; } + + .fa-star-christmas:before { + content: "\f7d4"; } + + .fa-star-exclamation:before { + content: "\f2f3"; } + + .fa-star-half:before { + content: "\f089"; } + + .fa-star-half-alt:before { + content: "\f5c0"; } + + .fa-star-of-david:before { + content: "\f69a"; } + + .fa-star-of-life:before { + content: "\f621"; } + + .fa-star-shooting:before { + content: "\f936"; } + + .fa-starfighter:before { + content: "\f937"; } + + .fa-starfighter-alt:before { + content: "\f938"; } + + .fa-stars:before { + content: "\f762"; } + + .fa-starship:before { + content: "\f939"; } + + .fa-starship-freighter:before { + content: "\f93a"; } + + .fa-staylinked:before { + content: "\f3f5"; } + + .fa-steak:before { + content: "\f824"; } + + .fa-steam:before { + content: "\f1b6"; } + + .fa-steam-square:before { + content: "\f1b7"; } + + .fa-steam-symbol:before { + content: "\f3f6"; } + + .fa-steering-wheel:before { + content: "\f622"; } + + .fa-step-backward:before { + content: "\f048"; } + + .fa-step-forward:before { + content: "\f051"; } + + .fa-stethoscope:before { + content: "\f0f1"; } + + .fa-sticker-mule:before { + content: "\f3f7"; } + + .fa-sticky-note:before { + content: "\f249"; } + + .fa-stocking:before { + content: "\f7d5"; } + + .fa-stomach:before { + content: "\f623"; } + + .fa-stop:before { + content: "\f04d"; } + + .fa-stop-circle:before { + content: "\f28d"; } + + .fa-stopwatch:before { + content: "\f2f2"; } + + .fa-stopwatch-20:before { + content: "\f96f"; } + + .fa-store:before { + content: "\f54e"; } + + .fa-store-alt:before { + content: "\f54f"; } + + .fa-store-alt-slash:before { + content: "\f970"; } + + .fa-store-slash:before { + content: "\f971"; } + + .fa-strava:before { + content: "\f428"; } + + .fa-stream:before { + content: "\f550"; } + + .fa-street-view:before { + content: "\f21d"; } + + .fa-stretcher:before { + content: "\f825"; } + + .fa-strikethrough:before { + content: "\f0cc"; } + + .fa-stripe:before { + content: "\f429"; } + + .fa-stripe-s:before { + content: "\f42a"; } + + .fa-stroopwafel:before { + content: "\f551"; } + + .fa-studiovinari:before { + content: "\f3f8"; } + + .fa-stumbleupon:before { + content: "\f1a4"; } + + .fa-stumbleupon-circle:before { + content: "\f1a3"; } + + .fa-subscript:before { + content: "\f12c"; } + + .fa-subway:before { + content: "\f239"; } + + .fa-suitcase:before { + content: "\f0f2"; } + + .fa-suitcase-rolling:before { + content: "\f5c1"; } + + .fa-sun:before { + content: "\f185"; } + + .fa-sun-cloud:before { + content: "\f763"; } + + .fa-sun-dust:before { + content: "\f764"; } + + .fa-sun-haze:before { + content: "\f765"; } + + .fa-sunglasses:before { + content: "\f892"; } + + .fa-sunrise:before { + content: "\f766"; } + + .fa-sunset:before { + content: "\f767"; } + + .fa-superpowers:before { + content: "\f2dd"; } + + .fa-superscript:before { + content: "\f12b"; } + + .fa-supple:before { + content: "\f3f9"; } + + .fa-surprise:before { + content: "\f5c2"; } + + .fa-suse:before { + content: "\f7d6"; } + + .fa-swatchbook:before { + content: "\f5c3"; } + + .fa-swift:before { + content: "\f8e1"; } + + .fa-swimmer:before { + content: "\f5c4"; } + + .fa-swimming-pool:before { + content: "\f5c5"; } + + .fa-sword:before { + content: "\f71c"; } + + .fa-sword-laser:before { + content: "\f93b"; } + + .fa-sword-laser-alt:before { + content: "\f93c"; } + + .fa-swords:before { + content: "\f71d"; } + + .fa-swords-laser:before { + content: "\f93d"; } + + .fa-symfony:before { + content: "\f83d"; } + + .fa-synagogue:before { + content: "\f69b"; } + + .fa-sync:before { + content: "\f021"; } + + .fa-sync-alt:before { + content: "\f2f1"; } + + .fa-syringe:before { + content: "\f48e"; } + + .fa-table:before { + content: "\f0ce"; } + + .fa-table-tennis:before { + content: "\f45d"; } + + .fa-tablet:before { + content: "\f10a"; } + + .fa-tablet-alt:before { + content: "\f3fa"; } + + .fa-tablet-android:before { + content: "\f3fb"; } + + .fa-tablet-android-alt:before { + content: "\f3fc"; } + + .fa-tablet-rugged:before { + content: "\f48f"; } + + .fa-tablets:before { + content: "\f490"; } + + .fa-tachometer:before { + content: "\f0e4"; } + + .fa-tachometer-alt:before { + content: "\f3fd"; } + + .fa-tachometer-alt-average:before { + content: "\f624"; } + + .fa-tachometer-alt-fast:before { + content: "\f625"; } + + .fa-tachometer-alt-fastest:before { + content: "\f626"; } + + .fa-tachometer-alt-slow:before { + content: "\f627"; } + + .fa-tachometer-alt-slowest:before { + content: "\f628"; } + + .fa-tachometer-average:before { + content: "\f629"; } + + .fa-tachometer-fast:before { + content: "\f62a"; } + + .fa-tachometer-fastest:before { + content: "\f62b"; } + + .fa-tachometer-slow:before { + content: "\f62c"; } + + .fa-tachometer-slowest:before { + content: "\f62d"; } + + .fa-taco:before { + content: "\f826"; } + + .fa-tag:before { + content: "\f02b"; } + + .fa-tags:before { + content: "\f02c"; } + + .fa-tally:before { + content: "\f69c"; } + + .fa-tanakh:before { + content: "\f827"; } + + .fa-tape:before { + content: "\f4db"; } + + .fa-tasks:before { + content: "\f0ae"; } + + .fa-tasks-alt:before { + content: "\f828"; } + + .fa-taxi:before { + content: "\f1ba"; } + + .fa-teamspeak:before { + content: "\f4f9"; } + + .fa-teeth:before { + content: "\f62e"; } + + .fa-teeth-open:before { + content: "\f62f"; } + + .fa-telegram:before { + content: "\f2c6"; } + + .fa-telegram-plane:before { + content: "\f3fe"; } + + .fa-telescope:before { + content: "\f93e"; } + + .fa-temperature-down:before { + content: "\f93f"; } + + .fa-temperature-frigid:before { + content: "\f768"; } + + .fa-temperature-high:before { + content: "\f769"; } + + .fa-temperature-hot:before { + content: "\f76a"; } + + .fa-temperature-low:before { + content: "\f76b"; } + + .fa-temperature-up:before { + content: "\f940"; } + + .fa-tencent-weibo:before { + content: "\f1d5"; } + + .fa-tenge:before { + content: "\f7d7"; } + + .fa-tennis-ball:before { + content: "\f45e"; } + + .fa-terminal:before { + content: "\f120"; } + + .fa-text:before { + content: "\f893"; } + + .fa-text-height:before { + content: "\f034"; } + + .fa-text-size:before { + content: "\f894"; } + + .fa-text-width:before { + content: "\f035"; } + + .fa-th:before { + content: "\f00a"; } + + .fa-th-large:before { + content: "\f009"; } + + .fa-th-list:before { + content: "\f00b"; } + + .fa-the-red-yeti:before { + content: "\f69d"; } + + .fa-theater-masks:before { + content: "\f630"; } + + .fa-themeco:before { + content: "\f5c6"; } + + .fa-themeisle:before { + content: "\f2b2"; } + + .fa-thermometer:before { + content: "\f491"; } + + .fa-thermometer-empty:before { + content: "\f2cb"; } + + .fa-thermometer-full:before { + content: "\f2c7"; } + + .fa-thermometer-half:before { + content: "\f2c9"; } + + .fa-thermometer-quarter:before { + content: "\f2ca"; } + + .fa-thermometer-three-quarters:before { + content: "\f2c8"; } + + .fa-theta:before { + content: "\f69e"; } + + .fa-think-peaks:before { + content: "\f731"; } + + .fa-thumbs-down:before { + content: "\f165"; } + + .fa-thumbs-up:before { + content: "\f164"; } + + .fa-thumbtack:before { + content: "\f08d"; } + + .fa-thunderstorm:before { + content: "\f76c"; } + + .fa-thunderstorm-moon:before { + content: "\f76d"; } + + .fa-thunderstorm-sun:before { + content: "\f76e"; } + + .fa-ticket:before { + content: "\f145"; } + + .fa-ticket-alt:before { + content: "\f3ff"; } + + .fa-tilde:before { + content: "\f69f"; } + + .fa-times:before { + content: "\f00d"; } + + .fa-times-circle:before { + content: "\f057"; } + + .fa-times-hexagon:before { + content: "\f2ee"; } + + .fa-times-octagon:before { + content: "\f2f0"; } + + .fa-times-square:before { + content: "\f2d3"; } + + .fa-tint:before { + content: "\f043"; } + + .fa-tint-slash:before { + content: "\f5c7"; } + + .fa-tire:before { + content: "\f631"; } + + .fa-tire-flat:before { + content: "\f632"; } + + .fa-tire-pressure-warning:before { + content: "\f633"; } + + .fa-tire-rugged:before { + content: "\f634"; } + + .fa-tired:before { + content: "\f5c8"; } + + .fa-toggle-off:before { + content: "\f204"; } + + .fa-toggle-on:before { + content: "\f205"; } + + .fa-toilet:before { + content: "\f7d8"; } + + .fa-toilet-paper:before { + content: "\f71e"; } + + .fa-toilet-paper-alt:before { + content: "\f71f"; } + + .fa-toilet-paper-slash:before { + content: "\f972"; } + + .fa-tombstone:before { + content: "\f720"; } + + .fa-tombstone-alt:before { + content: "\f721"; } + + .fa-toolbox:before { + content: "\f552"; } + + .fa-tools:before { + content: "\f7d9"; } + + .fa-tooth:before { + content: "\f5c9"; } + + .fa-toothbrush:before { + content: "\f635"; } + + .fa-torah:before { + content: "\f6a0"; } + + .fa-torii-gate:before { + content: "\f6a1"; } + + .fa-tornado:before { + content: "\f76f"; } + + .fa-tractor:before { + content: "\f722"; } + + .fa-trade-federation:before { + content: "\f513"; } + + .fa-trademark:before { + content: "\f25c"; } + + .fa-traffic-cone:before { + content: "\f636"; } + + .fa-traffic-light:before { + content: "\f637"; } + + .fa-traffic-light-go:before { + content: "\f638"; } + + .fa-traffic-light-slow:before { + content: "\f639"; } + + .fa-traffic-light-stop:before { + content: "\f63a"; } + + .fa-trailer:before { + content: "\f941"; } + + .fa-train:before { + content: "\f238"; } + + .fa-tram:before { + content: "\f7da"; } + + .fa-transgender:before { + content: "\f224"; } + + .fa-transgender-alt:before { + content: "\f225"; } + + .fa-transporter:before { + content: "\f942"; } + + .fa-transporter-1:before { + content: "\f943"; } + + .fa-transporter-2:before { + content: "\f944"; } + + .fa-transporter-3:before { + content: "\f945"; } + + .fa-transporter-empty:before { + content: "\f946"; } + + .fa-trash:before { + content: "\f1f8"; } + + .fa-trash-alt:before { + content: "\f2ed"; } + + .fa-trash-restore:before { + content: "\f829"; } + + .fa-trash-restore-alt:before { + content: "\f82a"; } + + .fa-trash-undo:before { + content: "\f895"; } + + .fa-trash-undo-alt:before { + content: "\f896"; } + + .fa-treasure-chest:before { + content: "\f723"; } + + .fa-tree:before { + content: "\f1bb"; } + + .fa-tree-alt:before { + content: "\f400"; } + + .fa-tree-christmas:before { + content: "\f7db"; } + + .fa-tree-decorated:before { + content: "\f7dc"; } + + .fa-tree-large:before { + content: "\f7dd"; } + + .fa-tree-palm:before { + content: "\f82b"; } + + .fa-trees:before { + content: "\f724"; } + + .fa-trello:before { + content: "\f181"; } + + .fa-triangle:before { + content: "\f2ec"; } + + .fa-triangle-music:before { + content: "\f8e2"; } + + .fa-tripadvisor:before { + content: "\f262"; } + + .fa-trophy:before { + content: "\f091"; } + + .fa-trophy-alt:before { + content: "\f2eb"; } + + .fa-truck:before { + content: "\f0d1"; } + + .fa-truck-container:before { + content: "\f4dc"; } + + .fa-truck-couch:before { + content: "\f4dd"; } + + .fa-truck-loading:before { + content: "\f4de"; } + + .fa-truck-monster:before { + content: "\f63b"; } + + .fa-truck-moving:before { + content: "\f4df"; } + + .fa-truck-pickup:before { + content: "\f63c"; } + + .fa-truck-plow:before { + content: "\f7de"; } + + .fa-truck-ramp:before { + content: "\f4e0"; } + + .fa-trumpet:before { + content: "\f8e3"; } + + .fa-tshirt:before { + content: "\f553"; } + + .fa-tty:before { + content: "\f1e4"; } + + .fa-tumblr:before { + content: "\f173"; } + + .fa-tumblr-square:before { + content: "\f174"; } + + .fa-turkey:before { + content: "\f725"; } + + .fa-turntable:before { + content: "\f8e4"; } + + .fa-turtle:before { + content: "\f726"; } + + .fa-tv:before { + content: "\f26c"; } + + .fa-tv-alt:before { + content: "\f8e5"; } + + .fa-tv-music:before { + content: "\f8e6"; } + + .fa-tv-retro:before { + content: "\f401"; } + + .fa-twitch:before { + content: "\f1e8"; } + + .fa-twitter:before { + content: "\f099"; } + + .fa-twitter-square:before { + content: "\f081"; } + + .fa-typewriter:before { + content: "\f8e7"; } + + .fa-typo3:before { + content: "\f42b"; } + + .fa-uber:before { + content: "\f402"; } + + .fa-ubuntu:before { + content: "\f7df"; } + + .fa-ufo:before { + content: "\f947"; } + + .fa-ufo-beam:before { + content: "\f948"; } + + .fa-uikit:before { + content: "\f403"; } + + .fa-umbraco:before { + content: "\f8e8"; } + + .fa-umbrella:before { + content: "\f0e9"; } + + .fa-umbrella-beach:before { + content: "\f5ca"; } + + .fa-underline:before { + content: "\f0cd"; } + + .fa-undo:before { + content: "\f0e2"; } + + .fa-undo-alt:before { + content: "\f2ea"; } + + .fa-unicorn:before { + content: "\f727"; } + + .fa-union:before { + content: "\f6a2"; } + + .fa-uniregistry:before { + content: "\f404"; } + + .fa-unity:before { + content: "\f949"; } + + .fa-universal-access:before { + content: "\f29a"; } + + .fa-university:before { + content: "\f19c"; } + + .fa-unlink:before { + content: "\f127"; } + + .fa-unlock:before { + content: "\f09c"; } + + .fa-unlock-alt:before { + content: "\f13e"; } + + .fa-untappd:before { + content: "\f405"; } + + .fa-upload:before { + content: "\f093"; } + + .fa-ups:before { + content: "\f7e0"; } + + .fa-usb:before { + content: "\f287"; } + + .fa-usb-drive:before { + content: "\f8e9"; } + + .fa-usd-circle:before { + content: "\f2e8"; } + + .fa-usd-square:before { + content: "\f2e9"; } + + .fa-user:before { + content: "\f007"; } + + .fa-user-alien:before { + content: "\f94a"; } + + .fa-user-alt:before { + content: "\f406"; } + + .fa-user-alt-slash:before { + content: "\f4fa"; } + + .fa-user-astronaut:before { + content: "\f4fb"; } + + .fa-user-chart:before { + content: "\f6a3"; } + + .fa-user-check:before { + content: "\f4fc"; } + + .fa-user-circle:before { + content: "\f2bd"; } + + .fa-user-clock:before { + content: "\f4fd"; } + + .fa-user-cog:before { + content: "\f4fe"; } + + .fa-user-cowboy:before { + content: "\f8ea"; } + + .fa-user-crown:before { + content: "\f6a4"; } + + .fa-user-edit:before { + content: "\f4ff"; } + + .fa-user-friends:before { + content: "\f500"; } + + .fa-user-graduate:before { + content: "\f501"; } + + .fa-user-hard-hat:before { + content: "\f82c"; } + + .fa-user-headset:before { + content: "\f82d"; } + + .fa-user-injured:before { + content: "\f728"; } + + .fa-user-lock:before { + content: "\f502"; } + + .fa-user-md:before { + content: "\f0f0"; } + + .fa-user-md-chat:before { + content: "\f82e"; } + + .fa-user-minus:before { + content: "\f503"; } + + .fa-user-music:before { + content: "\f8eb"; } + + .fa-user-ninja:before { + content: "\f504"; } + + .fa-user-nurse:before { + content: "\f82f"; } + + .fa-user-plus:before { + content: "\f234"; } + + .fa-user-robot:before { + content: "\f94b"; } + + .fa-user-secret:before { + content: "\f21b"; } + + .fa-user-shield:before { + content: "\f505"; } + + .fa-user-slash:before { + content: "\f506"; } + + .fa-user-tag:before { + content: "\f507"; } + + .fa-user-tie:before { + content: "\f508"; } + + .fa-user-times:before { + content: "\f235"; } + + .fa-user-unlock:before { + content: "\f958"; } + + .fa-user-visor:before { + content: "\f94c"; } + + .fa-users:before { + content: "\f0c0"; } + + .fa-users-class:before { + content: "\f63d"; } + + .fa-users-cog:before { + content: "\f509"; } + + .fa-users-crown:before { + content: "\f6a5"; } + + .fa-users-medical:before { + content: "\f830"; } + + .fa-users-slash:before { + content: "\f973"; } + + .fa-usps:before { + content: "\f7e1"; } + + .fa-ussunnah:before { + content: "\f407"; } + + .fa-utensil-fork:before { + content: "\f2e3"; } + + .fa-utensil-knife:before { + content: "\f2e4"; } + + .fa-utensil-spoon:before { + content: "\f2e5"; } + + .fa-utensils:before { + content: "\f2e7"; } + + .fa-utensils-alt:before { + content: "\f2e6"; } + + .fa-vaadin:before { + content: "\f408"; } + + .fa-vacuum:before { + content: "\f94d"; } + + .fa-vacuum-robot:before { + content: "\f94e"; } + + .fa-value-absolute:before { + content: "\f6a6"; } + + .fa-vector-square:before { + content: "\f5cb"; } + + .fa-venus:before { + content: "\f221"; } + + .fa-venus-double:before { + content: "\f226"; } + + .fa-venus-mars:before { + content: "\f228"; } + + .fa-vhs:before { + content: "\f8ec"; } + + .fa-viacoin:before { + content: "\f237"; } + + .fa-viadeo:before { + content: "\f2a9"; } + + .fa-viadeo-square:before { + content: "\f2aa"; } + + .fa-vial:before { + content: "\f492"; } + + .fa-vials:before { + content: "\f493"; } + + .fa-viber:before { + content: "\f409"; } + + .fa-video:before { + content: "\f03d"; } + + .fa-video-plus:before { + content: "\f4e1"; } + + .fa-video-slash:before { + content: "\f4e2"; } + + .fa-vihara:before { + content: "\f6a7"; } + + .fa-vimeo:before { + content: "\f40a"; } + + .fa-vimeo-square:before { + content: "\f194"; } + + .fa-vimeo-v:before { + content: "\f27d"; } + + .fa-vine:before { + content: "\f1ca"; } + + .fa-violin:before { + content: "\f8ed"; } + + .fa-virus:before { + content: "\f974"; } + + .fa-virus-slash:before { + content: "\f975"; } + + .fa-viruses:before { + content: "\f976"; } + + .fa-vk:before { + content: "\f189"; } + + .fa-vnv:before { + content: "\f40b"; } + + .fa-voicemail:before { + content: "\f897"; } + + .fa-volcano:before { + content: "\f770"; } + + .fa-volleyball-ball:before { + content: "\f45f"; } + + .fa-volume:before { + content: "\f6a8"; } + + .fa-volume-down:before { + content: "\f027"; } + + .fa-volume-mute:before { + content: "\f6a9"; } + + .fa-volume-off:before { + content: "\f026"; } + + .fa-volume-slash:before { + content: "\f2e2"; } + + .fa-volume-up:before { + content: "\f028"; } + + .fa-vote-nay:before { + content: "\f771"; } + + .fa-vote-yea:before { + content: "\f772"; } + + .fa-vr-cardboard:before { + content: "\f729"; } + + .fa-vuejs:before { + content: "\f41f"; } + + .fa-wagon-covered:before { + content: "\f8ee"; } + + .fa-walker:before { + content: "\f831"; } + + .fa-walkie-talkie:before { + content: "\f8ef"; } + + .fa-walking:before { + content: "\f554"; } + + .fa-wallet:before { + content: "\f555"; } + + .fa-wand:before { + content: "\f72a"; } + + .fa-wand-magic:before { + content: "\f72b"; } + + .fa-warehouse:before { + content: "\f494"; } + + .fa-warehouse-alt:before { + content: "\f495"; } + + .fa-washer:before { + content: "\f898"; } + + .fa-watch:before { + content: "\f2e1"; } + + .fa-watch-calculator:before { + content: "\f8f0"; } + + .fa-watch-fitness:before { + content: "\f63e"; } + + .fa-water:before { + content: "\f773"; } + + .fa-water-lower:before { + content: "\f774"; } + + .fa-water-rise:before { + content: "\f775"; } + + .fa-wave-sine:before { + content: "\f899"; } + + .fa-wave-square:before { + content: "\f83e"; } + + .fa-wave-triangle:before { + content: "\f89a"; } + + .fa-waveform:before { + content: "\f8f1"; } + + .fa-waveform-path:before { + content: "\f8f2"; } + + .fa-waze:before { + content: "\f83f"; } + + .fa-webcam:before { + content: "\f832"; } + + .fa-webcam-slash:before { + content: "\f833"; } + + .fa-weebly:before { + content: "\f5cc"; } + + .fa-weibo:before { + content: "\f18a"; } + + .fa-weight:before { + content: "\f496"; } + + .fa-weight-hanging:before { + content: "\f5cd"; } + + .fa-weixin:before { + content: "\f1d7"; } + + .fa-whale:before { + content: "\f72c"; } + + .fa-whatsapp:before { + content: "\f232"; } + + .fa-whatsapp-square:before { + content: "\f40c"; } + + .fa-wheat:before { + content: "\f72d"; } + + .fa-wheelchair:before { + content: "\f193"; } + + .fa-whistle:before { + content: "\f460"; } + + .fa-whmcs:before { + content: "\f40d"; } + + .fa-wifi:before { + content: "\f1eb"; } + + .fa-wifi-1:before { + content: "\f6aa"; } + + .fa-wifi-2:before { + content: "\f6ab"; } + + .fa-wifi-slash:before { + content: "\f6ac"; } + + .fa-wikipedia-w:before { + content: "\f266"; } + + .fa-wind:before { + content: "\f72e"; } + + .fa-wind-turbine:before { + content: "\f89b"; } + + .fa-wind-warning:before { + content: "\f776"; } + + .fa-window:before { + content: "\f40e"; } + + .fa-window-alt:before { + content: "\f40f"; } + + .fa-window-close:before { + content: "\f410"; } + + .fa-window-frame:before { + content: "\f94f"; } + + .fa-window-frame-open:before { + content: "\f950"; } + + .fa-window-maximize:before { + content: "\f2d0"; } + + .fa-window-minimize:before { + content: "\f2d1"; } + + .fa-window-restore:before { + content: "\f2d2"; } + + .fa-windows:before { + content: "\f17a"; } + + .fa-windsock:before { + content: "\f777"; } + + .fa-wine-bottle:before { + content: "\f72f"; } + + .fa-wine-glass:before { + content: "\f4e3"; } + + .fa-wine-glass-alt:before { + content: "\f5ce"; } + + .fa-wix:before { + content: "\f5cf"; } + + .fa-wizards-of-the-coast:before { + content: "\f730"; } + + .fa-wolf-pack-battalion:before { + content: "\f514"; } + + .fa-won-sign:before { + content: "\f159"; } + + .fa-wordpress:before { + content: "\f19a"; } + + .fa-wordpress-simple:before { + content: "\f411"; } + + .fa-wpbeginner:before { + content: "\f297"; } + + .fa-wpexplorer:before { + content: "\f2de"; } + + .fa-wpforms:before { + content: "\f298"; } + + .fa-wpressr:before { + content: "\f3e4"; } + + .fa-wreath:before { + content: "\f7e2"; } + + .fa-wrench:before { + content: "\f0ad"; } + + .fa-x-ray:before { + content: "\f497"; } + + .fa-xbox:before { + content: "\f412"; } + + .fa-xing:before { + content: "\f168"; } + + .fa-xing-square:before { + content: "\f169"; } + + .fa-y-combinator:before { + content: "\f23b"; } + + .fa-yahoo:before { + content: "\f19e"; } + + .fa-yammer:before { + content: "\f840"; } + + .fa-yandex:before { + content: "\f413"; } + + .fa-yandex-international:before { + content: "\f414"; } + + .fa-yarn:before { + content: "\f7e3"; } + + .fa-yelp:before { + content: "\f1e9"; } + + .fa-yen-sign:before { + content: "\f157"; } + + .fa-yin-yang:before { + content: "\f6ad"; } + + .fa-yoast:before { + content: "\f2b1"; } + + .fa-youtube:before { + content: "\f167"; } + + .fa-youtube-square:before { + content: "\f431"; } + + .fa-zhihu:before { + content: "\f63f"; } + + .sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; } + + .sr-only-focusable:active, .sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; } + @font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../../assets/fonts/fa-brands-400.eot"); + src: url("../../assets/fonts/fa-brands-400d41d.eot?#iefix") format("embedded-opentype"), url("../../assets/fonts/fa-brands-400.html") format("woff2"), url("../../assets/fonts/fa-brands-400.woff") format("woff"), url("../../assets/fonts/fa-brands-400.ttf") format("truetype"), url("../../assets/fonts/fa-brands-400.svg#fontawesome") format("svg"); } + + .fab { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + @font-face { + font-family: 'Font Awesome 5 Duotone'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../../assets/fonts/fa-duotone-900.eot"); + src: url("../../assets/fonts/fa-duotone-900d41d.eot?#iefix") format("embedded-opentype"), url("../../assets/fonts/fa-duotone-900.html") format("woff2"), url("../../assets/fonts/fa-duotone-900.woff") format("woff"), url("../../assets/fonts/fa-duotone-900.ttf") format("truetype"), url("../../assets/fonts/fa-duotone-900.svg#fontawesome") format("svg"); } + + .fad { + position: relative; + font-family: 'Font Awesome 5 Duotone'; + font-weight: 900; } + + .fad:before { + position: absolute; + color: var(--fa-primary-color, inherit); + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + + .fad:after { + color: var(--fa-secondary-color, inherit); + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + + .fa-swap-opacity .fad:before, + .fad.fa-swap-opacity:before { + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + + .fa-swap-opacity .fad:after, + .fad.fa-swap-opacity:after { + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + + .fad.fa-inverse { + color: #fff; } + + .fad.fa-stack-1x, .fad.fa-stack-2x { + position: absolute; } + + .fad.fa-stack-1x:before, + .fad.fa-stack-2x:before, + .fad.fa-fw:before { + left: 50%; + -webkit-transform: translateX(-50%); + transform: translateX(-50%); } + + .fad.fa-abacus:after { + content: "\10f640"; } + + .fad.fa-acorn:after { + content: "\10f6ae"; } + + .fad.fa-ad:after { + content: "\10f641"; } + + .fad.fa-address-book:after { + content: "\10f2b9"; } + + .fad.fa-address-card:after { + content: "\10f2bb"; } + + .fad.fa-adjust:after { + content: "\10f042"; } + + .fad.fa-air-conditioner:after { + content: "\10f8f4"; } + + .fad.fa-air-freshener:after { + content: "\10f5d0"; } + + .fad.fa-alarm-clock:after { + content: "\10f34e"; } + + .fad.fa-alarm-exclamation:after { + content: "\10f843"; } + + .fad.fa-alarm-plus:after { + content: "\10f844"; } + + .fad.fa-alarm-snooze:after { + content: "\10f845"; } + + .fad.fa-album:after { + content: "\10f89f"; } + + .fad.fa-album-collection:after { + content: "\10f8a0"; } + + .fad.fa-alicorn:after { + content: "\10f6b0"; } + + .fad.fa-alien:after { + content: "\10f8f5"; } + + .fad.fa-alien-monster:after { + content: "\10f8f6"; } + + .fad.fa-align-center:after { + content: "\10f037"; } + + .fad.fa-align-justify:after { + content: "\10f039"; } + + .fad.fa-align-left:after { + content: "\10f036"; } + + .fad.fa-align-right:after { + content: "\10f038"; } + + .fad.fa-align-slash:after { + content: "\10f846"; } + + .fad.fa-allergies:after { + content: "\10f461"; } + + .fad.fa-ambulance:after { + content: "\10f0f9"; } + + .fad.fa-american-sign-language-interpreting:after { + content: "\10f2a3"; } + + .fad.fa-amp-guitar:after { + content: "\10f8a1"; } + + .fad.fa-analytics:after { + content: "\10f643"; } + + .fad.fa-anchor:after { + content: "\10f13d"; } + + .fad.fa-angel:after { + content: "\10f779"; } + + .fad.fa-angle-double-down:after { + content: "\10f103"; } + + .fad.fa-angle-double-left:after { + content: "\10f100"; } + + .fad.fa-angle-double-right:after { + content: "\10f101"; } + + .fad.fa-angle-double-up:after { + content: "\10f102"; } + + .fad.fa-angle-down:after { + content: "\10f107"; } + + .fad.fa-angle-left:after { + content: "\10f104"; } + + .fad.fa-angle-right:after { + content: "\10f105"; } + + .fad.fa-angle-up:after { + content: "\10f106"; } + + .fad.fa-angry:after { + content: "\10f556"; } + + .fad.fa-ankh:after { + content: "\10f644"; } + + .fad.fa-apple-alt:after { + content: "\10f5d1"; } + + .fad.fa-apple-crate:after { + content: "\10f6b1"; } + + .fad.fa-archive:after { + content: "\10f187"; } + + .fad.fa-archway:after { + content: "\10f557"; } + + .fad.fa-arrow-alt-circle-down:after { + content: "\10f358"; } + + .fad.fa-arrow-alt-circle-left:after { + content: "\10f359"; } + + .fad.fa-arrow-alt-circle-right:after { + content: "\10f35a"; } + + .fad.fa-arrow-alt-circle-up:after { + content: "\10f35b"; } + + .fad.fa-arrow-alt-down:after { + content: "\10f354"; } + + .fad.fa-arrow-alt-from-bottom:after { + content: "\10f346"; } + + .fad.fa-arrow-alt-from-left:after { + content: "\10f347"; } + + .fad.fa-arrow-alt-from-right:after { + content: "\10f348"; } + + .fad.fa-arrow-alt-from-top:after { + content: "\10f349"; } + + .fad.fa-arrow-alt-left:after { + content: "\10f355"; } + + .fad.fa-arrow-alt-right:after { + content: "\10f356"; } + + .fad.fa-arrow-alt-square-down:after { + content: "\10f350"; } + + .fad.fa-arrow-alt-square-left:after { + content: "\10f351"; } + + .fad.fa-arrow-alt-square-right:after { + content: "\10f352"; } + + .fad.fa-arrow-alt-square-up:after { + content: "\10f353"; } + + .fad.fa-arrow-alt-to-bottom:after { + content: "\10f34a"; } + + .fad.fa-arrow-alt-to-left:after { + content: "\10f34b"; } + + .fad.fa-arrow-alt-to-right:after { + content: "\10f34c"; } + + .fad.fa-arrow-alt-to-top:after { + content: "\10f34d"; } + + .fad.fa-arrow-alt-up:after { + content: "\10f357"; } + + .fad.fa-arrow-circle-down:after { + content: "\10f0ab"; } + + .fad.fa-arrow-circle-left:after { + content: "\10f0a8"; } + + .fad.fa-arrow-circle-right:after { + content: "\10f0a9"; } + + .fad.fa-arrow-circle-up:after { + content: "\10f0aa"; } + + .fad.fa-arrow-down:after { + content: "\10f063"; } + + .fad.fa-arrow-from-bottom:after { + content: "\10f342"; } + + .fad.fa-arrow-from-left:after { + content: "\10f343"; } + + .fad.fa-arrow-from-right:after { + content: "\10f344"; } + + .fad.fa-arrow-from-top:after { + content: "\10f345"; } + + .fad.fa-arrow-left:after { + content: "\10f060"; } + + .fad.fa-arrow-right:after { + content: "\10f061"; } + + .fad.fa-arrow-square-down:after { + content: "\10f339"; } + + .fad.fa-arrow-square-left:after { + content: "\10f33a"; } + + .fad.fa-arrow-square-right:after { + content: "\10f33b"; } + + .fad.fa-arrow-square-up:after { + content: "\10f33c"; } + + .fad.fa-arrow-to-bottom:after { + content: "\10f33d"; } + + .fad.fa-arrow-to-left:after { + content: "\10f33e"; } + + .fad.fa-arrow-to-right:after { + content: "\10f340"; } + + .fad.fa-arrow-to-top:after { + content: "\10f341"; } + + .fad.fa-arrow-up:after { + content: "\10f062"; } + + .fad.fa-arrows:after { + content: "\10f047"; } + + .fad.fa-arrows-alt:after { + content: "\10f0b2"; } + + .fad.fa-arrows-alt-h:after { + content: "\10f337"; } + + .fad.fa-arrows-alt-v:after { + content: "\10f338"; } + + .fad.fa-arrows-h:after { + content: "\10f07e"; } + + .fad.fa-arrows-v:after { + content: "\10f07d"; } + + .fad.fa-assistive-listening-systems:after { + content: "\10f2a2"; } + + .fad.fa-asterisk:after { + content: "\10f069"; } + + .fad.fa-at:after { + content: "\10f1fa"; } + + .fad.fa-atlas:after { + content: "\10f558"; } + + .fad.fa-atom:after { + content: "\10f5d2"; } + + .fad.fa-atom-alt:after { + content: "\10f5d3"; } + + .fad.fa-audio-description:after { + content: "\10f29e"; } + + .fad.fa-award:after { + content: "\10f559"; } + + .fad.fa-axe:after { + content: "\10f6b2"; } + + .fad.fa-axe-battle:after { + content: "\10f6b3"; } + + .fad.fa-baby:after { + content: "\10f77c"; } + + .fad.fa-baby-carriage:after { + content: "\10f77d"; } + + .fad.fa-backpack:after { + content: "\10f5d4"; } + + .fad.fa-backspace:after { + content: "\10f55a"; } + + .fad.fa-backward:after { + content: "\10f04a"; } + + .fad.fa-bacon:after { + content: "\10f7e5"; } + + .fad.fa-bacteria:after { + content: "\10f959"; } + + .fad.fa-bacterium:after { + content: "\10f95a"; } + + .fad.fa-badge:after { + content: "\10f335"; } + + .fad.fa-badge-check:after { + content: "\10f336"; } + + .fad.fa-badge-dollar:after { + content: "\10f645"; } + + .fad.fa-badge-percent:after { + content: "\10f646"; } + + .fad.fa-badge-sheriff:after { + content: "\10f8a2"; } + + .fad.fa-badger-honey:after { + content: "\10f6b4"; } + + .fad.fa-bags-shopping:after { + content: "\10f847"; } + + .fad.fa-bahai:after { + content: "\10f666"; } + + .fad.fa-balance-scale:after { + content: "\10f24e"; } + + .fad.fa-balance-scale-left:after { + content: "\10f515"; } + + .fad.fa-balance-scale-right:after { + content: "\10f516"; } + + .fad.fa-ball-pile:after { + content: "\10f77e"; } + + .fad.fa-ballot:after { + content: "\10f732"; } + + .fad.fa-ballot-check:after { + content: "\10f733"; } + + .fad.fa-ban:after { + content: "\10f05e"; } + + .fad.fa-band-aid:after { + content: "\10f462"; } + + .fad.fa-banjo:after { + content: "\10f8a3"; } + + .fad.fa-barcode:after { + content: "\10f02a"; } + + .fad.fa-barcode-alt:after { + content: "\10f463"; } + + .fad.fa-barcode-read:after { + content: "\10f464"; } + + .fad.fa-barcode-scan:after { + content: "\10f465"; } + + .fad.fa-bars:after { + content: "\10f0c9"; } + + .fad.fa-baseball:after { + content: "\10f432"; } + + .fad.fa-baseball-ball:after { + content: "\10f433"; } + + .fad.fa-basketball-ball:after { + content: "\10f434"; } + + .fad.fa-basketball-hoop:after { + content: "\10f435"; } + + .fad.fa-bat:after { + content: "\10f6b5"; } + + .fad.fa-bath:after { + content: "\10f2cd"; } + + .fad.fa-battery-bolt:after { + content: "\10f376"; } + + .fad.fa-battery-empty:after { + content: "\10f244"; } + + .fad.fa-battery-full:after { + content: "\10f240"; } + + .fad.fa-battery-half:after { + content: "\10f242"; } + + .fad.fa-battery-quarter:after { + content: "\10f243"; } + + .fad.fa-battery-slash:after { + content: "\10f377"; } + + .fad.fa-battery-three-quarters:after { + content: "\10f241"; } + + .fad.fa-bed:after { + content: "\10f236"; } + + .fad.fa-bed-alt:after { + content: "\10f8f7"; } + + .fad.fa-bed-bunk:after { + content: "\10f8f8"; } + + .fad.fa-bed-empty:after { + content: "\10f8f9"; } + + .fad.fa-beer:after { + content: "\10f0fc"; } + + .fad.fa-bell:after { + content: "\10f0f3"; } + + .fad.fa-bell-exclamation:after { + content: "\10f848"; } + + .fad.fa-bell-on:after { + content: "\10f8fa"; } + + .fad.fa-bell-plus:after { + content: "\10f849"; } + + .fad.fa-bell-school:after { + content: "\10f5d5"; } + + .fad.fa-bell-school-slash:after { + content: "\10f5d6"; } + + .fad.fa-bell-slash:after { + content: "\10f1f6"; } + + .fad.fa-bells:after { + content: "\10f77f"; } + + .fad.fa-betamax:after { + content: "\10f8a4"; } + + .fad.fa-bezier-curve:after { + content: "\10f55b"; } + + .fad.fa-bible:after { + content: "\10f647"; } + + .fad.fa-bicycle:after { + content: "\10f206"; } + + .fad.fa-biking:after { + content: "\10f84a"; } + + .fad.fa-biking-mountain:after { + content: "\10f84b"; } + + .fad.fa-binoculars:after { + content: "\10f1e5"; } + + .fad.fa-biohazard:after { + content: "\10f780"; } + + .fad.fa-birthday-cake:after { + content: "\10f1fd"; } + + .fad.fa-blanket:after { + content: "\10f498"; } + + .fad.fa-blender:after { + content: "\10f517"; } + + .fad.fa-blender-phone:after { + content: "\10f6b6"; } + + .fad.fa-blind:after { + content: "\10f29d"; } + + .fad.fa-blinds:after { + content: "\10f8fb"; } + + .fad.fa-blinds-open:after { + content: "\10f8fc"; } + + .fad.fa-blinds-raised:after { + content: "\10f8fd"; } + + .fad.fa-blog:after { + content: "\10f781"; } + + .fad.fa-bold:after { + content: "\10f032"; } + + .fad.fa-bolt:after { + content: "\10f0e7"; } + + .fad.fa-bomb:after { + content: "\10f1e2"; } + + .fad.fa-bone:after { + content: "\10f5d7"; } + + .fad.fa-bone-break:after { + content: "\10f5d8"; } + + .fad.fa-bong:after { + content: "\10f55c"; } + + .fad.fa-book:after { + content: "\10f02d"; } + + .fad.fa-book-alt:after { + content: "\10f5d9"; } + + .fad.fa-book-dead:after { + content: "\10f6b7"; } + + .fad.fa-book-heart:after { + content: "\10f499"; } + + .fad.fa-book-medical:after { + content: "\10f7e6"; } + + .fad.fa-book-open:after { + content: "\10f518"; } + + .fad.fa-book-reader:after { + content: "\10f5da"; } + + .fad.fa-book-spells:after { + content: "\10f6b8"; } + + .fad.fa-book-user:after { + content: "\10f7e7"; } + + .fad.fa-bookmark:after { + content: "\10f02e"; } + + .fad.fa-books:after { + content: "\10f5db"; } + + .fad.fa-books-medical:after { + content: "\10f7e8"; } + + .fad.fa-boombox:after { + content: "\10f8a5"; } + + .fad.fa-boot:after { + content: "\10f782"; } + + .fad.fa-booth-curtain:after { + content: "\10f734"; } + + .fad.fa-border-all:after { + content: "\10f84c"; } + + .fad.fa-border-bottom:after { + content: "\10f84d"; } + + .fad.fa-border-center-h:after { + content: "\10f89c"; } + + .fad.fa-border-center-v:after { + content: "\10f89d"; } + + .fad.fa-border-inner:after { + content: "\10f84e"; } + + .fad.fa-border-left:after { + content: "\10f84f"; } + + .fad.fa-border-none:after { + content: "\10f850"; } + + .fad.fa-border-outer:after { + content: "\10f851"; } + + .fad.fa-border-right:after { + content: "\10f852"; } + + .fad.fa-border-style:after { + content: "\10f853"; } + + .fad.fa-border-style-alt:after { + content: "\10f854"; } + + .fad.fa-border-top:after { + content: "\10f855"; } + + .fad.fa-bow-arrow:after { + content: "\10f6b9"; } + + .fad.fa-bowling-ball:after { + content: "\10f436"; } + + .fad.fa-bowling-pins:after { + content: "\10f437"; } + + .fad.fa-box:after { + content: "\10f466"; } + + .fad.fa-box-alt:after { + content: "\10f49a"; } + + .fad.fa-box-ballot:after { + content: "\10f735"; } + + .fad.fa-box-check:after { + content: "\10f467"; } + + .fad.fa-box-fragile:after { + content: "\10f49b"; } + + .fad.fa-box-full:after { + content: "\10f49c"; } + + .fad.fa-box-heart:after { + content: "\10f49d"; } + + .fad.fa-box-open:after { + content: "\10f49e"; } + + .fad.fa-box-tissue:after { + content: "\10f95b"; } + + .fad.fa-box-up:after { + content: "\10f49f"; } + + .fad.fa-box-usd:after { + content: "\10f4a0"; } + + .fad.fa-boxes:after { + content: "\10f468"; } + + .fad.fa-boxes-alt:after { + content: "\10f4a1"; } + + .fad.fa-boxing-glove:after { + content: "\10f438"; } + + .fad.fa-brackets:after { + content: "\10f7e9"; } + + .fad.fa-brackets-curly:after { + content: "\10f7ea"; } + + .fad.fa-braille:after { + content: "\10f2a1"; } + + .fad.fa-brain:after { + content: "\10f5dc"; } + + .fad.fa-bread-loaf:after { + content: "\10f7eb"; } + + .fad.fa-bread-slice:after { + content: "\10f7ec"; } + + .fad.fa-briefcase:after { + content: "\10f0b1"; } + + .fad.fa-briefcase-medical:after { + content: "\10f469"; } + + .fad.fa-bring-forward:after { + content: "\10f856"; } + + .fad.fa-bring-front:after { + content: "\10f857"; } + + .fad.fa-broadcast-tower:after { + content: "\10f519"; } + + .fad.fa-broom:after { + content: "\10f51a"; } + + .fad.fa-browser:after { + content: "\10f37e"; } + + .fad.fa-brush:after { + content: "\10f55d"; } + + .fad.fa-bug:after { + content: "\10f188"; } + + .fad.fa-building:after { + content: "\10f1ad"; } + + .fad.fa-bullhorn:after { + content: "\10f0a1"; } + + .fad.fa-bullseye:after { + content: "\10f140"; } + + .fad.fa-bullseye-arrow:after { + content: "\10f648"; } + + .fad.fa-bullseye-pointer:after { + content: "\10f649"; } + + .fad.fa-burger-soda:after { + content: "\10f858"; } + + .fad.fa-burn:after { + content: "\10f46a"; } + + .fad.fa-burrito:after { + content: "\10f7ed"; } + + .fad.fa-bus:after { + content: "\10f207"; } + + .fad.fa-bus-alt:after { + content: "\10f55e"; } + + .fad.fa-bus-school:after { + content: "\10f5dd"; } + + .fad.fa-business-time:after { + content: "\10f64a"; } + + .fad.fa-cabinet-filing:after { + content: "\10f64b"; } + + .fad.fa-cactus:after { + content: "\10f8a7"; } + + .fad.fa-calculator:after { + content: "\10f1ec"; } + + .fad.fa-calculator-alt:after { + content: "\10f64c"; } + + .fad.fa-calendar:after { + content: "\10f133"; } + + .fad.fa-calendar-alt:after { + content: "\10f073"; } + + .fad.fa-calendar-check:after { + content: "\10f274"; } + + .fad.fa-calendar-day:after { + content: "\10f783"; } + + .fad.fa-calendar-edit:after { + content: "\10f333"; } + + .fad.fa-calendar-exclamation:after { + content: "\10f334"; } + + .fad.fa-calendar-minus:after { + content: "\10f272"; } + + .fad.fa-calendar-plus:after { + content: "\10f271"; } + + .fad.fa-calendar-star:after { + content: "\10f736"; } + + .fad.fa-calendar-times:after { + content: "\10f273"; } + + .fad.fa-calendar-week:after { + content: "\10f784"; } + + .fad.fa-camcorder:after { + content: "\10f8a8"; } + + .fad.fa-camera:after { + content: "\10f030"; } + + .fad.fa-camera-alt:after { + content: "\10f332"; } + + .fad.fa-camera-home:after { + content: "\10f8fe"; } + + .fad.fa-camera-movie:after { + content: "\10f8a9"; } + + .fad.fa-camera-polaroid:after { + content: "\10f8aa"; } + + .fad.fa-camera-retro:after { + content: "\10f083"; } + + .fad.fa-campfire:after { + content: "\10f6ba"; } + + .fad.fa-campground:after { + content: "\10f6bb"; } + + .fad.fa-candle-holder:after { + content: "\10f6bc"; } + + .fad.fa-candy-cane:after { + content: "\10f786"; } + + .fad.fa-candy-corn:after { + content: "\10f6bd"; } + + .fad.fa-cannabis:after { + content: "\10f55f"; } + + .fad.fa-capsules:after { + content: "\10f46b"; } + + .fad.fa-car:after { + content: "\10f1b9"; } + + .fad.fa-car-alt:after { + content: "\10f5de"; } + + .fad.fa-car-battery:after { + content: "\10f5df"; } + + .fad.fa-car-building:after { + content: "\10f859"; } + + .fad.fa-car-bump:after { + content: "\10f5e0"; } + + .fad.fa-car-bus:after { + content: "\10f85a"; } + + .fad.fa-car-crash:after { + content: "\10f5e1"; } + + .fad.fa-car-garage:after { + content: "\10f5e2"; } + + .fad.fa-car-mechanic:after { + content: "\10f5e3"; } + + .fad.fa-car-side:after { + content: "\10f5e4"; } + + .fad.fa-car-tilt:after { + content: "\10f5e5"; } + + .fad.fa-car-wash:after { + content: "\10f5e6"; } + + .fad.fa-caravan:after { + content: "\10f8ff"; } + + .fad.fa-caravan-alt:after { + content: "\10f900"; } + + .fad.fa-caret-circle-down:after { + content: "\10f32d"; } + + .fad.fa-caret-circle-left:after { + content: "\10f32e"; } + + .fad.fa-caret-circle-right:after { + content: "\10f330"; } + + .fad.fa-caret-circle-up:after { + content: "\10f331"; } + + .fad.fa-caret-down:after { + content: "\10f0d7"; } + + .fad.fa-caret-left:after { + content: "\10f0d9"; } + + .fad.fa-caret-right:after { + content: "\10f0da"; } + + .fad.fa-caret-square-down:after { + content: "\10f150"; } + + .fad.fa-caret-square-left:after { + content: "\10f191"; } + + .fad.fa-caret-square-right:after { + content: "\10f152"; } + + .fad.fa-caret-square-up:after { + content: "\10f151"; } + + .fad.fa-caret-up:after { + content: "\10f0d8"; } + + .fad.fa-carrot:after { + content: "\10f787"; } + + .fad.fa-cars:after { + content: "\10f85b"; } + + .fad.fa-cart-arrow-down:after { + content: "\10f218"; } + + .fad.fa-cart-plus:after { + content: "\10f217"; } + + .fad.fa-cash-register:after { + content: "\10f788"; } + + .fad.fa-cassette-tape:after { + content: "\10f8ab"; } + + .fad.fa-cat:after { + content: "\10f6be"; } + + .fad.fa-cat-space:after { + content: "\10f901"; } + + .fad.fa-cauldron:after { + content: "\10f6bf"; } + + .fad.fa-cctv:after { + content: "\10f8ac"; } + + .fad.fa-certificate:after { + content: "\10f0a3"; } + + .fad.fa-chair:after { + content: "\10f6c0"; } + + .fad.fa-chair-office:after { + content: "\10f6c1"; } + + .fad.fa-chalkboard:after { + content: "\10f51b"; } + + .fad.fa-chalkboard-teacher:after { + content: "\10f51c"; } + + .fad.fa-charging-station:after { + content: "\10f5e7"; } + + .fad.fa-chart-area:after { + content: "\10f1fe"; } + + .fad.fa-chart-bar:after { + content: "\10f080"; } + + .fad.fa-chart-line:after { + content: "\10f201"; } + + .fad.fa-chart-line-down:after { + content: "\10f64d"; } + + .fad.fa-chart-network:after { + content: "\10f78a"; } + + .fad.fa-chart-pie:after { + content: "\10f200"; } + + .fad.fa-chart-pie-alt:after { + content: "\10f64e"; } + + .fad.fa-chart-scatter:after { + content: "\10f7ee"; } + + .fad.fa-check:after { + content: "\10f00c"; } + + .fad.fa-check-circle:after { + content: "\10f058"; } + + .fad.fa-check-double:after { + content: "\10f560"; } + + .fad.fa-check-square:after { + content: "\10f14a"; } + + .fad.fa-cheese:after { + content: "\10f7ef"; } + + .fad.fa-cheese-swiss:after { + content: "\10f7f0"; } + + .fad.fa-cheeseburger:after { + content: "\10f7f1"; } + + .fad.fa-chess:after { + content: "\10f439"; } + + .fad.fa-chess-bishop:after { + content: "\10f43a"; } + + .fad.fa-chess-bishop-alt:after { + content: "\10f43b"; } + + .fad.fa-chess-board:after { + content: "\10f43c"; } + + .fad.fa-chess-clock:after { + content: "\10f43d"; } + + .fad.fa-chess-clock-alt:after { + content: "\10f43e"; } + + .fad.fa-chess-king:after { + content: "\10f43f"; } + + .fad.fa-chess-king-alt:after { + content: "\10f440"; } + + .fad.fa-chess-knight:after { + content: "\10f441"; } + + .fad.fa-chess-knight-alt:after { + content: "\10f442"; } + + .fad.fa-chess-pawn:after { + content: "\10f443"; } + + .fad.fa-chess-pawn-alt:after { + content: "\10f444"; } + + .fad.fa-chess-queen:after { + content: "\10f445"; } + + .fad.fa-chess-queen-alt:after { + content: "\10f446"; } + + .fad.fa-chess-rook:after { + content: "\10f447"; } + + .fad.fa-chess-rook-alt:after { + content: "\10f448"; } + + .fad.fa-chevron-circle-down:after { + content: "\10f13a"; } + + .fad.fa-chevron-circle-left:after { + content: "\10f137"; } + + .fad.fa-chevron-circle-right:after { + content: "\10f138"; } + + .fad.fa-chevron-circle-up:after { + content: "\10f139"; } + + .fad.fa-chevron-double-down:after { + content: "\10f322"; } + + .fad.fa-chevron-double-left:after { + content: "\10f323"; } + + .fad.fa-chevron-double-right:after { + content: "\10f324"; } + + .fad.fa-chevron-double-up:after { + content: "\10f325"; } + + .fad.fa-chevron-down:after { + content: "\10f078"; } + + .fad.fa-chevron-left:after { + content: "\10f053"; } + + .fad.fa-chevron-right:after { + content: "\10f054"; } + + .fad.fa-chevron-square-down:after { + content: "\10f329"; } + + .fad.fa-chevron-square-left:after { + content: "\10f32a"; } + + .fad.fa-chevron-square-right:after { + content: "\10f32b"; } + + .fad.fa-chevron-square-up:after { + content: "\10f32c"; } + + .fad.fa-chevron-up:after { + content: "\10f077"; } + + .fad.fa-child:after { + content: "\10f1ae"; } + + .fad.fa-chimney:after { + content: "\10f78b"; } + + .fad.fa-church:after { + content: "\10f51d"; } + + .fad.fa-circle:after { + content: "\10f111"; } + + .fad.fa-circle-notch:after { + content: "\10f1ce"; } + + .fad.fa-city:after { + content: "\10f64f"; } + + .fad.fa-clarinet:after { + content: "\10f8ad"; } + + .fad.fa-claw-marks:after { + content: "\10f6c2"; } + + .fad.fa-clinic-medical:after { + content: "\10f7f2"; } + + .fad.fa-clipboard:after { + content: "\10f328"; } + + .fad.fa-clipboard-check:after { + content: "\10f46c"; } + + .fad.fa-clipboard-list:after { + content: "\10f46d"; } + + .fad.fa-clipboard-list-check:after { + content: "\10f737"; } + + .fad.fa-clipboard-prescription:after { + content: "\10f5e8"; } + + .fad.fa-clipboard-user:after { + content: "\10f7f3"; } + + .fad.fa-clock:after { + content: "\10f017"; } + + .fad.fa-clone:after { + content: "\10f24d"; } + + .fad.fa-closed-captioning:after { + content: "\10f20a"; } + + .fad.fa-cloud:after { + content: "\10f0c2"; } + + .fad.fa-cloud-download:after { + content: "\10f0ed"; } + + .fad.fa-cloud-download-alt:after { + content: "\10f381"; } + + .fad.fa-cloud-drizzle:after { + content: "\10f738"; } + + .fad.fa-cloud-hail:after { + content: "\10f739"; } + + .fad.fa-cloud-hail-mixed:after { + content: "\10f73a"; } + + .fad.fa-cloud-meatball:after { + content: "\10f73b"; } + + .fad.fa-cloud-moon:after { + content: "\10f6c3"; } + + .fad.fa-cloud-moon-rain:after { + content: "\10f73c"; } + + .fad.fa-cloud-music:after { + content: "\10f8ae"; } + + .fad.fa-cloud-rain:after { + content: "\10f73d"; } + + .fad.fa-cloud-rainbow:after { + content: "\10f73e"; } + + .fad.fa-cloud-showers:after { + content: "\10f73f"; } + + .fad.fa-cloud-showers-heavy:after { + content: "\10f740"; } + + .fad.fa-cloud-sleet:after { + content: "\10f741"; } + + .fad.fa-cloud-snow:after { + content: "\10f742"; } + + .fad.fa-cloud-sun:after { + content: "\10f6c4"; } + + .fad.fa-cloud-sun-rain:after { + content: "\10f743"; } + + .fad.fa-cloud-upload:after { + content: "\10f0ee"; } + + .fad.fa-cloud-upload-alt:after { + content: "\10f382"; } + + .fad.fa-clouds:after { + content: "\10f744"; } + + .fad.fa-clouds-moon:after { + content: "\10f745"; } + + .fad.fa-clouds-sun:after { + content: "\10f746"; } + + .fad.fa-club:after { + content: "\10f327"; } + + .fad.fa-cocktail:after { + content: "\10f561"; } + + .fad.fa-code:after { + content: "\10f121"; } + + .fad.fa-code-branch:after { + content: "\10f126"; } + + .fad.fa-code-commit:after { + content: "\10f386"; } + + .fad.fa-code-merge:after { + content: "\10f387"; } + + .fad.fa-coffee:after { + content: "\10f0f4"; } + + .fad.fa-coffee-pot:after { + content: "\10f902"; } + + .fad.fa-coffee-togo:after { + content: "\10f6c5"; } + + .fad.fa-coffin:after { + content: "\10f6c6"; } + + .fad.fa-coffin-cross:after { + content: "\10f951"; } + + .fad.fa-cog:after { + content: "\10f013"; } + + .fad.fa-cogs:after { + content: "\10f085"; } + + .fad.fa-coin:after { + content: "\10f85c"; } + + .fad.fa-coins:after { + content: "\10f51e"; } + + .fad.fa-columns:after { + content: "\10f0db"; } + + .fad.fa-comet:after { + content: "\10f903"; } + + .fad.fa-comment:after { + content: "\10f075"; } + + .fad.fa-comment-alt:after { + content: "\10f27a"; } + + .fad.fa-comment-alt-check:after { + content: "\10f4a2"; } + + .fad.fa-comment-alt-dollar:after { + content: "\10f650"; } + + .fad.fa-comment-alt-dots:after { + content: "\10f4a3"; } + + .fad.fa-comment-alt-edit:after { + content: "\10f4a4"; } + + .fad.fa-comment-alt-exclamation:after { + content: "\10f4a5"; } + + .fad.fa-comment-alt-lines:after { + content: "\10f4a6"; } + + .fad.fa-comment-alt-medical:after { + content: "\10f7f4"; } + + .fad.fa-comment-alt-minus:after { + content: "\10f4a7"; } + + .fad.fa-comment-alt-music:after { + content: "\10f8af"; } + + .fad.fa-comment-alt-plus:after { + content: "\10f4a8"; } + + .fad.fa-comment-alt-slash:after { + content: "\10f4a9"; } + + .fad.fa-comment-alt-smile:after { + content: "\10f4aa"; } + + .fad.fa-comment-alt-times:after { + content: "\10f4ab"; } + + .fad.fa-comment-check:after { + content: "\10f4ac"; } + + .fad.fa-comment-dollar:after { + content: "\10f651"; } + + .fad.fa-comment-dots:after { + content: "\10f4ad"; } + + .fad.fa-comment-edit:after { + content: "\10f4ae"; } + + .fad.fa-comment-exclamation:after { + content: "\10f4af"; } + + .fad.fa-comment-lines:after { + content: "\10f4b0"; } + + .fad.fa-comment-medical:after { + content: "\10f7f5"; } + + .fad.fa-comment-minus:after { + content: "\10f4b1"; } + + .fad.fa-comment-music:after { + content: "\10f8b0"; } + + .fad.fa-comment-plus:after { + content: "\10f4b2"; } + + .fad.fa-comment-slash:after { + content: "\10f4b3"; } + + .fad.fa-comment-smile:after { + content: "\10f4b4"; } + + .fad.fa-comment-times:after { + content: "\10f4b5"; } + + .fad.fa-comments:after { + content: "\10f086"; } + + .fad.fa-comments-alt:after { + content: "\10f4b6"; } + + .fad.fa-comments-alt-dollar:after { + content: "\10f652"; } + + .fad.fa-comments-dollar:after { + content: "\10f653"; } + + .fad.fa-compact-disc:after { + content: "\10f51f"; } + + .fad.fa-compass:after { + content: "\10f14e"; } + + .fad.fa-compass-slash:after { + content: "\10f5e9"; } + + .fad.fa-compress:after { + content: "\10f066"; } + + .fad.fa-compress-alt:after { + content: "\10f422"; } + + .fad.fa-compress-arrows-alt:after { + content: "\10f78c"; } + + .fad.fa-compress-wide:after { + content: "\10f326"; } + + .fad.fa-computer-classic:after { + content: "\10f8b1"; } + + .fad.fa-computer-speaker:after { + content: "\10f8b2"; } + + .fad.fa-concierge-bell:after { + content: "\10f562"; } + + .fad.fa-construction:after { + content: "\10f85d"; } + + .fad.fa-container-storage:after { + content: "\10f4b7"; } + + .fad.fa-conveyor-belt:after { + content: "\10f46e"; } + + .fad.fa-conveyor-belt-alt:after { + content: "\10f46f"; } + + .fad.fa-cookie:after { + content: "\10f563"; } + + .fad.fa-cookie-bite:after { + content: "\10f564"; } + + .fad.fa-copy:after { + content: "\10f0c5"; } + + .fad.fa-copyright:after { + content: "\10f1f9"; } + + .fad.fa-corn:after { + content: "\10f6c7"; } + + .fad.fa-couch:after { + content: "\10f4b8"; } + + .fad.fa-cow:after { + content: "\10f6c8"; } + + .fad.fa-cowbell:after { + content: "\10f8b3"; } + + .fad.fa-cowbell-more:after { + content: "\10f8b4"; } + + .fad.fa-credit-card:after { + content: "\10f09d"; } + + .fad.fa-credit-card-blank:after { + content: "\10f389"; } + + .fad.fa-credit-card-front:after { + content: "\10f38a"; } + + .fad.fa-cricket:after { + content: "\10f449"; } + + .fad.fa-croissant:after { + content: "\10f7f6"; } + + .fad.fa-crop:after { + content: "\10f125"; } + + .fad.fa-crop-alt:after { + content: "\10f565"; } + + .fad.fa-cross:after { + content: "\10f654"; } + + .fad.fa-crosshairs:after { + content: "\10f05b"; } + + .fad.fa-crow:after { + content: "\10f520"; } + + .fad.fa-crown:after { + content: "\10f521"; } + + .fad.fa-crutch:after { + content: "\10f7f7"; } + + .fad.fa-crutches:after { + content: "\10f7f8"; } + + .fad.fa-cube:after { + content: "\10f1b2"; } + + .fad.fa-cubes:after { + content: "\10f1b3"; } + + .fad.fa-curling:after { + content: "\10f44a"; } + + .fad.fa-cut:after { + content: "\10f0c4"; } + + .fad.fa-dagger:after { + content: "\10f6cb"; } + + .fad.fa-database:after { + content: "\10f1c0"; } + + .fad.fa-deaf:after { + content: "\10f2a4"; } + + .fad.fa-debug:after { + content: "\10f7f9"; } + + .fad.fa-deer:after { + content: "\10f78e"; } + + .fad.fa-deer-rudolph:after { + content: "\10f78f"; } + + .fad.fa-democrat:after { + content: "\10f747"; } + + .fad.fa-desktop:after { + content: "\10f108"; } + + .fad.fa-desktop-alt:after { + content: "\10f390"; } + + .fad.fa-dewpoint:after { + content: "\10f748"; } + + .fad.fa-dharmachakra:after { + content: "\10f655"; } + + .fad.fa-diagnoses:after { + content: "\10f470"; } + + .fad.fa-diamond:after { + content: "\10f219"; } + + .fad.fa-dice:after { + content: "\10f522"; } + + .fad.fa-dice-d10:after { + content: "\10f6cd"; } + + .fad.fa-dice-d12:after { + content: "\10f6ce"; } + + .fad.fa-dice-d20:after { + content: "\10f6cf"; } + + .fad.fa-dice-d4:after { + content: "\10f6d0"; } + + .fad.fa-dice-d6:after { + content: "\10f6d1"; } + + .fad.fa-dice-d8:after { + content: "\10f6d2"; } + + .fad.fa-dice-five:after { + content: "\10f523"; } + + .fad.fa-dice-four:after { + content: "\10f524"; } + + .fad.fa-dice-one:after { + content: "\10f525"; } + + .fad.fa-dice-six:after { + content: "\10f526"; } + + .fad.fa-dice-three:after { + content: "\10f527"; } + + .fad.fa-dice-two:after { + content: "\10f528"; } + + .fad.fa-digging:after { + content: "\10f85e"; } + + .fad.fa-digital-tachograph:after { + content: "\10f566"; } + + .fad.fa-diploma:after { + content: "\10f5ea"; } + + .fad.fa-directions:after { + content: "\10f5eb"; } + + .fad.fa-disc-drive:after { + content: "\10f8b5"; } + + .fad.fa-disease:after { + content: "\10f7fa"; } + + .fad.fa-divide:after { + content: "\10f529"; } + + .fad.fa-dizzy:after { + content: "\10f567"; } + + .fad.fa-dna:after { + content: "\10f471"; } + + .fad.fa-do-not-enter:after { + content: "\10f5ec"; } + + .fad.fa-dog:after { + content: "\10f6d3"; } + + .fad.fa-dog-leashed:after { + content: "\10f6d4"; } + + .fad.fa-dollar-sign:after { + content: "\10f155"; } + + .fad.fa-dolly:after { + content: "\10f472"; } + + .fad.fa-dolly-empty:after { + content: "\10f473"; } + + .fad.fa-dolly-flatbed:after { + content: "\10f474"; } + + .fad.fa-dolly-flatbed-alt:after { + content: "\10f475"; } + + .fad.fa-dolly-flatbed-empty:after { + content: "\10f476"; } + + .fad.fa-donate:after { + content: "\10f4b9"; } + + .fad.fa-door-closed:after { + content: "\10f52a"; } + + .fad.fa-door-open:after { + content: "\10f52b"; } + + .fad.fa-dot-circle:after { + content: "\10f192"; } + + .fad.fa-dove:after { + content: "\10f4ba"; } + + .fad.fa-download:after { + content: "\10f019"; } + + .fad.fa-drafting-compass:after { + content: "\10f568"; } + + .fad.fa-dragon:after { + content: "\10f6d5"; } + + .fad.fa-draw-circle:after { + content: "\10f5ed"; } + + .fad.fa-draw-polygon:after { + content: "\10f5ee"; } + + .fad.fa-draw-square:after { + content: "\10f5ef"; } + + .fad.fa-dreidel:after { + content: "\10f792"; } + + .fad.fa-drone:after { + content: "\10f85f"; } + + .fad.fa-drone-alt:after { + content: "\10f860"; } + + .fad.fa-drum:after { + content: "\10f569"; } + + .fad.fa-drum-steelpan:after { + content: "\10f56a"; } + + .fad.fa-drumstick:after { + content: "\10f6d6"; } + + .fad.fa-drumstick-bite:after { + content: "\10f6d7"; } + + .fad.fa-dryer:after { + content: "\10f861"; } + + .fad.fa-dryer-alt:after { + content: "\10f862"; } + + .fad.fa-duck:after { + content: "\10f6d8"; } + + .fad.fa-dumbbell:after { + content: "\10f44b"; } + + .fad.fa-dumpster:after { + content: "\10f793"; } + + .fad.fa-dumpster-fire:after { + content: "\10f794"; } + + .fad.fa-dungeon:after { + content: "\10f6d9"; } + + .fad.fa-ear:after { + content: "\10f5f0"; } + + .fad.fa-ear-muffs:after { + content: "\10f795"; } + + .fad.fa-eclipse:after { + content: "\10f749"; } + + .fad.fa-eclipse-alt:after { + content: "\10f74a"; } + + .fad.fa-edit:after { + content: "\10f044"; } + + .fad.fa-egg:after { + content: "\10f7fb"; } + + .fad.fa-egg-fried:after { + content: "\10f7fc"; } + + .fad.fa-eject:after { + content: "\10f052"; } + + .fad.fa-elephant:after { + content: "\10f6da"; } + + .fad.fa-ellipsis-h:after { + content: "\10f141"; } + + .fad.fa-ellipsis-h-alt:after { + content: "\10f39b"; } + + .fad.fa-ellipsis-v:after { + content: "\10f142"; } + + .fad.fa-ellipsis-v-alt:after { + content: "\10f39c"; } + + .fad.fa-empty-set:after { + content: "\10f656"; } + + .fad.fa-engine-warning:after { + content: "\10f5f2"; } + + .fad.fa-envelope:after { + content: "\10f0e0"; } + + .fad.fa-envelope-open:after { + content: "\10f2b6"; } + + .fad.fa-envelope-open-dollar:after { + content: "\10f657"; } + + .fad.fa-envelope-open-text:after { + content: "\10f658"; } + + .fad.fa-envelope-square:after { + content: "\10f199"; } + + .fad.fa-equals:after { + content: "\10f52c"; } + + .fad.fa-eraser:after { + content: "\10f12d"; } + + .fad.fa-ethernet:after { + content: "\10f796"; } + + .fad.fa-euro-sign:after { + content: "\10f153"; } + + .fad.fa-exchange:after { + content: "\10f0ec"; } + + .fad.fa-exchange-alt:after { + content: "\10f362"; } + + .fad.fa-exclamation:after { + content: "\10f12a"; } + + .fad.fa-exclamation-circle:after { + content: "\10f06a"; } + + .fad.fa-exclamation-square:after { + content: "\10f321"; } + + .fad.fa-exclamation-triangle:after { + content: "\10f071"; } + + .fad.fa-expand:after { + content: "\10f065"; } + + .fad.fa-expand-alt:after { + content: "\10f424"; } + + .fad.fa-expand-arrows:after { + content: "\10f31d"; } + + .fad.fa-expand-arrows-alt:after { + content: "\10f31e"; } + + .fad.fa-expand-wide:after { + content: "\10f320"; } + + .fad.fa-external-link:after { + content: "\10f08e"; } + + .fad.fa-external-link-alt:after { + content: "\10f35d"; } + + .fad.fa-external-link-square:after { + content: "\10f14c"; } + + .fad.fa-external-link-square-alt:after { + content: "\10f360"; } + + .fad.fa-eye:after { + content: "\10f06e"; } + + .fad.fa-eye-dropper:after { + content: "\10f1fb"; } + + .fad.fa-eye-evil:after { + content: "\10f6db"; } + + .fad.fa-eye-slash:after { + content: "\10f070"; } + + .fad.fa-fan:after { + content: "\10f863"; } + + .fad.fa-fan-table:after { + content: "\10f904"; } + + .fad.fa-farm:after { + content: "\10f864"; } + + .fad.fa-fast-backward:after { + content: "\10f049"; } + + .fad.fa-fast-forward:after { + content: "\10f050"; } + + .fad.fa-faucet:after { + content: "\10f905"; } + + .fad.fa-faucet-drip:after { + content: "\10f906"; } + + .fad.fa-fax:after { + content: "\10f1ac"; } + + .fad.fa-feather:after { + content: "\10f52d"; } + + .fad.fa-feather-alt:after { + content: "\10f56b"; } + + .fad.fa-female:after { + content: "\10f182"; } + + .fad.fa-field-hockey:after { + content: "\10f44c"; } + + .fad.fa-fighter-jet:after { + content: "\10f0fb"; } + + .fad.fa-file:after { + content: "\10f15b"; } + + .fad.fa-file-alt:after { + content: "\10f15c"; } + + .fad.fa-file-archive:after { + content: "\10f1c6"; } + + .fad.fa-file-audio:after { + content: "\10f1c7"; } + + .fad.fa-file-certificate:after { + content: "\10f5f3"; } + + .fad.fa-file-chart-line:after { + content: "\10f659"; } + + .fad.fa-file-chart-pie:after { + content: "\10f65a"; } + + .fad.fa-file-check:after { + content: "\10f316"; } + + .fad.fa-file-code:after { + content: "\10f1c9"; } + + .fad.fa-file-contract:after { + content: "\10f56c"; } + + .fad.fa-file-csv:after { + content: "\10f6dd"; } + + .fad.fa-file-download:after { + content: "\10f56d"; } + + .fad.fa-file-edit:after { + content: "\10f31c"; } + + .fad.fa-file-excel:after { + content: "\10f1c3"; } + + .fad.fa-file-exclamation:after { + content: "\10f31a"; } + + .fad.fa-file-export:after { + content: "\10f56e"; } + + .fad.fa-file-image:after { + content: "\10f1c5"; } + + .fad.fa-file-import:after { + content: "\10f56f"; } + + .fad.fa-file-invoice:after { + content: "\10f570"; } + + .fad.fa-file-invoice-dollar:after { + content: "\10f571"; } + + .fad.fa-file-medical:after { + content: "\10f477"; } + + .fad.fa-file-medical-alt:after { + content: "\10f478"; } + + .fad.fa-file-minus:after { + content: "\10f318"; } + + .fad.fa-file-music:after { + content: "\10f8b6"; } + + .fad.fa-file-pdf:after { + content: "\10f1c1"; } + + .fad.fa-file-plus:after { + content: "\10f319"; } + + .fad.fa-file-powerpoint:after { + content: "\10f1c4"; } + + .fad.fa-file-prescription:after { + content: "\10f572"; } + + .fad.fa-file-search:after { + content: "\10f865"; } + + .fad.fa-file-signature:after { + content: "\10f573"; } + + .fad.fa-file-spreadsheet:after { + content: "\10f65b"; } + + .fad.fa-file-times:after { + content: "\10f317"; } + + .fad.fa-file-upload:after { + content: "\10f574"; } + + .fad.fa-file-user:after { + content: "\10f65c"; } + + .fad.fa-file-video:after { + content: "\10f1c8"; } + + .fad.fa-file-word:after { + content: "\10f1c2"; } + + .fad.fa-files-medical:after { + content: "\10f7fd"; } + + .fad.fa-fill:after { + content: "\10f575"; } + + .fad.fa-fill-drip:after { + content: "\10f576"; } + + .fad.fa-film:after { + content: "\10f008"; } + + .fad.fa-film-alt:after { + content: "\10f3a0"; } + + .fad.fa-film-canister:after { + content: "\10f8b7"; } + + .fad.fa-filter:after { + content: "\10f0b0"; } + + .fad.fa-fingerprint:after { + content: "\10f577"; } + + .fad.fa-fire:after { + content: "\10f06d"; } + + .fad.fa-fire-alt:after { + content: "\10f7e4"; } + + .fad.fa-fire-extinguisher:after { + content: "\10f134"; } + + .fad.fa-fire-smoke:after { + content: "\10f74b"; } + + .fad.fa-fireplace:after { + content: "\10f79a"; } + + .fad.fa-first-aid:after { + content: "\10f479"; } + + .fad.fa-fish:after { + content: "\10f578"; } + + .fad.fa-fish-cooked:after { + content: "\10f7fe"; } + + .fad.fa-fist-raised:after { + content: "\10f6de"; } + + .fad.fa-flag:after { + content: "\10f024"; } + + .fad.fa-flag-alt:after { + content: "\10f74c"; } + + .fad.fa-flag-checkered:after { + content: "\10f11e"; } + + .fad.fa-flag-usa:after { + content: "\10f74d"; } + + .fad.fa-flame:after { + content: "\10f6df"; } + + .fad.fa-flashlight:after { + content: "\10f8b8"; } + + .fad.fa-flask:after { + content: "\10f0c3"; } + + .fad.fa-flask-poison:after { + content: "\10f6e0"; } + + .fad.fa-flask-potion:after { + content: "\10f6e1"; } + + .fad.fa-flower:after { + content: "\10f7ff"; } + + .fad.fa-flower-daffodil:after { + content: "\10f800"; } + + .fad.fa-flower-tulip:after { + content: "\10f801"; } + + .fad.fa-flushed:after { + content: "\10f579"; } + + .fad.fa-flute:after { + content: "\10f8b9"; } + + .fad.fa-flux-capacitor:after { + content: "\10f8ba"; } + + .fad.fa-fog:after { + content: "\10f74e"; } + + .fad.fa-folder:after { + content: "\10f07b"; } + + .fad.fa-folder-download:after { + content: "\10f953"; } + + .fad.fa-folder-minus:after { + content: "\10f65d"; } + + .fad.fa-folder-open:after { + content: "\10f07c"; } + + .fad.fa-folder-plus:after { + content: "\10f65e"; } + + .fad.fa-folder-times:after { + content: "\10f65f"; } + + .fad.fa-folder-tree:after { + content: "\10f802"; } + + .fad.fa-folder-upload:after { + content: "\10f954"; } + + .fad.fa-folders:after { + content: "\10f660"; } + + .fad.fa-font:after { + content: "\10f031"; } + + .fad.fa-font-awesome-logo-full:after { + content: "\10f4e6"; } + + .fad.fa-font-case:after { + content: "\10f866"; } + + .fad.fa-football-ball:after { + content: "\10f44e"; } + + .fad.fa-football-helmet:after { + content: "\10f44f"; } + + .fad.fa-forklift:after { + content: "\10f47a"; } + + .fad.fa-forward:after { + content: "\10f04e"; } + + .fad.fa-fragile:after { + content: "\10f4bb"; } + + .fad.fa-french-fries:after { + content: "\10f803"; } + + .fad.fa-frog:after { + content: "\10f52e"; } + + .fad.fa-frosty-head:after { + content: "\10f79b"; } + + .fad.fa-frown:after { + content: "\10f119"; } + + .fad.fa-frown-open:after { + content: "\10f57a"; } + + .fad.fa-function:after { + content: "\10f661"; } + + .fad.fa-funnel-dollar:after { + content: "\10f662"; } + + .fad.fa-futbol:after { + content: "\10f1e3"; } + + .fad.fa-galaxy:after { + content: "\10f908"; } + + .fad.fa-game-board:after { + content: "\10f867"; } + + .fad.fa-game-board-alt:after { + content: "\10f868"; } + + .fad.fa-game-console-handheld:after { + content: "\10f8bb"; } + + .fad.fa-gamepad:after { + content: "\10f11b"; } + + .fad.fa-gamepad-alt:after { + content: "\10f8bc"; } + + .fad.fa-garage:after { + content: "\10f909"; } + + .fad.fa-garage-car:after { + content: "\10f90a"; } + + .fad.fa-garage-open:after { + content: "\10f90b"; } + + .fad.fa-gas-pump:after { + content: "\10f52f"; } + + .fad.fa-gas-pump-slash:after { + content: "\10f5f4"; } + + .fad.fa-gavel:after { + content: "\10f0e3"; } + + .fad.fa-gem:after { + content: "\10f3a5"; } + + .fad.fa-genderless:after { + content: "\10f22d"; } + + .fad.fa-ghost:after { + content: "\10f6e2"; } + + .fad.fa-gift:after { + content: "\10f06b"; } + + .fad.fa-gift-card:after { + content: "\10f663"; } + + .fad.fa-gifts:after { + content: "\10f79c"; } + + .fad.fa-gingerbread-man:after { + content: "\10f79d"; } + + .fad.fa-glass:after { + content: "\10f804"; } + + .fad.fa-glass-champagne:after { + content: "\10f79e"; } + + .fad.fa-glass-cheers:after { + content: "\10f79f"; } + + .fad.fa-glass-citrus:after { + content: "\10f869"; } + + .fad.fa-glass-martini:after { + content: "\10f000"; } + + .fad.fa-glass-martini-alt:after { + content: "\10f57b"; } + + .fad.fa-glass-whiskey:after { + content: "\10f7a0"; } + + .fad.fa-glass-whiskey-rocks:after { + content: "\10f7a1"; } + + .fad.fa-glasses:after { + content: "\10f530"; } + + .fad.fa-glasses-alt:after { + content: "\10f5f5"; } + + .fad.fa-globe:after { + content: "\10f0ac"; } + + .fad.fa-globe-africa:after { + content: "\10f57c"; } + + .fad.fa-globe-americas:after { + content: "\10f57d"; } + + .fad.fa-globe-asia:after { + content: "\10f57e"; } + + .fad.fa-globe-europe:after { + content: "\10f7a2"; } + + .fad.fa-globe-snow:after { + content: "\10f7a3"; } + + .fad.fa-globe-stand:after { + content: "\10f5f6"; } + + .fad.fa-golf-ball:after { + content: "\10f450"; } + + .fad.fa-golf-club:after { + content: "\10f451"; } + + .fad.fa-gopuram:after { + content: "\10f664"; } + + .fad.fa-graduation-cap:after { + content: "\10f19d"; } + + .fad.fa-gramophone:after { + content: "\10f8bd"; } + + .fad.fa-greater-than:after { + content: "\10f531"; } + + .fad.fa-greater-than-equal:after { + content: "\10f532"; } + + .fad.fa-grimace:after { + content: "\10f57f"; } + + .fad.fa-grin:after { + content: "\10f580"; } + + .fad.fa-grin-alt:after { + content: "\10f581"; } + + .fad.fa-grin-beam:after { + content: "\10f582"; } + + .fad.fa-grin-beam-sweat:after { + content: "\10f583"; } + + .fad.fa-grin-hearts:after { + content: "\10f584"; } + + .fad.fa-grin-squint:after { + content: "\10f585"; } + + .fad.fa-grin-squint-tears:after { + content: "\10f586"; } + + .fad.fa-grin-stars:after { + content: "\10f587"; } + + .fad.fa-grin-tears:after { + content: "\10f588"; } + + .fad.fa-grin-tongue:after { + content: "\10f589"; } + + .fad.fa-grin-tongue-squint:after { + content: "\10f58a"; } + + .fad.fa-grin-tongue-wink:after { + content: "\10f58b"; } + + .fad.fa-grin-wink:after { + content: "\10f58c"; } + + .fad.fa-grip-horizontal:after { + content: "\10f58d"; } + + .fad.fa-grip-lines:after { + content: "\10f7a4"; } + + .fad.fa-grip-lines-vertical:after { + content: "\10f7a5"; } + + .fad.fa-grip-vertical:after { + content: "\10f58e"; } + + .fad.fa-guitar:after { + content: "\10f7a6"; } + + .fad.fa-guitar-electric:after { + content: "\10f8be"; } + + .fad.fa-guitars:after { + content: "\10f8bf"; } + + .fad.fa-h-square:after { + content: "\10f0fd"; } + + .fad.fa-h1:after { + content: "\10f313"; } + + .fad.fa-h2:after { + content: "\10f314"; } + + .fad.fa-h3:after { + content: "\10f315"; } + + .fad.fa-h4:after { + content: "\10f86a"; } + + .fad.fa-hamburger:after { + content: "\10f805"; } + + .fad.fa-hammer:after { + content: "\10f6e3"; } + + .fad.fa-hammer-war:after { + content: "\10f6e4"; } + + .fad.fa-hamsa:after { + content: "\10f665"; } + + .fad.fa-hand-heart:after { + content: "\10f4bc"; } + + .fad.fa-hand-holding:after { + content: "\10f4bd"; } + + .fad.fa-hand-holding-box:after { + content: "\10f47b"; } + + .fad.fa-hand-holding-heart:after { + content: "\10f4be"; } + + .fad.fa-hand-holding-magic:after { + content: "\10f6e5"; } + + .fad.fa-hand-holding-medical:after { + content: "\10f95c"; } + + .fad.fa-hand-holding-seedling:after { + content: "\10f4bf"; } + + .fad.fa-hand-holding-usd:after { + content: "\10f4c0"; } + + .fad.fa-hand-holding-water:after { + content: "\10f4c1"; } + + .fad.fa-hand-lizard:after { + content: "\10f258"; } + + .fad.fa-hand-middle-finger:after { + content: "\10f806"; } + + .fad.fa-hand-paper:after { + content: "\10f256"; } + + .fad.fa-hand-peace:after { + content: "\10f25b"; } + + .fad.fa-hand-point-down:after { + content: "\10f0a7"; } + + .fad.fa-hand-point-left:after { + content: "\10f0a5"; } + + .fad.fa-hand-point-right:after { + content: "\10f0a4"; } + + .fad.fa-hand-point-up:after { + content: "\10f0a6"; } + + .fad.fa-hand-pointer:after { + content: "\10f25a"; } + + .fad.fa-hand-receiving:after { + content: "\10f47c"; } + + .fad.fa-hand-rock:after { + content: "\10f255"; } + + .fad.fa-hand-scissors:after { + content: "\10f257"; } + + .fad.fa-hand-sparkles:after { + content: "\10f95d"; } + + .fad.fa-hand-spock:after { + content: "\10f259"; } + + .fad.fa-hands:after { + content: "\10f4c2"; } + + .fad.fa-hands-heart:after { + content: "\10f4c3"; } + + .fad.fa-hands-helping:after { + content: "\10f4c4"; } + + .fad.fa-hands-usd:after { + content: "\10f4c5"; } + + .fad.fa-hands-wash:after { + content: "\10f95e"; } + + .fad.fa-handshake:after { + content: "\10f2b5"; } + + .fad.fa-handshake-alt:after { + content: "\10f4c6"; } + + .fad.fa-handshake-alt-slash:after { + content: "\10f95f"; } + + .fad.fa-handshake-slash:after { + content: "\10f960"; } + + .fad.fa-hanukiah:after { + content: "\10f6e6"; } + + .fad.fa-hard-hat:after { + content: "\10f807"; } + + .fad.fa-hashtag:after { + content: "\10f292"; } + + .fad.fa-hat-chef:after { + content: "\10f86b"; } + + .fad.fa-hat-cowboy:after { + content: "\10f8c0"; } + + .fad.fa-hat-cowboy-side:after { + content: "\10f8c1"; } + + .fad.fa-hat-santa:after { + content: "\10f7a7"; } + + .fad.fa-hat-winter:after { + content: "\10f7a8"; } + + .fad.fa-hat-witch:after { + content: "\10f6e7"; } + + .fad.fa-hat-wizard:after { + content: "\10f6e8"; } + + .fad.fa-hdd:after { + content: "\10f0a0"; } + + .fad.fa-head-side:after { + content: "\10f6e9"; } + + .fad.fa-head-side-brain:after { + content: "\10f808"; } + + .fad.fa-head-side-cough:after { + content: "\10f961"; } + + .fad.fa-head-side-cough-slash:after { + content: "\10f962"; } + + .fad.fa-head-side-headphones:after { + content: "\10f8c2"; } + + .fad.fa-head-side-mask:after { + content: "\10f963"; } + + .fad.fa-head-side-medical:after { + content: "\10f809"; } + + .fad.fa-head-side-virus:after { + content: "\10f964"; } + + .fad.fa-head-vr:after { + content: "\10f6ea"; } + + .fad.fa-heading:after { + content: "\10f1dc"; } + + .fad.fa-headphones:after { + content: "\10f025"; } + + .fad.fa-headphones-alt:after { + content: "\10f58f"; } + + .fad.fa-headset:after { + content: "\10f590"; } + + .fad.fa-heart:after { + content: "\10f004"; } + + .fad.fa-heart-broken:after { + content: "\10f7a9"; } + + .fad.fa-heart-circle:after { + content: "\10f4c7"; } + + .fad.fa-heart-rate:after { + content: "\10f5f8"; } + + .fad.fa-heart-square:after { + content: "\10f4c8"; } + + .fad.fa-heartbeat:after { + content: "\10f21e"; } + + .fad.fa-heat:after { + content: "\10f90c"; } + + .fad.fa-helicopter:after { + content: "\10f533"; } + + .fad.fa-helmet-battle:after { + content: "\10f6eb"; } + + .fad.fa-hexagon:after { + content: "\10f312"; } + + .fad.fa-highlighter:after { + content: "\10f591"; } + + .fad.fa-hiking:after { + content: "\10f6ec"; } + + .fad.fa-hippo:after { + content: "\10f6ed"; } + + .fad.fa-history:after { + content: "\10f1da"; } + + .fad.fa-hockey-mask:after { + content: "\10f6ee"; } + + .fad.fa-hockey-puck:after { + content: "\10f453"; } + + .fad.fa-hockey-sticks:after { + content: "\10f454"; } + + .fad.fa-holly-berry:after { + content: "\10f7aa"; } + + .fad.fa-home:after { + content: "\10f015"; } + + .fad.fa-home-alt:after { + content: "\10f80a"; } + + .fad.fa-home-heart:after { + content: "\10f4c9"; } + + .fad.fa-home-lg:after { + content: "\10f80b"; } + + .fad.fa-home-lg-alt:after { + content: "\10f80c"; } + + .fad.fa-hood-cloak:after { + content: "\10f6ef"; } + + .fad.fa-horizontal-rule:after { + content: "\10f86c"; } + + .fad.fa-horse:after { + content: "\10f6f0"; } + + .fad.fa-horse-head:after { + content: "\10f7ab"; } + + .fad.fa-horse-saddle:after { + content: "\10f8c3"; } + + .fad.fa-hospital:after { + content: "\10f0f8"; } + + .fad.fa-hospital-alt:after { + content: "\10f47d"; } + + .fad.fa-hospital-symbol:after { + content: "\10f47e"; } + + .fad.fa-hospital-user:after { + content: "\10f80d"; } + + .fad.fa-hospitals:after { + content: "\10f80e"; } + + .fad.fa-hot-tub:after { + content: "\10f593"; } + + .fad.fa-hotdog:after { + content: "\10f80f"; } + + .fad.fa-hotel:after { + content: "\10f594"; } + + .fad.fa-hourglass:after { + content: "\10f254"; } + + .fad.fa-hourglass-end:after { + content: "\10f253"; } + + .fad.fa-hourglass-half:after { + content: "\10f252"; } + + .fad.fa-hourglass-start:after { + content: "\10f251"; } + + .fad.fa-house:after { + content: "\10f90d"; } + + .fad.fa-house-damage:after { + content: "\10f6f1"; } + + .fad.fa-house-day:after { + content: "\10f90e"; } + + .fad.fa-house-flood:after { + content: "\10f74f"; } + + .fad.fa-house-leave:after { + content: "\10f90f"; } + + .fad.fa-house-night:after { + content: "\10f910"; } + + .fad.fa-house-return:after { + content: "\10f911"; } + + .fad.fa-house-signal:after { + content: "\10f912"; } + + .fad.fa-house-user:after { + content: "\10f965"; } + + .fad.fa-hryvnia:after { + content: "\10f6f2"; } + + .fad.fa-humidity:after { + content: "\10f750"; } + + .fad.fa-hurricane:after { + content: "\10f751"; } + + .fad.fa-i-cursor:after { + content: "\10f246"; } + + .fad.fa-ice-cream:after { + content: "\10f810"; } + + .fad.fa-ice-skate:after { + content: "\10f7ac"; } + + .fad.fa-icicles:after { + content: "\10f7ad"; } + + .fad.fa-icons:after { + content: "\10f86d"; } + + .fad.fa-icons-alt:after { + content: "\10f86e"; } + + .fad.fa-id-badge:after { + content: "\10f2c1"; } + + .fad.fa-id-card:after { + content: "\10f2c2"; } + + .fad.fa-id-card-alt:after { + content: "\10f47f"; } + + .fad.fa-igloo:after { + content: "\10f7ae"; } + + .fad.fa-image:after { + content: "\10f03e"; } + + .fad.fa-image-polaroid:after { + content: "\10f8c4"; } + + .fad.fa-images:after { + content: "\10f302"; } + + .fad.fa-inbox:after { + content: "\10f01c"; } + + .fad.fa-inbox-in:after { + content: "\10f310"; } + + .fad.fa-inbox-out:after { + content: "\10f311"; } + + .fad.fa-indent:after { + content: "\10f03c"; } + + .fad.fa-industry:after { + content: "\10f275"; } + + .fad.fa-industry-alt:after { + content: "\10f3b3"; } + + .fad.fa-infinity:after { + content: "\10f534"; } + + .fad.fa-info:after { + content: "\10f129"; } + + .fad.fa-info-circle:after { + content: "\10f05a"; } + + .fad.fa-info-square:after { + content: "\10f30f"; } + + .fad.fa-inhaler:after { + content: "\10f5f9"; } + + .fad.fa-integral:after { + content: "\10f667"; } + + .fad.fa-intersection:after { + content: "\10f668"; } + + .fad.fa-inventory:after { + content: "\10f480"; } + + .fad.fa-island-tropical:after { + content: "\10f811"; } + + .fad.fa-italic:after { + content: "\10f033"; } + + .fad.fa-jack-o-lantern:after { + content: "\10f30e"; } + + .fad.fa-jedi:after { + content: "\10f669"; } + + .fad.fa-joint:after { + content: "\10f595"; } + + .fad.fa-journal-whills:after { + content: "\10f66a"; } + + .fad.fa-joystick:after { + content: "\10f8c5"; } + + .fad.fa-jug:after { + content: "\10f8c6"; } + + .fad.fa-kaaba:after { + content: "\10f66b"; } + + .fad.fa-kazoo:after { + content: "\10f8c7"; } + + .fad.fa-kerning:after { + content: "\10f86f"; } + + .fad.fa-key:after { + content: "\10f084"; } + + .fad.fa-key-skeleton:after { + content: "\10f6f3"; } + + .fad.fa-keyboard:after { + content: "\10f11c"; } + + .fad.fa-keynote:after { + content: "\10f66c"; } + + .fad.fa-khanda:after { + content: "\10f66d"; } + + .fad.fa-kidneys:after { + content: "\10f5fb"; } + + .fad.fa-kiss:after { + content: "\10f596"; } + + .fad.fa-kiss-beam:after { + content: "\10f597"; } + + .fad.fa-kiss-wink-heart:after { + content: "\10f598"; } + + .fad.fa-kite:after { + content: "\10f6f4"; } + + .fad.fa-kiwi-bird:after { + content: "\10f535"; } + + .fad.fa-knife-kitchen:after { + content: "\10f6f5"; } + + .fad.fa-lambda:after { + content: "\10f66e"; } + + .fad.fa-lamp:after { + content: "\10f4ca"; } + + .fad.fa-lamp-desk:after { + content: "\10f914"; } + + .fad.fa-lamp-floor:after { + content: "\10f915"; } + + .fad.fa-landmark:after { + content: "\10f66f"; } + + .fad.fa-landmark-alt:after { + content: "\10f752"; } + + .fad.fa-language:after { + content: "\10f1ab"; } + + .fad.fa-laptop:after { + content: "\10f109"; } + + .fad.fa-laptop-code:after { + content: "\10f5fc"; } + + .fad.fa-laptop-house:after { + content: "\10f966"; } + + .fad.fa-laptop-medical:after { + content: "\10f812"; } + + .fad.fa-lasso:after { + content: "\10f8c8"; } + + .fad.fa-laugh:after { + content: "\10f599"; } + + .fad.fa-laugh-beam:after { + content: "\10f59a"; } + + .fad.fa-laugh-squint:after { + content: "\10f59b"; } + + .fad.fa-laugh-wink:after { + content: "\10f59c"; } + + .fad.fa-layer-group:after { + content: "\10f5fd"; } + + .fad.fa-layer-minus:after { + content: "\10f5fe"; } + + .fad.fa-layer-plus:after { + content: "\10f5ff"; } + + .fad.fa-leaf:after { + content: "\10f06c"; } + + .fad.fa-leaf-heart:after { + content: "\10f4cb"; } + + .fad.fa-leaf-maple:after { + content: "\10f6f6"; } + + .fad.fa-leaf-oak:after { + content: "\10f6f7"; } + + .fad.fa-lemon:after { + content: "\10f094"; } + + .fad.fa-less-than:after { + content: "\10f536"; } + + .fad.fa-less-than-equal:after { + content: "\10f537"; } + + .fad.fa-level-down:after { + content: "\10f149"; } + + .fad.fa-level-down-alt:after { + content: "\10f3be"; } + + .fad.fa-level-up:after { + content: "\10f148"; } + + .fad.fa-level-up-alt:after { + content: "\10f3bf"; } + + .fad.fa-life-ring:after { + content: "\10f1cd"; } + + .fad.fa-light-ceiling:after { + content: "\10f916"; } + + .fad.fa-light-switch:after { + content: "\10f917"; } + + .fad.fa-light-switch-off:after { + content: "\10f918"; } + + .fad.fa-light-switch-on:after { + content: "\10f919"; } + + .fad.fa-lightbulb:after { + content: "\10f0eb"; } + + .fad.fa-lightbulb-dollar:after { + content: "\10f670"; } + + .fad.fa-lightbulb-exclamation:after { + content: "\10f671"; } + + .fad.fa-lightbulb-on:after { + content: "\10f672"; } + + .fad.fa-lightbulb-slash:after { + content: "\10f673"; } + + .fad.fa-lights-holiday:after { + content: "\10f7b2"; } + + .fad.fa-line-columns:after { + content: "\10f870"; } + + .fad.fa-line-height:after { + content: "\10f871"; } + + .fad.fa-link:after { + content: "\10f0c1"; } + + .fad.fa-lips:after { + content: "\10f600"; } + + .fad.fa-lira-sign:after { + content: "\10f195"; } + + .fad.fa-list:after { + content: "\10f03a"; } + + .fad.fa-list-alt:after { + content: "\10f022"; } + + .fad.fa-list-music:after { + content: "\10f8c9"; } + + .fad.fa-list-ol:after { + content: "\10f0cb"; } + + .fad.fa-list-ul:after { + content: "\10f0ca"; } + + .fad.fa-location:after { + content: "\10f601"; } + + .fad.fa-location-arrow:after { + content: "\10f124"; } + + .fad.fa-location-circle:after { + content: "\10f602"; } + + .fad.fa-location-slash:after { + content: "\10f603"; } + + .fad.fa-lock:after { + content: "\10f023"; } + + .fad.fa-lock-alt:after { + content: "\10f30d"; } + + .fad.fa-lock-open:after { + content: "\10f3c1"; } + + .fad.fa-lock-open-alt:after { + content: "\10f3c2"; } + + .fad.fa-long-arrow-alt-down:after { + content: "\10f309"; } + + .fad.fa-long-arrow-alt-left:after { + content: "\10f30a"; } + + .fad.fa-long-arrow-alt-right:after { + content: "\10f30b"; } + + .fad.fa-long-arrow-alt-up:after { + content: "\10f30c"; } + + .fad.fa-long-arrow-down:after { + content: "\10f175"; } + + .fad.fa-long-arrow-left:after { + content: "\10f177"; } + + .fad.fa-long-arrow-right:after { + content: "\10f178"; } + + .fad.fa-long-arrow-up:after { + content: "\10f176"; } + + .fad.fa-loveseat:after { + content: "\10f4cc"; } + + .fad.fa-low-vision:after { + content: "\10f2a8"; } + + .fad.fa-luchador:after { + content: "\10f455"; } + + .fad.fa-luggage-cart:after { + content: "\10f59d"; } + + .fad.fa-lungs:after { + content: "\10f604"; } + + .fad.fa-lungs-virus:after { + content: "\10f967"; } + + .fad.fa-mace:after { + content: "\10f6f8"; } + + .fad.fa-magic:after { + content: "\10f0d0"; } + + .fad.fa-magnet:after { + content: "\10f076"; } + + .fad.fa-mail-bulk:after { + content: "\10f674"; } + + .fad.fa-mailbox:after { + content: "\10f813"; } + + .fad.fa-male:after { + content: "\10f183"; } + + .fad.fa-mandolin:after { + content: "\10f6f9"; } + + .fad.fa-map:after { + content: "\10f279"; } + + .fad.fa-map-marked:after { + content: "\10f59f"; } + + .fad.fa-map-marked-alt:after { + content: "\10f5a0"; } + + .fad.fa-map-marker:after { + content: "\10f041"; } + + .fad.fa-map-marker-alt:after { + content: "\10f3c5"; } + + .fad.fa-map-marker-alt-slash:after { + content: "\10f605"; } + + .fad.fa-map-marker-check:after { + content: "\10f606"; } + + .fad.fa-map-marker-edit:after { + content: "\10f607"; } + + .fad.fa-map-marker-exclamation:after { + content: "\10f608"; } + + .fad.fa-map-marker-minus:after { + content: "\10f609"; } + + .fad.fa-map-marker-plus:after { + content: "\10f60a"; } + + .fad.fa-map-marker-question:after { + content: "\10f60b"; } + + .fad.fa-map-marker-slash:after { + content: "\10f60c"; } + + .fad.fa-map-marker-smile:after { + content: "\10f60d"; } + + .fad.fa-map-marker-times:after { + content: "\10f60e"; } + + .fad.fa-map-pin:after { + content: "\10f276"; } + + .fad.fa-map-signs:after { + content: "\10f277"; } + + .fad.fa-marker:after { + content: "\10f5a1"; } + + .fad.fa-mars:after { + content: "\10f222"; } + + .fad.fa-mars-double:after { + content: "\10f227"; } + + .fad.fa-mars-stroke:after { + content: "\10f229"; } + + .fad.fa-mars-stroke-h:after { + content: "\10f22b"; } + + .fad.fa-mars-stroke-v:after { + content: "\10f22a"; } + + .fad.fa-mask:after { + content: "\10f6fa"; } + + .fad.fa-meat:after { + content: "\10f814"; } + + .fad.fa-medal:after { + content: "\10f5a2"; } + + .fad.fa-medkit:after { + content: "\10f0fa"; } + + .fad.fa-megaphone:after { + content: "\10f675"; } + + .fad.fa-meh:after { + content: "\10f11a"; } + + .fad.fa-meh-blank:after { + content: "\10f5a4"; } + + .fad.fa-meh-rolling-eyes:after { + content: "\10f5a5"; } + + .fad.fa-memory:after { + content: "\10f538"; } + + .fad.fa-menorah:after { + content: "\10f676"; } + + .fad.fa-mercury:after { + content: "\10f223"; } + + .fad.fa-meteor:after { + content: "\10f753"; } + + .fad.fa-microchip:after { + content: "\10f2db"; } + + .fad.fa-microphone:after { + content: "\10f130"; } + + .fad.fa-microphone-alt:after { + content: "\10f3c9"; } + + .fad.fa-microphone-alt-slash:after { + content: "\10f539"; } + + .fad.fa-microphone-slash:after { + content: "\10f131"; } + + .fad.fa-microphone-stand:after { + content: "\10f8cb"; } + + .fad.fa-microscope:after { + content: "\10f610"; } + + .fad.fa-microwave:after { + content: "\10f91b"; } + + .fad.fa-mind-share:after { + content: "\10f677"; } + + .fad.fa-minus:after { + content: "\10f068"; } + + .fad.fa-minus-circle:after { + content: "\10f056"; } + + .fad.fa-minus-hexagon:after { + content: "\10f307"; } + + .fad.fa-minus-octagon:after { + content: "\10f308"; } + + .fad.fa-minus-square:after { + content: "\10f146"; } + + .fad.fa-mistletoe:after { + content: "\10f7b4"; } + + .fad.fa-mitten:after { + content: "\10f7b5"; } + + .fad.fa-mobile:after { + content: "\10f10b"; } + + .fad.fa-mobile-alt:after { + content: "\10f3cd"; } + + .fad.fa-mobile-android:after { + content: "\10f3ce"; } + + .fad.fa-mobile-android-alt:after { + content: "\10f3cf"; } + + .fad.fa-money-bill:after { + content: "\10f0d6"; } + + .fad.fa-money-bill-alt:after { + content: "\10f3d1"; } + + .fad.fa-money-bill-wave:after { + content: "\10f53a"; } + + .fad.fa-money-bill-wave-alt:after { + content: "\10f53b"; } + + .fad.fa-money-check:after { + content: "\10f53c"; } + + .fad.fa-money-check-alt:after { + content: "\10f53d"; } + + .fad.fa-money-check-edit:after { + content: "\10f872"; } + + .fad.fa-money-check-edit-alt:after { + content: "\10f873"; } + + .fad.fa-monitor-heart-rate:after { + content: "\10f611"; } + + .fad.fa-monkey:after { + content: "\10f6fb"; } + + .fad.fa-monument:after { + content: "\10f5a6"; } + + .fad.fa-moon:after { + content: "\10f186"; } + + .fad.fa-moon-cloud:after { + content: "\10f754"; } + + .fad.fa-moon-stars:after { + content: "\10f755"; } + + .fad.fa-mortar-pestle:after { + content: "\10f5a7"; } + + .fad.fa-mosque:after { + content: "\10f678"; } + + .fad.fa-motorcycle:after { + content: "\10f21c"; } + + .fad.fa-mountain:after { + content: "\10f6fc"; } + + .fad.fa-mountains:after { + content: "\10f6fd"; } + + .fad.fa-mouse:after { + content: "\10f8cc"; } + + .fad.fa-mouse-alt:after { + content: "\10f8cd"; } + + .fad.fa-mouse-pointer:after { + content: "\10f245"; } + + .fad.fa-mp3-player:after { + content: "\10f8ce"; } + + .fad.fa-mug:after { + content: "\10f874"; } + + .fad.fa-mug-hot:after { + content: "\10f7b6"; } + + .fad.fa-mug-marshmallows:after { + content: "\10f7b7"; } + + .fad.fa-mug-tea:after { + content: "\10f875"; } + + .fad.fa-music:after { + content: "\10f001"; } + + .fad.fa-music-alt:after { + content: "\10f8cf"; } + + .fad.fa-music-alt-slash:after { + content: "\10f8d0"; } + + .fad.fa-music-slash:after { + content: "\10f8d1"; } + + .fad.fa-narwhal:after { + content: "\10f6fe"; } + + .fad.fa-network-wired:after { + content: "\10f6ff"; } + + .fad.fa-neuter:after { + content: "\10f22c"; } + + .fad.fa-newspaper:after { + content: "\10f1ea"; } + + .fad.fa-not-equal:after { + content: "\10f53e"; } + + .fad.fa-notes-medical:after { + content: "\10f481"; } + + .fad.fa-object-group:after { + content: "\10f247"; } + + .fad.fa-object-ungroup:after { + content: "\10f248"; } + + .fad.fa-octagon:after { + content: "\10f306"; } + + .fad.fa-oil-can:after { + content: "\10f613"; } + + .fad.fa-oil-temp:after { + content: "\10f614"; } + + .fad.fa-om:after { + content: "\10f679"; } + + .fad.fa-omega:after { + content: "\10f67a"; } + + .fad.fa-ornament:after { + content: "\10f7b8"; } + + .fad.fa-otter:after { + content: "\10f700"; } + + .fad.fa-outdent:after { + content: "\10f03b"; } + + .fad.fa-outlet:after { + content: "\10f91c"; } + + .fad.fa-oven:after { + content: "\10f91d"; } + + .fad.fa-overline:after { + content: "\10f876"; } + + .fad.fa-page-break:after { + content: "\10f877"; } + + .fad.fa-pager:after { + content: "\10f815"; } + + .fad.fa-paint-brush:after { + content: "\10f1fc"; } + + .fad.fa-paint-brush-alt:after { + content: "\10f5a9"; } + + .fad.fa-paint-roller:after { + content: "\10f5aa"; } + + .fad.fa-palette:after { + content: "\10f53f"; } + + .fad.fa-pallet:after { + content: "\10f482"; } + + .fad.fa-pallet-alt:after { + content: "\10f483"; } + + .fad.fa-paper-plane:after { + content: "\10f1d8"; } + + .fad.fa-paperclip:after { + content: "\10f0c6"; } + + .fad.fa-parachute-box:after { + content: "\10f4cd"; } + + .fad.fa-paragraph:after { + content: "\10f1dd"; } + + .fad.fa-paragraph-rtl:after { + content: "\10f878"; } + + .fad.fa-parking:after { + content: "\10f540"; } + + .fad.fa-parking-circle:after { + content: "\10f615"; } + + .fad.fa-parking-circle-slash:after { + content: "\10f616"; } + + .fad.fa-parking-slash:after { + content: "\10f617"; } + + .fad.fa-passport:after { + content: "\10f5ab"; } + + .fad.fa-pastafarianism:after { + content: "\10f67b"; } + + .fad.fa-paste:after { + content: "\10f0ea"; } + + .fad.fa-pause:after { + content: "\10f04c"; } + + .fad.fa-pause-circle:after { + content: "\10f28b"; } + + .fad.fa-paw:after { + content: "\10f1b0"; } + + .fad.fa-paw-alt:after { + content: "\10f701"; } + + .fad.fa-paw-claws:after { + content: "\10f702"; } + + .fad.fa-peace:after { + content: "\10f67c"; } + + .fad.fa-pegasus:after { + content: "\10f703"; } + + .fad.fa-pen:after { + content: "\10f304"; } + + .fad.fa-pen-alt:after { + content: "\10f305"; } + + .fad.fa-pen-fancy:after { + content: "\10f5ac"; } + + .fad.fa-pen-nib:after { + content: "\10f5ad"; } + + .fad.fa-pen-square:after { + content: "\10f14b"; } + + .fad.fa-pencil:after { + content: "\10f040"; } + + .fad.fa-pencil-alt:after { + content: "\10f303"; } + + .fad.fa-pencil-paintbrush:after { + content: "\10f618"; } + + .fad.fa-pencil-ruler:after { + content: "\10f5ae"; } + + .fad.fa-pennant:after { + content: "\10f456"; } + + .fad.fa-people-arrows:after { + content: "\10f968"; } + + .fad.fa-people-carry:after { + content: "\10f4ce"; } + + .fad.fa-pepper-hot:after { + content: "\10f816"; } + + .fad.fa-percent:after { + content: "\10f295"; } + + .fad.fa-percentage:after { + content: "\10f541"; } + + .fad.fa-person-booth:after { + content: "\10f756"; } + + .fad.fa-person-carry:after { + content: "\10f4cf"; } + + .fad.fa-person-dolly:after { + content: "\10f4d0"; } + + .fad.fa-person-dolly-empty:after { + content: "\10f4d1"; } + + .fad.fa-person-sign:after { + content: "\10f757"; } + + .fad.fa-phone:after { + content: "\10f095"; } + + .fad.fa-phone-alt:after { + content: "\10f879"; } + + .fad.fa-phone-laptop:after { + content: "\10f87a"; } + + .fad.fa-phone-office:after { + content: "\10f67d"; } + + .fad.fa-phone-plus:after { + content: "\10f4d2"; } + + .fad.fa-phone-rotary:after { + content: "\10f8d3"; } + + .fad.fa-phone-slash:after { + content: "\10f3dd"; } + + .fad.fa-phone-square:after { + content: "\10f098"; } + + .fad.fa-phone-square-alt:after { + content: "\10f87b"; } + + .fad.fa-phone-volume:after { + content: "\10f2a0"; } + + .fad.fa-photo-video:after { + content: "\10f87c"; } + + .fad.fa-pi:after { + content: "\10f67e"; } + + .fad.fa-piano:after { + content: "\10f8d4"; } + + .fad.fa-piano-keyboard:after { + content: "\10f8d5"; } + + .fad.fa-pie:after { + content: "\10f705"; } + + .fad.fa-pig:after { + content: "\10f706"; } + + .fad.fa-piggy-bank:after { + content: "\10f4d3"; } + + .fad.fa-pills:after { + content: "\10f484"; } + + .fad.fa-pizza:after { + content: "\10f817"; } + + .fad.fa-pizza-slice:after { + content: "\10f818"; } + + .fad.fa-place-of-worship:after { + content: "\10f67f"; } + + .fad.fa-plane:after { + content: "\10f072"; } + + .fad.fa-plane-alt:after { + content: "\10f3de"; } + + .fad.fa-plane-arrival:after { + content: "\10f5af"; } + + .fad.fa-plane-departure:after { + content: "\10f5b0"; } + + .fad.fa-plane-slash:after { + content: "\10f969"; } + + .fad.fa-planet-moon:after { + content: "\10f91f"; } + + .fad.fa-planet-ringed:after { + content: "\10f920"; } + + .fad.fa-play:after { + content: "\10f04b"; } + + .fad.fa-play-circle:after { + content: "\10f144"; } + + .fad.fa-plug:after { + content: "\10f1e6"; } + + .fad.fa-plus:after { + content: "\10f067"; } + + .fad.fa-plus-circle:after { + content: "\10f055"; } + + .fad.fa-plus-hexagon:after { + content: "\10f300"; } + + .fad.fa-plus-octagon:after { + content: "\10f301"; } + + .fad.fa-plus-square:after { + content: "\10f0fe"; } + + .fad.fa-podcast:after { + content: "\10f2ce"; } + + .fad.fa-podium:after { + content: "\10f680"; } + + .fad.fa-podium-star:after { + content: "\10f758"; } + + .fad.fa-police-box:after { + content: "\10f921"; } + + .fad.fa-poll:after { + content: "\10f681"; } + + .fad.fa-poll-h:after { + content: "\10f682"; } + + .fad.fa-poll-people:after { + content: "\10f759"; } + + .fad.fa-poo:after { + content: "\10f2fe"; } + + .fad.fa-poo-storm:after { + content: "\10f75a"; } + + .fad.fa-poop:after { + content: "\10f619"; } + + .fad.fa-popcorn:after { + content: "\10f819"; } + + .fad.fa-portal-enter:after { + content: "\10f922"; } + + .fad.fa-portal-exit:after { + content: "\10f923"; } + + .fad.fa-portrait:after { + content: "\10f3e0"; } + + .fad.fa-pound-sign:after { + content: "\10f154"; } + + .fad.fa-power-off:after { + content: "\10f011"; } + + .fad.fa-pray:after { + content: "\10f683"; } + + .fad.fa-praying-hands:after { + content: "\10f684"; } + + .fad.fa-prescription:after { + content: "\10f5b1"; } + + .fad.fa-prescription-bottle:after { + content: "\10f485"; } + + .fad.fa-prescription-bottle-alt:after { + content: "\10f486"; } + + .fad.fa-presentation:after { + content: "\10f685"; } + + .fad.fa-print:after { + content: "\10f02f"; } + + .fad.fa-print-search:after { + content: "\10f81a"; } + + .fad.fa-print-slash:after { + content: "\10f686"; } + + .fad.fa-procedures:after { + content: "\10f487"; } + + .fad.fa-project-diagram:after { + content: "\10f542"; } + + .fad.fa-projector:after { + content: "\10f8d6"; } + + .fad.fa-pump-medical:after { + content: "\10f96a"; } + + .fad.fa-pump-soap:after { + content: "\10f96b"; } + + .fad.fa-pumpkin:after { + content: "\10f707"; } + + .fad.fa-puzzle-piece:after { + content: "\10f12e"; } + + .fad.fa-qrcode:after { + content: "\10f029"; } + + .fad.fa-question:after { + content: "\10f128"; } + + .fad.fa-question-circle:after { + content: "\10f059"; } + + .fad.fa-question-square:after { + content: "\10f2fd"; } + + .fad.fa-quidditch:after { + content: "\10f458"; } + + .fad.fa-quote-left:after { + content: "\10f10d"; } + + .fad.fa-quote-right:after { + content: "\10f10e"; } + + .fad.fa-quran:after { + content: "\10f687"; } + + .fad.fa-rabbit:after { + content: "\10f708"; } + + .fad.fa-rabbit-fast:after { + content: "\10f709"; } + + .fad.fa-racquet:after { + content: "\10f45a"; } + + .fad.fa-radar:after { + content: "\10f924"; } + + .fad.fa-radiation:after { + content: "\10f7b9"; } + + .fad.fa-radiation-alt:after { + content: "\10f7ba"; } + + .fad.fa-radio:after { + content: "\10f8d7"; } + + .fad.fa-radio-alt:after { + content: "\10f8d8"; } + + .fad.fa-rainbow:after { + content: "\10f75b"; } + + .fad.fa-raindrops:after { + content: "\10f75c"; } + + .fad.fa-ram:after { + content: "\10f70a"; } + + .fad.fa-ramp-loading:after { + content: "\10f4d4"; } + + .fad.fa-random:after { + content: "\10f074"; } + + .fad.fa-raygun:after { + content: "\10f925"; } + + .fad.fa-receipt:after { + content: "\10f543"; } + + .fad.fa-record-vinyl:after { + content: "\10f8d9"; } + + .fad.fa-rectangle-landscape:after { + content: "\10f2fa"; } + + .fad.fa-rectangle-portrait:after { + content: "\10f2fb"; } + + .fad.fa-rectangle-wide:after { + content: "\10f2fc"; } + + .fad.fa-recycle:after { + content: "\10f1b8"; } + + .fad.fa-redo:after { + content: "\10f01e"; } + + .fad.fa-redo-alt:after { + content: "\10f2f9"; } + + .fad.fa-refrigerator:after { + content: "\10f926"; } + + .fad.fa-registered:after { + content: "\10f25d"; } + + .fad.fa-remove-format:after { + content: "\10f87d"; } + + .fad.fa-repeat:after { + content: "\10f363"; } + + .fad.fa-repeat-1:after { + content: "\10f365"; } + + .fad.fa-repeat-1-alt:after { + content: "\10f366"; } + + .fad.fa-repeat-alt:after { + content: "\10f364"; } + + .fad.fa-reply:after { + content: "\10f3e5"; } + + .fad.fa-reply-all:after { + content: "\10f122"; } + + .fad.fa-republican:after { + content: "\10f75e"; } + + .fad.fa-restroom:after { + content: "\10f7bd"; } + + .fad.fa-retweet:after { + content: "\10f079"; } + + .fad.fa-retweet-alt:after { + content: "\10f361"; } + + .fad.fa-ribbon:after { + content: "\10f4d6"; } + + .fad.fa-ring:after { + content: "\10f70b"; } + + .fad.fa-rings-wedding:after { + content: "\10f81b"; } + + .fad.fa-road:after { + content: "\10f018"; } + + .fad.fa-robot:after { + content: "\10f544"; } + + .fad.fa-rocket:after { + content: "\10f135"; } + + .fad.fa-rocket-launch:after { + content: "\10f927"; } + + .fad.fa-route:after { + content: "\10f4d7"; } + + .fad.fa-route-highway:after { + content: "\10f61a"; } + + .fad.fa-route-interstate:after { + content: "\10f61b"; } + + .fad.fa-router:after { + content: "\10f8da"; } + + .fad.fa-rss:after { + content: "\10f09e"; } + + .fad.fa-rss-square:after { + content: "\10f143"; } + + .fad.fa-ruble-sign:after { + content: "\10f158"; } + + .fad.fa-ruler:after { + content: "\10f545"; } + + .fad.fa-ruler-combined:after { + content: "\10f546"; } + + .fad.fa-ruler-horizontal:after { + content: "\10f547"; } + + .fad.fa-ruler-triangle:after { + content: "\10f61c"; } + + .fad.fa-ruler-vertical:after { + content: "\10f548"; } + + .fad.fa-running:after { + content: "\10f70c"; } + + .fad.fa-rupee-sign:after { + content: "\10f156"; } + + .fad.fa-rv:after { + content: "\10f7be"; } + + .fad.fa-sack:after { + content: "\10f81c"; } + + .fad.fa-sack-dollar:after { + content: "\10f81d"; } + + .fad.fa-sad-cry:after { + content: "\10f5b3"; } + + .fad.fa-sad-tear:after { + content: "\10f5b4"; } + + .fad.fa-salad:after { + content: "\10f81e"; } + + .fad.fa-sandwich:after { + content: "\10f81f"; } + + .fad.fa-satellite:after { + content: "\10f7bf"; } + + .fad.fa-satellite-dish:after { + content: "\10f7c0"; } + + .fad.fa-sausage:after { + content: "\10f820"; } + + .fad.fa-save:after { + content: "\10f0c7"; } + + .fad.fa-sax-hot:after { + content: "\10f8db"; } + + .fad.fa-saxophone:after { + content: "\10f8dc"; } + + .fad.fa-scalpel:after { + content: "\10f61d"; } + + .fad.fa-scalpel-path:after { + content: "\10f61e"; } + + .fad.fa-scanner:after { + content: "\10f488"; } + + .fad.fa-scanner-image:after { + content: "\10f8f3"; } + + .fad.fa-scanner-keyboard:after { + content: "\10f489"; } + + .fad.fa-scanner-touchscreen:after { + content: "\10f48a"; } + + .fad.fa-scarecrow:after { + content: "\10f70d"; } + + .fad.fa-scarf:after { + content: "\10f7c1"; } + + .fad.fa-school:after { + content: "\10f549"; } + + .fad.fa-screwdriver:after { + content: "\10f54a"; } + + .fad.fa-scroll:after { + content: "\10f70e"; } + + .fad.fa-scroll-old:after { + content: "\10f70f"; } + + .fad.fa-scrubber:after { + content: "\10f2f8"; } + + .fad.fa-scythe:after { + content: "\10f710"; } + + .fad.fa-sd-card:after { + content: "\10f7c2"; } + + .fad.fa-search:after { + content: "\10f002"; } + + .fad.fa-search-dollar:after { + content: "\10f688"; } + + .fad.fa-search-location:after { + content: "\10f689"; } + + .fad.fa-search-minus:after { + content: "\10f010"; } + + .fad.fa-search-plus:after { + content: "\10f00e"; } + + .fad.fa-seedling:after { + content: "\10f4d8"; } + + .fad.fa-send-back:after { + content: "\10f87e"; } + + .fad.fa-send-backward:after { + content: "\10f87f"; } + + .fad.fa-sensor:after { + content: "\10f928"; } + + .fad.fa-sensor-alert:after { + content: "\10f929"; } + + .fad.fa-sensor-fire:after { + content: "\10f92a"; } + + .fad.fa-sensor-on:after { + content: "\10f92b"; } + + .fad.fa-sensor-smoke:after { + content: "\10f92c"; } + + .fad.fa-server:after { + content: "\10f233"; } + + .fad.fa-shapes:after { + content: "\10f61f"; } + + .fad.fa-share:after { + content: "\10f064"; } + + .fad.fa-share-all:after { + content: "\10f367"; } + + .fad.fa-share-alt:after { + content: "\10f1e0"; } + + .fad.fa-share-alt-square:after { + content: "\10f1e1"; } + + .fad.fa-share-square:after { + content: "\10f14d"; } + + .fad.fa-sheep:after { + content: "\10f711"; } + + .fad.fa-shekel-sign:after { + content: "\10f20b"; } + + .fad.fa-shield:after { + content: "\10f132"; } + + .fad.fa-shield-alt:after { + content: "\10f3ed"; } + + .fad.fa-shield-check:after { + content: "\10f2f7"; } + + .fad.fa-shield-cross:after { + content: "\10f712"; } + + .fad.fa-shield-virus:after { + content: "\10f96c"; } + + .fad.fa-ship:after { + content: "\10f21a"; } + + .fad.fa-shipping-fast:after { + content: "\10f48b"; } + + .fad.fa-shipping-timed:after { + content: "\10f48c"; } + + .fad.fa-shish-kebab:after { + content: "\10f821"; } + + .fad.fa-shoe-prints:after { + content: "\10f54b"; } + + .fad.fa-shopping-bag:after { + content: "\10f290"; } + + .fad.fa-shopping-basket:after { + content: "\10f291"; } + + .fad.fa-shopping-cart:after { + content: "\10f07a"; } + + .fad.fa-shovel:after { + content: "\10f713"; } + + .fad.fa-shovel-snow:after { + content: "\10f7c3"; } + + .fad.fa-shower:after { + content: "\10f2cc"; } + + .fad.fa-shredder:after { + content: "\10f68a"; } + + .fad.fa-shuttle-van:after { + content: "\10f5b6"; } + + .fad.fa-shuttlecock:after { + content: "\10f45b"; } + + .fad.fa-sickle:after { + content: "\10f822"; } + + .fad.fa-sigma:after { + content: "\10f68b"; } + + .fad.fa-sign:after { + content: "\10f4d9"; } + + .fad.fa-sign-in:after { + content: "\10f090"; } + + .fad.fa-sign-in-alt:after { + content: "\10f2f6"; } + + .fad.fa-sign-language:after { + content: "\10f2a7"; } + + .fad.fa-sign-out:after { + content: "\10f08b"; } + + .fad.fa-sign-out-alt:after { + content: "\10f2f5"; } + + .fad.fa-signal:after { + content: "\10f012"; } + + .fad.fa-signal-1:after { + content: "\10f68c"; } + + .fad.fa-signal-2:after { + content: "\10f68d"; } + + .fad.fa-signal-3:after { + content: "\10f68e"; } + + .fad.fa-signal-4:after { + content: "\10f68f"; } + + .fad.fa-signal-alt:after { + content: "\10f690"; } + + .fad.fa-signal-alt-1:after { + content: "\10f691"; } + + .fad.fa-signal-alt-2:after { + content: "\10f692"; } + + .fad.fa-signal-alt-3:after { + content: "\10f693"; } + + .fad.fa-signal-alt-slash:after { + content: "\10f694"; } + + .fad.fa-signal-slash:after { + content: "\10f695"; } + + .fad.fa-signal-stream:after { + content: "\10f8dd"; } + + .fad.fa-signature:after { + content: "\10f5b7"; } + + .fad.fa-sim-card:after { + content: "\10f7c4"; } + + .fad.fa-sink:after { + content: "\10f96d"; } + + .fad.fa-siren:after { + content: "\10f92d"; } + + .fad.fa-siren-on:after { + content: "\10f92e"; } + + .fad.fa-sitemap:after { + content: "\10f0e8"; } + + .fad.fa-skating:after { + content: "\10f7c5"; } + + .fad.fa-skeleton:after { + content: "\10f620"; } + + .fad.fa-ski-jump:after { + content: "\10f7c7"; } + + .fad.fa-ski-lift:after { + content: "\10f7c8"; } + + .fad.fa-skiing:after { + content: "\10f7c9"; } + + .fad.fa-skiing-nordic:after { + content: "\10f7ca"; } + + .fad.fa-skull:after { + content: "\10f54c"; } + + .fad.fa-skull-cow:after { + content: "\10f8de"; } + + .fad.fa-skull-crossbones:after { + content: "\10f714"; } + + .fad.fa-slash:after { + content: "\10f715"; } + + .fad.fa-sledding:after { + content: "\10f7cb"; } + + .fad.fa-sleigh:after { + content: "\10f7cc"; } + + .fad.fa-sliders-h:after { + content: "\10f1de"; } + + .fad.fa-sliders-h-square:after { + content: "\10f3f0"; } + + .fad.fa-sliders-v:after { + content: "\10f3f1"; } + + .fad.fa-sliders-v-square:after { + content: "\10f3f2"; } + + .fad.fa-smile:after { + content: "\10f118"; } + + .fad.fa-smile-beam:after { + content: "\10f5b8"; } + + .fad.fa-smile-plus:after { + content: "\10f5b9"; } + + .fad.fa-smile-wink:after { + content: "\10f4da"; } + + .fad.fa-smog:after { + content: "\10f75f"; } + + .fad.fa-smoke:after { + content: "\10f760"; } + + .fad.fa-smoking:after { + content: "\10f48d"; } + + .fad.fa-smoking-ban:after { + content: "\10f54d"; } + + .fad.fa-sms:after { + content: "\10f7cd"; } + + .fad.fa-snake:after { + content: "\10f716"; } + + .fad.fa-snooze:after { + content: "\10f880"; } + + .fad.fa-snow-blowing:after { + content: "\10f761"; } + + .fad.fa-snowboarding:after { + content: "\10f7ce"; } + + .fad.fa-snowflake:after { + content: "\10f2dc"; } + + .fad.fa-snowflakes:after { + content: "\10f7cf"; } + + .fad.fa-snowman:after { + content: "\10f7d0"; } + + .fad.fa-snowmobile:after { + content: "\10f7d1"; } + + .fad.fa-snowplow:after { + content: "\10f7d2"; } + + .fad.fa-soap:after { + content: "\10f96e"; } + + .fad.fa-socks:after { + content: "\10f696"; } + + .fad.fa-solar-panel:after { + content: "\10f5ba"; } + + .fad.fa-solar-system:after { + content: "\10f92f"; } + + .fad.fa-sort:after { + content: "\10f0dc"; } + + .fad.fa-sort-alpha-down:after { + content: "\10f15d"; } + + .fad.fa-sort-alpha-down-alt:after { + content: "\10f881"; } + + .fad.fa-sort-alpha-up:after { + content: "\10f15e"; } + + .fad.fa-sort-alpha-up-alt:after { + content: "\10f882"; } + + .fad.fa-sort-alt:after { + content: "\10f883"; } + + .fad.fa-sort-amount-down:after { + content: "\10f160"; } + + .fad.fa-sort-amount-down-alt:after { + content: "\10f884"; } + + .fad.fa-sort-amount-up:after { + content: "\10f161"; } + + .fad.fa-sort-amount-up-alt:after { + content: "\10f885"; } + + .fad.fa-sort-circle:after { + content: "\10f930"; } + + .fad.fa-sort-circle-down:after { + content: "\10f931"; } + + .fad.fa-sort-circle-up:after { + content: "\10f932"; } + + .fad.fa-sort-down:after { + content: "\10f0dd"; } + + .fad.fa-sort-numeric-down:after { + content: "\10f162"; } + + .fad.fa-sort-numeric-down-alt:after { + content: "\10f886"; } + + .fad.fa-sort-numeric-up:after { + content: "\10f163"; } + + .fad.fa-sort-numeric-up-alt:after { + content: "\10f887"; } + + .fad.fa-sort-shapes-down:after { + content: "\10f888"; } + + .fad.fa-sort-shapes-down-alt:after { + content: "\10f889"; } + + .fad.fa-sort-shapes-up:after { + content: "\10f88a"; } + + .fad.fa-sort-shapes-up-alt:after { + content: "\10f88b"; } + + .fad.fa-sort-size-down:after { + content: "\10f88c"; } + + .fad.fa-sort-size-down-alt:after { + content: "\10f88d"; } + + .fad.fa-sort-size-up:after { + content: "\10f88e"; } + + .fad.fa-sort-size-up-alt:after { + content: "\10f88f"; } + + .fad.fa-sort-up:after { + content: "\10f0de"; } + + .fad.fa-soup:after { + content: "\10f823"; } + + .fad.fa-spa:after { + content: "\10f5bb"; } + + .fad.fa-space-shuttle:after { + content: "\10f197"; } + + .fad.fa-space-station-moon:after { + content: "\10f933"; } + + .fad.fa-space-station-moon-alt:after { + content: "\10f934"; } + + .fad.fa-spade:after { + content: "\10f2f4"; } + + .fad.fa-sparkles:after { + content: "\10f890"; } + + .fad.fa-speaker:after { + content: "\10f8df"; } + + .fad.fa-speakers:after { + content: "\10f8e0"; } + + .fad.fa-spell-check:after { + content: "\10f891"; } + + .fad.fa-spider:after { + content: "\10f717"; } + + .fad.fa-spider-black-widow:after { + content: "\10f718"; } + + .fad.fa-spider-web:after { + content: "\10f719"; } + + .fad.fa-spinner:after { + content: "\10f110"; } + + .fad.fa-spinner-third:after { + content: "\10f3f4"; } + + .fad.fa-splotch:after { + content: "\10f5bc"; } + + .fad.fa-spray-can:after { + content: "\10f5bd"; } + + .fad.fa-sprinkler:after { + content: "\10f935"; } + + .fad.fa-square:after { + content: "\10f0c8"; } + + .fad.fa-square-full:after { + content: "\10f45c"; } + + .fad.fa-square-root:after { + content: "\10f697"; } + + .fad.fa-square-root-alt:after { + content: "\10f698"; } + + .fad.fa-squirrel:after { + content: "\10f71a"; } + + .fad.fa-staff:after { + content: "\10f71b"; } + + .fad.fa-stamp:after { + content: "\10f5bf"; } + + .fad.fa-star:after { + content: "\10f005"; } + + .fad.fa-star-and-crescent:after { + content: "\10f699"; } + + .fad.fa-star-christmas:after { + content: "\10f7d4"; } + + .fad.fa-star-exclamation:after { + content: "\10f2f3"; } + + .fad.fa-star-half:after { + content: "\10f089"; } + + .fad.fa-star-half-alt:after { + content: "\10f5c0"; } + + .fad.fa-star-of-david:after { + content: "\10f69a"; } + + .fad.fa-star-of-life:after { + content: "\10f621"; } + + .fad.fa-star-shooting:after { + content: "\10f936"; } + + .fad.fa-starfighter:after { + content: "\10f937"; } + + .fad.fa-starfighter-alt:after { + content: "\10f938"; } + + .fad.fa-stars:after { + content: "\10f762"; } + + .fad.fa-starship:after { + content: "\10f939"; } + + .fad.fa-starship-freighter:after { + content: "\10f93a"; } + + .fad.fa-steak:after { + content: "\10f824"; } + + .fad.fa-steering-wheel:after { + content: "\10f622"; } + + .fad.fa-step-backward:after { + content: "\10f048"; } + + .fad.fa-step-forward:after { + content: "\10f051"; } + + .fad.fa-stethoscope:after { + content: "\10f0f1"; } + + .fad.fa-sticky-note:after { + content: "\10f249"; } + + .fad.fa-stocking:after { + content: "\10f7d5"; } + + .fad.fa-stomach:after { + content: "\10f623"; } + + .fad.fa-stop:after { + content: "\10f04d"; } + + .fad.fa-stop-circle:after { + content: "\10f28d"; } + + .fad.fa-stopwatch:after { + content: "\10f2f2"; } + + .fad.fa-stopwatch-20:after { + content: "\10f96f"; } + + .fad.fa-store:after { + content: "\10f54e"; } + + .fad.fa-store-alt:after { + content: "\10f54f"; } + + .fad.fa-store-alt-slash:after { + content: "\10f970"; } + + .fad.fa-store-slash:after { + content: "\10f971"; } + + .fad.fa-stream:after { + content: "\10f550"; } + + .fad.fa-street-view:after { + content: "\10f21d"; } + + .fad.fa-stretcher:after { + content: "\10f825"; } + + .fad.fa-strikethrough:after { + content: "\10f0cc"; } + + .fad.fa-stroopwafel:after { + content: "\10f551"; } + + .fad.fa-subscript:after { + content: "\10f12c"; } + + .fad.fa-subway:after { + content: "\10f239"; } + + .fad.fa-suitcase:after { + content: "\10f0f2"; } + + .fad.fa-suitcase-rolling:after { + content: "\10f5c1"; } + + .fad.fa-sun:after { + content: "\10f185"; } + + .fad.fa-sun-cloud:after { + content: "\10f763"; } + + .fad.fa-sun-dust:after { + content: "\10f764"; } + + .fad.fa-sun-haze:after { + content: "\10f765"; } + + .fad.fa-sunglasses:after { + content: "\10f892"; } + + .fad.fa-sunrise:after { + content: "\10f766"; } + + .fad.fa-sunset:after { + content: "\10f767"; } + + .fad.fa-superscript:after { + content: "\10f12b"; } + + .fad.fa-surprise:after { + content: "\10f5c2"; } + + .fad.fa-swatchbook:after { + content: "\10f5c3"; } + + .fad.fa-swimmer:after { + content: "\10f5c4"; } + + .fad.fa-swimming-pool:after { + content: "\10f5c5"; } + + .fad.fa-sword:after { + content: "\10f71c"; } + + .fad.fa-sword-laser:after { + content: "\10f93b"; } + + .fad.fa-sword-laser-alt:after { + content: "\10f93c"; } + + .fad.fa-swords:after { + content: "\10f71d"; } + + .fad.fa-swords-laser:after { + content: "\10f93d"; } + + .fad.fa-synagogue:after { + content: "\10f69b"; } + + .fad.fa-sync:after { + content: "\10f021"; } + + .fad.fa-sync-alt:after { + content: "\10f2f1"; } + + .fad.fa-syringe:after { + content: "\10f48e"; } + + .fad.fa-table:after { + content: "\10f0ce"; } + + .fad.fa-table-tennis:after { + content: "\10f45d"; } + + .fad.fa-tablet:after { + content: "\10f10a"; } + + .fad.fa-tablet-alt:after { + content: "\10f3fa"; } + + .fad.fa-tablet-android:after { + content: "\10f3fb"; } + + .fad.fa-tablet-android-alt:after { + content: "\10f3fc"; } + + .fad.fa-tablet-rugged:after { + content: "\10f48f"; } + + .fad.fa-tablets:after { + content: "\10f490"; } + + .fad.fa-tachometer:after { + content: "\10f0e4"; } + + .fad.fa-tachometer-alt:after { + content: "\10f3fd"; } + + .fad.fa-tachometer-alt-average:after { + content: "\10f624"; } + + .fad.fa-tachometer-alt-fast:after { + content: "\10f625"; } + + .fad.fa-tachometer-alt-fastest:after { + content: "\10f626"; } + + .fad.fa-tachometer-alt-slow:after { + content: "\10f627"; } + + .fad.fa-tachometer-alt-slowest:after { + content: "\10f628"; } + + .fad.fa-tachometer-average:after { + content: "\10f629"; } + + .fad.fa-tachometer-fast:after { + content: "\10f62a"; } + + .fad.fa-tachometer-fastest:after { + content: "\10f62b"; } + + .fad.fa-tachometer-slow:after { + content: "\10f62c"; } + + .fad.fa-tachometer-slowest:after { + content: "\10f62d"; } + + .fad.fa-taco:after { + content: "\10f826"; } + + .fad.fa-tag:after { + content: "\10f02b"; } + + .fad.fa-tags:after { + content: "\10f02c"; } + + .fad.fa-tally:after { + content: "\10f69c"; } + + .fad.fa-tanakh:after { + content: "\10f827"; } + + .fad.fa-tape:after { + content: "\10f4db"; } + + .fad.fa-tasks:after { + content: "\10f0ae"; } + + .fad.fa-tasks-alt:after { + content: "\10f828"; } + + .fad.fa-taxi:after { + content: "\10f1ba"; } + + .fad.fa-teeth:after { + content: "\10f62e"; } + + .fad.fa-teeth-open:after { + content: "\10f62f"; } + + .fad.fa-telescope:after { + content: "\10f93e"; } + + .fad.fa-temperature-down:after { + content: "\10f93f"; } + + .fad.fa-temperature-frigid:after { + content: "\10f768"; } + + .fad.fa-temperature-high:after { + content: "\10f769"; } + + .fad.fa-temperature-hot:after { + content: "\10f76a"; } + + .fad.fa-temperature-low:after { + content: "\10f76b"; } + + .fad.fa-temperature-up:after { + content: "\10f940"; } + + .fad.fa-tenge:after { + content: "\10f7d7"; } + + .fad.fa-tennis-ball:after { + content: "\10f45e"; } + + .fad.fa-terminal:after { + content: "\10f120"; } + + .fad.fa-text:after { + content: "\10f893"; } + + .fad.fa-text-height:after { + content: "\10f034"; } + + .fad.fa-text-size:after { + content: "\10f894"; } + + .fad.fa-text-width:after { + content: "\10f035"; } + + .fad.fa-th:after { + content: "\10f00a"; } + + .fad.fa-th-large:after { + content: "\10f009"; } + + .fad.fa-th-list:after { + content: "\10f00b"; } + + .fad.fa-theater-masks:after { + content: "\10f630"; } + + .fad.fa-thermometer:after { + content: "\10f491"; } + + .fad.fa-thermometer-empty:after { + content: "\10f2cb"; } + + .fad.fa-thermometer-full:after { + content: "\10f2c7"; } + + .fad.fa-thermometer-half:after { + content: "\10f2c9"; } + + .fad.fa-thermometer-quarter:after { + content: "\10f2ca"; } + + .fad.fa-thermometer-three-quarters:after { + content: "\10f2c8"; } + + .fad.fa-theta:after { + content: "\10f69e"; } + + .fad.fa-thumbs-down:after { + content: "\10f165"; } + + .fad.fa-thumbs-up:after { + content: "\10f164"; } + + .fad.fa-thumbtack:after { + content: "\10f08d"; } + + .fad.fa-thunderstorm:after { + content: "\10f76c"; } + + .fad.fa-thunderstorm-moon:after { + content: "\10f76d"; } + + .fad.fa-thunderstorm-sun:after { + content: "\10f76e"; } + + .fad.fa-ticket:after { + content: "\10f145"; } + + .fad.fa-ticket-alt:after { + content: "\10f3ff"; } + + .fad.fa-tilde:after { + content: "\10f69f"; } + + .fad.fa-times:after { + content: "\10f00d"; } + + .fad.fa-times-circle:after { + content: "\10f057"; } + + .fad.fa-times-hexagon:after { + content: "\10f2ee"; } + + .fad.fa-times-octagon:after { + content: "\10f2f0"; } + + .fad.fa-times-square:after { + content: "\10f2d3"; } + + .fad.fa-tint:after { + content: "\10f043"; } + + .fad.fa-tint-slash:after { + content: "\10f5c7"; } + + .fad.fa-tire:after { + content: "\10f631"; } + + .fad.fa-tire-flat:after { + content: "\10f632"; } + + .fad.fa-tire-pressure-warning:after { + content: "\10f633"; } + + .fad.fa-tire-rugged:after { + content: "\10f634"; } + + .fad.fa-tired:after { + content: "\10f5c8"; } + + .fad.fa-toggle-off:after { + content: "\10f204"; } + + .fad.fa-toggle-on:after { + content: "\10f205"; } + + .fad.fa-toilet:after { + content: "\10f7d8"; } + + .fad.fa-toilet-paper:after { + content: "\10f71e"; } + + .fad.fa-toilet-paper-alt:after { + content: "\10f71f"; } + + .fad.fa-toilet-paper-slash:after { + content: "\10f972"; } + + .fad.fa-tombstone:after { + content: "\10f720"; } + + .fad.fa-tombstone-alt:after { + content: "\10f721"; } + + .fad.fa-toolbox:after { + content: "\10f552"; } + + .fad.fa-tools:after { + content: "\10f7d9"; } + + .fad.fa-tooth:after { + content: "\10f5c9"; } + + .fad.fa-toothbrush:after { + content: "\10f635"; } + + .fad.fa-torah:after { + content: "\10f6a0"; } + + .fad.fa-torii-gate:after { + content: "\10f6a1"; } + + .fad.fa-tornado:after { + content: "\10f76f"; } + + .fad.fa-tractor:after { + content: "\10f722"; } + + .fad.fa-trademark:after { + content: "\10f25c"; } + + .fad.fa-traffic-cone:after { + content: "\10f636"; } + + .fad.fa-traffic-light:after { + content: "\10f637"; } + + .fad.fa-traffic-light-go:after { + content: "\10f638"; } + + .fad.fa-traffic-light-slow:after { + content: "\10f639"; } + + .fad.fa-traffic-light-stop:after { + content: "\10f63a"; } + + .fad.fa-trailer:after { + content: "\10f941"; } + + .fad.fa-train:after { + content: "\10f238"; } + + .fad.fa-tram:after { + content: "\10f7da"; } + + .fad.fa-transgender:after { + content: "\10f224"; } + + .fad.fa-transgender-alt:after { + content: "\10f225"; } + + .fad.fa-transporter:after { + content: "\10f942"; } + + .fad.fa-transporter-1:after { + content: "\10f943"; } + + .fad.fa-transporter-2:after { + content: "\10f944"; } + + .fad.fa-transporter-3:after { + content: "\10f945"; } + + .fad.fa-transporter-empty:after { + content: "\10f946"; } + + .fad.fa-trash:after { + content: "\10f1f8"; } + + .fad.fa-trash-alt:after { + content: "\10f2ed"; } + + .fad.fa-trash-restore:after { + content: "\10f829"; } + + .fad.fa-trash-restore-alt:after { + content: "\10f82a"; } + + .fad.fa-trash-undo:after { + content: "\10f895"; } + + .fad.fa-trash-undo-alt:after { + content: "\10f896"; } + + .fad.fa-treasure-chest:after { + content: "\10f723"; } + + .fad.fa-tree:after { + content: "\10f1bb"; } + + .fad.fa-tree-alt:after { + content: "\10f400"; } + + .fad.fa-tree-christmas:after { + content: "\10f7db"; } + + .fad.fa-tree-decorated:after { + content: "\10f7dc"; } + + .fad.fa-tree-large:after { + content: "\10f7dd"; } + + .fad.fa-tree-palm:after { + content: "\10f82b"; } + + .fad.fa-trees:after { + content: "\10f724"; } + + .fad.fa-triangle:after { + content: "\10f2ec"; } + + .fad.fa-triangle-music:after { + content: "\10f8e2"; } + + .fad.fa-trophy:after { + content: "\10f091"; } + + .fad.fa-trophy-alt:after { + content: "\10f2eb"; } + + .fad.fa-truck:after { + content: "\10f0d1"; } + + .fad.fa-truck-container:after { + content: "\10f4dc"; } + + .fad.fa-truck-couch:after { + content: "\10f4dd"; } + + .fad.fa-truck-loading:after { + content: "\10f4de"; } + + .fad.fa-truck-monster:after { + content: "\10f63b"; } + + .fad.fa-truck-moving:after { + content: "\10f4df"; } + + .fad.fa-truck-pickup:after { + content: "\10f63c"; } + + .fad.fa-truck-plow:after { + content: "\10f7de"; } + + .fad.fa-truck-ramp:after { + content: "\10f4e0"; } + + .fad.fa-trumpet:after { + content: "\10f8e3"; } + + .fad.fa-tshirt:after { + content: "\10f553"; } + + .fad.fa-tty:after { + content: "\10f1e4"; } + + .fad.fa-turkey:after { + content: "\10f725"; } + + .fad.fa-turntable:after { + content: "\10f8e4"; } + + .fad.fa-turtle:after { + content: "\10f726"; } + + .fad.fa-tv:after { + content: "\10f26c"; } + + .fad.fa-tv-alt:after { + content: "\10f8e5"; } + + .fad.fa-tv-music:after { + content: "\10f8e6"; } + + .fad.fa-tv-retro:after { + content: "\10f401"; } + + .fad.fa-typewriter:after { + content: "\10f8e7"; } + + .fad.fa-ufo:after { + content: "\10f947"; } + + .fad.fa-ufo-beam:after { + content: "\10f948"; } + + .fad.fa-umbrella:after { + content: "\10f0e9"; } + + .fad.fa-umbrella-beach:after { + content: "\10f5ca"; } + + .fad.fa-underline:after { + content: "\10f0cd"; } + + .fad.fa-undo:after { + content: "\10f0e2"; } + + .fad.fa-undo-alt:after { + content: "\10f2ea"; } + + .fad.fa-unicorn:after { + content: "\10f727"; } + + .fad.fa-union:after { + content: "\10f6a2"; } + + .fad.fa-universal-access:after { + content: "\10f29a"; } + + .fad.fa-university:after { + content: "\10f19c"; } + + .fad.fa-unlink:after { + content: "\10f127"; } + + .fad.fa-unlock:after { + content: "\10f09c"; } + + .fad.fa-unlock-alt:after { + content: "\10f13e"; } + + .fad.fa-upload:after { + content: "\10f093"; } + + .fad.fa-usb-drive:after { + content: "\10f8e9"; } + + .fad.fa-usd-circle:after { + content: "\10f2e8"; } + + .fad.fa-usd-square:after { + content: "\10f2e9"; } + + .fad.fa-user:after { + content: "\10f007"; } + + .fad.fa-user-alien:after { + content: "\10f94a"; } + + .fad.fa-user-alt:after { + content: "\10f406"; } + + .fad.fa-user-alt-slash:after { + content: "\10f4fa"; } + + .fad.fa-user-astronaut:after { + content: "\10f4fb"; } + + .fad.fa-user-chart:after { + content: "\10f6a3"; } + + .fad.fa-user-check:after { + content: "\10f4fc"; } + + .fad.fa-user-circle:after { + content: "\10f2bd"; } + + .fad.fa-user-clock:after { + content: "\10f4fd"; } + + .fad.fa-user-cog:after { + content: "\10f4fe"; } + + .fad.fa-user-cowboy:after { + content: "\10f8ea"; } + + .fad.fa-user-crown:after { + content: "\10f6a4"; } + + .fad.fa-user-edit:after { + content: "\10f4ff"; } + + .fad.fa-user-friends:after { + content: "\10f500"; } + + .fad.fa-user-graduate:after { + content: "\10f501"; } + + .fad.fa-user-hard-hat:after { + content: "\10f82c"; } + + .fad.fa-user-headset:after { + content: "\10f82d"; } + + .fad.fa-user-injured:after { + content: "\10f728"; } + + .fad.fa-user-lock:after { + content: "\10f502"; } + + .fad.fa-user-md:after { + content: "\10f0f0"; } + + .fad.fa-user-md-chat:after { + content: "\10f82e"; } + + .fad.fa-user-minus:after { + content: "\10f503"; } + + .fad.fa-user-music:after { + content: "\10f8eb"; } + + .fad.fa-user-ninja:after { + content: "\10f504"; } + + .fad.fa-user-nurse:after { + content: "\10f82f"; } + + .fad.fa-user-plus:after { + content: "\10f234"; } + + .fad.fa-user-robot:after { + content: "\10f94b"; } + + .fad.fa-user-secret:after { + content: "\10f21b"; } + + .fad.fa-user-shield:after { + content: "\10f505"; } + + .fad.fa-user-slash:after { + content: "\10f506"; } + + .fad.fa-user-tag:after { + content: "\10f507"; } + + .fad.fa-user-tie:after { + content: "\10f508"; } + + .fad.fa-user-times:after { + content: "\10f235"; } + + .fad.fa-user-unlock:after { + content: "\10f958"; } + + .fad.fa-user-visor:after { + content: "\10f94c"; } + + .fad.fa-users:after { + content: "\10f0c0"; } + + .fad.fa-users-class:after { + content: "\10f63d"; } + + .fad.fa-users-cog:after { + content: "\10f509"; } + + .fad.fa-users-crown:after { + content: "\10f6a5"; } + + .fad.fa-users-medical:after { + content: "\10f830"; } + + .fad.fa-users-slash:after { + content: "\10f973"; } + + .fad.fa-utensil-fork:after { + content: "\10f2e3"; } + + .fad.fa-utensil-knife:after { + content: "\10f2e4"; } + + .fad.fa-utensil-spoon:after { + content: "\10f2e5"; } + + .fad.fa-utensils:after { + content: "\10f2e7"; } + + .fad.fa-utensils-alt:after { + content: "\10f2e6"; } + + .fad.fa-vacuum:after { + content: "\10f94d"; } + + .fad.fa-vacuum-robot:after { + content: "\10f94e"; } + + .fad.fa-value-absolute:after { + content: "\10f6a6"; } + + .fad.fa-vector-square:after { + content: "\10f5cb"; } + + .fad.fa-venus:after { + content: "\10f221"; } + + .fad.fa-venus-double:after { + content: "\10f226"; } + + .fad.fa-venus-mars:after { + content: "\10f228"; } + + .fad.fa-vhs:after { + content: "\10f8ec"; } + + .fad.fa-vial:after { + content: "\10f492"; } + + .fad.fa-vials:after { + content: "\10f493"; } + + .fad.fa-video:after { + content: "\10f03d"; } + + .fad.fa-video-plus:after { + content: "\10f4e1"; } + + .fad.fa-video-slash:after { + content: "\10f4e2"; } + + .fad.fa-vihara:after { + content: "\10f6a7"; } + + .fad.fa-violin:after { + content: "\10f8ed"; } + + .fad.fa-virus:after { + content: "\10f974"; } + + .fad.fa-virus-slash:after { + content: "\10f975"; } + + .fad.fa-viruses:after { + content: "\10f976"; } + + .fad.fa-voicemail:after { + content: "\10f897"; } + + .fad.fa-volcano:after { + content: "\10f770"; } + + .fad.fa-volleyball-ball:after { + content: "\10f45f"; } + + .fad.fa-volume:after { + content: "\10f6a8"; } + + .fad.fa-volume-down:after { + content: "\10f027"; } + + .fad.fa-volume-mute:after { + content: "\10f6a9"; } + + .fad.fa-volume-off:after { + content: "\10f026"; } + + .fad.fa-volume-slash:after { + content: "\10f2e2"; } + + .fad.fa-volume-up:after { + content: "\10f028"; } + + .fad.fa-vote-nay:after { + content: "\10f771"; } + + .fad.fa-vote-yea:after { + content: "\10f772"; } + + .fad.fa-vr-cardboard:after { + content: "\10f729"; } + + .fad.fa-wagon-covered:after { + content: "\10f8ee"; } + + .fad.fa-walker:after { + content: "\10f831"; } + + .fad.fa-walkie-talkie:after { + content: "\10f8ef"; } + + .fad.fa-walking:after { + content: "\10f554"; } + + .fad.fa-wallet:after { + content: "\10f555"; } + + .fad.fa-wand:after { + content: "\10f72a"; } + + .fad.fa-wand-magic:after { + content: "\10f72b"; } + + .fad.fa-warehouse:after { + content: "\10f494"; } + + .fad.fa-warehouse-alt:after { + content: "\10f495"; } + + .fad.fa-washer:after { + content: "\10f898"; } + + .fad.fa-watch:after { + content: "\10f2e1"; } + + .fad.fa-watch-calculator:after { + content: "\10f8f0"; } + + .fad.fa-watch-fitness:after { + content: "\10f63e"; } + + .fad.fa-water:after { + content: "\10f773"; } + + .fad.fa-water-lower:after { + content: "\10f774"; } + + .fad.fa-water-rise:after { + content: "\10f775"; } + + .fad.fa-wave-sine:after { + content: "\10f899"; } + + .fad.fa-wave-square:after { + content: "\10f83e"; } + + .fad.fa-wave-triangle:after { + content: "\10f89a"; } + + .fad.fa-waveform:after { + content: "\10f8f1"; } + + .fad.fa-waveform-path:after { + content: "\10f8f2"; } + + .fad.fa-webcam:after { + content: "\10f832"; } + + .fad.fa-webcam-slash:after { + content: "\10f833"; } + + .fad.fa-weight:after { + content: "\10f496"; } + + .fad.fa-weight-hanging:after { + content: "\10f5cd"; } + + .fad.fa-whale:after { + content: "\10f72c"; } + + .fad.fa-wheat:after { + content: "\10f72d"; } + + .fad.fa-wheelchair:after { + content: "\10f193"; } + + .fad.fa-whistle:after { + content: "\10f460"; } + + .fad.fa-wifi:after { + content: "\10f1eb"; } + + .fad.fa-wifi-1:after { + content: "\10f6aa"; } + + .fad.fa-wifi-2:after { + content: "\10f6ab"; } + + .fad.fa-wifi-slash:after { + content: "\10f6ac"; } + + .fad.fa-wind:after { + content: "\10f72e"; } + + .fad.fa-wind-turbine:after { + content: "\10f89b"; } + + .fad.fa-wind-warning:after { + content: "\10f776"; } + + .fad.fa-window:after { + content: "\10f40e"; } + + .fad.fa-window-alt:after { + content: "\10f40f"; } + + .fad.fa-window-close:after { + content: "\10f410"; } + + .fad.fa-window-frame:after { + content: "\10f94f"; } + + .fad.fa-window-frame-open:after { + content: "\10f950"; } + + .fad.fa-window-maximize:after { + content: "\10f2d0"; } + + .fad.fa-window-minimize:after { + content: "\10f2d1"; } + + .fad.fa-window-restore:after { + content: "\10f2d2"; } + + .fad.fa-windsock:after { + content: "\10f777"; } + + .fad.fa-wine-bottle:after { + content: "\10f72f"; } + + .fad.fa-wine-glass:after { + content: "\10f4e3"; } + + .fad.fa-wine-glass-alt:after { + content: "\10f5ce"; } + + .fad.fa-won-sign:after { + content: "\10f159"; } + + .fad.fa-wreath:after { + content: "\10f7e2"; } + + .fad.fa-wrench:after { + content: "\10f0ad"; } + + .fad.fa-x-ray:after { + content: "\10f497"; } + + .fad.fa-yen-sign:after { + content: "\10f157"; } + + .fad.fa-yin-yang:after { + content: "\10f6ad"; } + @font-face { + font-family: 'Font Awesome 5 Pro'; + font-style: normal; + font-weight: 300; + font-display: block; + src: url("/assets/fonts/fa-light-300.html"); + src: url("/assets/fonts/fa-light-300d41d.eot?#iefix") format("embedded-opentype"), url("/assets/fonts/fa-light-300.html") format("woff2"), url("/assets/fonts/fa-light-300.woff") format("woff"), url("/assets/fonts/fa-light-300.ttf") format("truetype"), url("/assets/fonts/fa-light-300.svg#fontawesome") format("svg"); } + + .fal { + font-family: 'Font Awesome 5 Pro'; + font-weight: 300; } + @font-face { + font-family: 'Font Awesome 5 Pro'; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../../assets/fonts/fa-regular-400.eot"); + src: url("../../assets/fonts/fa-regular-400d41d.eot?#iefix") format("embedded-opentype"), url("../../assets/fonts/fa-regular-400.html") format("woff2"), url("../../assets/fonts/fa-regular-400.woff") format("woff"), url("../../assets/fonts/fa-regular-400.ttf") format("truetype"), url("../../assets/fonts/fa-regular-400.svg#fontawesome") format("svg"); } + + .far { + font-family: 'Font Awesome 5 Pro'; + font-weight: 400; } + @font-face { + font-family: 'Font Awesome 5 Pro'; + font-style: normal; + font-weight: 900; + font-display: block; + src: url("../../assets/fonts/fa-solid-900.eot"); + src: url("../../assets/fonts/fa-solid-900d41d.eot?#iefix") format("embedded-opentype"), url("../../assets/fonts/fa-solid-900.html") format("woff2"), url("../../assets/fonts/fa-solid-900.woff") format("woff"), url("../../assets/fonts/fa-solid-900.ttf") format("truetype"), url("../../assets/fonts/fa-solid-900.svg#fontawesome") format("svg"); } + + .fa, + .fas { + font-family: 'Font Awesome 5 Pro'; + font-weight: 900; } + \ No newline at end of file diff --git a/apiferia/src/assets/css/jquery.fancybox.min.css b/apiferia/src/assets/css/jquery.fancybox.min.css new file mode 100644 index 00000000..5d804a59 --- /dev/null +++ b/apiferia/src/assets/css/jquery.fancybox.min.css @@ -0,0 +1 @@ +@charset "UTF-8";body.fancybox-active{overflow:hidden}body.fancybox-iosfix{position:fixed;left:0;right:0}.fancybox-is-hidden{position:absolute;top:-9999px;left:-9999px;visibility:hidden}.fancybox-container{position:fixed;top:0;left:0;width:100%;height:100%;z-index:99992;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{position:absolute;top:0;right:0;bottom:0;left:0}.fancybox-outer{overflow-y:auto;-webkit-overflow-scrolling:touch}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.87;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption-wrap,.fancybox-infobar,.fancybox-toolbar{position:absolute;direction:ltr;z-index:99997;opacity:0;visibility:hidden;transition:opacity .25s,visibility 0s linear .25s;box-sizing:border-box}.fancybox-show-caption .fancybox-caption-wrap,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;visibility:visible;transition:opacity .25s,visibility 0s}.fancybox-infobar{top:0;left:0;font-size:13px;padding:0 10px;height:44px;min-width:44px;line-height:44px;color:#ccc;text-align:center;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-font-smoothing:subpixel-antialiased;mix-blend-mode:exclusion}.fancybox-toolbar{top:0;right:0;margin:0;padding:0}.fancybox-stage{overflow:hidden;direction:ltr;z-index:99994;-webkit-transform:translateZ(0)}.fancybox-is-closing .fancybox-stage{overflow:visible}.fancybox-slide{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:auto;outline:none;white-space:normal;box-sizing:border-box;text-align:center;z-index:99994;-webkit-overflow-scrolling:touch;display:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform}.fancybox-slide:before{content:"";display:inline-block;vertical-align:middle;height:100%;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:visible}.fancybox-slide--image:before{display:none}.fancybox-slide--video .fancybox-content,.fancybox-slide--video iframe{background:#000}.fancybox-slide--map .fancybox-content,.fancybox-slide--map iframe{background:#e5e3df}.fancybox-slide--next{z-index:99995}.fancybox-slide>*{display:inline-block;position:relative;padding:24px;margin:44px 0;border-width:0;vertical-align:middle;text-align:left;background-color:#fff;overflow:auto;box-sizing:border-box}.fancybox-slide>base,.fancybox-slide>link,.fancybox-slide>meta,.fancybox-slide>script,.fancybox-slide>style,.fancybox-slide>title{display:none}.fancybox-slide .fancybox-image-wrap{position:absolute;top:0;left:0;margin:0;padding:0;border:0;z-index:99995;background:transparent;cursor:default;overflow:visible;-webkit-transform-origin:top left;transform-origin:top left;background-size:100% 100%;background-repeat:no-repeat;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform}.fancybox-can-zoomOut .fancybox-image-wrap{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-image-wrap{cursor:zoom-in}.fancybox-can-drag .fancybox-image-wrap{cursor:-webkit-grab;cursor:grab}.fancybox-is-dragging .fancybox-image-wrap{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-image,.fancybox-spaceball{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;border:0;max-width:none;max-height:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content{padding:0;width:80%;height:80%;max-width:calc(100% - 100px);max-height:calc(100% - 88px);overflow:visible;background:#fff}.fancybox-iframe{display:block;padding:0;border:0;height:100%}.fancybox-error,.fancybox-iframe{margin:0;width:100%;background:#fff}.fancybox-error{padding:40px;max-width:380px;cursor:default}.fancybox-error p{margin:0;padding:0;color:#444;font-size:16px;line-height:20px}.fancybox-button{box-sizing:border-box;display:inline-block;vertical-align:top;width:44px;height:44px;margin:0;padding:10px;border:0;border-radius:0;background:rgba(30,30,30,.6);transition:color .3s ease;cursor:pointer;outline:none}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:focus,.fancybox-button:hover{color:#fff}.fancybox-button[disabled]{color:#ccc;cursor:default;opacity:.6}.fancybox-button svg{display:block;position:relative;overflow:visible;shape-rendering:geometricPrecision}.fancybox-button svg path{fill:currentColor;stroke:currentColor;stroke-linejoin:round;stroke-width:3}.fancybox-button--share svg path{stroke-width:1}.fancybox-button--pause svg path:nth-child(1),.fancybox-button--play svg path:nth-child(2){display:none}.fancybox-button--zoom svg path{fill:transparent}.fancybox-navigation{display:none}.fancybox-show-nav .fancybox-navigation{display:block}.fancybox-navigation button{position:absolute;top:50%;margin:-50px 0 0;z-index:99997;background:transparent;width:60px;height:100px;padding:17px}.fancybox-navigation button:before{content:"";position:absolute;top:30px;right:10px;width:40px;height:40px;background:rgba(30,30,30,.6)}.fancybox-navigation .fancybox-button--arrow_left{left:0}.fancybox-navigation .fancybox-button--arrow_right{right:0}.fancybox-close-small{position:absolute;top:0;right:0;width:40px;height:40px;padding:0;margin:0;border:0;border-radius:0;background:transparent;z-index:10;cursor:pointer}.fancybox-close-small:after{content:"×";position:absolute;top:5px;right:5px;width:30px;height:30px;font:22px/30px Arial,Helvetica Neue,Helvetica,sans-serif;color:#888;font-weight:300;text-align:center;border-radius:50%;border-width:0;background-color:transparent;transition:background-color .25s;box-sizing:border-box;z-index:2}.fancybox-close-small:focus{outline:none}.fancybox-close-small:focus:after{outline:1px dotted #888}.fancybox-close-small:hover:after{color:#555;background:#eee}.fancybox-slide--iframe .fancybox-close-small,.fancybox-slide--image .fancybox-close-small{top:0;right:-40px}.fancybox-slide--iframe .fancybox-close-small:after,.fancybox-slide--image .fancybox-close-small:after{font-size:35px;color:#aaa}.fancybox-slide--iframe .fancybox-close-small:hover:after,.fancybox-slide--image .fancybox-close-small:hover:after{color:#fff;background:transparent}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-drag .fancybox-close-small{display:none}.fancybox-caption-wrap{bottom:0;left:0;right:0;padding:60px 2vw 0;background:linear-gradient(180deg,transparent 0,rgba(0,0,0,.1) 20%,rgba(0,0,0,.2) 40%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.8));pointer-events:none}.fancybox-caption{padding:30px 0;border-top:1px solid hsla(0,0%,100%,.4);font-size:14px;color:#fff;line-height:20px;-webkit-text-size-adjust:none}.fancybox-caption a,.fancybox-caption button,.fancybox-caption select{pointer-events:all;position:relative}.fancybox-caption a{color:#fff;text-decoration:underline}.fancybox-slide>.fancybox-loading{border:6px solid hsla(0,0%,39%,.4);border-top:6px solid hsla(0,0%,100%,.6);border-radius:100%;height:50px;width:50px;-webkit-animation:a .8s infinite linear;animation:a .8s infinite linear;background:transparent;position:absolute;top:50%;left:50%;margin-top:-30px;margin-left:-30px;z-index:99999}@-webkit-keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes a{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);opacity:0}.fancybox-fx-slide.fancybox-slide--current{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--next{-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5);opacity:0}.fancybox-fx-zoom-in-out.fancybox-slide--current{-webkit-transform:scaleX(1);transform:scaleX(1);opacity:1}.fancybox-fx-rotate.fancybox-slide--previous{-webkit-transform:rotate(-1turn);transform:rotate(-1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--next{-webkit-transform:rotate(1turn);transform:rotate(1turn);opacity:0}.fancybox-fx-rotate.fancybox-slide--current{-webkit-transform:rotate(0deg);transform:rotate(0deg);opacity:1}.fancybox-fx-circular.fancybox-slide--previous{-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--next{-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0);opacity:0}.fancybox-fx-circular.fancybox-slide--current{-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0);opacity:1}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}.fancybox-share{padding:30px;border-radius:3px;background:#f4f4f4;max-width:90%;text-align:center}.fancybox-share h1{color:#222;margin:0 0 20px;font-size:35px;font-weight:700}.fancybox-share p{margin:0;padding:0}p.fancybox-share__links{margin-right:-10px}.fancybox-share__button{display:inline-block;text-decoration:none;margin:0 10px 10px 0;padding:0 15px;min-width:130px;border:0;border-radius:3px;background:#fff;white-space:nowrap;font-size:14px;font-weight:700;line-height:40px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff;transition:all .2s}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{position:relative;top:-1px;width:25px;height:25px;margin-right:7px;vertical-align:middle}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{box-sizing:border-box;width:100%;margin:10px 0 0;padding:10px 15px;background:transparent;color:#5d5b5b;font-size:14px;outline:none;border:0;border-bottom:2px solid #d7d7d7}.fancybox-thumbs{display:none;position:absolute;top:0;bottom:0;right:0;width:212px;margin:0;padding:2px 2px 4px;background:#fff;-webkit-tap-highlight-color:transparent;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;box-sizing:border-box;z-index:99995}.fancybox-thumbs-x{overflow-y:hidden;overflow-x:auto}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs>ul{list-style:none;position:absolute;position:relative;width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;font-size:0;white-space:nowrap}.fancybox-thumbs-x>ul{overflow:hidden}.fancybox-thumbs-y>ul::-webkit-scrollbar{width:7px}.fancybox-thumbs-y>ul::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y>ul::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs>ul>li{float:left;overflow:hidden;padding:0;margin:2px;width:100px;height:75px;max-width:calc(50% - 4px);max-height:calc(100% - 8px);position:relative;cursor:pointer;outline:none;-webkit-tap-highlight-color:transparent;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box}li.fancybox-thumbs-loading{background:rgba(0,0,0,.1)}.fancybox-thumbs>ul>li>img{position:absolute;top:0;left:0;max-width:none;max-height:none;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-thumbs>ul>li:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:4px solid #4ea7f9;z-index:99991;opacity:0;transition:all .2s cubic-bezier(.25,.46,.45,.94)}.fancybox-thumbs>ul>li.fancybox-thumbs-active:before{opacity:1}@media (max-width:800px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs>ul>li{max-width:calc(100% - 10px)}} \ No newline at end of file diff --git a/apiferia/src/assets/css/magnific-popup.css b/apiferia/src/assets/css/magnific-popup.css new file mode 100644 index 00000000..3e329ed0 --- /dev/null +++ b/apiferia/src/assets/css/magnific-popup.css @@ -0,0 +1,443 @@ +/* Magnific Popup CSS */ +.mfp-bg { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1042; + overflow: hidden; + position: fixed; + background: #3f3f3f; + opacity: 0.8; + filter: alpha(opacity=80); } + +.mfp-wrap { + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1043; + position: fixed; + outline: none !important; + -webkit-backface-visibility: hidden; } + +.mfp-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + left: 0; + top: 0; + padding: 0 8px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + +.mfp-container:before { + content: ''; + display: inline-block; + height: 100%; + vertical-align: middle; } + +.mfp-align-top .mfp-container:before { + display: none; } + +.mfp-content { + position: relative; + display: inline-block; + vertical-align: middle; + margin: 0 auto; + text-align: left; + z-index: 1045; } + +.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content { + width: 100%; + cursor: auto; } + +.mfp-ajax-cur { + cursor: progress; } + +.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close { + cursor: pointer; + /* cursor: -moz-zoom-out; + cursor: -webkit-zoom-out; + cursor: zoom-out; */ + } + +.mfp-zoom { + cursor: pointer; + cursor: -webkit-zoom-in; + cursor: -moz-zoom-in; + cursor: zoom-in; } + +.mfp-auto-cursor .mfp-content { + cursor: auto; } + +.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter { + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; } + +.mfp-loading.mfp-figure { + display: none; } + +.mfp-hide { + display: none !important; } + +.mfp-preloader { + color: #cccccc; + position: absolute; + top: 50%; + width: auto; + text-align: center; + margin-top: -0.8em; + left: 8px; + right: 8px; + z-index: 1044; } + .mfp-preloader a { + color: #cccccc; } + .mfp-preloader a:hover { + color: white; } + +.mfp-s-ready .mfp-preloader { + display: none; } + +.mfp-s-error .mfp-content { + display: none; } + +button.mfp-close, button.mfp-arrow { + overflow: visible; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + display: block; + outline: none; + padding: 0; + z-index: 1046; + -webkit-box-shadow: none; + box-shadow: none; } +button::-moz-focus-inner { + padding: 0; + border: 0; } + +.mfp-close { + width: 44px; + height: 44px; + line-height: 44px; + position: absolute; + right: 0; + top: 0; + text-decoration: none; + text-align: center; + opacity: 0.65; + padding: 0 0 18px 10px; + color: white; + font-style: normal; + font-size: 28px; + font-family: Arial, Baskerville, monospace; } + .mfp-close:hover, .mfp-close:focus { + opacity: 1; } + .mfp-close:active { + top: 1px; } + +.mfp-close-btn-in .mfp-close { + color: #333333; } + +.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close { + color: white; + background: transparent; + right: -6px; + text-align: right; + padding-right: 6px; + width: 100%; + border: unset; +} + +.mfp-counter { + position: absolute; + top: 0; + right: 0; + color: #cccccc; + font-size: 12px; + line-height: 18px; } + +.mfp-arrow { + position: absolute; + opacity: 0.65; + margin: 0; + top: 50%; + margin-top: -55px; + padding: 0; + width: 90px; + height: 110px; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } + .mfp-arrow:active { + margin-top: -54px; } + .mfp-arrow:hover, .mfp-arrow:focus { + opacity: 1; } + .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a { + content: ''; + display: block; + width: 0; + height: 0; + position: absolute; + left: 0; + top: 0; + margin-top: 35px; + margin-left: 35px; + border: medium inset transparent; } + .mfp-arrow:after, .mfp-arrow .mfp-a { + border-top-width: 13px; + border-bottom-width: 13px; + top: 8px; } + .mfp-arrow:before, .mfp-arrow .mfp-b { + border-top-width: 21px; + border-bottom-width: 21px; } + +.mfp-arrow-left { + left: 0; } + .mfp-arrow-left:after, .mfp-arrow-left .mfp-a { + border-right: 17px solid white; + margin-left: 31px; } + .mfp-arrow-left:before, .mfp-arrow-left .mfp-b { + margin-left: 25px; + border-right: 27px solid #3f3f3f; } + +.mfp-arrow-right { + right: 0; } + .mfp-arrow-right:after, .mfp-arrow-right .mfp-a { + border-left: 17px solid white; + margin-left: 39px; } + .mfp-arrow-right:before, .mfp-arrow-right .mfp-b { + border-left: 27px solid #3f3f3f; } + +.mfp-iframe-holder { + padding-top: 40px; + padding-bottom: 40px; } + .mfp-iframe-holder .mfp-content { + line-height: 0; + width: 100%; + max-width: 900px; } + .mfp-iframe-holder .mfp-close { + top: -40px; } + +.mfp-iframe-scaler { + width: 100%; + height: 0; + overflow: hidden; + padding-top: 56.25%; } + .mfp-iframe-scaler iframe { + position: absolute; + display: block; + top: 0; + left: 0; + width: 100%; + height: 100%; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: black; } +.mfp-arrow.mfp-arrow-left.mfp-prevent-close, +.mfp-arrow.mfp-arrow-right.mfp-prevent-close{ + background: transparent; + border: unset; +} +/* Main image in popup */ +img.mfp-img { + /* cursor: w-resize; */ + width: auto; + max-width: 100%; + height: auto; + display: block; + line-height: 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 40px 0 40px; + margin: 0 auto; } + +/* The shadow behind the image */ +.mfp-figure { + line-height: 0; } + .mfp-figure:after { + content: ''; + position: absolute; + left: 0; + top: 40px; + bottom: 40px; + display: block; + right: 0; + width: auto; + height: auto; + z-index: -1; + box-shadow: 0 0 8px rgba(0, 0, 0, 0.6); + background: #444444; } + .mfp-figure small { + color: #bdbdbd; + display: block; + font-size: 12px; + line-height: 14px; } + +.mfp-bottom-bar { + margin-top: -36px; + position: absolute; + top: 100%; + left: 0; + width: 100%; + cursor: auto; } + +.mfp-title { + text-align: left; + line-height: 18px; + color: #f3f3f3; + word-wrap: break-word; + padding-right: 36px; } + +.mfp-image-holder .mfp-content { + max-width: 100%; } + +/* .mfp-gallery .mfp-image-holder .mfp-figure { + cursor: pointer; } */ + +@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) { + /** + * Remove all paddings around the image on small screen + */ + .mfp-img-mobile .mfp-image-holder { + padding-left: 0; + padding-right: 0; } + .mfp-img-mobile img.mfp-img { + padding: 0; } + .mfp-img-mobile .mfp-figure { + /* The shadow behind the image */ } + .mfp-img-mobile .mfp-figure:after { + top: 0; + bottom: 0; } + .mfp-img-mobile .mfp-figure small { + display: inline; + margin-left: 5px; } + .mfp-img-mobile .mfp-bottom-bar { + background: rgba(0, 0, 0, 0.6); + bottom: 0; + margin: 0; + top: auto; + padding: 3px 5px; + position: fixed; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } + .mfp-img-mobile .mfp-bottom-bar:empty { + padding: 0; } + .mfp-img-mobile .mfp-counter { + right: 5px; + top: 3px; } + .mfp-img-mobile .mfp-close { + top: 0; + right: 0; + width: 35px; + height: 35px; + line-height: 35px; + background: rgba(0, 0, 0, 0.6); + position: fixed; + text-align: center; + padding: 0; } } + +@media all and (max-width: 900px) { + .mfp-arrow { + -webkit-transform: scale(0.75); + transform: scale(0.75); } + .mfp-arrow-left { + -webkit-transform-origin: 0; + transform-origin: 0; } + .mfp-arrow-right { + -webkit-transform-origin: 100%; + transform-origin: 100%; } + .mfp-container { + padding-left: 6px; + padding-right: 6px; } } + +.mfp-ie7 .mfp-img { + padding: 0; } +.mfp-ie7 .mfp-bottom-bar { + width: 600px; + left: 50%; + margin-left: -300px; + margin-top: 5px; + padding-bottom: 5px; } +.mfp-ie7 .mfp-container { + padding: 0; } +.mfp-ie7 .mfp-content { + padding-top: 44px; } +.mfp-ie7 .mfp-close { + top: 0; + right: 0; + padding-top: 0; } +.my-mfp-slide-bottom .mfp-content { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + + -webkit-transition: all 0.7s ease-out; + -moz-transition: all 0.7s ease-out; + -o-transition: all 0.7s ease-out; + -ms-transition: all 0.7s ease-out; + transition: all 0.7s ease-out; + + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -ms-transform: scale(0.8); + -o-transform: scale(0.8); + transform: scale(0.8); +} + +/* animate in */ +.my-mfp-slide-bottom.mfp-ready .mfp-content { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; + filter: alpha(opacity=100); + opacity: 1; + + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} + +/* animate out */ +.my-mfp-slide-bottom.mfp-removing .mfp-content { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + + -webkit-transform: scale(0.8); + -moz-transform: scale(0.8); + -ms-transform: scale(0.8); + -o-transform: scale(0.8); + transform: scale(0.8); +} + +/* Dark overlay, start state */ +.my-mfp-slide-bottom.mfp-bg { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; + + -webkit-transition: opacity 0.3s ease-out; + -moz-transition: opacity 0.3s ease-out; + -o-transition: opacity 0.3s ease-out; + -ms-transition: opacity 0.3s ease-out; + transition: opacity 0.3s ease-out; +} + +/* animate in */ +.my-mfp-slide-bottom.mfp-ready.mfp-bg { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; + filter: alpha(opacity=80); + opacity: 0.8; +} + +/* animate out */ +.my-mfp-slide-bottom.mfp-removing.mfp-bg { + -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; + filter: alpha(opacity=0); + opacity: 0; +} \ No newline at end of file diff --git a/apiferia/src/assets/css/nice-select.css b/apiferia/src/assets/css/nice-select.css new file mode 100644 index 00000000..81c30d15 --- /dev/null +++ b/apiferia/src/assets/css/nice-select.css @@ -0,0 +1,223 @@ +.nice-select { + -webkit-tap-highlight-color: transparent; + background-color: #fff; + border: 1px solid #E5E5EA !important; + border-radius: 14px; + padding: 14px 17px; + box-sizing: border-box; + clear: both; + cursor: pointer; + display: block; + /* float: left; */ + font-family: var(--paraFont); + font-size: 16px; + font-weight: 400; + /* text-transform: capitalize; */ + outline: none; + position: relative; + transition: all linear .2s; + user-select: none; + white-space: nowrap; + width: 100%; + } + + .nice-select:active, + .nice-select.open, + .nice-select:focus { + border-color: #999; + } + + .nice-select:after { + border-bottom: 1.7px solid #3A3A3C; + border-right: 1.7px solid #3A3A3C; + content: ''; + height: 8px; + width: 8px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 24px; + top: 50%; + -webkit-transform-origin: 66% 66%; + -ms-transform-origin: 66% 66%; + transform-origin: 66% 66%; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; + } + + .nice-select.open:after { + -webkit-transform: rotate(-135deg); + -ms-transform: rotate(-135deg); + transform: rotate(-135deg); + -moz-transform: rotate(-135deg); + -o-transform: rotate(-135deg); + } + + .nice-select.open .list { + opacity: 1; + z-index: 10; + pointer-events: auto; + -webkit-transform: scale(1) translateY(0); + -ms-transform: scale(1) translateY(0); + transform: scale(1) translateY(0); + width: 100%; + -moz-transform: scale(1) translateY(0); + -o-transform: scale(1) translateY(0); + } + + .nice-select.disabled { + border-color: #ededed; + color: #999; + pointer-events: none; + } + + .nice-select.disabled:after { + border-color: #cccccc; + } + + .nice-select.wide { + width: 100%; + } + + .nice-select.wide .list { + left: 0 !important; + right: 0 !important; + } + + .nice-select.right { + float: right; + } + + .nice-select.right .list { + left: auto; + right: 0; + } + + .nice-select.small { + font-size: 12px; + height: 36px; + line-height: 34px; + } + + .nice-select.small:after { + height: 4px; + width: 4px; + } + + .nice-select.small .option { + line-height: 34px; + min-height: 34px; + } + + .nice-select .list { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11); + box-sizing: border-box; + margin-top: 4px; + opacity: 0; + overflow: hidden; + padding: 0; + pointer-events: none; + position: absolute; + top: 100%; + left: 0; + -webkit-transform-origin: 50% 0; + -ms-transform-origin: 50% 0; + transform-origin: 50% 0; + -webkit-transform: scale(0.75) translateY(-21px); + -ms-transform: scale(0.75) translateY(-21px); + transform: scale(0.75) translateY(-21px); + -webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out; + z-index: 9; + width: 100%; + font-size: 14px; + max-height: 155px; + overflow: auto; + } + + .nice-select .list.style { + max-height: unset; + } + + .nice-select .list::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgb(0 0 0 / 30%); + background-color: #f5f5f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); +} +.nice-select .list::-webkit-scrollbar-thumb { + background-color: #a7a7a7; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); +} + + .nice-select .list::-webkit-scrollbar { + width: 6px; + height: 4px; + background-color: #f5f5f5; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); + -moz-transform: translate3d(0,0,0); +} + + .nice-select .list:hover .option:not(:hover) { + background-color: transparent !important; + } + + .nice-select .option { + cursor: pointer; + font-weight: 400; + line-height: 40px; + list-style: none; + min-height: 40px; + outline: none; + padding-left: 18px; + padding-right: 29px; + text-align: left; + -webkit-transition: all 0.2s; + transition: all 0.2s; + } + + .nice-select .option:hover, + .nice-select .option.focus, + .nice-select .option.selected.focus { + background-color: #f6f6f6; + } + + .nice-select .option.selected { + font-weight: 600; + color: #FF7101; + } + + .nice-select .option.disabled { + background-color: transparent; + color: #999; + cursor: default; + } + + .no-csspointerevents .nice-select .list { + display: none; + } + + .no-csspointerevents .nice-select.open .list { + display: block; + } \ No newline at end of file diff --git a/apiferia/src/assets/css/styles.css b/apiferia/src/assets/css/styles.css new file mode 100644 index 00000000..e257dd74 --- /dev/null +++ b/apiferia/src/assets/css/styles.css @@ -0,0 +1,19508 @@ +@charset "UTF-8"; +/** + * Name: AutoDeal - Car Dealer, Rental & Listing HTML Template + * Version: 1.0.3 + * Author: Themesflat + * Author URI: http://www.themesflat.com +*/ +@import "animate.css"; +@import "jquery.fancybox.min.css"; +@import "magnific-popup.css"; +@import "swiper-bundle.min.css"; +@import "nice-select.css"; +@import "../../assets/fonts/style.css"; +@import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&family=Outfit:wght@100..900&display=swap"); +@import "bootstrap.css"; + +/* Header +-------------------------------------------------------------- */ +.header-account { + gap: 30px; +} + +.header-account ul li { + margin-right: 3px; + font-weight: 400; + font-size: 16px; +} + +.header-account ul li:first-child { + margin-right: 9px; + margin-left: 6px; +} + +.header-account ul li a:hover { + color: #FF7101; +} + +.header-account .flat-bt-top .sc-button { + background-color: transparent; + border: 1px solid #FF7101; + padding: 14px 27px; + border-radius: 14px; +} + +.header-account .flat-bt-top .sc-button span, +.header-account .flat-bt-top .sc-button svg { + color: #FF7101; +} + +.header-account .flat-bt-top .sc-button svg { + margin-right: 9px; +} + +.header-account .header-search-icon, +.header-account .header-favorite { + position: relative; +} + +.header-account .header-search-icon::after, +.header-account .header-favorite::after { + content: ""; + position: absolute; + height: 18px; + width: 1px; + background-color: #EDEDED; + left: 37px; +} + +.header-account .search-mobie { + position: relative; +} + +.header-account .search-mobie .header-search-icon .icon-autodeal-plus { + display: none; + rotate: 45deg; +} + +.header-account .search-mobie .header-search-icon.opened .icon-autodeal-search { + display: none; +} + +.header-account .search-mobie .header-search-icon.opened .icon-autodeal-plus { + display: block; +} + +.header-account .search-mobie>.wd-find-select { + position: absolute; + width: 250px; + right: 0; + margin-top: 39px; + display: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.header-account .search-mobie>.wd-find-select.opened { + display: block; +} + +.header-account .search-mobie>.wd-find-select i { + position: absolute; + top: 50%; + right: 15px; + transform: translateY(-50%); +} + +.main-header { + z-index: 99; + width: 100%; + position: relative; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + background-color: #FFFFFF; +} + +.main-header.style2 { + position: absolute; + background-color: transparent; + box-shadow: unset; + border-bottom: 1px solid rgba(255, 255, 255, 0.2); +} + +.main-header.style2 .main-menu .navigation>li>a { + color: #FFFFFF; +} + +.main-header.style2 .header-account { + color: #FFFFFF; +} + +.main-header.style2 .header-account .header-search-icon::after, +.main-header.style2 .header-account .header-favorite::after { + background-color: rgba(255, 255, 255, 0.2); +} + +.main-header.style2 .header-account .flat-bt-top .sc-button { + border: 1px solid #FFFFFF; +} + +.main-header.style2 .header-account .flat-bt-top .sc-button span, +.main-header.style2 .header-account .flat-bt-top .sc-button svg { + color: #FFFFFF; +} + +.main-header.style3 { + margin: 10px 10px 0px 10px; + border-radius: 16px; + position: absolute; + width: auto; + left: 0; + right: 0; +} + +.main-header.style3 .mobile-button { + top: 45%; + right: 3px; +} + +#showlogo { + display: none; +} + +/* Header top */ +.tf-top-bar { + padding: 13px 0px; +} + +.tf-top-bar .tf-top-bar-left ul { + gap: 33px; +} + +.tf-top-bar .tf-top-bar-left ul li { + gap: 8px; +} + +.tf-top-bar .tf-top-bar-right { + gap: 15px; +} + +.tf-top-bar .tf-top-bar-right ul { + gap: 20px; +} + +.tf-top-bar .tf-top-bar-right ul li a { + font-size: 14px; + display: flex; +} + +.tf-top-bar.style-1 { + background-color: #24272C; +} + +.tf-top-bar.style-1 .tf-top-bar-left ul li .icon { + color: #FFFFFF; +} + +.tf-top-bar.style-1 .tf-top-bar-right ul li a { + color: #FFFFFF; +} + +.tf-top-bar.style-2 { + border-bottom: 1px solid #EDEDED; +} + +.header-lower.is-fixed { + -webkit-animation: 900ms ease-in-out 0s normal none 1 running fadeInDown; + animation: 900ms ease-in-out 0s normal none 1 running fadeInDown; + z-index: 999; + opacity: 0; + position: fixed; + top: -150px; + left: 0; + width: 100%; +} + +.main-header.style2 .is-fixed.is-small { + background-color: #24272C !important; +} + +.header-lower.is-fixed.is-small { + top: 0px; + opacity: 1; + visibility: visible; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + background-color: #FFFFFF; +} + +.main-header .header-upper { + position: relative; +} + +.main-header .main-box { + position: relative; + padding: 0px 0px; + left: 0px; + top: 0px; + width: 100%; + background: none; + -webkit-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; + -moz-transition: all 300ms ease; + transition: all 300ms ease; +} + +.main-header .main-box .outer-container { + position: relative; +} + +.main-header .logo-box { + position: relative; + z-index: 10; +} + +.main-header .logo-box .logo img { + display: inline-block; + max-width: 100%; + -webkit-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; + -moz-transition: all 300ms ease; + transition: all 300ms ease; +} + +.main-header .logo-box .logo { + position: relative; +} + +.main-header .header-lower { + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; +} + +.main-header .header-lower .nav-outer { + position: relative; +} + +.main-header .header-upper .logo-box { + position: relative; + padding: 10px 0px 10px; +} + +.main-header .header-upper .logo-box .logo { + position: relative; +} + +/* Main Menu */ +.main-header .main-menu { + position: relative; + margin-left: 151px; + -webkit-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; + -moz-transition: all 300ms ease; + transition: all 300ms ease; +} + +.main-header .main-menu .navbar-collapse { + padding: 0px; + display: block; +} + +.main-header .header-lower .main-menu .navigation { + position: relative; +} + +.main-header .main-menu .navigation>li { + position: relative; + display: inline-block; + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; + margin-right: 27px; +} + +.main-header .sticky-header .nav-outer .options-box { + margin-top: 40px; +} + +/*Sticky Header*/ +.main-header .sticky-header { + position: fixed; + opacity: 0; + visibility: hidden; + left: 0px; + top: 0px; + width: 100%; + padding: 0px 0px; + z-index: 0; + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; + box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); +} + +.main-header .sticky-header .mobile-nav-toggler { + display: none; + cursor: pointer; +} + +.main-header .sticky-header .logo { + position: relative; + padding: 7px 0px; +} + +.main-header.fixed-header .sticky-header { + z-index: 999; + opacity: 1; + visibility: visible; + -ms-animation-name: fadeInDown; + -moz-animation-name: fadeInDown; + -op-animation-name: fadeInDown; + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; + -ms-animation-duration: 500ms; + -moz-animation-duration: 500ms; + -op-animation-duration: 500ms; + -webkit-animation-duration: 500ms; + animation-duration: 500ms; + -ms-animation-timing-function: linear; + -moz-animation-timing-function: linear; + -op-animation-timing-function: linear; + -webkit-animation-timing-function: linear; + animation-timing-function: linear; + -ms-animation-iteration-count: 1; + -moz-animation-iteration-count: 1; + -op-animation-iteration-count: 1; + -webkit-animation-iteration-count: 1; + animation-iteration-count: 1; +} + +.main-header .main-menu .navigation>li>a { + position: relative; + display: block; + text-align: center; + line-height: 24px; + font-weight: 500; + padding: 37px 0px; + letter-spacing: 0px; + color: #24272C; + font-size: 16px; + text-transform: capitalize; + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; +} + +.main-header .main-menu .navigation>li:last-child { + margin-right: 0; +} + +.main-header .main-menu .navigation>li:last-child>a { + padding-right: 0px; +} + +.main-header .sticky-header .main-menu .navigation>li { + position: relative; +} + +.main-header .sticky-header .main-menu .navigation>li:last-child { + margin-right: 0; +} + +.main-header .main-menu .navigation>li:last-child ul { + right: 0px; +} + +.main-header .sticky-header .main-menu .navigation>li>a:after { + top: 22px; +} + +.main-header .sticky-header .main-menu .navigation>li>a>span { + top: 10px; +} + +.main-header .main-menu .navigation>li:hover>a, +.main-header .main-menu .navigation>li.current>a { + opacity: 1; + color: #FF7101; +} + +.main-header .main-menu .navigation>li>ul { + position: absolute; + width: 280px; + z-index: 1; + border-top: 2px solid #FF7101; + -webkit-transform: scaleY(0); + -ms-transform: scaleY(0); + -o-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: top; + -ms-transform-origin: top; + -o-transform-origin: top; + transform-origin: top; + opacity: 0; + visibility: hidden; + visibility: hidden; + transition: all 300ms ease; + -moz-transition: all 300ms ease; + -webkit-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; + border-radius: 0px 0px 16px 16px; + background-color: #FFFFFF; + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); +} + +.main-header .main-menu .navigation>li>ul.from-right { + left: auto; + right: 0px; +} + +.main-header .main-menu .navigation>li>ul>li { + position: relative; + width: 100%; + opacity: 0; + text-align: left; + transform: translateY(11px); + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; +} + +.main-header .main-menu .navigation>li>ul>li:last-child { + margin-bottom: 0; +} + +.main-header .main-menu .navigation>li:hover>ul>li { + opacity: 1; + transform: translateY(0px); +} + +.main-header .main-menu .navigation>li>ul>li:last-child { + border-bottom: none; +} + +.main-header .main-menu .navigation>li>ul>li>a { + position: relative; + display: block; + line-height: 22.4px; + font-weight: 500; + font-size: 16px; + text-transform: capitalize; + color: #24272C; + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; + padding: 16px 24px; +} + +.main-header .main-menu .navigation>li>ul>li:hover>a { + color: #FF7101; + background-color: rgba(255, 113, 1, 0.06); +} + +.main-header .main-menu .navigation>li>ul>li.dropdown2>a:after { + color: #24272C; + font-family: "Font Awesome 5 Pro"; + content: "\f105"; + position: absolute; + right: 13px; + top: 1px; + width: 10px; + height: 20px; + display: block; + line-height: 50px; + font-size: 16px; + font-weight: normal; + text-align: center; + z-index: 5; +} + +.main-header .main-menu .navigation>li>ul>li.dropdown2:hover>a:after { + color: #FF7101; +} + +.main-header .main-menu .navigation>li>ul>li>ul { + position: absolute; + left: 100%; + top: 0px; + width: 280px; + border-top: 2px solid #FF7101; + -webkit-transform: scaleY(0); + -ms-transform: scaleY(0); + -o-transform: scaleY(0); + transform: scaleY(0); + -webkit-transform-origin: top; + -ms-transform-origin: top; + -o-transform-origin: top; + transform-origin: top; + opacity: 0; + visibility: hidden; + visibility: hidden; + transition: all 300ms ease; + -moz-transition: all 300ms ease; + -webkit-transition: all 300ms ease; + -ms-transition: all 300ms ease; + -o-transition: all 300ms ease; + border-radius: 0px 0px 16px 16px; + background-color: #FFFFFF; + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); +} + +.main-header .main-menu .navigation>li>ul>li>ul.from-right { + left: auto; + right: 0px; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li { + position: relative; + width: 100%; + text-align: left; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + opacity: 0; + transform: translateY(-8px); + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li:last-child { + margin-bottom: 0; +} + +.main-header .main-menu .navigation>li>ul>li.dropdown2:hover>ul>li { + opacity: 1; + transform: translateY(0px); +} + +.main-header .main-menu .navigation>li>ul>li>ul>li:last-child { + border-bottom: none; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li>a { + position: relative; + display: block; + line-height: 22.4px; + font-weight: 500; + font-size: 16px; + text-transform: capitalize; + color: #24272C; + padding: 16px 24px; + transition: all 500ms ease; + -moz-transition: all 500ms ease; + -webkit-transition: all 500ms ease; + -ms-transition: all 500ms ease; + -o-transition: all 500ms ease; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li>a:hover::before { + opacity: 1; +} + +.main-header .main-menu .navigation>li>ul>.current>a { + color: #FF7101; +} + +.main-header .main-menu .navigation>li>ul>li>ul>.current>a { + color: #FF7101; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li:hover>a { + color: #FF7101; + background-color: #FFFFFF; +} + +.main-header .main-menu .navigation>li>ul>li>ul>li:hover>a { + color: #FF7101; + background-color: rgba(255, 113, 1, 0.06); +} + +.main-header .main-menu .navigation>li.dropdown2:hover>ul { + -webkit-transform: scaleY(1); + -ms-transform: scaleY(1); + -o-transform: scaleY(1); + transform: scaleY(1); + opacity: 1; + visibility: visible; +} + +.main-header .main-menu .navigation li>ul>li.dropdown2:hover>ul { + -webkit-transform: scaleY(1); + -ms-transform: scaleY(1); + -o-transform: scaleY(1); + transform: scaleY(1); + opacity: 1; + visibility: visible; +} + +.main-header .main-menu .navigation>li.dropdown2>a::after { + content: "\f078"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + font-size: 11px; + margin-left: 8px; + vertical-align: bottom; +} + +.main-header .main-menu .navbar-collapse>ul li.dropdown2 .dropdown2-btn { + position: absolute; + right: 10px; + top: 6px; + width: 30px; + height: 30px; + text-align: center; + color: #FFFFFF; + line-height: 28px; + border: 1px solid var(--white-color-opicity-two); + background-size: 20px; + cursor: pointer; + z-index: 5; + display: none; +} + +/*** + +==================================================================== + Mobile Menu +==================================================================== + +***/ +.mobile-menu { + position: fixed; + left: 0; + top: 0; + width: 300px; + padding-right: 30px; + max-width: 100%; + height: 100%; + visibility: hidden; + z-index: 999999; +} + +.mobile-menu .nav-logo { + position: relative; + background: #FFFFFF; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.08); + padding: 24px 20px; +} + +.mobile-menu .nav-logo img { + max-width: 200px; +} + +.mobile-menu .bottom-canvas { + padding: 30px 20px 30px; +} + +.mobile-menu-visible { + overflow: hidden; +} + +.mobile-menu-visible .mobile-menu { + visibility: visible; +} + +.mobile-menu-visible .mobile-menu .menu-backdrop { + opacity: 1; + visibility: visible; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.mobile-menu-visible .mobile-menu .menu-box { + left: 0px; + -webkit-overflow-scrolling: touch; + -webkit-transition-duration: 0.5s; + transition-duration: 0.5s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +.mobile-menu .menu-backdrop { + position: fixed; + right: 0; + top: 0; + width: 100%; + height: 100%; + z-index: 1; + background: rgba(0, 0, 0, 0.5); + transition: all 0.3s ease 0s; + visibility: hidden; + opacity: 0; +} + +.mobile-menu .menu-box { + position: absolute; + left: -300px; + top: 0px; + width: 100%; + height: 100%; + max-height: 100%; + overflow-y: auto; + background-color: #FFFFFF; + z-index: 5; + border-radius: 0px; + -webkit-overflow-scrolling: touch; + -webkit-transition-duration: 0.5s; + transition-duration: 0.5s; + -webkit-transition-timing-function: ease; + transition-timing-function: ease; +} + +.close-btn { + position: fixed; + right: 16px; + top: 25px; + line-height: 30px; + width: 30px; + text-align: center; + font-size: 16px; + color: #FFFFFF; + cursor: pointer; + transition: all 0.3s ease; + z-index: 9999999999; + opacity: 0; + visibility: hidden; +} + +.close-btn::before { + content: "\f00d"; + font-family: "Font Awesome 5 Pro"; + font-size: 33px; + font-weight: 100; +} + +.mobile-menu-visible .close-btn { + visibility: visible; + opacity: 1; +} + +.mobile-menu .close-btn:hover { + opacity: 0.5; +} + +.mobile-menu .navigation { + position: relative; + display: block; + width: 100%; +} + +.mobile-menu .navigation li { + position: relative; + display: block; +} + +.mobile-menu .navigation li { + position: relative; + display: block; +} + +.mobile-menu .navigation li>ul>li:last-child { + border-bottom: none; +} + +.mobile-menu .navigation li.dropdown2 .dropdown2-btn { + position: absolute; + right: 0px; + top: 0px; + width: 100%; + text-align: end; + line-height: 44px; + cursor: pointer; + z-index: 5; +} + +.mobile-menu .navigation li.dropdown2 .dropdown2-btn::before { + content: "\f078"; + font-family: "Font Awesome 5 Pro"; + font-size: 12px; + font-weight: 600; + color: #24272C; +} + +.mobile-menu .navigation li.dropdown2>ul li a { + border-bottom: unset; +} + +.mobile-menu .navigation li.dropdown2 .dropdown2-btn span { + opacity: 0; +} + +.mobile-menu .navigation li>ul, +.mobile-menu .navigation li>ul>li>ul { + display: none; + background: rgba(255, 113, 1, 0.06); + padding: 15px 20px; + border-radius: 10px; +} + +.mobile-menu .navigation li>ul>li, +.mobile-menu .navigation li>ul>li>ul>li { + margin-bottom: 0; +} + +.mobile-menu .navigation li>ul>li>a, +.mobile-menu .navigation li>ul>li>ul>li>a { + padding: 7px 0px !important; + font-size: 14px !important; + font-weight: 500; +} + +.mobile-menu .navigation li>ul>li>ul { + padding-left: 15px; +} + +.mobile-menu .navigation li>ul>li>ul>li>a { + padding-left: 40px; +} + +.mobile-menu .close-btn:hover { + opacity: 0.5; +} + +.mobile-menu .navigation li>ul>li:last-child { + border-bottom: none; +} + +.mobile-menu .navigation li>a { + position: relative; + display: block; + font-weight: 600; + line-height: 24px; + padding: 10px 0px; + font-size: 15px; + color: #24272C; + text-transform: capitalize; +} + +.mobile-menu .navigation li:hover>a, +.mobile-menu .navigation li.current>a { + color: #FF7101; +} + +.main-header .sticky-header .navbar-header { + display: none; +} + +.main-header .outer-box { + position: relative; +} + +.main-header .sticky-header .main-menu .navigation>li>a { + padding: 22px 0px; +} + +.mobile-button { + display: none; + position: absolute; + width: 26px; + height: 26px; + float: right; + top: 50%; + right: 15px; + background-color: transparent; + cursor: pointer; + transition: all 0s ease; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} + +.mobile-button::before, +.mobile-button::after, +.mobile-button span { + background-color: #FF7101; + -webkit-transition: all ease 0.3s; + -moz-transition: all ease 0.3s; + transition: all ease 0.3s; +} + +.mobile-button::before, +.mobile-button::after { + content: ""; + position: absolute; + top: 0; + height: 2px; + width: 100%; + left: 0; + top: 50%; + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; +} + +.mobile-button span { + position: absolute; + width: 100%; + height: 2px; + left: 0; + top: 50%; + overflow: hidden; + text-indent: 200%; +} + +.mobile-button::before { + -webkit-transform: translate3d(0, -9px, 0); + -moz-transform: translate3d(0, -9px, 0); + transform: translate3d(0, -9px, 0); +} + +.mobile-button::after { + -webkit-transform: translate3d(0, 9px, 0); + -moz-transform: translate3d(0, 9px, 0); + transform: translate3d(0, 9px, 0); +} + +.mobile-button.active span { + opacity: 0; +} + +.mobile-button.active::before { + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -moz-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); +} + +.mobile-button.active::after { + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -moz-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); +} + +.mobile-button.mobi-style::before, +.mobile-button.mobi-style::after, +.mobile-button.mobi-style span { + background-color: #FFFFFF; +} + +.mobile-menu .login-box { + border-bottom: 1px solid #EDEDED; + padding-bottom: 20px; + margin-bottom: 20px; +} + +.mobile-menu .login-box i { + margin-right: 5px; +} + +.mobile-menu .menu-outer { + border-bottom: 1px solid #EDEDED; + padding-bottom: 20px; + margin-bottom: 20px; +} + +.mobile-menu .button-mobi-sell { + border-bottom: 1px solid #EDEDED; + padding-bottom: 20px; +} + +.mobile-menu .button-mobi-sell a { + width: 100%; +} + +.main-header .mobile-menu .menu-box .mCSB_scrollTools { + width: 3px; +} + +.dashboard { + background-color: #f7f7f7; +} + +.dashboard .main-header .main-menu { + margin-left: 780px; +} + +.dashboard .avatars-box { + margin-right: 31px; +} + +.dashboard .avatars-box .images { + margin-right: 11px; + height: 34px; + width: 34px; + overflow: hidden; + border-radius: 50%; +} + +.dashboard .avatars-box .title-avatar a::after { + content: "\f078"; + font-family: "Font Awesome 5 Pro"; + font-weight: 900; + font-size: 11px; + margin-left: 8px; + vertical-align: bottom; +} + +.box-avatar.dropdown-toggle { + display: flex; + align-items: center; + gap: 10px; +} + +.box-avatar.dropdown-toggle::after { + display: none; +} + +.box-avatar.dropdown-toggle img { + width: 40px; + height: 40px; + border-radius: 50%; + border: 2px solid #FFF; + box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.14); +} + +.box-avatar.dropdown-toggle .name { + color: #24272C; + font-size: 16px; + font-weight: 500; + line-height: 150%; +} + +.box-avatar.dropdown-toggle i { + margin-left: 4px; +} + +.dropdown-menu.dashboard-menu { + border: none; + border-top: 2px solid #FF7101; + min-width: 240px; + background: #fff; + box-shadow: 0px 30px 60px 0px rgba(36, 39, 44, 0.1019607843); + border-radius: 0 0 16px 16px; +} + +.dropdown-menu.dashboard-menu a { + padding: 15.4px 24px; + font-weight: 500; + font-size: 16px; + color: #24272C; + position: relative; + display: block; +} + +.dropdown-menu.dashboard-menu a:hover { + color: #FF7101; +} + +.dropdown-menu.dashboard-menu a svg { + margin: 0; + margin-right: 8px; + vertical-align: bottom; +} + +.dropdown-menu.dashboard-menu a svg * { + stroke: #24272C; + opacity: 1; +} + +/* button +--------------------------------------------------*/ +.sc-button { + display: inline-block; + background-color: #FF7101; + box-sizing: border-box; + padding: 15px 36.5px; + border-radius: 14px; + text-align: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.sc-button span { + color: #FFFFFF; + font-weight: 500; + font-size: 16px; + position: relative; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.sc-button i { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.sc-button:hover, +.sc-button.active { + border-color: transparent; + outline: 0 none; + background-color: #24272C; +} + +.sc-button:hover svg, +.sc-button.active svg { + animation: 0.3s link-icon2 linear; +} + +.sc-button i { + color: #FFFFFF; + margin-left: 10px; +} + +.sc-button svg { + margin-right: 17px; +} + +.sc-button svg path { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.sc-button.btn-55 { + padding: 15px 55.5px !important; +} + +.sc-button.btn-svg svg, +.sc-button.btn-svg i { + margin-right: 0; +} + +.sc-button.btn-1 { + background-color: transparent; + border: 1px solid #FF7101; + padding: 14px 31.5px; + font-family: "Outfit", sans-serif; + color: #FF7101; +} + +.sc-button.btn-1 span { + color: #FF7101; + font-size: 16px; +} + +.sc-button.btn-1 i { + color: #FF7101; + margin-left: 10px; + font-size: 12px; +} + +.sc-button.btn-1:hover, +.sc-button.btn-1.active { + background-color: #FF7101; +} + +.sc-button.btn-1:hover span, +.sc-button.btn-1:hover i, +.sc-button.btn-1.active span, +.sc-button.btn-1.active i { + color: #FFFFFF; +} + +.sc-button.btn-1:hover svg, +.sc-button.btn-1:hover i, +.sc-button.btn-1.active svg, +.sc-button.btn-1.active i { + animation: 0.3s link-icon2 linear; +} + +.sc-button.btn-1:hover svg, +.sc-button.btn-1:hover path, +.sc-button.btn-1.active svg, +.sc-button.btn-1.active path { + fill: #FFFFFF; + stroke: #FFFFFF; +} + +.view-car { + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + font-family: "Outfit", sans-serif; + color: #24272C; + border: 1px solid #24272C; + border-radius: 14px; + padding: 9px 15.5px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.view-car:hover { + color: #FF7101; + border: 1px solid #FF7101; +} + +/** + * flat title page + * top filters + * flat brand + * flat featured + * wg-dream + * flat search area + * flat rent + * flat meet + * flat contact + * comments + * flat blog + * flat testimonial + * flat find neighborhood + * flat estate near + * flat properties rent + * curved + * flat testimonial2 + * flat agents + * flat search home + * flat why choose + * flat your + * flat testimonial3 + * flat contact2 + * flat explore + * flat search today + * flat why choose2 + * flat icon + * flat testimonial4 + * flat pricing + * flat property, property grid,list + * flat map 1 2 3 + * flat agent, agent detail,sidebar + * flat agencies, agencies detail,sidebar + * flat about + * flat service + * flat contact page + * flat property detail + * flat error + * flat blog grid,list,detail + * flat video + * flat count + * flat faq + * Modal Popup +*/ +/* Page Title Inner +-------------------------------------------------------------- */ +.flat-title-page.inner { + padding: 328px 0 41px 0px; + position: relative; + background-image: url(/assets/images/section/bg-page.html); + background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-attachment: fixed; + width: 100%; + height: 100%; +} + +.flat-title-page .page-title-heading .heading { + color: #FFFFFF; + margin-bottom: 25px; + line-height: 45px; + font-size: 45px; + font-weight: 700; +} + +.flat-title-page .page-title-heading.style-2 { + margin-right: 12px; +} + +.flat-title-page .page-title-heading .icon-boxs { + color: #FFFFFF; +} + +.flat-title-page .page-title-heading .icon-4::before { + content: "\f279"; + font-family: "Font Awesome 5 Pro"; + font-size: 12px; + font-weight: 500; + margin-right: 5px; + color: #fff; +} + +.flat-title-page .page-title-heading .icons { + margin-right: 19px; +} + +.flat-title { + border-bottom: 1px solid #EDEDED; + margin-bottom: 60px; +} + +.flat-title .title-inner { + padding: 19px 0 17px; +} + +.flat-title .title-inner .title-group { + font-family: "Inter", sans-serif; +} + +.flat-title .title-inner .title-group>a { + position: relative; + display: inline-block; +} + +.flat-title .title-inner .title-group>a::after { + content: "\f054"; + font-family: "Font Awesome 5 Pro"; + color: #B6B6B6; + font-size: 8px; + line-height: normal; + margin: 0 8.5px 0 8.5px; +} + +.flat-title .title-inner .title-group span { + color: #B6B6B6; +} + +.top-filters { + padding: 30px 0px 30px 0px; + background-color: #FFFFFF; + z-index: 10; + position: relative; +} + +.top-filters.style { + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); +} + +.top-filters.style2 { + padding: 24px 0px 30px 0px; +} + +.top-filters .form-sl { + padding: 0px; + box-shadow: unset; +} + +.top-filters .search-form .search-field { + padding: 14px 15px 14px 43px; + width: 217px; +} + +.top-filters .search-form i { + position: absolute; + color: #8E8E93; + top: 21px; + left: 19px; + cursor: pointer; +} + +.top-filters .icon-filter { + width: 160px; +} + +.top-filters .icon-filter span { + margin-right: 12px; + font-size: 15px; + font-weight: 700; +} + +.top-filters .button-top { + background: #FFF5E0; +} + +.top-filters .button-top span { + color: #24272C; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.top-filters .button-top:hover { + background: #FF7101; +} + +.top-filters .button-top:hover span { + color: #FFFFFF; +} + +.top-filters .button-top:hover i { + color: #FFFFFF; +} + +.top-filters .button-top:hover path { + stroke: #FFFFFF; +} + +.top-filters .wd-find-select .group-select .nice-select { + width: 217px; +} + +.top-filters .wd-search-form { + margin-left: 0; +} + +.flat-tabs.style2 { + position: relative; +} + +.flat-tabs.style2 .box-tab { + padding: 0px; + margin-right: 13px; +} + +.flat-tabs.style2 .tab-title li { + position: relative; + cursor: pointer; + width: 112px; + height: 54px; + background-color: #FFF5E0; + display: flex; + align-items: center; + justify-content: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border-radius: 6px; +} + +.flat-tabs.style2 .tab-title li i { + margin-right: 8px; + font-size: 19px; + color: #FFFFFF; + font-weight: 100; +} + +.flat-tabs.style2 .tab-title li h4 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-tabs.style2 .tab-title li:hover, +.flat-tabs.style2 .tab-title li.active { + background-color: #FF7101; +} + +.flat-tabs.style2 .tab-title li:hover h4, +.flat-tabs.style2 .tab-title li.active h4 { + color: #FFFFFF; +} + +.flat-tabs.style2 .tab-title li:nth-child(1) { + margin-right: 5px; +} + +.overlay { + background: #000000; + opacity: 0.75; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.overlay2 { + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 40.43%, rgba(0, 0, 0, 0.7) 100%); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +/* flat brand +--------------------------------------------------*/ +.flat-brand .title-section { + margin-bottom: 19px; +} + +.flat-brand.page-contact { + padding: 96px 0 241px; + background-image: url(/assets/images/section/bg-brand.html); + background-position: bottom; + background-repeat: no-repeat; +} + +.flat-brand.page-contact .overlay { + background: #FFFFFF; + opacity: 0.2; +} + +.flat-brand.page { + background: #FFAD6B; +} + +.flat-brand.home2 .swiper-container { + margin-bottom: 30px; +} + +.flat-brand.home2 .swiper-container:last-child { + margin-bottom: 0; +} + +.flat-brand.home3 { + padding: 49px 0 157px; +} + +.flat-tabs .tab-title li { + position: relative; + line-height: 24px; + margin-right: 12.7px; + padding-bottom: 5px; + cursor: pointer; + padding: 8px 14px 8px 14px; + box-shadow: 0px 4px 18px 0px rgba(66, 71, 76, 0.1019607843); +} + +.flat-tabs .tab-title li h5 { + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-tabs .tab-title li:hover h5, +.flat-tabs .tab-title li.active h5 { + font-weight: 600; + color: #FF7101; +} + +.flat-tabs .tab-title li:last-child { + margin-right: 0; +} + +.flat-featured.home { + padding: 0px 0 71px; +} + +.flat-featured.home4 { + padding-bottom: 100px; +} + +.flat-featured.home4 .owl-stage-outer::after, +.flat-featured.home4 .owl-stage-outer::before { + display: none; +} + +.flat-featured.home5 { + padding: 100px 0 70px; +} + +.flat-featured.home5-two .flat-tabs .tab-title li { + margin-right: 17px; + padding: 8px 20px; +} + +.flat-featured.home5-two .flat-tabs .tab-title li:hover h5, +.flat-featured.home5-two .flat-tabs .tab-title li.active h5 { + font-weight: 800; + color: #24272C; + font-family: "Outfit", sans-serif; +} + +.flat-featured.home5-two .flat-tabs .tab-title li h5 { + font-weight: 700; + font-family: "Inter", sans-serif; +} + +.flat-featured.home2 .flat-tabs .box-tab { + margin-bottom: 45px; +} + +.flat-featured.home2 .box { + width: 100%; + margin-left: 0; +} + +.flat-featured.home2 .owl-dots { + margin-top: 10px; +} + +.flat-featured.home2 .owl-stage-outer::after, +.flat-featured.home2 .owl-stage-outer::before { + content: ""; + top: 50%; + right: 0; + left: 0; + bottom: 0; + position: absolute; + background: rgba(255, 255, 255, 0.5); + height: 100%; + transform: translateY(-50%); + transition: all 0.3s ease 0s; + z-index: 1; +} + +.flat-featured.home2 .owl-stage-outer::after { + right: 0; + left: unset; + width: 20%; +} + +.flat-featured.home2 .owl-stage-outer::before { + right: unset; + left: 0; + width: 20%; +} + +.flat-featured.home2 .flat-tabs:hover .owl-stage-outer::after, +.flat-featured.home2 .flat-tabs:hover .owl-stage-outer::before { + display: none; +} + +.flat-featured.home3 { + padding: 100px 0 71px; +} + +.flat-featured.home3 .flat-tabs .box-tab { + margin-bottom: 44px; +} + +.flat-featured.home3 .box { + width: calc(33.333% - 30px); +} + +.flat-featured .heading-section { + margin-bottom: 30px; +} + +.flat-featured .box { + width: calc(25% - 30px); + margin-left: 30px; +} + +.flat-featured .box.style-2 { + width: calc(33.33333% - 30px); +} + +.icon-p { + color: #24272C; +} + +.icon-p::before { + content: "\f279"; + font-family: "Font Awesome 5 Pro"; + font-size: 12px; + font-weight: 500; + margin-right: 5px; + color: #696665; +} + +.star { + margin-left: -2px; +} + +.star svg { + fill: #FFBB0B; + width: 14px; + height: 14px; + margin-right: 4px; +} + +.flat-search-area .wrap-search-area { + position: relative; + flex-wrap: wrap; +} + +.flat-search-area .box { + width: calc(25% - 0px); + position: relative; + overflow: hidden; +} + +.flat-search-area .box .imgs { + width: 100%; +} + +.wg-search-area .box .images { + position: relative; +} + +.wg-search-area .box .images::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + transition: all 0.4s ease-out 0s; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 53.85%, #000000 100%); + z-index: 1; + opacity: 0.7; +} + +.wg-search-area .box:hover .images::after { + height: 200%; +} + +.wg-search-area .box .content { + position: absolute; + bottom: 18px; + left: 20px; + color: #fff; + z-index: 2; +} + +.wg-search-area .box .content h3 { + margin-bottom: 6px; +} + +.comments .comment-form label { + margin-bottom: 6px; + color: #24272C; +} + +.comments .comment-form .nice-select { + padding: 16px 20px 14px 46px; + font-size: 14px; + margin-bottom: 24px; + border-radius: 10px; +} + +.comments .comment-form .icon { + position: absolute; + left: 18px; + top: 43px; +} + +.comments .comment-form .toggle-password { + color: #B6B6B6; + font-size: 17px; + position: absolute; + right: 15px; + top: 47px; +} + +.comments .comment-form .text-wrap { + margin-left: -22px; +} + +.comments .comment-form .text-wrap fieldset { + width: calc(50% - 22px); + margin-left: 22px; +} + +.comments .comment-form .input-item input { + border: 1px solid #B6B6B6; + padding: 11px 14px 13px 17px; + color: #24272C; + font-weight: 500; + background-color: #FFFFFF; + border-radius: 10px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; +} + +.comments .comment-form .input-item input::placeholder { + color: #24272C; + line-height: 26px; + font-size: 14px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.comments .comment-form .input-item input:focus { + border: 1px solid #FF7101; +} + +.comments .comment-form fieldset { + position: relative; + width: 100%; + margin-bottom: 24px; +} + +.comments .comment-form fieldset.message-wrap { + margin-bottom: 16px; +} + +.comments .comment-form fieldset input { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; +} + +.comments .comment-form fieldset input::placeholder { + color: #24272C; + line-height: 26px; + font-size: 14px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.comments .comment-form fieldset input:focus { + border: 1px solid #FF7101; +} + +.comments .comment-form fieldset textarea { + padding: 13px 15px 37px 17px; + background-color: #FFFFFF; + border: 1px solid #EDEDED; + color: #24272C; + font-weight: 500; + padding-right: 5px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border-radius: 10px; +} + +.comments .comment-form fieldset textarea::placeholder { + color: #24272C; + line-height: 26px; + font-size: 14px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.comments .comment-form fieldset textarea:focus { + border: 1px solid #FF7101; +} + +.comments .comment-form button { + padding: 16px 50px 13px 50px; + border: unset; +} + +.flat-blog.home { + background-color: #F7F7F7; +} + +.flat-blog.home2 .content { + padding: 20px 0px 0; +} + +.flat-blog.home2 .sub-box { + left: 24.5%; +} + +.flat-blog.page-detail { + padding: 41px 0 100px; +} + +.flat-blog.page-detail .title-heading { + margin-bottom: 30px; +} + +.flat-blog .sub-box { + margin-bottom: 29px; +} + +.flat-blog .sub-box .title-1 { + color: #696665; +} + +.flat-blog .sub-box .title-2 { + margin-right: 24px; + position: relative; +} + +.flat-blog .sub-box .title-2::before { + font-family: "Font Awesome 5 Pro"; + font-size: 14px; + font-weight: 100; + content: "\f07c"; + margin-right: 6px; + color: #696665; +} + +.flat-blog .sub-box .title-2::after { + position: absolute; + content: ""; + width: 1px; + height: 14px; + right: -13px; + top: 2px; + background-color: #EDEDED; +} + +.flat-blog .content { + padding-top: 28px; +} + +.flat-blog .content h3 { + margin-bottom: 6px; +} + +.flat-blog .content h3 a { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.flat-blog .content h3 a:hover { + color: #FF7101; +} + +.meta .btn-button span { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.meta .btn-button i { + margin-left: 9px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.meta .btn-button svg { + margin-left: 11px; +} + +.meta .btn-button svg path { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.meta.style .btn-button:hover span { + color: #FF7101; +} + +.meta.style .btn-button:hover i { + color: #FF7101; +} + +.meta.style .btn-button:hover svg path { + stroke: #FF7101; +} + +.curved-group div div:nth-child(1) { + transform: rotate(12.7deg); +} + +.curved-group div div:nth-child(1) span { + transform: rotate(-180deg); +} + +.curved-group div div:nth-child(2) { + transform: rotate(25.4deg); +} + +.curved-group div div:nth-child(2) span { + transform: rotate(-360deg); +} + +.curved-group div div:nth-child(3) { + transform: rotate(38.1deg); +} + +.curved-group div div:nth-child(3) span { + transform: rotate(-540deg); +} + +.curved-group div div:nth-child(4) { + transform: rotate(50.8deg); +} + +.curved-group div div:nth-child(4) span { + transform: rotate(-720deg); +} + +.curved-group div div:nth-child(5) { + transform: rotate(63.5deg); +} + +.curved-group div div:nth-child(5) span { + transform: rotate(-900deg); +} + +.curved-group div div:nth-child(6) { + transform: rotate(76.2deg); +} + +.curved-group div div:nth-child(6) span { + transform: rotate(-1080deg); +} + +.curved-group div div:nth-child(7) { + transform: rotate(88.9deg); +} + +.curved-group div div:nth-child(7) span { + transform: rotate(-1260deg); +} + +.curved-group div div:nth-child(8) { + transform: rotate(101.6deg); +} + +.curved-group div div:nth-child(8) span { + transform: rotate(-1440deg); +} + +.curved-group div div:nth-child(9) { + transform: rotate(114.3deg); +} + +.curved-group div div:nth-child(9) span { + transform: rotate(-1620deg); +} + +.curved-group div div:nth-child(10) { + transform: rotate(127deg); +} + +.curved-group div div:nth-child(10) span { + transform: rotate(-1800deg); +} + +.curved-group div div:nth-child(11) { + transform: rotate(139.7deg); +} + +.curved-group div div:nth-child(11) span { + transform: rotate(-1980deg); +} + +.curved-group div div:nth-child(12) { + transform: rotate(152.4deg); +} + +.curved-group div div:nth-child(12) span { + transform: rotate(-2160deg); +} + +.curved-group div div:nth-child(13) { + transform: rotate(165.1deg); +} + +.curved-group div div:nth-child(13) span { + transform: rotate(-2340deg); +} + +.curved-group div div:nth-child(14) { + transform: rotate(177.8deg); +} + +.curved-group div div:nth-child(14) span { + transform: rotate(-2520deg); +} + +.curved-group div div:nth-child(15) { + transform: rotate(190.5deg); +} + +.curved-group div div:nth-child(15) span { + transform: rotate(-2700deg); +} + +.curved-group div div:nth-child(16) { + transform: rotate(203.2deg); +} + +.curved-group div div:nth-child(16) span { + transform: rotate(-2880deg); +} + +.curved-group div div:nth-child(17) { + transform: rotate(215.9deg); +} + +.curved-group div div:nth-child(17) span { + transform: rotate(-3060deg); +} + +.curved-group div div:nth-child(18) { + transform: rotate(228.6deg); +} + +.curved-group div div:nth-child(18) span { + transform: rotate(-3240deg); +} + +.curved-group div div:nth-child(19) { + transform: rotate(241.3deg); +} + +.curved-group div div:nth-child(19) span { + transform: rotate(-3420deg); +} + +.curved-group div div:nth-child(20) { + transform: rotate(254deg); +} + +.curved-group div div:nth-child(20) span { + transform: rotate(-3600deg); +} + +.curved-group div div:nth-child(21) { + transform: rotate(266.7deg); +} + +.curved-group div div:nth-child(21) span { + transform: rotate(-3780deg); +} + +.curved-group div div:nth-child(22) { + transform: rotate(279.4deg); +} + +.curved-group div div:nth-child(22) span { + transform: rotate(-3960deg); +} + +.curved-group div div:nth-child(23) { + transform: rotate(292.1deg); +} + +.curved-group div div:nth-child(23) span { + transform: rotate(-4140deg); +} + +.curved-group div div:nth-child(24) { + transform: rotate(304.8deg); +} + +.curved-group div div:nth-child(24) span { + transform: rotate(-4320deg); +} + +.curved-group div div:nth-child(25) { + transform: rotate(317.5deg); +} + +.curved-group div div:nth-child(25) span { + transform: rotate(-4500deg); +} + +.curved-group div div:nth-child(26) { + transform: rotate(330.2deg); +} + +.curved-group div div:nth-child(26) span { + transform: rotate(-4680deg); +} + +.curved-group div div:nth-child(27) { + transform: rotate(342.9deg); +} + +.curved-group div div:nth-child(27) span { + transform: rotate(-4860deg); +} + +.curved-group div div:nth-child(28) { + transform: rotate(355.6deg); +} + +.curved-group div div:nth-child(28) span { + transform: rotate(-5040deg); +} + +.curved-group div div:nth-child(22) { + transform: rotate(279.4deg); + top: 3px; +} + +.curved-group div div:nth-child(23) { + transform: rotate(292.1deg); + top: 1px; + left: 39px; +} + +.flat-testimonial2 .heading-tesi { + padding-top: 37px; +} + +.flat-testimonial2 .heading-tesi h2 { + margin-bottom: 16px; +} + +.flat-testimonial2 .heading-tesi .text-1 { + margin-bottom: 49px; +} + +.flat-testimonial2 .heading-tesi .icon-testi { + margin-bottom: 23px; +} + +.flat-testimonial2 .heading-tesi .img-author img { + margin-right: 13px; + width: 65px; + height: 65px; + border-radius: 50%; +} + +.flat-testimonial2 .text-testi { + border-bottom: 4px solid #FF7101; + padding-bottom: 21px; + font-style: italic; + margin-bottom: 27px; +} + +.flat-testimonial2 .text-testi::after { + content: ""; + border: 7px solid transparent; + border-top-color: #FFA920; + position: absolute; + bottom: -18px; + left: 23px; +} + +.flat-testimonial2 .box.box-1 { + margin-right: 29px; +} + +.flat-testimonial2 .box.box-1 .media:nth-child(1) { + margin-bottom: 29px; +} + +.flat-testimonial2 .box.box-2 .media:nth-child(1) { + margin-bottom: 30px; +} + +.flat-testimonial2 .box.box-2 .media:nth-child(2) { + margin-bottom: 30px; +} + +.flat-testimonial2 .box .button-testi { + margin-right: -15px; +} + +.flat-testimonial2 .box .button-testi i { + margin-right: 9px; +} + +.flat-testimonial2 .box .button-testi a { + padding: 16px 18px 16px 20px; +} + +.flat-are-interested { + background: #F7F7F7; +} + +.flat-agents { + background-image: url(/assets/images/section/bg-contact.html); + background-repeat: no-repeat; + background-size: cover; + background-color: #FFF5E0; + padding: 28px 0 29px; +} + +.flat-agents .heading-section { + margin-bottom: 0; + padding: 76px 13px 76px 116px; +} + +.flat-agents .heading-section .text-1 { + margin-bottom: 53px; +} + +.flat-agents .heading-section .icon-img { + margin-bottom: 24px; +} + +.flat-agents .heading-section .text-2 { + font-style: italic; + margin-bottom: 45px; +} + +.flat-agents .heading-section .title-content { + margin-bottom: 29px; +} + +.flat-agents .heading-section .signature { + margin-bottom: 45px; +} + +.flat-agents .heading-section .button-one { + margin-right: 10px; +} + +.flat-agents .heading-section .button-two { + margin-left: 10px; +} + +.flat-agents .sc-button { + width: 170px; +} + +.flat-agents .video-box { + margin-right: 3px; +} + +.flat-agents .video-box .post-video a { + position: absolute; + left: 56.5%; +} + +.flat-search-home { + background-image: url(/assets/images/section/bg-search-home.html); + background-repeat: no-repeat; + background-size: cover; + background-position: center center; + padding: 101px 0 297px; + color: #FFFFFF; +} + +.flat-search-home p { + color: rgba(255, 255, 255, 0.8); +} + +.flat-search-home .heading-section { + padding: 0 230px; +} + +.flat-search-home .box-icon .icon { + margin-right: 49px; + margin-top: 5px; +} + +.flat-search-home .box-icon .icon::after { + content: ""; + width: 1px; + height: 50px; + background-color: rgba(255, 255, 255, 0.5); + top: 0px; + transform: rotate(21deg); + position: absolute; + margin-left: 24px; +} + +.flat-search-home .box-icon .content p { + margin-bottom: 14px; +} + +.flat-slider-home3 { + margin-top: -242px; + padding-bottom: 118px; +} + +.flat-why-choose .wrap-why-choose { + margin-left: -1px; + flex-wrap: wrap; +} + +.flat-why-choose .wrap-why-choose .box { + width: calc(33.333% - 1px); + margin-left: 1px; + border-right: 1px solid #EFEFEF; + padding: 0 20px; +} + +.flat-why-choose .wrap-why-choose .box:last-child { + border-right: 0px solid #EFEFEF; +} + +.flat-why-choose .wrap-why-choose .box .icon { + margin-bottom: 23px; +} + +.flat-why-choose .wrap-why-choose .box .icon svg { + transition: all 0.8s ease; +} + +.flat-why-choose .wrap-why-choose .box h4 { + margin-bottom: 17px; +} + +.flat-why-choose .wrap-why-choose .box .images { + margin-bottom: 17px; + display: inline-flex; +} + +.flat-why-choose .wrap-why-choose .box p { + margin-bottom: 18px; +} + +.flat-why-choose .wrap-why-choose .box:hover .icon svg { + transform: rotateY(180deg); +} + +.flat-your .swiper-slide { + overflow: hidden; +} + +.flat-your .box { + overflow: hidden; +} + +.flat-your .box:hover .content { + bottom: 18px; + z-index: 99; +} + +.flat-your .box:hover .content p { + margin-bottom: 10px; +} + +.flat-your .box .img { + width: 100%; + height: 354px; +} + +.flat-your .box .images::after { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + transition: all 0.4s ease-out 0s; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 53.85%, #000000 100%); + z-index: 1; + opacity: 0.7; + border-radius: 10px; +} + +.flat-your .box .content { + margin-top: -75px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + z-index: 98; + bottom: -18px; + left: 21px; + position: absolute; +} + +.flat-your .box .content h3 { + margin-bottom: 6px; +} + +.flat-your .box .content p { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + margin-bottom: 15px; +} + +.flat-your .box .btn-button svg { + margin-left: 7px; +} + +.flat-testimonial3 { + color: #FFFFFF; +} + +.flat-testimonial3 .swiper-container { + margin-bottom: -110px; + padding-bottom: 110px; +} + +.flat-testimonial3 .bg-image { + margin-top: -301px; + background-image: url(/assets/images/section/bg-testimonial.html); + background-attachment: fixed; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + padding-bottom: 665px; +} + +.flat-testimonial3 .group-testi { + position: relative; + z-index: 1; +} + +.flat-testimonial3 .wrap-testi { + width: 65.8%; + z-index: 1; +} + +.flat-testimonial3 .wrap-testi .swiper-container { + margin: -50px 0 -110PX; + padding: 50px 0 110PX; +} + +.flat-testimonial3 .wrap-testi .box { + background-color: #FF7101; + border-radius: 10px 10px 0px 10px; + padding: 0px 10px 29px; +} + +.flat-testimonial3 .wrap-testi .images { + margin-bottom: 25px; +} + +.flat-testimonial3 .wrap-testi .images img { + margin-top: -56px; + border-radius: 50%; + width: 112px; + height: 112px; + border: 6px solid #FFF5E0; + box-shadow: 0px 20px 30px 0px rgba(0, 0, 0, 0.2392156863); +} + +.flat-testimonial3 .wrap-testi .texts { + margin-bottom: 19px; +} + +.flat-testimonial3 .wrap-testi svg { + margin-bottom: 21px; +} + +.flat-testimonial3 .wrap-heading { + width: 35.2%; +} + +.flat-testimonial3 .wrap-heading .box-heading { + margin-top: 207px; + background-color: #FFFFFF; + padding: 31px 30px; + border-radius: 0px 0px 10px 10px; +} + +.flat-testimonial3 .wrap-heading .box-heading h2 { + margin-bottom: 14px; +} + +.flat-contact2 { + background-image: url(/assets/images/section/bg-contact2.html); + background-repeat: no-repeat; + background-size: cover; + padding: 100px 0 62px; + background-color: #FFFFFF; +} + +.flat-contact2 .heading-section { + padding-right: 414px; + margin-bottom: 0; +} + +.flat-contact2 .heading-section p { + margin-bottom: 82px; +} + +.flat-contact2 .heading-section .sc-button { + width: 212px; +} + +.flat-contact2 .mark-img { + position: absolute; + top: -158px; + right: 14px; +} + +.flat-contact2.style .mark-img { + position: absolute; + top: -72px; + right: -18px; +} + +.flat-contact2.style .mark-img img { + width: 84.5%; +} + +.flat-explore .box { + text-align: -webkit-center; +} + +.flat-explore .box .images { + margin-bottom: 20px; + width: 116px; + height: 116px; + border-radius: 50%; +} + +.flat-explore .box h3 { + margin-bottom: 6px; +} + +.flat-explore .swiper-button-next, +.flat-explore .swiper-button-prev { + top: 59%; +} + +.flat-explore .swiper-button-prev { + left: -44px; +} + +.flat-sale.home3 { + padding: 95px 0 100px; +} + +.flat-discover { + padding-bottom: 99px; +} + +.flat-search-today { + background-color: #FFF5E0; +} + +.flat-search-today .bg-images { + background-image: url(/assets/images/section/bg-search-today.html); + background-repeat: no-repeat; + width: 100%; + height: 100%; +} + +.flat-search-today .wrap-search-today { + padding: 101px 0px 93px 21px; + overflow: hidden; +} + +.flat-search-today .wrap-search-today .heading-section { + padding-right: 100px; + margin-bottom: 133px; +} + +.flat-search-today .wrap-search-today .box:hover .icon-socials { + right: 0; + opacity: 1; +} + +.flat-search-today .wrap-search-today .images { + border-radius: 10px 10px 0 0; + position: relative; +} + +.flat-search-today .wrap-search-today .images .icon-socials { + background-color: #FF7101; + position: absolute; + width: 50px; + height: 100%; + top: 0; + right: -30px; + display: grid; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + opacity: 0; +} + +.flat-search-today .wrap-search-today .images .icon-socials a { + display: flex; + align-items: center; + justify-content: center; +} + +.flat-search-today .wrap-search-today .images .icon-socials i { + font-size: 17px; + color: #FFFFFF; +} + +.flat-search-today .wrap-search-today .content { + background-color: #FFFFFF; + padding: 20px; +} + +.flat-search-today .wrap-search-today .content h3 { + margin-bottom: 4px; +} + +.flat-search-today .wrap-search-today .content p { + margin-bottom: 13px; +} + +.flat-why-choose2 .images { + margin-right: -10px; + margin-top: 2px; +} + +.flat-why-choose2 .heading-section { + margin-top: 90px; +} + +.flat-why-choose2 .wrap-icon { + padding-right: 55px; +} + +.flat-why-choose2 .wrap-icon .box { + margin-bottom: 39px; +} + +.flat-why-choose2 .wrap-icon .box .icon { + margin-right: 25px; +} + +.flat-why-choose2 .wrap-icon .box .content { + padding-top: 1px; +} + +.flat-why-choose2 .wrap-icon .box .content h4 { + margin-bottom: 15px; +} + +.flat-why-choose2 .wrap-icon .box .content p { + margin-bottom: 10px; +} + +.flat-icon { + background-image: url(/assets/images/section/bg-icon.html); + background-repeat: no-repeat; + background-size: cover; + padding: 101px 55px 63px 0px; +} + +.flat-icon .heading-section { + padding-left: 58px; +} + +.flat-icon .container { + max-width: 1080px; +} + +.flat-icon .box { + background-color: #FFFFFF; + padding: 30px 30px 30px 28px; + border-radius: 10px; + height: 363px; +} + +.flat-icon .box:hover .icon svg { + transform: rotateY(180deg); +} + +.flat-icon .box .icon { + margin-bottom: 13px; +} + +.flat-icon .box .icon svg { + transition: all 0.8s ease; +} + +.flat-icon .box .inner { + min-height: 190px; + padding-bottom: 11px; + margin-bottom: 29px; + border-bottom: 1px solid #B6B6B6; +} + +.flat-icon .box h3 { + margin-bottom: 12px; +} + +.flat-testimonial4 { + background-image: url(/assets/images/section/bg-testimonial2.html); + background-repeat: no-repeat; + background-size: cover; + padding: 100px 0 111px; +} + +.flat-testimonial4 .box { + padding: 2px 190px; +} + +.flat-testimonial4 .box svg { + margin-bottom: 11px; +} + +.flat-testimonial4 .box .texts { + margin-bottom: 39px; +} + +.flat-testimonial4 .box .images { + margin-bottom: 15px; +} + +.flat-testimonial4 .box .images img { + width: 65px; + height: 65px; + border-radius: 50%; +} + +.flat-pricing { + padding-bottom: 100px; +} + +.flat-pricing.page { + padding: 92px 0 0; +} + +.flat-pricing .box { + background: #FFFFFF; + padding: 41px 30px 30px; + border: 1px solid #EFEFEF; + border-radius: 10px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-pricing .box:hover { + transform: translateY(-5px); +} + +.flat-pricing .box .sub-title { + margin-bottom: 14px; +} + +.flat-pricing .box .text-sub { + margin-bottom: 31px; + color: #24272C; +} + +.flat-pricing .box .title-price { + margin-bottom: 15px; +} + +.flat-pricing .box .title-price h2 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-pricing .box .title-price .mo { + margin-left: 14px; + margin-top: 26px; + color: #696665; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-pricing .box .texts { + margin-bottom: 24px; + padding-bottom: 24px; + border-bottom: 1px solid #EFEFEF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-pricing .box .check { + margin-bottom: 24px; +} + +.flat-pricing .box .check li { + margin-bottom: 14px; + font-family: "Inter", sans-serif; +} + +.flat-pricing .box .check li::before { + content: "\f00c"; + font-family: "Font Awesome 5 Pro"; + font-size: 6px; + font-weight: 600; + color: #fff; + margin-right: 13px; + width: 17px; + height: 17px; + display: flex; + align-items: center; + justify-content: center; + background: #FF7101; + border-radius: 50%; + flex: none; +} + +.flat-pricing .box .button-pricing a { + width: 100%; + text-align: center; +} + +.flat-pricing .box.active { + background-color: #FF7101; + color: #FFFFFF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-pricing .box.active .title-price .mo { + margin-left: 6px; + color: #FFFFFF; +} + +.flat-pricing .box.active .texts { + color: rgba(255, 255, 255, 0.5); + border-bottom: 1px solid rgba(239, 239, 239, 0.5); +} + +.flat-pricing .box.active .text-sub { + color: #FFFFFF; +} + +.flat-pricing .box.active .check li { + font-weight: 600; + font-family: "Outfit", sans-serif; + margin-bottom: 15.5px; +} + +.flat-pricing .box.active .check li::before { + background-color: #FFFFFF; + color: #FF7101; +} + +.flat-pricing .box.active .button-pricing a { + background-color: #FFFFFF; +} + +.flat-pricing .box.active .button-pricing a span { + color: #FF7101; +} + +.flat-pricing .box.active .button-pricing a:hover { + background-color: #EDEDED; +} + +.flat-property .inner-heading { + margin-bottom: 60px; +} + +.flat-property .inner-heading .social-listing p { + color: #24272C; + margin-right: 13px; +} + +.flat-property-grid .box { + margin-left: 0; +} + +.flat-property-grid-1 .wrap-property { + margin-left: -30px; + flex-wrap: wrap; +} + +.flat-property-grid-1 .post { + width: 78.3%; + padding-right: 15px; + padding-left: 15px; +} + +.flat-property-grid-1 .side-bar { + width: 19.95%; + margin-left: 15px; + margin-right: 15px; +} + +.flat-property-grid-1 .swiper-container { + margin-left: -16px; + margin-right: -16px; + margin-top: -16px; +} + +.flat-property-grid-1 .box-dream .featured { + left: -21px; +} + +.flat-property-grid-2 .post { + padding-right: 20px; +} + +.flat-property-grid-2 .box-dream.style-dream { + padding: 15px 16px 15px 16px; +} + +.flat-property-grid-2 .swiper-container { + margin-left: -5px; + margin-right: -5px; +} + +.flat-property-list .post { + padding-right: 20px; +} + +.flat-property-list .box { + padding: 16px 14px 16px 16px; +} + +.flat-property-list .box .content { + width: 60%; +} + +.flat-property-list1 .post { + width: 78.3%; + padding-right: 15px; + padding-left: 15px; +} + +.flat-property-list1 .side-bar { + width: 19.95%; + margin-left: 15px; + margin-right: 15px; +} + +.flat-property-list2 { + padding-bottom: 95px; +} + +.flat-property-list2 .box { + padding: 16px 14px 16px 16px; +} + +.flat-property-list2 .box .image-group { + flex: none; + width: 540px; +} + +.flat-property-list2 .box .image-group .img-box .img-2, +.flat-property-list2 .box .image-group .img-box .img-3 { + margin-bottom: 2px; +} + +.flat-property-list2 .box .image-group .img-box.img-box1 { + margin-right: 0px; + width: 54.2%; + flex: unset !important; +} + +.flat-property-list2 .box .image-group .img-box.img-box2 { + width: 26.9%; + margin-left: 2px; +} + +.flat-property-list2 .box .image-group .img-box.img-box3 { + margin-left: 2px; + width: 26.9%; +} + +.flat-property-list2 .box .image-group .img-box .imgs { + height: 100%; + width: 100%; +} + +.flat-property-list2 .box .image-group .img-box img { + width: 100%; + object-fit: cover; +} + +.flat-property-list2 .box .image-group .icon-inner { + display: flex; + align-items: center; + justify-content: center; +} + +.flat-property-list2 .box .image-group .icon-inner::before { + content: ""; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 53.85%, #000000 100%); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + z-index: 1; + border-radius: 8px; + background: rgba(0, 0, 0, 0.4); +} + +.flat-property-list2 .box .image-group .icon-inner .contents { + position: absolute; + margin-top: 3px; +} + +.flat-property-list2 .box .image-group .icon-inner .contents svg { + margin-bottom: 3px; +} + +.flat-property-list2 .box .content { + width: 50%; + padding-left: 17px; +} + +.flat-property-list2 .box .content .icon-box { + padding-bottom: 26px; +} + +.flat-property-list2 .themesflat-pagination { + margin-top: 48px; +} + +.wd-feature-map #map, +.wd-feature-map iframe { + width: 100%; + height: 600px; +} + +.content-right #map, +.content-right iframe { + width: 100%; + height: 100%; +} + +.wrap-map .content-left { + width: 51%; + padding: 40px 38px 35px 93px; + background: #FFFFFF; + position: relative; + z-index: 3; +} + +.wrap-map .content-left .category-filter { + margin-bottom: 21px; +} + +.wrap-map .content-left .box { + margin-bottom: 25px; +} + +.wrap-map .content-left .themesflat-pagination { + margin-top: 1px; +} + +.wrap-map .content-right { + width: 49%; + position: fixed; + z-index: 0; + top: 0; + height: 100%; + right: 0; +} + +.wrap-map2 .content-left .box { + width: calc(100% - 0px); + border: unset; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.0784313725); + margin-bottom: 19.5px; +} + +.wrap-map2 .content-left .box .content { + width: 61.5%; +} + +.wrap-map2 .content-left .box .content .icon-box { + padding-bottom: 33px; +} + +.wrap-map2 .content-left .themesflat-pagination { + margin-top: 30px; +} + +.wrap-map3 { + padding-bottom: 0; +} + +.wrap-map3 .content-left { + width: 35.3%; + padding: 40px 30px 35px 92px; + background: #FFFFFF; + position: relative; + z-index: 3; +} + +.wrap-map3 .content-left .category-filter { + margin-bottom: 21px; +} + +.wrap-map3 .content-left .box { + padding: 17px 16px 16px 16px; + margin-bottom: 19px; +} + +.wrap-map3 .content-left .box .image-group { + width: 100%; +} + +.wrap-map3 .content-left .box .content { + width: 100%; + padding-left: 0; +} + +.wrap-map3 .content-left .box .content .icon-box { + padding: 0; + margin-bottom: 0; + border-bottom: 0; +} + +.wrap-map3 .content-left .themesflat-pagination { + margin-top: 30px; +} + +.wrap-map3 .icon-d { + position: absolute; + right: 0; + top: 0px; + width: 30px; + height: 30px; + border-radius: 50%; + background-color: #F3F3F3; + display: flex; + align-items: center; + justify-content: center; +} + +.wrap-map3 .icon-d.icon-repeat { + top: 40px; +} + +.wrap-map3 .icon-d:hover { + background-color: #FFF5E0; +} + +.wrap-map3 .content-right { + width: 64.7%; + position: fixed; + z-index: 0; + top: 0; + height: 100%; + right: 0; +} + +.flat-agent-sidebar .post .heading-listing { + margin-bottom: 0; +} + +.flat-agent-sidebar .post .wd-find-select .group-select .nice-select { + width: 240px; +} + +.flat-agent-sidebar .wrap-list { + position: relative; +} + +.flat-agent-sidebar .wrap-list .box .content { + margin-bottom: 7px; +} + +.flat-agent.page .category-filter { + margin-bottom: 24px; +} + +.flat-agent.page .wd-find-select .group-select .nice-select { + width: 240px; +} + +.flat-agent.page .box { + padding: 0; +} + +.flat-agent.page .box .content { + padding: 20px 20px 16px; +} + +.flat-agent.page .images { + margin-right: 0; +} + +.flat-agent.page .images img { + height: 202px; +} + +.flat-agent.page .icon-group { + margin-bottom: 20px; + padding-bottom: 20px; + border-bottom: 1px solid #EFEFEF; +} + +.flat-agent.page .themesflat-pagination { + margin-top: 10px; +} + +.flat-agent .images { + margin-right: 30px; + border-radius: 10px; +} + +.flat-agent .images img { + height: 100%; +} + +.flat-agent .box { + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + padding: 20px 20px 17px; + margin-bottom: 30px; +} + +.flat-agent .box .content h3 { + margin-bottom: 2px; +} + +.flat-agent .box .content p { + margin-bottom: 21px; +} + +.flat-agent .icon-group { + margin-bottom: 20px; + padding-bottom: 39px; + border-bottom: 1px solid #E4E4E4; +} + +.flat-agent .icon-group .icon-phone { + margin-bottom: 6px; +} + +.flat-agent .icon-group .icon-phone::before { + font-family: "Font Awesome 5 Pro"; + font-size: 14px; + font-weight: 500; + content: "\f4d2"; + transform: rotate(99deg); + display: inline-block; + margin-right: 10px; + color: #8E8E93; +} + +.flat-agent .icon-group .icon-email a { + text-decoration-line: underline; +} + +.flat-agent .icon-group .icon-email::before { + font-family: "Font Awesome 5 Pro"; + font-size: 14px; + font-weight: 500; + content: "\f0e0"; + text-decoration-line: unset; + margin-right: 10px; + color: #8E8E93; +} + +.icon-social-wg { + padding-left: 5px; +} + +.icon-social-wg a i { + font-size: 17px; + margin-right: 19px; + color: #8E8E93; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.icon-social-wg a i:hover { + color: #FF7101; +} + +.icon-social-wg.style a i { + color: #C8C8CF; +} + +.icon-social-wg.style a i:hover { + color: #FF7101; +} + +.flat-agent-detail { + padding-bottom: 105px; +} + +.flat-agent-detail .titles { + margin-bottom: 2px; +} + +.flat-agent-detail .sub-text p { + margin-right: 4px; +} + +.flat-agent-detail .icon-group { + margin-bottom: 20px; + padding-bottom: 20px; + border-bottom: 1px solid #EFEFEF; +} + +.flat-agent-detail .icon-group .icon-email { + margin-bottom: 5px; +} + +.flat-agent-detail .icon-group .icon-map::before { + font-family: "Font Awesome 5 Pro"; + font-size: 14px; + font-weight: 500; + content: "\f3c5"; + display: inline-block; + margin-right: 12px; + margin-left: 2px; + color: #8E8E93; +} + +.flat-agent-detail .box-text { + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + padding: 20px 20px 19px; + margin-bottom: 31px; +} + +.flat-agent-detail .box-text .text-1, +.flat-agent-detail .box-text h3 { + margin-bottom: 12px; +} + +.flat-agent-detail .wrap-item { + padding-bottom: 5px; + border-bottom: 1px solid #B6B6B6; + margin-bottom: 30px; +} + +.flat-agent-detail .wrap-item .box { + padding: 20px 17px 17px; + margin-bottom: 26px; +} + +.flat-agent-detail .wrap-item .box .content { + width: 61.5%; +} + +.flat-agent-detail .wrap-item .box .content h3 { + margin-bottom: 6px; +} + +.group-button-view a { + width: 240px; +} + +.group-button-view a span { + margin-right: 20px; +} + +.group-button-view a span::after { + background-color: rgba(255, 113, 1, 0.2); +} + +.wg-tabs .flat-tabs { + position: relative; + z-index: 9; +} + +.wg-tabs .flat-tabs .tab-title { + padding-bottom: 16px; + margin-bottom: 25px; + border-bottom: 1px solid #E4E4E4; +} + +.wg-tabs .flat-tabs .tab-title li { + position: relative; + cursor: pointer; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + margin-right: 13px; +} + +.wg-tabs .flat-tabs .tab-title li h3 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + margin-right: 8px; +} + +.wg-tabs .flat-tabs .tab-title li:hover h3, +.wg-tabs .flat-tabs .tab-title li.active h3 { + color: #FF7101; +} + +.wg-tabs .flat-tabs .tab-title li:hover::after, +.wg-tabs .flat-tabs .tab-title li.active::after { + content: ""; + width: 0; + height: 4px; + position: absolute; + background: #FF7101; + left: 100%; + bottom: -17px; + transform: translateX(-50%); + width: 100%; + visibility: visible; + opacity: 1; + left: 50%; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-agencies-sidebar .box-2 { + margin-top: 2px; +} + +.flat-agencies-sidebar .wd-find-select .group-select .nice-select { + width: 240px; +} + +.flat-agencies-sidebar.style .category-filter { + margin-bottom: 24px; +} + +.flat-agencies .images { + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +.flat-agencies .box-agencies { + margin-bottom: 30px; + border-radius: 20px; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); +} + +.flat-agencies .box-agencies .icon-brand { + display: inline-flex; + margin-left: 20px; + margin-top: -45px; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); +} + +.flat-agencies .box-agencies .icon-brand img { + border-radius: 10px; +} + +.flat-agencies .box-agencies .content { + padding: 19px 20px 16px; + border-bottom-right-radius: 20px; + border-bottom-left-radius: 20px; +} + +.flat-agencies .box-agencies .content .title-group { + margin-bottom: 20px; +} + +.flat-agencies .box-agencies .content .title-group h3 { + margin-bottom: 2px; +} + +.flat-agencies .box-agencies .content ul { + flex-wrap: wrap; + padding-bottom: 8px; + border-bottom: 1px solid #E4E4E4; + margin-bottom: 21px; +} + +.flat-agencies .box-agencies .content ul li { + margin-bottom: 12px; +} + +.flat-agencies .box-agencies .content ul .one { + width: 28%; +} + +.flat-agencies .box-agencies .content ul .two { + width: 72%; +} + +.flat-agencies-sidebar2 .box-agencies { + padding: 20px 20px 22px; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + margin-bottom: 30px; +} + +.flat-agencies-sidebar2 .box-agencies .images { + width: 90px; + height: 90px; + border: 1px solid #E4E4E4; + margin-right: 30px; +} + +.flat-agencies-sidebar2 .box-agencies .content .title-group { + padding-bottom: 20px; + margin-bottom: 18px; + border-bottom: 1px solid #E4E4E4; +} + +.flat-agencies-sidebar2 .box-agencies .content h3 { + margin-bottom: 4px; +} + +.flat-agencies-sidebar2 .box-agencies .content p { + margin-bottom: 17px; + margin-left: 2px; +} + +.flat-agencies-sidebar2 .box-agencies .icon-info a { + width: 38px; + height: 38px; + border-radius: 50%; + border: 1px solid #E4E4E4; + line-height: 38px; + text-align: center; + margin-right: 4px; +} + +.flat-agencies-sidebar2 .box-agencies .icon-info a:hover { + border: 1px solid #FF7101; + background-color: #FF7101; +} + +.flat-agencies-sidebar2 .box-agencies .icon-info a:hover path { + fill: #FFFFFF; +} + +.flat-agencies-sidebar2 .box-agencies .icon-socials { + margin-top: 13px; + margin-right: -18px; +} + +.flat-agencies-sidebar2 .themesflat-pagination { + margin-top: 60px; +} + +.flat-agencies-detail { + padding-bottom: 100px; +} + +.flat-agencies-detail .avatar { + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + width: 190px; + height: 190px; + border-radius: 10px; + overflow: hidden; +} + +.flat-agencies-detail .box-avatar { + align-items: end; + margin: -96px 30px 30px; +} + +.flat-agencies-detail .box-avatar .content { + padding: 10px 0px 5px 26px; +} + +.flat-agencies-detail .box-avatar .content .title-avatar { + margin-bottom: 4px; +} + +.flat-agencies-detail .wrap-description { + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); + padding: 20px 20px 14px 20px; + margin-bottom: 30px; +} + +.flat-agencies-detail .wrap-description .titles { + padding-bottom: 12px; + margin-bottom: 12px; + border-bottom: 1px solid #E4E4E4; +} + +.flat-agencies-detail .wrap-description .inner { + flex-wrap: wrap; + border-radius: 12px; + background-color: #FFF5E0; + padding: 20px 21px 7px; + margin-bottom: 31px; +} + +.flat-agencies-detail .wrap-description .inner li { + margin-bottom: 12px; +} + +.flat-agencies-detail .wrap-description .inner .one { + width: 13.2%; +} + +.flat-agencies-detail .wrap-description .inner .two { + width: 84%; +} + +.flat-agencies-detail .wrap-description .box-text { + margin-bottom: 31px; +} + +.flat-agencies-detail .wrap-description .box-text .text-1 { + margin-bottom: 12px; +} + +.flat-agencies-detail .wrap-description .map-content { + height: 360px; + width: 100%; +} + +.flat-agencies-detail.wg-tabs .flat-tabs .tab-title { + margin-bottom: 27px; +} + +.flat-about { + padding: 60px 0 100px; +} + +.flat-about .heading-about { + padding-right: 100px; +} + +.flat-about .heading-about h2 { + padding-right: 50px; + margin-bottom: 41px; +} + +.flat-about .heading-about h4 { + margin-bottom: 11px; +} + +.flat-about .heading-about .text-1 { + margin-bottom: 25px; +} + +.flat-about .heading-about .text-box { + position: relative; + margin-bottom: 26px; +} + +.flat-about .heading-about .text-box::before { + content: ""; + width: 3px; + height: 100%; + background-color: #FF7101; + position: absolute; + border-radius: 3px; +} + +.flat-about .heading-about .text-box p { + margin-left: 30px; + padding: 7px 0; +} + +.flat-about .heading-about .author-box { + padding-left: 30px; +} + +.flat-about .heading-about .author-box h3 { + margin-bottom: 3px; +} + +.flat-about .heading-about .author-box p { + margin-bottom: 18px; +} + +.flat-about .post-video img { + border-radius: 10px; +} + +.flat-about .post-video a { + width: 60px; + height: 60px; + line-height: 60px; +} + +.flat-about .post-video .ripple::before, +.flat-about .post-video .ripple::after { + width: 60px; + height: 60px; +} + +.flat-about .icon-box { + position: absolute; + padding: 30px 15px 16px; + background-color: #FFF5E0; + right: 65px; + bottom: 1px; + border-radius: 10px; + width: 160px; + height: 160px; +} + +.flat-about .icon-box.icon-box2 { + right: -95px; + bottom: 160px; + background-color: #FF7101; + color: #FFFFFF; + z-index: 2; + padding: 27px 15px 16px; +} + +.flat-about .icon-box.icon-box2 img { + margin-bottom: 17px; +} + +.flat-about .icon-box.icon-box2 .title-icon { + margin-bottom: 6px; +} + +.flat-about .icon-box.icon-box2 .title-icon::after { + display: none; +} + +.flat-about .icon-box img { + margin-bottom: 20px; +} + +.flat-about .icon-box .title-icon { + margin-bottom: 1px; + display: flex; + align-items: initial; + justify-content: center; +} + +.flat-about .icon-box .title-icon::after { + content: "+"; + font-size: 16px; + line-height: 14px; + font-weight: 900; +} + +.flat-service { + background-image: url(/assets/images/section/bg-icon.html); + background-repeat: no-repeat; + background-size: cover; +} + +.flat-service .box { + background-color: #FFFFFF; + padding: 30px; + border-radius: 10px; +} + +.flat-service .box:hover .icon svg { + animation: toBottomFromTop 0.5s forwards; +} + +.flat-service .box .icon { + margin-bottom: 25px; + overflow: hidden; +} + +.flat-service .box h3 { + margin-bottom: 15px; + padding-bottom: 16px; + position: relative; +} + +.flat-service .box h3::before { + position: absolute; + content: ""; + width: 60px; + height: 1px; + background-color: #FF7101; + bottom: 0; +} + +@keyframes toTopFromBottom { + 49% { + transform: translateY(-20%); + } + + 50% { + opacity: 0; + transform: translateY(20%); + } + + 51% { + opacity: 1; + } +} + +.flat-why-choose.page { + padding: 0 0 99px; +} + +.flat-search-home.page { + padding: 65px 0 258px; +} + +.flat-search-home.page .heading-section { + padding: 0 130px; +} + +.flat-search-home.page .box-icon .icon::after { + display: none; +} + +.flat-search-home.page .box-icon .content .text-1 { + margin-bottom: 4px; +} + +.flat-search-home.page .box-icon .content .text-3 { + margin-bottom: 4px; +} + +.flat-contact-page { + margin-top: -209px; +} + +.flat-contact-page .comments { + border-radius: 12px; + padding: 30px; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.0784313725); +} + +.flat-contact-page .comments .comment-form .nice-select { + padding: 16px 18px 14px 17px; + margin-bottom: 22px; +} + +.flat-contact-page .comments .comment-form fieldset input { + padding: 11px 14px 13px 17px; +} + +.flat-contact-page .comments .comment-form fieldset textarea { + padding: 11px 15px 22px 17px; +} + +.flat-contact-page .info-box { + width: calc(33.333% - 22px) !important; + margin-left: 22px; +} + +.flat-contact-page.page { + margin-top: -169px; +} + +.flat-contact-page.page .heading-box { + margin-bottom: 30px; +} + +.flat-contact-page.page .heading-box .heading-title { + margin-bottom: 10px; +} + +.flat-property-detail { + padding-top: 12px; +} + +.flat-property-detail .wrap-house { + justify-content: space-between; + margin-bottom: 40px; +} + +.flat-property-detail .wrap-house .title-heading { + margin-bottom: 14px; +} + +.flat-property-detail .wrap-house .inner { + margin-bottom: 7px; +} + +.flat-property-detail .wrap-house .inner .text-address { + margin-bottom: 0; + margin-right: 15px; +} + +.flat-property-detail .wrap-house .inner .sales { + padding: 6px, 8px, 6px, 8px; + background-color: #6E55FF; + width: 62px; + height: 20px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 5px; + margin-right: 13px; +} + +.flat-property-detail .wrap-house .inner .icon-inner .years-icon { + margin-right: 10px; +} + +.flat-property-detail .wrap-house .inner .icon-inner i { + margin-right: 6px; +} + +.flat-property-detail .wrap-house .icon-box { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: 0; +} + +.flat-property-detail .wrap-house .icon-box .icons { + margin-right: 20px; +} + +.flat-property-detail .wrap-house .icon-boxs { + margin-bottom: 6px; +} + +.flat-property-detail .wrap-house .icon-boxs a { + width: 40px; + height: 40px; + border-radius: 10px; + border: 1px solid #B6B6B6; + display: flex; + align-items: center; + justify-content: center; + margin-left: 8px; +} + +.flat-property-detail .wrap-house .icon-boxs a path, +.flat-property-detail .wrap-house .icon-boxs a svg { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-property-detail .wrap-house .icon-boxs a:hover { + background-color: #FF7101; + border: 1px solid #FF7101; +} + +.flat-property-detail .wrap-house .icon-boxs a:hover path, +.flat-property-detail .wrap-house .icon-boxs a:hover svg { + stroke: #FFFFFF; +} + +.flat-property-detail .wrap-house .moneys { + margin-right: -5px; +} + +.flat-property-detail .wrap-house .text-sq { + padding-right: 2px; +} + +.flat-property-detail .wrap-img { + margin-bottom: 50px; +} + +.flat-property-detail .wrap-img .box-img img { + width: 100%; +} + +.flat-property-detail .wrap-img .box-1 { + margin-right: 10px; + width: 49.1%; +} + +.flat-property-detail .wrap-img .box-2 { + width: 50.2%; +} + +.flat-property-detail .wrap-img .box-2 .img-box { + margin-top: 10px; +} + +.flat-property-detail .wrap-img .box-2 .img-3 { + width: 50%; +} + +.flat-property-detail .wrap-img .box-2 .image { + margin-left: 10px; + position: relative; + display: flex; + align-items: center; + justify-content: center; + width: 50%; +} + +.flat-property-detail .wrap-img .box-2 .image .img-4 { + height: 100%; +} + +.flat-property-detail .wrap-img .box-2 .image::before { + content: ""; + background: linear-gradient(180deg, rgba(0, 0, 0, 0) 53.85%, #000000 100%); + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + z-index: 1; + border-radius: 8px; + background: rgba(0, 0, 0, 0.4); +} + +.flat-property-detail .wrap-img .box-2 .image .contents { + position: absolute; + padding-top: 10px; + padding-right: 10px; +} + +.flat-property-detail .wrap-img .box-2 .image .contents svg { + margin-bottom: 6px; +} + +.flat-property-detail .post .titles { + padding-bottom: 12px; + margin-bottom: 20px; + border-bottom: 1px solid #EDEDED; +} + +.flat-property-detail .wrap-style { + margin-bottom: 30px; + border-radius: 10px; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); +} + +.flat-property-detail .wrap-style:last-child { + margin-bottom: 0; +} + +.flat-property-detail .wrap-overview { + padding: 10px 20px 1px; +} + +.flat-property-detail .wrap-overview .box-icon { + width: 26.1%; +} + +.flat-property-detail .wrap-overview .box-icon:last-child { + width: 20%; +} + +.flat-property-detail .wrap-overview .icon { + width: 40px; + height: 40px; + border-radius: 10px; + border: 1px solid #B6B6B6; + margin-bottom: 19px; + margin-right: 14px; + display: flex; + align-items: center; + justify-content: center; +} + +.flat-property-detail .wrap-text { + padding: 21px 20px 20px; +} + +.flat-property-detail .wrap-text .text-2, +.flat-property-detail .wrap-text .text-1 { + margin-bottom: 12px; +} + +.flat-property-detail .wrap-property { + padding: 20px 20px 8px; +} + +.flat-property-detail .wrap-property ul:nth-child(1) { + width: 51.5%; +} + +.flat-property-detail .wrap-property ul:nth-child(1) .one { + width: 24.3%; +} + +.flat-property-detail .wrap-property ul:nth-child(2) { + width: 48.5%; +} + +.flat-property-detail .wrap-property ul:nth-child(2) .one { + width: 25.6%; +} + +.flat-property-detail .wrap-property ul li { + margin-bottom: 12px; +} + +.flat-property-detail .wrap-featured { + padding: 20px 20px 18px; +} + +.flat-property-detail .wrap-featured .inner-1 { + width: 25.7%; +} + +.flat-property-detail .wrap-featured .inner-2 { + width: 25.2%; +} + +.flat-property-detail .wrap-featured .inner-3 { + width: 25.7%; +} + +.flat-property-detail .wrap-featured .inner-4 { + margin-top: 42px; +} + +.flat-property-detail .wrap-map { + padding: 20px 20px 12px; +} + +.flat-property-detail .wrap-map ul:nth-child(1) .one { + width: 34%; +} + +.flat-property-detail .wrap-map ul:nth-child(2) .one { + width: 35.6%; +} + +.flat-property-detail .wrap-map .box { + margin-bottom: 20px; +} + +.flat-property-detail .wrap-map .map-content { + width: 100%; + height: 360px; +} + +.flat-property-detail .wrap-floor { + padding: 20px 20px 6px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons { + margin-right: 20px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons.icon-money span:nth-child(1) { + margin-right: 6px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons.icon-money span:nth-child(2) { + margin-right: 10px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons:last-child { + margin-right: 0px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons::before { + margin-right: 8px; +} + +.flat-property-detail .wrap-floor .flat-accordion .icons span:nth-child(1) { + margin-right: 10px; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; + margin-bottom: 14px; + background-color: #FFFFFF; + border-bottom: 1px solid #B6B6B6; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle:last-child { + margin-bottom: 0; + border-bottom: 0px; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-title { + padding: 0px 0px 13px 22px; + cursor: pointer; + color: #24272C; + width: 100%; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-title.active .btn-toggle::after { + content: "\f054"; + rotate: -90deg; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .btn-toggle { + position: absolute; + left: 4px; + top: 0px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .btn-toggle::after { + content: "\f054"; + font-family: "Font Awesome 5 Pro"; + rotate: 90deg; + font-weight: 400; + color: #24272C; + font-size: 14px; + display: flex; + align-items: center; + justify-content: center; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-content { + padding: 8px 0px 20px 0px; + display: none; + background-color: #FFFFFF; + width: 100%; + transition: all 0s ease !important; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-content img { + margin-bottom: 20px; +} + +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-content .texts, +.flat-property-detail .wrap-floor .flat-accordion .flat-toggle .toggle-content .title { + margin-bottom: 12px; +} + +.flat-property-detail .wrap-video { + padding: 21px 20px 20px; +} + +.flat-property-detail .wrap-video .post-video img { + border-radius: 10px; +} + +.flat-property-detail .wrap-video .post-video a { + width: 60px; + height: 60px; + line-height: 60px; +} + +.flat-property-detail .wrap-video .post-video .ripple::before, +.flat-property-detail .wrap-video .post-video .ripple::after { + width: 60px; + height: 60px; +} + +.flat-property-detail .wrap-virtual { + padding: 20px 20px 20px; +} + +.flat-property-detail .wrap-walksore { + padding: 20px 20px 20px; +} + +.flat-property-detail .wrap-walksore .icon-p { + margin-left: 2px; + margin-bottom: 20px; +} + +.flat-property-detail .wrap-walksore .progress-box { + margin-bottom: 20px; +} + +.flat-property-detail .wrap-walksore .progress-box .chart { + display: flex; + align-items: center; + justify-content: center; +} + +.flat-property-detail .wrap-walksore .progress-box canvas { + background: #FFF5E0; + border-radius: 50%; +} + +.flat-property-detail .wrap-walksore .progress-box .progress-walk { + margin-right: 20px; +} + +.flat-property-detail .wrap-walksore .progress-box .progress-walk svg { + position: absolute; +} + +.flat-property-detail .wrap-walksore .progress-box .content h4 { + margin-bottom: 5px; +} + +.flat-property-detail .wrap-walksore .progress-box:last-child { + margin-bottom: 0; +} + +.flat-property-detail .wrap-nearby { + padding: 20px 20px 12px; +} + +.flat-property-detail .wrap-nearby .icon { + width: 68px; + height: 68px; + border-radius: 50%; + background-color: #FF7101; + display: flex; + align-items: center; + justify-content: center; + margin-right: 20px; +} + +.flat-property-detail .wrap-nearby .content { + width: 100%; +} + +.flat-property-detail .wrap-nearby .content h4 { + margin-bottom: 5px; + margin-top: 1px; +} + +.flat-property-detail .wrap-nearby .content .title-box { + margin-bottom: 8px; +} + +.flat-property-detail .wrap-nearby .content .title-box .title-item { + margin-right: 10px; +} + +.flat-property-detail .wrap-nearby .content .title-box .star { + margin-right: 8px; +} + +.flat-property-detail .wrap-nearby .content .title-box .star svg { + margin-right: 2px; +} + +.flat-property-detail .wrap-nearby .box-1 { + padding-bottom: 12px; + margin-bottom: 20px; + border-bottom: 1px solid #B6B6B6; +} + +.flat-property-detail .wrap-nearby .box-2 .content .title-box .star { + margin-right: 0; +} + +.flat-property-detail .wrap-form { + padding: 20px 20px 20px; +} + +.flat-property-detail .wrap-form .comments .comment-form fieldset { + margin-bottom: 20px; +} + +.flat-property-detail .wrap-form .comments .comment-form label.checkbox-wrap { + padding-bottom: 13px; +} + +.flat-property-detail .wrap-form .comments .comment-form .nice-select { + padding: 15px 20px 14px 16px; + margin-bottom: 30px; +} + +.flat-property-detail .wrap-form .comments .comment-form .inner-1 .nice-select { + margin-top: 10px; +} + +.flat-property-detail .wrap-form .comments .comment-form .inner-2 { + margin-bottom: 30px; +} + +.flat-property-detail .wrap-form .comments .comment-form button { + width: auto; +} + +.flat-property-detail .wrap-review { + padding: 20px 20px 18px; +} + +.flat-property-detail .wrap-review .box-title { + margin-bottom: 12px; +} + +.flat-property-detail .wrap-review .box-title .star { + margin-left: 0; +} + +.flat-property-detail .wrap-review .box-title .star svg { + width: 20px; + height: 20px; + margin-right: 10px; +} + +.flat-property-detail .wrap-review .box-title h3 { + margin-right: 10px; +} + +.flat-property-detail .wrap-review .box-title .sort-inner span { + margin-right: 5px; +} + +.flat-property-detail .wrap-review .box-title .sort-inner a::after { + content: "\f078"; + font-family: "Font Awesome 5 Pro"; + font-weight: 400; + color: #120A21; + font-size: 12px; + margin-left: 12px; +} + +.flat-property-detail .wrap-review .comment-list li { + margin-bottom: 37px; + padding-bottom: 33px; + border-bottom: 1px solid #EDEDED; +} + +.flat-property-detail .wrap-review .comment-list li:last-child { + margin-bottom: 0; + padding-bottom: 0; + border-bottom: 0; +} + +.flat-property-detail .wrap-review .comment-list li .comment-list-wrap { + margin-bottom: 19px; +} + +.flat-property-detail .wrap-review .comment-list li .comment-list-wrap .images { + width: 60px; + height: 60px; + border-radius: 100%; + overflow: hidden; +} + +.flat-property-detail .wrap-review .comment-list li .comment-list-wrap .content { + padding: 0px 0px 0 20px; +} + +.flat-property-detail .wrap-review .comment-list li .comment-list-wrap .content h5 { + margin-bottom: 5px; +} + +.flat-property-detail .wrap-review .comment-list li .texts { + margin-bottom: 16px; +} + +.flat-property-detail .wrap-review .comment-list li .helpful { + margin-left: 12px; +} + +.flat-property-detail .wrap-review .comment-list li .helpful a { + padding: 3.5px 10.5px; + border-radius: 10px; + border: 1px solid #EDEDED; +} + +.flat-property-detail .wrap-contact h3 { + margin-bottom: 5px; +} + +.flat-property-detail .wrap-contact .titles { + margin-bottom: 12px; +} + +.flat-property-detail .wrap-contact .star svg { + width: 19px; + height: 19px; + margin-right: 7px; +} + +.flat-property-detail .wrap-contact .comments .comment-form .message-wrap { + margin-bottom: 14px; +} + +.flat-property-detail .wrap-contact .title-rating { + margin-right: 24px; +} + +.flat-property-detail.style2 { + padding-top: 0; +} + +.flat-property-detail.style2 .wrap-house { + margin-top: -73px; + padding: 19px 20px; + border-radius: 10px; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.0784313725); +} + +.flat-property-detail.property-detail2 .wrap-style { + border-radius: 0px; + box-shadow: unset; + padding: 0; +} + +.flat-property-detail.property-detail2 .titles h3 { + position: relative; + display: initial; +} + +.flat-property-detail.property-detail2 .titles h3::before { + content: ""; + width: 100%; + height: 2px; + background-color: #FF7101; + position: absolute; + bottom: -15px; +} + +.flat-property-detail.property-detail2 .titles.style h3::before { + bottom: -30px; +} + +.flat-property-detail.property-detail2 .title-style { + position: relative; +} + +.flat-property-detail.property-detail2 .title-style::before { + content: ""; + width: 100%; + height: 2px; + background-color: #FF7101; + position: absolute; + bottom: -15px; +} + +.flat-property-detail.property-detail2 .title-style h3::before { + display: none; +} + +.flat-property-detail.property-detail2 .wrap-overview { + margin-bottom: 34px; +} + +.flat-property-detail.property-detail2 .wrap-text { + margin-bottom: 50px; +} + +.flat-property-detail.property-detail2 .wrap-featured { + margin-bottom: 48px; +} + +.flat-property-detail.property-detail2 .wrap-map { + margin-bottom: 37px; +} + +.flat-property-detail.property-detail2 .wrap-map .box { + margin-bottom: 10px; +} + +.flat-property-detail.property-detail2 .wrap-floor { + padding-right: 30px; + margin-bottom: 38px; +} + +.flat-property-detail.property-detail2 .wrap-floor .titles { + padding-bottom: 21px; + margin-bottom: 20px; +} + +.flat-property-detail.property-detail2 .wrap-floor .titles h3::before { + bottom: -20px; +} + +.flat-property-detail.property-detail2 .wrap-floor .flat-accordion .flat-toggle .toggle-title { + padding: 0px 10px 13px 22px; +} + +.flat-property-detail.property-detail2 .wrap-form, +.flat-property-detail.property-detail2 .wrap-video { + margin-bottom: 50px; +} + +.flat-property-detail.property-detail2 .wrap-walksore, +.flat-property-detail.property-detail2 .wrap-virtual { + margin-bottom: 51px; +} + +.flat-property-detail.property-detail2 .wrap-nearby { + padding-right: 39px; + margin-bottom: 44px; +} + +.flat-property-detail.property-detail2 .wrap-review { + margin-bottom: 47px; +} + +.flat-property-detail.property-detail2 .wrap-review .box-title { + margin-bottom: 22px; +} + +.flat-property-detail.property-detail2 .wrap-review .comment-list .content { + padding: 1px 0px 0 21px; +} + +.flat-property-detail.property-detail2 .wrap-contact { + margin-bottom: 0; +} + +.flat-property-detail.property-detail2 .wrap-contact .titles { + margin-bottom: 20px; + padding-bottom: 13px; +} + +.flat-property-detail.property-detail2 .wrap-contact .titles h3::before { + bottom: -40px; +} + +.flat-sale-detail .heading-section { + margin-bottom: 30px; +} + +.flat-sale-detail .heading-section .title-heading { + margin-bottom: 10px; +} + +.flat-error { + padding: 32px 0 100px; +} + +.flat-error .images { + margin-bottom: 71px; +} + +.flat-error .heading-sections h2 { + margin-bottom: 19px; +} + +.flat-error .heading-sections p { + padding: 0 320px; + margin-bottom: 40px; +} + +.flat-error .heading-sections .sc-button { + width: 188px; + height: 54px; +} + +.flat-blog-grid .flat-blog { + padding-bottom: 10px; + border-bottom: 1px solid #EDEDED; +} + +.flat-blog-grid .box { + margin-bottom: 31.5px; +} + +.flat-blog-grid .box .date { + position: absolute; + top: 10px; + left: 10px; + color: #FFFFFF; + background-color: #FF7101; + padding: 6px 12px; + border-radius: 99px; + font-family: "Inter", sans-serif; +} + +.flat-blog-grid .box .content { + padding-top: 26px; +} + +.flat-blog-grid .box .content .sub-box { + margin-bottom: 9px; +} + +.flat-blog-grid .box .content .sub-box a { + font-family: "Inter", sans-serif; +} + +.flat-blog-grid .box .content .sub-box .category { + position: relative; + margin-left: 11px; + padding-left: 8px; +} + +.flat-blog-grid .box .content .sub-box .category:not(:first-child)::before { + position: absolute; + content: ""; + width: 1px; + background-color: #E4E4E4; + left: 0; + top: 5px; + bottom: 5px; +} + +.flat-blog-grid .box .content h3 { + margin-bottom: 11px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.flat-blog-grid .box .content>p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.flat-blog-grid .themesflat-pagination { + margin-top: 27px; +} + +.flat-map .map-content { + width: 100%; + height: 690px; +} + +.flat-blog-list .box-heading { + margin-bottom: 60px; +} + +.flat-blog-list .wrap-blog { + padding-right: 10px; +} + +.flat-blog-list .wrap-blog .box { + margin-bottom: 36px; + border-bottom: 1px solid #EDEDED; + padding-bottom: 36px; +} + +.flat-blog-list .wrap-blog .box:last-child { + margin-bottom: 25px; +} + +.flat-blog-list .wrap-blog p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.flat-blog-detail { + padding: 0; +} + +.flat-blog-detail .post { + padding-right: 10px; +} + +.flat-blog-detail .title-heading { + margin-bottom: 17px; +} + +.flat-blog-detail .icon-boxs { + padding-left: 2px; + margin-bottom: 30px; + padding-bottom: 32px; + border-bottom: 1px solid #EDEDED; +} + +.flat-blog-detail .icon-boxs svg { + margin-right: 4px; +} + +.flat-blog-detail .texts-1 { + margin-bottom: 30px; +} + +.flat-blog-detail .image { + margin-bottom: 29px; +} + +.flat-blog-detail .image img { + border-radius: 16px; +} + +.flat-blog-detail h3 { + margin-bottom: 16px; +} + +.flat-blog-detail .content-img { + margin-bottom: 31px; +} + +.flat-blog-detail .content-img .sub-title { + margin-bottom: 3px; +} + +.flat-blog-detail .texts-2 { + margin-bottom: 22px; +} + +.flat-blog-detail .texts-3 { + margin-bottom: 15px; + padding-bottom: 30px; + border-bottom: 1px solid #B6B6B6; +} + +.flat-blog-detail .text-box { + background-color: rgba(255, 113, 1, 0.06); + border-left: 4px solid #FF7101; + padding: 32px 34px 28px 26px; + border-radius: 10px; + margin-bottom: 21px; +} + +.flat-blog-detail .text-box>p { + margin-bottom: 26px; +} + +.flat-blog-detail .box-image { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 20px; + margin-bottom: 20px; +} + +.flat-blog-detail .tag-wrap { + margin-bottom: 34px; + padding-top: 18px; + margin-top: 30px; + border-top: 1px solid #EDEDED; +} + +.flat-blog-detail .tags p { + margin-right: 9px; + margin-bottom: 10px; +} + +.flat-blog-detail .tags a { + display: inline-block; + padding: 7px 8px; + font-size: 14px; + margin-right: 10px; + margin-bottom: 10px; + border: 1px solid #EDEDED; + font-family: "Inter", sans-serif; + border-radius: 99px; + font-weight: 400; + display: flex; + align-items: center; + justify-content: center; +} + +.flat-blog-detail .tags a:hover { + background-color: #FF7101; + border: 1px solid #FF7101; + color: #FFFFFF; +} + +.flat-blog-detail .share-box { + margin-top: -8px; +} + +.flat-blog-detail .share-box p { + margin-right: 9px; +} + +.flat-blog-detail .share-box .icon-social a { + border: 1px solid #B6B6B6; + background-color: unset; + color: #24272C; + margin-left: 1px; +} + +.flat-blog-detail .share-box .icon-social a:hover { + border: 1px solid #FF7101; + background-color: #FF7101; + color: #FFFFFF; +} + +.wrap-review { + padding: 0; + margin-bottom: 49px; +} + +.wrap-review .box-title { + margin-bottom: 20px; +} + +.wrap-review .comment-list .content { + padding: 1px 0px 0 21px; +} + +.wrap-review .image-wrap { + margin-bottom: 17px; +} + +.wrap-review .image-wrap img { + min-width: 141px; + object-fit: cover; + height: 79px; + border-radius: 16px; +} + +.wrap-form { + padding: 0; +} + +.wrap-form .title { + margin-bottom: 30px; +} + +.wrap-form .title h2 { + margin-bottom: 8px; +} + +.flat-video { + padding-top: 144px; + padding-bottom: 150px; + background: url(/assets/images/section/bg-video.html) center center no-repeat; + background-size: cover; + position: relative; +} + +.flat-video.page { + background: url(/assets/images/section/bg-video-page.html) center center no-repeat; + background-size: cover; + border-radius: 5px; + padding-bottom: 151px; +} + +.flat-video.page .overlay { + border-radius: 5px; +} + +.flat-video.page .heading-section { + margin-bottom: 13px; +} + +.flat-video-page { + padding-bottom: 104px; +} + +.post-video img { + border-radius: 30px; +} + +.post-video a { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 86px; + height: 86px; + background: #FFFFFF; + border-radius: 50%; + text-align: center; + line-height: 86px; +} + +.post-video a svg path { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.post-video a:hover { + background: #FF7101; +} + +.post-video a:hover svg path { + fill: #FFFFFF; +} + +.ripple::before, +.ripple::after { + position: absolute; + top: 50%; + left: 50%; + width: 86px; + height: 86px; + border-radius: 50%; + -ms-border-radius: 50%; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + -o-border-radius: 50%; + transform: translate(-50%, -50%); + -ms-box-shadow: 0 0 0 50px rgba(255, 255, 255, 0.04); + -o-box-shadow: 0 0px 0 50px rgba(255, 255, 255, 0.04); + box-shadow: 0px 0px 0px 20px rgba(255, 255, 255, 0.3); + -webkit-animation: ripple 2s infinite; + animation: ripple 2s infinite; +} + +.ripple::before { + content: ""; + position: absolute; + -webkit-animation-delay: 0.6s; + animation-delay: 0.6s; +} + +.ripple::after { + content: ""; + position: absolute; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +.flat-count { + background: #24272C; + color: #FFFFFF; + padding: 80px 0 90px; +} + +.flat-count .themes-count { + margin-left: -60px; + border-radius: 12px; +} + +.flat-count .counter-box { + position: relative; + background-color: #FF7101; + width: calc(33.333% - 60px); + margin-left: 60px; + margin-right: 10px; + padding: 30px; + box-shadow: 9px 9px 0 #EDEDED; +} + +.flat-count .counter-box .icon { + margin-right: 31px; + width: 140px; + height: 160px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #FFFFFF; + border-radius: 12px; + background: #9664FF; +} + +.flat-count .counter-box .number { + font-size: 100px; + font-weight: 600; + margin-bottom: 42px; + color: #FFFFFF; +} + +.flat-count .counter-box .number.number-style::after { + content: "k"; + font-size: 100px; + color: #FFFFFF; + font-family: "Outfit", sans-serif; +} + +.flat-count .counter-box .content { + padding-top: 26px; +} + +.flat-faq { + padding-top: 92px; + padding-bottom: 102px; +} + +.flat-faq.page { + padding: 100px 0 87px; +} + +.flat-faq .text-box span { + padding-right: 4px; +} + +.flat-faq .wrap-author { + margin-top: 56px; +} + +.flat-faq .wrap-author .images { + margin-bottom: 31px; +} + +.flat-faq .wrap-author .content { + margin-bottom: 31px; +} + +.flat-faq .wrap-author .content h4 { + margin-bottom: 4px; +} + +.flat-faq .wrap-author .button-faq a { + width: 220px; + margin-left: 4px; + margin-right: 4px; +} + +.flat-faq .wrap-author .button-faq a:nth-child(1) span { + margin-right: 8px; +} + +.flat-faq .wrap-author .button-faq svg { + margin-right: 0; +} + +.loan-calculator .map-content { + width: 100%; + height: 403px; +} + +.loan-calculator { + padding: 110px 0px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-attachment: fixed; + margin: 0px 12px; + border-radius: 24px; +} + +.loan-calculator.inner-1 { + background-image: url(/assets/images/section/bg-1.jpg); +} + +.loan-calculator.inner-3 { + background-image: url(/assets/images/section/bg-3.jpg); +} + +.loan-calculator.inner-4 { + background-image: url(/assets/images/section/bg-4.jpg); +} + +.loan-calculator.inner-8 { + background-image: url(/assets/images/section/bg-11.jpg); +} + +.loan-calculator.inner-6 { + background-image: url(/assets/images/section/bg-7.jpg); + position: relative; + overflow: hidden; + padding: 191px 0px 191px 0px !important; +} + +.loan-calculator.inner-7 { + background-image: url(/assets/images/section/bg-8.jpg); + position: relative; + overflow: hidden; + padding: 100px 0px 237px 0px !important; +} + +.loan-calculator.inner-7 .heading { + max-width: 550px; + width: 100%; + margin: 0 auto; + z-index: 2; + position: relative; +} + +.loan-calculator.inner-7 .heading h2 { + margin-bottom: 17px; +} + +.loan-calculator.inner-5 { + background-image: url(/assets/images/section/bg-6.jpg); + position: relative; + overflow: hidden; + padding: 100px 0px 298px 0px !important; +} + +.loan-calculator.inner-5::before { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + content: ""; + background-color: rgba(0, 0, 0, 0.2); + z-index: 1; +} + +.loan-calculator.inner-5 .heading { + max-width: 618px; + width: 100%; + margin: 0 auto; + z-index: 2; + position: relative; +} + +.loan-calculator.inner-5 .heading h2 { + margin-bottom: 17px; +} + +.loan-calculator.inner-5 .heading p { + margin-bottom: 42px; +} + +.loan-calculator.inner-2 { + background-image: url(/assets/images/section/bg-2.jpg); + padding: 100px 0px 188px 0px !important; + position: relative; + overflow: hidden; +} + +.loan-calculator.inner-2::before { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + content: ""; + background-color: rgba(0, 0, 0, 0.2); + z-index: 1; +} + +.loan-calculator.inner-2 .heading { + max-width: 618px; + width: 100%; + margin: 0 auto; + z-index: 2; + position: relative; +} + +.loan-calculator.inner-2 .heading h2 { + margin-bottom: 17px; +} + +.loan-calculator.inner-2 .heading p { + margin-bottom: 42px; +} + +.section-feature-specs .image-feature-specs .image-inner1 { + max-width: 398px; + border-radius: 24px; + overflow: hidden; + margin-left: 8.7em; +} + +.section-feature-specs .image-feature-specs .image-inner2 { + margin-top: -11em; + margin-left: 4px; + margin-bottom: -2px; +} + +.section-feature-specs .image-feature-specs .box-specs { + background-color: #FFAD6B; + border-radius: 15px; + position: absolute; + opacity: 0.1; +} + +.section-feature-specs .image-feature-specs .box-specs.small { + width: 60px; + height: 60px; + right: 142px; + top: 27%; +} + +.section-feature-specs .image-feature-specs .box-specs.large { + width: 114px; + height: 114px; + right: 47px; + top: 0; +} + +.section-feature-specs .content-feature-specs { + margin-top: 73px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content { + border-radius: 24px; + padding: 29px; + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .text-address { + margin-bottom: 8px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .link-style-1 { + margin-bottom: 12px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .icon-box { + gap: 9px; + margin-bottom: 40px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .icon-box i { + margin-right: 4px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .days-box .img-author img { + width: 60px; + height: 60px; + border-radius: 100%; + margin-right: 12px; +} + +.section-feature-specs .content-feature-specs .feature-specs-box .content .bottom-box { + border-top: 1px solid #EDEDED; + margin-top: 26px; + padding-top: 27px; +} + +.section-car-list { + border-radius: 16px; + background-color: #FFFFFF; + z-index: 2; + position: relative; +} + +.section-car-list .partner-slide2 { + padding: 30px 15px 0px 15px; +} + +.section-why-choose-us .image-wcs .image-inner1 { + max-width: 410px; + border-radius: 24px; + overflow: hidden; +} + +.section-why-choose-us .image-wcs .image-inner2 { + position: absolute; + bottom: -21%; + right: -20%; +} + +.section-why-choose-us .image-wcs .icon-list { + display: flex; + flex-direction: column; + align-items: flex-start; + position: absolute; + z-index: 2; + top: 23.7%; + right: 10%; +} + +.section-why-choose-us .image-wcs .icon-list .tf-icon-list:not(:last-child) { + margin-bottom: 24px; +} + +.section-why-choose-us .content-wcs { + padding-left: 75px; +} + +.section-why-choose-us .tf-icon-box-list .tf-icon-box { + margin-bottom: 20px; +} + +.section-why-choose-us2 .image-wcs .image-inner1 { + max-width: 410px; + border-radius: 24px; + overflow: hidden; +} + +.section-why-choose-us2 .image-wcs .image-inner2 { + float: right; + margin-top: -24.1em; +} + +.section-why-choose-us2 .image-wcs .tf-icon-list { + position: absolute; + z-index: 1; +} + +.section-why-choose-us2 .image-wcs .tf-icon-list.po-1 { + right: 11%; + top: 15.2%; +} + +.section-why-choose-us2 .image-wcs .tf-icon-list.po-2 { + left: 10%; + top: 60.2%; +} + +.section-why-choose-us2 .image-wcs .tf-icon-list.po-3 { + left: 15%; + bottom: -24%; +} + +.section-why-choose-us2 .content-wcs { + padding-top: 112px; + padding-right: 77px; +} + +.section-why-choose-us2 .content-wcs .heading-section { + margin-bottom: 30px; +} + +.section-why-choose-us2 .tf-icon-box-list .tf-icon-box { + margin-bottom: 20px; +} + +.find-car-h10 .image-wcs { + height: 100%; +} + +.find-car-h10 .image-wcs .bg-image-5 { + background-image: url(/assets/images/section/bg-9.jpg); + position: relative; + overflow: hidden; + padding: 110px 0px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + border-radius: 24px; + height: 100%; +} + +.find-car-h10 .content-wcs { + padding-top: 55px; + padding-bottom: 56px; + padding-left: 30px; +} + +.why-choose-us-5 .image-wcs { + height: 100%; +} + +.why-choose-us-5 .image-wcs .bg-image-5 { + background-image: url(/assets/images/section/bg-5.jpg); + position: relative; + overflow: hidden; + padding: 110px 0px; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + background-attachment: fixed; + border-radius: 24px; + height: 100%; +} + +.why-choose-us-5 .content-wcs { + padding-top: 66px; + padding-left: 80px; + padding-right: 20.3em; + padding-bottom: 48px; +} + +.why-choose-us-5 .content-wcs .heading-section { + margin-bottom: 26px; +} + +.why-choose-us-5 .tf-icon-box-list .tf-icon-box { + margin-bottom: 20px; +} + +.why-choose-us-10 .image-wcs { + height: 100%; +} + +.why-choose-us-10 .image-wcs .bg-image-5 { + background-image: url(/assets/images/section/bg-10.jpg); + position: relative; + overflow: hidden; + background-repeat: no-repeat; + background-size: cover; + background-position: center; + border-radius: 24px; + height: 100%; +} + +.why-choose-us-10 .content-wcs { + padding-top: 66px; + padding-left: 20.8em; + padding-right: 80px; + padding-bottom: 50px; +} + +.why-choose-us-10 .content-wcs .heading-section { + margin-bottom: 26px; +} + +.why-choose-us-10 .tf-icon-box-list .tf-icon-box { + margin-bottom: 20px; +} + +.section-icon-list { + margin-top: -11.4em; +} + +.mask-0-3 .swiper-slide { + opacity: 0.3; +} + +.mask-0-3 .swiper-slide-prev, +.mask-0-3 .swiper-slide-active, +.mask-0-3 .swiper-slide-next { + opacity: 1; +} + +/* listing details ---------- +-------------------------*/ +.image-list-details { + position: relative; + overflow: hidden; + border-radius: 16px; +} + +.image-list-details:hover .specs-features-wrap { + opacity: 1; + visibility: visible; +} + +.image-list-details .image { + width: 100%; +} + +.image-list-details .image img { + width: 100%; +} + +.specs-features-wrap { + position: absolute; + left: 10px; + bottom: 10px; + z-index: 1; + gap: 10px; + opacity: 0; + visibility: hidden; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.specs-features { + display: flex; + align-items: center; + gap: 10px; + background: #FFFFFF; + padding: 9px 20px; + border-radius: 12px; +} + +.specs-features:hover { + background: #FF7101; +} + +.specs-features:hover .icon, +.specs-features:hover span { + color: #FFFFFF !important; +} + +.specs-features .icon { + color: #24272C; +} + +.widget-listing { + padding: 30px; + border: 1px solid #EDEDED; + border-radius: 16px; +} + +.widget-listing .listing-header h3 { + margin-bottom: 7px; +} + +.listing-recommended .item { + gap: 20px; +} + +.listing-recommended .item:not(:last-child) { + margin-bottom: 21px; +} + +.listing-recommended .item .image { + max-width: 130px; + overflow: hidden; + border-radius: 16px; +} + +.listing-recommended .item .content h6 { + margin-bottom: 10px; +} + +.listing-recommended .item .content h6:hover { + color: #FF7101; +} + +.heading-widget .title { + margin-bottom: 17px; +} + +.heading-widget .icon-box { + gap: 10px; + margin-bottom: 26px; + width: 100% !important; +} + +.heading-widget .money { + font-size: 25px; + font-weight: bold; + line-height: 37.8px; + margin-bottom: 10px; + margin-top: 10px; +} + +.heading-widget .price-wrap { + /* margin-bottom: 16px; */ + align-items: flex-start; + padding-top: 3%; +} + +.heading-widget .price-wrap p { + line-height: 16.8px; + margin-bottom: 2px; +} + +.heading-widget .price-wrap p:first-child { + margin-right: 10px; +} + +.action-icon { + gap: 8px; +} + +.action-icon.style-1 .icon { + width: 60px; + height: 60px; + line-height: 60px; + border-radius: 100%; +} + +.action-icon .icon { + width: 40px; + height: 40px; + border: 1px solid #EDEDED; + text-align: center; + line-height: 37px; + border-radius: 10px; + color: #B6B6B6; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.action-icon .icon:hover { + border: 1px solid #FF7101; + color: #FFFFFF; + background-color: #FF7101; +} + +.prolile-info { + gap: 20px; + padding-bottom: 28px; + border-bottom: 1px solid #EDEDED; +} + +.prolile-info .image { + width: 90px; + height: 90px; + border-radius: 100%; + overflow: hidden; +} + +.prolile-info .content h4 { + margin-bottom: 10px; +} + +.prolile-info .content .verified { + background-color: rgba(126, 211, 33, 0.1); + border: 1px solid rgba(126, 211, 33, 0.14); + border-radius: 100px; + color: #7ED321; + padding: 4px 10px; + gap: 6px; +} + +.profile-map .list-icon-pf { + margin-bottom: 16px; +} + +.profile-map .map #map, +.profile-map .map iframe { + width: 100%; + height: 190px; + border-radius: 16px; +} + +.profile-contact h6 { + margin-bottom: 10px; +} + +.profile-contact .btn-contact { + gap: 10px; +} + +.profile-contact .btn-contact .btn-pf { + padding: 15px 26.5px; + border-radius: 14px; + display: flex; + align-items: center; + justify-content: center; + color: #FFFFFF; + width: 100%; + gap: 10px; +} + +.profile-contact .btn-contact .btn-pf i { + font-size: 16px; +} + +.profile-contact .btn-contact .btn-pf.bg-orange { + background-color: #FF7101; +} + +.profile-contact .btn-contact .btn-pf.bg-orange:hover { + background-color: #7ED321; +} + +.profile-contact .btn-contact .btn-pf.bg-green { + background-color: #7ED321; +} + +.profile-contact .btn-contact .btn-pf.bg-green:hover { + background-color: #FF7101; +} + +.listing-description .tfcl-listing-info>p { + margin-bottom: 22px; +} + +.listing-description .list-file a { + border-radius: 5px; + border: 1px solid #EDEDED; + border-radius: 10px; + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + color: #24272C; + padding: 9px 10px 9px 10px; +} + +.listing-description .list-file a svg { + margin-right: 6px; +} + +.listing-infor-box { + display: flex; + align-items: center; + margin-bottom: 22px; +} + +.listing-infor-box .icon { + margin-right: 10px; + width: 20px; + height: 20px; + display: flex; + align-items: center; + justify-content: left; +} + +.listing-infor-box .content-listing-info { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; +} + +.listing-infor-box .content-listing-info .listing-info-title { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + flex: 1; +} + +.listing-infor-box .content-listing-info .listing-info-value { + font-size: 14px; + font-weight: 600; + line-height: 19.6px; + color: #24272C; + flex: 1; + margin-left: -50px; +} + +.listing-line { + background-color: #EDEDED; + width: 100%; + height: 1px; + margin-top: 40px; + margin-bottom: 40px; +} + +.features-inner { + margin-bottom: 11px; +} + +.features-inner>.inner { + display: grid; + grid-template-columns: repeat(3, 1fr); + padding-bottom: 20px; + gap: 22.5px 25px; +} + +.features-inner>.inner .listing-feature-wrap { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + font-family: "Inter", sans-serif; +} + +.features-inner>.inner .listing-feature-wrap i { + color: #7ED321; + font-size: 18px; + margin-right: 9px; +} + +.listing-calculator.loan-calculator-form fieldset { + margin-bottom: 19px !important; +} + +.listing-calculator.loan-calculator-form .list-total { + margin-top: 10px; +} + +.listing-calculator.loan-calculator-form .button-boxs .sc-button { + min-width: 420px; + width: unset !important; +} + +.listing-location .box-title { + margin-bottom: 30px; +} + +.listing-location .box-title .title-ct { + margin-bottom: 12px; +} + +.listing-location .map-content { + height: 520px; + width: 100%; + border-radius: 16px; +} + +.widget-rating .icon-star { + width: 68px; + height: 68px; + background-color: rgba(255, 113, 1, 0.06); + border-radius: 100%; + text-align: center; + line-height: 68px; + color: #FF7101; + font-size: 32px; + margin-right: 12px; +} + +.widget-rating .number { + font-size: 70px; + font-weight: 700; + line-height: 70px; + color: #FF7101; + margin-right: 20px; +} + +.widget-rating .content>p:not(:last-child) { + margin-bottom: 6px; +} + +.listing-reviews .flat-tabs .box-tab.style5 .tab-title { + margin-bottom: 49px; + white-space: nowrap; +} + +.listing-reviews .wrap-review .comment-list li { + margin-bottom: 31px; + padding-bottom: 30px; +} + +.box-sd { + box-shadow: 0px 8px 20px 0px rgba(0, 0, 0, 0.05); +} + +.listing-detail.style-1 .listing-detail-wrap { + padding-right: 26px; +} + +.listing-detail.style-1 .listing-calculator.loan-calculator-form { + padding: 0; + border-radius: unset; +} + +.tfcl-listing-info.style-grid { + display: flex; + gap: 10px; +} + +.tfcl-listing-info.style-grid .image-list-details { + flex: 1; + -webkit-transition: all 0.3s ease 0s; + -moz-transition: all 0.3s ease 0s; + -ms-transition: all 0.3s ease 0s; + -o-transition: all 0.3s ease 0s; + transition: all 0.3s ease 0s; + display: none; + cursor: pointer; +} + +.tfcl-listing-info.style-grid .image-list-details.item-1, +.tfcl-listing-info.style-grid .image-list-details.item-2, +.tfcl-listing-info.style-grid .image-list-details.item-3, +.tfcl-listing-info.style-grid .image-list-details.item-4, +.tfcl-listing-info.style-grid .image-list-details.item-5, +.tfcl-listing-info.style-grid .image-list-details.item-6 { + display: block; +} + +.tfcl-listing-info.style-grid .image-list-details.active { + flex: 3.7; +} + +.tfcl-listing-info.style-grid .image-list-details.active .specs-features-wrap { + display: flex; +} + +.tfcl-listing-info.style-grid .image-list-details .image { + height: 467px; +} + +.tfcl-listing-info.style-grid .image-list-details .image img { + height: 100%; + object-fit: cover; +} + +.tfcl-listing-info.style-grid .image-list-details .specs-features-wrap { + display: none; +} + +.sale-agents-detail { + border: 1px solid #EDEDED; + border-radius: 16px; + padding: 16px; + gap: 30px; +} + +.sale-agents-detail .image { + min-width: 410px; + border-radius: 16px; + overflow: hidden; +} + +.sale-agents-detail .image img { + height: 100%; + object-fit: cover; +} + +.sale-agents-detail .content { + margin-top: 12px; +} + +.sale-agents-detail .content h2 { + margin-bottom: 10px; +} + +.sale-agents-detail .content .rating { + margin-bottom: 30px; +} + +.sale-agents-detail .content .rating>p { + margin-right: 20px; +} + +.sale-agents-detail .content .rating .start i { + color: #FF7101; + font-size: 13px; +} + +.sale-agents-detail .content .rating .start>span { + margin-left: 10px; +} + +.sale-agents-detail .content>p, +.sale-agents-detail .content .icon-social { + margin-bottom: 30px; +} + +.sale-agents-detail .content .contact { + margin-bottom: 26px; +} + +.sale-agents-detail .content .contact li { + gap: 10px; +} + +.sale-agents-detail .content .contact li:not(:last-child) { + margin-bottom: 7px; +} + +.sale-agents-detail .content .sc-button { + min-width: 235px; +} + +.tf-section-map .map, +.tf-section-map .map-content { + height: 855px; + width: 100%; +} + +.tf-section-contact { + padding: 60px 0px; +} + +.tf-section-contact .contact-left { + padding-right: 28px; +} + +.tf-section-contact .contact-left fieldset { + margin-bottom: 19px; +} + +.tf-section-contact .contact-left fieldset.phone-wrap { + margin-bottom: 21px !important; +} + +.tf-section-contact .contact-right { + margin-top: 22px; +} + +.contact-info { + border: 1px solid #EDEDED; + border-radius: 16px; + padding: 30px; +} + +.contact-info .wrap-info .box-info:not(:last-child) { + margin-bottom: 26px; +} + +.contact-info .wrap-info .box-info h5 { + margin-bottom: 8px; +} + +.carousel-1, +.partner-slide { + padding: 60px 25px; + margin: -60px -25px; +} + +/* Modal Popup ---------- +-------------------------*/ +.popup .modal-content { + border-radius: 30px !important; + border: none !important; + box-shadow: 0px 4px 18px 0px rgba(0, 0, 0, 0.08) !important; + background: #fff; + width: 100%; + position: relative; + display: flex; + flex-direction: column; + overflow: hidden; +} + +.login-form .comments .comment-form fieldset input { + padding: 17px 18px 17px 44px; +} + +.modal-body { + padding: 0px !important; +} + +.modal-body .images img { + width: 100%; + height: 100%; +} + +.modal-body .content { + width: 100%; + padding: 40px 40px 35px; +} + +.modal-body .title-login { + margin-bottom: 40px; +} + +.modal-body .mark-logo { + position: absolute; + bottom: 27px; + left: 20px; +} + +.modal-body.style2 .mark-logo { + bottom: 20px; +} + +.modal-body .comments .comment-form fieldset { + margin-bottom: 22px; +} + +.modal-body .comments .comment-form .style-wrap { + margin-bottom: 20px; +} + +.modal-body .comments .comment-form .img-name { + bottom: 17px; + left: 20px; +} + +.modal-body .title-forgot { + text-align: end; + margin-bottom: 30px; + font-family: "Inter", sans-serif; + line-height: 19.6px; + margin-top: -2px; +} + +.modal-body .sc-button { + width: 100%; + margin-bottom: 17px; +} + +.modal-body .text-box { + margin-bottom: 33px; + font-family: "Inter", sans-serif; +} + +.modal-body .button-box { + margin-left: -10px; +} + +.modal-body .button-box a { + width: calc(50% - 10px) !important; + margin-left: 10px; + border: 1px solid #EDEDED; + padding: 15px 17.5px; + border-radius: 99px; + display: flex; + justify-content: center; +} + +.modal-body .button-box a svg { + margin-right: 10px; +} + +.modal-body .texts.line { + margin-bottom: 29px; + position: relative; +} + +.modal-body .texts.line:before { + width: 38%; + height: 1px; + top: 50%; + left: 0; + content: ""; + background: #EDEDED; + position: absolute; +} + +.modal-body .texts.line:after { + width: 38%; + height: 1px; + top: 50%; + right: 0; + content: ""; + background: #EDEDED; + position: absolute; +} + +.modal-body .btn.btn-primary:hover { + opacity: 0.8; +} + +.modal-content .close { + overflow: hidden; + position: absolute; + right: 42px; + top: 36px; + border: none; + outline: none; + z-index: 10 !important; + opacity: 1; + background: transparent; +} + +.modal-content .close:hover span { + color: #FF7101; +} + +.modal-content .close span { + font-size: 34px; + font-weight: 300; +} + +.modal-body h2 { + text-align: center; + font-weight: 600; +} + +.modal { + z-index: 999999 !important; +} + +.modal-open .modal { + overflow: hidden !important; + padding-right: 0 !important; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 0rem); + max-width: 920px; + margin: auto auto; +} + +.modal.fade.popup.show { + padding-right: 0 !important; +} + +.list-car-list-1 .inner2 .view-car { + display: none; +} + +.list-car-list-1.list-car-grid-1 { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 30px; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 { + display: flex; + flex-direction: column; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2:not(:last-child) { + margin-bottom: 0px; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .image-group { + width: 100% !important; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content { + padding: 16px !important; + display: flex; + justify-content: space-between; + gap: 0px; + flex-wrap: wrap; + flex-direction: column; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner1 .view-car { + display: none; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner1 .money { + margin-bottom: 0px; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 { + width: 100%; + padding-left: 0px; + border-left: unset; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .days-box { + display: flex; + justify-content: space-between; + gap: 10px; + align-items: center; + flex-wrap: wrap; + padding-top: 20px; + margin-top: 20px; + border-top: 1px solid #EDEDED; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .view-car { + display: block; + color: #24272C; + border: 1px solid #24272C; + border-radius: 14px; + padding: 9px 15.5px; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .view-car:hover { + color: #FFFFFF; + border: 1px solid #FF7101; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .img-author { + margin-bottom: 0; +} + +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .chat, +.list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 p.fs-12.lh-16 { + display: none; +} + +.listing-grid-car-wrap .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(4, 1fr); +} + +.listing-wrap-map .list-car-1.list-car-list-1 .box-car-list:not(:last-child) { + margin-bottom: 30px; +} + +.listing-wrap-map .list-car-1.list-car-list-1 .box-car-list { + display: flex; +} + +.listing-wrap-map .list-car-1.list-car-list-1.list-car-grid-1 .image-group { + width: 100% !important; +} + +.listing-wrap-map .list-car-1.list-car-list-1 .content { + gap: 0px; + flex-direction: column !important; + width: 100%; +} + +.listing-wrap-map .list-car-1.list-car-list-1 .content .view-car { + font-size: 14px; + color: #24272C; + border: 1px solid #24272C; + border-radius: 14px; + padding: 9px 15.5px; +} + +.listing-wrap-map .list-car-1.list-car-list-1 .content .view-car:hover { + color: #FFFFFF; + border: 1px solid #FF7101; +} + +.listing-wrap-map .list-car-1.list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(2, 1fr); +} + +.listing-wrap-map .list-car-1.list-car-list-1.list-car-grid-1 .box-car-list { + display: flex; + flex-direction: column; +} + +.listing-wrap-map .list-car-1.list-car-list-1.list-car-grid-1 .box-car-list:not(:last-child) { + margin-bottom: 0px; +} + +/* Footer +-------------------------------------------------------------- */ +#footer { + background: #24272C; + position: relative; + color: #FFFFFF; +} + +#footer h4 { + margin-bottom: 24px; + color: #FFFFFF; +} + +#footer .footer-top { + padding: 40px 0px; +} + +#footer .footer-top .box-footer-top { + gap: 30px; +} + +#footer .footer-top .box-footer-top .icon { + color: #FFFFFF; +} + +#footer .footer-top .box-footer-top .content .title { + color: #FFFFFF; + margin-bottom: 6px; +} + +#footer .footer-top .box-footer-top .content p { + color: #FFFFFF; + opacity: 0.3; +} + +#footer .footer-main { + padding: 40px 0px; + border-top: 1px solid rgba(255, 255, 255, 0.06); + border-bottom: 1px solid rgba(255, 255, 255, 0.06); +} + +/* Widget +-------------------------------------------------------------- */ +/* widget-menu */ +.widget-menu .title-widget { + font-size: 22px; + margin-bottom: 28px; +} + +.widget-menu .box-menu li a { + position: relative; + color: rgba(255, 255, 255, 0.5); + font-family: "Outfit", sans-serif; + font-size: 16px; + line-height: 22px; +} + +.widget-menu .box-menu li:not(:last-child) { + margin-bottom: 11.5px; +} + +.widget-menu .box-menu li:hover a { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + color: #FF7101; +} + +.widget-form p { + margin-bottom: 18px; + color: rgba(255, 255, 255, 0.5); +} + +.widget-form label { + position: relative; + cursor: pointer; +} + +.widget-form label input { + position: absolute; + opacity: 0; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; + margin-right: 0px; + margin-bottom: 0px; +} + +.widget-form .btn-checkbox { + width: 24px; + height: 20px; + border: 1px solid rgba(255, 255, 255, 0.1019607843); + background-color: rgba(255, 255, 255, 0.1); + border-radius: 6px; + justify-content: center; + margin-right: 12px; +} + +.widget-form fieldset { + position: relative; + width: 100%; + margin-bottom: 17px; +} + +.widget-form fieldset input { + border: 1px solid rgba(255, 255, 255, 0.07); + padding: 15px 14px 15px 17px; + color: #FFFFFF; + font-weight: 400; + font-size: 13px; + background-color: rgba(255, 255, 255, 0.07); + border-radius: 14px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; + font-family: "Outfit", sans-serif; + line-height: 19.5px; +} + +.widget-form fieldset input::placeholder { + color: rgba(255, 255, 255, 0.2); + line-height: 19.6px; + font-size: 14px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + font-family: "Inter", sans-serif; +} + +.widget-form fieldset input:focus { + border: 1px solid #FF7101; +} + +.widget-form button { + width: 100%; + height: 50px; + background-color: #FF7101; + border: 1px solid #FF7101; + color: #FFFFFF; + position: relative; + font-size: 15px; + font-weight: 700; + border-radius: 14px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.widget-form button:hover { + background-color: #FFFFFF; + border: 1px solid #24272C; + color: #24272C; +} + +.footer-bottom { + position: relative; + padding: 40px 0; + color: #FFFFFF; +} + +.footer-bottom .footer-bottom-right { + gap: 40px; +} + +.footer-bottom .footer-bottom-right .title-bottom { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + font-family: "Inter", sans-serif; +} + +.icon-social a { + color: #FFFFFF; + font-size: 16px; + width: 40px; + height: 40px; + background-color: rgba(255, 255, 255, 0.08); + text-align: center; + line-height: 45px; + border-radius: 50%; + margin-right: 8px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.icon-social a:hover { + background-color: #FF7101; + color: #FFFFFF; +} + +.icon-social a:last-child { + margin-right: 0; +} + +.icon-social.style1 a { + color: #24272C; + border: 1px solid #EDEDED; +} + +.icon-social.style1 a:hover { + color: #FFFFFF; +} + +.icon-social.style2 a { + width: 44px; + height: 44px; + color: #24272C; + border-radius: 8px; + border: 1px solid #EDEDED; + color: #B6B6B6; +} + +.icon-social.style2 a:hover { + color: #FFFFFF; +} + +.hover-img .img-style { + overflow: hidden; + border-radius: 16px; +} + +.hover-img .img-style img { + width: 100%; + object-fit: cover; + -webkit-transition: all 1s cubic-bezier(0.3, 1, 0.35, 1) 0s; + transition: all 1s cubic-bezier(0.3, 1, 0.35, 1) 0s; + transition: transform 500ms ease; +} + +.hover-img:hover img { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + -webkit-transition: all 2s cubic-bezier(0.3, 1, 0.35, 2) 0s; + transition: all 2s cubic-bezier(0.3, 1, 0.35, 2) 0s; +} + +.hover-img .img-style2 { + overflow: hidden; + border-radius: 10px; +} + +.hover-img .img-style2 .img-hv { + width: 100%; + object-fit: cover; + -webkit-transition: all 1s cubic-bezier(0.3, 1, 0.35, 1) 0s; + transition: all 1s cubic-bezier(0.3, 1, 0.35, 1) 0s; + transition: transform 500ms ease; +} + +.hover-img2 .img-style2 { + overflow: hidden; + border-radius: 8px; +} + +.hover-img2 .img-style2 .img2 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.hover-img2:hover .img2 { + transform: scale(1.1) rotate(3deg); +} + +.hover-img3 .img-style3 { + border-radius: 12px; + overflow: hidden; +} + +.hover-img3 .img-style3 img { + width: 100%; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.hover-img3:hover img { + transform: scale(1.075); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.pagi2 .swiper-pagination2:hover .box-img .icon-practice, +.swiper-button-next2:hover .box-img .icon-practice, +.swiper-button-prev2:hover .box-img .icon-practice, +.hv-one:hover .box-img .icon-practice { + opacity: 1; + z-index: 99; + top: 50%; + transition-delay: 0.5s; +} + +.pagi2 .swiper-pagination2:hover .img-style::before, +.swiper-button-next2:hover .img-style::before, +.swiper-button-prev2:hover .img-style::before, +.hv-one:hover .img-style::before { + opacity: 1; +} + +.pagi2 .swiper-pagination2:hover .change-heart, +.swiper-button-next2:hover .change-heart, +.swiper-button-prev2:hover .change-heart, +.hv-one:hover .change-heart { + opacity: 1 !important; + visibility: visible !important; +} + +.pagi2 .swiper-pagination2 .img-style, +.swiper-button-next2 .img-style, +.swiper-button-prev2 .img-style, +.hv-one .img-style { + overflow: hidden; +} + +.pagi2 .swiper-pagination2 .img-style::before, +.swiper-button-next2 .img-style::before, +.swiper-button-prev2 .img-style::before, +.hv-one .img-style::before { + content: ""; + top: 0; + right: 0; + left: 0; + bottom: 0; + position: absolute; + background: rgba(0, 0, 0, 0.6); + width: 100%; + height: 100%; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -ms-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; + z-index: 10; + opacity: 0; +} + +.pagi2 .swiper-pagination2 .img-style.s-one::before, +.swiper-button-next2 .img-style.s-one::before, +.swiper-button-prev2 .img-style.s-one::before, +.hv-one .img-style.s-one::before { + border-radius: 50%; +} + +.hv-one2:hover .img-style2::before { + opacity: 1; + visibility: visible; +} + +.hv-one2 .img-style2::before { + content: ""; + position: absolute; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + -webkit-transition: all 0.4s ease-out 0s; + -moz-transition: all 0.4s ease-out 0s; + -ms-transition: all 0.4s ease-out 0s; + -o-transition: all 0.4s ease-out 0s; + transition: all 0.4s ease-out 0s; + opacity: 0; + visibility: hidden; + background: rgba(0, 0, 0, 0.5); + z-index: 1; + border-radius: 10px; +} + +.hv-tool { + position: relative; + transition: all 0.3s ease; +} + +.hv-tool::before { + --translate-y: calc(-100% - var(--arrow-size)); + content: attr(data-tooltip); + color: #24272C; + padding: 6px 11px; + background: #FFFFFF; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.1215686275); + width: max-content; + border-radius: 5px; + text-align: center; + font-weight: 600; + font-size: 12px; + transition: all 0.3s ease; +} + +.hv-tool::after { + --translate-y: calc(-1 * var(--arrow-size)); + content: ""; + border: 6px solid transparent; + border-top-color: #FFFFFF; + transition: all 0.3s ease; +} + +.hv-tool::after, +.hv-tool::before { + opacity: 0; + --arrow-size: 6px; + position: absolute; + top: 0px; + left: 45%; + transform: translateX(-50%) translateY(var(--translate-y, 0)); + transition: all 0.3s ease; + -webkit-transition-delay: 0ms; + transition-delay: 0ms; +} + +.hv-tool:hover::before, +.hv-tool:hover::after { + opacity: 1; + -webkit-transition-delay: 0.1s; + transition-delay: 0.1s; + top: -5px; +} + +.hv-tool:hover { + z-index: 2; +} + +.img-style-hover { + overflow: hidden; + border-radius: 24px; +} + +.hover-img-wrap { + position: relative; +} + +.hover-img-wrap::before { + content: ""; + position: absolute; + top: -100%; + left: 0; + width: 50%; + height: 100%; + background: rgb(0, 0, 0); + transition: 0.25s; + z-index: 1; + opacity: 0.1; +} + +.hover-img-wrap::after { + content: ""; + position: absolute; + bottom: -100%; + right: 0; + width: 50%; + height: 100%; + background: rgb(0, 0, 0); + transition: 0.25s; + z-index: 1; + opacity: 0.1; +} + +.hover-img-wrap:hover::after { + bottom: 0; + transition-delay: 0.25s; +} + +.hover-img-wrap:hover::before { + top: 0; +} + +.swiper-button-next:after, +.swiper-button-prev:after { + font-family: "autodeal"; + font-size: 16px; + font-weight: 400; +} + +.swiper-button-next:after { + content: "\e94d"; +} + +.swiper-button-prev:after { + content: "\e947"; +} + +.swiper-button-next.style-1 { + right: -10px; +} + +.swiper-button-next.style-1:after { + content: "\f054"; + color: #24272C; + font-family: "Font Awesome 5 Pro"; +} + +.swiper-button-next.style-2 { + right: -25px; +} + +.swiper-button-next.style-2:after { + content: "\f054"; + color: #24272C; + font-family: "Font Awesome 5 Pro"; +} + +.swiper-button-next.style-3 { + right: 20px; +} + +.swiper-button-prev.style-1 { + left: -10px; +} + +.swiper-button-prev.style-1:after { + content: "\f053"; + color: #24272C; + font-family: "Font Awesome 5 Pro"; +} + +.swiper-button-prev.style-2 { + left: -25px; +} + +.swiper-button-prev.style-2:after { + content: "\f053"; + color: #24272C; + font-family: "Font Awesome 5 Pro"; +} + +.swiper-button-prev.style-3 { + left: 20px; +} + +.swiper-button-next, +.swiper-button-prev { + width: 68px; + height: 68px; + border-radius: 16px; + top: 50%; + z-index: 10; + opacity: 1; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + background: rgba(255, 255, 255, 0.12); + color: #FFFFFF; +} + +.swiper-button-next:hover, +.swiper-button-prev:hover { + background: #FF7101; + opacity: 1; +} + +.swiper-button-next:hover::after, +.swiper-button-prev:hover::after { + color: #FFFFFF; +} + +.swiper-button-next::after, +.swiper-button-prev::after { + color: #FFFFFF; +} + +.swiper-button-next.style-1, +.swiper-button-prev.style-1 { + width: 48px; + height: 48px; + border-radius: 100px; + background: #FFFFFF; + box-shadow: 0px 8px 12px 0px rgba(36, 39, 44, 0.15); +} + +.swiper-button-next.style-1:hover, +.swiper-button-prev.style-1:hover { + background: #FF7101; + opacity: 1; +} + +.swiper-button-next.style-1:hover::after, +.swiper-button-prev.style-1:hover::after { + color: #FFFFFF; +} + +.swiper-button-next.style-2, +.swiper-button-prev.style-2 { + width: 48px; + height: 48px; + border-radius: 100px; + background: #FFFFFF; + box-shadow: 0px 8px 12px 0px rgba(36, 39, 44, 0.15); +} + +.swiper-button-next.style-2:hover, +.swiper-button-prev.style-2:hover { + background: #FF7101; + opacity: 1; +} + +.swiper-button-next.style-2:hover::after, +.swiper-button-prev.style-2:hover::after { + color: #FFFFFF; +} + +.swiper-button-next.style-3, +.swiper-button-prev.style-3 { + width: 50px; + height: 50px; + border-radius: 16px; + background: rgba(0, 0, 0, 0.3); +} + +.swiper-button-next.style-3:hover, +.swiper-button-prev.style-3:hover { + background: #FF7101; + opacity: 1; +} + +.swiper-button-next.style-3:hover::after, +.swiper-button-prev.style-3:hover::after { + color: #FFFFFF; +} + +.swiper-button-next { + right: 50px; + left: auto; +} + +.swiper-button-next.style5-next { + left: auto; + right: 90px; + top: 45%; +} + +.swiper-button-next.style7-next { + right: 102px; + left: auto; + top: 77.5%; +} + +.swiper-button-prev { + right: auto; + left: 50px; +} + +.swiper-button-prev.style5-prev { + left: auto; + right: 90px; + top: 53%; +} + +.swiper-button-prev.style7-prev { + right: 180px; + left: auto; + top: 77.5%; +} + +.slider { + position: relative; + background-position: center center; + background-repeat: no-repeat; + background-size: cover; +} + +.slider .img-slider img { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + object-fit: cover; +} + +.slider .img-slider:before { + background: rgba(0, 0, 0, 0.3); + position: absolute; + content: ""; + top: 0; + right: 0; + left: 0; + bottom: 0; + z-index: 1; +} + +.slider .slider-item { + position: relative; +} + +.slider .slider-item .content { + z-index: 2; + position: relative; +} + +.slider .slider-item .content .heading { + margin-bottom: 60px; +} + +.slider .slider-item .content .sub-title { + font-size: 80px; + font-weight: 100; + line-height: 80px; +} + +.slider .slider-item .content h1 { + margin-bottom: 22px; + font-size: 70px; + font-weight: 600; + line-height: 70px; +} + +.slider .slider-item .content .category-list-car { + gap: 30px; + margin-bottom: 36px; +} + +.slider .slider-item .content .category-list-car li { + gap: 6px; +} + +.slider .slider-item .content .category-list-car li .icon { + color: #FFFFFF; +} + +.slider .slider-item .content .chat-wrap { + gap: 20px; +} + +.slider .slider-item .content .chat-wrap .chat { + font-size: 16px; + font-weight: 500; + line-height: 20px; + background: #FFFFFF; + padding: 15px 20px; + border-radius: 14px; + max-width: 150px; + width: 100%; + text-align: center; + color: #24272C; +} + +.slider .slider-item .content .chat-wrap .image { + width: 42px; + height: 42px; + overflow: hidden; + border-radius: 100%; +} + +.slider .slider-item .content .chat-wrap .content-chat { + padding-left: 7px; +} + +.slider.home .content { + padding: 194px 0px 502px 19px; +} + +.slider.home2 .slider-item .img-slider { + height: 960px; +} + +.slider.home2 .slider-item .img-slider img { + position: relative; +} + +.slider.home2 .slider-item-content .flat-tabs { + position: absolute; + bottom: 118px; + max-width: 410px; +} + +.slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap { + background: #FFFFFF; + border-radius: 16px; + z-index: 10; + position: relative; + padding: 30px; +} + +.slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap h1 { + margin-bottom: 26px; +} + +.slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap .form-sl { + background-color: #FFFFFF; + padding: 0; + position: relative; + z-index: 1; + border-radius: unset; + box-shadow: unset; +} + +.slider.home2 .inner-group-1 { + margin-top: 29px; +} + +.slider.home2 .inner-group-1 .radio-wrap { + margin-bottom: 20px !important; + gap: 20px; +} + +.slider.home2 .inner-group-1 .form-group-1 { + margin-bottom: 10px; +} + +.slider.home2 .inner-group-1 .form-group-1 .nice-select .current { + color: #24272C; +} + +.slider.home2 .button-search a { + min-width: 100%; + margin-bottom: 20px; +} + +.slider.home2 .flat-bt-top .sc-button { + width: 100%; + background-color: transparent; + text-align: center; + border: 1px solid #FF7101; +} + +.slider.home2 .flat-bt-top .sc-button span, +.slider.home2 .flat-bt-top .sc-button svg { + color: #FF7101; +} + +.slider.home3 .slider-item .content { + padding: 136px 0 446px; +} + +.slider.home3 .slider-item .content .heading { + padding: 0; + max-width: 583px; +} + +.slider.home3 .slider-item .content .heading h1 { + margin-bottom: 0; +} + +.slider.home3 .slider-item .content .heading>span { + margin-bottom: 8px; + display: inline-block; +} + +.slider.home3 .wrap-icon { + padding-left: 20px; +} + +.slider.home4 .content { + padding: 260px 0px 479px 0px; +} + +.slider.home4 .content h1 { + margin-bottom: 30px; +} + +.slider.home4 .heading { + max-width: 640px; + text-align: center; + margin: 0 auto; + margin-bottom: 0px !important; +} + +.slider.home5 .slider-item .content { + padding: 173px 0 154px; +} + +.slider.home5 .slider-item .content .heading { + max-width: 530px; + margin-left: 30px; + padding-top: 113px; +} + +.slider.home5 .slider-item .content .heading p { + margin-bottom: 40px; +} + +.slider.home5 .slider-item .content .heading .chat-wrap .chat { + max-width: 204px; +} + +.slider.home6 .slider-item .content { + padding: 90px 0 507px; +} + +.slider.home7 .slider-item .content { + padding: 183px 0px 170px 11px; + gap: 40px; +} + +.slider.home7 .slider-item .content .po-content { + width: 654px; +} + +.slider.home7 .slider-item .content .po-content .heading { + margin-bottom: 60px; +} + +.slider.home7 .slider-item .content .po-content .heading .reserve-wrap { + margin-top: 29px; +} + +.slider.home7 .slider-item .content .po-content .heading .reserve-wrap .reserve { + padding: 15px 63px; + background-color: #FF7101; + border-radius: 16px; + display: inline-block; +} + +.slider.home7 .slider-item .content .controller-button { + margin-top: 10px; + margin-right: 10px; +} + +.slider.home8 { + background-color: #A9B3BC; +} + +.slider.home8 .slider-item .content { + padding: 159px 0px 177px 11px; +} + +.slider.home8 .slider-item .content .heading { + margin-bottom: 0; +} + +.slider.home8 .slider-item .content h1 { + margin-bottom: 38px; + font-size: 150px; + line-height: 150px; +} + +.slider.home9 { + background-image: url(/assets/images/slider/slide9.jpg); + background-attachment: fixed; +} + +.slider.home9 .content { + padding: 224px 0px 243px 0px; +} + +.slider.home9 .content .heading { + max-width: 600px; + margin: 0 auto; + margin-bottom: 100px; +} + +.slider.home9 .content .heading .sub-title2 { + margin-bottom: 10px; +} + +.slider.home9 .content .heading h1 { + font-size: 70px; + line-height: 70px; +} + +.slider.home10 .content { + padding: 191px 0px 455px 0px; +} + +.slider.home10 .content .heading { + margin-bottom: 0px; + max-width: 630px; +} + +.slider.home10 .content .heading h1 { + margin-bottom: 30px; +} + +.slider.home10 .content .heading p { + margin-bottom: 44px; +} + +.slider.home10 .content .heading .chat-wrap .chat { + padding: 15px 61px; + max-width: fit-content; + width: 100%; +} + +.wrap-icon { + z-index: 10; + position: relative; +} + +.wrap-icon .icon-box { + display: flex; + align-items: center; + margin-right: 32px; +} + +.wrap-icon .icon-box:last-child { + margin-right: 0px; +} + +.wrap-icon.link-style-3 { + gap: 28px; + margin-top: 33px; +} + +.wrap-icon.link-style-3 .icon-box { + margin-right: 0; + gap: 6px; +} + +.wrap-icon.link-style-3.link-style-4 { + gap: 10px; +} + +.wrap-icon.link-style-3.link-style-4 .icon-box { + padding: 11px 16px; + background-color: rgba(255, 255, 255, 0.1); + border-radius: 16px; +} + +.wrap-icon.link-style-3.link-style-4 .icon-box a { + color: #FFFFFF; +} + +.flat-filter-search.home .form-sl { + border-radius: 0px 16px 16px 16px; +} + +.flat-filter-search.home .flat-tabs { + margin-top: -15em; +} + +.flat-filter-search.home3 .flat-tabs { + margin-top: -20.6em; +} + +.flat-filter-search.home3 .flat-tabs .form-sl { + border-radius: 16px 16px 16px 16px; +} + +.flat-filter-search.home4 .flat-tabs { + margin-top: -12.4em; +} + +.flat-filter-search.home5 .flat-tabs { + margin-top: -11.9em; +} + +.flat-filter-search.home5 .flat-tabs .form-sl { + border-radius: 16px 16px 0px 0px; +} + +.flat-filter-search.home6 .flat-tabs { + margin-top: -18.2em; +} + +.flat-filter-search.home6 .flat-tabs .form-sl { + border-radius: 16px; +} + +.flat-filter-search.home6 .flat-tabs .wrap-icon.link-style-3 { + margin-top: 24px; +} + +.flat-filter-search.home7 .flat-tabs { + margin-top: -8.5em; +} + +.flat-filter-search.home8 .flat-tabs { + margin-top: -8.5em; +} + +.flat-filter-search.home10 .flat-tabs { + margin-top: -20.2em; +} + +.flat-tabs { + position: relative; +} + +.flat-tabs .tab-title li { + position: relative; + cursor: pointer; + width: 115px; + height: 40px; + background-color: #FFF5E0; + display: flex; + align-items: center; + justify-content: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-tabs .tab-title li:first-child { + border-top-left-radius: 16px; +} + +.flat-tabs .tab-title li:last-child { + border-top-right-radius: 16px; +} + +.flat-tabs .tab-title li h4 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-tabs .tab-title li.style { + color: #FFFFFF; + background-color: rgba(255, 255, 255, 0.2); + width: 120px; + height: 47px; + line-height: 47px; + z-index: 2; + cursor: pointer; + margin-right: 1px; +} + +.flat-tabs .tab-title li.style:hover, +.flat-tabs .tab-title li.style.active { + background-color: #FF7101; +} + +.flat-tabs .tab-title.style { + border-bottom: 1px solid #EDEDED; + margin-bottom: 30px; +} + +.flat-tabs .tab-title.style li { + width: auto; + height: auto; + background-color: transparent !important; + padding: unset; + box-shadow: unset; + margin-right: 25px; +} + +.flat-tabs .tab-title.style li h5 { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + font-size: 16px; + line-height: 22.4px; + padding-bottom: 17px; + border-bottom: 2px solid transparent; +} + +.flat-tabs .tab-title.style li:hover h5, +.flat-tabs .tab-title.style li.active h5 { + font-weight: 500; + color: #24272C !important; + border-bottom: 2px solid #FF7101; +} + +.flat-tabs .tab-title.style1 li { + padding: 9px 18px; + min-width: 102px; + background-color: #EDEDED; + border-radius: 10px; + margin-right: 10px; + font-weight: 500; +} + +.flat-tabs .tab-title.style1 li h5 { + font-style: 16px; +} + +.flat-tabs .tab-title.style1 li:hover, +.flat-tabs .tab-title.style1 li.active { + background-color: #FF7101; +} + +.flat-tabs .tab-title.style1 li:hover h5, +.flat-tabs .tab-title.style1 li.active h5 { + color: #FFFFFF; + font-weight: 500; +} + +.flat-tabs .wrap-icon .icon-autodeal-trending { + font-size: 24px; + margin-right: 13px; + margin-left: 4px; +} + +.flat-tabs .wrap-icon.trending1 { + margin-top: 22px; + z-index: 9; + position: relative; +} + +.flat-tabs .wrap-icon.trending2 { + margin-top: 29px; + z-index: 9; + position: relative; +} + +.flat-tabs .box-tab.style1 .tab-title li { + color: #24272C; + background-color: transparent; + width: 110px; + height: 50px; + line-height: 50px; + z-index: 2; + border-radius: 14px; + margin-right: 0px; + border: 1px solid #24272C; +} + +.flat-tabs .box-tab.style1 .tab-title li:not(:last-child) { + margin-right: 10px; +} + +.flat-tabs .box-tab.style1 .tab-title li:hover, +.flat-tabs .box-tab.style1 .tab-title li.active { + color: #FFFFFF; + background-color: #24272C; + border: 1px solid #24272C; + position: relative; +} + +.flat-tabs .box-tab.style1 .tab-title li:hover::before, +.flat-tabs .box-tab.style1 .tab-title li.active::before { + content: ""; + position: absolute; + bottom: -6px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 6px solid #24272C; +} + +.flat-tabs .box-tab.style2 .tab-title { + margin-bottom: 21px; +} + +.flat-tabs .box-tab.style2 .tab-title li { + color: #FFFFFF; + background-color: transparent; + width: 110px; + height: 50px; + line-height: 50px; + z-index: 2; + border-radius: 14px; + margin-right: 1px; + border: 1px solid #FFFFFF; +} + +.flat-tabs .box-tab.style2 .tab-title li:not(:last-child) { + margin-right: 10px; +} + +.flat-tabs .box-tab.style2 .tab-title li:hover, +.flat-tabs .box-tab.style2 .tab-title li.active { + color: #FFFFFF; + background-color: #FF7101; + border: 1px solid #FF7101; + position: relative; +} + +.flat-tabs .box-tab.style2 .tab-title li:hover::before, +.flat-tabs .box-tab.style2 .tab-title li.active::before { + content: ""; + position: absolute; + bottom: -6px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 6px solid #FF7101; +} + +.flat-tabs .box-tab.style3 .tab-title { + margin-bottom: 30px; +} + +.flat-tabs .box-tab.style3 .tab-title li { + color: #FFFFFF; + background-color: transparent; + width: 110px; + height: 50px; + line-height: 50px; + z-index: 2; + border-radius: 14px; + margin-right: 1px; + border: 1px solid #FFFFFF; +} + +.flat-tabs .box-tab.style3 .tab-title li:not(:last-child) { + margin-right: 10px; +} + +.flat-tabs .box-tab.style3 .tab-title li:hover, +.flat-tabs .box-tab.style3 .tab-title li.active { + color: #24272C; + background-color: #FFFFFF; + border: 1px solid #FFFFFF; + position: relative; +} + +.flat-tabs .box-tab.style3 .tab-title li:hover::before, +.flat-tabs .box-tab.style3 .tab-title li.active::before { + content: ""; + position: absolute; + bottom: -6px; + width: 0; + height: 0; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 6px solid #FFFFFF; +} + +.flat-tabs .box-tab.style4 .tab-title { + margin-bottom: 60px; +} + +.flat-tabs .box-tab.style4 .tab-title li { + color: #24272C; + background-color: transparent; + width: 195px; + height: 50px; + line-height: 50px; + z-index: 2; + border-radius: 100px; + margin-right: 1px; + border: 1px solid #EDEDED; + box-shadow: unset; +} + +.flat-tabs .box-tab.style4 .tab-title li:not(:last-child) { + margin-right: 10px; +} + +.flat-tabs .box-tab.style4 .tab-title li:hover, +.flat-tabs .box-tab.style4 .tab-title li.active { + background-color: #FF7101; + border: 1px solid #FF7101; +} + +.flat-tabs .box-tab.style4 .tab-title li:hover h5, +.flat-tabs .box-tab.style4 .tab-title li.active h5 { + color: #FFFFFF; +} + +.flat-tabs .box-tab.style5 .tab-title { + margin-bottom: 40px; +} + +.flat-tabs .box-tab.style5 .tab-title li { + color: #24272C; + background-color: transparent; + width: 130px; + height: 40px; + line-height: 32px; + z-index: 2; + border-radius: 10px; + margin-right: 1px; + border: 1px solid #EDEDED; + box-shadow: unset !important; + margin-bottom: 10px; +} + +.flat-tabs .box-tab.style5 .tab-title li:not(:last-child) { + margin-right: 10px; +} + +.flat-tabs .box-tab.style5 .tab-title li:hover, +.flat-tabs .box-tab.style5 .tab-title li.active { + color: #FFFFFF; + background-color: #24272C; + border: 1px solid #24272C; +} + +.flat-tabs .content-tab.style2 .form-sl { + padding: 21px 22px; +} + +.flat-tabs .content-tab.style2 .form-sl .wd-find-select .inner-group { + gap: 10px; +} + +.flat-tabs .content-tab.style2 .form-style { + margin-left: 10px; +} + +.flat-tabs .content-tab.style3 .form-sl { + background-color: rgba(255, 255, 255, 0.12); + border-radius: 16px 16px 0px 0px; + padding: 21px 23px; +} + +.flat-tabs .content-tab.style3 .form-sl label { + color: #FFFFFF !important; +} + +.flat-tabs .content-tab.style3 .form-sl .form-group-1:not(:last-child)::before { + background-color: rgba(255, 255, 255, 0.1) !important; +} + +.flat-tabs .content-tab.style3 .form-sl .wd-search-white .group-select .nice-select .current { + color: #FFFFFF !important; +} + +.flat-tabs .content-tab.style3 .form-sl .nice-select:after { + border-bottom: 1.7px solid #FFFFFF; + border-right: 1.7px solid #FFFFFF; +} + +.flat-tabs .content-tab.style3 .form-sl .icon-filter { + background-color: rgba(255, 255, 255, 0.1); +} + +.flat-tabs .content-tab.style3 .form-sl .icon-filter svg { + color: #FFFFFF; +} + +.tab-listing-scroll .nav-pills { + gap: 10px; + flex-wrap: nowrap; + width: 100%; +} + +.tab-listing-scroll .nav-pills .nav-item { + flex: 1; +} + +.tab-listing-scroll .nav-pills .nav-item .nav-link { + border: 1px solid #EDEDED; + color: #24272C; + border-radius: 100px !important; + font-size: 16px; + font-weight: 500; + line-height: 22px; + font-family: "Outfit", sans-serif; + display: block; + width: 100%; + text-align: center; + padding: 14px 8px; +} + +.tab-listing-scroll .nav-pills .nav-item .nav-link.active { + background-color: #FF7101 !important; + border: 1px solid #FF7101; + color: #FFFFFF; +} + +.specifications-wrap .specifications { + background-color: rgba(255, 255, 255, 0.12); + border-radius: 16px; + padding: 20px; + width: 190px; +} + +.specifications-wrap .specifications:not(:last-child) { + margin-bottom: 9px; +} + +.specifications-wrap .specifications .specifications-icon { + color: #FFFFFF; + margin-bottom: 20px; +} + +.specifications-wrap .specifications .specifications-content p { + margin-bottom: 4px; +} + +.specifications-wrap.style2 { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 10px; + width: fit-content; +} + +.specifications-wrap.style2 .specifications { + width: 152px; +} + +.specifications-wrap.style2 .specifications:not(:last-child) { + margin-bottom: 0px; +} + +.specifications-wrap.style2 .specifications .specifications-title .title { + margin-bottom: 11px; +} + +.specifications-wrap.style2 .specifications .specifications-content p { + margin-bottom: 1px; + font-size: 26px; + font-weight: 500; + line-height: 32px; +} + +.specifications-wrap .load-more .chat { + margin-top: 14px; +} + +.specifications-wrap .load-more .chat i { + margin-left: 10px; + font-size: 12px; +} + +.specifications-wrap .load-more .chat:hover { + color: #FF7101 !important; +} + +.controller-button .controller:not(:last-child) { + margin-bottom: 20px; +} + +.controller-button .icon-controller { + width: 68px; + height: 68px; + background-color: rgba(255, 255, 255, 0.12); + text-align: center; + line-height: 68px; + border-radius: 100%; + font-size: 24px; + color: #FFFFFF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.controller-button .icon-controller:hover { + background-color: #FF7101; +} + +.controller-button .content-controller { + padding-right: 12px; +} + +.hide { + opacity: 0.5; +} + +.counter-box { + position: relative; + margin-right: 81px; +} + +.counter-box .number { + font-size: 30px; + font-weight: 700; + margin-bottom: 20px; +} + +.counter-box .number.number-style::after { + content: "+"; + font-size: 30px; +} + +.counter-box .content { + padding-top: 26px; +} + +.wd-search-form-2 { + min-width: 1290px; + left: -30px !important; +} + +.wd-search-form { + margin-top: 30px; + position: absolute; + width: 100%; + background: #fff; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.0784313725); + border-radius: 10px; + padding: 24px 22px 10px; + margin-left: 0px; + left: 0; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + opacity: 0; + visibility: hidden; +} + +.wd-search-form.show { + display: unset; + opacity: 1; + margin-top: 40px; + visibility: visible; +} + +.wd-search-form .group-select .nice-select { + width: 100% !important; +} + +.wd-search-form .form-group { + margin-bottom: 30px; +} + +.wd-search-form .tf-amenities { + padding: 0; + box-shadow: unset; + margin-bottom: 0; +} + +.wd-search-form .box1 { + gap: 0px 30px; +} + +.wd-search-form .box1 input { + padding: 15px 44px 15px 18px; +} + +.wd-search-form .box1 .nice-select { + padding: 13px 17px; + font-weight: 400; + font-size: 14px; + line-height: 22px; + color: #696665; +} + +.wd-search-form .box2 { + gap: 44px; +} + +.wd-search-form .box2 .title { + margin-bottom: 20px; +} + +.wd-search-form .features-wrap h5 { + margin-bottom: 32px; +} + +.wd-search-form .boder-wg { + border-bottom: 1px solid #EDEDED; + margin-bottom: 20px; + margin-top: -3px; +} + +.form-sl { + background-color: #FFFFFF; + padding: 18px 28px; + position: relative; + z-index: 90; + border-radius: 16px 16px 16px 16px; + width: 100%; + max-width: 100%; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.08); +} + +.form-sl .wd-find-select .inner-group { + display: flex; + width: 100%; +} + +.form-sl .wd-find-select .inner-group .form-group-1 { + width: 100%; +} + +.form-sl .wd-find-select .inner-group .form-group-1 label { + font-size: 16px; + font-weight: 600; + line-height: 22.16px; + font-family: "Outfit", sans-serif; + color: #24272C; + margin-bottom: 8px; +} + +.form-sl .wd-find-select .inner-group.select-style { + gap: 50px; +} + +.form-sl .wd-find-select .inner-group.select-style .form-group-1 { + position: relative; +} + +.form-sl .wd-find-select .inner-group.select-style .form-group-1:not(:last-child)::before { + width: 1px; + height: 48px; + content: ""; + position: absolute; + background-color: #EDEDED; + right: -25px; + top: 50%; + transform: translateY(-50%); +} + +.form-sl .wd-find-select .inner-group.select-style .group-select .nice-select { + border: unset !important; + border-radius: 0; + padding: 0px 15px; + margin-left: -15px; + background-color: unset; + font-weight: 400; + font-size: 14px; + line-height: 22px; + color: #696665; +} + +.form-sl .wd-find-select .inner-group.select-style .group-select .nice-select::after { + right: 0; +} + +.icon-filter { + width: 50px; + height: 50px; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(255, 113, 1, 0.1); + border-radius: 10px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.icon-filter svg { + color: #FF7101; +} + +.icon-filter span, +.icon-filter path { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.icon-filter.click, +.icon-filter:hover { + background-color: #FF7101; +} + +.icon-filter.click path, +.icon-filter:hover path { + stroke: #FFFFFF; +} + +.icon-filter.click span, +.icon-filter:hover span { + color: #FFFFFF; +} + +.button-search a { + padding: 15px 21.5px; + min-width: 203px; + text-align: center; +} + +.button-search a span { + margin-right: 8px; +} + +.form-style { + margin-right: 10px; + margin-left: 60px; +} + +.wd-find-select .group-select select { + padding: 16px; + border: 1px solid #B6B6B6; +} + +.wd-find-select .group-select option { + padding: 160px; +} + +.wd-find-select .group-select option:hover { + background-color: #FF7101; +} + +.tf-select { + position: relative; +} + +.tf-select select { + appearance: none; +} + +.tf-select:focus-within:after { + -webkit-transform: rotate(225deg); + -ms-transform: rotate(225deg); + transform: rotate(225deg); +} + +.tf-select:after { + border-bottom: 1.7px solid #3A3A3C; + border-right: 1.7px solid #3A3A3C; + content: ""; + height: 8px; + width: 8px; + margin-top: -4px; + pointer-events: none; + position: absolute; + right: 24px; + top: 50%; + -webkit-transform-origin: 66% 66%; + -ms-transform-origin: 66% 66%; + transform-origin: 66% 66%; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + -webkit-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} + +.wd-find-select .group-select .nice-select.open:after { + -webkit-transform: rotate(225deg); + -ms-transform: rotate(225deg); + transform: rotate(225deg); +} + +.wd-find-select .group-select .nice-select:not(:last-child) { + margin-right: 12px; +} + +.wd-find-select .group-select .nice-select .current { + padding-left: 0; + font-weight: 400; + font-size: 14px; + line-height: 22px; + color: #696665; +} + +.pagi2 .swiper-pagination2 { + position: absolute; + bottom: 4px; + z-index: 100; + left: 50%; + transform: translateX(-50%); +} + +.pagi2 .swiper-pagination-bullet { + background: #FFFFFF; + width: 8px; + height: 8px; + margin: 0 2px !important; + opacity: 1; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.pagi2 .swiper-pagination-bullet.swiper-pagination-bullet-active { + position: relative; + background: #FF7101; + width: 8px; + height: 8px; +} + +.swiper-pagination, +.swiper-pagination3, +.swiper-pagination4, +.swiper-pagination5 { + margin-top: 48px; + margin-bottom: -13px; + text-align: center; + transform: translateY(-50%); + width: 100%; + position: relative; +} + +.swiper-pagination .swiper-pagination-bullet, +.swiper-pagination3 .swiper-pagination-bullet, +.swiper-pagination4 .swiper-pagination-bullet, +.swiper-pagination5 .swiper-pagination-bullet { + background: #E4E4E4; + width: 8px; + height: 8px; + margin: 0 5px !important; + opacity: 1; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active, +.swiper-pagination3 .swiper-pagination-bullet.swiper-pagination-bullet-active, +.swiper-pagination4 .swiper-pagination-bullet.swiper-pagination-bullet-active, +.swiper-pagination5 .swiper-pagination-bullet.swiper-pagination-bullet-active { + position: relative; + background: #FF7101; + margin: 0 7px !important; + width: 10px; + height: 10px; +} + +.swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active::before, +.swiper-pagination3 .swiper-pagination-bullet.swiper-pagination-bullet-active::before, +.swiper-pagination4 .swiper-pagination-bullet.swiper-pagination-bullet-active::before, +.swiper-pagination5 .swiper-pagination-bullet.swiper-pagination-bullet-active::before { + width: 18px; + height: 18px; + border: 2px solid #FF7101; + content: ""; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + border-radius: 100px; +} + +@keyframes waviy { + + 0%, + 40%, + 100% { + transform: translateY(0); + } + + 20% { + transform: translateY(-20px); + } +} + +.slider-item .js-letters { + overflow-y: hidden; +} + +.slider-item .js-letters>* { + display: inline-block; + min-width: 0.21em; + backface-visibility: hidden; + animation: slide-up 0.6s both; +} + +.slider-item .js-letters>*:nth-child(1) { + animation-delay: 0.05s; +} + +.slider-item .js-letters>*:nth-child(2) { + animation-delay: 0.1s; +} + +.slider-item .js-letters>*:nth-child(3) { + animation-delay: 0.15s; +} + +.slider-item .js-letters>*:nth-child(4) { + animation-delay: 0.2s; +} + +.slider-item .js-letters>*:nth-child(5) { + animation-delay: 0.25s; +} + +.slider-item .js-letters>*:nth-child(6) { + animation-delay: 0.3s; +} + +.slider-item .js-letters>*:nth-child(7) { + animation-delay: 0.35s; +} + +.slider-item .js-letters>*:nth-child(8) { + animation-delay: 0.4s; +} + +.slider-item .js-letters>*:nth-child(9) { + animation-delay: 0.45s; +} + +.slider-item .js-letters>*:nth-child(10) { + animation-delay: 0.5s; +} + +.slider-item .js-letters>*:nth-child(11) { + animation-delay: 0.55s; +} + +.slider-item .js-letters>*:nth-child(12) { + animation-delay: 0.6s; +} + +.slider-item .js-letters>*:nth-child(13) { + animation-delay: 0.65s; +} + +.slider-item .js-letters>*:nth-child(14) { + animation-delay: 0.7s; +} + +.slider-item .js-letters>*:nth-child(15) { + animation-delay: 0.75s; +} + +.slider-item .js-letters>*:nth-child(16) { + animation-delay: 0.8s; +} + +.slider-item .js-letters>*:nth-child(17) { + animation-delay: 0.85s; +} + +.slider-item .js-letters>*:nth-child(18) { + animation-delay: 0.9s; +} + +.slider-item .js-letters>*:nth-child(19) { + animation-delay: 0.95s; +} + +.slider-item .js-letters>*:nth-child(20) { + animation-delay: 1s; +} + +.slider-item .js-letters>*:nth-child(21) { + animation-delay: 1.05s; +} + +.slider-item .js-letters>*:nth-child(22) { + animation-delay: 1.1s; +} + +.slider-item .js-letters>*:nth-child(23) { + animation-delay: 1.15s; +} + +.slider-item .js-letters>*:nth-child(24) { + animation-delay: 1.2s; +} + +.slider-item .js-letters>*:nth-child(25) { + animation-delay: 1.25s; +} + +.slider-item .js-letters>*:nth-child(26) { + animation-delay: 1.3s; +} + +.slider-item .js-letters>*:nth-child(27) { + animation-delay: 1.35s; +} + +.slider-item .js-letters>*:nth-child(28) { + animation-delay: 1.4s; +} + +.slider-item .js-letters>*:nth-child(29) { + animation-delay: 1.45s; +} + +.slider-item .js-letters>*:nth-child(30) { + animation-delay: 1.5s; +} + +.slider-item .js-letters>*:nth-child(31) { + animation-delay: 1.55s; +} + +.slider-item .js-letters>*:nth-child(32) { + animation-delay: 1.6s; +} + +.slider-item .js-letters>*:nth-child(33) { + animation-delay: 1.65s; +} + +.slider-item .js-letters>*:nth-child(34) { + animation-delay: 1.7s; +} + +.slider-item .js-letters>*:nth-child(35) { + animation-delay: 1.75s; +} + +.slider-item .js-letters>*:nth-child(36) { + animation-delay: 1.8s; +} + +.slider-item .js-letters>*:nth-child(37) { + animation-delay: 1.85s; +} + +.slider-item .js-letters>*:nth-child(38) { + animation-delay: 1.9s; +} + +.slider-item .js-letters>*:nth-child(39) { + animation-delay: 1.95s; +} + +.slider-item .js-letters>*:nth-child(40) { + animation-delay: 2s; +} + +@keyframes slide-up { + 0% { + opacity: 0; + transform: translate3d(0, 100%, 0); + } + + 80% { + opacity: 1; + } + + 100% { + transform: translate3d(0, 0, 0); + } +} + +@media only screen and (max-width: 1200px) { + .wd-find-select { + justify-content: space-between; + } + + .wd-find-select .group-select .nice-select { + width: 100%; + } + + .wd-find-select .inner-group { + width: 110%; + margin-right: 0px; + } +} + +/* side bar */ +.search-flat { + margin-right: 6px; +} + +.search-flat .search-form .search-field { + box-shadow: 5px 5px 0 black; +} + +.search-flat .search-form .search-field::placeholder { + color: #FFFFFF !important; +} + +.side-bar .widget { + margin-bottom: 20px; + padding: 0; +} + +.side-bar .widget:last-child { + margin-bottom: 0px; +} + +.side-bar .widget-contact { + margin-bottom: 42px; +} + +.side-bar .widget-contact .box-contact { + margin-bottom: 20px; + border-bottom: 1px solid #E4E4E4; + padding-bottom: 19px; +} + +.side-bar .widget-contact .box-contact .img-author { + margin-right: 17px; +} + +.side-bar .widget-contact .box-contact:last-child { + margin-bottom: 0px; + padding-bottom: 0; + border-bottom: 0; +} + +.side-bar .widget-listings { + margin-bottom: 40px; +} + +.side-bar .widget-listings .widget-title { + margin-bottom: 20px; +} + +.side-bar .widget-listings .box-listings { + padding-top: 21px; + padding-bottom: 19px; + border-top: 1px solid #EDEDED; +} + +.side-bar .widget-listings .box-listings .img-listings { + margin-right: 3px; + width: 112px; + flex: none; +} + +.side-bar .widget-listings .box-listings:last-child { + margin-bottom: 0px; + border-bottom: 0px; + padding-bottom: 0; +} + +.side-bar .widget-listings .box-listings .content { + padding-left: 8px; +} + +.side-bar .widget-listings .box-listings .content a { + margin-bottom: 6px; +} + +.side-bar .widget-listings .box-listings .content span.date { + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + font-family: "Inter", sans-serif; +} + +.side-bar .widget-listings .box-listings .content span.date i { + font-size: 13px; + margin-right: 5px; + margin-left: 2px; +} + +.side-bar .newsletter { + margin-bottom: 40px; +} + +.side-bar .newsletter p { + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + font-family: "Inter", sans-serif; + margin-top: -4px; + margin-bottom: 18px; +} + +.side-bar .newsletter .form-newsletter .button-submit { + position: absolute; + right: 0px; + top: 50%; + transform: translateY(-50%); +} + +.side-bar .newsletter .form-newsletter .button-submit button { + background-color: transparent; + line-height: 50px; + border: unset; + padding: 0px 17px; +} + +.side-bar .newsletter .form-newsletter .button-submit button .icon { + color: #FF7101; +} + +.side-bar .widget-tags .widget-title { + margin-bottom: 20px; +} + +.side-bar .widget-marketing { + background-color: #FFE8CE; + border: 0px; + padding: 34px 34px 41px; +} + +.side-bar .widget-marketing .titles { + margin-bottom: 23px; +} + +.side-bar .widget-marketing .buttons { + margin-bottom: 35px; +} + +.side-bar .widget-title { + position: relative; + margin-bottom: 24px; +} + +.side-bar .widget-categories { + margin-bottom: 30px; +} + +.side-bar .widget-categories h3 { + margin-bottom: 20px; +} + +.side-bar .widget-categories li { + position: relative; + padding: 10px 0px 15.5px 0px; + margin: 6px 0px 6px 0px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border-bottom: 1px solid #EDEDED; +} + +.side-bar .widget-categories li:first-child { + margin-top: 0px; +} + +.side-bar .widget-categories li:last-child { + padding-bottom: 20px; +} + +.side-bar .widget-categories li a { + color: #24272C; + font-weight: 500; + line-height: 22.4px; + font-size: 16px; + display: flex; + justify-content: space-between; + font-family: "Outfit", sans-serif; +} + +.side-bar .widget-categories li.active a, +.side-bar .widget-categories li:hover a { + color: #FF7101; +} + +.side-bar .widget-categories li:last-child { + margin-bottom: 0; + border-bottom: unset; +} + +.side-bar .widget-tags .tags_cloud_inner a { + display: inline-block; + padding: 9px 15px; + font-size: 14px; + margin-right: 7px; + margin-bottom: 10px; + border: 1px solid #EDEDED; + font-family: "Inter", sans-serif; + border-radius: 99px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.side-bar .widget-tags .tags_cloud_inner a.active, +.side-bar .widget-tags .tags_cloud_inner a:hover { + color: #FFFFFF; + background-color: #FF7101; +} + +.side-bar .widget-tags .tags_cloud_inner a:last-child { + margin-right: 0; +} + +.side-bar .flat-tabs .tab-title li { + box-shadow: none; +} + +.side-bar .flat-tabs .box-tab { + margin-bottom: 0px; +} + +.side-bar .author-box { + margin-bottom: 23px; +} + +.side-bar .author-box .image-author { + margin-right: 17px; +} + +.side-bar .author-box .image-author img { + width: 65px; + height: 65px; + border-radius: 50%; +} + +.side-bar .title-contact { + margin-bottom: 24px; +} + +.side-bar .comments .comment-form fieldset { + margin-bottom: 12px; +} + +.side-bar .comments .comment-form fieldset.message-wrap { + margin-bottom: 18px; +} + +.side-bar .comments .comment-form fieldset input { + padding: 13px 14px 13px 18px; +} + +.side-bar .comments .comment-form fieldset textarea { + padding: 13px 15px 12px 17px; +} + +.side-bar .comments .button-box button { + margin-right: 10px; + padding: 16.5px 20px 16.5px 20px; +} + +.side-bar .comments .button-box a { + padding: 16.5px 17px 16.5px 20px; +} + +.side-bar .comments .button-box a, +.side-bar .comments .button-box button { + padding: 16px px 16px 21px; + display: flex; + align-items: center; + justify-content: center; +} + +.side-bar .comments .button-box a span, +.side-bar .comments .button-box button span { + margin-right: 10px; + flex: none; +} + +.side-bar .style-tour { + padding: 30px 29px 28px; +} + +.side-bar .widget-tour .title-tour { + margin-bottom: 2px; +} + +.side-bar .widget-tour .p-tour { + margin-bottom: 24px; +} + +.side-bar .widget-tour .days-wrap { + margin-left: -10px; + margin-bottom: 24px; +} + +.side-bar .widget-tour .days-wrap .day-box { + width: calc(25% - 10px); + margin-left: 10px; + padding: 14px 5px; + border: 2px solid #B6B6B6; + border-radius: 10px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + cursor: pointer; +} + +.side-bar .widget-tour .days-wrap .day-box .number { + margin: 8px 0 7px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.side-bar .widget-tour .days-wrap .day-box:hover { + border: 2px solid #FF7101; +} + +.side-bar .widget-tour .days-wrap .day-box:hover .number { + color: #FF7101; +} + +.side-bar .widget-tour h5 { + margin-bottom: 12px; +} + +.side-bar .widget-tour .flat-tabs .tab-title li svg { + margin-right: 8px; +} + +.side-bar .widget-tour .flat-tabs .box-tab { + margin-bottom: 11px; +} + +.side-bar .widget-tour .comments .comment-form .nice-select { + padding: 16px 20px 14px 17px; + margin-bottom: 9px; +} + +.side-bar .widget-tour .comments .comment-form button { + width: 100%; +} + +.side-bar .widget-tour .comments .comment-form button span { + margin-right: 7px; +} + +.side-bar .widget-tour .comments .comment-form fieldset.message-wrap { + margin-bottom: 6px; +} + +.side-bar .widget-tour .widget-form { + margin-bottom: 12px; +} + +.side-bar .widget-tour .widget-form .btn-checkbox { + border: 1px solid #B6B6B6; + width: 20px; +} + +.side-bar .widget-tour .widget-form .sub-title { + margin-right: 3px; + margin-top: 1px; +} + +.search-group { + margin-right: 10px; +} + +.search-group .search-form .search-field { + padding: 14px 15px 14px 43px; + height: 40px; + width: 280px; +} + +.search-group .search-form i { + position: absolute; + color: #8E8E93; + top: 15px; + left: 19px; + cursor: pointer; +} + +.widget-rent { + margin-bottom: 40px; +} + +.widget-rent .search-form .search-field { + padding: 14px 15px 14px 43px; +} + +.widget-rent .search-form i { + position: absolute; + color: #8E8E93; + top: 21px; + left: 19px; + cursor: pointer; +} + +.widget-rent .flat-tabs.style2 .tab-title li { + width: 140px; +} + +.widget-rent .flat-tabs.style2 .tab-title li:nth-child(1) { + margin-right: 10px; +} + +.widget-rent .flat-tabs.style2 .box-tab { + margin-right: 0px; +} + +.widget-rent .form-group-1 { + margin-bottom: 12px; +} + +.widget-rent .wd-find-select .group-select .nice-select { + height: 54px; + width: 100%; + padding: 15px 17px; + margin-bottom: 12px; +} + +.widget-rent .wd-find-select .group-select .nice-select::after { + border-bottom: 1px solid #3A3A3C; + border-right: 1px solid #3A3A3C; +} + +.widget-rent .wd-find-select .form-group-5 .nice-select { + margin-bottom: 26px; +} + +.widget-rent .style-group { + margin-bottom: 13px; +} + +.widget-rent .style-group h4 { + margin-bottom: 8px; +} + +.widget-rent .style-group .inner { + margin-left: -20px; +} + +.widget-rent .style-group .inner .group-select { + width: calc(50% - 20px); + margin-left: 20px; +} + +.widget-rent .button-search a { + width: 100%; +} + +.widget-menu .recent-news li { + margin-bottom: 25px; +} + +.widget-menu .recent-news li:last-child { + margin-bottom: 0px !important; +} + +.widget-menu .recent-news li .thumb { + position: relative; + overflow: hidden; + width: 90px; + height: 90px; + flex: none; + box-shadow: 5px 5px 0 #24272C; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.widget-menu .recent-news li .content { + padding-left: 35px; + padding-top: 5px; +} + +.widget-menu .recent-news li .content .days { + font-size: 14px; + margin-bottom: 4.5px; + color: #FF7101; +} + +.widget-menu .recent-news li .content .days::before { + content: "\f272"; + font-family: "Font Awesome 5 Pro"; + font-size: 16px; + margin-right: 10px; + font-weight: 300; + color: #FF7101; +} + +.widget-menu .recent-news li .content .title { + line-height: 23px; +} + +.widget-menu .recent-news li .content h5 { + margin-bottom: 0; +} + +.widget-menu .recent-news li:hover .thumb { + box-shadow: 5px 5px 0 #FF7101; +} + +.form-filter-siderbar .form-group { + margin-bottom: 17px; +} + +.form-filter-siderbar .wg-box3 { + margin-top: 30px; + margin-bottom: 40px; +} + +.form-filter-siderbar .features-wrap { + margin-top: 30px; +} + +.form-filter-siderbar .features-wrap h4 { + margin-bottom: 14px; +} + +.form-filter-siderbar .tf-amenities label { + margin-bottom: 16px; +} + +.sidebar-right-listing { + max-width: 400px; + border: 1px solid #EDEDED; + padding: 30px; + width: 100%; + flex-shrink: 0; + border-radius: 24px; +} + +.sidebar-right-listing.style-2 { + max-width: 300px; +} + +.sidebar-right-listing .sidebar-title { + margin-bottom: 40px; +} + +.sidebar-right-listing .clear i { + rotate: 45deg; + margin-right: 6px; + display: inline-block; +} + +.listing-grid .btn-view { + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #EDEDED; + border-radius: 10px; + color: #24272C; +} + +.listing-grid .btn-view.grid:hover, +.listing-grid .btn-view.grid.active, +.listing-grid .btn-view.list:hover, +.listing-grid .btn-view.list.active { + background-color: #FF7101; + color: #FFFFFF; +} + +.sidebar-left-listing { + width: 100%; +} + +.sidebar-left-listing .group-select { + min-width: 179px; +} + +.sidebar-left-listing .nice-select { + padding: 8px 17px; + text-align: left; +} + +.sidebar-left-listing .nice-select .current { + color: #24272C !important; + font-weight: 500; +} + +.list-car-list-1 .box-car-list:not(:last-child) { + margin-bottom: 30px; +} + +.list-car-list-1 .box-car-list>.image-group { + width: 300px !important; +} + +.list-car-list-1 .box-car-list .content { + padding: 30px !important; + display: flex; + justify-content: space-between; + gap: 30px; +} + +.list-car-list-1 .box-car-list .content h5 { + font-size: 20px; + line-height: 25px; +} + +.list-car-list-1 .box-car-list .content .days-box { + padding-top: 0px; + margin-top: 0px; + border-top: 1px solid transparent; +} + +.list-car-list-1 .box-car-list .content .days-box .img-author { + margin-bottom: 17px; +} + +.list-car-list-1 .box-car-list .content .icon-box { + gap: 10px; +} + +.list-car-list-1 .box-car-list .content .money { + margin-bottom: 30px; +} + +.list-car-list-1 .box-car-list .content .view-car { + font-size: 16px; + line-height: 20.16px; + color: #FF7101; + border: 1px solid #FF7101; + padding: 13px 38.5px; + text-align: center; +} + +.list-car-list-1 .box-car-list .content .view-car:hover { + background-color: #FF7101; + color: #FFFFFF; +} + +.list-car-list-1 .box-car-list .content .view-car i { + font-size: 8px; + margin-left: 11px; +} + +.list-car-list-1 .box-car-list .content .chat { + display: flex; + align-items: center; + font-size: 14px; + line-height: 14px; + color: #24272C; + border: 1px solid #EDEDED; + border-radius: 14px; + padding: 9px 20px; + width: 100%; + text-align: center; + justify-content: center; + margin-bottom: 60px; +} + +.list-car-list-1 .box-car-list .content .chat .icon { + margin-right: 4px; + color: #24272C; +} + +.list-car-list-1 .box-car-list .content .inner2 { + width: 209px; + padding-left: 30px; + border-left: 1px solid #EDEDED; +} + +.filter { + font-size: 16px; + font-weight: 500; + line-height: 22px; + padding: 9px 18px; + background: #FF7101; + color: #FFFFFF; + border-radius: 10px; +} + +.filter i { + margin-left: 10px; +} + +.filter-mobie { + display: none; +} + +.btn-siderbar-mobie-filter { + position: fixed; + top: 50%; + right: 0; + width: 45px; + height: 45px; + display: flex; + border: 0; + z-index: 100; + justify-content: center; + align-items: center; + background-color: #FFFFFF; + color: #FF7101; + box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 6px 0px; + cursor: pointer; + display: none; +} + +.btn-siderbar-mobie-filter:hover { + background-color: #FF7101; + color: #FFFFFF; +} + +.overlay-siderbar-mobie { + z-index: 99; + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + opacity: 0; + visibility: hidden; + background-color: rgba(0, 0, 0, 0.5607843137); + transition: all 0.3s ease-in-out; +} + +.overlay-siderbar-mobie.open { + opacity: 1; + visibility: visible; +} + +/* DashBoard +-------------------------------------------------------------- */ +#wrapper-dashboard #header.header-default { + padding-left: 8px; + padding-right: 35px; + border-bottom: 1px solid #EDEDED; + box-shadow: unset; +} + +#wrapper-dashboard .main-header .main-menu .navigation>li>a { + padding: 26px 0px; +} + +#wrapper-dashboard .main-header .header-lower { + padding-right: 11px; +} + +#wrapper-dashboard #header .header-wrap .header-ct-center { + justify-content: left; +} + +#wrapper-dashboard .content-area { + border-radius: 0px; + overflow: hidden; + padding: 50px 10px 60px 28px; + margin-right: 0px; + margin-left: 0px; +} + +#wrapper-dashboard .admin-title { + font-weight: 600; +} + +#wrapper-dashboard #themesflat-content { + padding-top: 0px; + padding-bottom: 0px; +} + +#wrapper-dashboard #mainnav>ul>li>a { + line-height: 75px !important; +} + +#wrapper-dashboard #header .tf-btn { + background: #FF7101; + color: #fff; +} + +#wrapper-dashboard #header .tf-btn:hover { + background: #24272C; + border-color: #24272C; +} + +#wrapper-dashboard .tfcl-login-form .tf-btn { + border-radius: 4px; +} + +#wrapper-dashboard .tfcl-login-form .tf-btn i.fa-google { + margin-right: 5px; +} + +#wrapper-dashboard .tfcl-login-form .tf-btn:hover { + color: #fff !important; +} + +#wrapper-dashboard #header .logo { + justify-content: left; +} + +#wrapper-dashboard { + padding-left: 280px; +} + +#wrapper-dashboard .container { + max-width: 100%; +} + +.sidebar-dashboard { + -webkit-transition: all 0.2s ease-in-out 0s; + -o-transition: all 0.2s ease-in-out 0s; + transition: all 0.2s ease-in-out 0s; + top: 0px; + width: 280px; + height: 100vh; + z-index: 9999; + position: fixed; + border-radius: 0; + -webkit-box-shadow: none; + box-shadow: none; + background: #24272C; + left: 0; + overflow-y: scroll; +} + +.sidebar-dashboard::-webkit-scrollbar { + background: transparent; + width: 0px; +} + +.sidebar-dashboard::-webkit-scrollbar { + background: transparent; + width: 5px; +} + +.sidebar-dashboard::-webkit-scrollbar-thumb { + border-radius: 10px; + background: #1A2435; +} + +.sidebar-dashboard .db-content { + color: #fff; + padding: 30px 0; + border-bottom: 1px solid rgba(255, 255, 255, 0.05); + padding-left: 30px; +} + +.sidebar-dashboard .db-content.db-list-menu { + padding-left: 16px; + padding-right: 11px; +} + +.sidebar-dashboard .db-content.db-list-menu .db-title { + margin-left: 14px; +} + +.sidebar-dashboard .db-content:last-child { + border-bottom: unset; +} + +.sidebar-dashboard .db-author .name { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + margin-bottom: -2px; +} + +.sidebar-dashboard .db-author .author-position { + font-family: "Inter"; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: rgba(255, 255, 255, 0.4823529412); +} + +.sidebar-dashboard .db-author .author .avatar { + flex-shrink: 0; +} + +.sidebar-dashboard .db-author .author .avatar img { + border-radius: 50%; + width: 52px; + height: 52px; + object-fit: cover; +} + +.sidebar-dashboard .db-author .author { + display: flex; + align-items: center; + gap: 10px; +} + +.sidebar-dashboard .db-title { + color: #fff; + font-size: 14px; + font-weight: 400; + line-height: 150%; + opacity: 0.4; + margin-bottom: 8px; +} + +.sidebar-dashboard .db-list-menu ul li a { + color: #fff; + padding: 12px 14px; + display: block; + border-radius: 16px; + color: #FFF; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + position: relative; +} + +.sidebar-dashboard .db-list-menu ul li a .count-page { + width: 24px; + height: 24px; + background: #7ED321; + color: #fff; + font-size: 14px; + font-weight: 700; + line-height: 17.64px; + border-radius: 50%; + flex-shrink: 0; + position: absolute; + top: 50%; + right: 14px; + transform: translateY(-50%); + display: flex; + align-items: center; + justify-content: center; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} + +.sidebar-dashboard .db-list-menu ul li a:hover .count-page, +.sidebar-dashboard .db-list-menu ul li a.active .count-page { + background: #fff; + color: #24272C !important; +} + +.sidebar-dashboard .db-list-menu ul li:not(:last-child) { + margin-bottom: 3.6px; +} + +.sidebar-dashboard .db-list-menu ul li a i { + color: #4d5153; + font-size: 20px; + vertical-align: sub; + margin-right: 14px; + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -ms-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} + +.sidebar-dashboard .db-list-menu ul li a img, +.sidebar-dashboard .db-list-menu ul li a svg { + margin-right: 14px; + vertical-align: bottom; +} + +.sidebar-dashboard .db-list-menu ul li a:hover, +.sidebar-dashboard .db-list-menu ul li a.active { + background: #FF7101; + color: #fff !important; +} + +.sidebar-dashboard .db-list-menu ul li a:hover *, +.sidebar-dashboard .db-list-menu ul li a.active * { + opacity: 1; +} + +.sidebar-dashboard .db-list-menu ul li a:hover i, +.sidebar-dashboard .db-list-menu ul li a.active i { + color: #fff; +} + +.sidebar-dashboard .db-logo img { + max-width: 216px; + height: auto; +} + +.sidebar-dashboard .db-media-box { + border-radius: 8px; + background: #1A2435; + padding: 38px 20px 38px 20px; +} + +.sidebar-dashboard .db-media-box .group-title { + color: #FFF; + font-size: 16px; + font-weight: 600; + margin-bottom: 18px; + display: flex; + align-items: center; +} + +.sidebar-dashboard .db-media-box .group-title a { + color: #fff; + word-break: break-all; +} + +.sidebar-dashboard .db-media-box .group-title a:hover { + color: #FF7101; +} + +.sidebar-dashboard .db-media-box .group-title i { + color: #FF7101; + margin-right: 16px; + font-size: 20px; + vertical-align: text-bottom; +} + +.sidebar-dashboard .db-media-box .list-social { + display: flex; + flex-wrap: wrap; + align-items: center; +} + +.sidebar-dashboard .db-media-box .list-social li { + background: unset; + margin-bottom: 10px; +} + +.sidebar-dashboard .db-media-box .list-social li:not(:last-child) { + margin-right: 11px; +} + +.sidebar-dashboard .db-media-box .list-social li a { + width: 30px; + height: 30px; + border: 1px solid rgba(255, 255, 255, 0.0901960784); + border-radius: 50%; + color: #9497A3; + font-size: 13px; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.sidebar-dashboard .db-media-box .list-social li a:hover { + color: #fff; + background: #FF7101; + border-color: #FF7101; +} + +.sidebar-dashboard .db-media-box .media-social .group-title i { + font-size: 30px; + vertical-align: bottom; +} + +.db-email-box { + display: flex; + align-items: center; + margin-bottom: 24px; +} + +.db-email-box .icon { + font-size: 37px; + color: #FF7101; + margin-right: 25px; +} + +.db-email-box .content p { + color: rgba(255, 255, 255, 0.53); + font-size: 14px; + font-weight: 500; + text-transform: uppercase; + font-family: "DM Sans"; + margin-bottom: -6px; +} + +.db-email-box .content a { + color: #FFF; + font-size: 16px; + font-weight: 600; + text-transform: uppercase; +} + +.dashboard-overlay { + position: fixed; + z-index: 7; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(18, 18, 18, 0.4); + opacity: 0; + filter: alpha(opacity=0); + -webkit-transition: all 0.2s ease-in-out 0s; + -o-transition: all 0.2s ease-in-out 0s; + transition: all 0.2s ease-in-out 0s; + visibility: hidden; +} + +.dashboard-overlay.active { + visibility: visible; + opacity: 1; + filter: alpha(opacity=100); + cursor: not-allowed; + z-index: 9999; +} + +.sidebar-dashboard.active { + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + -o-transform: translateX(0); + transform: translateX(0); + z-index: 9999; +} + +.dashboard-toggle { + padding-top: 30px; + padding-left: 25px; + padding-right: 25px; + color: #24272C; + cursor: pointer; + font-weight: 600; + font-size: 14px; +} + +.dashboard-toggle i { + margin-right: 5px; + vertical-align: middle; + font-size: 24px; + margin-top: -4px; + display: inline-block; + color: #FF7101; +} + +.dashboard-toggle { + display: none; +} + +#wrapper-dashboard .header .header-ct-left, +#wrapper-dashboard .header-ct-right .show-search { + display: none !important; +} + +.tfcl-submit-property-rating i { + margin-left: 7px; +} + +.group-agency-order .nice-select .list { + width: max-content; +} + +/* title dashboard */ +#wrapper-dashboard .themesflat-top, +#wrapper-dashboard .footer_background { + display: none; +} + +/* Reviews */ +.tfre-review-list { + margin-bottom: 30px; +} + +@media only screen and (max-width: 1630px) { + #wrapper-dashboard #header.header-default { + padding-left: 0; + padding-right: 0; + } +} + +@media only screen and (max-width: 1160px) { + #wrapper-dashboard .header .header-ct-right .tf-btn { + display: none !important; + } + + #tabs-header-single-property .tabs-nav { + top: 20px; + right: 50px; + } +} + +@media only screen and (max-width: 991px) { + .sidebar-dashboard { + left: 0; + -webkit-transform: translateX(-100%); + -ms-transform: translateX(-100%); + -o-transform: translateX(-100%); + transform: translateX(-100%); + } + + #wrapper-dashboard { + padding-left: 0px; + } + + #wrapper-dashboard .content-area { + margin-left: 0; + } + + .dashboard-toggle, + #wrapper-dashboard .header .header-ct-left { + display: block !important; + } + + #wrapper-dashboard #header.header-default { + background: #fff; + } +} + +@media only screen and (max-width: 767px) { + .header-account { + margin-right: 50px !important; + } + + .sidebar-dashboard .db-list-menu ul li a { + padding: 11px 30px; + } + + .nice-select.filter-my-listing { + float: left; + margin: 10px 0; + } + + .sidebar-dashboard { + top: 0 !important; + padding-top: 30px; + } + + .contact-home, + .loan-calculator-form { + padding: 15px; + } + + .contact-home .group-input { + flex-wrap: wrap; + } + + .contact-home .group-input .inner { + width: calc(100% - 22px); + } + + .contact-home .icon-autodeal-chat { + top: 15px; + } + + .property-info-block-inline .property-year { + display: block; + } + + .wrap-checkbox .checkbox-item { + width: calc(100% - 30px) !important; + } +} + +/* Submenu Admin +-------------------------------------------------------------- */ +.widget_login_menu_widget .dropdown-menu { + border: none; + border-top: 2px solid #FF7101; + min-width: 240px; + background: #fff; + box-shadow: 0px 30px 60px 0px rgba(36, 39, 44, 0.1019607843); + top: 62% !important; + border-radius: 0 0 16px 16px; +} + +.widget_login_menu_widget .dropdown-menu ul li { + border: unset; + padding: 15.4px 24px; +} + +.widget_login_menu_widget .dropdown-menu ul li:last-child { + border-bottom: unset; +} + +.widget_login_menu_widget .dropdown-menu ul li a { + font-weight: 500; + font-size: 16px; + color: #24272C; + position: relative; + display: block; +} + +.widget_login_menu_widget .dropdown-menu ul li a .count-page { + width: 20px; + height: 20px; + border-radius: 50%; + background: #7ED321; + color: #fff; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; +} + +.widget_login_menu_widget .dropdown-menu ul li a i { + margin: 0; + margin-right: 8px; + vertical-align: bottom; +} + +.widget_login_menu_widget .user-dropdown .dropdown-menu .user-dropdown-menu .list-group-item a:hover, +.widget_login_menu_widget .user-dropdown .dropdown-menu .user-dropdown-menu .list-group-item a.active { + color: #FF7101 !important; +} + +.table-responsive { + overflow: unset; +} + +/* dashboard shortcode */ +.tfcl-dashboard .tfcl-dashboard-overview { + margin-bottom: 10px; + margin-top: 30px; +} + +.tfcl-dashboard .tfcl-dashboard-overview .row>* { + padding-right: 10px; + padding-left: 10px; +} + +.tfcl-dashboard .tfcl-dashboard-overview .row { + margin-right: -10px; + margin-left: -10px; +} + +.tfcl-dashboard-overview .tfcl-card { + display: block; +} + +.tfcl-dashboard-overview .tfcl-card .card-body { + border-radius: 16px; + background: rgba(255, 113, 1, 0.06); + padding: 33px 20px 20px 20px; + display: flex; + align-items: center; + margin-bottom: 30px; +} + +.tfcl-dashboard-overview .card-body .tfcl-icon-overview { + width: 80px; + height: 80px; + flex-shrink: 0; + box-shadow: 0px 2px 6px 0px rgba(138, 61, 0, 0.0588235294); + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + color: #FF7101; + background: #fff; + font-size: 40px; + margin-right: 20px; + margin-top: -13px; +} + +.tfcl-dashboard-overview .card-body .tfcl-icon-overview .icon-autodeal-clock { + font-size: 26px; +} + +.tfcl-dashboard-overview .card-body .tfcl-icon-overview .icon-autodeal-heart-2 { + font-size: 25px; +} + +.tfcl-dashboard-overview .card-body .tfcl-icon-overview .icon-autodeal-feedback { + font-size: 30px; +} + +.tfcl-dashboard-overview .content-overview h5 { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + color: #24272C; + margin-bottom: 2px; +} + +.tfcl-dashboard-overview .content-overview .tfcl-dashboard-title { + font-size: 30px; + font-weight: 700; + line-height: 37.8px; + color: #1C1C1E; + border: none; + padding: 0; +} + +.tfcl-dashboard-overview .content-overview .tfcl-dashboard-title .per { + font-size: 16px; + font-weight: 600; + line-height: 22.4px; + color: #696665; +} + +.tfcl-dashboard-overview .content-overview .tfcl-dashboard-title .listing-text { + align-items: baseline; +} + +.tfcl-dashboard-overview .content-overview { + margin-top: -9px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .nice-select { + border-radius: 16px; +} + +.tfcl-dashboard .tfcl-dashboard-listing { + border-radius: 16px; + border: 1px solid #EDEDED; + padding: 30px 30px 30px 30px; + margin-bottom: 40px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .title-dashboard-table { + font-size: 24px; + font-weight: 500; + line-height: 30.24px; + margin-bottom: 29px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon { + position: relative; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon input { + border-color: #EDEDED; + padding: 16.5px 17px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + margin: 0; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon .datepicker-icon { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 18px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon .datepicker-icon svg { + vertical-align: sub; +} + +.tfcl-dashboard .tfcl-dashboard-listing .nice-select { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + margin: 0; + padding: 16.5px 17px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon input::placeholder { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon.search .datepicker-icon { + right: unset; + left: 18px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .group-input-icon.search input { + padding-left: 44px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .result-text { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + margin-top: 11px; + display: block; + margin-bottom: 19px; +} + +.tfcl-dashboard .tfcl-dashboard-listing .result-text b { + color: #FF7101; +} + +.tfcl-table-listing .table-responsive thead tr th:first-child { + border-radius: 8px 0 0 8px; +} + +.tfcl-table-listing .table-responsive thead tr th:last-child { + border-radius: 0px 8px 8px 0px; +} + +.tfcl-table-listing .table-responsive thead tr th::after { + content: ""; + width: 1px; + height: 50%; + background: #fff; + opacity: 0.1; + display: block; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); +} + +.tfcl-table-listing .table-responsive thead tr th { + background: #161E2D; + padding: 6.5px 14px; + border: unset; + color: #fff; + font-size: 14px; + font-weight: 600; + line-height: 150%; + text-align: left; + position: relative; +} + +.tfcl-table-listing .table-responsive thead tr { + border: none !important; +} + +.tfcl-table-listing .tfcl-listing-product { + display: flex; + gap: 20px; + text-align: left; +} + +.tfcl-table-listing .tfcl-listing-product img { + width: 168px; + height: 95px; + border-radius: 16px; + object-fit: cover; +} + +.tfcl-table-listing .tfcl-listing-product>a { + flex-shrink: 0; +} + +.tfcl-table-listing .tfcl-listing-product .tfcl-listing-title { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + color: #24272C; + margin-bottom: 2px; +} + +.tfcl-table-listing .tfcl-listing-product .features-text { + font-family: "Inter"; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: #696665; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-word; + margin-bottom: 9px; +} + +.tfcl-table-listing .tfcl-listing-product .price { + display: flex; + align-items: baseline; + gap: 10px; +} + +.tfcl-table-listing .tfcl-listing-product .price .inner:nth-child(2) { + color: #B6B6B6; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + text-decoration: line-through; +} + +.tfcl-table-listing .tfcl-listing-product .price .inner:nth-child(1) { + color: #FF7101; + text-decoration: none; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; +} + +.tfcl-dashboard .tfcl-page-insight { + border-radius: 16px; + border: 1px solid #E9E8E8; + padding: 30px 30px 30px 30px; + margin-bottom: 40px; +} + +.tfcl-dashboard .tfcl-page-insight h5 { + font-size: 24px; + font-weight: 500; + line-height: 30.24px; + margin: 0; + margin-bottom: 0px; +} + +.tfcl-dashboard .tfcl-insight-header { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +.tfcl-dashboard-message, +.tfcl-dashboard-reviews { + border-radius: 10px; + background: #FFF; + padding: 38px 20px 20px 37px; + margin-bottom: 30px; +} + +.tfcl-dashboard-reviews .comment-by-user .group-author { + display: flex; + align-items: center; +} + +.tfcl-dashboard-reviews .comment-by-user .group-name { + width: 100%; +} + +.tfcl-dashboard-reviews .comment-by-user .group-author img { + width: 34px; + height: 34px; + object-fit: cover; + border-radius: 50%; + margin-right: 10px; + flex-shrink: 0; +} + +.tfcl-dashboard-reviews .comment-by-user .group-author { + margin-bottom: 17px; +} + +.tfcl-dashboard-reviews .comment-by-user .content p { + color: #949392; + font-size: 14px; + font-weight: 400; + line-height: 24.8px; +} + +.tfcl-dashboard-reviews .comment-by-user .review-name { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #161E2D; + margin-bottom: 0px; + display: flex; + align-items: center; + justify-content: space-between; +} + +.tfcl-dashboard-reviews .comment-by-user .review-name span { + font-family: "Inter"; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: #696665; +} + +.tfcl-dashboard-reviews .star-rating-review { + display: flex; + align-items: center; +} + +.tfcl-dashboard-reviews .star-rating-review i { + color: #949392; + font-size: 16px; +} + +.tfcl-dashboard-reviews .star-rating-review i:not(:last-child) { + margin-right: 1.5px; +} + +.tfcl-dashboard-reviews .star-rating-review i.active { + color: #FF7101; +} + +.tfcl-dashboard-reviews .comment-by-user .content { + margin-top: -7px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + margin-bottom: 8px; +} + +.tfcl-dashboard-reviews .comment-by-user:not(:last-child) { + border-bottom: 1px solid #EFEFEF; + padding-bottom: 20px; + margin-bottom: 20px; +} + +.tfcl-dashboard-reviews { + border-radius: 16px; + border: 1px solid #E9E8E8; + padding: 30px 30px 30px 30px; + margin-bottom: 40px; +} + +.tfcl-dashboard-reviews h5 { + margin-bottom: 41px; + font-size: 24px; + font-weight: 500; + line-height: 30.24px; + margin: 0; + margin-bottom: 38px; +} + +.tfcl-page-insight-filter-button .nice-select { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + margin: 0; + padding: 16.5px 17px; +} + +.tfcl-dashboard-reviews .edit-comment { + font-size: 15px; + color: #83827F; + margin-top: 7px; + display: block; +} + +.tfcl-dashboard-reviews .edit-comment i { + font-weight: 600; + font-size: 13px; + margin-right: 7px; +} + +/* empty data */ +.tfcl-empty-data { + text-align: left; + font-size: 16px; + color: #FF7101; +} + +.tfcl-table-listing.tfcl-table-listing-sc { + min-height: 500px; +} + +/* Package */ +.payment-invoice .panel-heading, +.payment-method-wrap .heading h2, +.payment-complete-wrap .heading h2 { + font-size: 35px; + margin-bottom: 20px; +} + +.payment-method-wrap .wire-transfer-info { + background: #fff; + border-radius: 15px; + padding: 20px; + box-shadow: 0px 6px 27px 0px rgba(0, 0, 0, 0.07); + margin: 15px 0; +} + +.payment-method-wrap .wire-transfer-info p { + margin-bottom: 20px; + color: #000; + font-weight: 500; +} + +.payment-method-wrap label { + margin-right: 20px; +} + +.payment-method-wrap label input { + margin-right: 7px; +} + +.term-condition { + margin-bottom: 20px !important; +} + +.payment-invoice-wrap .payment-invoice { + margin-bottom: 40px; +} + +.no-listing-found { + color: #24272C; + background-color: rgba(255, 113, 1, 0.06); + border-color: transparent; + border-radius: 16px; + font-family: "Inter"; + font-size: 16px; + font-weight: 400; + line-height: 30px; + padding: 20px; +} + +#wrapper-dashboard .logo-box { + display: none; +} + +#wrapper-dashboard .main-header { + border-bottom: 1px solid #EDEDED; + box-shadow: unset; +} + +#wrapper-dashboard .main-header .main-menu { + margin-left: 50px; +} + +/* my listing shortcode */ +.tfcl-my-listing-sc tr, +.tfcl-my-listing-sc td, +.tfcl-table-listing tr, +.tfcl-table-listing td { + border: unset; + vertical-align: middle; + width: 10%; +} + +.tfcl-my-listing-sc td, +.tfcl-table-listing td { + padding: 16px 0px; +} + +.tfcl-my-listing-sc tr, +.tfcl-table-listing tr { + border-bottom: 1px solid #EDEDED; +} + +.tfcl-my-listing-sc tr td:first-child, +.tfcl-table-listing tr td:first-child { + width: 18.6%; +} + +.tfcl-my-listing-sc .list-wrapper, +.tfcl-table-listing .list-wrapper { + text-align: center; + width: max-content; + margin: 0 auto; +} + +.tfcl-my-listing-sc .list-wrapper p, +.tfcl-table-listing .list-wrapper p { + color: #83827F; + font-size: 16px; + font-weight: 500; + line-height: 30px; + margin-bottom: 0; +} + +.tfcl-my-listing-sc .list-wrapper b, +.tfcl-table-listing .list-wrapper b { + color: #0A1426; + font-weight: 600; + font-size: 16px; +} + +.tfcl-my-listing-sc .tfcl-empty-data { + border-bottom: 1px solid #E9E8E8; + padding: 21px 11px; +} + +.tfcl-listing-listing .mypt-brand, +.tfcl-table-listing .mypt-brand { + color: #86898E; + font-size: 14px; + font-weight: 500; +} + +.tfcl-table-listing .column-status .tfcl-listing-status { + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + background: var(--theme-primary-rgba); + padding: 6px 14px 6px 14px; + border-radius: 999px; + border: 1px solid #FF7101; +} + +.tfcl-table-listing .column-status .tfcl-listing-status.status-pending { + background: rgba(238, 103, 66, 0.1019607843); + border-color: rgba(238, 103, 66, 0.1411764706); + color: #EE6742; +} + +.tfcl-table-listing .column-status .tfcl-listing-status.status-publish { + background: rgba(126, 211, 33, 0.1019607843); + border-color: rgba(126, 211, 33, 0.1411764706); + color: #7ED321; +} + +.tfcl-table-listing .column-status .tfcl-listing-status.status-sold { + background: rgba(110, 85, 255, 0.1019607843); + border-color: rgba(110, 85, 255, 0.1411764706); + color: #6E55FF; +} + +.tfcl-table-listing .column-status { + text-align: left; + vertical-align: baseline; + padding-left: 30px; + padding-top: 22px; +} + +.tfcl-table-listing .column-date { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + text-align: left; + vertical-align: baseline; + padding-left: 30px; + padding-top: 22px; +} + +.tfcl-table-listing .column-controller { + font-family: "Inter"; + font-size: 14px; + font-weight: 500; + line-height: 19.6px; + text-align: left; + vertical-align: baseline; + padding-left: 30px; + padding-top: 22px; + color: #24272C; +} + +.tfcl-table-listing .column-listing { + padding-right: 20px; +} + +.tfcl-table-listing .column-controller .inner-controller:not(:last-child), +.tfcl-table-listing .column-controller li:not(:last-child) { + margin-bottom: 8px; +} + +.tfcl-table-listing .column-controller .inner-controller { + cursor: pointer; +} + +.tfcl-table-listing .column-controller .inner-controller .disabled-click { + cursor: not-allowed; + opacity: 0.6; +} + +.tfcl-table-listing .column-controller li i { + color: #B6B6B6; +} + +.tfcl-table-listing .tfcl-pagination { + justify-content: left; + margin-top: 29px; + gap: 10px; +} + +.tfcl-table-listing .column-listing, +.tfcl-table-listing .column-status, +.tfcl-table-listing .column-date { + position: relative; +} + +.tfcl-table-listing .column-listing::after, +.tfcl-table-listing .column-status::after, +.tfcl-table-listing .column-date::after { + content: ""; + width: 1px; + height: 75%; + background: #EDEDED; + display: block; + position: absolute; + top: 50%; + right: 0; + transform: translateY(-50%); +} + +.tfcl-listing-listing .tfcl-listing-title, +.favorite-listing .tfcl-listing-title { + color: #26232A; + font-size: 18px; + font-weight: 600; + line-height: 30px; + margin-bottom: 1px; +} + +.tfcl-listing-listing .mypt-address, +.favorite-listing .mypt-address { + color: #83827F; + font-family: "DM Sans"; + font-size: 18px; + font-weight: 400; + line-height: 33px; + display: flex; + align-items: baseline; + margin-bottom: 4px; +} + +.tfcl-listing-listing .mypt-address i, +.favorite-listing .mypt-address i { + margin-right: 7px; + color: #FF7101; + font-size: 14px; +} + +.tfcl-listing-listing .tfcl-listing-price:nth-child(1), +.favorite-listing .tfcl-listing-price:nth-child(1) { + color: #FF7101; + font-size: 17px; + font-weight: 700; +} + +.tfcl-listing-listing .price, +.favorite-listing .price { + display: flex; + align-items: end; + gap: 20px; +} + +.tfcl-listing-listing .tfcl-listing-price.sale-price:nth-child(2), +.favorite-listing .tfcl-listing-price.sale-price:nth-child(2) { + color: #86898E; + text-decoration: line-through; +} + +.tfcl-listing-listing .features-images, +.favorite-listing .features-images { + position: relative; + flex-shrink: 0; +} + +.tfcl-listing-listing .features-images img { + border-radius: 9px; + object-fit: cover; + max-width: 203px; + max-height: 140px; +} + +.tfcl-listing-listing .features-images .controller, +.favorite-listing .controller { + display: flex; + align-items: center; + justify-content: center; + position: absolute; + left: 50%; + bottom: 10px; + transform: translateX(-50%); +} + +.tfcl-listing-listing .features-images .controller li:not(:last-child), +.favorite-listing .controller li:not(:last-child) { + margin-right: 15px; +} + +.tfcl-listing-listing .features-images .controller a, +.favorite-listing .controller a { + position: relative; + color: #fff; + font-size: 15px; +} + +.tfcl-listing-listing .features-images .controller a, +.favorite-listing .controller a { + width: 30px; + height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 5px; +} + +.tfcl-listing-listing .features-images .controller a:hover, +.favorite-listing .controller a:hover { + background: #FF7101; +} + +.tfcl-listing-listing .features-images .controller a.tfcl-dashboard-action-delete:hover i::before, +.favorite-listing .controller a.tfcl-favorite-remove:hover i::before { + content: "\e983"; + font-family: "autodeal"; +} + +.favorite-listing .controller a.tfcl-favorite-remove i.fa-spinner::before { + content: "\f110" !important; +} + +.tfcl-my-listing-sc .tfcl-listing-listing, +.favorite-listing { + display: flex; + align-items: center; +} + +.tfcl-listing-listing .tfcl-listing-summary, +.favorite-listing .content { + text-align: left; + padding-left: 37px; +} + +.tfcl-listing-listing .features-images .controller-2 { + display: flex; + align-items: center; + position: absolute; + top: 6px; + left: 6px; +} + +.tfcl-listing-listing .features-images .controller-2 li:not(:last-child) { + margin-right: 8px; +} + +.tfcl-listing-listing .features-images .controller-2 li a { + border-radius: 5px; + background: rgba(0, 0, 0, 0.41); + width: 29px; + height: 28px; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + font-size: 14px; +} + +.tfcl-listing-listing .features-images .controller-2 li a:hover, +.tfcl-listing-listing .features-images .controller-2 li a.active { + background: #FF7101; +} + +.tfcl-listing-listing .features-images .controller-2 .tfcl-compare-listing i.fa-plus::before { + content: "\e95a"; + font-family: "autodeal"; +} + +/* pagination */ +.tfcl-pagination { + display: flex; + align-items: center; + gap: 15px; + justify-content: center; + margin-top: 10px; +} + +.tfcl-pagination span, +.tfcl-pagination a { + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #EDEDED; + color: #24272C; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + border-radius: 10px; +} + +.tfcl-pagination a:hover, +.tfcl-pagination .current { + background: #FF7101; + color: #fff; + border-color: #FF7101; +} + +.tfcl-pagination a i::before { + font-weight: 700; +} + +.group-btn-insignt, +.group-insight-controller { + display: flex; + align-items: center; + gap: 14px; +} + +.group-insight-controller { + margin-top: 28px; + margin-bottom: 7px; + flex-wrap: wrap; +} + +.group-input-insight { + display: flex; + align-items: center; + gap: 14px; + flex: 1; +} + +.group-input-insight .group-input-icon { + flex: 1; +} + +.group-btn-insignt button { + background: transparent; + border: 1px solid #EDEDED; + border-radius: 12px; + min-width: 126px; + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + padding: 17px 20px; +} + +.mb-2 { + margin-bottom: 20px !important; +} + +.mb-3 { + margin-bottom: 30px !important; +} + +.mb-4 { + margin-bottom: 40px !important; +} + +.mb-0 { + margin-bottom: 0 !important; +} + +.pb-0 { + padding-bottom: 0 !important; +} + +.tfcl-dashboard-reviews .tfcl-pagination { + justify-content: left; + padding-top: 28px; + border-top: 1px solid #EFEFEF; + margin-top: 20px; + gap: 10px; +} + +.wrap-favorite-listing { + display: flex; + flex-wrap: wrap; + margin-left: -30px; +} + +.wrap-favorite-listing .box-car-list { + width: calc(25% - 30px); + margin-left: 30px; + margin-bottom: 30px; +} + +.tfcl-favorite-listing { + border-radius: 16px; + border: 1px solid #EDEDED; + padding: 30px 30px 30px 30px; + margin-bottom: 40px; +} + +.controller-sorting { + display: flex; + align-items: center; + justify-content: space-between; +} + +.controller-sorting .count-list { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; +} + +.controller-sorting .count-list span { + color: #FF7101; +} + +.controller-sorting .sorting-input { + display: flex; + align-items: center; + gap: 8px; +} + +.controller-sorting .sorting-input .label { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #696665; + flex-shrink: 0; +} + +.controller-sorting .sorting-input .nice-select { + padding: 0; + border: none !important; + padding-right: 30px; +} + +.controller-sorting .sorting-input .nice-select .current { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; +} + +.controller-sorting .sorting-input .nice-select::after { + right: 0; +} + +/* add listing */ +.tfcl-add-listing { + border-radius: 16px; + border: 1px solid #EDEDED; + padding: 30px 30px 30px 30px; + margin-bottom: 30px; +} + +.tfcl-add-listing .upload-media { + width: 100%; + display: block; + text-align: center; + border: 2px dashed #E5E5EA; + border-radius: 16px; + padding: 96px 20px; +} + +.tfcl-add-listing .upload-media a { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #fff; + background: #FF7101; + padding: 14px 20px; + border-radius: 14px; + margin-bottom: 15px; +} + +.tfcl-add-listing .upload-media a:hover { + background: #24272C; +} + +.tfcl-add-listing .upload-media a svg { + margin-right: 10px; + font-size: 17px; +} + +.tfcl-add-listing .upload-media .desc { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #161E2D; +} + +.tfcl-add-listing .upload-media .desc span { + color: #696665; +} + +.tfcl-add-listing .thumbnail-media { + display: flex; + flex-wrap: wrap; + margin-left: -20px; + margin-top: 20px; + row-gap: 20px; +} + +.tfcl-add-listing .thumbnail-media>* { + width: calc(12.5% - 20px); + margin-left: 20px; +} + +.tfcl-add-listing .thumbnail-media .item { + position: relative; +} + +.tfcl-add-listing .thumbnail-media .item img { + border-radius: 16px; + height: 109px; + object-fit: cover; + width: 100%; +} + +.tfcl-add-listing .thumbnail-media .item a { + width: 30px; + height: 30px; + font-size: 16px; + background: rgba(0, 0, 0, 0.4470588235); + color: #fff; + border-radius: 50%; + position: absolute; + top: 5%; + right: 5%; + display: flex; + align-items: center; + justify-content: center; +} + +.tfcl-add-listing .thumbnail-media .item a:hover { + background: #FF7101; +} + +.tfcl-add-listing h3 { + margin-bottom: 20px; +} + +.tfcl-add-listing .form-group label { + margin-bottom: 8px; + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + color: #24272C; +} + +.tfcl-add-listing .form-group input, +.tfcl-add-listing .form-group textarea { + border-radius: 14px; + background: #FFF; + padding: 16px 16px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +.tfcl-add-listing .form-group textarea { + height: 130px; + margin: 0; +} + +.tfcl-add-listing .form-group input::placeholder, +.tfcl-add-listing .form-group textarea::placeholder { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; +} + +.tfcl-add-listing .form-group .nice-select { + padding: 15.6px 24px; + border-radius: 14px; + border: 1px solid #EDEDED; +} + +.tfcl-add-listing .form-group .nice-select .current { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +.tfcl-add-listing .form-group-4 { + display: flex; + flex-wrap: wrap; + margin-left: -30px; +} + +.tfcl-add-listing .form-group-4>* { + width: calc(25% - 30px); + margin-left: 30px; +} + +.tfcl-add-listing .form-group-2 { + display: flex; + flex-wrap: wrap; + margin-left: -30px; +} + +.tfcl-add-listing .form-group-2>* { + width: calc(50% - 30px); + margin-left: 30px; +} + +.tfcl-add-listing .form-group { + margin-bottom: 29.5px; +} + +.tfcl-add-listing .group-checkbox input { + visibility: hidden; + width: 20px; + height: 20px; + margin-right: 7px; + cursor: pointer; + top: 5px; + background-image: unset; + position: relative; + display: inline-block; + margin: 0; +} + +.tfcl-add-listing .group-checkbox input::before { + width: 24px; + height: 24px; + border: 1px solid #E4E4E4; + border-radius: 6px; + content: ""; + display: block; + position: relative; + visibility: visible; + transform: unset; + top: -6px; + left: 0; +} + +.tfcl-add-listing .group-checkbox input::after { + height: 6px; + width: 11px; + border-left: 2px solid #fff; + border-bottom: 2px solid #fff; + transform: rotate(-55deg); + display: block; + opacity: 0; + z-index: 5; + visibility: hidden; + content: ""; + position: absolute; + left: 6px; + top: 2px; +} + +.tfcl-add-listing .group-checkbox input:checked::before { + background: #FF7101; + border-color: #FF7101; +} + +.tfcl-add-listing .group-checkbox input:checked::after { + opacity: 1; + visibility: visible; +} + +.tfcl-add-listing .group-checkbox label { + margin: 0; + margin-left: 12px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; + cursor: pointer; +} + +.tfcl-add-listing .group-checkbox { + display: flex; + align-items: center; + margin-bottom: 24px; +} + +.tfcl-add-listing .group-checkbox:last-child { + margin-bottom: 0; +} + +.tfcl-add-listing .group-features h6 { + margin-bottom: 21px; +} + +.tfcl-add-listing .group-features-5 { + display: flex; + flex-wrap: wrap; + margin-left: -44px; + row-gap: 20px; +} + +.tfcl-add-listing .group-features-5>* { + width: calc(20% - 44px); + margin-left: 44px; +} + +.tfcl-add-listing .map-single { + margin-top: -10px; + height: 520px; + border-radius: 16px; +} + +.map-single .marker-card .face div { + background-image: url(/assets/images/dashboard/map-marker.png); + width: 60px; + height: 60px; +} + +.map-single .marker-card .face::before, +.map-single .marker-card .face::after { + all: unset; +} + +.map-single .marker-card .face { + all: unset; +} + +.tfcl-add-listing.car-video h3 { + margin-bottom: 11px; +} + +.tfcl-add-listing.car-video>p { + margin-bottom: 20px; +} + +.tfcl-add-listing.car-attr .list-attrach { + display: flex; + flex-wrap: wrap; + margin-left: -20px; +} + +.tfcl-add-listing.car-attr .list-attrach>* { + width: calc(16.66666% - 20px); + margin-left: 20px; +} + +.tfcl-add-listing.car-attr .list-attrach .item { + position: relative; + border: 1px solid #EDEDED; + border-radius: 16px; + height: 150px; + display: flex; + align-items: center; + justify-content: center; +} + +.tfcl-add-listing.car-attr .list-attrach .item a { + width: 30px; + height: 30px; + font-size: 16px; + background: rgba(0, 0, 0, 0.5568627451); + color: #fff; + border-radius: 50%; + position: absolute; + top: 5%; + right: 5%; + display: flex; + align-items: center; + justify-content: center; +} + +.tfcl-add-listing.car-attr .list-attrach .item a:hover { + background: #FF7101; +} + +.tfcl-add-listing.car-attr .list-attrach .item .inner { + display: flex; + flex-direction: column; + justify-content: center; + gap: 8px; + align-items: center; +} + +.tfcl-add-listing.car-attr .list-attrach .item .inner a { + all: unset; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; + cursor: pointer; +} + +.tfcl-add-listing.car-attr .list-attrach .item .inner a:hover { + color: #FF7101; +} + +.tfcl-add-listing.car-attr .list-attrach .item.upload { + border: 1px dashed #E5E5EA; +} + +.group-button-submit { + display: flex; + align-items: center; + justify-content: center; + gap: 10px; +} + +.group-button-submit.left { + justify-content: left; +} + +.group-button-submit .pre-btn { + min-width: 180px; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #fff; + border-radius: 14px; + background: #FF7101; + padding: 13px 20px; + border-color: #FF7101; + outline: none; + border: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.group-button-submit .second-btn { + min-width: 180px; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #FF7101; + border-radius: 14px; + background: transparent; + padding: 13px 20px; + border: 1px solid #FF7101; + outline: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.group-button-submit .pre-btn:hover { + background: #24272C; + color: #fff; +} + +.group-button-submit .second-btn:hover { + background: #FF7101; + color: #fff; +} + +/* Add profile */ +.tfcl_choose_avatar { + margin-bottom: 18px; +} + +.tfcl_choose_avatar .avatar { + display: flex; + align-items: flex-start; + gap: 30px; + margin-bottom: -18px; +} + +.tfcl_choose_avatar .avatar>.form-group { + max-width: 158px; + flex-shrink: 0; +} + +.tfcl_choose_avatar #tfcl_avatar_thumbnail { + border-radius: 50%; + width: 128px; + height: 128px; + object-fit: cover; +} + +.tfcl_choose_avatar .choose-box { + position: relative; +} + +.tfcl_choose_avatar .choose-box label { + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + color: #24272C; + margin-bottom: 10px; +} + +.tfcl_choose_avatar .choose-box .form-group { + position: relative; + margin-bottom: 8px; +} + +.tfcl_choose_avatar .choose-box button { + border-radius: 10px; + background: #FF7101; + position: absolute; + top: 50%; + left: 6px; + transform: translateY(-50%); + color: #fff; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + padding: 10px 18px; + border: none; +} + +.tfcl_choose_avatar .choose-box input { + border-radius: 14px; + border: 1px solid #EDEDED; + background: transparent; + margin: 0; + padding-left: 135px; + padding-top: 14px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; +} + +.tfcl_choose_avatar .notify-avatar { + font-family: "Inter"; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: #8E8E93; +} + +.list-check-req li span { + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: #B6B6B6; + position: relative; +} + +.list-check-req li:not(:last-child) { + margin-bottom: 3px; +} + +.list-check-req li span::before { + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + display: inline-block; + background: #B6B6B6; + margin-right: 6px; +} + +.list-check-req li.check span { + color: #7ED321; +} + +.list-check-req li.check span::before { + background: #7ED321; +} + +/* chat */ +.tfcl-message { + border: 1px solid #EDEDED; + border-radius: 16px; +} + +.tfcl-message .message-header { + padding: 30px; + border-bottom: 1px solid #EDEDED; + border-right: 1px solid #EDEDED; +} + +.tfcl-message .message-header .form-search { + position: relative; +} + +.tfcl-message .message-header .form-search svg { + position: absolute; + top: 50%; + left: 19px; + transform: translateY(-50%); +} + +.tfcl-message .message-header .form-search input { + padding: 16px 20px 16px 45px; +} + +.tfcl-message .list-user-chat { + padding: 30px 30px 30px 30px; + border-right: 1px solid #EDEDED; +} + +.tfcl-message .list-user-chat li.active .user-item, +.tfcl-message .list-user-chat li .user-item:hover { + background: rgba(255, 113, 1, 0.06); +} + +.tfcl-message .list-user-chat li:not(:last-child) { + margin-bottom: 10px; +} + +.tfcl-message .list-user-chat .user-item { + display: flex; + padding: 16px 16px 16px 16px; + border-radius: 16px; + gap: 20px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + cursor: pointer; +} + +.tfcl-message .list-user-chat .user-item .avatar { + flex-shrink: 0; +} + +.tfcl-message .list-user-chat .user-item .avatar img { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: cover; +} + +.tfcl-message .list-user-chat .user-item .name { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + color: #24272C; +} + +.tfcl-message .list-user-chat .user-item .date { + font-size: 12px; + font-weight: 400; + line-height: 16px; + color: #B6B6B6; +} + +.tfcl-message .list-user-chat .user-item .inner { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: wrap; + margin-bottom: 10px; +} + +.tfcl-message .list-user-chat .user-item p { + font-size: 14px; + font-weight: 400; + line-height: 20px; + color: #696665; +} + +.tfcl-message { + display: flex; + align-items: flex-start; +} + +.tfcl-message .header-inner-chat { + padding: 27px 27px 27px 50px; + border-bottom: 1px solid #EDEDED; +} + +.tfcl-message .content-right { + flex-shrink: 0; + width: 100%; + flex: 1; +} + +.tfcl-message .header-inner-chat .user-infor { + display: flex; + align-items: center; + gap: 20px; +} + +.tfcl-message .header-inner-chat .user-infor img { + width: 60px; + height: 60px; + border-radius: 50%; + object-fit: cover; +} + +.tfcl-message .header-inner-chat .user-infor .name { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + color: #24272C; +} + +.tfcl-message .header-inner-chat .user-infor .nofi { + color: #7ED321; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; +} + +.tfcl-message .header-inner-chat .user-infor .nofi::before { + content: ""; + width: 8px; + height: 8px; + border-radius: 50%; + display: inline-block; + background: #7ED321; + margin-right: 6px; +} + +.tfcl-message .content-inner-chat { + padding: 50px 30px 30px 50px; +} + +.tfcl-message .content-inner-chat .current-user-chat { + text-align: right; +} + +.tfcl-message .content-inner-chat .chat-text p { + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 20px; + padding: 14px 60px 14px 14px; + background: rgba(255, 113, 1, 0.06); + border-radius: 16px; + display: inline-block; + text-align: left; + margin-bottom: 5px; +} + +.tfcl-message .content-inner-chat .date-pushlish { + font-size: 12px; + font-weight: 400; + line-height: 16px; + color: #B6B6B6; +} + +.tfcl-message .content-inner-chat .attrach * { + margin-left: 7px; +} + +.tfcl-message .content-inner-chat .attrach { + margin-bottom: 6px; +} + +.tfcl-message .content-inner-chat .client-inner img { + width: 42px; + height: 42px; + border-radius: 50%; +} + +.tfcl-message .content-inner-chat .client-inner { + display: flex; + gap: 12px; + align-items: baseline; +} + +.tfcl-message .content-inner-chat .client-inner .content p { + background: #F3F3F3; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + padding: 14px; + border-radius: 16px 16px 16px 0px; + min-width: 140px; + margin-bottom: 6px; +} + +.tfcl-message .controller-chat { + display: flex; + align-items: center; + gap: 10px; + flex-wrap: wrap; +} + +.tfcl-message .controller-chat .controll { + display: flex; + align-items: center; + gap: 10px; +} + +.tfcl-message .controller-chat .controll a { + width: 52px; + height: 52px; + background: #F3F3F3; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; +} + +.tfcl-message .controller-chat .controll a:hover { + background: #FF7101; +} + +.tfcl-message .controller-chat .controll a:hover * { + stroke: #fff; +} + +.tfcl-message .controller-chat .form-message { + position: relative; + flex: 1; +} + +.tfcl-message .controller-chat .form-message a { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #fff; + padding: 10px 42px; + background: #FF7101; + border-radius: 10px; + position: absolute; + right: 5px; + top: 50%; + transform: translateY(-50%); +} + +.tfcl-message .controller-chat .form-message input { + padding: 15.5px 20px; +} + +.tfcl-message .controller-chat .form-message a:hover { + background: #24272C; +} + +/* Compare +-------------------------------------------------------------- */ +#compare_listing_wrap .compare-listing .compare-listing-body { + display: flex; + align-items: center; + justify-content: space-between; + gap: 20px; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + padding: 14px 86px; + background: #FF7101; + color: #fff; + border-radius: 14px; + border: none; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button:hover { + background: #24272C; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main { + margin-left: 0; + margin-right: 0; + display: flex; + align-items: center; + flex-wrap: wrap; + row-gap: 20px; + column-gap: 72px; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb { + position: relative; + display: flex; + align-items: center; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-img { + height: 79px; + object-fit: cover; + border-radius: 12px; + width: 106px; + margin-right: 21px; + flex-shrink: 0; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove { + border: 1px solid #EDEDED; + width: 40px; + height: 40px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: #24272C; + font-size: 11px; + padding: 0; + background: #fff; + margin-right: 20px; + flex-shrink: 0; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove:hover { + background: #FF7101; + border-color: #FF7101; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove:hover * { + stroke: #fff; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .tfcl-listing-title { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + margin-bottom: 8px; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-word; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .description { + display: flex; + align-items: center; + gap: 11px; + flex-wrap: wrap; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .description li { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + display: flex; + align-items: center; + gap: 4px; +} + +.wrap-single-compare .header-compare { + display: flex; + margin-left: -30px; + margin-bottom: 31px; +} + +.wrap-single-compare .header-compare .box-car-list { + width: calc(33.33333% - 30px); + margin-left: 30px; +} + +.wrap-single-compare .filter-compare { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 30px; +} + +.wrap-single-compare .filter-compare li { + cursor: pointer; + flex: 1; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; + border: 1px solid #EDEDED; + padding: 13px; + border-radius: 999px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + text-align: center; +} + +.wrap-single-compare .filter-compare li.active, +.wrap-single-compare .filter-compare li:hover { + background: #FF7101; + border-color: #FF7101; + color: #fff; +} + +.wrap-single-compare .compare-table { + padding: 30px; + border: 1px solid #EDEDED; + border-radius: 16px; + margin-bottom: 30px; +} + +.wrap-single-compare .compare-table .title-table { + font-size: 24px; + font-weight: 500; + line-height: 30.24px; + color: #24272C; + margin-bottom: 20px; +} + +.wrap-single-compare .compare-table .title-tr { + background: #F8F8F9; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; + padding: 10px 20px; + border-radius: 10px; + margin-bottom: 8px; + text-align: center; +} + +.wrap-single-compare .compare-table .group-tr { + display: flex; + align-items: center; + border: 1px solid #EDEDED; + border-radius: 10px; + padding: 20px; + margin-bottom: 19px; +} + +.wrap-single-compare .compare-table .group-tr li { + flex: 1; + text-align: center; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +/* Dealer +-------------------------------------------------------------- */ +.search-dealer .row>* { + padding-right: 15px; + padding-left: 15px; +} + +.tf-banner.style-dealder { + background-image: url(/assets/images/dashboard/dealder-pagetitle.jpg); +} + +.tf-banner.style-dealder .content { + padding: 136px 0px 223px 0px; +} + +.search-dealer-list { + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.0784313725); + border-radius: 16px; + padding: 22px; + display: flex; + align-items: center; + gap: 10px; + margin-top: -3.6%; + position: relative; + z-index: 5; + background: #fff; +} + +.search-dealer-list .filter-search { + display: flex; + align-items: center; + gap: 6px; +} + +.search-dealer-list .filter-search a { + background: rgba(255, 113, 1, 0.06); + border-radius: 14px; + padding: 14px 20px; + font-size: 16px; + font-weight: 700; + line-height: 22.4px; + color: #24272C; + min-width: 112px; + text-align: center; +} + +.search-dealer-list .filter-search a.active, +.search-dealer-list .filter-search a:hover { + color: #fff; + background: #FF7101; +} + +.search-dealer-list .filter-search a svg { + margin-right: 8px; + vertical-align: bottom; +} + +.search-dealer-list .group-input { + flex: 1; + display: flex; + align-items: center; + gap: 10px; +} + +.search-dealer-list .group-input .inner { + flex: 1; +} + +.search-dealer-list .search-submit { + min-width: 204px; + background: #FF7101; + padding: 14px 20px; + border-radius: 14px; + color: #fff; + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + text-align: center; +} + +.search-dealer-list .search-submit:hover { + background: #24272C; +} + +.search-dealer-list .search-submit i { + margin-left: 6px; +} + +.search-dealer-list input { + padding: 14px 18px 15px 18px !important; +} + +.group-dealer-title { + display: flex; + gap: 20px; + justify-content: space-between; + margin-bottom: 39px; + flex-wrap: wrap; +} + +.group-dealer-title .group-sort-filter { + display: flex; + gap: 10px; +} + +.group-dealer-title .group-sort-filter .nice-select { + min-width: 179px; + padding: 9px 17px; +} + +.group-dealer-title .group-sort-filter .nice-select .current { + color: #24272C; +} + +.tf-dealer-list { + display: flex; + column-gap: 30px; + row-gap: 20px; + justify-content: space-between; + align-items: center; + padding-bottom: 29px; + border-bottom: 1px solid #EDEDED; + margin-bottom: 30px; +} + +.tf-dealer-list .infor-dealder .thumbnail { + border: 1px solid #EDEDED; + width: 190px; + height: 130px; + border-radius: 16px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; +} + +.tf-dealer-list .infor-dealder .thumbnail img { + height: 80px; + object-fit: cover; +} + +.tf-dealer-list .infor-dealder { + display: flex; + column-gap: 30px; + row-gap: 20px; + align-items: center; +} + +.tf-dealer-list .infor-dealder .rating { + display: flex; + gap: 10px; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +.tf-dealer-list .infor-dealder .rating span b { + color: #FF7101; +} + +.tf-dealer-list .infor-dealder h4 { + margin-bottom: 9px; +} + +.tf-dealer-list .infor-dealder .icon-star { + letter-spacing: 0.8px; +} + +.tf-dealer-list .dealer-phone a { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #FF7101; +} + +.tf-dealer-list .dealer-phone a:hover { + color: #24272C; +} + +.tf-dealer-list .dealer-phone a svg { + vertical-align: bottom; + margin-right: 6px; +} + +.tf-dealer-list .dealer-phone h4 { + margin-bottom: 8px; +} + +.tf-dealer-list .dealder-button a { + border: 1px solid #FF7101; + border-radius: 14px; + padding: 13px 34px; + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + color: #FF7101; +} + +.tf-dealer-list .dealder-button a i { + font-size: 13px; + margin-left: 10px; +} + +.tfcl-pagination.style-dealer { + gap: 10px; +} + +.tfcl-pagination.style-dealer i::before { + font-weight: 400; + font-size: 20px; +} + +/* single dealer */ +.widget-dealer-contact { + border: 1px solid #EDEDED; + border-radius: 16px; + padding: 30px; + padding-bottom: 27px; +} + +.widget-dealer-contact h1 { + margin-bottom: 11px; +} + +.widget-dealer-contact .list-authencation { + display: flex; + align-items: center; + gap: 8px; + margin-bottom: 30px; + padding-bottom: 24px; + border-bottom: 1px solid #EDEDED; +} + +.widget-dealer-contact .list-authencation li { + font-family: "Inter"; + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + color: #696665; + padding: 5px 0; +} + +.widget-dealer-contact .list-authencation li i { + color: #7ED321; + margin-right: 3px; + font-size: 15px; + vertical-align: middle; +} + +.widget-dealer-contact .open-store { + margin-bottom: 31px; + padding-bottom: 9px; + border-bottom: 1px solid #EDEDED; +} + +.widget-dealer-contact .open-store h6 { + margin-bottom: 20px; +} + +.widget-dealer-contact .open-store ul li { + display: flex; + align-items: center; + justify-content: space-between; + gap: 10px; + margin-bottom: 20.5px; +} + +.widget-dealer-contact .open-store ul li .right { + font-weight: 500; +} + +.widget-dealer-contact .rating { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 29px; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +.widget-dealer-contact .rating .overall-rating-detail-star span { + margin-left: 10px; +} + +.widget-dealer-contact .rating .overall-rating-detail-star span b { + color: #FF7101; + font-weight: 400; +} + +.widget-dealer-contact .rating .overall-rating-detail-star i { + color: #FF7101; +} + +.widget-dealer-contact .button-form-1 { + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + color: #fff; + width: 100%; + display: block; + padding: 15px 35px; + border-radius: 14px; + background: #FF7101; + text-align: center; + margin-bottom: 11px; +} + +.widget-dealer-contact .button-form-2 { + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + color: #fff; + width: 100%; + display: block; + padding: 15px 35px; + border-radius: 14px; + background: #7ED321; + text-align: center; +} + +.dealer-sidebar .social-listing { + display: flex; + align-items: center; + gap: 10px; +} + +.dealer-sidebar #map-single { + height: 380px; + overflow: hidden; + border-radius: 16px; + margin-bottom: 29px; +} + +.dealer-sidebar .widget-dealer-map { + border: 1px solid #EDEDED; + border-radius: 16px; + padding: 30px; + padding-bottom: 27px; +} + +.dealer-sidebar .widget-dealer-map .address-dealer { + display: flex; + align-items: center; + gap: 8px; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + margin-bottom: 17px; +} + +.dealer-sidebar .widget-dealer-map .location-link { + border: 1px solid #FF7101; + padding: 14px 20px; + border-radius: 14px; + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + background: transparent; + width: 100%; + text-align: center; + display: block; + color: #FF7101; +} + +.dealer-sidebar .widget-dealer-map .location-link:hover { + background: #FF7101; + color: #fff; +} + +.tf-sale-agent-list .list-agent li { + display: flex; + align-items: flex-start; + gap: 20px; + justify-content: space-between; + margin-bottom: 30px; + flex-wrap: wrap; +} + +.tf-sale-agent-list .list-agent li .btn-agent { + border: 1px solid #FF7101; + padding: 14px 20px; + border-radius: 14px; + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + background: transparent; + text-align: center; + display: block; + min-width: 230px; + color: #FF7101; + margin-top: 3px; +} + +.tf-sale-agent-list .list-agent li .btn-agent:hover { + background: #FF7101; + color: #fff; +} + +.tf-sale-agent-list .list-agent .author { + display: flex; + gap: 20px; +} + +.tf-sale-agent-list .list-agent .author img { + width: 80px; + height: 80px; + border-radius: 50%; + flex-shrink: 0; +} + +.tf-sale-agent-list .list-agent .author .overall-rating-detail-star i { + color: #FF7101; + font-size: 13px; +} + +.tf-sale-agent-list .list-agent .author .content p { + font-size: 12px; + font-weight: 400; + line-height: 16.8px; + margin-top: 7px; +} + +.tf-sale-agent-list .list-agent .author .content { + margin-top: 11px; +} + +.tf-sale-agent-list { + margin-top: 42px; + padding-top: 41px; + border-top: 1px solid #EDEDED; + margin-right: 25px; + margin-bottom: 40px; + padding-bottom: 39px; + border-bottom: 1px solid #EDEDED; +} + +.tf-list-car-agent { + margin-bottom: 40px; + padding-bottom: 36px; + border-bottom: 1px solid #EDEDED; +} + +.mb-12 { + margin-bottom: 12px; +} + +.widget-book-apoint { + background: rgba(255, 113, 1, 0.06); + padding: 30px; + border-radius: 16px; +} + +.widget-book-apoint h3 { + margin-bottom: 9px; +} + +.widget-book-apoint a { + background: #FF7101; + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + color: #fff; + padding: 15px 36px; + border-radius: 14px; + text-align: center; +} + +.widget-book-apoint a:hover { + background: #24272C; + color: #fff; +} + +.listing-reviews.dealer-review { + margin-top: 40px; + padding-top: 41px; + border-top: 1px solid #EDEDED; +} + +.mb-5 { + margin-bottom: 50px !important; +} + +@media only screen and (max-width: 1400px) { + .table-responsive { + overflow-x: scroll !important; + } + + .table-responsive .table, + .table-responsive .table-striped { + width: max-content; + max-width: max-content; + } + + .wrap-favorite-listing .box-car-list { + width: calc(33.33333% - 30px); + } + + .tfcl-add-listing .thumbnail-media>*, + .tfcl-add-listing.car-attr .list-attrach>* { + width: calc(25% - 20px); + margin-left: 20px; + } + + .tfcl-add-listing .group-features-5>* { + width: calc(25% - 44px); + } +} + +@media only screen and (max-width: 1300px) { + #compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main { + column-gap: 20px; + } + + #compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button { + padding: 14px 30px; + } +} + +@media only screen and (max-width: 1200px) { + #wrapper-dashboard .content-area { + padding: 50px 20px; + } + + .wrap-favorite-listing .box-car-list { + width: calc(50% - 30px); + } + + .tfcl-add-listing .group-features-5>*, + .tfcl-add-listing.car-attr .list-attrach>* { + width: calc(33.33333% - 44px); + } + + .wrap-scoll-dealer { + overflow-y: auto; + } + + .wrap-scoll-dealer .inner-scroll { + width: 140%; + } +} + +@media only screen and (max-width: 991px) { + .widget-dealer-contact h1 { + font-size: 30px; + } + + .widget-dealer-contact { + margin-top: 50px; + } + + .wrap-scoll-dealer .inner-scroll { + width: 170%; + } + + .wrap-single-compare { + overflow-y: auto; + } + + .wrap-single-compare .inner-respond { + width: 150%; + } + + #wrapper-dashboard #header .logo { + padding: 10px 0; + } + + #wrapper-dashboard .content-area { + padding: 30px 0; + } + + .dashboard-toggle { + padding: 30px 15px; + } + + #wrapper-dashboard .logo-box { + display: block; + } + + .tfcl-add-listing .form-group-4>* { + width: calc(50% - 30px); + } + + .tfcl-message { + flex-direction: column; + } + + .tfcl-message .content-left, + .search-dealer-list .filter-search, + .search-dealer-list .group-input, + .search-dealer-list .search-submit { + width: 100%; + } + + .tfcl-message .list-user-chat .user-item .content { + flex: 1; + } + + .search-dealer-list .group-input, + .search-dealer-list { + flex-wrap: wrap; + justify-content: center; + } + + .search-dealer-list .filter-search { + justify-content: center; + } +} + +@media only screen and (max-width: 767px) { + .tf-banner.style-dealder .content { + padding: 100px 0px 100px 0px; + } + + .search-dealer-list .group-input .inner { + flex: unset; + width: 100%; + } + + .group-dealer-title .group-sort-filter .nice-select { + min-width: unset; + padding-right: 45px; + } + + .wrap-scoll-dealer .inner-scroll { + width: max-content; + } + + #tracking-view-chart { + width: 700px !important; + height: 300px !important; + } + + #tracking-view-chart-container { + width: max-content; + } + + .tfcl-dashboard .tfcl-page-insight { + overflow-x: scroll; + } + + .tfcl-dashboard .tfcl-insight-header { + display: block; + } + + .header-account .register { + display: none !important; + } + + .wrap-favorite-listing .box-car-list, + .tfcl-add-listing .form-group-4>*, + .tfcl-add-listing .group-features-5>*, + .tfcl-add-listing .form-group-2>* { + width: calc(100% - 30px); + } + + .tfcl-add-listing .thumbnail-media>* { + width: calc(33.33333% - 20px); + } + + .tfcl-message .list-user-chat, + .tfcl-message .message-header { + padding: 10px; + border-right: unset; + } + + .tfcl-message .header-inner-chat { + border-top: 1px solid rgb(237, 237, 237); + } + + .tfcl-message .content-inner-chat { + padding: 20px; + } + + .tfcl-message .controller-chat { + flex-direction: column; + } + + .tfcl-message .controller-chat .form-message { + width: 100%; + } + + .wrap-single-compare .inner-respond { + width: 220%; + } +} + +.blog-article-right { + padding-left: 30px; + padding-bottom: 22px; + border-left: 1px solid #EDEDED; +} + +.blog-article-right .blog-article-item.style3 { + padding: 20px 0; +} + +.blog-article-right .blog-article-item.style3:not(:first-child) { + border-top: 1px solid #EDEDED; +} + +.blog-article-right .blog-article-item.style3:first-child { + padding-top: 0px; +} + +.blog-article-item .images img { + height: 100%; +} + +.blog-article-item .images .date { + position: absolute; + bottom: 10px; + left: 10px; + font-size: 12px; + padding: 5px 13px; + color: #FFFFFF; + background-color: #FF7101; + border-radius: 99px; + font-family: "Inter", sans-serif; +} + +.blog-article-item .content { + padding-top: 26px; +} + +.blog-article-item .content .sub-box { + margin-bottom: 9px; +} + +.blog-article-item .content .sub-box>a { + position: relative; + font-size: 14px; +} + +.blog-article-item .content .sub-box>a:not(:last-child) { + margin-right: 9px; + padding-right: 9px; +} + +.blog-article-item .content .sub-box>a:not(:last-child)::before { + position: absolute; + content: ""; + width: 1px; + background-color: #E4E4E4; + right: 0; + top: 5px; + bottom: 5px; +} + +.blog-article-item .content h3 { + margin-bottom: 11px; + font-size: 22px; + line-height: 28.24px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.blog-article-item .content h3:hover { + color: #FF7101; +} + +.blog-article-item .content>p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.blog-article-item .content .read-more { + font-size: 16px; + font-weight: 500; + line-height: 20.16px; + color: #FF7101; +} + +.blog-article-item .content .read-more i { + font-size: 7px; + margin-left: 10px; +} + +.blog-article-item.style1 .images { + height: 270px; +} + +.blog-article-item.style1 .content { + padding-bottom: 20px; +} + +.blog-article-item.style2 { + display: flex; + gap: 30px; +} + +.blog-article-item.style2 .images { + height: auto; + max-width: 300px; +} + +.blog-article-item.style2 .content { + padding-top: 0px; +} + +.blog-article-item.style2 .content>p { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; +} + +.blog-article-item.style2 .content .read-more { + margin-top: 13px; +} + +.blog-article-item.style3 { + display: flex; + gap: 10px; +} + +.blog-article-item.style3 .images { + height: auto; + max-width: 190px; + border-radius: 12px; +} + +.blog-article-item.style3 .content { + padding-top: 0px; +} + +.blog-article-item.style3 .content h3 { + font-size: 16px; + line-height: 22.4px; +} + +.blog-article-item.style4 .images { + height: 270px; +} + +.blog-article-item.style4 .content h3 { + margin-bottom: 25px; +} + +.blog-article-item.style4 .content .read-more { + padding: 14px 32.5px; + background-color: rgba(255, 113, 1, 0.06); + border-radius: 14px; +} + +.blog-article-item.style4 .content .read-more:hover { + background-color: #FF7101; + color: #FFFFFF; +} + +.box-car-list { + border-radius: 14px; + border: 1px solid #EDEDED; + overflow: hidden; +} + +.box-car-list .image-group img { + width: 100%; +} + +.box-car-list .image-group .top { + position: absolute; + left: 10px; + right: 10px; + top: 10px; + z-index: 5; + gap: 8px; +} + +.box-car-list .image-group .top .flag-tag { + padding: 6px 12px; + border-radius: 99px; + background-color: #FF7101; + color: #FFFFFF; + font-size: 12px; + font-weight: 600; + line-height: 16.8px; + font-family: "Inter", sans-serif; +} + +.box-car-list .image-group .top .flag-tag.style-1 { + display: flex; + align-items: center; + gap: 6px; + background-color: rgba(0, 0, 0, 0.3); +} + +.box-car-list .image-group .change-heart { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 11; + gap: 8px; + opacity: 0; + visibility: hidden; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.box-car-list .image-group .change-heart .box-icon { + width: 48px; + height: 48px; + border-radius: 100%; + background-color: #FFFFFF; + text-align: center; + line-height: 48px; + cursor: pointer; +} + +.box-car-list .image-group .change-heart .box-icon .icon { + color: #FF7101; +} + +.box-car-list .content { + padding: 19px 16px 15px 16px; +} + +.box-car-list .content .text-address, +.box-car-list .content .link-style-1 { + margin-bottom: 8px; +} + +.box-car-list .content .icon-box { + display: flex; + flex-wrap: nowrap; + /* Cambiar de wrap a nowrap */ + gap: 8px; + /* Reducir gap para mobile */ + justify-content: space-between; + /* Distribuir uniformemente */ +} + +.box-car-list .content .icon-box .icons { + flex: 1; + min-width: 0; + text-align: center; +} + +.box-car-list .content .icon-box i { + margin-right: 4px; + font-size: 12px; +} + +.box-car-list .content .days-box { + padding-top: 20px; + margin-top: 20px; + border-top: 1px solid #EDEDED; +} + +.box-car-list .content .days-box .img-author img { + width: 38px; + height: 38px; + border-radius: 100%; + margin-right: 2px; +} + +.box-car-list.style-2 { + display: flex; +} + +.box-car-list.style-2>.image-group { + width: 252px; + flex-shrink: 0; +} + +.box-car-list.style-2>.image-group .img-style, +.box-car-list.style-2>.image-group img { + height: 100%; + object-fit: cover; +} + +.box-car-list.style-2 .content { + width: 100%; + padding: 17px 16px 15px 16px; +} + +.box-car-list.style-2.style-dark .content { + padding: 18px 30px 14px 30px; + background-color: #24272C; +} + +.box-car-list.style-2.style-dark .content .link-style-1 a, +.box-car-list.style-2.style-dark .content .icon-box, +.box-car-list.style-2.style-dark .content .days-box span { + color: #FFFFFF !important; +} + +.box-car-list.style-2.style-dark .content .days-box { + border-top: 1px solid rgba(255, 255, 255, 0.1); +} + +.box-car-list.style-2.style-dark .content .view-car { + color: #FFFFFF; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.box-car-list.style-3 { + border: 1px solid transparent !important; +} + +.box-car-list.style-3 .content { + padding: 18px 0px 0px 0px; +} + +.box-car-list.style-4 { + border: 1px solid transparent !important; +} + +.box-car-list.style-4 .content { + padding: 22px 0px 0px 0px; +} + +.box-car-list.style-5 { + padding: 16px; + box-shadow: 0px 4px 26px 0px rgba(66, 71, 76, 0.08); +} + +.box-car-list.style-5 .img-style { + border-radius: 16px; +} + +.box-car-list.style-5 .img-style::before { + border-radius: 16px; +} + +.box-car-list.style-5 .content { + padding: 21px 0px 0px 0px; +} + +.partner-item { + width: 100%; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.partner-item.style-1 { + padding: 25px 25px 20px 25px; + border: 1px solid #EDEDED; + border-radius: 16px; +} + +.partner-item.style-1:hover { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); + border: 1px solid transparent; +} + +.partner-item .image, +.partner-item img { + object-fit: contain; + height: 80px; + width: 100%; + margin-bottom: 20px; +} + +.partner-item .content .title { + margin-bottom: 5px; +} + +.partner-item.style-2 { + padding: 16px 16px 13px 16px; + border: 1px solid #EDEDED; + border-radius: 16px; +} + +.partner-item.style-2 .icon { + height: 46px; + margin-bottom: 10px; + color: #24272C; +} + +.partner-item.style-2:hover { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); + border: 1px solid transparent; +} + +.partner-item.style-2:hover .icon, +.partner-item.style-2:hover .content .title { + color: #FF7101 !important; +} + +.partner-item.style-3 .image { + border-radius: 16px; + background: rgba(255, 113, 1, 0.06); + height: 107px; +} + +.partner-item.style-3 .image img { + padding: 10px; + height: 107px; +} + +.partner-item.style-4 .image { + border-radius: 16px; + border: 1px solid #EDEDED; + height: 107px; +} + +.partner-item.style-4 .image img { + padding: 10px; + height: 107px; +} + +.tf-icon-box { + padding: 30px; + border: 1px solid #EDEDED; + border-radius: 16px; + background-color: #FFFFFF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.tf-icon-box:hover { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); + border: 1px solid transparent; +} + +.tf-icon-box:hover .btn-button { + background-color: #FF7101; +} + +.tf-icon-box:hover .btn-button span, +.tf-icon-box:hover .btn-button i { + color: #FFFFFF !important; +} + +.tf-icon-box:hover .icon svg { + transform: rotateY(180deg); +} + +.tf-icon-box.style-1 .icon { + margin-bottom: 20px; +} + +.tf-icon-box.style-1 .icon svg { + font-size: 60px; +} + +.tf-icon-box.style-1 h3, +.tf-icon-box.style-1 p { + margin-bottom: 30px; +} + +.tf-icon-box.style-2 { + display: flex; + gap: 30px; +} + +.tf-icon-box.style-2 .content h5 { + margin-bottom: 12px; +} + +.tf-icon-box.style-3 .inner-wrap { + margin-bottom: 30px; + gap: 20px; +} + +.tf-icon-box.style-3 .inner-wrap .icon svg { + width: 40px; + height: 40px; +} + +.tf-icon-box.style-3 .content p { + margin-bottom: 30px; +} + +.tf-icon-box.style-4 { + display: flex; + gap: 30px; + border: unset; +} + +.tf-icon-box.style-4 .icon svg { + width: 60px; + height: 60px; +} + +.tf-icon-box.style-4 .content h5 { + margin-bottom: 12px; +} + +.tf-icon-box .icon { + color: #FF7101; +} + +.tf-icon-box .icon svg { + transition: all 0.4s ease; +} + +.tf-icon-box .btn-button { + padding: 14px 26.5px; + border: 1px solid #FF7101; + border-radius: 14px; + color: #FF7101; + display: inline-block; + font-size: 16px; + min-width: 204px; + text-align: center; +} + +.tf-icon-box .btn-button i { + font-size: 12px; +} + +.tf-icon-box .btn-button:hover { + background-color: #FF7101; +} + +.tf-icon-box .btn-button:hover span, +.tf-icon-box .btn-button:hover i { + color: #FFFFFF !important; +} + +.tf-image-box { + border-radius: 16px; + gap: 30px; + padding: 30px; +} + +.tf-image-box.style1 .image, +.tf-image-box.style1 img { + max-width: 210px; + width: 100%; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.tf-image-box.style1 .content p { + margin-bottom: 20px; +} + +.tf-image-box.style1:hover .image img { + transform: scale(1.1); +} + +.tf-image-box.style2 { + gap: 23px; +} + +.tf-image-box.style2 .image { + margin-bottom: -16px; + margin-left: -5px; + margin-top: -15px; +} + +.tf-image-box.style2 .image img { + max-width: 210px; +} + +.tf-image-box.style2 .content p { + margin-bottom: 30px; +} + +.tf-image-box.bg-orange { + background-color: #FF7101; +} + +.tf-image-box.bg-orange .find-cars { + color: #FF7101; + background: #FFFFFF; +} + +.tf-image-box.bg-black { + background-color: #24272C; +} + +.tf-image-box.bg-black .find-cars { + color: #FFFFFF; + background: #FF7101; +} + +.tf-image-box .content { + width: 100%; +} + +.tf-image-box .content h3, +.tf-image-box .content h2 { + margin-bottom: 10px; +} + +.tf-image-box .content .find-cars { + padding: 15px 55.5px; + border-radius: 14px; + display: inline-block; + font-size: 16px; +} + +.tf-image-box .content .find-cars i { + font-size: 16px; + line-height: 16px; + margin-left: 9px; +} + +.review-car .slider-item { + position: relative; + border-radius: 24px; + overflow: hidden; +} + +.review-car .slider-item .img-slider { + position: absolute; + height: 100%; + width: 100%; +} + +.review-car .slider-item .img-slider img { + width: 100%; + height: 100%; + object-fit: cover; +} + +.review-car .slider-item .img-slider::before { + content: ""; + position: absolute; + z-index: 1; + left: 0; + right: 0; + bottom: 0; + top: 0; + background: linear-gradient(-90deg, rgba(85, 86, 68, 0) 0%, rgba(25, 32, 25, 0.4) 40%); +} + +.review-car .slider-item .content { + padding: 93px 76px 70px 76px; +} + +.review-car .slider-item .content .heading { + z-index: 2; + position: relative; + max-width: 525px; +} + +.review-car .slider-item .content .heading h1 { + font-size: 50px; + line-height: 50px; + margin-bottom: 20px; +} + +.review-car .slider-item .content .heading p { + margin-bottom: 47px; +} + +.review-car .slider-item .content .heading .btn-wrap .sc-button { + padding: 15px 60.5px; +} + +.loan-calculator-form { + background-color: #FFFFFF; + border-radius: 24px; + padding: 30px; +} + +.loan-calculator-form .box-title { + margin-bottom: 30px; +} + +.loan-calculator-form .box-title .title-ct { + margin-bottom: 13px; +} + +.loan-calculator-form #loan-calculator .grid-sw-2 { + gap: 10px; +} + +.loan-calculator-form #loan-calculator fieldset { + margin-bottom: 29px; +} + +.loan-calculator-form #loan-calculator fieldset label { + margin-bottom: 11px; + line-height: 17.64px; +} + +.loan-calculator-form #loan-calculator fieldset input { + padding: 15px 15px 15px 15px; +} + +.loan-calculator-form #loan-calculator fieldset .nice-select { + padding: 15px 16px; + margin-bottom: 0px; + border-radius: 14px; +} + +.loan-calculator-form #loan-calculator .list-total { + margin-bottom: 30px; +} + +.loan-calculator-form #loan-calculator .list-total ul li { + gap: 30px; +} + +.loan-calculator-form #loan-calculator .list-total ul li:not(:last-child) { + margin-bottom: 13px; +} + +.loan-calculator-form #loan-calculator .list-total ul li .title-total { + max-width: 200px; + width: 100%; +} + +.loan-calculator-form #loan-calculator .button-boxs .sc-button { + width: 100%; +} + +.compare-item { + border-radius: 16px; + overflow: hidden; + border: 1px solid #EDEDED; +} + +.compare-item .image-compare { + width: 100%; +} + +.compare-item .image-compare .image { + width: 50%; +} + +.compare-item .image-compare .image img { + height: 150px; + width: 100%; + object-fit: cover; +} + +.compare-item .image-compare .vs { + width: 50px; + height: 50px; + border-radius: 100%; + background-color: #FFFFFF; + line-height: 50px; + text-align: center; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.compare-item .content-compare { + padding: 16px; +} + +.compare-item .content-compare .compare-list-inner { + margin-bottom: 24px; +} + +.compare-item .content-compare .compare-list-inner .compare-list:first-child { + margin-bottom: 10px !important; +} + +.compare-item .content-compare .compare-list-inner .compare-list:not(:last-child) { + margin-bottom: 23px; +} + +.change-heart.style-2 { + gap: 12px; +} + +.change-heart.style-2 .box-icon { + cursor: pointer; + width: 52px; + height: 52px; + border-radius: 100%; + text-align: center; + line-height: 52px; + background-color: rgba(255, 113, 1, 0.06); +} + +.change-heart.style-2 .box-icon:hover { + background-color: #FF7101; +} + +.change-heart.style-2 .box-icon:hover .icon { + color: #FFFFFF; +} + +.change-heart.style-2 .box-icon .icon { + color: #FF7101; +} + +.tf-icon-list { + display: flex; + align-items: center; + padding: 18.5px 24px; + background-color: #FFFFFF; + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); + border-radius: 100px; + color: #FF7101; +} + +.tf-icon-list i, +.tf-icon-list span { + color: #FF7101; + text-transform: capitalize; +} + +.tf-icon-list i { + margin-right: 10px; + font-size: 26px; +} + +.tf-team.box:hover .icon-socials { + bottom: 20px; + opacity: 1; +} + +.tf-team.box .content { + padding: 25px 0; +} + +.tf-team.box .content .icon-box a { + width: 38px; + height: 38px; + border: 1px solid #EFEFEF; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + margin-left: 7px; + font-size: 13px; +} + +.tf-team.box .content .icon-box a i { + color: #8E8E93; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.tf-team.box .content .icon-box a:hover { + background-color: #FF7101; +} + +.tf-team.box .content .icon-box a:hover i { + color: #FFFFFF; +} + +.tf-team .images { + border-radius: 10px; + overflow: hidden; +} + +.tf-team .images>a { + width: 100%; +} + +.tf-team .icon-socials { + border-radius: 10px; + background-color: rgba(255, 255, 255, 0.5); + backdrop-filter: blur(4px); + position: absolute; + width: 210px; + height: 42px; + left: 50%; + transform: translateX(-50%); + bottom: -20px; + display: flex; + justify-content: space-around; + align-items: center; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + opacity: 0; +} + +.tf-team .icon-socials i { + font-size: 16px; + color: #24272C; + line-height: 42px; +} + +.tf-team .icon-socials i:hover { + color: #FF7101; +} + +.tf-team .box-text { + padding-top: 1px; +} + +.tf-team .box-text a { + margin-left: 3px; + text-decoration: underline; +} + +.tf-testimonial { + padding: 30px; + background-color: #FFFFFF; + border-radius: 20px; +} + +.tf-testimonial.style-2 .author-box { + padding-top: 24px; + border-top: 1px solid #EDEDED; +} + +.tf-testimonial.style-3 .author-box { + flex-direction: column; + align-items: center; +} + +.tf-testimonial.box-tes { + box-shadow: 0px 2px 6px 0px rgba(138, 61, 0, 0.06); +} + +.tf-testimonial.bg-4 { + background-color: rgba(255, 113, 1, 0.06); +} + +.tf-testimonial .inner-top { + margin-bottom: 24px; +} + +.tf-testimonial .inner-top .icon { + color: #FF7101; +} + +.tf-testimonial>p { + margin-bottom: 24px; +} + +.tf-testimonial .author-box { + gap: 12px; +} + +.tf-testimonial .author-box .images { + width: 60px; + height: 60px; + border-radius: 100%; + overflow: hidden; +} + +.tf-testimonial .author-box .content h5 { + margin-bottom: 2px; +} + +.listing-slide { + padding: 74px 0px 32px 0px; + margin-bottom: -43px; +} + +.listing-slide .swiper-slide.swiper-slide-prev .tf-listing-slide, +.listing-slide .swiper-slide.swiper-slide-next .tf-listing-slide { + display: flex; + align-items: end; + justify-content: center; + transition: all 0.4s ease-in-out; +} + +.listing-slide .swiper-slide.swiper-slide-prev .tf-listing-slide { + float: left; +} + +.listing-slide .swiper-slide.swiper-slide-next .tf-listing-slide { + float: right; +} + +.listing-slide .swiper-slide:before { + width: 410px; + height: 410px; + background: rgba(255, 113, 1, 0.06); + border-radius: 100%; + content: ""; + position: absolute; + left: 50%; + top: 43%; + transform: translate(-50%, -50%); + z-index: 0; + transition: all 0.4s ease-in-out; + visibility: hidden; + opacity: 0; +} + +.listing-slide .swiper-slide .img-style { + transition: all 0.3s ease-in-out; + transform: scale(0.7); + margin-top: 60px; +} + +.listing-slide .swiper-slide.swiper-slide-active .img-style { + transform: scale(1.4); + margin-top: 50px; +} + +.listing-slide .swiper-slide.swiper-slide-active .content-style { + margin-top: 52px; + display: block; +} + +.listing-slide .swiper-slide.swiper-slide-active .content-style p { + margin-top: 2px; +} + +.listing-slide .swiper-slide.swiper-slide-active:before { + visibility: visible; + opacity: 1; +} + +.tf-listing-slide .content-style { + display: none; +} + +.tf-image-list { + border-radius: 16px; + border: 1px solid #EDEDED; + overflow: hidden; +} + +.tf-image-list .image img { + width: 100%; +} + +.tf-image-list .content { + padding: 22px 20px 20px; +} + +.tf-image-list .content h5 { + margin-bottom: 14px; +} + +.tf-image-list .content ul li:not(:last-child) { + margin-bottom: 16px; +} + +.tf-banner { + background-repeat: no-repeat; + background-size: cover; + background-position: center; + position: relative; +} + +.tf-banner::before { + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; + content: ""; + background-color: rgba(0, 0, 0, 0.2); + z-index: 1; +} + +.tf-banner.style-1 { + background-image: url(/assets/images/section/bg-12.jpg); +} + +.tf-banner.style-2 { + background-image: url(/assets/images/section/bg-13.jpg); +} + +.tf-banner.style-2 .content { + padding: 116px 0px 242px 0px; +} + +.tf-banner .content { + padding: 118px 0px 162px 0px; +} + +.tf-banner .content .heading h1 { + font-size: 70px; + line-height: 70px; + font-weight: 600; + margin-bottom: 30px; +} + +.tf-banner .content .heading .sc-button { + margin-top: 30px; +} + +.flat-toggle { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; +} + +.flat-toggle.style-1 { + padding: 0px 0px 19px 0px; +} + +.flat-toggle.style-1:not(:last-child) { + margin-bottom: 20px; + border-bottom: 1px solid #EDEDED; +} + +.flat-toggle.style-1 .toggle-title { + background-color: #FFFFFF; + cursor: pointer; + color: #24272C; + font-weight: 600; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-toggle.style-1 .toggle-title.active .btn-toggle::after { + content: "\e962"; + font-family: "autodeal"; + rotate: -180deg; + display: inline-block; +} + +.flat-toggle.style-1 .btn-toggle { + position: absolute; + right: 12px; + top: 0px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-toggle.style-1 .btn-toggle::after { + content: "\e962"; + font-family: "autodeal"; + color: #24272C; + font-size: 8px; + transition: all 0.2s; +} + +.flat-toggle.style-1 .toggle-content { + padding-top: 15px; +} + +.flat-toggle.style-2 { + padding: 24px 30px; + border: 1px solid #EDEDED; + border-radius: 16px; +} + +.flat-toggle.style-2:not(:last-child) { + margin-bottom: 12px; +} + +.flat-toggle.style-2 .toggle-content { + padding-top: 18px; +} + +.flat-toggle.style-2 .toggle-content p { + color: #24272C !important; +} + +.flat-toggle.style-2 .toggle-title { + cursor: pointer; +} + +.flat-toggle.style-2 .toggle-title.active h5 { + color: #FF7101; +} + +.flat-toggle.style-2 .toggle-title.active .btn-toggle::after { + content: "\e935"; + font-family: "autodeal"; + font-size: 2.4px; + color: #FF7101; +} + +.flat-toggle.style-2 .btn-toggle { + position: absolute; + right: 30px; + top: 26px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.flat-toggle.style-2 .btn-toggle::after { + content: "\e944"; + font-family: "autodeal"; + color: #24272C; + font-size: 17px; +} + +.flat-toggle.style-2.activ { + background-color: rgba(255, 113, 1, 0.06); + border: 1px solid rgba(255, 113, 1, 0.06); +} + +.flat-toggle .toggle-content { + display: none; +} + +.widget-pricing { + border: 1px solid #EDEDED; + border-radius: 16px; + padding: 30px; + position: relative; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.widget-pricing:hover { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1); +} + +.widget-pricing:hover .pricing-heading .sub-title, +.widget-pricing:hover .title-price h2, +.widget-pricing:hover .title-price .price { + color: #FF7101 !important; +} + +.widget-pricing .badge-table { + text-align: center; + position: absolute; + top: 22px; + right: -35px; + transform: rotate(45deg); + width: 140px; +} + +.widget-pricing .badge-table span { + clip-path: polygon(21% 0%, 78% 0%, 97% 100%, 2% 100%); + padding: 4px 10px 4px 10px; + background: #FF7101; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: #FFFFFF; + width: 100%; + display: block; + position: relative; + z-index: 5; +} + +.widget-pricing .badge-table::before { + content: ""; + width: 5px; + height: 3px; + position: absolute; + right: 3px; + bottom: -2px; + clip-path: polygon(50% 0%, 0% 100%, 100% 100%); + background: #903F00; + transform: rotate(45deg); +} + +.widget-pricing .badge-table::after { + content: ""; + width: 9px; + height: 4px; + position: absolute; + left: 0px; + bottom: -3px; + clip-path: polygon(50% 0%, 0% 100%, 100% 100%); + background: #903F00; + transform: rotate(-45deg); +} + +.widget-pricing .pricing-heading { + margin-bottom: 34px; +} + +.widget-pricing .pricing-heading .sub-title { + margin-bottom: 21px; +} + +.widget-pricing .title-price { + font-size: 70px; + line-height: 70px; + gap: 8px; + margin-bottom: 34px; +} + +.widget-pricing .check { + margin-bottom: 36px; +} + +.widget-pricing .check li { + font-family: "Inter", sans-serif; +} + +.widget-pricing .check li:not(:last-child) { + margin-bottom: 14px; + padding-bottom: 14px; + border-bottom: 1px solid #EDEDED; +} + +.widget-pricing .check li.check-icon::before { + content: "\e907"; + color: #7ED321; +} + +.widget-pricing .check li.de-check-icon::before { + content: "\e90d"; + color: #FF7101; +} + +.widget-pricing .check li::before { + font-family: "autodeal" !important; + font-size: 16px; + font-weight: 600; + margin-right: 13px; + flex: none; +} + +#offcanvasBottom { + width: 1310px; + bottom: 20px; + height: auto; + margin: 0 auto; + border-radius: 24px; + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.2); +} + +#compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button { + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + padding: 14px 86px; + background: #FF7101; + color: #fff; + border-radius: 14px; + border: none; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button:hover { + background: #24272C; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main { + margin-left: 0; + margin-right: 0; + display: flex; + align-items: center; + flex-wrap: wrap; + row-gap: 20px; + column-gap: 72px; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb { + position: relative; + display: flex; + align-items: center; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-img { + height: 79px; + object-fit: cover; + border-radius: 12px; + width: 106px; + margin-right: 21px; + flex-shrink: 0; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove { + border: 1px solid #EDEDED; + width: 40px; + height: 40px; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: #24272C; + font-size: 11px; + padding: 0; + background: #fff; + margin-right: 20px; + flex-shrink: 0; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove:hover { + background: #FF7101; + border-color: #FF7101; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove:hover * { + stroke: #fff; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .tfcl-listing-title { + font-size: 18px; + font-weight: 500; + line-height: 22.68px; + margin-bottom: 8px; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-word; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .description { + display: flex; + align-items: center; + gap: 11px; + flex-wrap: wrap; +} + +#compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .description li { + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #696665; + display: flex; + align-items: center; + gap: 4px; +} + +.wrap-single-compare .header-compare { + display: flex; + margin-left: -30px; + margin-bottom: 31px; +} + +.wrap-single-compare .header-compare .box-car-list { + width: calc(33.33333% - 30px); + margin-left: 30px; +} + +.wrap-single-compare .filter-compare { + display: flex; + align-items: center; + gap: 10px; + margin-bottom: 30px; +} + +.wrap-single-compare .filter-compare li { + cursor: pointer; + flex: 1; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; + border: 1px solid #EDEDED; + padding: 13px; + border-radius: 999px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + text-align: center; +} + +.wrap-single-compare .filter-compare li.active, +.wrap-single-compare .filter-compare li:hover { + background: #FF7101; + border-color: #FF7101; + color: #fff; +} + +.wrap-single-compare .compare-table { + padding: 30px; + border: 1px solid #EDEDED; + border-radius: 16px; + margin-bottom: 30px; +} + +.wrap-single-compare .compare-table .title-table { + font-size: 24px; + font-weight: 500; + line-height: 30.24px; + color: #24272C; + margin-bottom: 20px; +} + +.wrap-single-compare .compare-table .title-tr { + background: #F8F8F9; + font-size: 16px; + font-weight: 500; + line-height: 22.4px; + color: #24272C; + padding: 10px 20px; + border-radius: 10px; + margin-bottom: 8px; + text-align: center; +} + +.wrap-single-compare .compare-table .group-tr { + display: flex; + align-items: center; + border: 1px solid #EDEDED; + border-radius: 10px; + padding: 20px; + margin-bottom: 19px; +} + +.wrap-single-compare .compare-table .group-tr li { + flex: 1; + text-align: center; + font-family: "Inter"; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + color: #24272C; +} + +@media only screen and (max-width: 1300px) { + #compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main { + column-gap: 20px; + } + + #compare_listing_wrap .compare-listing .compare-listing-body .tfcl-compare-listing-button { + padding: 14px 30px; + } +} + +@media only screen and (max-width: 991px) { + .wrap-single-compare { + overflow-y: auto; + } + + .wrap-single-compare .inner-respond { + width: 150%; + } +} + +@media only screen and (max-width: 767px) { + .wrap-single-compare .inner-respond { + width: 220%; + } +} + +/** + * Reset Browsers + * Elements + * Forms + * Typography + * Extra classes + * link style + * search + * Header Fixed + * Pagination + * Scroll Top + * PreLoad + * heading + * dropdown + * progress bar + * map + * up load + * price range +*/ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; + font-family: inherit; + font-size: 100%; + font-style: inherit; + font-weight: inherit; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} + +/* Elements +-------------------------------------------------------------- */ +html { + margin-right: 0 !important; +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Outfit", sans-serif; + font-size: 14px; + line-height: 19.6px; + font-weight: 400; + color: #696665; + background-color: #FFFFFF; +} + +img { + max-width: 100%; + height: auto; + transform: scale(1); + vertical-align: middle; + -ms-interpolation-mode: bicubic; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +ul, +li { + list-style-type: none; + margin-bottom: 0; + padding-left: 0; + list-style: none; +} + +.center { + text-align: center; +} + +.right { + text-align: right; +} + +.container2 { + max-width: 1750px; +} + +.container { + max-width: 1320px; +} + +.container2, +.container { + width: 100%; + margin: auto; +} + +.container2, +.container-fluid, +.container { + padding-left: 15px; + padding-right: 15px; +} + +textarea, +input[type=text], +input[type=password], +input[type=datetime], +input[type=datetime-local], +input[type=date], +input[type=month], +input[type=time], +input[type=week], +input[type=number], +input[type=email], +input[type=url], +input[type=search], +input[type=tel], +input[type=color] { + border: 1px solid #EDEDED; + font-family: "Inter", sans-serif; + outline: 0; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + font-size: 14px; + font-weight: 400; + line-height: 19.6px; + border-radius: 14px; + padding: 17px 44px 17px 18px; + width: 100%; + background: #FFFFFF; + color: #696665; +} + +textarea:focus, +input:focus { + border: 1px solid #FF7101; +} + +textarea::placeholder, +input[type=text]::placeholder, +input[type=password]::placeholder, +input[type=datetime]::placeholder, +input[type=datetime-local]::placeholder, +input[type=date]::placeholder, +input[type=month]::placeholder, +input[type=time]::placeholder, +input[type=week]::placeholder, +input[type=number]::placeholder, +input[type=email]::placeholder, +input[type=url]::placeholder, +input[type=search]::placeholder, +input[type=tel]::placeholder, +input[type=color]::placeholder { + font-family: "Inter", sans-serif; + color: #696665; + line-height: 19.6px; + font-size: 14px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +/* Placeholder color */ +::-webkit-input-placeholder { + color: #8A8AA0; +} + +:-moz-placeholder { + color: #8A8AA0; +} + +::-moz-placeholder { + color: #8A8AA0; + opacity: 1; +} + +.error { + font-size: 16px; + color: #24272C; + margin-bottom: 10px; + -webkit-transition: all ease 0.3s; + -moz-transition: all ease 0.3s; + transition: all ease 0.3s; +} + +/* Since FF19 lowers the opacity of the placeholder by default */ +:-ms-input-placeholder { + color: #8A8AA0; +} + +.text-p, +p { + font-weight: 400; + font-size: 14px; + line-height: 19.6px; + color: #696665; + font-family: "Inter", sans-serif; +} + +/* Typography +-------------------------------------------------------------- */ +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 600; + text-rendering: optimizeLegibility; + color: #24272C; +} + +h1 { + font-size: 40px; + line-height: 48px; + font-weight: 600; +} + +h2 { + font-size: 30px; + line-height: 37.8px; + font-weight: 500; +} + +h3 { + font-size: 24px; + line-height: 30.24px; + font-weight: 500; +} + +h4 { + font-size: 20px; + line-height: 25.2px; + font-weight: 500; +} + +h5 { + font-size: 18px; + line-height: 22.68px; + font-weight: 500; +} + +h6 { + font-size: 16px; + font-weight: 400; + line-height: 22.4px; +} + +.title-16 { + font-size: 16px; + line-height: 20px; +} + +.title-24 { + font-size: 24px; + line-height: 30px; +} + +.title-14 { + font-size: 14px; + line-height: 18px; +} + +.title-30 { + font-size: 30px; + line-height: 36px; +} + +.title-35 { + font-size: 35px; + line-height: 44px; +} + +.title-36 { + font-size: 36px; + line-height: 40px; +} + +/* Extra classes +-------------------------------------------------------------- */ +.msg-success { + background: linear-gradient(to right, #E250E5, #4B50E6, #E250E5); + background-clip: text; + -webkit-background-clip: text; + font-weight: 700; + background-size: 200% 200%; + animation: rainbow 2s ease-in-out infinite; + color: rgba(0, 0, 0, 0); + transition: color 0.2s ease-in-out; + font-size: 18px; + font-weight: 400; + line-height: 28px; +} + +label.error { + color: red; +} + +.shaw-box { + padding: 50px; + margin: -50px; +} + +.flex { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; +} + +.flex-one { + justify-content: space-between; + display: flex; +} + +.flex-two { + justify-content: space-between; + align-items: center; + display: flex; +} + +.flex-three { + display: flex; + align-items: center; +} + +.flex-five { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-six { + display: flex; + align-items: center; + justify-content: flex-end; +} + +.center, +.text-center { + text-align: center; +} + +.text-end { + text-align: end; +} + +.absolute { + position: absolute; +} + +.relative { + position: relative; +} + +.flex-none { + flex: none !important; +} + +.text-t { + text-transform: capitalize; +} + +.text-u { + text-transform: uppercase; +} + +.text-unset { + text-transform: unset !important; +} + +.text-line { + text-decoration-line: underline !important; +} + +.justify-center { + justify-content: center; +} + +.justify-end { + justify-content: end; +} + +.justify-space { + justify-content: space-between; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.align-center { + align-items: center; +} + +.text-start { + align-items: flex-start; +} + +.text-end { + text-align: end; +} + +.font-italic { + font-style: italic; +} + +.show-boder { + margin-top: -140px !important; + padding-top: 140px !important; +} + +#wrapper { + position: relative; + overflow: hidden; + max-width: 100%; + height: 100%; +} + +.wrapper-style { + background: #FAF8FF; +} + +button { + font-family: "Outfit", sans-serif; + cursor: pointer; +} + +.font { + font-family: "Outfit", sans-serif; +} + + + +.font-2 { + font-family: "Inter", sans-serif; +} + +.fw-1 { + font-weight: 100; +} + +.fw-3 { + font-weight: 300; +} + +.fw-4 { + font-weight: 400; +} + +.fw-5 { + font-weight: 500; +} + +.fw-6 { + font-weight: 600; +} + +.fw-7 { + font-weight: 700; +} + +.fw-8 { + font-weight: 800; +} + +.lh-16 { + line-height: 16px; +} + +.lh-18 { + line-height: 18px; +} + +.lh-22 { + line-height: 22.4px; +} + +.lh-24 { + line-height: 24px; +} + +.lh-25 { + line-height: 25.3px; +} + +.lh-26 { + line-height: 26px; +} + +.lh-27 { + line-height: 27px; +} + +.lh-28 { + line-height: 28px; +} + +.lh-29 { + line-height: 29px; +} + +.lh-30 { + line-height: 30px; +} + +.lh-33 { + line-height: 33px; +} + +.lh-37 { + line-height: 37px; +} + +.lh-45 { + line-height: 45px; +} + +.lh-48 { + line-height: 48px; +} + +.lh-56 { + line-height: 56px; +} + +.lh-75 { + line-height: 75px; +} + +.fs-12 { + font-size: 12px !important; +} + +.fs-13 { + font-size: 13px; +} + +.fs-14 { + font-size: 14px; +} + +.fs-16 { + font-size: 16px; +} + +.fs-18 { + font-size: 18px; +} + +.fs-20 { + font-size: 20px; +} + +.fs-22 { + font-size: 22px; +} + +.fs-26 { + font-size: 26px; +} + +.fs-30 { + font-size: 30px; +} + +.fs-40 { + font-size: 40px; +} + +.z-2 { + z-index: 2; +} + +.br-10 { + border-radius: 10px; +} + +.br-16 { + border-radius: 16px; +} + +.w-560 { + max-width: 560px; + width: 100%; +} + +.w-520 { + max-width: 520px; + width: 100%; + max-width: 520px; + width: 100%; + background: #FFFFFF; + border-radius: 24px; + padding: 30px; + float: right; +} + +.w-520 .box-car-list { + border-radius: 0px; +} + +.w-520 .box-car-list .content { + padding-top: 0px; +} + +.w-520 .box-car-list .content .link-style-1 { + margin-bottom: 13px; +} + +.w-520 .box-car-list .content .days-box { + padding-top: 0px; + margin-top: 40px; + padding-bottom: 24px; + margin-bottom: 26px; + border-top: 1px solid transparent; + border-bottom: 1px solid #EDEDED; +} + +.w-520 .box-car-list .content .days-box .img-author img { + width: 60px; + height: 60px; + margin-right: 12px; +} + +.w-100 { + width: 100%; +} + +.m0-auto { + margin: 0 auto; +} + +.mg-42 { + margin: 42px 0; +} + +.pd-0 { + padding: 0px !important; +} + +.mt--5 { + margin-top: -8.5em; + margin-left: 51px; + margin-right: 51px; +} + +.mt--3 { + margin-top: -3.3em !important; +} + +.mb-70 { + margin-bottom: 70px; +} + +.mb-60 { + margin-bottom: 60px; +} + +.mb-50 { + margin-bottom: 50px; +} + +.mb-40 { + margin-bottom: 40px !important; +} + +.mb-30 { + margin-bottom: 30px !important; +} + +.mb-20 { + margin-bottom: 20px !important; +} + +.mt-40 { + margin-top: 40px !important; +} + +.mt-12 { + margin-top: 12px; +} + +.pagination-style1 { + margin-top: 42px !important; + margin-bottom: -5px; +} + +.tf-section { + padding: 100px 0; +} + +.tf-section2 { + padding-top: 100px; +} + +.tf-section3 { + padding-bottom: 100px; +} + +.overflow-hidden { + overflow: hidden; +} + +.overflow-visible { + overflow: visible !important; +} + +.bg-1 { + background-color: rgba(255, 113, 1, 0.06); +} + +.bg-2 { + background-color: #24272C; +} + +.bg-white { + background-color: #FFFFFF; +} + +.img-border { + border-radius: 10px; +} + +.mt-20 { + margin-top: 20px; +} + +.mt-30 { + margin-top: 30px; +} + +.mt-18 { + margin-top: 18px; +} + +.mt-15 { + margin-top: 15px; +} + +.pd-100-40 { + padding: 100px 0px 40px 0px; +} + +/* link style +-------------------------------------------------------------- */ +a { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + text-decoration: none; + color: unset; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + cursor: pointer; + display: inline-block; +} + +a:focus, +a:hover { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + text-decoration: none; + outline: 0; + color: unset; +} + +@keyframes rainbow { + 0% { + background-position: left; + } + + 50% { + background-position: right; + } + + 100% { + background-position: left; + } +} + +.link-style-1 a { + text-decoration: none; + color: #24272C; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.link-style-1 a:focus, +.link-style-1 a:hover { + color: #FF7101; + text-decoration: none; + outline: 0; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-2 a { + text-decoration: none; + color: #FFFFFF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-2 a:focus, +.link-style-2 a:hover { + color: #24272C; + text-decoration: none; + outline: 0; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-3 a { + text-decoration: none; + color: #FFFFFF; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-3 a:focus, +.link-style-3 a:hover { + color: #FF7101; + text-decoration: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-4 a { + text-decoration: none; + color: #24272C; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-4 a:focus, +.link-style-4 a:hover { + color: #5C6368; + text-decoration: none; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-5 a { + text-decoration: none; + color: #24272C; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.link-style-5 a:focus, +.link-style-5 a:hover { + color: #FFFFFF; + text-decoration: none; + outline: 0; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.text-color-1 { + color: #FFFFFF !important; +} + +.text-color-2 { + color: #24272C !important; +} + +.text-color-3 { + color: #0446c5 !important; +} + +.text-color-4 { + color: #696665 !important; +} + +path { + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.form-wg { + margin-left: -30px; +} + +.form-wg .wg-box { + width: calc(50% - 30px) !important; + margin-left: 30px; +} + +.form-wg .wg-box2 { + width: calc(33.333% - 30px) !important; + margin-left: 30px; +} + +.form-wg .wg-box3 { + width: calc(25% - 30px); + margin-left: 30px; +} + +/* Search */ +.search .search-submit { + position: absolute; + top: 0px; + right: 0px; + font-size: 17px; + font-weight: 400; + background: transparent; + color: #FFFFFF; + border: none; + line-height: 20px; + padding: 17.5px 21.5px 17px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.search .search-submit:hover { + background: #FF7101; +} + +.search .search-submit.search-icon::after { + content: "\f002"; + font-family: "Font Awesome 5 Pro"; + color: #FFFFFF; +} + +.search-form { + position: relative; +} + +.search-form .search-field { + background: #FFFFFF; + color: #696665; + width: 100%; + border: 1px solid #EDEDED; + line-height: 24px; + padding: 14px 49px 14px 17px; + border-radius: 14px; +} + +.search-form .search-field::placeholder { + color: #24272C !important; + line-height: 19px; + font-size: 14px !important; + font-weight: 400; +} + +.search-form .search-field:focus { + color: #24272C; + border: 1px solid #FF7101; +} + +/* Header Fixed */ +#header.style-absolute.is-fixed, +.header.is-fixed { + position: fixed; + top: -80px; + left: 0; + width: 100%; + box-shadow: 0px 3px 9px rgba(0, 0, 0, 0.05); + z-index: 9999; + background: #fff; + border: none; + opacity: 1; + -webkit-transition: all 0.5s ease; + -moz-transition: all 0.5s ease; + -ms-transition: all 0.5s ease; + -o-transition: all 0.5s ease; + transition: all 0.5s ease; +} + +#header.style-absolute.is-fixed { + background: #24272C; +} + +/* Pagination +-------------------------------------------------------------- */ +.themesflat-pagination { + margin-top: 30px; +} + +.themesflat-pagination.style { + margin-top: 19px; +} + +.themesflat-pagination.style2 { + margin-top: 0px; +} + +.themesflat-pagination.style3 { + margin-top: 40px; +} + +.themesflat-pagination ul { + position: relative; +} + +.themesflat-pagination ul li { + display: inline-block; + margin: -3px 3.5px; +} + +.themesflat-pagination ul li:last-child { + margin-right: 0; +} + +.themesflat-pagination ul li .page-numbers { + display: inline-block; + font-size: 16px; + font-weight: 600; + color: #24272C; + text-align: center; + width: 44px; + height: 44px; + line-height: 44px; + border-radius: 10px; + object-fit: cover; + position: relative; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + overflow: hidden; + border: 1px solid #EDEDED; +} + +.themesflat-pagination ul li .page-numbers:hover, +.themesflat-pagination ul li .page-numbers.current { + background-color: #FF7101; + color: #fff; + border-color: #FF7101; +} + +.themesflat-pagination ul li .page-numbers.style { + line-height: 42px; +} + +.themesflat-pagination ul li .page-numbers.style i { + font-size: 22px; + font-weight: 400; + vertical-align: middle; +} + +/* Scroll Top +-------------------------------------------------------------- */ +.progress-bars .progress-bars-line { + display: block; + height: 10px; + border-radius: 10px; + background-color: #EDEDED; +} + +.progress-bars .progress-bars-line>div { + position: relative; + display: block; + height: 10px; + border-radius: 10px; + background-color: #FF7101; +} + +.progress-bars .progress-bars-line>div .progress-bars-number { + position: absolute; + right: -3px; + top: -30px; +} + +.progress-wrap { + position: fixed; + bottom: 30px; + right: 30px; + height: 50px; + width: 50px; + cursor: pointer; + display: block; + border-radius: 30px; + -webkit-box-shadow: inset 0 0 0 2px rgba(130, 130, 130, 0.2); + box-shadow: inset 0 0 0 2px rgba(130, 130, 130, 0.2); + z-index: 100; + opacity: 0; + visibility: hidden; + -webkit-transform: translateY(20px); + -ms-transform: translateY(20px); + transform: translateY(20px); + -webkit-transition: all 300ms linear; + -o-transition: all 300ms linear; + transition: all 300ms linear; + background: #FF7101; +} + +.progress-wrap::after { + position: absolute; + content: "\e939"; + font-family: "autodeal"; + rotate: -90deg; + text-align: center; + line-height: 50px; + font-size: 12px; + color: #FFFFFF; + left: 0; + top: 0; + height: 50px; + width: 50px; + cursor: pointer; + display: block; + z-index: 1; + -webkit-transition: all 400ms linear; + -o-transition: all 400ms linear; + transition: all 400ms linear; +} + +.progress-wrap.active-progress { + opacity: 1; + visibility: visible; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + transform: translateY(0); +} + +.progress-wrap svg path { + fill: none; +} + +.progress-wrap svg.progress-circle path { + box-sizing: border-box; + stroke: #FFFFFF; + stroke-width: 5; + transition-property: all; + transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + transition-duration: 150ms; + transition-duration: 0.4s; + transition-timing-function: linear; +} + +/* PreLoad +-------------------------------------------------------------- */ +/* preload */ +/* -------------------------------- */ +.preload-container { + position: fixed; + top: 0px; + left: 0px; + z-index: 999999999999999; + height: 100%; + width: 100%; + background-color: #fff; +} + +.preload-container .middle { + top: 45%; + transform: translate(-50%, -50%); + left: 50%; + position: absolute; + width: 70px; + height: 70px; + z-index: 100; + background-repeat: no-repeat; + background-position: center center; + background-size: contain; + content: url(/assets/images/logo/preload.png); + animation: jackInTheBox 1.2s linear infinite alternate; +} + +.preload { + overflow: hidden; +} + +html { + -webkit-font-smoothing: antialiased; +} + +* { + box-sizing: border-box; +} + +*:before, +*:after { + box-sizing: border-box; +} + +body .dribbble { + position: fixed; + display: block; + right: 20px; + bottom: 20px; +} + +body .dribbble img { + display: block; + height: 28px; +} + +.grid-sw-2 { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 30px; +} + +.list-car-grid-2 { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 30px; +} + +.grid-4 { + display: grid; + grid-template-columns: repeat(4, 1fr); +} + +.list-car-grid-4 { + display: grid; + grid-template-columns: repeat(4, 1fr); +} + +.grid-5 { + display: grid; + grid-template-columns: repeat(5, 1fr); +} + +.gap-8 { + gap: 8px; +} + +.gap-20 { + gap: 20px; +} + +.gap-30 { + gap: 30px; +} + +.gap-37 { + gap: 37px 30px; +} + +.mobile-menu .bottom-canvas .tf-top-bar-left { + display: none; +} + +.partner-slide3-wrap { + background-color: #FFFFFF; + border-radius: 16px; + margin-top: -16.3em; + margin-left: -30px; + margin-right: -30px; + z-index: 3; + position: relative; + padding: 30px 30px 0px 30px; +} + +.heading-section { + margin-bottom: 40px; +} + +.tf-btn-arrow { + padding: 9px 22.5px; + border: 1px solid #EDEDED; + border-radius: 14px; + font-size: 14px; + font-weight: 500; + line-height: 17.64px; + color: #24272C; + font-family: "Outfit", sans-serif; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.tf-btn-arrow i { + font-size: 8px; + font-weight: 800; + margin-left: 6px; +} + +.tf-btn-arrow:hover { + border: 1px solid #FF7101; + background-color: #FF7101; + color: #FFFFFF; +} + +.dropdown>a { + position: relative; + display: block; + padding: 0px 13px 0px 0px; + border-radius: 6px; + -moz-border-radius: 6px; + -webkit-border-radius: 6px; + background: transparent; + font-size: 16px; + font-weight: 400; + line-height: 26px; + border-radius: 4px; + color: #fff; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + z-index: 10; +} + +.dropdown>a::after { + font-family: "Font Awesome 5 Pro"; + font-size: 10px; + font-weight: 500; + content: "\f078"; + position: absolute; + color: #fff; + right: 0px; + top: 40%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); +} + +.dropdown>a ul { + position: absolute; +} + +.seclect-box.style-2 .dropdown>a:after { + right: 15px; +} + +.dropdown ul.show { + opacity: 1; + position: absolute; + width: 100%; + -webkit-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.dropdown li { + border-top: 0.5px solid rgba(122, 121, 138, 0.1); + background: #FFFFFF; + color: #000; + width: 100%; + padding: 9px 10px 8px 16px; + list-style: none; + display: inline-block; + margin: 0; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + font-size: 16px; + box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1); + cursor: pointer; +} + +.dropdown .country { + position: absolute; + z-index: 99; + margin-left: 13px; + margin-top: 5px; + color: #818089; +} + +.dropdown ul, +.dropdown li.active, +.dropdown ul, +.dropdown li:hover { + background: #e0e0e0; +} + +.dropdown.style-2 ul { + min-width: 100px; +} + +/* donat progress */ +.progress-bar { + margin: 16px 0 42px; +} + +.progress-bar:last-child { + margin-bottom: 0; +} + +.progress-title-holder { + padding-bottom: 20px; + position: relative; +} + +.progress-content-outter { + height: 5px; + background-color: rgba(8, 4, 34, 0.1); + border-radius: 5px; +} + +.progress-content { + height: 5px; + background-color: #FF7101; + width: 0%; +} + +.progress-number-mark { + margin-bottom: 4px; + position: absolute; + -moz-transform: translateX(-50%); + -o-transform: translateX(-50%); + transform: translateX(-50%); + -ms-transform: translateX(-50%); + -webkit-transform: translateX(-50%); +} + +/* MAP */ +.map-marker-container { + position: absolute; + margin-top: 10px; + transform: translate3d(-50%, -100%, 0); +} + +.marker-container { + position: relative; + top: 25px; + left: 10px; + width: 46px; + height: 46px; + z-index: 1; + border-radius: 50%; + cursor: pointer; + -webkit-perspective: 1000; +} + +.face { + position: absolute; + width: 20px; + height: 20px; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + text-align: center; + color: #FFFFFF; + z-index: 100; + background: #FF7101; + border: 2px solid #FFFFFF; + border-radius: 50%; + box-sizing: content-box; + background-clip: content-box; + line-height: 46px; + font-size: 24px; +} + +.infoBox-opened .face { + background: #7ED321; +} + +.infoBox-opened .face::before, +.infoBox-opened .face::after { + -ms-box-shadow: 0 0 0 50px #7ED321; + -o-box-shadow: 0 0px 0 50px #7ED321; + box-shadow: 0px 0px 0px 20px rgba(255, 113, 1, 0.2); +} + +.face::before, +.face::after { + position: absolute; + top: 50%; + left: 50%; + width: 20px; + height: 20px; + border-radius: 50%; + -ms-border-radius: 50%; + -webkit-border-radius: 50%; + -moz-border-radius: 50%; + -ms-border-radius: 50%; + -o-border-radius: 50%; + transform: translate(-50%, -50%); + -ms-box-shadow: 0 0 0 50px rgba(255, 113, 1, 0.06); + -o-box-shadow: 0 0px 0 50px rgba(255, 113, 1, 0.06); + box-shadow: 0px 0px 0px 20px rgba(255, 113, 1, 0.2); + -webkit-animation: ripple 2s infinite; + animation: ripple 2s infinite; +} + +.face::before { + content: ""; + position: absolute; + -webkit-animation-delay: 0.6s; + animation-delay: 0.6s; +} + +.face::after { + content: ""; + position: absolute; + -webkit-animation-delay: 0.2s; + animation-delay: 0.2s; +} + +.face>div { + background-image: url(/assets/images/section/bg-icon.html); + position: absolute; + height: 100%; + width: 100%; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + z-index: 99; +} + +#singleListingMap .marker-container { + cursor: default; +} + +.marker-card { + width: 100%; + height: 100%; + transform-style: preserve-3d; + position: absolute; + z-index: 1; +} + +#map .infoBox { + margin-left: 170px; + margin-bottom: -100px; +} + +.map-listing-item { + position: relative; +} + +.map-listing-item .infoBox-close { + position: absolute; + right: 10px; + top: 10px; + width: 24px; + height: 24px; + background: #fff; + color: #202124; + line-height: 24px; + font-size: 20px; + border-radius: 8px; + z-index: 9; + text-align: center; + cursor: pointer; + transition: all 300ms ease; +} + +.map-listing-item .infoBox-close:hover { + font-weight: 700; + color: #FF7101; +} + +.map-listing-item .inner-box { + position: relative; + border-radius: 16px; + background: #ffffff; + max-width: 280px; + box-shadow: 0px 10px 25px rgba(54, 95, 104, 0.1); +} + +.map-listing-item .image img { + display: block; + max-width: 100%; + width: 100%; + height: auto; + transition: all 500ms ease; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +.map-listing-item .content { + position: relative; + padding: 21px 20px; +} + +.map-listing-item .title { + color: #ffffff; + opacity: 0.6; + margin-left: 3px; +} + +.map-listing-item h4 { + position: relative; + font-family: "Outfit", sans-serif; + margin-bottom: 5px; +} + +.map-listing-item h4 a { + transition: all 300ms ease; +} + +.map-listing-item h4 a:hover { + color: #FF7101; +} + +.map-listing-item h3 { + position: relative; + font-weight: 700; + font-size: 20px; + line-height: 28px; + color: #FF7101; +} + +.map-listing-item { + font-size: 12px; + line-height: 18px; + font-family: "Outfit", sans-serif; + color: #24272C; + margin-bottom: 6px; +} + +.map-listing-item .location i { + margin-right: 5px; + font-size: 12px; +} + +.map-listing-item .location .type { + font-size: 12px; + font-weight: 500; + line-height: 16px; + color: #14a077; + background: rgba(20, 129, 96, 0.1); + border-radius: 24px; + padding: 7px 12px; + transition: all 0.3s ease-in-out; +} + +.map-listing-item .location .type:hover { + color: #fff; + background: #14a077; +} + +.map-listing-item .job-info { + position: relative; + display: flex; + flex-wrap: wrap; +} + +.map-listing-item .job-info li { + position: relative; + font-size: 14px; + line-height: 22px; + color: #696969; + font-weight: 400; + padding-left: 25px; + margin-right: 20px; +} + +.map-listing-item .job-info li .icon { + position: absolute; + left: 0; + top: 0; + font-size: 18px; + line-height: 22px; + color: #696969; +} + +.map-listing-item .job-info li a { + color: #696969; +} + +.cluster-map-visible { + text-align: center; + font-size: 16px !important; + color: #ffffff !important; + font-weight: 500 !important; + border-radius: 50%; + width: 40px !important; + height: 40px !important; + line-height: 40px !important; + background-color: #14a077; + border: 7px solid rgba(25, 103, 210, 0.2); + box-shadow: 0 7px 30px rgba(33, 33, 33, 0.3); + box-sizing: content-box; + background-clip: content-box; +} + +.btn-upload { + padding: 16px 47px; +} + +#upload-profile { + margin-bottom: 15px; +} + +#tf-upload-img { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + width: 100%; + padding: 0; + margin: 0; + margin-top: 0px; + margin-bottom: 0px; + cursor: pointer; + opacity: 0; +} + +/* price-range */ +.noUi-target, +.noUi-target * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -ms-touch-action: none; + touch-action: none; + -ms-user-select: none; + -moz-user-select: none; + user-select: none; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.noUi-target { + position: relative; + direction: ltr; +} + +.noUi-base { + width: 100%; + height: 100%; + position: relative; + z-index: 1; +} + +.noUi-origin { + position: absolute; + right: 0; + top: 0; + left: 0; + bottom: 0; +} + +.noUi-handle { + position: relative; + z-index: 1; +} + +.noUi-stacking .noUi-handle { + z-index: 10; +} + +.noUi-state-tap .noUi-origin { + -webkit-transition: left 0.3s, top 0.3s; + transition: left 0.3s, top 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + +.noUi-base, +.noUi-handle { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.noUi-horizontal { + height: 3px; +} + +.noUi-horizontal .noUi-handle { + position: relative; + width: 18px; + height: 18px; + border-radius: 5px; + left: 0px; + top: -8.5px; + border-radius: 100%; + background-color: #FF7101; + border: 2px solid #FFFFFF; + box-shadow: 0px 2px 6px 0px rgba(0, 0, 0, 0.1); +} + +.caption { + margin-bottom: 18px; + font-size: 14px; + font-weight: 500; + line-height: 17px; + color: #24272C; +} + +/* Styling; */ +.noUi-background { + background: #D6D7D9; +} + +.noUi-connect { + background: #FF7101; + -webkit-transition: background 450ms; + transition: background 450ms; +} + +.noUi-origin { + border-radius: 0px; +} + +.noUi-target { + width: 100%; + height: 4px; + border-radius: 0px; +} + +.noUi-horizontal .noUi-handle.noUi-handle-upper { + left: -7px; +} + +/* Handles and cursors; + */ +.noUi-draggable { + cursor: w-resize; +} + +.noUi-vertical .noUi-draggable { + cursor: n-resize; +} + +.noUi-handle { + cursor: default; + -webkit-box-sizing: content-box !important; + -moz-box-sizing: content-box !important; + box-sizing: content-box !important; +} + +.noUi-handle:active { + border: 1px solid #FF7101; +} + +/* Disabled state; */ +[disabled].noUi-connect, +[disabled] .noUi-connect { + background: rgba(255, 113, 1, 0.06); +} + +[disabled].noUi-origin, +[disabled] .noUi-handle { + cursor: not-allowed; +} + +.slider-labels .caption { + font-weight: 500; + font-size: 16px; + font-family: "Inter", sans-serif; +} + +#slider-range-value03::after, +#slider-range-value01::after, +#slider-range-value1::after { + content: " — "; + margin: 0 2px; +} + +.comment-form label { + position: relative; + cursor: pointer; +} + +.comment-form input[type=checkbox] { + position: absolute; + opacity: 0; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; + margin-right: 0px; + margin-bottom: 0px; +} + +.tf-amenities label { + position: relative; + margin-bottom: 15px; +} + +.tf-amenities label input { + position: absolute; + opacity: 0; + width: 100%; + height: 100%; + top: 0; + left: 0; + z-index: 1; + margin-right: 0px; + margin-bottom: 0px; +} + +.btn-checkbox { + width: 20px; + height: 20px; + border: 1px solid #EDEDED; + background-color: #FFFFFF; + border-radius: 6px; + display: flex; + justify-content: center; + margin-right: 10px; +} + +.btn-checkbox:after { + content: "\f00c"; + font-family: "Font Awesome 5 Pro"; + color: #FFFFFF; + display: none; +} + +label input:checked~.btn-checkbox { + background-color: #FF7101; + border: 1px solid #FF7101; +} + +label input:checked~.btn-checkbox:after { + display: block; +} + +fieldset { + position: relative; + width: 100%; + margin-bottom: 10px; +} + +fieldset input { + border: 1px solid #B6B6B6; + padding: 16px 14px 15px 17px; + color: #24272C; + font-weight: 400; + font-size: 13px; + background-color: #FFFFFF; + border-radius: 10px; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + position: relative; + font-family: "Outfit", sans-serif; + line-height: 19.5px; +} + +fieldset input::placeholder { + color: #696665; + line-height: 19.5px; + font-size: 13px; + font-weight: 400; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +fieldset input:focus { + border: 1px solid #FF7101; +} + +[type=radio]:checked, +[type=radio]:not(:checked) { + position: absolute; + z-index: -9999999; + opacity: 0; + visibility: hidden; +} + +[type=radio]:checked+label, +[type=radio]:not(:checked)+label { + position: relative; + padding-left: 28px; + cursor: pointer; + line-height: 20px; + display: inline-block; + color: #696665; +} + +[type=radio]:checked+label:before, +[type=radio]:not(:checked)+label:before { + content: ""; + position: absolute; + left: 0; + top: 0; + width: 22px; + height: 22px; + border: 1px solid #E4E4E4; + border-radius: 100%; + background: #FFFFFF; +} + +[type=radio]:checked+label:after, +[type=radio]:not(:checked)+label:after { + content: ""; + width: 16px; + height: 16px; + background: #FF7101; + position: absolute; + top: 3px; + left: 3px; + border-radius: 100%; + -webkit-transition: all 0.2s ease; + transition: all 0.2s ease; +} + +[type=radio]:not(:checked)+label:after { + opacity: 0; + -webkit-transform: scale(0); + transform: scale(0); +} + +[type=radio]:checked+label:after { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); +} + +.fade-item { + -webkit-transform: translate(0px, 150px); + -moz-transform: translate(0px, 150px); + -ms-transform: translate(0px, 150px); + -o-transform: translate(0px, 150px); + transform: translate(0px, 150px); + opacity: 0; + visibility: hidden; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; +} + +.fade-item.fade-item-1 { + transition-delay: 0.1s; +} + +.fade-item.fade-item-2 { + transition-delay: 0.2s; +} + +.fade-item.fade-item-3 { + transition-delay: 0.3s; +} + +.fade-item.fade-item-4 { + transition-delay: 0.4s; +} + +/* Media Queries +-------------------------------------------------------------- */ +@media only screen and (max-width: 1750px) { + .wrap-map .content-left { + padding: 40px 15px 35px 15px; + } +} + +@media only screen and (max-width: 1600px) { + .main-header .main-menu { + margin-left: 0px; + } +} + +@media only screen and (max-width: 1470px) { + .main-header .main-menu .navigation>li { + margin-right: 10px; + } + + .header-account { + gap: 15px; + } + + .header-account .header-search-icon::after, + .header-account .header-favorite::after { + left: 28px; + } +} + +@media only screen and (max-width: 1440px) { + .why-choose-us-5 .content-wcs { + padding-left: 40px; + padding-right: 5em; + } + + .why-choose-us-10 .content-wcs { + padding-left: 5em; + padding-right: 40px; + } + + .sc-button.btn-55 { + padding: 15px !important; + } +} + +@media only screen and (max-width: 1320px) { + .why-choose-us-10 .content-wcs { + padding-left: 0em; + } + + .why-choose-us-5 .content-wcs { + padding-left: 30px; + padding-right: 0em; + } + + .swiper-button-next.style-1 { + right: 30px; + } + + .swiper-button-prev.style-1 { + left: 30px; + } +} + +@media only screen and (max-width: 1260px) { + .slider.home .content { + padding: 194px 0px 502px 0px; + } +} + +@media only screen and (min-width: 991px) { + .blog-article-grid.list-car-grid-blog-2 { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 30px; + } +} + +@media only screen and (min-width: 1201px) { + .grid-sw-5 { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 30px; + } + + .grid-sw-3 { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 30px; + } + + .grid-sw-4 { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 30px; + } +} + +@media only screen and (max-width: 1200px) { + .filter-mobie { + display: block; + } + + .sidebar-right-listing.style-2, + .sidebar-right-listing { + display: none; + } + + .listing-grid-car-wrap .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(3, 1fr); + } + + .sidebar-right-listing { + max-width: 100%; + } + + .sidebar-right-listing.style-2 { + max-width: 100%; + } + + .listing-grid .text-start { + flex-wrap: wrap; + } + + .grid-5 { + grid-template-columns: repeat(3, 1fr); + } + + .section-why-choose-us2 .content-wcs { + padding-top: 0px; + padding-right: 30px; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-3 { + bottom: 5%; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-2 { + left: 30%; + top: 50%; + } + + .section-why-choose-us2 .image-wcs .image-inner2 { + display: none; + } + + .flat-filter-search.home3 .flat-tabs { + margin-top: -23.6em; + } + + .slider.home2 .slider-item .img-slider { + height: 850px; + } + + .list-car-grid-4 { + grid-template-columns: repeat(3, 1fr); + } + + .header-account ul li:nth-child(2), + .header-account ul li:nth-child(3) { + display: none; + } + + .mobile-button, + .collapse { + display: block !important; + } + + .header-account { + margin-right: 40px; + margin-left: 20px; + } + + .main-header .header-lower .nav-outer, + .header-account .flat-bt-top { + display: none; + } + + .main-header .header-lower { + padding: 20px 0px; + } + + .blog-article-item.style2 .images { + max-width: 230px; + } + + .blog-article-grid.grid-sw-2 { + grid-template-columns: repeat(1, 1fr); + } +} + +@media only screen and (max-width: 1199px) { + .col-xl-3 .tf-icon-box.style-1 { + margin-bottom: 30px; + } +} + +@media only screen and (max-width: 1024px) { + .mobile-menu .bottom-canvas .tf-top-bar-left { + display: block; + padding: 20px 0; + } + + .mobile-menu .bottom-canvas .tf-top-bar-left ul li:not(:last-child) { + margin-bottom: 10px; + } + + .home2 .flat-tabs .wrap-icon.trending2 { + padding: 0px 15px; + } + + .slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap { + padding: 15px; + } + + .wd-search-form-2 { + min-width: 100%; + left: 0px !important; + right: 0px !important; + } + + .slider.home2 .slider-item-content .flat-tabs { + max-width: 100%; + width: 100%; + left: 0; + right: 0; + } + + .slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap { + margin: 0px 15px; + } + + .slider .slider-item .content .sub-title { + font-size: 40px; + line-height: 60px; + } + + .slider.home8 .slider-item .content h1 { + font-size: 70px; + line-height: 70px; + } + + .flat-filter-search.home6 .flat-tabs { + margin-top: -22.2em; + } + + .slider.home5 .slider-item .content { + padding: 173px 0 300px; + } + + .flat-filter-search.home5 .flat-tabs { + margin-top: -16.5em; + } + + .flat-filter-search.home4 .flat-tabs { + margin-top: -17em; + } + + .tf-top-bar .flex-one { + justify-content: center; + } + + .tf-top-bar .flex-one .tf-top-bar-left { + display: none; + } + + .wd-find-select { + flex-wrap: wrap; + gap: 15px; + } + + .wd-find-select .form-style { + margin-right: 0px; + margin-left: 0px; + } + + .flat-filter-search.home .flat-tabs { + margin-top: -20em; + } +} + +@media only screen and (max-width: 991px) { + .box-car-list.style-2 { + flex-direction: column; + } + + .box-car-list.style-2 .image-group { + width: 100%; + } + + .flat-tabs .tab-title.style { + overflow-x: scroll; + white-space: nowrap; + } + + .blog-article-item.style2 .images { + max-width: 100%; + } + + .blog-article-item.style2 { + flex-direction: column; + } + + .listing-sidebar .mb-40 { + margin-bottom: 20px !important; + } + + .heading-widget .title { + font-size: 25px; + line-height: 35px; + } + + .listing-recommended .item { + gap: 10px; + } + + .listing-recommended .item .image { + max-width: 100%; + } + + .profile-contact .btn-contact, + .listing-recommended .item { + flex-wrap: wrap; + } + + .widget-listing { + padding: 15px; + } + + .listing-sidebar { + margin-top: 0px; + position: fixed; + height: 100%; + left: -100%; + top: 0; + z-index: 99; + max-width: 320px; + padding: 15px; + background-color: #fff; + box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 6px 0px; + overflow: scroll; + transition: all 0.3s ease-in-out; + } + + .listing-sidebar.open { + left: 0%; + } + + .btn-siderbar-mobie-filter { + display: flex; + } + + .tf-team.box .content { + padding: 25px 0 40px; + } + + .listing-grid-car-wrap .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(2, 1fr); + } + + .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(2, 1fr); + } + + .tab-listing-scroll .nav-pills { + width: 1000px; + overflow-x: scroll; + white-space: nowrap; + } + + .tfcl-listing-info.style-grid .image-list-details .image { + height: 300px; + } + + .listing-detail.style-1 .listing-detail-wrap { + padding-right: 0px; + } + + .widget-pricing { + margin-bottom: 30px; + } + + .tf-section-map .map, + .tf-section-map .map-content { + height: 400px; + } + + br { + display: none; + } + + .logo-footer { + text-align: center; + } + + .wd-search-form .box1.grid-4 { + grid-template-columns: repeat(2, 1fr); + } + + .slider.home9 .content { + padding: 150px 0px 80px 0px; + } + + .loan-calculator.inner-6 { + padding: 70px 0px 70px 0px !important; + } + + .blog-article-right { + padding-left: 0px; + padding-bottom: 0px; + padding-top: 30px; + border-left: 1px solid transparent; + } + + .section-why-choose-us2 .image-wcs img { + width: 100%; + } + + .flat-tabs .tab-title.style li h5 { + margin-bottom: 10px; + } + + .col-lg-6:not(:last-child) .tf-image-box.style1, + .col-lg-6:not(:last-child) .tf-image-box.style2, + .col-md-6:not(:last-child) .tf-icon-box.style-1 { + margin-bottom: 30px; + } + + .loan-calculator { + padding: 70px 0px; + } + + .tf-section { + padding: 60px 0; + } + + .tf-section2 { + padding-top: 60px; + } + + .tf-section3 { + padding-bottom: 60px; + } + + .list-car-grid-4 { + grid-template-columns: repeat(2, 1fr); + } + + .modal-dialog-centered { + margin: 15px; + } + + .header-account .search-mobie>.wd-find-select { + margin-top: 26px; + } + + .flat-blog-list .wrap-blog { + padding-right: 0px; + } + + .flat-property .post { + margin-bottom: 30px; + } + + .footer-main .widget { + margin-bottom: 40px; + } + + .footer-main #logo-footer { + text-align: center; + } + + .footer-bottom .footer-bottom-right { + justify-content: center; + margin-top: 20px; + } + + .wd-search-form .box2 { + gap: 0px; + } + + .side-blog { + padding-top: 40px; + } +} + +@media only screen and (max-width: 767px) { + .main-header .logo-box .logo img { + width: 180px; + } + + .gap-30 { + gap: 15px; + } + + .heading-section { + margin-bottom: 30px; + } + + .form-sl .wd-find-select .inner-group.select-style .form-group-1 { + border-bottom: 1px solid #EDEDED; + padding-bottom: 10px; + } + + .listing-slide .swiper-slide.swiper-slide-active .content-style { + margin-top: 10px; + display: block; + } + + .form-sl .wd-find-select.wd-search-white .inner-group .form-group-1 { + width: 100%; + border-bottom: 1px solid rgba(237, 237, 237, 0.1215686275); + padding-bottom: 12px; + } + + .tf-icon-box.style-3 { + margin-bottom: 20px; + } + + .listing-wrap-map .list-car-1.list-car-list-1 .box-car-list { + flex-wrap: wrap; + } + + .list-car-list-1 .box-car-list>.image-group { + width: 100% !important; + } + + .mg-42 { + margin: 0px 0; + } + + .why-choose-us-5 .content-wcs { + padding-top: 30px; + } + + .heading-section .flex-six { + justify-content: flex-start; + } + + .listing-wrap-map .list-car-1.list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(1, 1fr); + } + + #map .infoBox { + margin-left: 20px; + margin-bottom: -40px; + } + + .listing-calculator.loan-calculator-form .button-boxs .sc-button { + width: 100% !important; + min-width: 100% !important; + } + + .heading-widget .title { + font-size: 30px; + line-height: 37px; + text-align: center; + } + + .tfcl-listing-info.style-grid .image-list-details.item-4, + .tfcl-listing-info.style-grid .image-list-details.item-5 { + display: none; + } + + .sale-agents-detail .image, + .sale-agents-detail .image img { + min-width: 100%; + } + + .sale-agents-detail .content { + margin-top: 0px; + } + + .sale-agents-detail { + flex-wrap: wrap; + } + + .wrap-map { + display: flex; + flex-wrap: wrap; + flex-direction: column; + } + + .wrap-map .content-left { + width: 100%; + } + + .wrap-map .content-right { + width: 100%; + position: relative; + } + + .content-right #map, + .content-right iframe { + height: 500px; + } + + .tf-banner .content .heading h1 { + font-size: 50px; + line-height: 55px; + } + + .tf-banner.style-2 .content { + padding: 80px 0px 130px 0px; + } + + .box-car-list.style-2 { + flex-wrap: wrap; + } + + .box-car-list.style-2>.image-group { + width: 100% !important; + } + + .why-choose-us-10 .image-wcs .bg-image-5 { + padding: 100px 0; + } + + .why-choose-us-10 .content-wcs { + padding-top: 0px; + padding-left: 0em; + padding-right: 0px; + } + + .find-car-h10 .content-wcs { + padding-top: 55px; + padding-bottom: 0px; + padding-left: 0px; + } + + .flat-filter-search.home10 .flat-tabs { + margin-top: -45em; + } + + .slider.home10 .content { + padding: 153px 0px 700px 0px; + } + + .grid-5 { + grid-template-columns: repeat(1, 1fr); + } + + .listing-slide .swiper-slide.swiper-slide-active .img-style { + transform: scale(1); + text-align: center; + } + + .listing-slide .swiper-slide.swiper-slide-active:before { + width: 300px; + height: 300px; + } + + .flat-filter-search.home6 .flat-tabs { + margin-top: -38.2em; + } + + .why-choose-us-5 .content-wcs { + padding-left: 0px; + padding-right: 0em; + padding-bottom: 0px; + } + + .flat-filter-search.home5 .flat-tabs { + margin-top: -30.8em; + } + + .slider.home5 .slider-item .content { + padding: 173px 0 470px; + } + + .specifications-wrap .specifications { + width: 135px; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-2 { + left: 6%; + top: 50%; + } + + .section-why-choose-us2 .content-wcs { + padding-top: 0px; + padding-right: 0px; + } + + .slider.home4 .content { + padding: 200px 0px 540px 0px; + } + + .flat-filter-search.home4 .flat-tabs { + margin-top: -35.3em; + } + + .slider.home4 .content { + padding: 200px 0px 700px 0px; + } + + .section-why-choose-us .content-wcs { + padding-left: 0px; + padding-top: 50px; + } + + .section-why-choose-us .image-wcs .image-inner2 { + bottom: 0%; + right: 0%; + } + + .slider.home3 .slider-item .content { + padding: 70px 0 550px; + } + + .flat-filter-search.home3 .flat-tabs { + margin-top: -38.6em; + } + + .loan-calculator.inner-2 { + padding: 60px 0px 170px 0px !important; + } + + .section-feature-specs .content-feature-specs { + margin-top: 40px; + } + + .col-md-4:not(:last-child) .box-car-list, + .col-md-4:not(:last-child) .compare-item { + margin-bottom: 30px; + } + + .review-car .slider-item .content { + padding: 93px 15px 70px 15px; + } + + .review-car .slider-item .content .heading h1 { + font-size: 40px; + line-height: 45px; + } + + .flat-filter-search.home .flat-tabs { + margin-top: -35em; + } + + .slider .slider-item .content h1 { + font-size: 50px; + line-height: 50px; + } + + .slider.home .content { + padding: 140px 0px 502px 0px; + } + + .swiper-button-prev, + .swiper-button-next { + display: none; + } + + .form-sl .wd-find-select .inner-group { + flex-wrap: wrap; + gap: 10px !important; + } + + .form-sl .wd-find-select .inner-group.select-style .form-group-1:not(:last-child)::before { + background-color: unset; + } + + .modal-dialog-centered .images { + display: none; + } + + .preload-container .middle { + left: 45%; + } +} + +@media only screen and (max-width: 600px) { + .tf-team h3 { + font-size: 18px; + line-height: 28.24px; + } + + .tf-team .icon-socials { + width: 140px; + height: 30px; + } + + .tf-team.box .content { + gap: 10px; + flex-direction: column; + align-items: center; + text-align: center; + } + + .listing-line { + margin-top: 30px; + margin-bottom: 30px; + } + + .box-car-list .content .days-box { + gap: 15px; + flex-wrap: wrap; + } + + .box-car-list .content .icon-box { + gap: 10px; + margin-bottom: 10px; + } + + .box-car-list .content .days-box { + padding-top: 10px; + margin-top: 10px; + } + + .box-car-list .image-group .top .flag-tag { + padding: 4px 6px; + font-size: 10px; + } + + .box-car-list .content { + padding: 15px 10px 15px 10px; + } + + .loan-calculator-form { + padding: 15px; + } + + #footer .footer-top .box-footer-top { + gap: 10px; + flex-direction: column; + text-align: center; + margin-bottom: 20px; + } + + .box-car-list .content .days-box .img-author { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 10px; + } + + #compare_listing_wrap .compare-listing .compare-listing-body { + justify-content: center; + flex-wrap: wrap; + } + + .box-tab { + overflow-x: scroll; + overflow-y: hidden; + } + + .map-listing-item .inner-box { + max-width: 200px; + } + + .listing-grid-car-wrap .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(1, 1fr); + } + + .list-car-list-1.list-car-grid-1 { + grid-template-columns: repeat(1, 1fr); + } + + .features-inner>.inner { + grid-template-columns: repeat(1, 1fr); + } + + .slider.home7 .slider-item .content { + padding: 145px 0px 170px 0px; + gap: 40px; + } + + .slider.home7 .slider-item .content .controller-button { + display: none; + } + + .box-car-list.style-2 { + flex-wrap: wrap; + } + + .box-car-list.style-2>.image-group { + width: 100%; + } + + .list-car-grid-4 { + gap: 15px; + } + + .blog-article-item.style2 .images { + max-width: 100%; + } + + .header-account .search-mobie>.wd-find-select { + right: -6em; + } + + .header-account .fs-20, + .header-account .fs-18 { + font-size: 16px; + } + + .header-account .header-search-icon::after, + .header-account .header-favorite::after { + left: 25px; + } +} + +.footer-heading-mobie { + display: none; +} + +@media only screen and (max-width: 575px) { + + .footer-heading-desktop, + .tf-collapse-content { + display: none; + } + + .footer-heading-mobie { + display: block; + } + + .footer-heading-mobie { + position: relative; + } + + .footer-col-block.open .footer-heading-mobie::before { + transform: translate(0%, -50%) rotate(90deg); + } + + .listing-details-mobie::before, + .listing-details-mobie::after { + background-color: #24272C !important; + } + + .footer-heading-mobie::before { + position: absolute; + content: ""; + right: 15px; + top: 50%; + transform: translate(-50%, -50%); + width: 1px; + height: 12px; + background-color: #FFFFFF; + transition: 0.25s ease-in-out; + } + + .footer-heading-mobie::after { + position: absolute; + content: ""; + right: 10px; + top: 50%; + transform: translateY(-50%); + width: 12px; + height: 1px; + background-color: #FFFFFF; + transition: 0.25s ease-in-out; + } +} + +@media only screen and (max-width: 560px) { + .list-car-list-1 .box-car-list .content .inner2 { + width: auto; + padding-left: 0px; + border-left: 0px; + } + + .box-car-list.style-2 .content { + flex-wrap: wrap; + padding: 20px 15px !important; + } + + .tf-image-box.style1 { + flex-direction: column; + text-align: center; + } + + .tf-image-box.style2 { + flex-wrap: wrap; + justify-content: center; + text-align: center; + } + + .tf-image-box.style2 .content .flex.gap-8 { + justify-content: center; + } +} + +@media only screen and (max-width: 480px) { + + .list-car-grid-4 .box-car-list .image-group .top, + .list-car-grid-4 .box-car-list .image-group .top ul { + align-items: flex-start; + flex-direction: column; + } + + .tf-btn-arrow { + padding: 7px 15px; + font-size: 13px; + } + + .list-car-grid-2 { + gap: 15px; + } + + .tf-section { + padding: 50px 0; + } + + .gap-20 { + gap: 10px; + } + + .heading-section { + margin-bottom: 20px; + } + + h2 { + font-size: 25px; + line-height: 33.8px; + } + + .link-style-3 a { + font-size: 12px; + } + + .wrap-icon.link-style-3 { + gap: 10px 15px; + } + + .scrollspy-example { + padding: 0px 5px; + } + + .widget-listing { + padding: 20px; + } + + .profile-contact .btn-contact { + flex-wrap: wrap; + } + + .slider.home8 .slider-item .content h1, + .slider.home9 .content .heading h1 { + font-size: 45px; + line-height: 55px; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-3 { + bottom: 15%; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-2 { + top: 45%; + } + + .section-why-choose-us2 .image-wcs .tf-icon-list.po-1, + .section-why-choose-us2 .image-wcs .tf-icon-list.po-2, + .section-why-choose-us2 .image-wcs .tf-icon-list.po-3 { + right: 10%; + left: 10%; + } + + .tf-icon-box.style-4 { + flex-wrap: wrap; + } + + .flat-filter-search.home .flat-tabs { + margin-top: -38em; + } + + .wd-search-form .box1.grid-4 { + grid-template-columns: repeat(1, 1fr); + } + + .wd-search-form .form-group { + margin-bottom: 15px; + } + + .blog-article-item.style3 .images { + max-width: 100%; + width: 100%; + } + + .blog-article-item.style3 { + gap: 20px; + flex-wrap: wrap; + } + + .slider.home5 .slider-item .content .heading { + margin-left: 0px; + padding-top: 30px; + } + + .specifications-wrap .specifications { + width: calc(50% - 10px); + } + + .specifications-wrap { + display: flex; + justify-content: space-between; + flex-wrap: wrap; + gap: 10px; + } + + .slider.home5 .slider-item .content { + flex-wrap: wrap; + } + + .slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap { + padding: 30px 15px; + } + + .flat-tabs .box-tab.style1 .tab-title li { + width: auto; + height: 45px; + line-height: 45px; + margin-bottom: 10px; + } + + .slider.home2 .slider-item-content .flat-tabs { + bottom: 40px; + left: 0; + right: 0; + } + + .wd-find-select .button-search a { + min-width: auto; + } + + .loan-calculator-form #loan-calculator .grid-sw-2 { + grid-template-columns: repeat(1, 1fr); + gap: 0px; + } + + .loan-calculator-form #loan-calculator fieldset { + margin-bottom: 20px; + } +} + +#toggle-rtl { + padding: 0; + width: 40px; + height: 40px; + min-width: 30px; + text-transform: uppercase; + z-index: 999; + font-size: 12px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 3px; + background-color: #FF7101; + color: #FFFFFF; +} + +#toggle-rtl:hover { + background-color: #24272C; +} + +.rtl input { + padding: 17px 18px 17px 44px; +} + +.rtl .section-why-choose-us2 .image-wcs .image-inner2 { + float: left; +} + +.rtl .section-why-choose-us2 .content-wcs { + padding-left: 77px; +} + +.rtl .blog-article-item.style1 { + direction: rtl; +} + +.rtl .blog-article-item .images .date { + right: 10px; + left: unset; +} + +.rtl .box-car-list { + direction: rtl; +} + +.rtl .section-feature-specs .content-feature-specs .feature-specs-box .content .days-box .img-author img { + margin-right: 0; + margin-left: 12px; +} + +.rtl .section-feature-specs .image-inner1 { + margin-right: 8.7em; + margin-left: 0; +} + +.rtl .carousel-2 { + direction: initial; +} + +.rtl .slider.home2 .slider-item-content { + direction: rtl; +} + +.rtl .mobile-button { + left: 15px; + right: unset; +} + +.rtl .icon-social a { + margin-right: 0; + margin-left: 8px; +} + +.rtl .icon-social a:last-child { + margin-left: 0; +} + +.rtl .flat-blog-grid .box .content .sub-box>a:not(:first-child) { + margin-right: 9px; + padding-right: 9px; + margin-left: 0; + padding-left: 0; +} + +.rtl .flat-blog-grid .box .content .sub-box>a:not(:first-child)::before { + right: 0; + left: unset; +} + +.rtl .blog-article-item .content .sub-box>a:not(:last-child) { + margin-right: 0px; + padding-right: 0px; + margin-left: 9px; + padding-left: 9px; +} + +.rtl .blog-article-item .content .sub-box>a:not(:last-child)::before { + left: 0; + right: unset; +} + +.rtl .box-car-list .content .icon-box i { + margin-right: 0px; + margin-left: 4px; +} + +.rtl .box-car-list .content .days-box .img-author img { + margin-left: 2px; + margin-right: 0; +} + +.rtl .form-style { + margin-right: 60px; + margin-left: 10px; +} + +.rtl .nice-select { + text-align: right; +} + +.rtl .nice-select:after, +.rtl .tf-select:after { + left: 24px; + right: unset !important; +} + +.rtl .flat-filter-search.home .form-sl { + border-radius: 16px 0px 16px 16px; +} + +.rtl .form-sl .wd-find-select .inner-group.select-style .group-select .nice-select { + margin-left: 0; + margin-right: -15px; +} + +.rtl .form-sl .wd-find-select .inner-group.select-style .form-group-1:not(:last-child)::before { + left: -25px; + right: unset; +} + +.rtl .flat-tabs .tab-title.style li { + margin-left: 25px; + margin-right: 0; +} + +.rtl .flat-tabs .tab-title li:first-child { + border-top-left-radius: 0px; + border-top-right-radius: 16px; + margin-right: 0; +} + +.rtl .flat-tabs .tab-title li:last-child { + border-top-left-radius: 16px; + border-top-right-radius: 0px; +} + +.rtl .flat-tabs .box-tab.style3 .tab-title li, +.rtl .flat-tabs .box-tab.style2 .tab-title li, +.rtl .flat-tabs .box-tab.style1 .tab-title li { + border-radius: 14px; +} + +.rtl .flat-tabs .box-tab.style3 .tab-title li:not(:last-child), +.rtl .flat-tabs .box-tab.style2 .tab-title li:not(:last-child), +.rtl .flat-tabs .box-tab.style1 .tab-title li:not(:last-child) { + margin-right: 0px; + margin-left: 10px; +} + +.rtl .flat-tabs .box-tab.style4 .tab-title li { + border-radius: 100px; +} + +.rtl .flat-tabs .box-tab.style4 .tab-title li:not(:last-child) { + margin-right: 0px; + margin-left: 10px; +} + +.rtl .flat-tabs .box-tab.style5 .tab-title li { + border-radius: 10px; +} + +.rtl .flat-tabs .box-tab.style5 .tab-title li:not(:last-child) { + margin-right: 0px; + margin-left: 10px; +} + +.rtl .flat-tabs .tab-title.style1 li { + border-radius: 10px; +} + +.rtl .tf-icon-box .btn-button { + display: inline-flex; + align-items: center; +} + +.rtl .tf-icon-box .btn-button i { + margin-left: 0px; + margin-right: 9px; + transform: rotateY(180deg); +} + +.rtl .tf-btn-arrow { + display: flex; + align-items: center; +} + +.rtl .tf-btn-arrow i { + margin-left: 0px; + margin-right: 6px; + transform: rotateY(180deg); +} + +.rtl .btn-checkbox { + margin-left: 10px; + margin-right: 0; +} + +.rtl .slider .slider-item .content h1 { + text-align: end; +} + +.rtl .slider .slider-item .content .category-list-car { + justify-content: end; + flex-direction: row-reverse; +} + +.rtl .slider .slider-item .content .chat-wrap { + justify-content: end; + flex-direction: row-reverse; +} + +.rtl .slider .slider-item .content .chat-wrap .flex-three { + flex-direction: row-reverse; +} + +.rtl .slider .slider-item .content .chat-wrap .content-chat { + padding-left: 0px; + padding-right: 7px; + text-align: end; +} + +.rtl .modal-content .close { + left: 42px; + right: unset; +} + +.rtl .login-form .comments .comment-form fieldset input { + padding: 17px 44px 17px 18px; +} + +.rtl .comments .comment-form .icon { + left: unset; + right: 18px; +} + +.rtl .comments .comment-form .toggle-password { + left: 15px; + right: unset; +} + +.rtl .modal-body .button-box a svg { + margin-right: 0px; + margin-left: 10px; +} + +.rtl .main-header .main-menu .navigation>li { + margin-left: 27px; + margin-right: 0; +} + +.rtl .main-header .main-menu .navigation>li>ul>li>ul { + left: unset; + right: 100%; +} + +.rtl .main-header .main-menu .navigation>li a { + text-align: start; +} + +.rtl .main-header .main-menu .navigation>li a::after { + left: 13px; + right: unset !important; + transform: rotateY(180deg); +} + +.rtl .header-account .header-search-icon::after, +.rtl .header-account .header-favorite::after { + right: 37px; + left: unset; +} + +.rtl .header-account .flat-bt-top .sc-button svg { + margin-right: 0; + margin-left: 9px; +} + +.rtl .sc-button svg { + margin-right: 0; + margin-left: 17px; +} + +.rtl #goTop { + left: 20px; + right: unset; +} + +.rtl .mobile-menu .login-box i { + margin-right: 0px; + margin-left: 5px; +} + +.rtl .button-search a span { + margin-right: 0px; + margin-left: 8px; +} + +.rtl .sc-button i { + margin-left: 0px; + margin-right: 10px; +} + +.rtl .sc-button.btn-1 i { + margin-left: 0px; + margin-right: 10px; +} + +.rtl .sc-button.btn-1 { + display: inline-flex; + align-items: center; +} + +.rtl .sc-button.btn-1 svg, +.rtl .sc-button.btn-1 i { + transform: rotateY(180deg); + margin-right: 10px; + margin-left: 0; + height: unset; +} + +@keyframes link-icon2 { + 0% { + transform: rotateY(180deg) translateY(0); + opacity: 1; + } + + 49% { + transform: rotateY(180deg) translateY(20px); + opacity: 0; + } + + 50% { + transform: rotateY(180deg) translateY(-20px); + opacity: 0; + } + + 100% { + transform: rotateY(180deg) translateY(0); + opacity: 1; + } +} + +.rtl .sc-button.btn-svg { + display: inline-flex; + align-items: center; +} + +.rtl .sc-button.btn-svg svg, +.rtl .sc-button.btn-svg i { + transform: rotateY(180deg); + margin-right: 10px; + margin-left: 0; + height: unset; +} + +.rtl .tf-image-box .content .find-cars { + display: inline-flex; + align-items: center; +} + +.rtl .tf-image-box .content .find-cars i { + transform: rotateY(180deg); + margin-right: 9px; + margin-left: 0; + height: unset; +} + +.rtl .flat-tabs .content-tab.style2 .form-style { + margin-right: 10px; +} + +.rtl .tf-icon-list i { + margin-right: 0px; + margin-left: 10px; +} + +.rtl .section-why-choose-us .image-wcs .icon-list { + left: 10%; + right: unset; +} + +.rtl .slider.home3 .slider-item .heading { + margin-left: auto; + text-align: end; +} + +.rtl .review-car .slider-item { + direction: rtl; +} + +.rtl .section-why-choose-us .content-wcs { + padding-left: 0px; + padding-right: 75px; +} + +.rtl .main-header.style3 .mobile-button { + left: 3px; + right: unset; +} + +.rtl .slider.home5 .slider-item .content { + flex-direction: row-reverse; +} + +.rtl .slider.home5 .slider-item .content .heading { + margin-right: 30px; + margin-left: 0; + text-align: end; +} + +.rtl .specifications-wrap { + text-align: end; +} + +.rtl .specifications-wrap .load-more .chat { + flex-direction: row-reverse; +} + +.rtl .specifications-wrap .load-more .chat i { + transform: rotateY(180deg); + margin-right: 10px; + margin-left: 0; +} + +.rtl .why-choose-us-5 .content-wcs { + padding-right: 80px; + padding-left: 20.3em; +} + +.rtl .swiper-button-prev.style5-prev { + right: auto; + left: 90px; +} + +.rtl .swiper-button-next.style5-next { + right: auto; + left: 90px; +} + +.rtl .nice-select .option { + text-align: right; +} + +.rtl .blog-article-right { + padding-left: 0px; + padding-right: 30px; + border-right: 1px solid #EDEDED; + border-left: 0; +} + +.rtl .slider.home7 .slider-item .content { + direction: rtl; +} + +.rtl .slider.home7 .slider-item .content h1 { + text-align: right; +} + +.rtl .slider.home7 .slider-item .content .controller-button { + margin-left: 10px; + margin-right: 0; +} + +.rtl .specifications-wrap.style2 .specifications { + text-align: right; +} + +.rtl .controller-button .content-controller { + padding-left: 12px; + padding-right: 0; + flex-grow: 1; +} + +.rtl .swiper-button-prev.style7-prev { + left: 180px; + right: auto; +} + +.rtl .swiper-button-next.style7-next { + left: 102px; + right: auto; +} + +.rtl .slider.home8 .slider-item .content h1 { + text-align: center; +} + +.rtl .slider.home10 .content { + direction: rtl; +} + +.rtl .slider.home10 .content .heading { + text-align: right; +} + +.rtl .slider.home10 .content .heading h1 { + text-align: right; +} + +.rtl .find-car-h10 .content-wcs { + padding-left: 0px; + padding-right: 30px; +} + +.rtl .why-choose-us-10 .content-wcs { + padding-right: 20.8em; + padding-left: 80px; +} + +.rtl .flat-title .title-inner .title-group>a { + display: inline-flex; + align-items: center; +} + +.rtl .flat-title .title-inner .title-group>a::after { + transform: rotateY(180deg); +} + +.rtl .flat-blog-detail .icon-boxs svg { + margin-left: 4px; + margin-right: 0; +} + +.rtl .flat-blog-detail .share-box p { + margin-left: 9px; + margin-right: 0; +} + +.rtl .flat-property-detail .wrap-review .comment-list li .comment-list-wrap .content { + padding: 0px 20px 0px 0; +} + +.rtl .flat-property-detail .wrap-review .comment-list li .helpful { + margin-right: 12px; + margin-left: 0; +} + +.rtl .widget-rent .search-form .search-field { + padding: 14px 43px 14px 15px; +} + +.rtl .widget-rent .search-form i { + right: 19px; + left: unset; + cursor: pointer; +} + +.rtl .side-bar .widget-listings .box-listings .img-listings { + margin-left: 3px; + margin-right: 0; +} + +.rtl .side-bar .widget-listings .box-listings .content { + padding-right: 8px; + padding-left: 0; +} + +.rtl .side-bar .newsletter .form-newsletter .button-submit { + left: 0; + right: unset; + transform: rotate(180deg) translateY(50%); +} + +.rtl .flat-property .inner-heading .social-listing p { + margin-left: 13px; + margin-right: 0; +} + +.rtl .flat-blog-grid .box .date { + right: 10px; + left: unset; +} + +.rtl .tfcl-pagination span i, +.rtl .tfcl-pagination a i, +.rtl .themesflat-pagination ul li .page-numbers.style i { + transform: rotateY(180deg); +} + +.rtl .side-bar .widget-listings .box-listings .content span.date i { + margin-left: 5px; + margin-right: 2px; +} + +.rtl .flat-blog .sub-box .title-2 { + margin-left: 24px; + margin-right: 0; +} + +.rtl .flat-blog .sub-box .title-2::after { + left: -13px; + right: unset; +} + +.rtl .flat-toggle.style-1 .btn-toggle { + left: 12px; + right: unset; +} + +.rtl #compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-remove { + margin-left: 20px; + margin-right: 0; +} + +.rtl #compare_listing_wrap .compare-listing .compare-listing-body .compare-thumb-main .compare-thumb .compare-listing-img { + margin-left: 21px; + margin-right: 0; +} + +.rtl .search-dealer-list .filter-search a svg { + margin-left: 8px; + margin-right: 0; +} + +.rtl .search-dealer-list .search-submit i { + margin-right: 6px; + margin-left: 0; +} + +.rtl .tf-dealer-list .dealer-phone a svg { + margin-left: 6px; + margin-right: 0; +} + +.rtl .tf-dealer-list .dealder-button a { + display: inline-flex; + align-items: center; +} + +.rtl .tf-dealer-list .dealder-button a i { + margin-right: 10px; + margin-left: 0; + transform: rotateY(180deg); +} + +.rtl .widget-dealer-contact .list-authencation li { + display: inline-flex; + align-items: center; + flex-direction: row-reverse; +} + +.rtl .widget-dealer-contact .list-authencation li i { + margin-right: 3px; + margin-left: 0; +} + +.rtl .widget-rating .icon-star { + margin-left: 12px; + margin-right: 0; +} + +.rtl .widget-rating .number { + margin-left: 20px; + margin-right: 0; +} + +.rtl .flat-toggle.style-2 .btn-toggle { + left: 30px; + right: unset; +} + +.rtl .sidebar-right-listing .clear i { + margin-left: 6px; + margin-right: 0; +} + +.rtl .list-car-list-1 .box-car-list .content .inner1 { + text-align: right; +} + +.rtl .list-car-list-1 .box-car-list .content .inner1 .view-car { + display: inline-flex; + align-items: center; +} + +.rtl .list-car-list-1 .box-car-list .content .inner1 .view-car i { + margin-right: 3px; + margin-left: 0; + transform: rotateY(180deg); +} + +.rtl .list-car-list-1 .box-car-list .content .inner2 { + border-right: 1px solid #EDEDED; + border-left: 0; + padding-right: 30px; + padding-left: 0; + text-align: right; +} + +.rtl .list-car-list-1 .box-car-list .content .chat .icon { + margin-left: 4px; + margin-right: 0; +} + +.rtl .list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 { + padding-right: 0px; + border-right: unset; +} + +.rtl .wrap-map .content-right { + left: 0; + right: unset; +} + +.rtl .profile-contact .btn-contact .btn-pf.bg-green, +.rtl .profile-contact .btn-contact .btn-pf.bg-orange { + flex-direction: row-reverse; +} + +.rtl .listing-description .list-file a { + display: inline-flex; + align-items: center; + flex-direction: row-reverse; +} + +.rtl .listing-description .list-file a i { + margin-right: 6px; + margin-left: 0; + transform: rotateY(180deg); +} + +.rtl .listing-infor-box .icon { + margin-left: 10px; + margin-right: 0; +} + +.rtl .features-inner>.inner .listing-feature-wrap i { + margin-left: 9px; + margin-right: 0; +} + +.rtl .widget-pricing .check li::before { + margin-left: 13px; + margin-right: 0; +} + +.rtl .widget-pricing .badge-table { + left: -35px; + right: unset; + transform: rotate(-45deg); +} + +.rtl .map-listing-item .location { + display: inline-flex; + align-items: center; +} + +.rtl .map-listing-item .location i { + margin-left: 5px; + margin-right: 0; +} + +@media (max-width: 1440px) { + + .rtl .header-account .header-search-icon::after, + .rtl .header-account .header-favorite::after { + right: 28px; + } + + .rtl .why-choose-us-5 .content-wcs { + padding-right: 40px; + padding-left: 5em; + } + + .rtl .why-choose-us-10 .content-wcs { + padding-right: 5em; + padding-left: 40px; + } +} + +@media only screen and (max-width: 1200px) { + .rtl .header-account { + margin-left: 40px; + margin-right: 20px; + } + + .rtl .tf-sw-mobile6, + .rtl .tf-sw-mobile2, + .rtl .tf-sw-mobile4 { + direction: rtl; + } + + .rtl .section-why-choose-us2 .content-wcs { + padding-right: 0; + padding-left: 0; + } + + .rtl .why-choose-us-5 .content-wcs { + padding-right: 30px; + padding-left: 0em; + } + + .rtl .why-choose-us-10 .content-wcs { + padding-right: 0px; + } +} + +@media only screen and (max-width: 1024px) { + .rtl .wd-find-select .form-style { + margin-right: 0px; + margin-left: 0px; + } +} + +@media only screen and (max-width: 991px) { + .rtl .section-why-choose-us .content-wcs { + padding-right: 0px; + } + + .rtl .blog-article-right { + padding-right: 0px; + border-right: 0; + } +} + +@media only screen and (max-width: 767px) { + .rtl .find-car-h10 .content-wcs { + padding-right: 0px; + } + + .rtl .slider.home4 .content h1 { + text-align: center; + } + + .rtl .header-account { + margin-left: 50px !important; + margin-right: 20px !important; + } + + .rtl .why-choose-us-5 .content-wcs { + padding-left: 0px; + padding-right: 0em; + padding-bottom: 0px; + padding-top: 30px; + } + + .rtl .why-choose-us-10 .content-wcs { + padding-left: 0px; + } + + .rtl .find-car-h10 .content-wcs { + padding-bottom: 0px; + padding-left: 0px; + } +} + +@media only screen and (max-width: 600px) { + + .rtl .header-account .header-search-icon::after, + .rtl .header-account .header-favorite::after { + right: 25px; + } + + .rtl .list-car-list-1 .box-car-list .content .inner2 { + padding-right: 0px; + border-right: 1px solid transparent; + } +} + +@media only screen and (max-width: 575px) { + .rtl .footer-heading-mobie::before { + right: unset; + left: 15px; + } + + .rtl .footer-heading-mobie::after { + right: unset; + left: 10px; + } +} + +@media only screen and (max-width: 480px) { + .rtl .specifications-wrap { + justify-content: flex-end; + } +} + +.dark-theme { + background-color: #171A21; +} + +.dark-theme .theme-light { + display: block !important; +} + +.dark-theme .theme-dark { + display: none !important; +} + +.dark-theme .popup-setting .popup-setting-container { + background-color: #21252F; +} + +.dark-theme .popup-setting .popup-setting-container .title { + color: #fff; +} + +.dark-theme .search-form .search-field { + background-color: rgb(33, 37, 47) !important; +} + +.dark-theme .mobile-menu .nav-logo { + background-color: rgb(33, 37, 47); +} + +.dark-theme .mobile-menu .login-box { + border-color: rgba(255, 255, 255, 0.1); + color: #FFFFFF; +} + +.dark-theme .mobile-menu .menu-box { + background-color: rgb(33, 37, 47); +} + +.dark-theme .mobile-menu .navigation li.current>a { + color: #FF7101; +} + +.dark-theme .mobile-menu .navigation li>a { + color: #FFFFFF; +} + +.dark-theme .mobile-menu .navigation li ul { + background-color: rgb(33, 37, 47); +} + +.dark-theme .mobile-menu .navigation li.dropdown2 .dropdown2-btn::before { + color: #FFFFFF; +} + +.dark-theme .mobile-menu .menu-outer, +.dark-theme .mobile-menu .button-mobi-sell { + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme h1, +.dark-theme h2, +.dark-theme h3, +.dark-theme h4, +.dark-theme h5, +.dark-theme h6 { + color: #FFFFFF; +} + +.dark-theme .heading-section p { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .tf-btn-arrow { + color: #FFFFFF; + border: 1px solid rgba(255, 255, 255, 0.1607843137); +} + +.dark-theme .tf-btn-arrow:hover { + border-color: #FF7101; +} + +.dark-theme .slider.home2 .slider-item-content .flat-tabs .flat-tabs-wrap h1 { + color: #24272C; +} + +.dark-theme .flat-tabs .tab-title.style { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} + +.dark-theme .flat-tabs .tab-title.style li .inner { + color: rgba(255, 255, 255, 0.5); +} + +.dark-theme .flat-tabs .tab-title.style li:hover .inner, +.dark-theme .flat-tabs .tab-title.style li.active .inner { + color: #FF7101 !important; +} + +.dark-theme .box-car-list:not(.style-4) { + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .box-car-list:not(.style-4) .content .days-box { + border-color: rgba(255, 255, 255, 0.1) !important; +} + +.dark-theme .box-car-list:not(.style-4) .content .days-box .img-author span { + color: #FFFFFF !important; +} + +.dark-theme .list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .view-car { + color: rgba(255, 255, 255, 0.4); + border: 1px solid rgba(255, 255, 255, 0.1607843137); +} + +.dark-theme .list-car-list-1.list-car-grid-1 .box-car-list.style-2 .content .inner2 .view-car:hover { + color: #FFFFFF; +} + +.dark-theme .list-car-list-1 .box-car-list .content .inner2 { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .list-car-list-1 .box-car-list .content .inner2 .days-box { + border-top: 0; +} + +.dark-theme .list-car-list-1 .box-car-list .content .inner2 .chat { + border-color: rgba(255, 255, 255, 0.1019607843); + color: #FFFFFF; +} + +.dark-theme .list-car-list-1 .box-car-list .content .inner2 svg path { + fill: #FFFFFF; +} + +.dark-theme .list-car-list-1 .box-car-list .content .inner2 p { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .icon-box .icons { + color: rgba(255, 255, 255, 0.3019607843); +} + +.dark-theme .link-style-1 a { + color: #FFFFFF; +} + +.dark-theme .link-style-1 a:focus, +.dark-theme .link-style-1 a:hover { + color: #FF7101; +} + +.dark-theme .view-car { + color: #FFFFFF; + border: 1px solid rgba(255, 255, 255, 0.1607843137); +} + +.dark-theme .view-car:hover { + border-color: #FF7101; + color: #FF7101; +} + +.dark-theme .partner-item { + border: 1px solid rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .partner-item .content .title { + color: #FFFFFF !important; +} + +.dark-theme .partner-item .content .sub-title { + color: rgba(255, 255, 255, 0.3019607843); +} + +.dark-theme .partner-item:hover:not(.style-3, .style-4) { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.4); + background-color: #FFFFFF; +} + +.dark-theme .partner-item:hover:not(.style-3, .style-4) .content .title { + color: #161E2D !important; +} + +.dark-theme .partner-item:hover:not(.style-3, .style-4) .content .sub-title { + color: #5C6368; +} + +.dark-theme .partner-item.style-2 svg path { + fill: #FFFFFF; +} + +.dark-theme .partner-item.style-2:hover svg path { + fill: #FF7101; +} + +.dark-theme .partner-item.style-4, +.dark-theme .partner-item.style-3 { + border: 0; +} + +.dark-theme .swiper-pagination .swiper-pagination-bullet, +.dark-theme .swiper-pagination3 .swiper-pagination-bullet, +.dark-theme .swiper-pagination4 .swiper-pagination-bullet, +.dark-theme .swiper-pagination5 .swiper-pagination-bullet { + background: rgba(255, 255, 255, 0.2); +} + +.dark-theme .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active, +.dark-theme .swiper-pagination3 .swiper-pagination-bullet.swiper-pagination-bullet-active, +.dark-theme .swiper-pagination4 .swiper-pagination-bullet.swiper-pagination-bullet-active, +.dark-theme .swiper-pagination5 .swiper-pagination-bullet.swiper-pagination-bullet-active { + background: #FF7101; +} + +.dark-theme .tf-icon-box { + background-color: rgb(33, 37, 47); + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .tf-icon-box p { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .tf-icon-box.style-4 h5 a, +.dark-theme .tf-icon-box.style-2 h5 a { + color: #FFFFFF; +} + +.dark-theme .tf-icon-box.style-4 h5 a:hover, +.dark-theme .tf-icon-box.style-2 h5 a:hover { + color: #FF7101; +} + +.dark-theme .tf-image-box.bg-black { + background-color: rgb(33, 37, 47) !important; +} + +.dark-theme .blog-article-item .content .sub-box a.text-color-2 { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .blog-article-item .content h3 a { + color: #FFFFFF; +} + +.dark-theme .blog-article-item .content h3 a:hover { + color: #FF7101; +} + +.dark-theme .blog-article-item .content p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .flat-brand .title-section h2 { + color: #FFFFFF; +} + +.dark-theme .section-feature-specs .content-feature-specs .feature-specs-box .content { + background-color: #21252F; +} + +.dark-theme .img-author .content-author p { + color: #FFFFFF; +} + +.dark-theme .img-author .content-author span { + color: rgba(255, 255, 255, 0.3019607843) !important; +} + +.dark-theme .section-car-list { + background-color: #21252F; +} + +.dark-theme .compare-item { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .compare-item .content-compare p { + color: rgba(255, 255, 255, 0.3019607843); +} + +.dark-theme .compare-item .content-compare p.text-color-2 { + color: #FFFFFF !important; +} + +.dark-theme .tf-team.box .content p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .tf-testimonial { + background-color: #21252F; +} + +.dark-theme .tf-testimonial .author-box p, +.dark-theme .tf-testimonial .inner-top p, +.dark-theme .tf-testimonial>p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .tf-testimonial .author-box h5 { + color: #FFFFFF; +} + +.dark-theme .tf-testimonial.style-3, +.dark-theme .tf-testimonial.style-2 { + box-shadow: 0px 30px 60px 0px rgba(0, 0, 0, 0.1019607843); +} + +.dark-theme .main-header:not(.style2) .header-lower { + background-color: #24272C; +} + +.dark-theme .main-header:not(.style2) .header-lower .main-menu .navigation>li>a { + color: #FFFFFF; +} + +.dark-theme .main-header:not(.style2) .header-lower .header-account { + color: #FFFFFF; +} + +.dark-theme .main-header:not(.style2) .header-lower .header-account .header-search-icon::after, +.dark-theme .main-header:not(.style2) .header-lower .header-account .header-favorite::after { + background-color: rgba(255, 255, 255, 0.2); +} + +.dark-theme .main-header:not(.style2) .header-lower .header-account .flat-bt-top .sc-button { + border: 1px solid #FFFFFF; +} + +.dark-theme .main-header:not(.style2) .header-lower .header-account .flat-bt-top .sc-button span, +.dark-theme .main-header:not(.style2) .header-lower .header-account .flat-bt-top .sc-button svg { + color: #FFFFFF; +} + +.dark-theme .main-header.style3 { + background-color: #24272C; +} + +.dark-theme .main-header.style3 .header-lower { + background-color: unset; +} + +.dark-theme .main-header .main-menu .navigation>li ul { + background-color: rgb(33, 37, 47) !important; +} + +.dark-theme .main-header .main-menu .navigation>li ul li a { + color: #FFFFFF !important; +} + +.dark-theme .main-header .main-menu .navigation>li ul li a::after { + color: #FFFFFF !important; +} + +.dark-theme .main-header .main-menu .navigation>li ul li.current>a { + color: #FF7101 !important; +} + +.dark-theme .main-header .main-menu .navigation>li ul li:hover>a { + color: #FF7101 !important; + background-color: rgba(255, 113, 1, 0.06) !important; +} + +.dark-theme .main-header .main-menu .navigation>li ul li:hover>a::after { + color: #FF7101 !important; +} + +.dark-theme .tf-top-bar.style-2 { + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .tf-top-bar.style-2 .tf-top-bar-right ul li a, +.dark-theme .tf-top-bar.style-2 .tf-top-bar-left ul li p { + color: #FFFFFF; +} + +.dark-theme .bg-1 { + background-color: #21252F; +} + +.dark-theme .partner-slide3-wrap { + background-color: #21252F; +} + +.dark-theme .blog-article-right { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .blog-article-right .blog-article-item.style3 { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .listing-slide .swiper-slide:before { + background: #21252F; +} + +.dark-theme .w-520 .link-style-1 a { + color: #24272C; +} + +.dark-theme .w-520 .icon-box .icons { + color: #696665; +} + +.dark-theme .w-520 .view-car { + border-color: #24272C; + color: #24272C; +} + +.dark-theme .w-520 .view-car:hover { + border-color: #FF7101; + color: #FF7101; +} + +.dark-theme .tf-image-list { + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .tf-image-list .content h5 { + color: #FFFFFF; +} + +.dark-theme .tf-image-list p { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .flat-title { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-title .title-inner .title-group span { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .sidebar-right-listing { + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .sidebar-right-listing .sidebar-title>* { + color: #FFFFFF !important; +} + +.dark-theme .form-filter-siderbar .features-wrap h4, +.dark-theme .widget-price span { + color: #FFFFFF !important; +} + +.dark-theme .listing-grid .wd-find-select .group-select .nice-select { + background-color: #171A21; + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .listing-grid .wd-find-select .group-select .nice-select .current { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .listing-grid .wd-find-select .group-select .nice-select .list { + background-color: #21252F; +} + +.dark-theme .listing-grid .wd-find-select .group-select .nice-select .list .option { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .listing-grid .wd-find-select .group-select .nice-select .list .option:hover, +.dark-theme .listing-grid .wd-find-select .group-select .nice-select .list .option.selected.focus { + background-color: rgba(255, 113, 1, 0.1019607843); + color: #FF7101; +} + +.dark-theme .listing-grid .tf-amenities { + background-color: #171A21 !important; +} + +.dark-theme .listing-grid .tf-amenities span { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li { + border: 1px solid rgba(255, 255, 255, 0.1607843137); + background-color: transparent; +} + +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li h5 { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li.active, +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li:hover { + border: 1px solid #FF7101; + background-color: #FF7101; +} + +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li.active h5, +.dark-theme .listing-grid .flat-tabs .tab-title.style1 li:hover h5 { + color: #FFFFFF !important; +} + +.dark-theme .noUi-background { + background: #2E3037; +} + +.dark-theme .noUi-horizontal .noUi-handle { + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .listing-grid .btn-view { + border-color: rgba(255, 255, 255, 0.1019607843); + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .tfcl-pagination a, +.dark-theme .themesflat-pagination ul li .page-numbers { + color: rgba(255, 255, 255, 0.4); + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .tfcl-pagination a:hover, +.dark-theme .tfcl-pagination a.current, +.dark-theme .themesflat-pagination ul li .page-numbers:hover, +.dark-theme .themesflat-pagination ul li .page-numbers.current { + color: #FFFFFF !important; + border-color: #FF7101; +} + +.dark-theme .wrap-map .content-left { + background-color: #171A21; +} + +.dark-theme .wrap-map .content-left .category-filter .heading-listing { + color: #FFFFFF; +} + +.dark-theme .wrap-map .content-left .list-car-list-1 .box-car-list .content .days-box { + padding-top: 0; + border-top: 0 !important; +} + +.dark-theme .wrap-map .content-left .list-car-list-1 .box-car-list .content .days-box a { + color: #FFFFFF; + border: 1px solid rgba(255, 255, 255, 0.1607843137); +} + +.dark-theme .wrap-map .content-left .list-car-list-1 .box-car-list .content .days-box a:hover { + border-color: #FF7101; + color: #FFFFFF; +} + +.dark-theme .flat-property .inner-heading .heading-listing { + color: #FFFFFF; +} + +.dark-theme .flat-property .inner-heading .social-listing p { + color: #FFFFFF; +} + +.dark-theme .icon-social a, +.dark-theme .icon-social.style1 a { + color: #fff !important; + border-color: rgba(255, 255, 255, 0.1019607843) !important; + background-color: #171A21 !important; +} + +.dark-theme .icon-social a:hover, +.dark-theme .icon-social.style1 a:hover { + background-color: #FF7101 !important; +} + +.dark-theme textarea, +.dark-theme input[type=text], +.dark-theme input[type=password], +.dark-theme input[type=datetime], +.dark-theme input[type=datetime-local], +.dark-theme input[type=date], +.dark-theme input[type=month], +.dark-theme input[type=time], +.dark-theme input[type=week], +.dark-theme input[type=number], +.dark-theme input[type=email], +.dark-theme input[type=url], +.dark-theme input[type=search], +.dark-theme input[type=tel], +.dark-theme input[type=color] { + background-color: rgba(255, 255, 255, 0.0705882353) !important; + color: #FFFFFF !important; + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme textarea::placeholder, +.dark-theme input[type=text]::placeholder, +.dark-theme input[type=password]::placeholder, +.dark-theme input[type=datetime]::placeholder, +.dark-theme input[type=datetime-local]::placeholder, +.dark-theme input[type=date]::placeholder, +.dark-theme input[type=month]::placeholder, +.dark-theme input[type=time]::placeholder, +.dark-theme input[type=week]::placeholder, +.dark-theme input[type=number]::placeholder, +.dark-theme input[type=email]::placeholder, +.dark-theme input[type=url]::placeholder, +.dark-theme input[type=search]::placeholder, +.dark-theme input[type=tel]::placeholder, +.dark-theme input[type=color]::placeholder { + color: rgba(255, 255, 255, 0.2) !important; +} + +.dark-theme textarea:focus, +.dark-theme input[type=text]:focus, +.dark-theme input[type=password]:focus, +.dark-theme input[type=datetime]:focus, +.dark-theme input[type=datetime-local]:focus, +.dark-theme input[type=date]:focus, +.dark-theme input[type=month]:focus, +.dark-theme input[type=time]:focus, +.dark-theme input[type=week]:focus, +.dark-theme input[type=number]:focus, +.dark-theme input[type=email]:focus, +.dark-theme input[type=url]:focus, +.dark-theme input[type=search]:focus, +.dark-theme input[type=tel]:focus, +.dark-theme input[type=color]:focus { + border-color: #FF7101 !important; +} + +.dark-theme .contact-info { + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .contact-info>h2 { + color: #FFFFFF; +} + +.dark-theme .contact-info .wrap-info .box-info h5 { + color: #FFFFFF; +} + +.dark-theme .contact-info .wrap-info .box-info p { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .box { + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .box .content .sub-box a.text-color-2 { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .box .content h3 { + color: #FFFFFF; +} + +.dark-theme .flat-blog-grid .flat-blog { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .side-bar .widget-titles, +.dark-theme .side-bar .widget-title { + color: #FFFFFF; +} + +.dark-theme .side-bar .widget-categories li { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .side-bar .widget-categories li a { + color: #FFFFFF; +} + +.dark-theme .side-bar .widget-categories li a:hover { + color: #FF7101; +} + +.dark-theme .side-bar .widget-listings .box-listings { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .side-bar .widget-tags .tags_cloud_inner a { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail h3, +.dark-theme .flat-blog-detail .title-heading { + color: #FFFFFF; +} + +.dark-theme .flat-blog-detail .icon-boxs { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail .icon-boxs .icon span { + color: rgba(255, 255, 255, 0.3); +} + +.dark-theme .flat-blog-detail .texts-1, +.dark-theme .flat-blog-detail .texts-2 { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .flat-blog-detail .tag-wrap { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail .tags a { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail .tags a:hover { + color: #FFFFFF; +} + +.dark-theme .flat-blog-detail .tags p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .flat-blog-detail .share-box p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .flat-blog-detail .wrap-review .box-title { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail .wrap-review .box-title h2 { + color: #FFFFFF; +} + +.dark-theme .flat-blog-detail .wrap-review .comment-list li { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-blog-detail .wrap-review .comment-list li .comment-list-wrap .content h5 { + color: #FFFFFF; +} + +.dark-theme .flat-blog-detail .wrap-review .comment-list li .comment-list-wrap .content p { + color: rgba(255, 255, 255, 0.2); +} + +.dark-theme .flat-blog-detail .wrap-review .comment-list li .texts { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .flat-blog-detail .wrap-review .comment-list li .helpful a { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .wrap-form .title h2 { + color: #FFFFFF; +} + +.dark-theme .comments .comment-form label { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .flat-toggle { + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .flat-toggle .toggle-title h5 { + color: #FFFFFF; +} + +.dark-theme .flat-toggle .toggle-title.active h5 { + color: #FF7101; +} + +.dark-theme .flat-toggle .btn-toggle::after { + color: #FFFFFF; +} + +.dark-theme .flat-toggle .toggle-content p { + color: #FFFFFF !important; +} + +.dark-theme .flat-toggle.style-2.activ { + background-color: rgb(33, 37, 47); +} + +.dark-theme .flat-toggle.style-1 .toggle-title { + background-color: transparent; +} + +.dark-theme .flat-property h2 { + color: #FFFFFF; +} + +.dark-theme .flat-tabs .box-tab.style4 .tab-title li { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-tabs .box-tab.style4 .tab-title li .inner { + color: #FFFFFF; +} + +.dark-theme .widget-pricing { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .widget-pricing .title-price .price { + color: #FFFFFF !important; +} + +.dark-theme .widget-pricing .check li { + border-color: rgba(255, 255, 255, 0.1019607843); + color: rgba(255, 255, 255, 0.3); +} + +.dark-theme .widget-pricing:hover .title-price .price { + color: #FF7101 !important; +} + +.dark-theme .tab-listing-scroll .nav-pills .nav-item .nav-link { + color: #FFFFFF; + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .wrap-single-compare .compare-table { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .wrap-single-compare .compare-table .title-table { + color: #FFFFFF; +} + +.dark-theme .wrap-single-compare .compare-table .title-tr { + background-color: rgb(33, 37, 47); + color: #FFFFFF; +} + +.dark-theme .wrap-single-compare .compare-table .group-tr { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .wrap-single-compare .compare-table .group-tr li { + color: #FFFFFF; +} + +.dark-theme .group-dealer-title h2 { + color: #FFFFFF; +} + +.dark-theme .group-dealer-title .group-sort-filter .nice-select { + background-color: #171A21; + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .group-dealer-title .group-sort-filter .nice-select .current { + color: #FFFFFF !important; +} + +.dark-theme .group-dealer-title .group-sort-filter .nice-select .list { + background-color: #21252F; +} + +.dark-theme .group-dealer-title .group-sort-filter .nice-select .list .option { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .group-dealer-title .group-sort-filter .nice-select .list .option:hover, +.dark-theme .group-dealer-title .group-sort-filter .nice-select .list .option.selected.focus { + background-color: rgba(255, 113, 1, 0.1019607843); + color: #FF7101; +} + +.dark-theme .tf-dealer-list { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .tf-dealer-list .infor-dealder .thumbnail { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .tf-dealer-list .infor-dealder h4, +.dark-theme .tf-dealer-list .infor-dealder .rating, +.dark-theme .tf-dealer-list .dealer-phone h4 { + color: #FFFFFF; +} + +.dark-theme .listing-detail .title { + color: #FFFFFF; +} + +.dark-theme .listing-detail p { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .tf-sale-agent-list { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .tf-sale-agent-list .list-agent .author h5 { + color: #FFFFFF; +} + +.dark-theme .tf-list-car-agent { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .widget-book-apoint { + background-color: rgb(33, 37, 47); +} + +.dark-theme .flat-property-detail { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .flat-property-detail .wrap-review .comment-list li { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .widget-dealer-contact { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .widget-dealer-contact .open-store, +.dark-theme .widget-dealer-contact .list-authencation { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .dealer-sidebar .widget-dealer-map { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .widget-listing { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .sale-agents-detail { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .sale-agents-detail .content .contact li p { + color: #FFFFFF !important; +} + +.dark-theme .prolile-info, +.dark-theme .action-icon .icon { + border-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .listing-description .list-file a { + color: #FFFFFF; +} + +.dark-theme .listing-line { + background-color: rgba(255, 255, 255, 0.1019607843); +} + +.dark-theme .loan-calculator-form { + background-color: #171A21; +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select { + background-color: rgba(255, 255, 255, 0.0705882353) !important; + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select::after { + border-color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select .current { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select .list { + background-color: #21252F; +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select .list .option { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select .list .option:hover, +.dark-theme .loan-calculator-form #loan-calculator fieldset .nice-select .list .option.selected.focus { + background-color: rgba(255, 113, 1, 0.1019607843); + color: #FF7101; +} + +.dark-theme .loan-calculator-form #loan-calculator .list-total ul li .text-color-2 { + color: #FFFFFF !important; +} + +.dark-theme .flat-tabs .box-tab.style5 .tab-title li { + border-color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .flat-tabs .box-tab.style5 .tab-title li .inner { + color: rgba(255, 255, 255, 0.5); +} + +.dark-theme .flat-tabs .box-tab.style5 .tab-title li:hover, +.dark-theme .flat-tabs .box-tab.style5 .tab-title li.active { + border-color: #24272C; +} + +.dark-theme .flat-tabs .box-tab.style5 .tab-title li:hover .inner, +.dark-theme .flat-tabs .box-tab.style5 .tab-title li.active .inner { + color: #FF7101 !important; +} + +.dark-theme .popup button.close { + color: #FFFFFF; +} + +.dark-theme .popup button.close:hover { + color: #FF7101; +} + +.dark-theme .popup .modal-content { + background-color: rgb(33, 37, 47); +} + +.dark-theme .popup .modal-content .texts.line::before, +.dark-theme .popup .modal-content .texts.line::after { + background-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .popup .modal-content .button-box a { + border-color: rgba(255, 255, 255, 0.1); +} + +.dark-theme .popup .modal-content .button-box a span { + color: #FFFFFF; +} + +.dark-theme .offcanvas { + background-color: #171A21; +} + +.dark-theme .offcanvas button.btn-close { + color: #FFFFFF !important; + --bs-btn-close-bg: none; +} + +.dark-theme .offcanvas button.btn-close::after { + content: "×"; + font-size: 34px; +} + +.dark-theme .offcanvas button.btn-close:hover { + color: #FF7101 !important; +} + +.dark-theme .offcanvas .form-filter-siderbar .tf-amenities { + background-color: #171A21 !important; +} + +.dark-theme .offcanvas .form-filter-siderbar .tf-amenities span { + color: #FFFFFF !important; +} + +.dark-theme .offcanvas .wd-find-select .group-select .nice-select { + background-color: #171A21; + border-color: rgba(255, 255, 255, 0.1019607843) !important; +} + +.dark-theme .offcanvas .wd-find-select .group-select .nice-select .current { + color: rgba(255, 255, 255, 0.4) !important; +} + +.dark-theme .offcanvas .wd-find-select .group-select .nice-select .list { + background-color: #21252F; +} + +.dark-theme .offcanvas .wd-find-select .group-select .nice-select .list .option { + color: rgba(255, 255, 255, 0.4); +} + +.dark-theme .offcanvas .wd-find-select .group-select .nice-select .list .option:hover, +.dark-theme .offcanvas .wd-find-select .group-select .nice-select .list .option.selected.focus { + background-color: rgba(255, 113, 1, 0.1019607843); + color: #FF7101; +} + +.dark-theme .map-listing-item .inner-box { + background-color: #171A21; +} + +.popup-setting { + position: fixed; + right: -150px; + top: 150px; + width: 150px; + background-color: #fff; + z-index: 999; + -webkit-transition: all 0.3s ease; + -moz-transition: all 0.3s ease; + -ms-transition: all 0.3s ease; + -o-transition: all 0.3s ease; + transition: all 0.3s ease; + direction: ltr; +} + +.popup-setting.show { + right: 0; +} + +.popup-setting .btn-setting { + background-color: #FF7101; + color: #FFFFFF; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + position: absolute; + left: -50px; + top: 0; + outline: 0; +} + +.popup-setting .btn-setting a { + width: 50px; + height: 50px; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + -webkit-animation: rotate 1s infinite linear; + animation: rotate 3s infinite linear; +} + +.popup-setting .popup-setting-container { + padding: 15px 0 15px 15px; + background-color: rgba(255, 113, 1, 0.1019607843); +} + +.popup-setting .popup-setting-container .title { + display: block; + margin-bottom: 8px; +} + +@keyframes rotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} + +.toggle-switch { + display: inline-flex; + cursor: pointer; +} + +/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/apiferia/src/assets/css/swiper-bundle.min.css b/apiferia/src/assets/css/swiper-bundle.min.css new file mode 100644 index 00000000..1443de85 --- /dev/null +++ b/apiferia/src/assets/css/swiper-bundle.min.css @@ -0,0 +1,13 @@ +/** + * Swiper 6.8.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2021 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: August 3, 2021 + */ + + @font-face{font-family:swiper-icons;src:url('data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA') format('woff');font-weight:400;font-style:normal}:root{--swiper-theme-color:#007aff}.swiper-container{margin-left:auto;margin-right:auto;position:relative;overflow:hidden;list-style:none;padding:0;z-index:1}.swiper-container-vertical>.swiper-wrapper{flex-direction:column}.swiper-wrapper{position:relative;width:100%;height:100%;z-index:1;display:flex;transition-property:transform;box-sizing:content-box}.swiper-container-android .swiper-slide,.swiper-wrapper{transform:translate3d(0px,0,0)}.swiper-container-multirow>.swiper-wrapper{flex-wrap:wrap}.swiper-container-multirow-column>.swiper-wrapper{flex-wrap:wrap;flex-direction:column}.swiper-container-free-mode>.swiper-wrapper{transition-timing-function:ease-out;margin:0 auto}.swiper-container-pointer-events{touch-action:pan-y}.swiper-container-pointer-events.swiper-container-vertical{touch-action:pan-x}.swiper-slide{flex-shrink:0;width:100%;height:100%;position:relative;transition-property:transform}.swiper-slide-invisible-blank{visibility:hidden}.swiper-container-autoheight,.swiper-container-autoheight .swiper-slide{height:auto}.swiper-container-autoheight .swiper-wrapper{align-items:flex-start;transition-property:transform,height}.swiper-container-3d{perspective:1200px}.swiper-container-3d .swiper-cube-shadow,.swiper-container-3d .swiper-slide,.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top,.swiper-container-3d .swiper-wrapper{transform-style:preserve-3d}.swiper-container-3d .swiper-slide-shadow-bottom,.swiper-container-3d .swiper-slide-shadow-left,.swiper-container-3d .swiper-slide-shadow-right,.swiper-container-3d .swiper-slide-shadow-top{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none;z-index:10}.swiper-container-3d .swiper-slide-shadow-left{background-image:linear-gradient(to left,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-right{background-image:linear-gradient(to right,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-top{background-image:linear-gradient(to top,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-3d .swiper-slide-shadow-bottom{background-image:linear-gradient(to bottom,rgba(0,0,0,.5),rgba(0,0,0,0))}.swiper-container-css-mode>.swiper-wrapper{overflow:auto;scrollbar-width:none;-ms-overflow-style:none}.swiper-container-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-container-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-container-horizontal.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:x mandatory}.swiper-container-vertical.swiper-container-css-mode>.swiper-wrapper{scroll-snap-type:y mandatory}:root{--swiper-navigation-size:44px}.swiper-button-next,.swiper-button-prev{position:absolute;top:50%;width:calc(var(--swiper-navigation-size)/ 44 * 27);height:var(--swiper-navigation-size);margin-top:calc(0px - (var(--swiper-navigation-size)/ 2));z-index:10;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--swiper-navigation-color,var(--swiper-theme-color))}.swiper-button-next.swiper-button-disabled,.swiper-button-prev.swiper-button-disabled{opacity:.35;cursor:auto;pointer-events:none}.swiper-button-next:after,.swiper-button-prev:after{font-family:swiper-icons;font-size:var(--swiper-navigation-size);text-transform:none!important;letter-spacing:0;text-transform:none;font-variant:initial;line-height:1}.swiper-button-prev,.swiper-container-rtl .swiper-button-next{left:10px;right:auto}.swiper-button-prev:after,.swiper-container-rtl .swiper-button-next:after{content:'prev'; color: #fff;}.swiper-button-next,.swiper-container-rtl .swiper-button-prev{right:10px;left:auto}.swiper-button-next:after,.swiper-container-rtl .swiper-button-prev:after{content:'next';color: #fff;}.swiper-button-next.swiper-button-white,.swiper-button-prev.swiper-button-white{--swiper-navigation-color:#ffffff}.swiper-button-next.swiper-button-black,.swiper-button-prev.swiper-button-black{--swiper-navigation-color:#000000}.swiper-button-lock{display:none}.swiper-pagination{position:absolute;text-align:center;transition:.3s opacity;transform:translate3d(0,0,0);z-index:10}.swiper-pagination.swiper-pagination-hidden{opacity:0}.swiper-container-horizontal>.swiper-pagination-bullets,.swiper-pagination-custom,.swiper-pagination-fraction{bottom:10px;left:0;width:100%}.swiper-pagination-bullets-dynamic{overflow:hidden;font-size:0}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transform:scale(.33);position:relative}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main{transform:scale(1)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev{transform:scale(.33)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next{transform:scale(.66)}.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next{transform:scale(.33)}.swiper-pagination-bullet{width:8px;height:8px;display:inline-block;border-radius:50%;background:#000;opacity:.2}button.swiper-pagination-bullet{border:none;margin:0;padding:0;box-shadow:none;-webkit-appearance:none;appearance:none}.swiper-pagination-clickable .swiper-pagination-bullet{cursor:pointer}.swiper-pagination-bullet:only-child{display:none!important}.swiper-pagination-bullet-active{opacity:1;background:var(--swiper-pagination-color,var(--swiper-theme-color))}.swiper-container-vertical>.swiper-pagination-bullets{right:10px;top:50%;transform:translate3d(0px,-50%,0)}.swiper-container-vertical>.swiper-pagination-bullets .swiper-pagination-bullet{margin:6px 0;display:block}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{top:50%;transform:translateY(-50%);width:8px}.swiper-container-vertical>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{display:inline-block;transition:.2s transform,.2s top}.swiper-container-horizontal>.swiper-pagination-bullets .swiper-pagination-bullet{margin:0 4px}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic{left:50%;transform:translateX(-50%);white-space:nowrap}.swiper-container-horizontal>.swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s left}.swiper-container-horizontal.swiper-container-rtl>.swiper-pagination-bullets-dynamic .swiper-pagination-bullet{transition:.2s transform,.2s right}.swiper-pagination-progressbar{background:rgba(0,0,0,.25);position:absolute}.swiper-pagination-progressbar .swiper-pagination-progressbar-fill{background:var(--swiper-pagination-color,var(--swiper-theme-color));position:absolute;left:0;top:0;width:100%;height:100%;transform:scale(0);transform-origin:left top}.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill{transform-origin:right top}.swiper-container-horizontal>.swiper-pagination-progressbar,.swiper-container-vertical>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite{width:100%;height:4px;left:0;top:0}.swiper-container-horizontal>.swiper-pagination-progressbar.swiper-pagination-progressbar-opposite,.swiper-container-vertical>.swiper-pagination-progressbar{width:4px;height:100%;left:0;top:0}.swiper-pagination-white{--swiper-pagination-color:#ffffff}.swiper-pagination-black{--swiper-pagination-color:#000000}.swiper-pagination-lock{display:none}.swiper-scrollbar{border-radius:10px;position:relative;-ms-touch-action:none;background:rgba(0,0,0,.1)}.swiper-container-horizontal>.swiper-scrollbar{position:absolute;left:1%;bottom:3px;z-index:50;height:5px;width:98%}.swiper-container-vertical>.swiper-scrollbar{position:absolute;right:3px;top:1%;z-index:50;width:5px;height:98%}.swiper-scrollbar-drag{height:100%;width:100%;position:relative;background:rgba(0,0,0,.5);border-radius:10px;left:0;top:0}.swiper-scrollbar-cursor-drag{cursor:move}.swiper-scrollbar-lock{display:none}.swiper-zoom-container{width:100%;height:100%;display:flex;justify-content:center;align-items:center;text-align:center}.swiper-zoom-container>canvas,.swiper-zoom-container>img,.swiper-zoom-container>svg{max-width:100%;max-height:100%;object-fit:contain}.swiper-slide-zoomed{cursor:move}.swiper-lazy-preloader{width:42px;height:42px;position:absolute;left:50%;top:50%;margin-left:-21px;margin-top:-21px;z-index:10;transform-origin:50%;animation:swiper-preloader-spin 1s infinite linear;box-sizing:border-box;border:4px solid var(--swiper-preloader-color,var(--swiper-theme-color));border-radius:50%;border-top-color:transparent}.swiper-lazy-preloader-white{--swiper-preloader-color:#fff}.swiper-lazy-preloader-black{--swiper-preloader-color:#000}@keyframes swiper-preloader-spin{100%{transform:rotate(360deg)}}.swiper-container .swiper-notification{position:absolute;left:0;top:0;pointer-events:none;opacity:0;z-index:-1000}.swiper-container-fade.swiper-container-free-mode .swiper-slide{transition-timing-function:ease-out}.swiper-container-fade .swiper-slide{pointer-events:none;transition-property:opacity}.swiper-container-fade .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-fade .swiper-slide-active,.swiper-container-fade .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube{overflow:visible}.swiper-container-cube .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1;visibility:hidden;transform-origin:0 0;width:100%;height:100%}.swiper-container-cube .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-cube.swiper-container-rtl .swiper-slide{transform-origin:100% 0}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-cube .swiper-slide-active,.swiper-container-cube .swiper-slide-next,.swiper-container-cube .swiper-slide-next+.swiper-slide,.swiper-container-cube .swiper-slide-prev{pointer-events:auto;visibility:visible}.swiper-container-cube .swiper-slide-shadow-bottom,.swiper-container-cube .swiper-slide-shadow-left,.swiper-container-cube .swiper-slide-shadow-right,.swiper-container-cube .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden}.swiper-container-cube .swiper-cube-shadow{position:absolute;left:0;bottom:0px;width:100%;height:100%;opacity:.6;z-index:0}.swiper-container-cube .swiper-cube-shadow:before{content:'';background:#000;position:absolute;left:0;top:0;bottom:0;right:0;filter:blur(50px)}.swiper-container-flip{overflow:visible}.swiper-container-flip .swiper-slide{pointer-events:none;-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:1}.swiper-container-flip .swiper-slide .swiper-slide{pointer-events:none}.swiper-container-flip .swiper-slide-active,.swiper-container-flip .swiper-slide-active .swiper-slide-active{pointer-events:auto}.swiper-container-flip .swiper-slide-shadow-bottom,.swiper-container-flip .swiper-slide-shadow-left,.swiper-container-flip .swiper-slide-shadow-right,.swiper-container-flip .swiper-slide-shadow-top{z-index:0;-webkit-backface-visibility:hidden;backface-visibility:hidden} \ No newline at end of file diff --git a/apiferia/src/assets/fonts/autodealcb3a.eot b/apiferia/src/assets/fonts/autodealcb3a.eot new file mode 100644 index 00000000..639aa538 Binary files /dev/null and b/apiferia/src/assets/fonts/autodealcb3a.eot differ diff --git a/apiferia/src/assets/fonts/autodealcb3a.svg b/apiferia/src/assets/fonts/autodealcb3a.svg new file mode 100644 index 00000000..d338ab26 --- /dev/null +++ b/apiferia/src/assets/fonts/autodealcb3a.svg @@ -0,0 +1,76 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apiferia/src/assets/fonts/autodealcb3a.ttf b/apiferia/src/assets/fonts/autodealcb3a.ttf new file mode 100644 index 00000000..7ea52e2a Binary files /dev/null and b/apiferia/src/assets/fonts/autodealcb3a.ttf differ diff --git a/apiferia/src/assets/fonts/autodealcb3a.woff b/apiferia/src/assets/fonts/autodealcb3a.woff new file mode 100644 index 00000000..93b7749c Binary files /dev/null and b/apiferia/src/assets/fonts/autodealcb3a.woff differ diff --git a/apiferia/src/assets/fonts/boxicons.eot b/apiferia/src/assets/fonts/boxicons.eot new file mode 100644 index 00000000..c81a1dea Binary files /dev/null and b/apiferia/src/assets/fonts/boxicons.eot differ diff --git a/apiferia/src/assets/fonts/boxicons.svg b/apiferia/src/assets/fonts/boxicons.svg new file mode 100644 index 00000000..edce3834 --- /dev/null +++ b/apiferia/src/assets/fonts/boxicons.svg @@ -0,0 +1,1653 @@ + + + + + + +{ + "fontFamily": "boxicons", + "majorVersion": 2, + "minorVersion": 0.7, + "version": "Version 2.0", + "fontId": "boxicons", + "psName": "boxicons", + "subFamily": "Regular", + "fullName": "boxicons", + "description": "Font generated by IcoMoon." +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/apiferia/src/assets/fonts/boxicons.ttf b/apiferia/src/assets/fonts/boxicons.ttf new file mode 100644 index 00000000..998f0598 Binary files /dev/null and b/apiferia/src/assets/fonts/boxicons.ttf differ diff --git a/apiferia/src/assets/fonts/boxicons.woff b/apiferia/src/assets/fonts/boxicons.woff new file mode 100644 index 00000000..3345c5ce Binary files /dev/null and b/apiferia/src/assets/fonts/boxicons.woff differ diff --git a/apiferia/src/assets/fonts/boxicons.woff2 b/apiferia/src/assets/fonts/boxicons.woff2 new file mode 100644 index 00000000..07d26184 Binary files /dev/null and b/apiferia/src/assets/fonts/boxicons.woff2 differ diff --git a/apiferia/src/assets/fonts/fa-brands-400.eot b/apiferia/src/assets/fonts/fa-brands-400.eot new file mode 100644 index 00000000..a157bbed Binary files /dev/null and b/apiferia/src/assets/fonts/fa-brands-400.eot differ diff --git a/apiferia/src/assets/fonts/fa-brands-400.html b/apiferia/src/assets/fonts/fa-brands-400.html new file mode 100644 index 00000000..61596089 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-brands-400.html differ diff --git a/apiferia/src/assets/fonts/fa-brands-400.svg b/apiferia/src/assets/fonts/fa-brands-400.svg new file mode 100644 index 00000000..604731ba --- /dev/null +++ b/apiferia/src/assets/fonts/fa-brands-400.svg @@ -0,0 +1,3570 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:11 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apiferia/src/assets/fonts/fa-brands-400.ttf b/apiferia/src/assets/fonts/fa-brands-400.ttf new file mode 100644 index 00000000..1b9e561d Binary files /dev/null and b/apiferia/src/assets/fonts/fa-brands-400.ttf differ diff --git a/apiferia/src/assets/fonts/fa-brands-400.woff b/apiferia/src/assets/fonts/fa-brands-400.woff new file mode 100644 index 00000000..710daa0c Binary files /dev/null and b/apiferia/src/assets/fonts/fa-brands-400.woff differ diff --git a/apiferia/src/assets/fonts/fa-brands-400d41d.eot b/apiferia/src/assets/fonts/fa-brands-400d41d.eot new file mode 100644 index 00000000..a157bbed Binary files /dev/null and b/apiferia/src/assets/fonts/fa-brands-400d41d.eot differ diff --git a/apiferia/src/assets/fonts/fa-duotone-900.eot b/apiferia/src/assets/fonts/fa-duotone-900.eot new file mode 100644 index 00000000..d4643e9e Binary files /dev/null and b/apiferia/src/assets/fonts/fa-duotone-900.eot differ diff --git a/apiferia/src/assets/fonts/fa-duotone-900.html b/apiferia/src/assets/fonts/fa-duotone-900.html new file mode 100644 index 00000000..9f1bfabf Binary files /dev/null and b/apiferia/src/assets/fonts/fa-duotone-900.html differ diff --git a/apiferia/src/assets/fonts/fa-duotone-900.svg b/apiferia/src/assets/fonts/fa-duotone-900.svg new file mode 100644 index 00000000..be2d8628 --- /dev/null +++ b/apiferia/src/assets/fonts/fa-duotone-900.svg @@ -0,0 +1,15055 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apiferia/src/assets/fonts/fa-duotone-900.ttf b/apiferia/src/assets/fonts/fa-duotone-900.ttf new file mode 100644 index 00000000..de0cba04 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-duotone-900.ttf differ diff --git a/apiferia/src/assets/fonts/fa-duotone-900.woff b/apiferia/src/assets/fonts/fa-duotone-900.woff new file mode 100644 index 00000000..80fab10e Binary files /dev/null and b/apiferia/src/assets/fonts/fa-duotone-900.woff differ diff --git a/apiferia/src/assets/fonts/fa-duotone-900d41d.eot b/apiferia/src/assets/fonts/fa-duotone-900d41d.eot new file mode 100644 index 00000000..d4643e9e Binary files /dev/null and b/apiferia/src/assets/fonts/fa-duotone-900d41d.eot differ diff --git a/apiferia/src/assets/fonts/fa-light-300 copy.html b/apiferia/src/assets/fonts/fa-light-300 copy.html new file mode 100644 index 00000000..905f3e60 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-light-300 copy.html differ diff --git a/apiferia/src/assets/fonts/fa-light-300.html b/apiferia/src/assets/fonts/fa-light-300.html new file mode 100644 index 00000000..e69de29b diff --git a/apiferia/src/assets/fonts/fa-light-300.svg b/apiferia/src/assets/fonts/fa-light-300.svg new file mode 100644 index 00000000..e4b8df67 --- /dev/null +++ b/apiferia/src/assets/fonts/fa-light-300.svg @@ -0,0 +1,12330 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apiferia/src/assets/fonts/fa-light-300.ttf b/apiferia/src/assets/fonts/fa-light-300.ttf new file mode 100644 index 00000000..6cbc5bbb Binary files /dev/null and b/apiferia/src/assets/fonts/fa-light-300.ttf differ diff --git a/apiferia/src/assets/fonts/fa-light-300.woff b/apiferia/src/assets/fonts/fa-light-300.woff new file mode 100644 index 00000000..bc7f599b Binary files /dev/null and b/apiferia/src/assets/fonts/fa-light-300.woff differ diff --git a/apiferia/src/assets/fonts/fa-light-300d41d.eot b/apiferia/src/assets/fonts/fa-light-300d41d.eot new file mode 100644 index 00000000..3022a93a Binary files /dev/null and b/apiferia/src/assets/fonts/fa-light-300d41d.eot differ diff --git a/apiferia/src/assets/fonts/fa-regular-400.eot b/apiferia/src/assets/fonts/fa-regular-400.eot new file mode 100644 index 00000000..e159e88d Binary files /dev/null and b/apiferia/src/assets/fonts/fa-regular-400.eot differ diff --git a/apiferia/src/assets/fonts/fa-regular-400.html b/apiferia/src/assets/fonts/fa-regular-400.html new file mode 100644 index 00000000..8d941d24 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-regular-400.html differ diff --git a/apiferia/src/assets/fonts/fa-regular-400.svg b/apiferia/src/assets/fonts/fa-regular-400.svg new file mode 100644 index 00000000..9e762807 --- /dev/null +++ b/apiferia/src/assets/fonts/fa-regular-400.svg @@ -0,0 +1,11256 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:13 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apiferia/src/assets/fonts/fa-regular-400.ttf b/apiferia/src/assets/fonts/fa-regular-400.ttf new file mode 100644 index 00000000..3e59ba44 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-regular-400.ttf differ diff --git a/apiferia/src/assets/fonts/fa-regular-400.woff b/apiferia/src/assets/fonts/fa-regular-400.woff new file mode 100644 index 00000000..299ace57 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-regular-400.woff differ diff --git a/apiferia/src/assets/fonts/fa-regular-400d41d.eot b/apiferia/src/assets/fonts/fa-regular-400d41d.eot new file mode 100644 index 00000000..e159e88d Binary files /dev/null and b/apiferia/src/assets/fonts/fa-regular-400d41d.eot differ diff --git a/apiferia/src/assets/fonts/fa-solid-900.eot b/apiferia/src/assets/fonts/fa-solid-900.eot new file mode 100644 index 00000000..32d630e5 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-solid-900.eot differ diff --git a/apiferia/src/assets/fonts/fa-solid-900.html b/apiferia/src/assets/fonts/fa-solid-900.html new file mode 100644 index 00000000..af2dd828 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-solid-900.html differ diff --git a/apiferia/src/assets/fonts/fa-solid-900.svg b/apiferia/src/assets/fonts/fa-solid-900.svg new file mode 100644 index 00000000..6736ffa1 --- /dev/null +++ b/apiferia/src/assets/fonts/fa-solid-900.svg @@ -0,0 +1,9588 @@ + + + + + +Created by FontForge 20190801 at Mon Mar 23 10:45:12 2020 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apiferia/src/assets/fonts/fa-solid-900.ttf b/apiferia/src/assets/fonts/fa-solid-900.ttf new file mode 100644 index 00000000..57f4d609 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-solid-900.ttf differ diff --git a/apiferia/src/assets/fonts/fa-solid-900.woff b/apiferia/src/assets/fonts/fa-solid-900.woff new file mode 100644 index 00000000..7066a561 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-solid-900.woff differ diff --git a/apiferia/src/assets/fonts/fa-solid-900d41d.eot b/apiferia/src/assets/fonts/fa-solid-900d41d.eot new file mode 100644 index 00000000..32d630e5 Binary files /dev/null and b/apiferia/src/assets/fonts/fa-solid-900d41d.eot differ diff --git a/apiferia/src/assets/fonts/style.css b/apiferia/src/assets/fonts/style.css new file mode 100644 index 00000000..110c4baf --- /dev/null +++ b/apiferia/src/assets/fonts/style.css @@ -0,0 +1,225 @@ +@font-face { + font-family: 'autodeal'; + src: url('/assets/fonts/autodealcb3a.eot?eblay1'); + src: url('/assets/fonts/autodealcb3a.eot?eblay1#iefix') format('embedded-opentype'), + url('/assets/fonts/autodealcb3a.ttf?eblay1') format('truetype'), + url('/assets/fonts/autodealcb3a.woff?eblay1') format('woff'), + url('/assets/fonts/autodealcb3a.svg?eblay1#autodeal') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + +[class^="icon-autodeal-"], [class*=" icon-autodeal-"] { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: 'autodeal' !important; + speak: never; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-autodeal-account:before { + content: "\e900"; +} +.icon-autodeal-add-list:before { + content: "\e902"; +} +.icon-autodeal-automatic:before { + content: "\e903"; +} +.icon-autodeal-btn-right:before { + content: "\e904"; +} +.icon-autodeal-chat:before { + content: "\e906"; +} +.icon-autodeal-check:before { + content: "\e907"; +} +.icon-autodeal-check1:before { + content: "\e908"; +} +.icon-autodeal-city:before { + content: "\e90b"; +} +.icon-autodeal-close2:before { + content: "\e90d"; +} +.icon-autodeal-color:before { + content: "\e90e"; +} +.icon-autodeal-condition:before { + content: "\e910"; +} +.icon-autodeal-coupe:before { + content: "\e911"; +} +.icon-autodeal-cylinders:before { + content: "\e912"; +} +.icon-autodeal-diesel:before { + content: "\e917"; +} +.icon-autodeal-doors:before { + content: "\e918"; +} +.icon-autodeal-drive:before { + content: "\e919"; +} +.icon-autodeal-engine:before { + content: "\e91b"; +} +.icon-autodeal-facebook:before { + content: "\e91d"; +} +.icon-autodeal-favorite:before { + content: "\e91e"; +} +.icon-autodeal-filter:before { + content: "\e920"; +} +.icon-autodeal-financing:before { + content: "\e921"; +} +.icon-autodeal-fuel:before { + content: "\e922"; +} +.icon-autodeal-hatchback:before { + content: "\e924"; +} +.icon-autodeal-hightway:before { + content: "\e925"; +} +.icon-autodeal-hybrid:before { + content: "\e926"; +} +.icon-autodeal-instagram:before { + content: "\e929"; +} +.icon-autodeal-inventory:before { + content: "\e92a"; +} +.icon-autodeal-km:before { + content: "\e92b"; +} +.icon-autodeal-km1:before { + content: "\e92c"; +} +.icon-autodeal-linkedin:before { + content: "\e92d"; +} +.icon-autodeal-list:before { + content: "\e92e"; +} +.icon-autodeal-mail:before { + content: "\e930"; +} +.icon-autodeal-max-power:before { + content: "\e932"; +} +.icon-autodeal-max-torque:before { + content: "\e933"; +} +.icon-autodeal-minus:before { + content: "\e935"; +} +.icon-autodeal-next:before { + content: "\e939"; +} +.icon-autodeal-number:before { + content: "\e93c"; +} +.icon-autodeal-offer:before { + content: "\e93d"; +} +.icon-autodeal-owner:before { + content: "\e93e"; +} +.icon-autodeal-phone2:before { + content: "\e941"; +} +.icon-autodeal-plus:before { + content: "\e944"; +} +.icon-autodeal-plus1:before { + content: "\e945"; +} +.icon-autodeal-priev:before { + content: "\e947"; +} +.icon-autodeal-red:before { + content: "\e94a"; +} +.icon-autodeal-right2:before { + content: "\e94d"; +} +.icon-autodeal-search:before { + content: "\e94e"; +} +.icon-autodeal-search-filter:before { + content: "\e950"; +} +.icon-autodeal-seats:before { + content: "\e951"; +} +.icon-autodeal-service:before { + content: "\e953"; +} +.icon-autodeal-size:before { + content: "\e956"; +} +.icon-autodeal-star:before { + content: "\e958"; +} +.icon-autodeal-stock:before { + content: "\e959"; +} +.icon-autodeal-suv:before { + content: "\e95a"; +} +.icon-autodeal-testimonial:before { + content: "\e95b"; +} +.icon-autodeal-top:before { + content: "\e95d"; +} +.icon-autodeal-transmission:before { + content: "\e95e"; +} +.icon-autodeal-transmission1:before { + content: "\e95f"; +} +.icon-autodeal-trending:before { + content: "\e960"; +} +.icon-autodeal-twitter:before { + content: "\e961"; +} +.icon-autodeal-up:before { + content: "\e962"; +} +.icon-autodeal-used-car:before { + content: "\e965"; +} +.icon-autodeal-user:before { + content: "\e966"; +} +.icon-autodeal-view2:before { + content: "\e96b"; +} +.icon-autodeal-view-more:before { + content: "\e96c"; +} +.icon-autodeal-year:before { + content: "\e96d"; +} +.icon-autodeal-youtube:before { + content: "\e96e"; +} diff --git a/apiferia/src/assets/images/app-calendar/facebook.png b/apiferia/src/assets/images/app-calendar/facebook.png new file mode 100644 index 00000000..9bcc7bda Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/facebook.png differ diff --git a/apiferia/src/assets/images/app-calendar/google-analytics.png b/apiferia/src/assets/images/app-calendar/google-analytics.png new file mode 100644 index 00000000..e7b4c335 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/google-analytics.png differ diff --git a/apiferia/src/assets/images/app-calendar/google-chrome.png b/apiferia/src/assets/images/app-calendar/google-chrome.png new file mode 100644 index 00000000..98f583bc Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/google-chrome.png differ diff --git a/apiferia/src/assets/images/app-calendar/google-mail.png b/apiferia/src/assets/images/app-calendar/google-mail.png new file mode 100644 index 00000000..35700fd8 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/google-mail.png differ diff --git a/apiferia/src/assets/images/app-calendar/google-meet.png b/apiferia/src/assets/images/app-calendar/google-meet.png new file mode 100644 index 00000000..5cbb9895 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/google-meet.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-1.png b/apiferia/src/assets/images/app-calendar/help-1.png new file mode 100644 index 00000000..df6799f4 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-1.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-2.png b/apiferia/src/assets/images/app-calendar/help-2.png new file mode 100644 index 00000000..778ef68b Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-2.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-3.png b/apiferia/src/assets/images/app-calendar/help-3.png new file mode 100644 index 00000000..efc584f8 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-3.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-4.png b/apiferia/src/assets/images/app-calendar/help-4.png new file mode 100644 index 00000000..92590ffe Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-4.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-5.png b/apiferia/src/assets/images/app-calendar/help-5.png new file mode 100644 index 00000000..1fded871 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-5.png differ diff --git a/apiferia/src/assets/images/app-calendar/help-6.png b/apiferia/src/assets/images/app-calendar/help-6.png new file mode 100644 index 00000000..79beaa13 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/help-6.png differ diff --git a/apiferia/src/assets/images/app-calendar/hubspot.png b/apiferia/src/assets/images/app-calendar/hubspot.png new file mode 100644 index 00000000..cd2f94ab Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/hubspot.png differ diff --git a/apiferia/src/assets/images/app-calendar/intercom.png b/apiferia/src/assets/images/app-calendar/intercom.png new file mode 100644 index 00000000..9f4335f6 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/intercom.png differ diff --git a/apiferia/src/assets/images/app-calendar/microsoft-outlook.png b/apiferia/src/assets/images/app-calendar/microsoft-outlook.png new file mode 100644 index 00000000..4dca6202 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/microsoft-outlook.png differ diff --git a/apiferia/src/assets/images/app-calendar/microsoft-team-conference.png b/apiferia/src/assets/images/app-calendar/microsoft-team-conference.png new file mode 100644 index 00000000..562a79b7 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/microsoft-team-conference.png differ diff --git a/apiferia/src/assets/images/app-calendar/sales-force.png b/apiferia/src/assets/images/app-calendar/sales-force.png new file mode 100644 index 00000000..48f9db1a Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/sales-force.png differ diff --git a/apiferia/src/assets/images/app-calendar/slack.png b/apiferia/src/assets/images/app-calendar/slack.png new file mode 100644 index 00000000..4fde10d7 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/slack.png differ diff --git a/apiferia/src/assets/images/app-calendar/stripe.png b/apiferia/src/assets/images/app-calendar/stripe.png new file mode 100644 index 00000000..9ad0cb94 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/stripe.png differ diff --git a/apiferia/src/assets/images/app-calendar/web-hooks.png b/apiferia/src/assets/images/app-calendar/web-hooks.png new file mode 100644 index 00000000..114ebd1a Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/web-hooks.png differ diff --git a/apiferia/src/assets/images/app-calendar/zapier.png b/apiferia/src/assets/images/app-calendar/zapier.png new file mode 100644 index 00000000..0cec9ac4 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/zapier.png differ diff --git a/apiferia/src/assets/images/app-calendar/zoom.png b/apiferia/src/assets/images/app-calendar/zoom.png new file mode 100644 index 00000000..f1f64296 Binary files /dev/null and b/apiferia/src/assets/images/app-calendar/zoom.png differ diff --git a/apiferia/src/assets/images/app-social/acc-wallpaper.jpg b/apiferia/src/assets/images/app-social/acc-wallpaper.jpg new file mode 100644 index 00000000..6ace9a8f Binary files /dev/null and b/apiferia/src/assets/images/app-social/acc-wallpaper.jpg differ diff --git a/apiferia/src/assets/images/app-social/favorite-1.jpg b/apiferia/src/assets/images/app-social/favorite-1.jpg new file mode 100644 index 00000000..21967044 Binary files /dev/null and b/apiferia/src/assets/images/app-social/favorite-1.jpg differ diff --git a/apiferia/src/assets/images/app-social/favorite-2.jpg b/apiferia/src/assets/images/app-social/favorite-2.jpg new file mode 100644 index 00000000..c3435c08 Binary files /dev/null and b/apiferia/src/assets/images/app-social/favorite-2.jpg differ diff --git a/apiferia/src/assets/images/app-social/favorite-3.jpg b/apiferia/src/assets/images/app-social/favorite-3.jpg new file mode 100644 index 00000000..d54c11e7 Binary files /dev/null and b/apiferia/src/assets/images/app-social/favorite-3.jpg differ diff --git a/apiferia/src/assets/images/app-social/favorite-4.jpg b/apiferia/src/assets/images/app-social/favorite-4.jpg new file mode 100644 index 00000000..de97bce9 Binary files /dev/null and b/apiferia/src/assets/images/app-social/favorite-4.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-1.jpg b/apiferia/src/assets/images/app-social/group-1.jpg new file mode 100644 index 00000000..05463110 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-1.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-2.jpg b/apiferia/src/assets/images/app-social/group-2.jpg new file mode 100644 index 00000000..f89ca5fd Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-2.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-3.jpg b/apiferia/src/assets/images/app-social/group-3.jpg new file mode 100644 index 00000000..3bc7bb89 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-3.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-4.jpg b/apiferia/src/assets/images/app-social/group-4.jpg new file mode 100644 index 00000000..2fc84db9 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-4.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-5.jpg b/apiferia/src/assets/images/app-social/group-5.jpg new file mode 100644 index 00000000..acb1942c Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-5.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-6.jpg b/apiferia/src/assets/images/app-social/group-6.jpg new file mode 100644 index 00000000..62f6d678 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-6.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-7.jpg b/apiferia/src/assets/images/app-social/group-7.jpg new file mode 100644 index 00000000..2ffcbdfc Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-7.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-8.jpg b/apiferia/src/assets/images/app-social/group-8.jpg new file mode 100644 index 00000000..64bb9640 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-8.jpg differ diff --git a/apiferia/src/assets/images/app-social/group-9.jpg b/apiferia/src/assets/images/app-social/group-9.jpg new file mode 100644 index 00000000..a3107845 Binary files /dev/null and b/apiferia/src/assets/images/app-social/group-9.jpg differ diff --git a/apiferia/src/assets/images/app-social/memory.jpg b/apiferia/src/assets/images/app-social/memory.jpg new file mode 100644 index 00000000..22f3c68b Binary files /dev/null and b/apiferia/src/assets/images/app-social/memory.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-1.jpg b/apiferia/src/assets/images/app-social/post-1.jpg new file mode 100644 index 00000000..3fd0e664 Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-1.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-2.jpg b/apiferia/src/assets/images/app-social/post-2.jpg new file mode 100644 index 00000000..587db44a Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-2.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-3.jpg b/apiferia/src/assets/images/app-social/post-3.jpg new file mode 100644 index 00000000..906ac8bd Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-3.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-4.jpg b/apiferia/src/assets/images/app-social/post-4.jpg new file mode 100644 index 00000000..594f1559 Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-4.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-6.jpg b/apiferia/src/assets/images/app-social/post-6.jpg new file mode 100644 index 00000000..59d509d3 Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-6.jpg differ diff --git a/apiferia/src/assets/images/app-social/post-7.jpg b/apiferia/src/assets/images/app-social/post-7.jpg new file mode 100644 index 00000000..115c3190 Binary files /dev/null and b/apiferia/src/assets/images/app-social/post-7.jpg differ diff --git a/apiferia/src/assets/images/app-social/wallpaper.jpg b/apiferia/src/assets/images/app-social/wallpaper.jpg new file mode 100644 index 00000000..bb53e43b Binary files /dev/null and b/apiferia/src/assets/images/app-social/wallpaper.jpg differ diff --git a/apiferia/src/assets/images/author/1.jpg b/apiferia/src/assets/images/author/1.jpg new file mode 100644 index 00000000..f20f23b6 Binary files /dev/null and b/apiferia/src/assets/images/author/1.jpg differ diff --git a/apiferia/src/assets/images/author/10.jpg b/apiferia/src/assets/images/author/10.jpg new file mode 100644 index 00000000..58470e09 Binary files /dev/null and b/apiferia/src/assets/images/author/10.jpg differ diff --git a/apiferia/src/assets/images/author/11.jpg b/apiferia/src/assets/images/author/11.jpg new file mode 100644 index 00000000..2beb6e86 Binary files /dev/null and b/apiferia/src/assets/images/author/11.jpg differ diff --git a/apiferia/src/assets/images/author/12.jpg b/apiferia/src/assets/images/author/12.jpg new file mode 100644 index 00000000..d9fdfbf9 Binary files /dev/null and b/apiferia/src/assets/images/author/12.jpg differ diff --git a/apiferia/src/assets/images/author/13.jpg b/apiferia/src/assets/images/author/13.jpg new file mode 100644 index 00000000..cad64a0f Binary files /dev/null and b/apiferia/src/assets/images/author/13.jpg differ diff --git a/apiferia/src/assets/images/author/14.jpg b/apiferia/src/assets/images/author/14.jpg new file mode 100644 index 00000000..5ae2c7d3 Binary files /dev/null and b/apiferia/src/assets/images/author/14.jpg differ diff --git a/apiferia/src/assets/images/author/15.png b/apiferia/src/assets/images/author/15.png new file mode 100644 index 00000000..87eae5d3 Binary files /dev/null and b/apiferia/src/assets/images/author/15.png differ diff --git a/apiferia/src/assets/images/author/16.png b/apiferia/src/assets/images/author/16.png new file mode 100644 index 00000000..28666682 Binary files /dev/null and b/apiferia/src/assets/images/author/16.png differ diff --git a/apiferia/src/assets/images/author/2.jpg b/apiferia/src/assets/images/author/2.jpg new file mode 100644 index 00000000..4e94c0b3 Binary files /dev/null and b/apiferia/src/assets/images/author/2.jpg differ diff --git a/apiferia/src/assets/images/author/3.png b/apiferia/src/assets/images/author/3.png new file mode 100644 index 00000000..53202317 Binary files /dev/null and b/apiferia/src/assets/images/author/3.png differ diff --git a/apiferia/src/assets/images/author/4.jpg b/apiferia/src/assets/images/author/4.jpg new file mode 100644 index 00000000..3be23de7 Binary files /dev/null and b/apiferia/src/assets/images/author/4.jpg differ diff --git a/apiferia/src/assets/images/author/5.jpg b/apiferia/src/assets/images/author/5.jpg new file mode 100644 index 00000000..34f8e17c Binary files /dev/null and b/apiferia/src/assets/images/author/5.jpg differ diff --git a/apiferia/src/assets/images/author/6.png b/apiferia/src/assets/images/author/6.png new file mode 100644 index 00000000..5df0c029 Binary files /dev/null and b/apiferia/src/assets/images/author/6.png differ diff --git a/apiferia/src/assets/images/author/7.jpg b/apiferia/src/assets/images/author/7.jpg new file mode 100644 index 00000000..c09cc409 Binary files /dev/null and b/apiferia/src/assets/images/author/7.jpg differ diff --git a/apiferia/src/assets/images/author/8.png b/apiferia/src/assets/images/author/8.png new file mode 100644 index 00000000..475b2b03 Binary files /dev/null and b/apiferia/src/assets/images/author/8.png differ diff --git a/apiferia/src/assets/images/author/9.jpg b/apiferia/src/assets/images/author/9.jpg new file mode 100644 index 00000000..e4e19adf Binary files /dev/null and b/apiferia/src/assets/images/author/9.jpg differ diff --git a/apiferia/src/assets/images/author/avt-cm1.jpg b/apiferia/src/assets/images/author/avt-cm1.jpg new file mode 100644 index 00000000..4f61d19f Binary files /dev/null and b/apiferia/src/assets/images/author/avt-cm1.jpg differ diff --git a/apiferia/src/assets/images/author/avt-cm2.jpg b/apiferia/src/assets/images/author/avt-cm2.jpg new file mode 100644 index 00000000..4b852f84 Binary files /dev/null and b/apiferia/src/assets/images/author/avt-cm2.jpg differ diff --git a/apiferia/src/assets/images/author/avt-cm3.jpg b/apiferia/src/assets/images/author/avt-cm3.jpg new file mode 100644 index 00000000..ef30390c Binary files /dev/null and b/apiferia/src/assets/images/author/avt-cm3.jpg differ diff --git a/apiferia/src/assets/images/author/avt-slide.png b/apiferia/src/assets/images/author/avt-slide.png new file mode 100644 index 00000000..63211350 Binary files /dev/null and b/apiferia/src/assets/images/author/avt-slide.png differ diff --git a/apiferia/src/assets/images/author/avt1.jpg b/apiferia/src/assets/images/author/avt1.jpg new file mode 100644 index 00000000..92d99faa Binary files /dev/null and b/apiferia/src/assets/images/author/avt1.jpg differ diff --git a/apiferia/src/assets/images/author/avt2.jpg b/apiferia/src/assets/images/author/avt2.jpg new file mode 100644 index 00000000..12337fd4 Binary files /dev/null and b/apiferia/src/assets/images/author/avt2.jpg differ diff --git a/apiferia/src/assets/images/banks/bacc.png b/apiferia/src/assets/images/banks/bacc.png new file mode 100644 index 00000000..4928aaf7 Binary files /dev/null and b/apiferia/src/assets/images/banks/bacc.png differ diff --git a/apiferia/src/assets/images/banks/banreservas.png b/apiferia/src/assets/images/banks/banreservas.png new file mode 100644 index 00000000..5a6dc861 Binary files /dev/null and b/apiferia/src/assets/images/banks/banreservas.png differ diff --git a/apiferia/src/assets/images/banks/bhd.png b/apiferia/src/assets/images/banks/bhd.png new file mode 100644 index 00000000..2caa84ed Binary files /dev/null and b/apiferia/src/assets/images/banks/bhd.png differ diff --git a/apiferia/src/assets/images/banks/caribe.png b/apiferia/src/assets/images/banks/caribe.png new file mode 100644 index 00000000..458901e8 Binary files /dev/null and b/apiferia/src/assets/images/banks/caribe.png differ diff --git a/apiferia/src/assets/images/banks/confisa.png b/apiferia/src/assets/images/banks/confisa.png new file mode 100644 index 00000000..939c5b11 Binary files /dev/null and b/apiferia/src/assets/images/banks/confisa.png differ diff --git a/apiferia/src/assets/images/banks/motorcredito.png b/apiferia/src/assets/images/banks/motorcredito.png new file mode 100644 index 00000000..af5fc44c Binary files /dev/null and b/apiferia/src/assets/images/banks/motorcredito.png differ diff --git a/apiferia/src/assets/images/banks/popular.png b/apiferia/src/assets/images/banks/popular.png new file mode 100644 index 00000000..fce3e016 Binary files /dev/null and b/apiferia/src/assets/images/banks/popular.png differ diff --git a/apiferia/src/assets/images/banks/scotia.png b/apiferia/src/assets/images/banks/scotia.png new file mode 100644 index 00000000..6fe0eba7 Binary files /dev/null and b/apiferia/src/assets/images/banks/scotia.png differ diff --git a/apiferia/src/assets/images/bg-overlay.svg b/apiferia/src/assets/images/bg-overlay.svg new file mode 100644 index 00000000..d5036fe6 --- /dev/null +++ b/apiferia/src/assets/images/bg-overlay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/brands/bitbucket.svg b/apiferia/src/assets/images/brands/bitbucket.svg new file mode 100644 index 00000000..ec824e44 --- /dev/null +++ b/apiferia/src/assets/images/brands/bitbucket.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/brands/dribbble.svg b/apiferia/src/assets/images/brands/dribbble.svg new file mode 100644 index 00000000..77a5a99b --- /dev/null +++ b/apiferia/src/assets/images/brands/dribbble.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/brands/dropbox.svg b/apiferia/src/assets/images/brands/dropbox.svg new file mode 100644 index 00000000..b1ae8c78 --- /dev/null +++ b/apiferia/src/assets/images/brands/dropbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/brands/github.svg b/apiferia/src/assets/images/brands/github.svg new file mode 100644 index 00000000..2ac5b69c --- /dev/null +++ b/apiferia/src/assets/images/brands/github.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/brands/slack.svg b/apiferia/src/assets/images/brands/slack.svg new file mode 100644 index 00000000..0e980254 --- /dev/null +++ b/apiferia/src/assets/images/brands/slack.svg @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/apiferia/src/assets/images/car-list/car1.jpg b/apiferia/src/assets/images/car-list/car1.jpg new file mode 100644 index 00000000..c973ca87 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car1.jpg differ diff --git a/apiferia/src/assets/images/car-list/car10.jpg b/apiferia/src/assets/images/car-list/car10.jpg new file mode 100644 index 00000000..0c03fd1c Binary files /dev/null and b/apiferia/src/assets/images/car-list/car10.jpg differ diff --git a/apiferia/src/assets/images/car-list/car11.jpg b/apiferia/src/assets/images/car-list/car11.jpg new file mode 100644 index 00000000..fc683ee9 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car11.jpg differ diff --git a/apiferia/src/assets/images/car-list/car12.jpg b/apiferia/src/assets/images/car-list/car12.jpg new file mode 100644 index 00000000..f679b1f0 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car12.jpg differ diff --git a/apiferia/src/assets/images/car-list/car13.jpg b/apiferia/src/assets/images/car-list/car13.jpg new file mode 100644 index 00000000..b7723773 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car13.jpg differ diff --git a/apiferia/src/assets/images/car-list/car14.jpg b/apiferia/src/assets/images/car-list/car14.jpg new file mode 100644 index 00000000..766619da Binary files /dev/null and b/apiferia/src/assets/images/car-list/car14.jpg differ diff --git a/apiferia/src/assets/images/car-list/car15.jpg b/apiferia/src/assets/images/car-list/car15.jpg new file mode 100644 index 00000000..71737f8a Binary files /dev/null and b/apiferia/src/assets/images/car-list/car15.jpg differ diff --git a/apiferia/src/assets/images/car-list/car16.jpg b/apiferia/src/assets/images/car-list/car16.jpg new file mode 100644 index 00000000..d83e1998 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car16.jpg differ diff --git a/apiferia/src/assets/images/car-list/car17.jpg b/apiferia/src/assets/images/car-list/car17.jpg new file mode 100644 index 00000000..d63ef859 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car17.jpg differ diff --git a/apiferia/src/assets/images/car-list/car18.jpg b/apiferia/src/assets/images/car-list/car18.jpg new file mode 100644 index 00000000..51220ed6 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car18.jpg differ diff --git a/apiferia/src/assets/images/car-list/car19.jpg b/apiferia/src/assets/images/car-list/car19.jpg new file mode 100644 index 00000000..d0f64978 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car19.jpg differ diff --git a/apiferia/src/assets/images/car-list/car2.jpg b/apiferia/src/assets/images/car-list/car2.jpg new file mode 100644 index 00000000..d9d49c36 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car2.jpg differ diff --git a/apiferia/src/assets/images/car-list/car20.jpg b/apiferia/src/assets/images/car-list/car20.jpg new file mode 100644 index 00000000..d0f64978 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car20.jpg differ diff --git a/apiferia/src/assets/images/car-list/car21.jpg b/apiferia/src/assets/images/car-list/car21.jpg new file mode 100644 index 00000000..887393f0 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car21.jpg differ diff --git a/apiferia/src/assets/images/car-list/car22.jpg b/apiferia/src/assets/images/car-list/car22.jpg new file mode 100644 index 00000000..0677fc0e Binary files /dev/null and b/apiferia/src/assets/images/car-list/car22.jpg differ diff --git a/apiferia/src/assets/images/car-list/car23.jpg b/apiferia/src/assets/images/car-list/car23.jpg new file mode 100644 index 00000000..9e946657 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car23.jpg differ diff --git a/apiferia/src/assets/images/car-list/car24.jpg b/apiferia/src/assets/images/car-list/car24.jpg new file mode 100644 index 00000000..086059e2 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car24.jpg differ diff --git a/apiferia/src/assets/images/car-list/car25.jpg b/apiferia/src/assets/images/car-list/car25.jpg new file mode 100644 index 00000000..e982682e Binary files /dev/null and b/apiferia/src/assets/images/car-list/car25.jpg differ diff --git a/apiferia/src/assets/images/car-list/car27.jpg b/apiferia/src/assets/images/car-list/car27.jpg new file mode 100644 index 00000000..766619da Binary files /dev/null and b/apiferia/src/assets/images/car-list/car27.jpg differ diff --git a/apiferia/src/assets/images/car-list/car28.jpg b/apiferia/src/assets/images/car-list/car28.jpg new file mode 100644 index 00000000..212c84d1 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car28.jpg differ diff --git a/apiferia/src/assets/images/car-list/car29.jpg b/apiferia/src/assets/images/car-list/car29.jpg new file mode 100644 index 00000000..8ad7af76 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car29.jpg differ diff --git a/apiferia/src/assets/images/car-list/car3.jpg b/apiferia/src/assets/images/car-list/car3.jpg new file mode 100644 index 00000000..8e1208ca Binary files /dev/null and b/apiferia/src/assets/images/car-list/car3.jpg differ diff --git a/apiferia/src/assets/images/car-list/car34.jpg b/apiferia/src/assets/images/car-list/car34.jpg new file mode 100644 index 00000000..64c390c4 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car34.jpg differ diff --git a/apiferia/src/assets/images/car-list/car4.jpg b/apiferia/src/assets/images/car-list/car4.jpg new file mode 100644 index 00000000..0c58d40a Binary files /dev/null and b/apiferia/src/assets/images/car-list/car4.jpg differ diff --git a/apiferia/src/assets/images/car-list/car6.jpg b/apiferia/src/assets/images/car-list/car6.jpg new file mode 100644 index 00000000..5e406c45 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car6.jpg differ diff --git a/apiferia/src/assets/images/car-list/car8.jpg b/apiferia/src/assets/images/car-list/car8.jpg new file mode 100644 index 00000000..79b1cae0 Binary files /dev/null and b/apiferia/src/assets/images/car-list/car8.jpg differ diff --git a/apiferia/src/assets/images/car-list/car9.jpg b/apiferia/src/assets/images/car-list/car9.jpg new file mode 100644 index 00000000..b34fcbcd Binary files /dev/null and b/apiferia/src/assets/images/car-list/car9.jpg differ diff --git a/apiferia/src/assets/images/dealers/feria.png b/apiferia/src/assets/images/dealers/feria.png new file mode 100644 index 00000000..56b95c2a Binary files /dev/null and b/apiferia/src/assets/images/dealers/feria.png differ diff --git a/apiferia/src/assets/images/dealers/kparra.png b/apiferia/src/assets/images/dealers/kparra.png new file mode 100644 index 00000000..bc293c81 Binary files /dev/null and b/apiferia/src/assets/images/dealers/kparra.png differ diff --git a/apiferia/src/assets/images/favicon.ico b/apiferia/src/assets/images/favicon.ico new file mode 100644 index 00000000..44231b62 Binary files /dev/null and b/apiferia/src/assets/images/favicon.ico differ diff --git a/apiferia/src/assets/images/flags/french.jpg b/apiferia/src/assets/images/flags/french.jpg new file mode 100644 index 00000000..bb436739 Binary files /dev/null and b/apiferia/src/assets/images/flags/french.jpg differ diff --git a/apiferia/src/assets/images/flags/germany.jpg b/apiferia/src/assets/images/flags/germany.jpg new file mode 100644 index 00000000..d5992098 Binary files /dev/null and b/apiferia/src/assets/images/flags/germany.jpg differ diff --git a/apiferia/src/assets/images/flags/italy.jpg b/apiferia/src/assets/images/flags/italy.jpg new file mode 100644 index 00000000..e6eeea63 Binary files /dev/null and b/apiferia/src/assets/images/flags/italy.jpg differ diff --git a/apiferia/src/assets/images/flags/russia.jpg b/apiferia/src/assets/images/flags/russia.jpg new file mode 100644 index 00000000..de3d4003 Binary files /dev/null and b/apiferia/src/assets/images/flags/russia.jpg differ diff --git a/apiferia/src/assets/images/flags/spain.jpg b/apiferia/src/assets/images/flags/spain.jpg new file mode 100644 index 00000000..dd468056 Binary files /dev/null and b/apiferia/src/assets/images/flags/spain.jpg differ diff --git a/apiferia/src/assets/images/flags/us.jpg b/apiferia/src/assets/images/flags/us.jpg new file mode 100644 index 00000000..654bb910 Binary files /dev/null and b/apiferia/src/assets/images/flags/us.jpg differ diff --git a/apiferia/src/assets/images/logo-dark-full.png b/apiferia/src/assets/images/logo-dark-full.png new file mode 100644 index 00000000..a5228ab9 Binary files /dev/null and b/apiferia/src/assets/images/logo-dark-full.png differ diff --git a/apiferia/src/assets/images/logo-dark.png b/apiferia/src/assets/images/logo-dark.png new file mode 100644 index 00000000..2d58e008 Binary files /dev/null and b/apiferia/src/assets/images/logo-dark.png differ diff --git a/apiferia/src/assets/images/logo-light-full.png b/apiferia/src/assets/images/logo-light-full.png new file mode 100644 index 00000000..c359664a Binary files /dev/null and b/apiferia/src/assets/images/logo-light-full.png differ diff --git a/apiferia/src/assets/images/logo-light.png b/apiferia/src/assets/images/logo-light.png new file mode 100644 index 00000000..acadb3f5 Binary files /dev/null and b/apiferia/src/assets/images/logo-light.png differ diff --git a/apiferia/src/assets/images/logo-sm.png b/apiferia/src/assets/images/logo-sm.png new file mode 100644 index 00000000..c258251e Binary files /dev/null and b/apiferia/src/assets/images/logo-sm.png differ diff --git a/apiferia/src/assets/images/logoferia_ancho.png b/apiferia/src/assets/images/logoferia_ancho.png new file mode 100644 index 00000000..a91181bc Binary files /dev/null and b/apiferia/src/assets/images/logoferia_ancho.png differ diff --git a/apiferia/src/assets/images/products/product-1(1).png b/apiferia/src/assets/images/products/product-1(1).png new file mode 100644 index 00000000..52f16ad2 Binary files /dev/null and b/apiferia/src/assets/images/products/product-1(1).png differ diff --git a/apiferia/src/assets/images/products/product-1(2).png b/apiferia/src/assets/images/products/product-1(2).png new file mode 100644 index 00000000..5fb0a050 Binary files /dev/null and b/apiferia/src/assets/images/products/product-1(2).png differ diff --git a/apiferia/src/assets/images/products/product-1(3).png b/apiferia/src/assets/images/products/product-1(3).png new file mode 100644 index 00000000..0edb115d Binary files /dev/null and b/apiferia/src/assets/images/products/product-1(3).png differ diff --git a/apiferia/src/assets/images/products/product-1(4).png b/apiferia/src/assets/images/products/product-1(4).png new file mode 100644 index 00000000..ea1091b5 Binary files /dev/null and b/apiferia/src/assets/images/products/product-1(4).png differ diff --git a/apiferia/src/assets/images/products/product-2.png b/apiferia/src/assets/images/products/product-2.png new file mode 100644 index 00000000..51cbb39c Binary files /dev/null and b/apiferia/src/assets/images/products/product-2.png differ diff --git a/apiferia/src/assets/images/products/product-3.png b/apiferia/src/assets/images/products/product-3.png new file mode 100644 index 00000000..c6798256 Binary files /dev/null and b/apiferia/src/assets/images/products/product-3.png differ diff --git a/apiferia/src/assets/images/products/product-4.png b/apiferia/src/assets/images/products/product-4.png new file mode 100644 index 00000000..7b998b18 Binary files /dev/null and b/apiferia/src/assets/images/products/product-4.png differ diff --git a/apiferia/src/assets/images/products/product-5.png b/apiferia/src/assets/images/products/product-5.png new file mode 100644 index 00000000..fc333be1 Binary files /dev/null and b/apiferia/src/assets/images/products/product-5.png differ diff --git a/apiferia/src/assets/images/products/product-6.png b/apiferia/src/assets/images/products/product-6.png new file mode 100644 index 00000000..f77fbe58 Binary files /dev/null and b/apiferia/src/assets/images/products/product-6.png differ diff --git a/apiferia/src/assets/images/profile-bg.jpg b/apiferia/src/assets/images/profile-bg.jpg new file mode 100644 index 00000000..8e4cdfcb Binary files /dev/null and b/apiferia/src/assets/images/profile-bg.jpg differ diff --git a/apiferia/src/assets/images/section/listing-detai-1.jpg b/apiferia/src/assets/images/section/listing-detai-1.jpg new file mode 100644 index 00000000..112bbb76 Binary files /dev/null and b/apiferia/src/assets/images/section/listing-detai-1.jpg differ diff --git a/apiferia/src/assets/images/section/listing-detai-2.jpg b/apiferia/src/assets/images/section/listing-detai-2.jpg new file mode 100644 index 00000000..f5fffa27 Binary files /dev/null and b/apiferia/src/assets/images/section/listing-detai-2.jpg differ diff --git a/apiferia/src/assets/images/section/listing-detai-3.jpg b/apiferia/src/assets/images/section/listing-detai-3.jpg new file mode 100644 index 00000000..02e3faf3 Binary files /dev/null and b/apiferia/src/assets/images/section/listing-detai-3.jpg differ diff --git a/apiferia/src/assets/images/sign-in.svg b/apiferia/src/assets/images/sign-in.svg new file mode 100644 index 00000000..6a4d5f71 --- /dev/null +++ b/apiferia/src/assets/images/sign-in.svg @@ -0,0 +1 @@ + diff --git a/apiferia/src/assets/images/small/img-1.jpg b/apiferia/src/assets/images/small/img-1.jpg new file mode 100644 index 00000000..9a6f876c Binary files /dev/null and b/apiferia/src/assets/images/small/img-1.jpg differ diff --git a/apiferia/src/assets/images/small/img-10.jpg b/apiferia/src/assets/images/small/img-10.jpg new file mode 100644 index 00000000..105f70b3 Binary files /dev/null and b/apiferia/src/assets/images/small/img-10.jpg differ diff --git a/apiferia/src/assets/images/small/img-2.jpg b/apiferia/src/assets/images/small/img-2.jpg new file mode 100644 index 00000000..d0f24329 Binary files /dev/null and b/apiferia/src/assets/images/small/img-2.jpg differ diff --git a/apiferia/src/assets/images/small/img-3.jpg b/apiferia/src/assets/images/small/img-3.jpg new file mode 100644 index 00000000..ee003885 Binary files /dev/null and b/apiferia/src/assets/images/small/img-3.jpg differ diff --git a/apiferia/src/assets/images/small/img-4.jpg b/apiferia/src/assets/images/small/img-4.jpg new file mode 100644 index 00000000..d29f833f Binary files /dev/null and b/apiferia/src/assets/images/small/img-4.jpg differ diff --git a/apiferia/src/assets/images/small/img-5.jpg b/apiferia/src/assets/images/small/img-5.jpg new file mode 100644 index 00000000..4413344d Binary files /dev/null and b/apiferia/src/assets/images/small/img-5.jpg differ diff --git a/apiferia/src/assets/images/small/img-6.jpg b/apiferia/src/assets/images/small/img-6.jpg new file mode 100644 index 00000000..c01df392 Binary files /dev/null and b/apiferia/src/assets/images/small/img-6.jpg differ diff --git a/apiferia/src/assets/images/small/img-7.jpg b/apiferia/src/assets/images/small/img-7.jpg new file mode 100644 index 00000000..186d909b Binary files /dev/null and b/apiferia/src/assets/images/small/img-7.jpg differ diff --git a/apiferia/src/assets/images/small/img-8.jpg b/apiferia/src/assets/images/small/img-8.jpg new file mode 100644 index 00000000..66c62dcd Binary files /dev/null and b/apiferia/src/assets/images/small/img-8.jpg differ diff --git a/apiferia/src/assets/images/small/img-9.jpg b/apiferia/src/assets/images/small/img-9.jpg new file mode 100644 index 00000000..2be794fe Binary files /dev/null and b/apiferia/src/assets/images/small/img-9.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-1.jpg b/apiferia/src/assets/images/users/avatar-1.jpg new file mode 100644 index 00000000..c16bef68 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-1.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-10.jpg b/apiferia/src/assets/images/users/avatar-10.jpg new file mode 100644 index 00000000..114e0d85 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-10.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-11.jpg b/apiferia/src/assets/images/users/avatar-11.jpg new file mode 100644 index 00000000..28dbf669 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-11.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-12.jpg b/apiferia/src/assets/images/users/avatar-12.jpg new file mode 100644 index 00000000..788b7b8d Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-12.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-2.jpg b/apiferia/src/assets/images/users/avatar-2.jpg new file mode 100644 index 00000000..e9de00fa Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-2.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-3.jpg b/apiferia/src/assets/images/users/avatar-3.jpg new file mode 100644 index 00000000..5dc6d419 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-3.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-4.jpg b/apiferia/src/assets/images/users/avatar-4.jpg new file mode 100644 index 00000000..e0c59791 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-4.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-5.jpg b/apiferia/src/assets/images/users/avatar-5.jpg new file mode 100644 index 00000000..05a8e668 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-5.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-6.jpg b/apiferia/src/assets/images/users/avatar-6.jpg new file mode 100644 index 00000000..63ca404f Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-6.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-7.jpg b/apiferia/src/assets/images/users/avatar-7.jpg new file mode 100644 index 00000000..f7fee5e2 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-7.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-8.jpg b/apiferia/src/assets/images/users/avatar-8.jpg new file mode 100644 index 00000000..27e71ff3 Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-8.jpg differ diff --git a/apiferia/src/assets/images/users/avatar-9.jpg b/apiferia/src/assets/images/users/avatar-9.jpg new file mode 100644 index 00000000..217734bd Binary files /dev/null and b/apiferia/src/assets/images/users/avatar-9.jpg differ diff --git a/apiferia/src/assets/images/users/chat.jpg b/apiferia/src/assets/images/users/chat.jpg new file mode 100644 index 00000000..43aadfc5 Binary files /dev/null and b/apiferia/src/assets/images/users/chat.jpg differ diff --git a/apiferia/src/assets/images/users/dummy-avatar.jpg b/apiferia/src/assets/images/users/dummy-avatar.jpg new file mode 100644 index 00000000..bea4355c Binary files /dev/null and b/apiferia/src/assets/images/users/dummy-avatar.jpg differ diff --git a/apiferia/src/assets/js/bootstrap.min.js b/apiferia/src/assets/js/bootstrap.min.js new file mode 100644 index 00000000..04e9185b --- /dev/null +++ b/apiferia/src/assets/js/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function j(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function M(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${M(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${M(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=j(t.dataset[n])}return e},getDataAttribute:(t,e)=>j(t.getAttribute(`data-bs-${M(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.3"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e?e.split(",").map((t=>n(t))).join(","):null},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",jt="collapsing",Mt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(jt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(jt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(jt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(Mt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function je(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const Me={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:je(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:je(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},j=p?3:1;j>0&&"break"!==P(j);j--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],j=f?-T[$]/2:0,M=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-j-q-z-O.mainAxis:M-q-z-O.mainAxis,K=v?-E[$]/2+j+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,jn=`hide${xn}`,Mn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,jn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,Mn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,Mn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
    "},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",js="Home",Ms="End",Fs="active",Hs="fade",Ws="show",Bs=".dropdown-toggle",zs=`:not(${Bs})`,Rs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',qs=`.nav-link${zs}, .list-group-item${zs}, [role="tab"]${zs}, ${Rs}`,Vs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Ks extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,js,Ms].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([js,Ms].includes(t.key))i=e[t.key===js?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Ks.getOrCreateInstance(i).show())}_getChildren(){return z.find(qs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(Bs,Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(qs)?t:z.findOne(qs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Ks.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,Rs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Ks.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(Vs))Ks.getOrCreateInstance(t)})),m(Ks);const Qs=".bs.toast",Xs=`mouseover${Qs}`,Ys=`mouseout${Qs}`,Us=`focusin${Qs}`,Gs=`focusout${Qs}`,Js=`hide${Qs}`,Zs=`hidden${Qs}`,to=`show${Qs}`,eo=`shown${Qs}`,io="hide",no="show",so="showing",oo={animation:"boolean",autohide:"boolean",delay:"number"},ro={animation:!0,autohide:!0,delay:5e3};class ao extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return ro}static get DefaultType(){return oo}static get NAME(){return"toast"}show(){N.trigger(this._element,to).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(io),d(this._element),this._element.classList.add(no,so),this._queueCallback((()=>{this._element.classList.remove(so),N.trigger(this._element,eo),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Js).defaultPrevented||(this._element.classList.add(so),this._queueCallback((()=>{this._element.classList.add(io),this._element.classList.remove(so,no),N.trigger(this._element,Zs)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(no),super.dispose()}isShown(){return this._element.classList.contains(no)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Xs,(t=>this._onInteraction(t,!0))),N.on(this._element,Ys,(t=>this._onInteraction(t,!1))),N.on(this._element,Us,(t=>this._onInteraction(t,!0))),N.on(this._element,Gs,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ao.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ao),m(ao),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Ks,Toast:ao,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/apiferia/src/assets/js/chart.js b/apiferia/src/assets/js/chart.js new file mode 100644 index 00000000..48795066 --- /dev/null +++ b/apiferia/src/assets/js/chart.js @@ -0,0 +1,11041 @@ +/*! + * Chart.js v3.5.1 + * https://www.chartjs.org + * (c) 2021 Chart.js Contributors + * Released under the MIT License + */ +!(function (t, e) { + "object" == typeof exports && "undefined" != typeof module + ? (module.exports = e()) + : "function" == typeof define && define.amd + ? define(e) + : ((t = "undefined" != typeof globalThis ? globalThis : t || self).Chart = + e()); + })(this, function () { + "use strict"; + const t = + "undefined" == typeof window + ? function (t) { + return t(); + } + : window.requestAnimationFrame; + function e(e, i, n) { + const o = n || ((t) => Array.prototype.slice.call(t)); + let s = !1, + a = []; + return function (...n) { + (a = o(n)), + s || + ((s = !0), + t.call(window, () => { + (s = !1), e.apply(i, a); + })); + }; + } + function i(t, e) { + let i; + return function () { + return e ? (clearTimeout(i), (i = setTimeout(t, e))) : t(), e; + }; + } + const n = (t) => ("start" === t ? "left" : "end" === t ? "right" : "center"), + o = (t, e, i) => ("start" === t ? e : "end" === t ? i : (e + i) / 2), + s = (t, e, i, n) => + t === (n ? "left" : "right") ? i : "center" === t ? (e + i) / 2 : e; + var a = new (class { + constructor() { + (this._request = null), + (this._charts = new Map()), + (this._running = !1), + (this._lastDate = void 0); + } + _notify(t, e, i, n) { + const o = e.listeners[n], + s = e.duration; + o.forEach((n) => + n({ + chart: t, + initial: e.initial, + numSteps: s, + currentStep: Math.min(i - e.start, s), + }) + ); + } + _refresh() { + const e = this; + e._request || + ((e._running = !0), + (e._request = t.call(window, () => { + e._update(), (e._request = null), e._running && e._refresh(); + }))); + } + _update(t = Date.now()) { + const e = this; + let i = 0; + e._charts.forEach((n, o) => { + if (!n.running || !n.items.length) return; + const s = n.items; + let a, + r = s.length - 1, + l = !1; + for (; r >= 0; --r) + (a = s[r]), + a._active + ? (a._total > n.duration && (n.duration = a._total), + a.tick(t), + (l = !0)) + : ((s[r] = s[s.length - 1]), s.pop()); + l && (o.draw(), e._notify(o, n, t, "progress")), + s.length || + ((n.running = !1), + e._notify(o, n, t, "complete"), + (n.initial = !1)), + (i += s.length); + }), + (e._lastDate = t), + 0 === i && (e._running = !1); + } + _getAnims(t) { + const e = this._charts; + let i = e.get(t); + return ( + i || + ((i = { + running: !1, + initial: !0, + items: [], + listeners: { complete: [], progress: [] }, + }), + e.set(t, i)), + i + ); + } + listen(t, e, i) { + this._getAnims(t).listeners[e].push(i); + } + add(t, e) { + e && e.length && this._getAnims(t).items.push(...e); + } + has(t) { + return this._getAnims(t).items.length > 0; + } + start(t) { + const e = this._charts.get(t); + e && + ((e.running = !0), + (e.start = Date.now()), + (e.duration = e.items.reduce((t, e) => Math.max(t, e._duration), 0)), + this._refresh()); + } + running(t) { + if (!this._running) return !1; + const e = this._charts.get(t); + return !!(e && e.running && e.items.length); + } + stop(t) { + const e = this._charts.get(t); + if (!e || !e.items.length) return; + const i = e.items; + let n = i.length - 1; + for (; n >= 0; --n) i[n].cancel(); + (e.items = []), this._notify(t, e, Date.now(), "complete"); + } + remove(t) { + return this._charts.delete(t); + } + })(); + /*! + * @kurkle/color v0.1.9 + * https://github.com/kurkle/color#readme + * (c) 2020 Jukka Kurkela + * Released under the MIT License + */ const r = { + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + 6: 6, + 7: 7, + 8: 8, + 9: 9, + A: 10, + B: 11, + C: 12, + D: 13, + E: 14, + F: 15, + a: 10, + b: 11, + c: 12, + d: 13, + e: 14, + f: 15, + }, + l = "0123456789ABCDEF", + c = (t) => l[15 & t], + h = (t) => l[(240 & t) >> 4] + l[15 & t], + d = (t) => (240 & t) >> 4 == (15 & t); + function u(t) { + var e = (function (t) { + return d(t.r) && d(t.g) && d(t.b) && d(t.a); + })(t) + ? c + : h; + return t ? "#" + e(t.r) + e(t.g) + e(t.b) + (t.a < 255 ? e(t.a) : "") : t; + } + function f(t) { + return (t + 0.5) | 0; + } + const g = (t, e, i) => Math.max(Math.min(t, i), e); + function p(t) { + return g(f(2.55 * t), 0, 255); + } + function m(t) { + return g(f(255 * t), 0, 255); + } + function x(t) { + return g(f(t / 2.55) / 100, 0, 1); + } + function b(t) { + return g(f(100 * t), 0, 100); + } + const _ = + /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/; + const y = + /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/; + function v(t, e, i) { + const n = e * Math.min(i, 1 - i), + o = (e, o = (e + t / 30) % 12) => + i - n * Math.max(Math.min(o - 3, 9 - o, 1), -1); + return [o(0), o(8), o(4)]; + } + function w(t, e, i) { + const n = (n, o = (n + t / 60) % 6) => + i - i * e * Math.max(Math.min(o, 4 - o, 1), 0); + return [n(5), n(3), n(1)]; + } + function M(t, e, i) { + const n = v(t, 1, 0.5); + let o; + for ( + e + i > 1 && ((o = 1 / (e + i)), (e *= o), (i *= o)), o = 0; + o < 3; + o++ + ) + (n[o] *= 1 - e - i), (n[o] += e); + return n; + } + function k(t) { + const e = t.r / 255, + i = t.g / 255, + n = t.b / 255, + o = Math.max(e, i, n), + s = Math.min(e, i, n), + a = (o + s) / 2; + let r, l, c; + return ( + o !== s && + ((c = o - s), + (l = a > 0.5 ? c / (2 - o - s) : c / (o + s)), + (r = + o === e + ? (i - n) / c + (i < n ? 6 : 0) + : o === i + ? (n - e) / c + 2 + : (e - i) / c + 4), + (r = 60 * r + 0.5)), + [0 | r, l || 0, a] + ); + } + function S(t, e, i, n) { + return (Array.isArray(e) ? t(e[0], e[1], e[2]) : t(e, i, n)).map(m); + } + function P(t, e, i) { + return S(v, t, e, i); + } + function D(t) { + return ((t % 360) + 360) % 360; + } + function C(t) { + const e = y.exec(t); + let i, + n = 255; + if (!e) return; + e[5] !== i && (n = e[6] ? p(+e[5]) : m(+e[5])); + const o = D(+e[2]), + s = +e[3] / 100, + a = +e[4] / 100; + return ( + (i = + "hwb" === e[1] + ? (function (t, e, i) { + return S(M, t, e, i); + })(o, s, a) + : "hsv" === e[1] + ? (function (t, e, i) { + return S(w, t, e, i); + })(o, s, a) + : P(o, s, a)), + { r: i[0], g: i[1], b: i[2], a: n } + ); + } + const O = { + x: "dark", + Z: "light", + Y: "re", + X: "blu", + W: "gr", + V: "medium", + U: "slate", + A: "ee", + T: "ol", + S: "or", + B: "ra", + C: "lateg", + D: "ights", + R: "in", + Q: "turquois", + E: "hi", + P: "ro", + O: "al", + N: "le", + M: "de", + L: "yello", + F: "en", + K: "ch", + G: "arks", + H: "ea", + I: "ightg", + J: "wh", + }, + T = { + OiceXe: "f0f8ff", + antiquewEte: "faebd7", + aqua: "ffff", + aquamarRe: "7fffd4", + azuY: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "0", + blanKedOmond: "ffebcd", + Xe: "ff", + XeviTet: "8a2be2", + bPwn: "a52a2a", + burlywood: "deb887", + caMtXe: "5f9ea0", + KartYuse: "7fff00", + KocTate: "d2691e", + cSO: "ff7f50", + cSnflowerXe: "6495ed", + cSnsilk: "fff8dc", + crimson: "dc143c", + cyan: "ffff", + xXe: "8b", + xcyan: "8b8b", + xgTMnPd: "b8860b", + xWay: "a9a9a9", + xgYF: "6400", + xgYy: "a9a9a9", + xkhaki: "bdb76b", + xmagFta: "8b008b", + xTivegYF: "556b2f", + xSange: "ff8c00", + xScEd: "9932cc", + xYd: "8b0000", + xsOmon: "e9967a", + xsHgYF: "8fbc8f", + xUXe: "483d8b", + xUWay: "2f4f4f", + xUgYy: "2f4f4f", + xQe: "ced1", + xviTet: "9400d3", + dAppRk: "ff1493", + dApskyXe: "bfff", + dimWay: "696969", + dimgYy: "696969", + dodgerXe: "1e90ff", + fiYbrick: "b22222", + flSOwEte: "fffaf0", + foYstWAn: "228b22", + fuKsia: "ff00ff", + gaRsbSo: "dcdcdc", + ghostwEte: "f8f8ff", + gTd: "ffd700", + gTMnPd: "daa520", + Way: "808080", + gYF: "8000", + gYFLw: "adff2f", + gYy: "808080", + honeyMw: "f0fff0", + hotpRk: "ff69b4", + RdianYd: "cd5c5c", + Rdigo: "4b0082", + ivSy: "fffff0", + khaki: "f0e68c", + lavFMr: "e6e6fa", + lavFMrXsh: "fff0f5", + lawngYF: "7cfc00", + NmoncEffon: "fffacd", + ZXe: "add8e6", + ZcSO: "f08080", + Zcyan: "e0ffff", + ZgTMnPdLw: "fafad2", + ZWay: "d3d3d3", + ZgYF: "90ee90", + ZgYy: "d3d3d3", + ZpRk: "ffb6c1", + ZsOmon: "ffa07a", + ZsHgYF: "20b2aa", + ZskyXe: "87cefa", + ZUWay: "778899", + ZUgYy: "778899", + ZstAlXe: "b0c4de", + ZLw: "ffffe0", + lime: "ff00", + limegYF: "32cd32", + lRF: "faf0e6", + magFta: "ff00ff", + maPon: "800000", + VaquamarRe: "66cdaa", + VXe: "cd", + VScEd: "ba55d3", + VpurpN: "9370db", + VsHgYF: "3cb371", + VUXe: "7b68ee", + VsprRggYF: "fa9a", + VQe: "48d1cc", + VviTetYd: "c71585", + midnightXe: "191970", + mRtcYam: "f5fffa", + mistyPse: "ffe4e1", + moccasR: "ffe4b5", + navajowEte: "ffdead", + navy: "80", + Tdlace: "fdf5e6", + Tive: "808000", + TivedBb: "6b8e23", + Sange: "ffa500", + SangeYd: "ff4500", + ScEd: "da70d6", + pOegTMnPd: "eee8aa", + pOegYF: "98fb98", + pOeQe: "afeeee", + pOeviTetYd: "db7093", + papayawEp: "ffefd5", + pHKpuff: "ffdab9", + peru: "cd853f", + pRk: "ffc0cb", + plum: "dda0dd", + powMrXe: "b0e0e6", + purpN: "800080", + YbeccapurpN: "663399", + Yd: "ff0000", + Psybrown: "bc8f8f", + PyOXe: "4169e1", + saddNbPwn: "8b4513", + sOmon: "fa8072", + sandybPwn: "f4a460", + sHgYF: "2e8b57", + sHshell: "fff5ee", + siFna: "a0522d", + silver: "c0c0c0", + skyXe: "87ceeb", + UXe: "6a5acd", + UWay: "708090", + UgYy: "708090", + snow: "fffafa", + sprRggYF: "ff7f", + stAlXe: "4682b4", + tan: "d2b48c", + teO: "8080", + tEstN: "d8bfd8", + tomato: "ff6347", + Qe: "40e0d0", + viTet: "ee82ee", + JHt: "f5deb3", + wEte: "ffffff", + wEtesmoke: "f5f5f5", + Lw: "ffff00", + LwgYF: "9acd32", + }; + let A; + function L(t) { + A || + ((A = (function () { + const t = {}, + e = Object.keys(T), + i = Object.keys(O); + let n, o, s, a, r; + for (n = 0; n < e.length; n++) { + for (a = r = e[n], o = 0; o < i.length; o++) + (s = i[o]), (r = r.replace(s, O[s])); + (s = parseInt(T[a], 16)), + (t[r] = [(s >> 16) & 255, (s >> 8) & 255, 255 & s]); + } + return t; + })()), + (A.transparent = [0, 0, 0, 0])); + const e = A[t.toLowerCase()]; + return e && { r: e[0], g: e[1], b: e[2], a: 4 === e.length ? e[3] : 255 }; + } + function R(t, e, i) { + if (t) { + let n = k(t); + (n[e] = Math.max(0, Math.min(n[e] + n[e] * i, 0 === e ? 360 : 1))), + (n = P(n)), + (t.r = n[0]), + (t.g = n[1]), + (t.b = n[2]); + } + } + function E(t, e) { + return t ? Object.assign(e || {}, t) : t; + } + function I(t) { + var e = { r: 0, g: 0, b: 0, a: 255 }; + return ( + Array.isArray(t) + ? t.length >= 3 && + ((e = { r: t[0], g: t[1], b: t[2], a: 255 }), + t.length > 3 && (e.a = m(t[3]))) + : ((e = E(t, { r: 0, g: 0, b: 0, a: 1 })).a = m(e.a)), + e + ); + } + function z(t) { + return "r" === t.charAt(0) + ? (function (t) { + const e = _.exec(t); + let i, + n, + o, + s = 255; + if (e) { + if (e[7] !== i) { + const t = +e[7]; + s = 255 & (e[8] ? p(t) : 255 * t); + } + return ( + (i = +e[1]), + (n = +e[3]), + (o = +e[5]), + (i = 255 & (e[2] ? p(i) : i)), + (n = 255 & (e[4] ? p(n) : n)), + (o = 255 & (e[6] ? p(o) : o)), + { r: i, g: n, b: o, a: s } + ); + } + })(t) + : C(t); + } + class F { + constructor(t) { + if (t instanceof F) return t; + const e = typeof t; + let i; + var n, o, s; + "object" === e + ? (i = I(t)) + : "string" === e && + ((s = (n = t).length), + "#" === n[0] && + (4 === s || 5 === s + ? (o = { + r: 255 & (17 * r[n[1]]), + g: 255 & (17 * r[n[2]]), + b: 255 & (17 * r[n[3]]), + a: 5 === s ? 17 * r[n[4]] : 255, + }) + : (7 !== s && 9 !== s) || + (o = { + r: (r[n[1]] << 4) | r[n[2]], + g: (r[n[3]] << 4) | r[n[4]], + b: (r[n[5]] << 4) | r[n[6]], + a: 9 === s ? (r[n[7]] << 4) | r[n[8]] : 255, + })), + (i = o || L(t) || z(t))), + (this._rgb = i), + (this._valid = !!i); + } + get valid() { + return this._valid; + } + get rgb() { + var t = E(this._rgb); + return t && (t.a = x(t.a)), t; + } + set rgb(t) { + this._rgb = I(t); + } + rgbString() { + return this._valid + ? (t = this._rgb) && + (t.a < 255 + ? `rgba(${t.r}, ${t.g}, ${t.b}, ${x(t.a)})` + : `rgb(${t.r}, ${t.g}, ${t.b})`) + : this._rgb; + var t; + } + hexString() { + return this._valid ? u(this._rgb) : this._rgb; + } + hslString() { + return this._valid + ? (function (t) { + if (!t) return; + const e = k(t), + i = e[0], + n = b(e[1]), + o = b(e[2]); + return t.a < 255 + ? `hsla(${i}, ${n}%, ${o}%, ${x(t.a)})` + : `hsl(${i}, ${n}%, ${o}%)`; + })(this._rgb) + : this._rgb; + } + mix(t, e) { + const i = this; + if (t) { + const n = i.rgb, + o = t.rgb; + let s; + const a = e === s ? 0.5 : e, + r = 2 * a - 1, + l = n.a - o.a, + c = ((r * l == -1 ? r : (r + l) / (1 + r * l)) + 1) / 2; + (s = 1 - c), + (n.r = 255 & (c * n.r + s * o.r + 0.5)), + (n.g = 255 & (c * n.g + s * o.g + 0.5)), + (n.b = 255 & (c * n.b + s * o.b + 0.5)), + (n.a = a * n.a + (1 - a) * o.a), + (i.rgb = n); + } + return i; + } + clone() { + return new F(this.rgb); + } + alpha(t) { + return (this._rgb.a = m(t)), this; + } + clearer(t) { + return (this._rgb.a *= 1 - t), this; + } + greyscale() { + const t = this._rgb, + e = f(0.3 * t.r + 0.59 * t.g + 0.11 * t.b); + return (t.r = t.g = t.b = e), this; + } + opaquer(t) { + return (this._rgb.a *= 1 + t), this; + } + negate() { + const t = this._rgb; + return (t.r = 255 - t.r), (t.g = 255 - t.g), (t.b = 255 - t.b), this; + } + lighten(t) { + return R(this._rgb, 2, t), this; + } + darken(t) { + return R(this._rgb, 2, -t), this; + } + saturate(t) { + return R(this._rgb, 1, t), this; + } + desaturate(t) { + return R(this._rgb, 1, -t), this; + } + rotate(t) { + return ( + (function (t, e) { + var i = k(t); + (i[0] = D(i[0] + e)), + (i = P(i)), + (t.r = i[0]), + (t.g = i[1]), + (t.b = i[2]); + })(this._rgb, t), + this + ); + } + } + function B(t) { + return new F(t); + } + const V = (t) => t instanceof CanvasGradient || t instanceof CanvasPattern; + function W(t) { + return V(t) ? t : B(t); + } + function N(t) { + return V(t) ? t : B(t).saturate(0.5).darken(0.1).hexString(); + } + function H() {} + const j = (function () { + let t = 0; + return function () { + return t++; + }; + })(); + function $(t) { + return null == t; + } + function Y(t) { + if (Array.isArray && Array.isArray(t)) return !0; + const e = Object.prototype.toString.call(t); + return "[object" === e.substr(0, 7) && "Array]" === e.substr(-6); + } + function U(t) { + return ( + null !== t && "[object Object]" === Object.prototype.toString.call(t) + ); + } + const X = (t) => + ("number" == typeof t || t instanceof Number) && isFinite(+t); + function q(t, e) { + return X(t) ? t : e; + } + function K(t, e) { + return void 0 === t ? e : t; + } + const G = (t, e) => + "string" == typeof t && t.endsWith("%") ? parseFloat(t) / 100 : t / e, + Z = (t, e) => + "string" == typeof t && t.endsWith("%") ? (parseFloat(t) / 100) * e : +t; + function Q(t, e, i) { + if (t && "function" == typeof t.call) return t.apply(i, e); + } + function J(t, e, i, n) { + let o, s, a; + if (Y(t)) + if (((s = t.length), n)) for (o = s - 1; o >= 0; o--) e.call(i, t[o], o); + else for (o = 0; o < s; o++) e.call(i, t[o], o); + else if (U(t)) + for (a = Object.keys(t), s = a.length, o = 0; o < s; o++) + e.call(i, t[a[o]], a[o]); + } + function tt(t, e) { + let i, n, o, s; + if (!t || !e || t.length !== e.length) return !1; + for (i = 0, n = t.length; i < n; ++i) + if ( + ((o = t[i]), + (s = e[i]), + o.datasetIndex !== s.datasetIndex || o.index !== s.index) + ) + return !1; + return !0; + } + function et(t) { + if (Y(t)) return t.map(et); + if (U(t)) { + const e = Object.create(null), + i = Object.keys(t), + n = i.length; + let o = 0; + for (; o < n; ++o) e[i[o]] = et(t[i[o]]); + return e; + } + return t; + } + function it(t) { + return -1 === ["__proto__", "prototype", "constructor"].indexOf(t); + } + function nt(t, e, i, n) { + if (!it(t)) return; + const o = e[t], + s = i[t]; + U(o) && U(s) ? ot(o, s, n) : (e[t] = et(s)); + } + function ot(t, e, i) { + const n = Y(e) ? e : [e], + o = n.length; + if (!U(t)) return t; + const s = (i = i || {}).merger || nt; + for (let a = 0; a < o; ++a) { + if (!U((e = n[a]))) continue; + const o = Object.keys(e); + for (let n = 0, a = o.length; n < a; ++n) s(o[n], t, e, i); + } + return t; + } + function st(t, e) { + return ot(t, e, { merger: at }); + } + function at(t, e, i) { + if (!it(t)) return; + const n = e[t], + o = i[t]; + U(n) && U(o) + ? st(n, o) + : Object.prototype.hasOwnProperty.call(e, t) || (e[t] = et(o)); + } + function rt(t, e) { + const i = t.indexOf(".", e); + return -1 === i ? t.length : i; + } + function lt(t, e) { + if ("" === e) return t; + let i = 0, + n = rt(e, i); + for (; t && n > i; ) + (t = t[e.substr(i, n - i)]), (i = n + 1), (n = rt(e, i)); + return t; + } + function ct(t) { + return t.charAt(0).toUpperCase() + t.slice(1); + } + const ht = (t) => void 0 !== t, + dt = (t) => "function" == typeof t, + ut = (t, e) => { + if (t.size !== e.size) return !1; + for (const i of t) if (!e.has(i)) return !1; + return !0; + }, + ft = Object.create(null), + gt = Object.create(null); + function pt(t, e) { + if (!e) return t; + const i = e.split("."); + for (let e = 0, n = i.length; e < n; ++e) { + const n = i[e]; + t = t[n] || (t[n] = Object.create(null)); + } + return t; + } + function mt(t, e, i) { + return "string" == typeof e ? ot(pt(t, e), i) : ot(pt(t, ""), e); + } + var xt = new (class { + constructor(t) { + (this.animation = void 0), + (this.backgroundColor = "rgba(0,0,0,0.1)"), + (this.borderColor = "rgba(0,0,0,0.1)"), + (this.color = "#666"), + (this.datasets = {}), + (this.devicePixelRatio = (t) => t.chart.platform.getDevicePixelRatio()), + (this.elements = {}), + (this.events = [ + "mousemove", + "mouseout", + "click", + "touchstart", + "touchmove", + ]), + (this.font = { + family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif", + size: 12, + style: "normal", + lineHeight: 1.2, + weight: null, + }), + (this.hover = {}), + (this.hoverBackgroundColor = (t, e) => N(e.backgroundColor)), + (this.hoverBorderColor = (t, e) => N(e.borderColor)), + (this.hoverColor = (t, e) => N(e.color)), + (this.indexAxis = "x"), + (this.interaction = { mode: "nearest", intersect: !0 }), + (this.maintainAspectRatio = !0), + (this.onHover = null), + (this.onClick = null), + (this.parsing = !0), + (this.plugins = {}), + (this.responsive = !0), + (this.scale = void 0), + (this.scales = {}), + (this.showLine = !0), + this.describe(t); + } + set(t, e) { + return mt(this, t, e); + } + get(t) { + return pt(this, t); + } + describe(t, e) { + return mt(gt, t, e); + } + override(t, e) { + return mt(ft, t, e); + } + route(t, e, i, n) { + const o = pt(this, t), + s = pt(this, i), + a = "_" + e; + Object.defineProperties(o, { + [a]: { value: o[e], writable: !0 }, + [e]: { + enumerable: !0, + get() { + const t = this[a], + e = s[n]; + return U(t) ? Object.assign({}, e, t) : K(t, e); + }, + set(t) { + this[a] = t; + }, + }, + }); + } + })({ + _scriptable: (t) => !t.startsWith("on"), + _indexable: (t) => "events" !== t, + hover: { _fallback: "interaction" }, + interaction: { _scriptable: !1, _indexable: !1 }, + }); + const bt = Math.PI, + _t = 2 * bt, + yt = _t + bt, + vt = Number.POSITIVE_INFINITY, + wt = bt / 180, + Mt = bt / 2, + kt = bt / 4, + St = (2 * bt) / 3, + Pt = Math.log10, + Dt = Math.sign; + function Ct(t) { + const e = Math.round(t); + t = At(t, e, t / 1e3) ? e : t; + const i = Math.pow(10, Math.floor(Pt(t))), + n = t / i; + return (n <= 1 ? 1 : n <= 2 ? 2 : n <= 5 ? 5 : 10) * i; + } + function Ot(t) { + const e = [], + i = Math.sqrt(t); + let n; + for (n = 1; n < i; n++) t % n == 0 && (e.push(n), e.push(t / n)); + return i === (0 | i) && e.push(i), e.sort((t, e) => t - e).pop(), e; + } + function Tt(t) { + return !isNaN(parseFloat(t)) && isFinite(t); + } + function At(t, e, i) { + return Math.abs(t - e) < i; + } + function Lt(t, e) { + const i = Math.round(t); + return i - e <= t && i + e >= t; + } + function Rt(t, e, i) { + let n, o, s; + for (n = 0, o = t.length; n < o; n++) + (s = t[n][i]), + isNaN(s) || + ((e.min = Math.min(e.min, s)), (e.max = Math.max(e.max, s))); + } + function Et(t) { + return t * (bt / 180); + } + function It(t) { + return t * (180 / bt); + } + function zt(t) { + if (!X(t)) return; + let e = 1, + i = 0; + for (; Math.round(t * e) / e !== t; ) (e *= 10), i++; + return i; + } + function Ft(t, e) { + const i = e.x - t.x, + n = e.y - t.y, + o = Math.sqrt(i * i + n * n); + let s = Math.atan2(n, i); + return s < -0.5 * bt && (s += _t), { angle: s, distance: o }; + } + function Bt(t, e) { + return Math.sqrt(Math.pow(e.x - t.x, 2) + Math.pow(e.y - t.y, 2)); + } + function Vt(t, e) { + return ((t - e + yt) % _t) - bt; + } + function Wt(t) { + return ((t % _t) + _t) % _t; + } + function Nt(t, e, i, n) { + const o = Wt(t), + s = Wt(e), + a = Wt(i), + r = Wt(s - o), + l = Wt(a - o), + c = Wt(o - s), + h = Wt(o - a); + return o === s || o === a || (n && s === a) || (r > l && c < h); + } + function Ht(t, e, i) { + return Math.max(e, Math.min(i, t)); + } + function jt(t) { + return Ht(t, -32768, 32767); + } + function $t(t) { + return !t || $(t.size) || $(t.family) + ? null + : (t.style ? t.style + " " : "") + + (t.weight ? t.weight + " " : "") + + t.size + + "px " + + t.family; + } + function Yt(t, e, i, n, o) { + let s = e[o]; + return ( + s || ((s = e[o] = t.measureText(o).width), i.push(o)), s > n && (n = s), n + ); + } + function Ut(t, e, i, n) { + let o = ((n = n || {}).data = n.data || {}), + s = (n.garbageCollect = n.garbageCollect || []); + n.font !== e && + ((o = n.data = {}), (s = n.garbageCollect = []), (n.font = e)), + t.save(), + (t.font = e); + let a = 0; + const r = i.length; + let l, c, h, d, u; + for (l = 0; l < r; l++) + if (((d = i[l]), null != d && !0 !== Y(d))) a = Yt(t, o, s, a, d); + else if (Y(d)) + for (c = 0, h = d.length; c < h; c++) + (u = d[c]), null == u || Y(u) || (a = Yt(t, o, s, a, u)); + t.restore(); + const f = s.length / 2; + if (f > i.length) { + for (l = 0; l < f; l++) delete o[s[l]]; + s.splice(0, f); + } + return a; + } + function Xt(t, e, i) { + const n = t.currentDevicePixelRatio, + o = 0 !== i ? Math.max(i / 2, 0.5) : 0; + return Math.round((e - o) * n) / n + o; + } + function qt(t, e) { + (e = e || t.getContext("2d")).save(), + e.resetTransform(), + e.clearRect(0, 0, t.width, t.height), + e.restore(); + } + function Kt(t, e, i, n) { + let o, s, a, r, l; + const c = e.pointStyle, + h = e.rotation, + d = e.radius; + let u = (h || 0) * wt; + if ( + c && + "object" == typeof c && + ((o = c.toString()), + "[object HTMLImageElement]" === o || "[object HTMLCanvasElement]" === o) + ) + return ( + t.save(), + t.translate(i, n), + t.rotate(u), + t.drawImage(c, -c.width / 2, -c.height / 2, c.width, c.height), + void t.restore() + ); + if (!(isNaN(d) || d <= 0)) { + switch ((t.beginPath(), c)) { + default: + t.arc(i, n, d, 0, _t), t.closePath(); + break; + case "triangle": + t.moveTo(i + Math.sin(u) * d, n - Math.cos(u) * d), + (u += St), + t.lineTo(i + Math.sin(u) * d, n - Math.cos(u) * d), + (u += St), + t.lineTo(i + Math.sin(u) * d, n - Math.cos(u) * d), + t.closePath(); + break; + case "rectRounded": + (l = 0.516 * d), + (r = d - l), + (s = Math.cos(u + kt) * r), + (a = Math.sin(u + kt) * r), + t.arc(i - s, n - a, l, u - bt, u - Mt), + t.arc(i + a, n - s, l, u - Mt, u), + t.arc(i + s, n + a, l, u, u + Mt), + t.arc(i - a, n + s, l, u + Mt, u + bt), + t.closePath(); + break; + case "rect": + if (!h) { + (r = Math.SQRT1_2 * d), t.rect(i - r, n - r, 2 * r, 2 * r); + break; + } + u += kt; + case "rectRot": + (s = Math.cos(u) * d), + (a = Math.sin(u) * d), + t.moveTo(i - s, n - a), + t.lineTo(i + a, n - s), + t.lineTo(i + s, n + a), + t.lineTo(i - a, n + s), + t.closePath(); + break; + case "crossRot": + u += kt; + case "cross": + (s = Math.cos(u) * d), + (a = Math.sin(u) * d), + t.moveTo(i - s, n - a), + t.lineTo(i + s, n + a), + t.moveTo(i + a, n - s), + t.lineTo(i - a, n + s); + break; + case "star": + (s = Math.cos(u) * d), + (a = Math.sin(u) * d), + t.moveTo(i - s, n - a), + t.lineTo(i + s, n + a), + t.moveTo(i + a, n - s), + t.lineTo(i - a, n + s), + (u += kt), + (s = Math.cos(u) * d), + (a = Math.sin(u) * d), + t.moveTo(i - s, n - a), + t.lineTo(i + s, n + a), + t.moveTo(i + a, n - s), + t.lineTo(i - a, n + s); + break; + case "line": + (s = Math.cos(u) * d), + (a = Math.sin(u) * d), + t.moveTo(i - s, n - a), + t.lineTo(i + s, n + a); + break; + case "dash": + t.moveTo(i, n), t.lineTo(i + Math.cos(u) * d, n + Math.sin(u) * d); + } + t.fill(), e.borderWidth > 0 && t.stroke(); + } + } + function Gt(t, e, i) { + return ( + (i = i || 0.5), + !e || + (t && + t.x > e.left - i && + t.x < e.right + i && + t.y > e.top - i && + t.y < e.bottom + i) + ); + } + function Zt(t, e) { + t.save(), + t.beginPath(), + t.rect(e.left, e.top, e.right - e.left, e.bottom - e.top), + t.clip(); + } + function Qt(t) { + t.restore(); + } + function Jt(t, e, i, n, o) { + if (!e) return t.lineTo(i.x, i.y); + if ("middle" === o) { + const n = (e.x + i.x) / 2; + t.lineTo(n, e.y), t.lineTo(n, i.y); + } else ("after" === o) != !!n ? t.lineTo(e.x, i.y) : t.lineTo(i.x, e.y); + t.lineTo(i.x, i.y); + } + function te(t, e, i, n) { + if (!e) return t.lineTo(i.x, i.y); + t.bezierCurveTo( + n ? e.cp1x : e.cp2x, + n ? e.cp1y : e.cp2y, + n ? i.cp2x : i.cp1x, + n ? i.cp2y : i.cp1y, + i.x, + i.y + ); + } + function ee(t, e, i, n, o, s = {}) { + const a = Y(e) ? e : [e], + r = s.strokeWidth > 0 && "" !== s.strokeColor; + let l, c; + for ( + t.save(), + t.font = o.string, + (function (t, e) { + e.translation && t.translate(e.translation[0], e.translation[1]); + $(e.rotation) || t.rotate(e.rotation); + e.color && (t.fillStyle = e.color); + e.textAlign && (t.textAlign = e.textAlign); + e.textBaseline && (t.textBaseline = e.textBaseline); + })(t, s), + l = 0; + l < a.length; + ++l + ) + (c = a[l]), + r && + (s.strokeColor && (t.strokeStyle = s.strokeColor), + $(s.strokeWidth) || (t.lineWidth = s.strokeWidth), + t.strokeText(c, i, n, s.maxWidth)), + t.fillText(c, i, n, s.maxWidth), + ie(t, i, n, c, s), + (n += o.lineHeight); + t.restore(); + } + function ie(t, e, i, n, o) { + if (o.strikethrough || o.underline) { + const s = t.measureText(n), + a = e - s.actualBoundingBoxLeft, + r = e + s.actualBoundingBoxRight, + l = i - s.actualBoundingBoxAscent, + c = i + s.actualBoundingBoxDescent, + h = o.strikethrough ? (l + c) / 2 : c; + (t.strokeStyle = t.fillStyle), + t.beginPath(), + (t.lineWidth = o.decorationWidth || 2), + t.moveTo(a, h), + t.lineTo(r, h), + t.stroke(); + } + } + function ne(t, e) { + const { x: i, y: n, w: o, h: s, radius: a } = e; + t.arc(i + a.topLeft, n + a.topLeft, a.topLeft, -Mt, bt, !0), + t.lineTo(i, n + s - a.bottomLeft), + t.arc(i + a.bottomLeft, n + s - a.bottomLeft, a.bottomLeft, bt, Mt, !0), + t.lineTo(i + o - a.bottomRight, n + s), + t.arc( + i + o - a.bottomRight, + n + s - a.bottomRight, + a.bottomRight, + Mt, + 0, + !0 + ), + t.lineTo(i + o, n + a.topRight), + t.arc(i + o - a.topRight, n + a.topRight, a.topRight, 0, -Mt, !0), + t.lineTo(i + a.topLeft, n); + } + function oe(t, e, i) { + i = i || ((i) => t[i] < e); + let n, + o = t.length - 1, + s = 0; + for (; o - s > 1; ) (n = (s + o) >> 1), i(n) ? (s = n) : (o = n); + return { lo: s, hi: o }; + } + const se = (t, e, i) => oe(t, i, (n) => t[n][e] < i), + ae = (t, e, i) => oe(t, i, (n) => t[n][e] >= i); + function re(t, e, i) { + let n = 0, + o = t.length; + for (; n < o && t[n] < e; ) n++; + for (; o > n && t[o - 1] > i; ) o--; + return n > 0 || o < t.length ? t.slice(n, o) : t; + } + const le = ["push", "pop", "shift", "splice", "unshift"]; + function ce(t, e) { + t._chartjs + ? t._chartjs.listeners.push(e) + : (Object.defineProperty(t, "_chartjs", { + configurable: !0, + enumerable: !1, + value: { listeners: [e] }, + }), + le.forEach((e) => { + const i = "_onData" + ct(e), + n = t[e]; + Object.defineProperty(t, e, { + configurable: !0, + enumerable: !1, + value(...e) { + const o = n.apply(this, e); + return ( + t._chartjs.listeners.forEach((t) => { + "function" == typeof t[i] && t[i](...e); + }), + o + ); + }, + }); + })); + } + function he(t, e) { + const i = t._chartjs; + if (!i) return; + const n = i.listeners, + o = n.indexOf(e); + -1 !== o && n.splice(o, 1), + n.length > 0 || + (le.forEach((e) => { + delete t[e]; + }), + delete t._chartjs); + } + function de(t) { + const e = new Set(); + let i, n; + for (i = 0, n = t.length; i < n; ++i) e.add(t[i]); + return e.size === n ? t : Array.from(e); + } + function ue() { + return "undefined" != typeof window && "undefined" != typeof document; + } + function fe(t) { + let e = t.parentNode; + return e && "[object ShadowRoot]" === e.toString() && (e = e.host), e; + } + function ge(t, e, i) { + let n; + return ( + "string" == typeof t + ? ((n = parseInt(t, 10)), + -1 !== t.indexOf("%") && (n = (n / 100) * e.parentNode[i])) + : (n = t), + n + ); + } + const pe = (t) => window.getComputedStyle(t, null); + function me(t, e) { + return pe(t).getPropertyValue(e); + } + const xe = ["top", "right", "bottom", "left"]; + function be(t, e, i) { + const n = {}; + i = i ? "-" + i : ""; + for (let o = 0; o < 4; o++) { + const s = xe[o]; + n[s] = parseFloat(t[e + "-" + s + i]) || 0; + } + return (n.width = n.left + n.right), (n.height = n.top + n.bottom), n; + } + function _e(t, e) { + const { canvas: i, currentDevicePixelRatio: n } = e, + o = pe(i), + s = "border-box" === o.boxSizing, + a = be(o, "padding"), + r = be(o, "border", "width"), + { + x: l, + y: c, + box: h, + } = (function (t, e) { + const i = t.native || t, + n = i.touches, + o = n && n.length ? n[0] : i, + { offsetX: s, offsetY: a } = o; + let r, + l, + c = !1; + if ( + ((t, e, i) => (t > 0 || e > 0) && (!i || !i.shadowRoot))( + s, + a, + i.target + ) + ) + (r = s), (l = a); + else { + const t = e.getBoundingClientRect(); + (r = o.clientX - t.left), (l = o.clientY - t.top), (c = !0); + } + return { x: r, y: l, box: c }; + })(t, i), + d = a.left + (h && r.left), + u = a.top + (h && r.top); + let { width: f, height: g } = e; + return ( + s && ((f -= a.width + r.width), (g -= a.height + r.height)), + { + x: Math.round((((l - d) / f) * i.width) / n), + y: Math.round((((c - u) / g) * i.height) / n), + } + ); + } + const ye = (t) => Math.round(10 * t) / 10; + function ve(t, e, i, n) { + const o = pe(t), + s = be(o, "margin"), + a = ge(o.maxWidth, t, "clientWidth") || vt, + r = ge(o.maxHeight, t, "clientHeight") || vt, + l = (function (t, e, i) { + let n, o; + if (void 0 === e || void 0 === i) { + const s = fe(t); + if (s) { + const t = s.getBoundingClientRect(), + a = pe(s), + r = be(a, "border", "width"), + l = be(a, "padding"); + (e = t.width - l.width - r.width), + (i = t.height - l.height - r.height), + (n = ge(a.maxWidth, s, "clientWidth")), + (o = ge(a.maxHeight, s, "clientHeight")); + } else (e = t.clientWidth), (i = t.clientHeight); + } + return { width: e, height: i, maxWidth: n || vt, maxHeight: o || vt }; + })(t, e, i); + let { width: c, height: h } = l; + if ("content-box" === o.boxSizing) { + const t = be(o, "border", "width"), + e = be(o, "padding"); + (c -= e.width + t.width), (h -= e.height + t.height); + } + return ( + (c = Math.max(0, c - s.width)), + (h = Math.max(0, n ? Math.floor(c / n) : h - s.height)), + (c = ye(Math.min(c, a, l.maxWidth))), + (h = ye(Math.min(h, r, l.maxHeight))), + c && !h && (h = ye(c / 2)), + { width: c, height: h } + ); + } + function we(t, e, i) { + const n = e || 1, + o = Math.floor(t.height * n), + s = Math.floor(t.width * n); + (t.height = o / n), (t.width = s / n); + const a = t.canvas; + return ( + a.style && + (i || (!a.style.height && !a.style.width)) && + ((a.style.height = `${t.height}px`), (a.style.width = `${t.width}px`)), + (t.currentDevicePixelRatio !== n || a.height !== o || a.width !== s) && + ((t.currentDevicePixelRatio = n), + (a.height = o), + (a.width = s), + t.ctx.setTransform(n, 0, 0, n, 0, 0), + !0) + ); + } + const Me = (function () { + let t = !1; + try { + const e = { + get passive() { + return (t = !0), !1; + }, + }; + window.addEventListener("test", null, e), + window.removeEventListener("test", null, e); + } catch (t) {} + return t; + })(); + function ke(t, e) { + const i = me(t, e), + n = i && i.match(/^(\d+)(\.\d+)?px$/); + return n ? +n[1] : void 0; + } + function Se(t, e) { + return "native" in t ? { x: t.x, y: t.y } : _e(t, e); + } + function Pe(t, e, i, n) { + const { controller: o, data: s, _sorted: a } = t, + r = o._cachedMeta.iScale; + if (r && e === r.axis && a && s.length) { + const t = r._reversePixels ? ae : se; + if (!n) return t(s, e, i); + if (o._sharedOptions) { + const n = s[0], + o = "function" == typeof n.getRange && n.getRange(e); + if (o) { + const n = t(s, e, i - o), + a = t(s, e, i + o); + return { lo: n.lo, hi: a.hi }; + } + } + } + return { lo: 0, hi: s.length - 1 }; + } + function De(t, e, i, n, o) { + const s = t.getSortedVisibleDatasetMetas(), + a = i[e]; + for (let t = 0, i = s.length; t < i; ++t) { + const { index: i, data: r } = s[t], + { lo: l, hi: c } = Pe(s[t], e, a, o); + for (let t = l; t <= c; ++t) { + const e = r[t]; + e.skip || n(e, i, t); + } + } + } + function Ce(t, e, i, n) { + const o = []; + if (!Gt(e, t.chartArea, t._minPadding)) return o; + return ( + De( + t, + i, + e, + function (t, i, s) { + t.inRange(e.x, e.y, n) && + o.push({ element: t, datasetIndex: i, index: s }); + }, + !0 + ), + o + ); + } + function Oe(t, e, i, n, o) { + const s = (function (t) { + const e = -1 !== t.indexOf("x"), + i = -1 !== t.indexOf("y"); + return function (t, n) { + const o = e ? Math.abs(t.x - n.x) : 0, + s = i ? Math.abs(t.y - n.y) : 0; + return Math.sqrt(Math.pow(o, 2) + Math.pow(s, 2)); + }; + })(i); + let a = Number.POSITIVE_INFINITY, + r = []; + if (!Gt(e, t.chartArea, t._minPadding)) return r; + return ( + De(t, i, e, function (i, l, c) { + if (n && !i.inRange(e.x, e.y, o)) return; + const h = i.getCenterPoint(o); + if (!Gt(h, t.chartArea, t._minPadding) && !i.inRange(e.x, e.y, o)) + return; + const d = s(e, h); + d < a + ? ((r = [{ element: i, datasetIndex: l, index: c }]), (a = d)) + : d === a && r.push({ element: i, datasetIndex: l, index: c }); + }), + r + ); + } + function Te(t, e, i, n) { + const o = Se(e, t), + s = [], + a = i.axis, + r = "x" === a ? "inXRange" : "inYRange"; + let l = !1; + return ( + (function (t, e) { + const i = t.getSortedVisibleDatasetMetas(); + let n, o, s; + for (let t = 0, a = i.length; t < a; ++t) { + ({ index: n, data: o } = i[t]); + for (let t = 0, i = o.length; t < i; ++t) + (s = o[t]), s.skip || e(s, n, t); + } + })(t, (t, e, i) => { + t[r](o[a], n) && s.push({ element: t, datasetIndex: e, index: i }), + t.inRange(o.x, o.y, n) && (l = !0); + }), + i.intersect && !l ? [] : s + ); + } + var Ae = { + modes: { + index(t, e, i, n) { + const o = Se(e, t), + s = i.axis || "x", + a = i.intersect ? Ce(t, o, s, n) : Oe(t, o, s, !1, n), + r = []; + return a.length + ? (t.getSortedVisibleDatasetMetas().forEach((t) => { + const e = a[0].index, + i = t.data[e]; + i && + !i.skip && + r.push({ element: i, datasetIndex: t.index, index: e }); + }), + r) + : []; + }, + dataset(t, e, i, n) { + const o = Se(e, t), + s = i.axis || "xy"; + let a = i.intersect ? Ce(t, o, s, n) : Oe(t, o, s, !1, n); + if (a.length > 0) { + const e = a[0].datasetIndex, + i = t.getDatasetMeta(e).data; + a = []; + for (let t = 0; t < i.length; ++t) + a.push({ element: i[t], datasetIndex: e, index: t }); + } + return a; + }, + point: (t, e, i, n) => Ce(t, Se(e, t), i.axis || "xy", n), + nearest: (t, e, i, n) => Oe(t, Se(e, t), i.axis || "xy", i.intersect, n), + x: (t, e, i, n) => ((i.axis = "x"), Te(t, e, i, n)), + y: (t, e, i, n) => ((i.axis = "y"), Te(t, e, i, n)), + }, + }; + const Le = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/), + Re = new RegExp( + /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/ + ); + function Ee(t, e) { + const i = ("" + t).match(Le); + if (!i || "normal" === i[1]) return 1.2 * e; + switch (((t = +i[2]), i[3])) { + case "px": + return t; + case "%": + t /= 100; + } + return e * t; + } + function Ie(t, e) { + const i = {}, + n = U(e), + o = n ? Object.keys(e) : e, + s = U(t) ? (n ? (i) => K(t[i], t[e[i]]) : (e) => t[e]) : () => t; + for (const t of o) i[t] = +s(t) || 0; + return i; + } + function ze(t) { + return Ie(t, { top: "y", right: "x", bottom: "y", left: "x" }); + } + function Fe(t) { + return Ie(t, ["topLeft", "topRight", "bottomLeft", "bottomRight"]); + } + function Be(t) { + const e = ze(t); + return (e.width = e.left + e.right), (e.height = e.top + e.bottom), e; + } + function Ve(t, e) { + (t = t || {}), (e = e || xt.font); + let i = K(t.size, e.size); + "string" == typeof i && (i = parseInt(i, 10)); + let n = K(t.style, e.style); + n && + !("" + n).match(Re) && + (console.warn('Invalid font style specified: "' + n + '"'), (n = "")); + const o = { + family: K(t.family, e.family), + lineHeight: Ee(K(t.lineHeight, e.lineHeight), i), + size: i, + style: n, + weight: K(t.weight, e.weight), + string: "", + }; + return (o.string = $t(o)), o; + } + function We(t, e, i, n) { + let o, + s, + a, + r = !0; + for (o = 0, s = t.length; o < s; ++o) + if ( + ((a = t[o]), + void 0 !== a && + (void 0 !== e && "function" == typeof a && ((a = a(e)), (r = !1)), + void 0 !== i && Y(a) && ((a = a[i % a.length]), (r = !1)), + void 0 !== a)) + ) + return n && !r && (n.cacheable = !1), a; + } + function Ne(t, e) { + const { min: i, max: n } = t; + return { min: i - Math.abs(Z(e, i)), max: n + Z(e, n) }; + } + const He = ["left", "top", "right", "bottom"]; + function je(t, e) { + return t.filter((t) => t.pos === e); + } + function $e(t, e) { + return t.filter((t) => -1 === He.indexOf(t.pos) && t.box.axis === e); + } + function Ye(t, e) { + return t.sort((t, i) => { + const n = e ? i : t, + o = e ? t : i; + return n.weight === o.weight ? n.index - o.index : n.weight - o.weight; + }); + } + function Ue(t, e) { + const i = (function (t) { + const e = {}; + for (const i of t) { + const { stack: t, pos: n, stackWeight: o } = i; + if (!t || !He.includes(n)) continue; + const s = + e[t] || (e[t] = { count: 0, placed: 0, weight: 0, size: 0 }); + s.count++, (s.weight += o); + } + return e; + })(t), + { vBoxMaxWidth: n, hBoxMaxHeight: o } = e; + let s, a, r; + for (s = 0, a = t.length; s < a; ++s) { + r = t[s]; + const { fullSize: a } = r.box, + l = i[r.stack], + c = l && r.stackWeight / l.weight; + r.horizontal + ? ((r.width = c ? c * n : a && e.availableWidth), (r.height = o)) + : ((r.width = n), (r.height = c ? c * o : a && e.availableHeight)); + } + return i; + } + function Xe(t, e, i, n) { + return Math.max(t[i], e[i]) + Math.max(t[n], e[n]); + } + function qe(t, e) { + (t.top = Math.max(t.top, e.top)), + (t.left = Math.max(t.left, e.left)), + (t.bottom = Math.max(t.bottom, e.bottom)), + (t.right = Math.max(t.right, e.right)); + } + function Ke(t, e, i, n) { + const { pos: o, box: s } = i, + a = t.maxPadding; + if (!U(o)) { + i.size && (t[o] -= i.size); + const e = n[i.stack] || { size: 0, count: 1 }; + (e.size = Math.max(e.size, i.horizontal ? s.height : s.width)), + (i.size = e.size / e.count), + (t[o] += i.size); + } + s.getPadding && qe(a, s.getPadding()); + const r = Math.max(0, e.outerWidth - Xe(a, t, "left", "right")), + l = Math.max(0, e.outerHeight - Xe(a, t, "top", "bottom")), + c = r !== t.w, + h = l !== t.h; + return ( + (t.w = r), + (t.h = l), + i.horizontal ? { same: c, other: h } : { same: h, other: c } + ); + } + function Ge(t, e) { + const i = e.maxPadding; + function n(t) { + const n = { left: 0, top: 0, right: 0, bottom: 0 }; + return ( + t.forEach((t) => { + n[t] = Math.max(e[t], i[t]); + }), + n + ); + } + return n(t ? ["left", "right"] : ["top", "bottom"]); + } + function Ze(t, e, i, n) { + const o = []; + let s, a, r, l, c, h; + for (s = 0, a = t.length, c = 0; s < a; ++s) { + (r = t[s]), + (l = r.box), + l.update(r.width || e.w, r.height || e.h, Ge(r.horizontal, e)); + const { same: a, other: d } = Ke(e, i, r, n); + (c |= a && o.length), (h = h || d), l.fullSize || o.push(r); + } + return (c && Ze(o, e, i, n)) || h; + } + function Qe(t, e, i, n, o) { + (t.top = i), + (t.left = e), + (t.right = e + n), + (t.bottom = i + o), + (t.width = n), + (t.height = o); + } + function Je(t, e, i, n) { + const o = i.padding; + let { x: s, y: a } = e; + for (const r of t) { + const t = r.box, + l = n[r.stack] || { count: 1, placed: 0, weight: 1 }, + c = r.stackWeight / l.weight || 1; + if (r.horizontal) { + const n = e.w * c, + s = l.size || t.height; + ht(l.start) && (a = l.start), + t.fullSize + ? Qe(t, o.left, a, i.outerWidth - o.right - o.left, s) + : Qe(t, e.left + l.placed, a, n, s), + (l.start = a), + (l.placed += n), + (a = t.bottom); + } else { + const n = e.h * c, + a = l.size || t.width; + ht(l.start) && (s = l.start), + t.fullSize + ? Qe(t, s, o.top, a, i.outerHeight - o.bottom - o.top) + : Qe(t, s, e.top + l.placed, a, n), + (l.start = s), + (l.placed += n), + (s = t.right); + } + } + (e.x = s), (e.y = a); + } + xt.set("layout", { padding: { top: 0, right: 0, bottom: 0, left: 0 } }); + var ti = { + addBox(t, e) { + t.boxes || (t.boxes = []), + (e.fullSize = e.fullSize || !1), + (e.position = e.position || "top"), + (e.weight = e.weight || 0), + (e._layers = + e._layers || + function () { + return [ + { + z: 0, + draw(t) { + e.draw(t); + }, + }, + ]; + }), + t.boxes.push(e); + }, + removeBox(t, e) { + const i = t.boxes ? t.boxes.indexOf(e) : -1; + -1 !== i && t.boxes.splice(i, 1); + }, + configure(t, e, i) { + (e.fullSize = i.fullSize), + (e.position = i.position), + (e.weight = i.weight); + }, + update(t, e, i, n) { + if (!t) return; + const o = Be(t.options.layout.padding), + s = Math.max(e - o.width, 0), + a = Math.max(i - o.height, 0), + r = (function (t) { + const e = (function (t) { + const e = []; + let i, n, o, s, a, r; + for (i = 0, n = (t || []).length; i < n; ++i) + (o = t[i]), + ({ + position: s, + options: { stack: a, stackWeight: r = 1 }, + } = o), + e.push({ + index: i, + box: o, + pos: s, + horizontal: o.isHorizontal(), + weight: o.weight, + stack: a && s + a, + stackWeight: r, + }); + return e; + })(t), + i = Ye( + e.filter((t) => t.box.fullSize), + !0 + ), + n = Ye(je(e, "left"), !0), + o = Ye(je(e, "right")), + s = Ye(je(e, "top"), !0), + a = Ye(je(e, "bottom")), + r = $e(e, "x"), + l = $e(e, "y"); + return { + fullSize: i, + leftAndTop: n.concat(s), + rightAndBottom: o.concat(l).concat(a).concat(r), + chartArea: je(e, "chartArea"), + vertical: n.concat(o).concat(l), + horizontal: s.concat(a).concat(r), + }; + })(t.boxes), + l = r.vertical, + c = r.horizontal; + J(t.boxes, (t) => { + "function" == typeof t.beforeLayout && t.beforeLayout(); + }); + const h = + l.reduce( + (t, e) => + e.box.options && !1 === e.box.options.display ? t : t + 1, + 0 + ) || 1, + d = Object.freeze({ + outerWidth: e, + outerHeight: i, + padding: o, + availableWidth: s, + availableHeight: a, + vBoxMaxWidth: s / 2 / h, + hBoxMaxHeight: a / 2, + }), + u = Object.assign({}, o); + qe(u, Be(n)); + const f = Object.assign( + { maxPadding: u, w: s, h: a, x: o.left, y: o.top }, + o + ), + g = Ue(l.concat(c), d); + Ze(r.fullSize, f, d, g), + Ze(l, f, d, g), + Ze(c, f, d, g) && Ze(l, f, d, g), + (function (t) { + const e = t.maxPadding; + function i(i) { + const n = Math.max(e[i] - t[i], 0); + return (t[i] += n), n; + } + (t.y += i("top")), (t.x += i("left")), i("right"), i("bottom"); + })(f), + Je(r.leftAndTop, f, d, g), + (f.x += f.w), + (f.y += f.h), + Je(r.rightAndBottom, f, d, g), + (t.chartArea = { + left: f.left, + top: f.top, + right: f.left + f.w, + bottom: f.top + f.h, + height: f.h, + width: f.w, + }), + J(r.chartArea, (e) => { + const i = e.box; + Object.assign(i, t.chartArea), i.update(f.w, f.h); + }); + }, + }; + function ei(t, e = [""], i = t, n, o = () => t[0]) { + ht(n) || (n = ui("_fallback", t)); + const s = { + [Symbol.toStringTag]: "Object", + _cacheable: !0, + _scopes: t, + _rootScopes: i, + _fallback: n, + _getTarget: o, + override: (o) => ei([o, ...t], e, i, n), + }; + return new Proxy(s, { + deleteProperty: (e, i) => ( + delete e[i], delete e._keys, delete t[0][i], !0 + ), + get: (i, n) => + ai(i, n, () => + (function (t, e, i, n) { + let o; + for (const s of e) + if (((o = ui(oi(s, t), i)), ht(o))) + return si(t, o) ? hi(i, n, t, o) : o; + })(n, e, t, i) + ), + getOwnPropertyDescriptor: (t, e) => + Reflect.getOwnPropertyDescriptor(t._scopes[0], e), + getPrototypeOf: () => Reflect.getPrototypeOf(t[0]), + has: (t, e) => fi(t).includes(e), + ownKeys: (t) => fi(t), + set: (t, e, i) => ( + ((t._storage || (t._storage = o()))[e] = i), + delete t[e], + delete t._keys, + !0 + ), + }); + } + function ii(t, e, i, n) { + const o = { + _cacheable: !1, + _proxy: t, + _context: e, + _subProxy: i, + _stack: new Set(), + _descriptors: ni(t, n), + setContext: (e) => ii(t, e, i, n), + override: (o) => ii(t.override(o), e, i, n), + }; + return new Proxy(o, { + deleteProperty: (e, i) => (delete e[i], delete t[i], !0), + get: (t, e, i) => + ai(t, e, () => + (function (t, e, i) { + const { _proxy: n, _context: o, _subProxy: s, _descriptors: a } = t; + let r = n[e]; + dt(r) && + a.isScriptable(e) && + (r = (function (t, e, i, n) { + const { _proxy: o, _context: s, _subProxy: a, _stack: r } = i; + if (r.has(t)) + throw new Error( + "Recursion detected: " + Array.from(r).join("->") + "->" + t + ); + r.add(t), + (e = e(s, a || n)), + r.delete(t), + U(e) && (e = hi(o._scopes, o, t, e)); + return e; + })(e, r, t, i)); + Y(r) && + r.length && + (r = (function (t, e, i, n) { + const { + _proxy: o, + _context: s, + _subProxy: a, + _descriptors: r, + } = i; + if (ht(s.index) && n(t)) e = e[s.index % e.length]; + else if (U(e[0])) { + const i = e, + n = o._scopes.filter((t) => t !== i); + e = []; + for (const l of i) { + const i = hi(n, o, t, l); + e.push(ii(i, s, a && a[t], r)); + } + } + return e; + })(e, r, t, a.isIndexable)); + si(e, r) && (r = ii(r, o, s && s[e], a)); + return r; + })(t, e, i) + ), + getOwnPropertyDescriptor: (e, i) => + e._descriptors.allKeys + ? Reflect.has(t, i) + ? { enumerable: !0, configurable: !0 } + : void 0 + : Reflect.getOwnPropertyDescriptor(t, i), + getPrototypeOf: () => Reflect.getPrototypeOf(t), + has: (e, i) => Reflect.has(t, i), + ownKeys: () => Reflect.ownKeys(t), + set: (e, i, n) => ((t[i] = n), delete e[i], !0), + }); + } + function ni(t, e = { scriptable: !0, indexable: !0 }) { + const { + _scriptable: i = e.scriptable, + _indexable: n = e.indexable, + _allKeys: o = e.allKeys, + } = t; + return { + allKeys: o, + scriptable: i, + indexable: n, + isScriptable: dt(i) ? i : () => i, + isIndexable: dt(n) ? n : () => n, + }; + } + const oi = (t, e) => (t ? t + ct(e) : e), + si = (t, e) => U(e) && "adapters" !== t; + function ai(t, e, i) { + let n = t[e]; + return ht(n) || ((n = i()), ht(n) && (t[e] = n)), n; + } + function ri(t, e, i) { + return dt(t) ? t(e, i) : t; + } + const li = (t, e) => + !0 === t ? e : "string" == typeof t ? lt(e, t) : void 0; + function ci(t, e, i, n) { + for (const o of e) { + const e = li(i, o); + if (e) { + t.add(e); + const o = ri(e._fallback, i, e); + if (ht(o) && o !== i && o !== n) return o; + } else if (!1 === e && ht(n) && i !== n) return null; + } + return !1; + } + function hi(t, e, i, n) { + const o = e._rootScopes, + s = ri(e._fallback, i, n), + a = [...t, ...o], + r = new Set(); + r.add(n); + let l = di(r, a, i, s || i); + return ( + null !== l && + (!ht(s) || s === i || ((l = di(r, a, s, l)), null !== l)) && + ei(Array.from(r), [""], o, s, () => + (function (t, e, i) { + const n = t._getTarget(); + e in n || (n[e] = {}); + const o = n[e]; + if (Y(o) && U(i)) return i; + return o; + })(e, i, n) + ) + ); + } + function di(t, e, i, n) { + for (; i; ) i = ci(t, e, i, n); + return i; + } + function ui(t, e) { + for (const i of e) { + if (!i) continue; + const e = i[t]; + if (ht(e)) return e; + } + } + function fi(t) { + let e = t._keys; + return ( + e || + (e = t._keys = + (function (t) { + const e = new Set(); + for (const i of t) + for (const t of Object.keys(i).filter((t) => !t.startsWith("_"))) + e.add(t); + return Array.from(e); + })(t._scopes)), + e + ); + } + const gi = Number.EPSILON || 1e-14, + pi = (t, e) => e < t.length && !t[e].skip && t[e], + mi = (t) => ("x" === t ? "y" : "x"); + function xi(t, e, i, n) { + const o = t.skip ? e : t, + s = e, + a = i.skip ? e : i, + r = Bt(s, o), + l = Bt(a, s); + let c = r / (r + l), + h = l / (r + l); + (c = isNaN(c) ? 0 : c), (h = isNaN(h) ? 0 : h); + const d = n * c, + u = n * h; + return { + previous: { x: s.x - d * (a.x - o.x), y: s.y - d * (a.y - o.y) }, + next: { x: s.x + u * (a.x - o.x), y: s.y + u * (a.y - o.y) }, + }; + } + function bi(t, e = "x") { + const i = mi(e), + n = t.length, + o = Array(n).fill(0), + s = Array(n); + let a, + r, + l, + c = pi(t, 0); + for (a = 0; a < n; ++a) + if (((r = l), (l = c), (c = pi(t, a + 1)), l)) { + if (c) { + const t = c[e] - l[e]; + o[a] = 0 !== t ? (c[i] - l[i]) / t : 0; + } + s[a] = r + ? c + ? Dt(o[a - 1]) !== Dt(o[a]) + ? 0 + : (o[a - 1] + o[a]) / 2 + : o[a - 1] + : o[a]; + } + !(function (t, e, i) { + const n = t.length; + let o, + s, + a, + r, + l, + c = pi(t, 0); + for (let h = 0; h < n - 1; ++h) + (l = c), + (c = pi(t, h + 1)), + l && + c && + (At(e[h], 0, gi) + ? (i[h] = i[h + 1] = 0) + : ((o = i[h] / e[h]), + (s = i[h + 1] / e[h]), + (r = Math.pow(o, 2) + Math.pow(s, 2)), + r <= 9 || + ((a = 3 / Math.sqrt(r)), + (i[h] = o * a * e[h]), + (i[h + 1] = s * a * e[h])))); + })(t, o, s), + (function (t, e, i = "x") { + const n = mi(i), + o = t.length; + let s, + a, + r, + l = pi(t, 0); + for (let c = 0; c < o; ++c) { + if (((a = r), (r = l), (l = pi(t, c + 1)), !r)) continue; + const o = r[i], + h = r[n]; + a && + ((s = (o - a[i]) / 3), + (r[`cp1${i}`] = o - s), + (r[`cp1${n}`] = h - s * e[c])), + l && + ((s = (l[i] - o) / 3), + (r[`cp2${i}`] = o + s), + (r[`cp2${n}`] = h + s * e[c])); + } + })(t, s, e); + } + function _i(t, e, i) { + return Math.max(Math.min(t, i), e); + } + function yi(t, e, i, n, o) { + let s, a, r, l; + if ( + (e.spanGaps && (t = t.filter((t) => !t.skip)), + "monotone" === e.cubicInterpolationMode) + ) + bi(t, o); + else { + let i = n ? t[t.length - 1] : t[0]; + for (s = 0, a = t.length; s < a; ++s) + (r = t[s]), + (l = xi(i, r, t[Math.min(s + 1, a - (n ? 0 : 1)) % a], e.tension)), + (r.cp1x = l.previous.x), + (r.cp1y = l.previous.y), + (r.cp2x = l.next.x), + (r.cp2y = l.next.y), + (i = r); + } + e.capBezierPoints && + (function (t, e) { + let i, + n, + o, + s, + a, + r = Gt(t[0], e); + for (i = 0, n = t.length; i < n; ++i) + (a = s), + (s = r), + (r = i < n - 1 && Gt(t[i + 1], e)), + s && + ((o = t[i]), + a && + ((o.cp1x = _i(o.cp1x, e.left, e.right)), + (o.cp1y = _i(o.cp1y, e.top, e.bottom))), + r && + ((o.cp2x = _i(o.cp2x, e.left, e.right)), + (o.cp2y = _i(o.cp2y, e.top, e.bottom)))); + })(t, i); + } + const vi = (t) => 0 === t || 1 === t, + wi = (t, e, i) => + -Math.pow(2, 10 * (t -= 1)) * Math.sin(((t - e) * _t) / i), + Mi = (t, e, i) => Math.pow(2, -10 * t) * Math.sin(((t - e) * _t) / i) + 1, + ki = { + linear: (t) => t, + easeInQuad: (t) => t * t, + easeOutQuad: (t) => -t * (t - 2), + easeInOutQuad: (t) => + (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1), + easeInCubic: (t) => t * t * t, + easeOutCubic: (t) => (t -= 1) * t * t + 1, + easeInOutCubic: (t) => + (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2), + easeInQuart: (t) => t * t * t * t, + easeOutQuart: (t) => -((t -= 1) * t * t * t - 1), + easeInOutQuart: (t) => + (t /= 0.5) < 1 + ? 0.5 * t * t * t * t + : -0.5 * ((t -= 2) * t * t * t - 2), + easeInQuint: (t) => t * t * t * t * t, + easeOutQuint: (t) => (t -= 1) * t * t * t * t + 1, + easeInOutQuint: (t) => + (t /= 0.5) < 1 + ? 0.5 * t * t * t * t * t + : 0.5 * ((t -= 2) * t * t * t * t + 2), + easeInSine: (t) => 1 - Math.cos(t * Mt), + easeOutSine: (t) => Math.sin(t * Mt), + easeInOutSine: (t) => -0.5 * (Math.cos(bt * t) - 1), + easeInExpo: (t) => (0 === t ? 0 : Math.pow(2, 10 * (t - 1))), + easeOutExpo: (t) => (1 === t ? 1 : 1 - Math.pow(2, -10 * t)), + easeInOutExpo: (t) => + vi(t) + ? t + : t < 0.5 + ? 0.5 * Math.pow(2, 10 * (2 * t - 1)) + : 0.5 * (2 - Math.pow(2, -10 * (2 * t - 1))), + easeInCirc: (t) => (t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1)), + easeOutCirc: (t) => Math.sqrt(1 - (t -= 1) * t), + easeInOutCirc: (t) => + (t /= 0.5) < 1 + ? -0.5 * (Math.sqrt(1 - t * t) - 1) + : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1), + easeInElastic: (t) => (vi(t) ? t : wi(t, 0.075, 0.3)), + easeOutElastic: (t) => (vi(t) ? t : Mi(t, 0.075, 0.3)), + easeInOutElastic(t) { + const e = 0.1125; + return vi(t) + ? t + : t < 0.5 + ? 0.5 * wi(2 * t, e, 0.45) + : 0.5 + 0.5 * Mi(2 * t - 1, e, 0.45); + }, + easeInBack(t) { + const e = 1.70158; + return t * t * ((e + 1) * t - e); + }, + easeOutBack(t) { + const e = 1.70158; + return (t -= 1) * t * ((e + 1) * t + e) + 1; + }, + easeInOutBack(t) { + let e = 1.70158; + return (t /= 0.5) < 1 + ? t * t * ((1 + (e *= 1.525)) * t - e) * 0.5 + : 0.5 * ((t -= 2) * t * ((1 + (e *= 1.525)) * t + e) + 2); + }, + easeInBounce: (t) => 1 - ki.easeOutBounce(1 - t), + easeOutBounce(t) { + const e = 7.5625, + i = 2.75; + return t < 1 / i + ? e * t * t + : t < 2 / i + ? e * (t -= 1.5 / i) * t + 0.75 + : t < 2.5 / i + ? e * (t -= 2.25 / i) * t + 0.9375 + : e * (t -= 2.625 / i) * t + 0.984375; + }, + easeInOutBounce: (t) => + t < 0.5 + ? 0.5 * ki.easeInBounce(2 * t) + : 0.5 * ki.easeOutBounce(2 * t - 1) + 0.5, + }; + function Si(t, e, i, n) { + return { x: t.x + i * (e.x - t.x), y: t.y + i * (e.y - t.y) }; + } + function Pi(t, e, i, n) { + return { + x: t.x + i * (e.x - t.x), + y: + "middle" === n + ? i < 0.5 + ? t.y + : e.y + : "after" === n + ? i < 1 + ? t.y + : e.y + : i > 0 + ? e.y + : t.y, + }; + } + function Di(t, e, i, n) { + const o = { x: t.cp2x, y: t.cp2y }, + s = { x: e.cp1x, y: e.cp1y }, + a = Si(t, o, i), + r = Si(o, s, i), + l = Si(s, e, i), + c = Si(a, r, i), + h = Si(r, l, i); + return Si(c, h, i); + } + const Ci = new Map(); + function Oi(t, e, i) { + return (function (t, e) { + e = e || {}; + const i = t + JSON.stringify(e); + let n = Ci.get(i); + return n || ((n = new Intl.NumberFormat(t, e)), Ci.set(i, n)), n; + })(e, i).format(t); + } + function Ti(t, e, i) { + return t + ? (function (t, e) { + return { + x: (i) => t + t + e - i, + setWidth(t) { + e = t; + }, + textAlign: (t) => + "center" === t ? t : "right" === t ? "left" : "right", + xPlus: (t, e) => t - e, + leftForLtr: (t, e) => t - e, + }; + })(e, i) + : { + x: (t) => t, + setWidth(t) {}, + textAlign: (t) => t, + xPlus: (t, e) => t + e, + leftForLtr: (t, e) => t, + }; + } + function Ai(t, e) { + let i, n; + ("ltr" !== e && "rtl" !== e) || + ((i = t.canvas.style), + (n = [ + i.getPropertyValue("direction"), + i.getPropertyPriority("direction"), + ]), + i.setProperty("direction", e, "important"), + (t.prevTextDirection = n)); + } + function Li(t, e) { + void 0 !== e && + (delete t.prevTextDirection, + t.canvas.style.setProperty("direction", e[0], e[1])); + } + function Ri(t) { + return "angle" === t + ? { between: Nt, compare: Vt, normalize: Wt } + : { + between: (t, e, i) => t >= Math.min(e, i) && t <= Math.max(i, e), + compare: (t, e) => t - e, + normalize: (t) => t, + }; + } + function Ei({ start: t, end: e, count: i, loop: n, style: o }) { + return { + start: t % i, + end: e % i, + loop: n && (e - t + 1) % i == 0, + style: o, + }; + } + function Ii(t, e, i) { + if (!i) return [t]; + const { property: n, start: o, end: s } = i, + a = e.length, + { compare: r, between: l, normalize: c } = Ri(n), + { + start: h, + end: d, + loop: u, + style: f, + } = (function (t, e, i) { + const { property: n, start: o, end: s } = i, + { between: a, normalize: r } = Ri(n), + l = e.length; + let c, + h, + { start: d, end: u, loop: f } = t; + if (f) { + for ( + d += l, u += l, c = 0, h = l; + c < h && a(r(e[d % l][n]), o, s); + ++c + ) + d--, u--; + (d %= l), (u %= l); + } + return u < d && (u += l), { start: d, end: u, loop: f, style: t.style }; + })(t, e, i), + g = []; + let p, + m, + x, + b = !1, + _ = null; + const y = () => b || (l(o, x, p) && 0 !== r(o, x)), + v = () => !b || 0 === r(s, p) || l(s, x, p); + for (let t = h, i = h; t <= d; ++t) + (m = e[t % a]), + m.skip || + ((p = c(m[n])), + p !== x && + ((b = l(p, o, s)), + null === _ && y() && (_ = 0 === r(p, o) ? t : i), + null !== _ && + v() && + (g.push(Ei({ start: _, end: t, loop: u, count: a, style: f })), + (_ = null)), + (i = t), + (x = p))); + return ( + null !== _ && + g.push(Ei({ start: _, end: d, loop: u, count: a, style: f })), + g + ); + } + function zi(t, e) { + const i = [], + n = t.segments; + for (let o = 0; o < n.length; o++) { + const s = Ii(n[o], t.points, e); + s.length && i.push(...s); + } + return i; + } + function Fi(t, e) { + const i = t.points, + n = t.options.spanGaps, + o = i.length; + if (!o) return []; + const s = !!t._loop, + { start: a, end: r } = (function (t, e, i, n) { + let o = 0, + s = e - 1; + if (i && !n) for (; o < e && !t[o].skip; ) o++; + for (; o < e && t[o].skip; ) o++; + for (o %= e, i && (s += o); s > o && t[s % e].skip; ) s--; + return (s %= e), { start: o, end: s }; + })(i, o, s, n); + if (!0 === n) return Bi(t, [{ start: a, end: r, loop: s }], i, e); + return Bi( + t, + (function (t, e, i, n) { + const o = t.length, + s = []; + let a, + r = e, + l = t[e]; + for (a = e + 1; a <= i; ++a) { + const i = t[a % o]; + i.skip || i.stop + ? l.skip || + ((n = !1), + s.push({ start: e % o, end: (a - 1) % o, loop: n }), + (e = r = i.stop ? a : null)) + : ((r = a), l.skip && (e = a)), + (l = i); + } + return null !== r && s.push({ start: e % o, end: r % o, loop: n }), s; + })(i, a, r < a ? r + o : r, !!t._fullLoop && 0 === a && r === o - 1), + i, + e + ); + } + function Bi(t, e, i, n) { + return n && n.setContext && i + ? (function (t, e, i, n) { + const o = Vi(t.options), + s = i.length, + a = []; + let r = e[0].start, + l = r; + for (const c of e) { + let e, + h = o, + d = i[r % s]; + for (l = r + 1; l <= c.end; l++) { + const o = i[l % s]; + (e = Vi( + n.setContext({ + type: "segment", + p0: d, + p1: o, + p0DataIndex: (l - 1) % s, + p1DataIndex: l % s, + datasetIndex: t._datasetIndex, + }) + )), + Wi(e, h) && + (a.push({ start: r, end: l - 1, loop: c.loop, style: h }), + (h = e), + (r = l - 1)), + (d = o), + (h = e); + } + r < l - 1 && + (a.push({ start: r, end: l - 1, loop: c.loop, style: e }), + (r = l - 1)); + } + return a; + })(t, e, i, n) + : e; + } + function Vi(t) { + return { + backgroundColor: t.backgroundColor, + borderCapStyle: t.borderCapStyle, + borderDash: t.borderDash, + borderDashOffset: t.borderDashOffset, + borderJoinStyle: t.borderJoinStyle, + borderWidth: t.borderWidth, + borderColor: t.borderColor, + }; + } + function Wi(t, e) { + return e && JSON.stringify(t) !== JSON.stringify(e); + } + var Ni = Object.freeze({ + __proto__: null, + easingEffects: ki, + color: W, + getHoverColor: N, + noop: H, + uid: j, + isNullOrUndef: $, + isArray: Y, + isObject: U, + isFinite: X, + finiteOrDefault: q, + valueOrDefault: K, + toPercentage: G, + toDimension: Z, + callback: Q, + each: J, + _elementsEqual: tt, + clone: et, + _merger: nt, + merge: ot, + mergeIf: st, + _mergerIf: at, + _deprecated: function (t, e, i, n) { + void 0 !== e && + console.warn( + t + ': "' + i + '" is deprecated. Please use "' + n + '" instead' + ); + }, + resolveObjectKey: lt, + _capitalize: ct, + defined: ht, + isFunction: dt, + setsEqual: ut, + toFontString: $t, + _measureText: Yt, + _longestText: Ut, + _alignPixel: Xt, + clearCanvas: qt, + drawPoint: Kt, + _isPointInArea: Gt, + clipArea: Zt, + unclipArea: Qt, + _steppedLineTo: Jt, + _bezierCurveTo: te, + renderText: ee, + addRoundedRectPath: ne, + _lookup: oe, + _lookupByKey: se, + _rlookupByKey: ae, + _filterBetween: re, + listenArrayEvents: ce, + unlistenArrayEvents: he, + _arrayUnique: de, + _createResolver: ei, + _attachContext: ii, + _descriptors: ni, + splineCurve: xi, + splineCurveMonotone: bi, + _updateBezierControlPoints: yi, + _isDomSupported: ue, + _getParentNode: fe, + getStyle: me, + getRelativePosition: _e, + getMaximumSize: ve, + retinaScale: we, + supportsEventListenerOptions: Me, + readUsedSize: ke, + fontString: function (t, e, i) { + return e + " " + t + "px " + i; + }, + requestAnimFrame: t, + throttled: e, + debounce: i, + _toLeftRightCenter: n, + _alignStartEnd: o, + _textX: s, + _pointInLine: Si, + _steppedInterpolation: Pi, + _bezierInterpolation: Di, + formatNumber: Oi, + toLineHeight: Ee, + _readValueToProps: Ie, + toTRBL: ze, + toTRBLCorners: Fe, + toPadding: Be, + toFont: Ve, + resolve: We, + _addGrace: Ne, + PI: bt, + TAU: _t, + PITAU: yt, + INFINITY: vt, + RAD_PER_DEG: wt, + HALF_PI: Mt, + QUARTER_PI: kt, + TWO_THIRDS_PI: St, + log10: Pt, + sign: Dt, + niceNum: Ct, + _factorize: Ot, + isNumber: Tt, + almostEquals: At, + almostWhole: Lt, + _setMinAndMaxByKey: Rt, + toRadians: Et, + toDegrees: It, + _decimalPlaces: zt, + getAngleFromPoint: Ft, + distanceBetweenPoints: Bt, + _angleDiff: Vt, + _normalizeAngle: Wt, + _angleBetween: Nt, + _limitValue: Ht, + _int16Range: jt, + getRtlAdapter: Ti, + overrideTextDirection: Ai, + restoreTextDirection: Li, + _boundSegment: Ii, + _boundSegments: zi, + _computeSegments: Fi, + }); + class Hi { + acquireContext(t, e) {} + releaseContext(t) { + return !1; + } + addEventListener(t, e, i) {} + removeEventListener(t, e, i) {} + getDevicePixelRatio() { + return 1; + } + getMaximumSize(t, e, i, n) { + return ( + (e = Math.max(0, e || t.width)), + (i = i || t.height), + { width: e, height: Math.max(0, n ? Math.floor(e / n) : i) } + ); + } + isAttached(t) { + return !0; + } + } + class ji extends Hi { + acquireContext(t) { + return (t && t.getContext && t.getContext("2d")) || null; + } + } + const $i = { + touchstart: "mousedown", + touchmove: "mousemove", + touchend: "mouseup", + pointerenter: "mouseenter", + pointerdown: "mousedown", + pointermove: "mousemove", + pointerup: "mouseup", + pointerleave: "mouseout", + pointerout: "mouseout", + }, + Yi = (t) => null === t || "" === t; + const Ui = !!Me && { passive: !0 }; + function Xi(t, e, i) { + t.canvas.removeEventListener(e, i, Ui); + } + function qi(t, e, i) { + const n = t.canvas, + o = (n && fe(n)) || n, + s = new MutationObserver((t) => { + const e = fe(o); + t.forEach((t) => { + for (let n = 0; n < t.addedNodes.length; n++) { + const s = t.addedNodes[n]; + (s !== o && s !== e) || i(t.target); + } + }); + }); + return s.observe(document, { childList: !0, subtree: !0 }), s; + } + function Ki(t, e, i) { + const n = t.canvas, + o = n && fe(n); + if (!o) return; + const s = new MutationObserver((t) => { + t.forEach((t) => { + for (let e = 0; e < t.removedNodes.length; e++) + if (t.removedNodes[e] === n) { + i(); + break; + } + }); + }); + return s.observe(o, { childList: !0 }), s; + } + const Gi = new Map(); + let Zi = 0; + function Qi() { + const t = window.devicePixelRatio; + t !== Zi && + ((Zi = t), + Gi.forEach((e, i) => { + i.currentDevicePixelRatio !== t && e(); + })); + } + function Ji(t, i, n) { + const o = t.canvas, + s = o && fe(o); + if (!s) return; + const a = e((t, e) => { + const i = s.clientWidth; + n(t, e), i < s.clientWidth && n(); + }, window), + r = new ResizeObserver((t) => { + const e = t[0], + i = e.contentRect.width, + n = e.contentRect.height; + (0 === i && 0 === n) || a(i, n); + }); + return ( + r.observe(s), + (function (t, e) { + Gi.size || window.addEventListener("resize", Qi), Gi.set(t, e); + })(t, a), + r + ); + } + function tn(t, e, i) { + i && i.disconnect(), + "resize" === e && + (function (t) { + Gi.delete(t), Gi.size || window.removeEventListener("resize", Qi); + })(t); + } + function en(t, i, n) { + const o = t.canvas, + s = e( + (e) => { + null !== t.ctx && + n( + (function (t, e) { + const i = $i[t.type] || t.type, + { x: n, y: o } = _e(t, e); + return { + type: i, + chart: e, + native: t, + x: void 0 !== n ? n : null, + y: void 0 !== o ? o : null, + }; + })(e, t) + ); + }, + t, + (t) => { + const e = t[0]; + return [e, e.offsetX, e.offsetY]; + } + ); + return ( + (function (t, e, i) { + t.addEventListener(e, i, Ui); + })(o, i, s), + s + ); + } + class nn extends Hi { + acquireContext(t, e) { + const i = t && t.getContext && t.getContext("2d"); + return i && i.canvas === t + ? ((function (t, e) { + const i = t.style, + n = t.getAttribute("height"), + o = t.getAttribute("width"); + if ( + ((t.$chartjs = { + initial: { + height: n, + width: o, + style: { + display: i.display, + height: i.height, + width: i.width, + }, + }, + }), + (i.display = i.display || "block"), + (i.boxSizing = i.boxSizing || "border-box"), + Yi(o)) + ) { + const e = ke(t, "width"); + void 0 !== e && (t.width = e); + } + if (Yi(n)) + if ("" === t.style.height) t.height = t.width / (e || 2); + else { + const e = ke(t, "height"); + void 0 !== e && (t.height = e); + } + })(t, e), + i) + : null; + } + releaseContext(t) { + const e = t.canvas; + if (!e.$chartjs) return !1; + const i = e.$chartjs.initial; + ["height", "width"].forEach((t) => { + const n = i[t]; + $(n) ? e.removeAttribute(t) : e.setAttribute(t, n); + }); + const n = i.style || {}; + return ( + Object.keys(n).forEach((t) => { + e.style[t] = n[t]; + }), + (e.width = e.width), + delete e.$chartjs, + !0 + ); + } + addEventListener(t, e, i) { + this.removeEventListener(t, e); + const n = t.$proxies || (t.$proxies = {}), + o = { attach: qi, detach: Ki, resize: Ji }[e] || en; + n[e] = o(t, e, i); + } + removeEventListener(t, e) { + const i = t.$proxies || (t.$proxies = {}), + n = i[e]; + if (!n) return; + (({ attach: tn, detach: tn, resize: tn })[e] || Xi)(t, e, n), + (i[e] = void 0); + } + getDevicePixelRatio() { + return window.devicePixelRatio; + } + getMaximumSize(t, e, i, n) { + return ve(t, e, i, n); + } + isAttached(t) { + const e = fe(t); + return !(!e || !e.isConnected); + } + } + function on(t) { + return !ue() || + ("undefined" != typeof OffscreenCanvas && t instanceof OffscreenCanvas) + ? ji + : nn; + } + var sn = Object.freeze({ + __proto__: null, + _detectPlatform: on, + BasePlatform: Hi, + BasicPlatform: ji, + DomPlatform: nn, + }); + const an = "transparent", + rn = { + boolean: (t, e, i) => (i > 0.5 ? e : t), + color(t, e, i) { + const n = W(t || an), + o = n.valid && W(e || an); + return o && o.valid ? o.mix(n, i).hexString() : e; + }, + number: (t, e, i) => t + (e - t) * i, + }; + class ln { + constructor(t, e, i, n) { + const o = e[i]; + n = We([t.to, n, o, t.from]); + const s = We([t.from, o, n]); + (this._active = !0), + (this._fn = t.fn || rn[t.type || typeof s]), + (this._easing = ki[t.easing] || ki.linear), + (this._start = Math.floor(Date.now() + (t.delay || 0))), + (this._duration = this._total = Math.floor(t.duration)), + (this._loop = !!t.loop), + (this._target = e), + (this._prop = i), + (this._from = s), + (this._to = n), + (this._promises = void 0); + } + active() { + return this._active; + } + update(t, e, i) { + const n = this; + if (n._active) { + n._notify(!1); + const o = n._target[n._prop], + s = i - n._start, + a = n._duration - s; + (n._start = i), + (n._duration = Math.floor(Math.max(a, t.duration))), + (n._total += s), + (n._loop = !!t.loop), + (n._to = We([t.to, e, o, t.from])), + (n._from = We([t.from, o, e])); + } + } + cancel() { + const t = this; + t._active && (t.tick(Date.now()), (t._active = !1), t._notify(!1)); + } + tick(t) { + const e = this, + i = t - e._start, + n = e._duration, + o = e._prop, + s = e._from, + a = e._loop, + r = e._to; + let l; + if (((e._active = s !== r && (a || i < n)), !e._active)) + return (e._target[o] = r), void e._notify(!0); + i < 0 + ? (e._target[o] = s) + : ((l = (i / n) % 2), + (l = a && l > 1 ? 2 - l : l), + (l = e._easing(Math.min(1, Math.max(0, l)))), + (e._target[o] = e._fn(s, r, l))); + } + wait() { + const t = this._promises || (this._promises = []); + return new Promise((e, i) => { + t.push({ res: e, rej: i }); + }); + } + _notify(t) { + const e = t ? "res" : "rej", + i = this._promises || []; + for (let t = 0; t < i.length; t++) i[t][e](); + } + } + xt.set("animation", { + delay: void 0, + duration: 1e3, + easing: "easeOutQuart", + fn: void 0, + from: void 0, + loop: void 0, + to: void 0, + type: void 0, + }); + const cn = Object.keys(xt.animation); + xt.describe("animation", { + _fallback: !1, + _indexable: !1, + _scriptable: (t) => "onProgress" !== t && "onComplete" !== t && "fn" !== t, + }), + xt.set("animations", { + colors: { + type: "color", + properties: ["color", "borderColor", "backgroundColor"], + }, + numbers: { + type: "number", + properties: ["x", "y", "borderWidth", "radius", "tension"], + }, + }), + xt.describe("animations", { _fallback: "animation" }), + xt.set("transitions", { + active: { animation: { duration: 400 } }, + resize: { animation: { duration: 0 } }, + show: { + animations: { + colors: { from: "transparent" }, + visible: { type: "boolean", duration: 0 }, + }, + }, + hide: { + animations: { + colors: { to: "transparent" }, + visible: { type: "boolean", easing: "linear", fn: (t) => 0 | t }, + }, + }, + }); + class hn { + constructor(t, e) { + (this._chart = t), (this._properties = new Map()), this.configure(e); + } + configure(t) { + if (!U(t)) return; + const e = this._properties; + Object.getOwnPropertyNames(t).forEach((i) => { + const n = t[i]; + if (!U(n)) return; + const o = {}; + for (const t of cn) o[t] = n[t]; + ((Y(n.properties) && n.properties) || [i]).forEach((t) => { + (t !== i && e.has(t)) || e.set(t, o); + }); + }); + } + _animateOptions(t, e) { + const i = e.options, + n = (function (t, e) { + if (!e) return; + let i = t.options; + if (!i) return void (t.options = e); + i.$shared && + (t.options = i = + Object.assign({}, i, { $shared: !1, $animations: {} })); + return i; + })(t, i); + if (!n) return []; + const o = this._createAnimations(n, i); + return ( + i.$shared && + (function (t, e) { + const i = [], + n = Object.keys(e); + for (let e = 0; e < n.length; e++) { + const o = t[n[e]]; + o && o.active() && i.push(o.wait()); + } + return Promise.all(i); + })(t.options.$animations, i).then( + () => { + t.options = i; + }, + () => {} + ), + o + ); + } + _createAnimations(t, e) { + const i = this._properties, + n = [], + o = t.$animations || (t.$animations = {}), + s = Object.keys(e), + a = Date.now(); + let r; + for (r = s.length - 1; r >= 0; --r) { + const l = s[r]; + if ("$" === l.charAt(0)) continue; + if ("options" === l) { + n.push(...this._animateOptions(t, e)); + continue; + } + const c = e[l]; + let h = o[l]; + const d = i.get(l); + if (h) { + if (d && h.active()) { + h.update(d, c, a); + continue; + } + h.cancel(); + } + d && d.duration + ? ((o[l] = h = new ln(d, t, l, c)), n.push(h)) + : (t[l] = c); + } + return n; + } + update(t, e) { + if (0 === this._properties.size) return void Object.assign(t, e); + const i = this._createAnimations(t, e); + return i.length ? (a.add(this._chart, i), !0) : void 0; + } + } + function dn(t, e) { + const i = (t && t.options) || {}, + n = i.reverse, + o = void 0 === i.min ? e : 0, + s = void 0 === i.max ? e : 0; + return { start: n ? s : o, end: n ? o : s }; + } + function un(t, e) { + const i = [], + n = t._getSortedDatasetMetas(e); + let o, s; + for (o = 0, s = n.length; o < s; ++o) i.push(n[o].index); + return i; + } + function fn(t, e, i, n) { + const o = t.keys, + s = "single" === n.mode; + let a, r, l, c; + if (null !== e) { + for (a = 0, r = o.length; a < r; ++a) { + if (((l = +o[a]), l === i)) { + if (n.all) continue; + break; + } + (c = t.values[l]), + X(c) && (s || 0 === e || Dt(e) === Dt(c)) && (e += c); + } + return e; + } + } + function gn(t, e) { + const i = t && t.options.stacked; + return i || (void 0 === i && void 0 !== e.stack); + } + function pn(t, e, i) { + const n = t[e] || (t[e] = {}); + return n[i] || (n[i] = {}); + } + function mn(t, e, i) { + for (const n of e.getMatchingVisibleMetas("bar").reverse()) { + const e = t[n.index]; + if ((i && e > 0) || (!i && e < 0)) return n.index; + } + return null; + } + function xn(t, e) { + const { chart: i, _cachedMeta: n } = t, + o = i._stacks || (i._stacks = {}), + { iScale: s, vScale: a, index: r } = n, + l = s.axis, + c = a.axis, + h = (function (t, e, i) { + return `${t.id}.${e.id}.${i.stack || i.type}`; + })(s, a, n), + d = e.length; + let u; + for (let t = 0; t < d; ++t) { + const i = e[t], + { [l]: n, [c]: s } = i; + (u = (i._stacks || (i._stacks = {}))[c] = pn(o, h, n)), + (u[r] = s), + (u._top = mn(u, a, !0)), + (u._bottom = mn(u, a, !1)); + } + } + function bn(t, e) { + const i = t.scales; + return Object.keys(i) + .filter((t) => i[t].axis === e) + .shift(); + } + function _n(t, e) { + const i = t.controller.index, + n = t.vScale && t.vScale.axis; + if (n) { + e = e || t._parsed; + for (const t of e) { + const e = t._stacks; + if (!e || void 0 === e[n] || void 0 === e[n][i]) return; + delete e[n][i]; + } + } + } + const yn = (t) => "reset" === t || "none" === t, + vn = (t, e) => (e ? t : Object.assign({}, t)); + class wn { + constructor(t, e) { + (this.chart = t), + (this._ctx = t.ctx), + (this.index = e), + (this._cachedDataOpts = {}), + (this._cachedMeta = this.getMeta()), + (this._type = this._cachedMeta.type), + (this.options = void 0), + (this._parsing = !1), + (this._data = void 0), + (this._objectData = void 0), + (this._sharedOptions = void 0), + (this._drawStart = void 0), + (this._drawCount = void 0), + (this.enableOptionSharing = !1), + (this.$context = void 0), + (this._syncList = []), + this.initialize(); + } + initialize() { + const t = this, + e = t._cachedMeta; + t.configure(), + t.linkScales(), + (e._stacked = gn(e.vScale, e)), + t.addElements(); + } + updateIndex(t) { + this.index !== t && _n(this._cachedMeta), (this.index = t); + } + linkScales() { + const t = this, + e = t.chart, + i = t._cachedMeta, + n = t.getDataset(), + o = (t, e, i, n) => ("x" === t ? e : "r" === t ? n : i), + s = (i.xAxisID = K(n.xAxisID, bn(e, "x"))), + a = (i.yAxisID = K(n.yAxisID, bn(e, "y"))), + r = (i.rAxisID = K(n.rAxisID, bn(e, "r"))), + l = i.indexAxis, + c = (i.iAxisID = o(l, s, a, r)), + h = (i.vAxisID = o(l, a, s, r)); + (i.xScale = t.getScaleForId(s)), + (i.yScale = t.getScaleForId(a)), + (i.rScale = t.getScaleForId(r)), + (i.iScale = t.getScaleForId(c)), + (i.vScale = t.getScaleForId(h)); + } + getDataset() { + return this.chart.data.datasets[this.index]; + } + getMeta() { + return this.chart.getDatasetMeta(this.index); + } + getScaleForId(t) { + return this.chart.scales[t]; + } + _getOtherScale(t) { + const e = this._cachedMeta; + return t === e.iScale ? e.vScale : e.iScale; + } + reset() { + this._update("reset"); + } + _destroy() { + const t = this._cachedMeta; + this._data && he(this._data, this), t._stacked && _n(t); + } + _dataCheck() { + const t = this, + e = t.getDataset(), + i = e.data || (e.data = []), + n = t._data; + if (U(i)) + t._data = (function (t) { + const e = Object.keys(t), + i = new Array(e.length); + let n, o, s; + for (n = 0, o = e.length; n < o; ++n) + (s = e[n]), (i[n] = { x: s, y: t[s] }); + return i; + })(i); + else if (n !== i) { + if (n) { + he(n, t); + const e = t._cachedMeta; + _n(e), (e._parsed = []); + } + i && Object.isExtensible(i) && ce(i, t), + (t._syncList = []), + (t._data = i); + } + } + addElements() { + const t = this, + e = t._cachedMeta; + t._dataCheck(), + t.datasetElementType && (e.dataset = new t.datasetElementType()); + } + buildOrUpdateElements(t) { + const e = this, + i = e._cachedMeta, + n = e.getDataset(); + let o = !1; + e._dataCheck(); + const s = i._stacked; + (i._stacked = gn(i.vScale, i)), + i.stack !== n.stack && ((o = !0), _n(i), (i.stack = n.stack)), + e._resyncElements(t), + (o || s !== i._stacked) && xn(e, i._parsed); + } + configure() { + const t = this, + e = t.chart.config, + i = e.datasetScopeKeys(t._type), + n = e.getOptionScopes(t.getDataset(), i, !0); + (t.options = e.createResolver(n, t.getContext())), + (t._parsing = t.options.parsing); + } + parse(t, e) { + const i = this, + { _cachedMeta: n, _data: o } = i, + { iScale: s, _stacked: a } = n, + r = s.axis; + let l, + c, + h, + d = (0 === t && e === o.length) || n._sorted, + u = t > 0 && n._parsed[t - 1]; + if (!1 === i._parsing) (n._parsed = o), (n._sorted = !0), (h = o); + else { + h = Y(o[t]) + ? i.parseArrayData(n, o, t, e) + : U(o[t]) + ? i.parseObjectData(n, o, t, e) + : i.parsePrimitiveData(n, o, t, e); + const s = () => null === c[r] || (u && c[r] < u[r]); + for (l = 0; l < e; ++l) + (n._parsed[l + t] = c = h[l]), d && (s() && (d = !1), (u = c)); + n._sorted = d; + } + a && xn(i, h); + } + parsePrimitiveData(t, e, i, n) { + const { iScale: o, vScale: s } = t, + a = o.axis, + r = s.axis, + l = o.getLabels(), + c = o === s, + h = new Array(n); + let d, u, f; + for (d = 0, u = n; d < u; ++d) + (f = d + i), + (h[d] = { [a]: c || o.parse(l[f], f), [r]: s.parse(e[f], f) }); + return h; + } + parseArrayData(t, e, i, n) { + const { xScale: o, yScale: s } = t, + a = new Array(n); + let r, l, c, h; + for (r = 0, l = n; r < l; ++r) + (c = r + i), + (h = e[c]), + (a[r] = { x: o.parse(h[0], c), y: s.parse(h[1], c) }); + return a; + } + parseObjectData(t, e, i, n) { + const { xScale: o, yScale: s } = t, + { xAxisKey: a = "x", yAxisKey: r = "y" } = this._parsing, + l = new Array(n); + let c, h, d, u; + for (c = 0, h = n; c < h; ++c) + (d = c + i), + (u = e[d]), + (l[c] = { x: o.parse(lt(u, a), d), y: s.parse(lt(u, r), d) }); + return l; + } + getParsed(t) { + return this._cachedMeta._parsed[t]; + } + getDataElement(t) { + return this._cachedMeta.data[t]; + } + applyStack(t, e, i) { + const n = this.chart, + o = this._cachedMeta, + s = e[t.axis]; + return fn({ keys: un(n, !0), values: e._stacks[t.axis] }, s, o.index, { + mode: i, + }); + } + updateRangeFromParsed(t, e, i, n) { + const o = i[e.axis]; + let s = null === o ? NaN : o; + const a = n && i._stacks[e.axis]; + n && + a && + ((n.values = a), + (t.min = Math.min(t.min, s)), + (t.max = Math.max(t.max, s)), + (s = fn(n, o, this._cachedMeta.index, { all: !0 }))), + (t.min = Math.min(t.min, s)), + (t.max = Math.max(t.max, s)); + } + getMinMax(t, e) { + const i = this, + n = i._cachedMeta, + o = n._parsed, + s = n._sorted && t === n.iScale, + a = o.length, + r = i._getOtherScale(t), + l = e && n._stacked && { keys: un(i.chart, !0), values: null }, + c = { min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY }, + { min: h, max: d } = (function (t) { + const { + min: e, + max: i, + minDefined: n, + maxDefined: o, + } = t.getUserBounds(); + return { + min: n ? e : Number.NEGATIVE_INFINITY, + max: o ? i : Number.POSITIVE_INFINITY, + }; + })(r); + let u, f, g, p; + function m() { + return ( + (g = o[u]), (f = g[t.axis]), (p = g[r.axis]), !X(f) || h > p || d < p + ); + } + for ( + u = 0; + u < a && (m() || (i.updateRangeFromParsed(c, t, g, l), !s)); + ++u + ); + if (s) + for (u = a - 1; u >= 0; --u) + if (!m()) { + i.updateRangeFromParsed(c, t, g, l); + break; + } + return c; + } + getAllParsedValues(t) { + const e = this._cachedMeta._parsed, + i = []; + let n, o, s; + for (n = 0, o = e.length; n < o; ++n) + (s = e[n][t.axis]), X(s) && i.push(s); + return i; + } + getMaxOverflow() { + return !1; + } + getLabelAndValue(t) { + const e = this._cachedMeta, + i = e.iScale, + n = e.vScale, + o = this.getParsed(t); + return { + label: i ? "" + i.getLabelForValue(o[i.axis]) : "", + value: n ? "" + n.getLabelForValue(o[n.axis]) : "", + }; + } + _update(t) { + const e = this, + i = e._cachedMeta; + e.configure(), + (e._cachedDataOpts = {}), + e.update(t || "default"), + (i._clip = (function (t) { + let e, i, n, o; + return ( + U(t) + ? ((e = t.top), (i = t.right), (n = t.bottom), (o = t.left)) + : (e = i = n = o = t), + { top: e, right: i, bottom: n, left: o, disabled: !1 === t } + ); + })( + K( + e.options.clip, + (function (t, e, i) { + if (!1 === i) return !1; + const n = dn(t, i), + o = dn(e, i); + return { + top: o.end, + right: n.end, + bottom: o.start, + left: n.start, + }; + })(i.xScale, i.yScale, e.getMaxOverflow()) + ) + )); + } + update(t) {} + draw() { + const t = this, + e = t._ctx, + i = t.chart, + n = t._cachedMeta, + o = n.data || [], + s = i.chartArea, + a = [], + r = t._drawStart || 0, + l = t._drawCount || o.length - r; + let c; + for (n.dataset && n.dataset.draw(e, s, r, l), c = r; c < r + l; ++c) { + const t = o[c]; + t.hidden || (t.active ? a.push(t) : t.draw(e, s)); + } + for (c = 0; c < a.length; ++c) a[c].draw(e, s); + } + getStyle(t, e) { + const i = e ? "active" : "default"; + return void 0 === t && this._cachedMeta.dataset + ? this.resolveDatasetElementOptions(i) + : this.resolveDataElementOptions(t || 0, i); + } + getContext(t, e, i) { + const n = this, + o = n.getDataset(); + let s; + if (t >= 0 && t < n._cachedMeta.data.length) { + const e = n._cachedMeta.data[t]; + (s = + e.$context || + (e.$context = (function (t, e, i) { + return Object.assign(Object.create(t), { + active: !1, + dataIndex: e, + parsed: void 0, + raw: void 0, + element: i, + index: e, + mode: "default", + type: "data", + }); + })(n.getContext(), t, e))), + (s.parsed = n.getParsed(t)), + (s.raw = o.data[t]), + (s.index = s.dataIndex = t); + } else + (s = + n.$context || + (n.$context = (function (t, e) { + return Object.assign(Object.create(t), { + active: !1, + dataset: void 0, + datasetIndex: e, + index: e, + mode: "default", + type: "dataset", + }); + })(n.chart.getContext(), n.index))), + (s.dataset = o), + (s.index = s.datasetIndex = n.index); + return (s.active = !!e), (s.mode = i), s; + } + resolveDatasetElementOptions(t) { + return this._resolveElementOptions(this.datasetElementType.id, t); + } + resolveDataElementOptions(t, e) { + return this._resolveElementOptions(this.dataElementType.id, e, t); + } + _resolveElementOptions(t, e = "default", i) { + const n = this, + o = "active" === e, + s = n._cachedDataOpts, + a = t + "-" + e, + r = s[a], + l = n.enableOptionSharing && ht(i); + if (r) return vn(r, l); + const c = n.chart.config, + h = c.datasetElementScopeKeys(n._type, t), + d = o ? [`${t}Hover`, "hover", t, ""] : [t, ""], + u = c.getOptionScopes(n.getDataset(), h), + f = Object.keys(xt.elements[t]), + g = c.resolveNamedOptions(u, f, () => n.getContext(i, o), d); + return ( + g.$shared && ((g.$shared = l), (s[a] = Object.freeze(vn(g, l)))), g + ); + } + _resolveAnimations(t, e, i) { + const n = this, + o = n.chart, + s = n._cachedDataOpts, + a = `animation-${e}`, + r = s[a]; + if (r) return r; + let l; + if (!1 !== o.options.animation) { + const o = n.chart.config, + s = o.datasetAnimationScopeKeys(n._type, e), + a = o.getOptionScopes(n.getDataset(), s); + l = o.createResolver(a, n.getContext(t, i, e)); + } + const c = new hn(o, l && l.animations); + return l && l._cacheable && (s[a] = Object.freeze(c)), c; + } + getSharedOptions(t) { + if (t.$shared) + return ( + this._sharedOptions || (this._sharedOptions = Object.assign({}, t)) + ); + } + includeOptions(t, e) { + return !e || yn(t) || this.chart._animationsDisabled; + } + updateElement(t, e, i, n) { + yn(n) ? Object.assign(t, i) : this._resolveAnimations(e, n).update(t, i); + } + updateSharedOptions(t, e, i) { + t && !yn(e) && this._resolveAnimations(void 0, e).update(t, i); + } + _setStyle(t, e, i, n) { + t.active = n; + const o = this.getStyle(e, n); + this._resolveAnimations(e, i, n).update(t, { + options: (!n && this.getSharedOptions(o)) || o, + }); + } + removeHoverStyle(t, e, i) { + this._setStyle(t, i, "active", !1); + } + setHoverStyle(t, e, i) { + this._setStyle(t, i, "active", !0); + } + _removeDatasetHoverStyle() { + const t = this._cachedMeta.dataset; + t && this._setStyle(t, void 0, "active", !1); + } + _setDatasetHoverStyle() { + const t = this._cachedMeta.dataset; + t && this._setStyle(t, void 0, "active", !0); + } + _resyncElements(t) { + const e = this, + i = e._data, + n = e._cachedMeta.data; + for (const [t, i, n] of e._syncList) e[t](i, n); + e._syncList = []; + const o = n.length, + s = i.length, + a = Math.min(s, o); + a && e.parse(0, a), + s > o + ? e._insertElements(o, s - o, t) + : s < o && e._removeElements(s, o - s); + } + _insertElements(t, e, i = !0) { + const n = this, + o = n._cachedMeta, + s = o.data, + a = t + e; + let r; + const l = (t) => { + for (t.length += e, r = t.length - 1; r >= a; r--) t[r] = t[r - e]; + }; + for (l(s), r = t; r < a; ++r) s[r] = new n.dataElementType(); + n._parsing && l(o._parsed), + n.parse(t, e), + i && n.updateElements(s, t, e, "reset"); + } + updateElements(t, e, i, n) {} + _removeElements(t, e) { + const i = this._cachedMeta; + if (this._parsing) { + const n = i._parsed.splice(t, e); + i._stacked && _n(i, n); + } + i.data.splice(t, e); + } + _sync(t) { + if (this._parsing) this._syncList.push(t); + else { + const [e, i, n] = t; + this[e](i, n); + } + } + _onDataPush() { + const t = arguments.length; + this._sync(["_insertElements", this.getDataset().data.length - t, t]); + } + _onDataPop() { + this._sync(["_removeElements", this._cachedMeta.data.length - 1, 1]); + } + _onDataShift() { + this._sync(["_removeElements", 0, 1]); + } + _onDataSplice(t, e) { + this._sync(["_removeElements", t, e]), + this._sync(["_insertElements", t, arguments.length - 2]); + } + _onDataUnshift() { + this._sync(["_insertElements", 0, arguments.length]); + } + } + (wn.defaults = {}), + (wn.prototype.datasetElementType = null), + (wn.prototype.dataElementType = null); + class Mn { + constructor() { + (this.x = void 0), + (this.y = void 0), + (this.active = !1), + (this.options = void 0), + (this.$animations = void 0); + } + tooltipPosition(t) { + const { x: e, y: i } = this.getProps(["x", "y"], t); + return { x: e, y: i }; + } + hasValue() { + return Tt(this.x) && Tt(this.y); + } + getProps(t, e) { + const i = this, + n = this.$animations; + if (!e || !n) return i; + const o = {}; + return ( + t.forEach((t) => { + o[t] = n[t] && n[t].active() ? n[t]._to : i[t]; + }), + o + ); + } + } + (Mn.defaults = {}), (Mn.defaultRoutes = void 0); + const kn = { + values: (t) => (Y(t) ? t : "" + t), + numeric(t, e, i) { + if (0 === t) return "0"; + const n = this.chart.options.locale; + let o, + s = t; + if (i.length > 1) { + const e = Math.max( + Math.abs(i[0].value), + Math.abs(i[i.length - 1].value) + ); + (e < 1e-4 || e > 1e15) && (o = "scientific"), + (s = (function (t, e) { + let i = + e.length > 3 ? e[2].value - e[1].value : e[1].value - e[0].value; + Math.abs(i) >= 1 && t !== Math.floor(t) && (i = t - Math.floor(t)); + return i; + })(t, i)); + } + const a = Pt(Math.abs(s)), + r = Math.max(Math.min(-1 * Math.floor(a), 20), 0), + l = { notation: o, minimumFractionDigits: r, maximumFractionDigits: r }; + return Object.assign(l, this.options.ticks.format), Oi(t, n, l); + }, + logarithmic(t, e, i) { + if (0 === t) return "0"; + const n = t / Math.pow(10, Math.floor(Pt(t))); + return 1 === n || 2 === n || 5 === n + ? kn.numeric.call(this, t, e, i) + : ""; + }, + }; + var Sn = { formatters: kn }; + function Pn(t, e) { + const i = t.options.ticks, + n = + i.maxTicksLimit || + (function (t) { + const e = t.options.offset, + i = t._tickSize(), + n = t._length / i + (e ? 0 : 1), + o = t._maxLength / i; + return Math.floor(Math.min(n, o)); + })(t), + o = i.major.enabled + ? (function (t) { + const e = []; + let i, n; + for (i = 0, n = t.length; i < n; i++) t[i].major && e.push(i); + return e; + })(e) + : [], + s = o.length, + a = o[0], + r = o[s - 1], + l = []; + if (s > n) + return ( + (function (t, e, i, n) { + let o, + s = 0, + a = i[0]; + for (n = Math.ceil(n), o = 0; o < t.length; o++) + o === a && (e.push(t[o]), s++, (a = i[s * n])); + })(e, l, o, s / n), + l + ); + const c = (function (t, e, i) { + const n = (function (t) { + const e = t.length; + let i, n; + if (e < 2) return !1; + for (n = t[0], i = 1; i < e; ++i) + if (t[i] - t[i - 1] !== n) return !1; + return n; + })(t), + o = e.length / i; + if (!n) return Math.max(o, 1); + const s = Ot(n); + for (let t = 0, e = s.length - 1; t < e; t++) { + const e = s[t]; + if (e > o) return e; + } + return Math.max(o, 1); + })(o, e, n); + if (s > 0) { + let t, i; + const n = s > 1 ? Math.round((r - a) / (s - 1)) : null; + for (Dn(e, l, c, $(n) ? 0 : a - n, a), t = 0, i = s - 1; t < i; t++) + Dn(e, l, c, o[t], o[t + 1]); + return Dn(e, l, c, r, $(n) ? e.length : r + n), l; + } + return Dn(e, l, c), l; + } + function Dn(t, e, i, n, o) { + const s = K(n, 0), + a = Math.min(K(o, t.length), t.length); + let r, + l, + c, + h = 0; + for ( + i = Math.ceil(i), o && ((r = o - n), (i = r / Math.floor(r / i))), c = s; + c < 0; + + ) + h++, (c = Math.round(s + h * i)); + for (l = Math.max(s, 0); l < a; l++) + l === c && (e.push(t[l]), h++, (c = Math.round(s + h * i))); + } + xt.set("scale", { + display: !0, + offset: !1, + reverse: !1, + beginAtZero: !1, + bounds: "ticks", + grace: 0, + grid: { + display: !0, + lineWidth: 1, + drawBorder: !0, + drawOnChartArea: !0, + drawTicks: !0, + tickLength: 8, + tickWidth: (t, e) => e.lineWidth, + tickColor: (t, e) => e.color, + offset: !1, + borderDash: [], + borderDashOffset: 0, + borderWidth: 1, + }, + title: { display: !1, text: "", padding: { top: 4, bottom: 4 } }, + ticks: { + minRotation: 0, + maxRotation: 50, + mirror: !1, + textStrokeWidth: 0, + textStrokeColor: "", + padding: 3, + display: !0, + autoSkip: !0, + autoSkipPadding: 3, + labelOffset: 0, + callback: Sn.formatters.values, + minor: {}, + major: {}, + align: "center", + crossAlign: "near", + showLabelBackdrop: !1, + backdropColor: "rgba(255, 255, 255, 0.75)", + backdropPadding: 2, + }, + }), + xt.route("scale.ticks", "color", "", "color"), + xt.route("scale.grid", "color", "", "borderColor"), + xt.route("scale.grid", "borderColor", "", "borderColor"), + xt.route("scale.title", "color", "", "color"), + xt.describe("scale", { + _fallback: !1, + _scriptable: (t) => + !t.startsWith("before") && + !t.startsWith("after") && + "callback" !== t && + "parser" !== t, + _indexable: (t) => "borderDash" !== t && "tickBorderDash" !== t, + }), + xt.describe("scales", { _fallback: "scale" }), + xt.describe("scale.ticks", { + _scriptable: (t) => "backdropPadding" !== t && "callback" !== t, + _indexable: (t) => "backdropPadding" !== t, + }); + const Cn = (t, e, i) => ("top" === e || "left" === e ? t[e] + i : t[e] - i); + function On(t, e) { + const i = [], + n = t.length / e, + o = t.length; + let s = 0; + for (; s < o; s += n) i.push(t[Math.floor(s)]); + return i; + } + function Tn(t, e, i) { + const n = t.ticks.length, + o = Math.min(e, n - 1), + s = t._startPixel, + a = t._endPixel, + r = 1e-6; + let l, + c = t.getPixelForTick(o); + if ( + !( + i && + ((l = + 1 === n + ? Math.max(c - s, a - c) + : 0 === e + ? (t.getPixelForTick(1) - c) / 2 + : (c - t.getPixelForTick(o - 1)) / 2), + (c += o < e ? l : -l), + c < s - r || c > a + r) + ) + ) + return c; + } + function An(t) { + return t.drawTicks ? t.tickLength : 0; + } + function Ln(t, e) { + if (!t.display) return 0; + const i = Ve(t.font, e), + n = Be(t.padding); + return (Y(t.text) ? t.text.length : 1) * i.lineHeight + n.height; + } + function Rn(t, e, i) { + let o = n(t); + return ( + ((i && "right" !== e) || (!i && "right" === e)) && + (o = ((t) => ("left" === t ? "right" : "right" === t ? "left" : t))(o)), + o + ); + } + class En extends Mn { + constructor(t) { + super(), + (this.id = t.id), + (this.type = t.type), + (this.options = void 0), + (this.ctx = t.ctx), + (this.chart = t.chart), + (this.top = void 0), + (this.bottom = void 0), + (this.left = void 0), + (this.right = void 0), + (this.width = void 0), + (this.height = void 0), + (this._margins = { left: 0, right: 0, top: 0, bottom: 0 }), + (this.maxWidth = void 0), + (this.maxHeight = void 0), + (this.paddingTop = void 0), + (this.paddingBottom = void 0), + (this.paddingLeft = void 0), + (this.paddingRight = void 0), + (this.axis = void 0), + (this.labelRotation = void 0), + (this.min = void 0), + (this.max = void 0), + (this._range = void 0), + (this.ticks = []), + (this._gridLineItems = null), + (this._labelItems = null), + (this._labelSizes = null), + (this._length = 0), + (this._maxLength = 0), + (this._longestTextCache = {}), + (this._startPixel = void 0), + (this._endPixel = void 0), + (this._reversePixels = !1), + (this._userMax = void 0), + (this._userMin = void 0), + (this._suggestedMax = void 0), + (this._suggestedMin = void 0), + (this._ticksLength = 0), + (this._borderValue = 0), + (this._cache = {}), + (this._dataLimitsCached = !1), + (this.$context = void 0); + } + init(t) { + const e = this; + (e.options = t.setContext(e.getContext())), + (e.axis = t.axis), + (e._userMin = e.parse(t.min)), + (e._userMax = e.parse(t.max)), + (e._suggestedMin = e.parse(t.suggestedMin)), + (e._suggestedMax = e.parse(t.suggestedMax)); + } + parse(t, e) { + return t; + } + getUserBounds() { + let { + _userMin: t, + _userMax: e, + _suggestedMin: i, + _suggestedMax: n, + } = this; + return ( + (t = q(t, Number.POSITIVE_INFINITY)), + (e = q(e, Number.NEGATIVE_INFINITY)), + (i = q(i, Number.POSITIVE_INFINITY)), + (n = q(n, Number.NEGATIVE_INFINITY)), + { min: q(t, i), max: q(e, n), minDefined: X(t), maxDefined: X(e) } + ); + } + getMinMax(t) { + const e = this; + let i, + { min: n, max: o, minDefined: s, maxDefined: a } = e.getUserBounds(); + if (s && a) return { min: n, max: o }; + const r = e.getMatchingVisibleMetas(); + for (let l = 0, c = r.length; l < c; ++l) + (i = r[l].controller.getMinMax(e, t)), + s || (n = Math.min(n, i.min)), + a || (o = Math.max(o, i.max)); + return { min: q(n, q(o, n)), max: q(o, q(n, o)) }; + } + getPadding() { + const t = this; + return { + left: t.paddingLeft || 0, + top: t.paddingTop || 0, + right: t.paddingRight || 0, + bottom: t.paddingBottom || 0, + }; + } + getTicks() { + return this.ticks; + } + getLabels() { + const t = this.chart.data; + return ( + this.options.labels || + (this.isHorizontal() ? t.xLabels : t.yLabels) || + t.labels || + [] + ); + } + beforeLayout() { + (this._cache = {}), (this._dataLimitsCached = !1); + } + beforeUpdate() { + Q(this.options.beforeUpdate, [this]); + } + update(t, e, i) { + const n = this, + o = n.options.ticks, + s = o.sampleSize; + n.beforeUpdate(), + (n.maxWidth = t), + (n.maxHeight = e), + (n._margins = i = + Object.assign({ left: 0, right: 0, top: 0, bottom: 0 }, i)), + (n.ticks = null), + (n._labelSizes = null), + (n._gridLineItems = null), + (n._labelItems = null), + n.beforeSetDimensions(), + n.setDimensions(), + n.afterSetDimensions(), + (n._maxLength = n.isHorizontal() + ? n.width + i.left + i.right + : n.height + i.top + i.bottom), + n._dataLimitsCached || + (n.beforeDataLimits(), + n.determineDataLimits(), + n.afterDataLimits(), + (n._range = Ne(n, n.options.grace)), + (n._dataLimitsCached = !0)), + n.beforeBuildTicks(), + (n.ticks = n.buildTicks() || []), + n.afterBuildTicks(); + const a = s < n.ticks.length; + n._convertTicksToLabels(a ? On(n.ticks, s) : n.ticks), + n.configure(), + n.beforeCalculateLabelRotation(), + n.calculateLabelRotation(), + n.afterCalculateLabelRotation(), + o.display && + (o.autoSkip || "auto" === o.source) && + ((n.ticks = Pn(n, n.ticks)), (n._labelSizes = null)), + a && n._convertTicksToLabels(n.ticks), + n.beforeFit(), + n.fit(), + n.afterFit(), + n.afterUpdate(); + } + configure() { + const t = this; + let e, + i, + n = t.options.reverse; + t.isHorizontal() + ? ((e = t.left), (i = t.right)) + : ((e = t.top), (i = t.bottom), (n = !n)), + (t._startPixel = e), + (t._endPixel = i), + (t._reversePixels = n), + (t._length = i - e), + (t._alignToPixels = t.options.alignToPixels); + } + afterUpdate() { + Q(this.options.afterUpdate, [this]); + } + beforeSetDimensions() { + Q(this.options.beforeSetDimensions, [this]); + } + setDimensions() { + const t = this; + t.isHorizontal() + ? ((t.width = t.maxWidth), (t.left = 0), (t.right = t.width)) + : ((t.height = t.maxHeight), (t.top = 0), (t.bottom = t.height)), + (t.paddingLeft = 0), + (t.paddingTop = 0), + (t.paddingRight = 0), + (t.paddingBottom = 0); + } + afterSetDimensions() { + Q(this.options.afterSetDimensions, [this]); + } + _callHooks(t) { + const e = this; + e.chart.notifyPlugins(t, e.getContext()), Q(e.options[t], [e]); + } + beforeDataLimits() { + this._callHooks("beforeDataLimits"); + } + determineDataLimits() {} + afterDataLimits() { + this._callHooks("afterDataLimits"); + } + beforeBuildTicks() { + this._callHooks("beforeBuildTicks"); + } + buildTicks() { + return []; + } + afterBuildTicks() { + this._callHooks("afterBuildTicks"); + } + beforeTickToLabelConversion() { + Q(this.options.beforeTickToLabelConversion, [this]); + } + generateTickLabels(t) { + const e = this, + i = e.options.ticks; + let n, o, s; + for (n = 0, o = t.length; n < o; n++) + (s = t[n]), (s.label = Q(i.callback, [s.value, n, t], e)); + } + afterTickToLabelConversion() { + Q(this.options.afterTickToLabelConversion, [this]); + } + beforeCalculateLabelRotation() { + Q(this.options.beforeCalculateLabelRotation, [this]); + } + calculateLabelRotation() { + const t = this, + e = t.options, + i = e.ticks, + n = t.ticks.length, + o = i.minRotation || 0, + s = i.maxRotation; + let a, + r, + l, + c = o; + if ( + !t._isVisible() || + !i.display || + o >= s || + n <= 1 || + !t.isHorizontal() + ) + return void (t.labelRotation = o); + const h = t._getLabelSizes(), + d = h.widest.width, + u = h.highest.height, + f = Ht(t.chart.width - d, 0, t.maxWidth); + (a = e.offset ? t.maxWidth / n : f / (n - 1)), + d + 6 > a && + ((a = f / (n - (e.offset ? 0.5 : 1))), + (r = + t.maxHeight - + An(e.grid) - + i.padding - + Ln(e.title, t.chart.options.font)), + (l = Math.sqrt(d * d + u * u)), + (c = It( + Math.min( + Math.asin(Ht((h.highest.height + 6) / a, -1, 1)), + Math.asin(Ht(r / l, -1, 1)) - Math.asin(Ht(u / l, -1, 1)) + ) + )), + (c = Math.max(o, Math.min(s, c)))), + (t.labelRotation = c); + } + afterCalculateLabelRotation() { + Q(this.options.afterCalculateLabelRotation, [this]); + } + beforeFit() { + Q(this.options.beforeFit, [this]); + } + fit() { + const t = this, + e = { width: 0, height: 0 }, + { + chart: i, + options: { ticks: n, title: o, grid: s }, + } = t, + a = t._isVisible(), + r = t.isHorizontal(); + if (a) { + const a = Ln(o, i.options.font); + if ( + (r + ? ((e.width = t.maxWidth), (e.height = An(s) + a)) + : ((e.height = t.maxHeight), (e.width = An(s) + a)), + n.display && t.ticks.length) + ) { + const { + first: i, + last: o, + widest: s, + highest: a, + } = t._getLabelSizes(), + l = 2 * n.padding, + c = Et(t.labelRotation), + h = Math.cos(c), + d = Math.sin(c); + if (r) { + const i = n.mirror ? 0 : d * s.width + h * a.height; + e.height = Math.min(t.maxHeight, e.height + i + l); + } else { + const i = n.mirror ? 0 : h * s.width + d * a.height; + e.width = Math.min(t.maxWidth, e.width + i + l); + } + t._calculatePadding(i, o, d, h); + } + } + t._handleMargins(), + r + ? ((t.width = t._length = + i.width - t._margins.left - t._margins.right), + (t.height = e.height)) + : ((t.width = e.width), + (t.height = t._length = + i.height - t._margins.top - t._margins.bottom)); + } + _calculatePadding(t, e, i, n) { + const o = this, + { + ticks: { align: s, padding: a }, + position: r, + } = o.options, + l = 0 !== o.labelRotation, + c = "top" !== r && "x" === o.axis; + if (o.isHorizontal()) { + const r = o.getPixelForTick(0) - o.left, + h = o.right - o.getPixelForTick(o.ticks.length - 1); + let d = 0, + u = 0; + l + ? c + ? ((d = n * t.width), (u = i * e.height)) + : ((d = i * t.height), (u = n * e.width)) + : "start" === s + ? (u = e.width) + : "end" === s + ? (d = t.width) + : ((d = t.width / 2), (u = e.width / 2)), + (o.paddingLeft = Math.max( + ((d - r + a) * o.width) / (o.width - r), + 0 + )), + (o.paddingRight = Math.max( + ((u - h + a) * o.width) / (o.width - h), + 0 + )); + } else { + let i = e.height / 2, + n = t.height / 2; + "start" === s + ? ((i = 0), (n = t.height)) + : "end" === s && ((i = e.height), (n = 0)), + (o.paddingTop = i + a), + (o.paddingBottom = n + a); + } + } + _handleMargins() { + const t = this; + t._margins && + ((t._margins.left = Math.max(t.paddingLeft, t._margins.left)), + (t._margins.top = Math.max(t.paddingTop, t._margins.top)), + (t._margins.right = Math.max(t.paddingRight, t._margins.right)), + (t._margins.bottom = Math.max(t.paddingBottom, t._margins.bottom))); + } + afterFit() { + Q(this.options.afterFit, [this]); + } + isHorizontal() { + const { axis: t, position: e } = this.options; + return "top" === e || "bottom" === e || "x" === t; + } + isFullSize() { + return this.options.fullSize; + } + _convertTicksToLabels(t) { + const e = this; + let i, n; + for ( + e.beforeTickToLabelConversion(), + e.generateTickLabels(t), + i = 0, + n = t.length; + i < n; + i++ + ) + $(t[i].label) && (t.splice(i, 1), n--, i--); + e.afterTickToLabelConversion(); + } + _getLabelSizes() { + const t = this; + let e = t._labelSizes; + if (!e) { + const i = t.options.ticks.sampleSize; + let n = t.ticks; + i < n.length && (n = On(n, i)), + (t._labelSizes = e = t._computeLabelSizes(n, n.length)); + } + return e; + } + _computeLabelSizes(t, e) { + const { ctx: i, _longestTextCache: n } = this, + o = [], + s = []; + let a, + r, + l, + c, + h, + d, + u, + f, + g, + p, + m, + x = 0, + b = 0; + for (a = 0; a < e; ++a) { + if ( + ((c = t[a].label), + (h = this._resolveTickFontOptions(a)), + (i.font = d = h.string), + (u = n[d] = n[d] || { data: {}, gc: [] }), + (f = h.lineHeight), + (g = p = 0), + $(c) || Y(c)) + ) { + if (Y(c)) + for (r = 0, l = c.length; r < l; ++r) + (m = c[r]), + $(m) || Y(m) || ((g = Yt(i, u.data, u.gc, g, m)), (p += f)); + } else (g = Yt(i, u.data, u.gc, g, c)), (p = f); + o.push(g), s.push(p), (x = Math.max(g, x)), (b = Math.max(p, b)); + } + !(function (t, e) { + J(t, (t) => { + const i = t.gc, + n = i.length / 2; + let o; + if (n > e) { + for (o = 0; o < n; ++o) delete t.data[i[o]]; + i.splice(0, n); + } + }); + })(n, e); + const _ = o.indexOf(x), + y = s.indexOf(b), + v = (t) => ({ width: o[t] || 0, height: s[t] || 0 }); + return { + first: v(0), + last: v(e - 1), + widest: v(_), + highest: v(y), + widths: o, + heights: s, + }; + } + getLabelForValue(t) { + return t; + } + getPixelForValue(t, e) { + return NaN; + } + getValueForPixel(t) {} + getPixelForTick(t) { + const e = this.ticks; + return t < 0 || t > e.length - 1 + ? null + : this.getPixelForValue(e[t].value); + } + getPixelForDecimal(t) { + const e = this; + e._reversePixels && (t = 1 - t); + const i = e._startPixel + t * e._length; + return jt(e._alignToPixels ? Xt(e.chart, i, 0) : i); + } + getDecimalForPixel(t) { + const e = (t - this._startPixel) / this._length; + return this._reversePixels ? 1 - e : e; + } + getBasePixel() { + return this.getPixelForValue(this.getBaseValue()); + } + getBaseValue() { + const { min: t, max: e } = this; + return t < 0 && e < 0 ? e : t > 0 && e > 0 ? t : 0; + } + getContext(t) { + const e = this, + i = e.ticks || []; + if (t >= 0 && t < i.length) { + const n = i[t]; + return ( + n.$context || + (n.$context = (function (t, e, i) { + return Object.assign(Object.create(t), { + tick: i, + index: e, + type: "tick", + }); + })(e.getContext(), t, n)) + ); + } + return ( + e.$context || + (e.$context = + ((n = e.chart.getContext()), + (o = e), + Object.assign(Object.create(n), { scale: o, type: "scale" }))) + ); + var n, o; + } + _tickSize() { + const t = this, + e = t.options.ticks, + i = Et(t.labelRotation), + n = Math.abs(Math.cos(i)), + o = Math.abs(Math.sin(i)), + s = t._getLabelSizes(), + a = e.autoSkipPadding || 0, + r = s ? s.widest.width + a : 0, + l = s ? s.highest.height + a : 0; + return t.isHorizontal() + ? l * n > r * o + ? r / n + : l / o + : l * o < r * n + ? l / n + : r / o; + } + _isVisible() { + const t = this.options.display; + return "auto" !== t ? !!t : this.getMatchingVisibleMetas().length > 0; + } + _computeGridLineItems(t) { + const e = this, + i = e.axis, + n = e.chart, + o = e.options, + { grid: s, position: a } = o, + r = s.offset, + l = e.isHorizontal(), + c = e.ticks.length + (r ? 1 : 0), + h = An(s), + d = [], + u = s.setContext(e.getContext()), + f = u.drawBorder ? u.borderWidth : 0, + g = f / 2, + p = function (t) { + return Xt(n, t, f); + }; + let m, x, b, _, y, v, w, M, k, S, P, D; + if ("top" === a) + (m = p(e.bottom)), + (v = e.bottom - h), + (M = m - g), + (S = p(t.top) + g), + (D = t.bottom); + else if ("bottom" === a) + (m = p(e.top)), + (S = t.top), + (D = p(t.bottom) - g), + (v = m + g), + (M = e.top + h); + else if ("left" === a) + (m = p(e.right)), + (y = e.right - h), + (w = m - g), + (k = p(t.left) + g), + (P = t.right); + else if ("right" === a) + (m = p(e.left)), + (k = t.left), + (P = p(t.right) - g), + (y = m + g), + (w = e.left + h); + else if ("x" === i) { + if ("center" === a) m = p((t.top + t.bottom) / 2 + 0.5); + else if (U(a)) { + const t = Object.keys(a)[0], + i = a[t]; + m = p(e.chart.scales[t].getPixelForValue(i)); + } + (S = t.top), (D = t.bottom), (v = m + g), (M = v + h); + } else if ("y" === i) { + if ("center" === a) m = p((t.left + t.right) / 2); + else if (U(a)) { + const t = Object.keys(a)[0], + i = a[t]; + m = p(e.chart.scales[t].getPixelForValue(i)); + } + (y = m - g), (w = y - h), (k = t.left), (P = t.right); + } + const C = K(o.ticks.maxTicksLimit, c), + O = Math.max(1, Math.ceil(c / C)); + for (x = 0; x < c; x += O) { + const t = s.setContext(e.getContext(x)), + i = t.lineWidth, + o = t.color, + a = s.borderDash || [], + c = t.borderDashOffset, + h = t.tickWidth, + u = t.tickColor, + f = t.tickBorderDash || [], + g = t.tickBorderDashOffset; + (b = Tn(e, x, r)), + void 0 !== b && + ((_ = Xt(n, b, i)), + l ? (y = w = k = P = _) : (v = M = S = D = _), + d.push({ + tx1: y, + ty1: v, + tx2: w, + ty2: M, + x1: k, + y1: S, + x2: P, + y2: D, + width: i, + color: o, + borderDash: a, + borderDashOffset: c, + tickWidth: h, + tickColor: u, + tickBorderDash: f, + tickBorderDashOffset: g, + })); + } + return (e._ticksLength = c), (e._borderValue = m), d; + } + _computeLabelItems(t) { + const e = this, + i = e.axis, + n = e.options, + { position: o, ticks: s } = n, + a = e.isHorizontal(), + r = e.ticks, + { align: l, crossAlign: c, padding: h, mirror: d } = s, + u = An(n.grid), + f = u + h, + g = d ? -h : f, + p = -Et(e.labelRotation), + m = []; + let x, + b, + _, + y, + v, + w, + M, + k, + S, + P, + D, + C, + O = "middle"; + if ("top" === o) (w = e.bottom - g), (M = e._getXAxisLabelAlignment()); + else if ("bottom" === o) + (w = e.top + g), (M = e._getXAxisLabelAlignment()); + else if ("left" === o) { + const t = e._getYAxisLabelAlignment(u); + (M = t.textAlign), (v = t.x); + } else if ("right" === o) { + const t = e._getYAxisLabelAlignment(u); + (M = t.textAlign), (v = t.x); + } else if ("x" === i) { + if ("center" === o) w = (t.top + t.bottom) / 2 + f; + else if (U(o)) { + const t = Object.keys(o)[0], + i = o[t]; + w = e.chart.scales[t].getPixelForValue(i) + f; + } + M = e._getXAxisLabelAlignment(); + } else if ("y" === i) { + if ("center" === o) v = (t.left + t.right) / 2 - f; + else if (U(o)) { + const t = Object.keys(o)[0], + i = o[t]; + v = e.chart.scales[t].getPixelForValue(i); + } + M = e._getYAxisLabelAlignment(u).textAlign; + } + "y" === i && + ("start" === l ? (O = "top") : "end" === l && (O = "bottom")); + const T = e._getLabelSizes(); + for (x = 0, b = r.length; x < b; ++x) { + (_ = r[x]), (y = _.label); + const t = s.setContext(e.getContext(x)); + (k = e.getPixelForTick(x) + s.labelOffset), + (S = e._resolveTickFontOptions(x)), + (P = S.lineHeight), + (D = Y(y) ? y.length : 1); + const i = D / 2, + n = t.color, + l = t.textStrokeColor, + h = t.textStrokeWidth; + let u; + if ( + (a + ? ((v = k), + (C = + "top" === o + ? "near" === c || 0 !== p + ? -D * P + P / 2 + : "center" === c + ? -T.highest.height / 2 - i * P + P + : -T.highest.height + P / 2 + : "near" === c || 0 !== p + ? P / 2 + : "center" === c + ? T.highest.height / 2 - i * P + : T.highest.height - D * P), + d && (C *= -1)) + : ((w = k), (C = ((1 - D) * P) / 2)), + t.showLabelBackdrop) + ) { + const e = Be(t.backdropPadding), + i = T.heights[x], + n = T.widths[x]; + let o = w + C - e.top, + s = v - e.left; + switch (O) { + case "middle": + o -= i / 2; + break; + case "bottom": + o -= i; + } + switch (M) { + case "center": + s -= n / 2; + break; + case "right": + s -= n; + } + u = { + left: s, + top: o, + width: n + e.width, + height: i + e.height, + color: t.backdropColor, + }; + } + m.push({ + rotation: p, + label: y, + font: S, + color: n, + strokeColor: l, + strokeWidth: h, + textOffset: C, + textAlign: M, + textBaseline: O, + translation: [v, w], + backdrop: u, + }); + } + return m; + } + _getXAxisLabelAlignment() { + const { position: t, ticks: e } = this.options; + if (-Et(this.labelRotation)) return "top" === t ? "left" : "right"; + let i = "center"; + return ( + "start" === e.align ? (i = "left") : "end" === e.align && (i = "right"), + i + ); + } + _getYAxisLabelAlignment(t) { + const e = this, + { + position: i, + ticks: { crossAlign: n, mirror: o, padding: s }, + } = e.options, + a = t + s, + r = e._getLabelSizes().widest.width; + let l, c; + return ( + "left" === i + ? o + ? ((c = e.right + s), + "near" === n + ? (l = "left") + : "center" === n + ? ((l = "center"), (c += r / 2)) + : ((l = "right"), (c += r))) + : ((c = e.right - a), + "near" === n + ? (l = "right") + : "center" === n + ? ((l = "center"), (c -= r / 2)) + : ((l = "left"), (c = e.left))) + : "right" === i + ? o + ? ((c = e.left + s), + "near" === n + ? (l = "right") + : "center" === n + ? ((l = "center"), (c -= r / 2)) + : ((l = "left"), (c -= r))) + : ((c = e.left + a), + "near" === n + ? (l = "left") + : "center" === n + ? ((l = "center"), (c += r / 2)) + : ((l = "right"), (c = e.right))) + : (l = "right"), + { textAlign: l, x: c } + ); + } + _computeLabelArea() { + const t = this; + if (t.options.ticks.mirror) return; + const e = t.chart, + i = t.options.position; + return "left" === i || "right" === i + ? { top: 0, left: t.left, bottom: e.height, right: t.right } + : "top" === i || "bottom" === i + ? { top: t.top, left: 0, bottom: t.bottom, right: e.width } + : void 0; + } + drawBackground() { + const { + ctx: t, + options: { backgroundColor: e }, + left: i, + top: n, + width: o, + height: s, + } = this; + e && (t.save(), (t.fillStyle = e), t.fillRect(i, n, o, s), t.restore()); + } + getLineWidthForValue(t) { + const e = this, + i = e.options.grid; + if (!e._isVisible() || !i.display) return 0; + const n = e.ticks.findIndex((e) => e.value === t); + if (n >= 0) { + return i.setContext(e.getContext(n)).lineWidth; + } + return 0; + } + drawGrid(t) { + const e = this, + i = e.options.grid, + n = e.ctx, + o = e._gridLineItems || (e._gridLineItems = e._computeGridLineItems(t)); + let s, a; + const r = (t, e, i) => { + i.width && + i.color && + (n.save(), + (n.lineWidth = i.width), + (n.strokeStyle = i.color), + n.setLineDash(i.borderDash || []), + (n.lineDashOffset = i.borderDashOffset), + n.beginPath(), + n.moveTo(t.x, t.y), + n.lineTo(e.x, e.y), + n.stroke(), + n.restore()); + }; + if (i.display) + for (s = 0, a = o.length; s < a; ++s) { + const t = o[s]; + i.drawOnChartArea && r({ x: t.x1, y: t.y1 }, { x: t.x2, y: t.y2 }, t), + i.drawTicks && + r( + { x: t.tx1, y: t.ty1 }, + { x: t.tx2, y: t.ty2 }, + { + color: t.tickColor, + width: t.tickWidth, + borderDash: t.tickBorderDash, + borderDashOffset: t.tickBorderDashOffset, + } + ); + } + } + drawBorder() { + const t = this, + { + chart: e, + ctx: i, + options: { grid: n }, + } = t, + o = n.setContext(t.getContext()), + s = n.drawBorder ? o.borderWidth : 0; + if (!s) return; + const a = n.setContext(t.getContext(0)).lineWidth, + r = t._borderValue; + let l, c, h, d; + t.isHorizontal() + ? ((l = Xt(e, t.left, s) - s / 2), + (c = Xt(e, t.right, a) + a / 2), + (h = d = r)) + : ((h = Xt(e, t.top, s) - s / 2), + (d = Xt(e, t.bottom, a) + a / 2), + (l = c = r)), + i.save(), + (i.lineWidth = o.borderWidth), + (i.strokeStyle = o.borderColor), + i.beginPath(), + i.moveTo(l, h), + i.lineTo(c, d), + i.stroke(), + i.restore(); + } + drawLabels(t) { + const e = this; + if (!e.options.ticks.display) return; + const i = e.ctx, + n = e._computeLabelArea(); + n && Zt(i, n); + const o = e._labelItems || (e._labelItems = e._computeLabelItems(t)); + let s, a; + for (s = 0, a = o.length; s < a; ++s) { + const t = o[s], + e = t.font, + n = t.label; + t.backdrop && + ((i.fillStyle = t.backdrop.color), + i.fillRect( + t.backdrop.left, + t.backdrop.top, + t.backdrop.width, + t.backdrop.height + )), + ee(i, n, 0, t.textOffset, e, t); + } + n && Qt(i); + } + drawTitle() { + const { + ctx: t, + options: { position: e, title: i, reverse: n }, + } = this; + if (!i.display) return; + const s = Ve(i.font), + a = Be(i.padding), + r = i.align; + let l = s.lineHeight / 2; + "bottom" === e || "center" === e || U(e) + ? ((l += a.bottom), + Y(i.text) && (l += s.lineHeight * (i.text.length - 1))) + : (l += a.top); + const { + titleX: c, + titleY: h, + maxWidth: d, + rotation: u, + } = (function (t, e, i, n) { + const { top: s, left: a, bottom: r, right: l, chart: c } = t, + { chartArea: h, scales: d } = c; + let u, + f, + g, + p = 0; + const m = r - s, + x = l - a; + if (t.isHorizontal()) { + if (((f = o(n, a, l)), U(i))) { + const t = Object.keys(i)[0], + n = i[t]; + g = d[t].getPixelForValue(n) + m - e; + } else + g = "center" === i ? (h.bottom + h.top) / 2 + m - e : Cn(t, i, e); + u = l - a; + } else { + if (U(i)) { + const t = Object.keys(i)[0], + n = i[t]; + f = d[t].getPixelForValue(n) - x + e; + } else + f = "center" === i ? (h.left + h.right) / 2 - x + e : Cn(t, i, e); + (g = o(n, r, s)), (p = "left" === i ? -Mt : Mt); + } + return { titleX: f, titleY: g, maxWidth: u, rotation: p }; + })(this, l, e, r); + ee(t, i.text, 0, 0, s, { + color: i.color, + maxWidth: d, + rotation: u, + textAlign: Rn(r, e, n), + textBaseline: "middle", + translation: [c, h], + }); + } + draw(t) { + const e = this; + e._isVisible() && + (e.drawBackground(), + e.drawGrid(t), + e.drawBorder(), + e.drawTitle(), + e.drawLabels(t)); + } + _layers() { + const t = this, + e = t.options, + i = (e.ticks && e.ticks.z) || 0, + n = K(e.grid && e.grid.z, -1); + return t._isVisible() && t.draw === En.prototype.draw + ? [ + { + z: n, + draw(e) { + t.drawBackground(), t.drawGrid(e), t.drawTitle(); + }, + }, + { + z: n + 1, + draw() { + t.drawBorder(); + }, + }, + { + z: i, + draw(e) { + t.drawLabels(e); + }, + }, + ] + : [ + { + z: i, + draw(e) { + t.draw(e); + }, + }, + ]; + } + getMatchingVisibleMetas(t) { + const e = this, + i = e.chart.getSortedVisibleDatasetMetas(), + n = e.axis + "AxisID", + o = []; + let s, a; + for (s = 0, a = i.length; s < a; ++s) { + const a = i[s]; + a[n] !== e.id || (t && a.type !== t) || o.push(a); + } + return o; + } + _resolveTickFontOptions(t) { + return Ve(this.options.ticks.setContext(this.getContext(t)).font); + } + _maxDigits() { + const t = this, + e = t._resolveTickFontOptions(0).lineHeight; + return (t.isHorizontal() ? t.width : t.height) / e; + } + } + class In { + constructor(t, e, i) { + (this.type = t), + (this.scope = e), + (this.override = i), + (this.items = Object.create(null)); + } + isForType(t) { + return Object.prototype.isPrototypeOf.call( + this.type.prototype, + t.prototype + ); + } + register(t) { + const e = this, + i = Object.getPrototypeOf(t); + let n; + (function (t) { + return "id" in t && "defaults" in t; + })(i) && (n = e.register(i)); + const o = e.items, + s = t.id, + a = e.scope + "." + s; + if (!s) throw new Error("class does not have id: " + t); + return ( + s in o || + ((o[s] = t), + (function (t, e, i) { + const n = ot(Object.create(null), [ + i ? xt.get(i) : {}, + xt.get(e), + t.defaults, + ]); + xt.set(e, n), + t.defaultRoutes && + (function (t, e) { + Object.keys(e).forEach((i) => { + const n = i.split("."), + o = n.pop(), + s = [t].concat(n).join("."), + a = e[i].split("."), + r = a.pop(), + l = a.join("."); + xt.route(s, o, l, r); + }); + })(e, t.defaultRoutes); + t.descriptors && xt.describe(e, t.descriptors); + })(t, a, n), + e.override && xt.override(t.id, t.overrides)), + a + ); + } + get(t) { + return this.items[t]; + } + unregister(t) { + const e = this.items, + i = t.id, + n = this.scope; + i in e && delete e[i], + n && i in xt[n] && (delete xt[n][i], this.override && delete ft[i]); + } + } + var zn = new (class { + constructor() { + (this.controllers = new In(wn, "datasets", !0)), + (this.elements = new In(Mn, "elements")), + (this.plugins = new In(Object, "plugins")), + (this.scales = new In(En, "scales")), + (this._typedRegistries = [ + this.controllers, + this.scales, + this.elements, + ]); + } + add(...t) { + this._each("register", t); + } + remove(...t) { + this._each("unregister", t); + } + addControllers(...t) { + this._each("register", t, this.controllers); + } + addElements(...t) { + this._each("register", t, this.elements); + } + addPlugins(...t) { + this._each("register", t, this.plugins); + } + addScales(...t) { + this._each("register", t, this.scales); + } + getController(t) { + return this._get(t, this.controllers, "controller"); + } + getElement(t) { + return this._get(t, this.elements, "element"); + } + getPlugin(t) { + return this._get(t, this.plugins, "plugin"); + } + getScale(t) { + return this._get(t, this.scales, "scale"); + } + removeControllers(...t) { + this._each("unregister", t, this.controllers); + } + removeElements(...t) { + this._each("unregister", t, this.elements); + } + removePlugins(...t) { + this._each("unregister", t, this.plugins); + } + removeScales(...t) { + this._each("unregister", t, this.scales); + } + _each(t, e, i) { + const n = this; + [...e].forEach((e) => { + const o = i || n._getRegistryForType(e); + i || o.isForType(e) || (o === n.plugins && e.id) + ? n._exec(t, o, e) + : J(e, (e) => { + const o = i || n._getRegistryForType(e); + n._exec(t, o, e); + }); + }); + } + _exec(t, e, i) { + const n = ct(t); + Q(i["before" + n], [], i), e[t](i), Q(i["after" + n], [], i); + } + _getRegistryForType(t) { + for (let e = 0; e < this._typedRegistries.length; e++) { + const i = this._typedRegistries[e]; + if (i.isForType(t)) return i; + } + return this.plugins; + } + _get(t, e, i) { + const n = e.get(t); + if (void 0 === n) + throw new Error('"' + t + '" is not a registered ' + i + "."); + return n; + } + })(); + class Fn { + constructor() { + this._init = []; + } + notify(t, e, i, n) { + const o = this; + "beforeInit" === e && + ((o._init = o._createDescriptors(t, !0)), + o._notify(o._init, t, "install")); + const s = n ? o._descriptors(t).filter(n) : o._descriptors(t), + a = o._notify(s, t, e, i); + return ( + "destroy" === e && + (o._notify(s, t, "stop"), o._notify(o._init, t, "uninstall")), + a + ); + } + _notify(t, e, i, n) { + n = n || {}; + for (const o of t) { + const t = o.plugin; + if (!1 === Q(t[i], [e, n, o.options], t) && n.cancelable) return !1; + } + return !0; + } + invalidate() { + $(this._cache) || + ((this._oldCache = this._cache), (this._cache = void 0)); + } + _descriptors(t) { + if (this._cache) return this._cache; + const e = (this._cache = this._createDescriptors(t)); + return this._notifyStateChanges(t), e; + } + _createDescriptors(t, e) { + const i = t && t.config, + n = K(i.options && i.options.plugins, {}), + o = (function (t) { + const e = [], + i = Object.keys(zn.plugins.items); + for (let t = 0; t < i.length; t++) e.push(zn.getPlugin(i[t])); + const n = t.plugins || []; + for (let t = 0; t < n.length; t++) { + const i = n[t]; + -1 === e.indexOf(i) && e.push(i); + } + return e; + })(i); + return !1 !== n || e + ? (function (t, e, i, n) { + const o = [], + s = t.getContext(); + for (let a = 0; a < e.length; a++) { + const r = e[a], + l = Bn(i[r.id], n); + null !== l && + o.push({ plugin: r, options: Vn(t.config, r, l, s) }); + } + return o; + })(t, o, n, e) + : []; + } + _notifyStateChanges(t) { + const e = this._oldCache || [], + i = this._cache, + n = (t, e) => + t.filter((t) => !e.some((e) => t.plugin.id === e.plugin.id)); + this._notify(n(e, i), t, "stop"), this._notify(n(i, e), t, "start"); + } + } + function Bn(t, e) { + return e || !1 !== t ? (!0 === t ? {} : t) : null; + } + function Vn(t, e, i, n) { + const o = t.pluginScopeKeys(e), + s = t.getOptionScopes(i, o); + return t.createResolver(s, n, [""], { + scriptable: !1, + indexable: !1, + allKeys: !0, + }); + } + function Wn(t, e) { + const i = xt.datasets[t] || {}; + return ( + ((e.datasets || {})[t] || {}).indexAxis || + e.indexAxis || + i.indexAxis || + "x" + ); + } + function Nn(t, e) { + return "x" === t || "y" === t + ? t + : e.axis || + ("top" === (i = e.position) || "bottom" === i + ? "x" + : "left" === i || "right" === i + ? "y" + : void 0) || + t.charAt(0).toLowerCase(); + var i; + } + function Hn(t) { + const e = t.options || (t.options = {}); + (e.plugins = K(e.plugins, {})), + (e.scales = (function (t, e) { + const i = ft[t.type] || { scales: {} }, + n = e.scales || {}, + o = Wn(t.type, e), + s = Object.create(null), + a = Object.create(null); + return ( + Object.keys(n).forEach((t) => { + const e = n[t], + r = Nn(t, e), + l = (function (t, e) { + return t === e ? "_index_" : "_value_"; + })(r, o), + c = i.scales || {}; + (s[r] = s[r] || t), + (a[t] = st(Object.create(null), [{ axis: r }, e, c[r], c[l]])); + }), + t.data.datasets.forEach((i) => { + const o = i.type || t.type, + r = i.indexAxis || Wn(o, e), + l = (ft[o] || {}).scales || {}; + Object.keys(l).forEach((t) => { + const e = (function (t, e) { + let i = t; + return ( + "_index_" === t + ? (i = e) + : "_value_" === t && (i = "x" === e ? "y" : "x"), + i + ); + })(t, r), + o = i[e + "AxisID"] || s[e] || e; + (a[o] = a[o] || Object.create(null)), + st(a[o], [{ axis: e }, n[o], l[t]]); + }); + }), + Object.keys(a).forEach((t) => { + const e = a[t]; + st(e, [xt.scales[e.type], xt.scale]); + }), + a + ); + })(t, e)); + } + function jn(t) { + return ( + ((t = t || {}).datasets = t.datasets || []), + (t.labels = t.labels || []), + t + ); + } + const $n = new Map(), + Yn = new Set(); + function Un(t, e) { + let i = $n.get(t); + return i || ((i = e()), $n.set(t, i), Yn.add(i)), i; + } + const Xn = (t, e, i) => { + const n = lt(e, i); + void 0 !== n && t.add(n); + }; + class qn { + constructor(t) { + (this._config = (function (t) { + return ((t = t || {}).data = jn(t.data)), Hn(t), t; + })(t)), + (this._scopeCache = new Map()), + (this._resolverCache = new Map()); + } + get platform() { + return this._config.platform; + } + get type() { + return this._config.type; + } + set type(t) { + this._config.type = t; + } + get data() { + return this._config.data; + } + set data(t) { + this._config.data = jn(t); + } + get options() { + return this._config.options; + } + set options(t) { + this._config.options = t; + } + get plugins() { + return this._config.plugins; + } + update() { + const t = this._config; + this.clearCache(), Hn(t); + } + clearCache() { + this._scopeCache.clear(), this._resolverCache.clear(); + } + datasetScopeKeys(t) { + return Un(t, () => [[`datasets.${t}`, ""]]); + } + datasetAnimationScopeKeys(t, e) { + return Un(`${t}.transition.${e}`, () => [ + [`datasets.${t}.transitions.${e}`, `transitions.${e}`], + [`datasets.${t}`, ""], + ]); + } + datasetElementScopeKeys(t, e) { + return Un(`${t}-${e}`, () => [ + [`datasets.${t}.elements.${e}`, `datasets.${t}`, `elements.${e}`, ""], + ]); + } + pluginScopeKeys(t) { + const e = t.id; + return Un(`${this.type}-plugin-${e}`, () => [ + [`plugins.${e}`, ...(t.additionalOptionScopes || [])], + ]); + } + _cachedScopes(t, e) { + const i = this._scopeCache; + let n = i.get(t); + return (n && !e) || ((n = new Map()), i.set(t, n)), n; + } + getOptionScopes(t, e, i) { + const { options: n, type: o } = this, + s = this._cachedScopes(t, i), + a = s.get(e); + if (a) return a; + const r = new Set(); + e.forEach((e) => { + t && (r.add(t), e.forEach((e) => Xn(r, t, e))), + e.forEach((t) => Xn(r, n, t)), + e.forEach((t) => Xn(r, ft[o] || {}, t)), + e.forEach((t) => Xn(r, xt, t)), + e.forEach((t) => Xn(r, gt, t)); + }); + const l = Array.from(r); + return ( + 0 === l.length && l.push(Object.create(null)), + Yn.has(e) && s.set(e, l), + l + ); + } + chartOptionScopes() { + const { options: t, type: e } = this; + return [t, ft[e] || {}, xt.datasets[e] || {}, { type: e }, xt, gt]; + } + resolveNamedOptions(t, e, i, n = [""]) { + const o = { $shared: !0 }, + { resolver: s, subPrefixes: a } = Kn(this._resolverCache, t, n); + let r = s; + if ( + (function (t, e) { + const { isScriptable: i, isIndexable: n } = ni(t); + for (const o of e) + if ((i(o) && dt(t[o])) || (n(o) && Y(t[o]))) return !0; + return !1; + })(s, e) + ) { + o.$shared = !1; + r = ii(s, (i = dt(i) ? i() : i), this.createResolver(t, i, a)); + } + for (const t of e) o[t] = r[t]; + return o; + } + createResolver(t, e, i = [""], n) { + const { resolver: o } = Kn(this._resolverCache, t, i); + return U(e) ? ii(o, e, void 0, n) : o; + } + } + function Kn(t, e, i) { + let n = t.get(e); + n || ((n = new Map()), t.set(e, n)); + const o = i.join(); + let s = n.get(o); + if (!s) { + (s = { + resolver: ei(e, i), + subPrefixes: i.filter((t) => !t.toLowerCase().includes("hover")), + }), + n.set(o, s); + } + return s; + } + const Gn = ["top", "bottom", "left", "right", "chartArea"]; + function Zn(t, e) { + return "top" === t || "bottom" === t || (-1 === Gn.indexOf(t) && "x" === e); + } + function Qn(t, e) { + return function (i, n) { + return i[t] === n[t] ? i[e] - n[e] : i[t] - n[t]; + }; + } + function Jn(t) { + const e = t.chart, + i = e.options.animation; + e.notifyPlugins("afterRender"), Q(i && i.onComplete, [t], e); + } + function to(t) { + const e = t.chart, + i = e.options.animation; + Q(i && i.onProgress, [t], e); + } + function eo(t) { + return ( + ue() && "string" == typeof t + ? (t = document.getElementById(t)) + : t && t.length && (t = t[0]), + t && t.canvas && (t = t.canvas), + t + ); + } + const io = {}, + no = (t) => { + const e = eo(t); + return Object.values(io) + .filter((t) => t.canvas === e) + .pop(); + }; + class oo { + constructor(t, e) { + const n = this, + o = (this.config = new qn(e)), + s = eo(t), + r = no(s); + if (r) + throw new Error( + "Canvas is already in use. Chart with ID '" + + r.id + + "' must be destroyed before the canvas can be reused." + ); + const l = o.createResolver(o.chartOptionScopes(), n.getContext()); + this.platform = new (o.platform || on(s))(); + const c = n.platform.acquireContext(s, l.aspectRatio), + h = c && c.canvas, + d = h && h.height, + u = h && h.width; + (this.id = j()), + (this.ctx = c), + (this.canvas = h), + (this.width = u), + (this.height = d), + (this._options = l), + (this._aspectRatio = this.aspectRatio), + (this._layers = []), + (this._metasets = []), + (this._stacks = void 0), + (this.boxes = []), + (this.currentDevicePixelRatio = void 0), + (this.chartArea = void 0), + (this._active = []), + (this._lastEvent = void 0), + (this._listeners = {}), + (this._responsiveListeners = void 0), + (this._sortedMetasets = []), + (this.scales = {}), + (this._plugins = new Fn()), + (this.$proxies = {}), + (this._hiddenIndices = {}), + (this.attached = !1), + (this._animationsDisabled = void 0), + (this.$context = void 0), + (this._doResize = i(() => this.update("resize"), l.resizeDelay || 0)), + (io[n.id] = n), + c && h + ? (a.listen(n, "complete", Jn), + a.listen(n, "progress", to), + n._initialize(), + n.attached && n.update()) + : console.error( + "Failed to create chart: can't acquire context from the given item" + ); + } + get aspectRatio() { + const { + options: { aspectRatio: t, maintainAspectRatio: e }, + width: i, + height: n, + _aspectRatio: o, + } = this; + return $(t) ? (e && o ? o : n ? i / n : null) : t; + } + get data() { + return this.config.data; + } + set data(t) { + this.config.data = t; + } + get options() { + return this._options; + } + set options(t) { + this.config.options = t; + } + _initialize() { + const t = this; + return ( + t.notifyPlugins("beforeInit"), + t.options.responsive ? t.resize() : we(t, t.options.devicePixelRatio), + t.bindEvents(), + t.notifyPlugins("afterInit"), + t + ); + } + clear() { + return qt(this.canvas, this.ctx), this; + } + stop() { + return a.stop(this), this; + } + resize(t, e) { + a.running(this) + ? (this._resizeBeforeDraw = { width: t, height: e }) + : this._resize(t, e); + } + _resize(t, e) { + const i = this, + n = i.options, + o = i.canvas, + s = n.maintainAspectRatio && i.aspectRatio, + a = i.platform.getMaximumSize(o, t, e, s), + r = n.devicePixelRatio || i.platform.getDevicePixelRatio(); + (i.width = a.width), + (i.height = a.height), + (i._aspectRatio = i.aspectRatio), + we(i, r, !0) && + (i.notifyPlugins("resize", { size: a }), + Q(n.onResize, [i, a], i), + i.attached && i._doResize() && i.render()); + } + ensureScalesHaveIDs() { + J(this.options.scales || {}, (t, e) => { + t.id = e; + }); + } + buildOrUpdateScales() { + const t = this, + e = t.options, + i = e.scales, + n = t.scales, + o = Object.keys(n).reduce((t, e) => ((t[e] = !1), t), {}); + let s = []; + i && + (s = s.concat( + Object.keys(i).map((t) => { + const e = i[t], + n = Nn(t, e), + o = "r" === n, + s = "x" === n; + return { + options: e, + dposition: o ? "chartArea" : s ? "bottom" : "left", + dtype: o ? "radialLinear" : s ? "category" : "linear", + }; + }) + )), + J(s, (i) => { + const s = i.options, + a = s.id, + r = Nn(a, s), + l = K(s.type, i.dtype); + (void 0 !== s.position && Zn(s.position, r) === Zn(i.dposition)) || + (s.position = i.dposition), + (o[a] = !0); + let c = null; + if (a in n && n[a].type === l) c = n[a]; + else { + (c = new (zn.getScale(l))({ + id: a, + type: l, + ctx: t.ctx, + chart: t, + })), + (n[c.id] = c); + } + c.init(s, e); + }), + J(o, (t, e) => { + t || delete n[e]; + }), + J(n, (e) => { + ti.configure(t, e, e.options), ti.addBox(t, e); + }); + } + _updateMetasets() { + const t = this, + e = t._metasets, + i = t.data.datasets.length, + n = e.length; + if ((e.sort((t, e) => t.index - e.index), n > i)) { + for (let e = i; e < n; ++e) t._destroyDatasetMeta(e); + e.splice(i, n - i); + } + t._sortedMetasets = e.slice(0).sort(Qn("order", "index")); + } + _removeUnreferencedMetasets() { + const t = this, + { + _metasets: e, + data: { datasets: i }, + } = t; + e.length > i.length && delete t._stacks, + e.forEach((e, n) => { + 0 === i.filter((t) => t === e._dataset).length && + t._destroyDatasetMeta(n); + }); + } + buildOrUpdateControllers() { + const t = this, + e = [], + i = t.data.datasets; + let n, o; + for (t._removeUnreferencedMetasets(), n = 0, o = i.length; n < o; n++) { + const o = i[n]; + let s = t.getDatasetMeta(n); + const a = o.type || t.config.type; + if ( + (s.type && + s.type !== a && + (t._destroyDatasetMeta(n), (s = t.getDatasetMeta(n))), + (s.type = a), + (s.indexAxis = o.indexAxis || Wn(a, t.options)), + (s.order = o.order || 0), + (s.index = n), + (s.label = "" + o.label), + (s.visible = t.isDatasetVisible(n)), + s.controller) + ) + s.controller.updateIndex(n), s.controller.linkScales(); + else { + const i = zn.getController(a), + { datasetElementType: o, dataElementType: r } = xt.datasets[a]; + Object.assign(i.prototype, { + dataElementType: zn.getElement(r), + datasetElementType: o && zn.getElement(o), + }), + (s.controller = new i(t, n)), + e.push(s.controller); + } + } + return t._updateMetasets(), e; + } + _resetElements() { + const t = this; + J( + t.data.datasets, + (e, i) => { + t.getDatasetMeta(i).controller.reset(); + }, + t + ); + } + reset() { + this._resetElements(), this.notifyPlugins("reset"); + } + update(t) { + const e = this, + i = e.config; + i.update(), + (e._options = i.createResolver(i.chartOptionScopes(), e.getContext())), + J(e.scales, (t) => { + ti.removeBox(e, t); + }); + const n = (e._animationsDisabled = !e.options.animation); + e.ensureScalesHaveIDs(), e.buildOrUpdateScales(); + const o = new Set(Object.keys(e._listeners)), + s = new Set(e.options.events); + if ( + ((ut(o, s) && !!this._responsiveListeners === e.options.responsive) || + (e.unbindEvents(), e.bindEvents()), + e._plugins.invalidate(), + !1 === e.notifyPlugins("beforeUpdate", { mode: t, cancelable: !0 })) + ) + return; + const a = e.buildOrUpdateControllers(); + e.notifyPlugins("beforeElementsUpdate"); + let r = 0; + for (let t = 0, i = e.data.datasets.length; t < i; t++) { + const { controller: i } = e.getDatasetMeta(t), + o = !n && -1 === a.indexOf(i); + i.buildOrUpdateElements(o), (r = Math.max(+i.getMaxOverflow(), r)); + } + (e._minPadding = r), + e._updateLayout(r), + n || + J(a, (t) => { + t.reset(); + }), + e._updateDatasets(t), + e.notifyPlugins("afterUpdate", { mode: t }), + e._layers.sort(Qn("z", "_idx")), + e._lastEvent && e._eventHandler(e._lastEvent, !0), + e.render(); + } + _updateLayout(t) { + const e = this; + if (!1 === e.notifyPlugins("beforeLayout", { cancelable: !0 })) return; + ti.update(e, e.width, e.height, t); + const i = e.chartArea, + n = i.width <= 0 || i.height <= 0; + (e._layers = []), + J( + e.boxes, + (t) => { + (n && "chartArea" === t.position) || + (t.configure && t.configure(), e._layers.push(...t._layers())); + }, + e + ), + e._layers.forEach((t, e) => { + t._idx = e; + }), + e.notifyPlugins("afterLayout"); + } + _updateDatasets(t) { + const e = this, + i = "function" == typeof t; + if ( + !1 !== + e.notifyPlugins("beforeDatasetsUpdate", { mode: t, cancelable: !0 }) + ) { + for (let n = 0, o = e.data.datasets.length; n < o; ++n) + e._updateDataset(n, i ? t({ datasetIndex: n }) : t); + e.notifyPlugins("afterDatasetsUpdate", { mode: t }); + } + } + _updateDataset(t, e) { + const i = this, + n = i.getDatasetMeta(t), + o = { meta: n, index: t, mode: e, cancelable: !0 }; + !1 !== i.notifyPlugins("beforeDatasetUpdate", o) && + (n.controller._update(e), + (o.cancelable = !1), + i.notifyPlugins("afterDatasetUpdate", o)); + } + render() { + const t = this; + !1 !== t.notifyPlugins("beforeRender", { cancelable: !0 }) && + (a.has(t) + ? t.attached && !a.running(t) && a.start(t) + : (t.draw(), Jn({ chart: t }))); + } + draw() { + const t = this; + let e; + if (t._resizeBeforeDraw) { + const { width: e, height: i } = t._resizeBeforeDraw; + t._resize(e, i), (t._resizeBeforeDraw = null); + } + if ((t.clear(), t.width <= 0 || t.height <= 0)) return; + if (!1 === t.notifyPlugins("beforeDraw", { cancelable: !0 })) return; + const i = t._layers; + for (e = 0; e < i.length && i[e].z <= 0; ++e) i[e].draw(t.chartArea); + for (t._drawDatasets(); e < i.length; ++e) i[e].draw(t.chartArea); + t.notifyPlugins("afterDraw"); + } + _getSortedDatasetMetas(t) { + const e = this._sortedMetasets, + i = []; + let n, o; + for (n = 0, o = e.length; n < o; ++n) { + const o = e[n]; + (t && !o.visible) || i.push(o); + } + return i; + } + getSortedVisibleDatasetMetas() { + return this._getSortedDatasetMetas(!0); + } + _drawDatasets() { + const t = this; + if (!1 === t.notifyPlugins("beforeDatasetsDraw", { cancelable: !0 })) + return; + const e = t.getSortedVisibleDatasetMetas(); + for (let i = e.length - 1; i >= 0; --i) t._drawDataset(e[i]); + t.notifyPlugins("afterDatasetsDraw"); + } + _drawDataset(t) { + const e = this, + i = e.ctx, + n = t._clip, + o = !n.disabled, + s = e.chartArea, + a = { meta: t, index: t.index, cancelable: !0 }; + !1 !== e.notifyPlugins("beforeDatasetDraw", a) && + (o && + Zt(i, { + left: !1 === n.left ? 0 : s.left - n.left, + right: !1 === n.right ? e.width : s.right + n.right, + top: !1 === n.top ? 0 : s.top - n.top, + bottom: !1 === n.bottom ? e.height : s.bottom + n.bottom, + }), + t.controller.draw(), + o && Qt(i), + (a.cancelable = !1), + e.notifyPlugins("afterDatasetDraw", a)); + } + getElementsAtEventForMode(t, e, i, n) { + const o = Ae.modes[e]; + return "function" == typeof o ? o(this, t, i, n) : []; + } + getDatasetMeta(t) { + const e = this.data.datasets[t], + i = this._metasets; + let n = i.filter((t) => t && t._dataset === e).pop(); + return ( + n || + ((n = { + type: null, + data: [], + dataset: null, + controller: null, + hidden: null, + xAxisID: null, + yAxisID: null, + order: (e && e.order) || 0, + index: t, + _dataset: e, + _parsed: [], + _sorted: !1, + }), + i.push(n)), + n + ); + } + getContext() { + return this.$context || (this.$context = { chart: this, type: "chart" }); + } + getVisibleDatasetCount() { + return this.getSortedVisibleDatasetMetas().length; + } + isDatasetVisible(t) { + const e = this.data.datasets[t]; + if (!e) return !1; + const i = this.getDatasetMeta(t); + return "boolean" == typeof i.hidden ? !i.hidden : !e.hidden; + } + setDatasetVisibility(t, e) { + this.getDatasetMeta(t).hidden = !e; + } + toggleDataVisibility(t) { + this._hiddenIndices[t] = !this._hiddenIndices[t]; + } + getDataVisibility(t) { + return !this._hiddenIndices[t]; + } + _updateVisibility(t, e, i) { + const n = this, + o = i ? "show" : "hide", + s = n.getDatasetMeta(t), + a = s.controller._resolveAnimations(void 0, o); + ht(e) + ? ((s.data[e].hidden = !i), n.update()) + : (n.setDatasetVisibility(t, i), + a.update(s, { visible: i }), + n.update((e) => (e.datasetIndex === t ? o : void 0))); + } + hide(t, e) { + this._updateVisibility(t, e, !1); + } + show(t, e) { + this._updateVisibility(t, e, !0); + } + _destroyDatasetMeta(t) { + const e = this, + i = e._metasets && e._metasets[t]; + i && i.controller && (i.controller._destroy(), delete e._metasets[t]); + } + destroy() { + const t = this, + { canvas: e, ctx: i } = t; + let n, o; + for (t.stop(), a.remove(t), n = 0, o = t.data.datasets.length; n < o; ++n) + t._destroyDatasetMeta(n); + t.config.clearCache(), + e && + (t.unbindEvents(), + qt(e, i), + t.platform.releaseContext(i), + (t.canvas = null), + (t.ctx = null)), + t.notifyPlugins("destroy"), + delete io[t.id]; + } + toBase64Image(...t) { + return this.canvas.toDataURL(...t); + } + bindEvents() { + this.bindUserEvents(), + this.options.responsive + ? this.bindResponsiveEvents() + : (this.attached = !0); + } + bindUserEvents() { + const t = this, + e = t._listeners, + i = t.platform, + n = function (e, i, n) { + (e.offsetX = i), (e.offsetY = n), t._eventHandler(e); + }; + J(t.options.events, (o) => + ((n, o) => { + i.addEventListener(t, n, o), (e[n] = o); + })(o, n) + ); + } + bindResponsiveEvents() { + const t = this; + t._responsiveListeners || (t._responsiveListeners = {}); + const e = t._responsiveListeners, + i = t.platform, + n = (n, o) => { + i.addEventListener(t, n, o), (e[n] = o); + }, + o = (n, o) => { + e[n] && (i.removeEventListener(t, n, o), delete e[n]); + }, + s = (e, i) => { + t.canvas && t.resize(e, i); + }; + let a; + const r = () => { + o("attach", r), + (t.attached = !0), + t.resize(), + n("resize", s), + n("detach", a); + }; + (a = () => { + (t.attached = !1), o("resize", s), n("attach", r); + }), + i.isAttached(t.canvas) ? r() : a(); + } + unbindEvents() { + const t = this; + J(t._listeners, (e, i) => { + t.platform.removeEventListener(t, i, e); + }), + (t._listeners = {}), + J(t._responsiveListeners, (e, i) => { + t.platform.removeEventListener(t, i, e); + }), + (t._responsiveListeners = void 0); + } + updateHoverStyle(t, e, i) { + const n = i ? "set" : "remove"; + let o, s, a, r; + for ( + "dataset" === e && + ((o = this.getDatasetMeta(t[0].datasetIndex)), + o.controller["_" + n + "DatasetHoverStyle"]()), + a = 0, + r = t.length; + a < r; + ++a + ) { + s = t[a]; + const e = s && this.getDatasetMeta(s.datasetIndex).controller; + e && e[n + "HoverStyle"](s.element, s.datasetIndex, s.index); + } + } + getActiveElements() { + return this._active || []; + } + setActiveElements(t) { + const e = this, + i = e._active || [], + n = t.map(({ datasetIndex: t, index: i }) => { + const n = e.getDatasetMeta(t); + if (!n) throw new Error("No dataset found at index " + t); + return { datasetIndex: t, element: n.data[i], index: i }; + }); + !tt(n, i) && ((e._active = n), e._updateHoverStyles(n, i)); + } + notifyPlugins(t, e, i) { + return this._plugins.notify(this, t, e, i); + } + _updateHoverStyles(t, e, i) { + const n = this, + o = n.options.hover, + s = (t, e) => + t.filter( + (t) => + !e.some( + (e) => t.datasetIndex === e.datasetIndex && t.index === e.index + ) + ), + a = s(e, t), + r = i ? t : s(t, e); + a.length && n.updateHoverStyle(a, o.mode, !1), + r.length && o.mode && n.updateHoverStyle(r, o.mode, !0); + } + _eventHandler(t, e) { + const i = this, + n = { event: t, replay: e, cancelable: !0 }, + o = (e) => (e.options.events || this.options.events).includes(t.type); + if (!1 === i.notifyPlugins("beforeEvent", n, o)) return; + const s = i._handleEvent(t, e); + return ( + (n.cancelable = !1), + i.notifyPlugins("afterEvent", n, o), + (s || n.changed) && i.render(), + i + ); + } + _handleEvent(t, e) { + const i = this, + { _active: n = [], options: o } = i, + s = o.hover, + a = e; + let r = [], + l = !1, + c = null; + return ( + "mouseout" !== t.type && + ((r = i.getElementsAtEventForMode(t, s.mode, s, a)), + (c = "click" === t.type ? i._lastEvent : t)), + (i._lastEvent = null), + Gt(t, i.chartArea, i._minPadding) && + (Q(o.onHover, [t, r, i], i), + ("mouseup" !== t.type && + "click" !== t.type && + "contextmenu" !== t.type) || + Q(o.onClick, [t, r, i], i)), + (l = !tt(r, n)), + (l || e) && ((i._active = r), i._updateHoverStyles(r, n, e)), + (i._lastEvent = c), + l + ); + } + } + const so = () => J(oo.instances, (t) => t._plugins.invalidate()), + ao = !0; + function ro() { + throw new Error( + "This method is not implemented: Check that a complete date adapter is provided." + ); + } + Object.defineProperties(oo, { + defaults: { enumerable: ao, value: xt }, + instances: { enumerable: ao, value: io }, + overrides: { enumerable: ao, value: ft }, + registry: { enumerable: ao, value: zn }, + version: { enumerable: ao, value: "3.5.1" }, + getChart: { enumerable: ao, value: no }, + register: { + enumerable: ao, + value: (...t) => { + zn.add(...t), so(); + }, + }, + unregister: { + enumerable: ao, + value: (...t) => { + zn.remove(...t), so(); + }, + }, + }); + class lo { + constructor(t) { + this.options = t || {}; + } + formats() { + return ro(); + } + parse(t, e) { + return ro(); + } + format(t, e) { + return ro(); + } + add(t, e, i) { + return ro(); + } + diff(t, e, i) { + return ro(); + } + startOf(t, e, i) { + return ro(); + } + endOf(t, e) { + return ro(); + } + } + lo.override = function (t) { + Object.assign(lo.prototype, t); + }; + var co = { _date: lo }; + function ho(t) { + const e = (function (t) { + if (!t._cache.$bar) { + const e = t.getMatchingVisibleMetas("bar"); + let i = []; + for (let n = 0, o = e.length; n < o; n++) + i = i.concat(e[n].controller.getAllParsedValues(t)); + t._cache.$bar = de(i.sort((t, e) => t - e)); + } + return t._cache.$bar; + })(t); + let i, + n, + o, + s, + a = t._length; + const r = () => { + 32767 !== o && + -32768 !== o && + (ht(s) && (a = Math.min(a, Math.abs(o - s) || a)), (s = o)); + }; + for (i = 0, n = e.length; i < n; ++i) (o = t.getPixelForValue(e[i])), r(); + for (s = void 0, i = 0, n = t.ticks.length; i < n; ++i) + (o = t.getPixelForTick(i)), r(); + return a; + } + function uo(t, e, i, n) { + return ( + Y(t) + ? (function (t, e, i, n) { + const o = i.parse(t[0], n), + s = i.parse(t[1], n), + a = Math.min(o, s), + r = Math.max(o, s); + let l = a, + c = r; + Math.abs(a) > Math.abs(r) && ((l = r), (c = a)), + (e[i.axis] = c), + (e._custom = { + barStart: l, + barEnd: c, + start: o, + end: s, + min: a, + max: r, + }); + })(t, e, i, n) + : (e[i.axis] = i.parse(t, n)), + e + ); + } + function fo(t, e, i, n) { + const o = t.iScale, + s = t.vScale, + a = o.getLabels(), + r = o === s, + l = []; + let c, h, d, u; + for (c = i, h = i + n; c < h; ++c) + (u = e[c]), + (d = {}), + (d[o.axis] = r || o.parse(a[c], c)), + l.push(uo(u, d, s, c)); + return l; + } + function go(t) { + return t && void 0 !== t.barStart && void 0 !== t.barEnd; + } + function po(t, e, i, n) { + let o = e.borderSkipped; + const s = {}; + if (!o) return void (t.borderSkipped = s); + const { + start: a, + end: r, + reverse: l, + top: c, + bottom: h, + } = (function (t) { + let e, i, n, o, s; + return ( + t.horizontal + ? ((e = t.base > t.x), (i = "left"), (n = "right")) + : ((e = t.base < t.y), (i = "bottom"), (n = "top")), + e ? ((o = "end"), (s = "start")) : ((o = "start"), (s = "end")), + { start: i, end: n, reverse: e, top: o, bottom: s } + ); + })(t); + "middle" === o && + i && + ((t.enableBorderRadius = !0), + (i._top || 0) === n + ? (o = c) + : (i._bottom || 0) === n + ? (o = h) + : ((s[mo(h, a, r, l)] = !0), (o = c))), + (s[mo(o, a, r, l)] = !0), + (t.borderSkipped = s); + } + function mo(t, e, i, n) { + var o, s, a; + return ( + n + ? ((a = i), + (t = xo((t = (o = t) === (s = e) ? a : o === a ? s : o), i, e))) + : (t = xo(t, e, i)), + t + ); + } + function xo(t, e, i) { + return "start" === t ? e : "end" === t ? i : t; + } + class bo extends wn { + parsePrimitiveData(t, e, i, n) { + return fo(t, e, i, n); + } + parseArrayData(t, e, i, n) { + return fo(t, e, i, n); + } + parseObjectData(t, e, i, n) { + const { iScale: o, vScale: s } = t, + { xAxisKey: a = "x", yAxisKey: r = "y" } = this._parsing, + l = "x" === o.axis ? a : r, + c = "x" === s.axis ? a : r, + h = []; + let d, u, f, g; + for (d = i, u = i + n; d < u; ++d) + (g = e[d]), + (f = {}), + (f[o.axis] = o.parse(lt(g, l), d)), + h.push(uo(lt(g, c), f, s, d)); + return h; + } + updateRangeFromParsed(t, e, i, n) { + super.updateRangeFromParsed(t, e, i, n); + const o = i._custom; + o && + e === this._cachedMeta.vScale && + ((t.min = Math.min(t.min, o.min)), (t.max = Math.max(t.max, o.max))); + } + getMaxOverflow() { + return 0; + } + getLabelAndValue(t) { + const e = this._cachedMeta, + { iScale: i, vScale: n } = e, + o = this.getParsed(t), + s = o._custom, + a = go(s) + ? "[" + s.start + ", " + s.end + "]" + : "" + n.getLabelForValue(o[n.axis]); + return { label: "" + i.getLabelForValue(o[i.axis]), value: a }; + } + initialize() { + const t = this; + (t.enableOptionSharing = !0), super.initialize(); + t._cachedMeta.stack = t.getDataset().stack; + } + update(t) { + const e = this._cachedMeta; + this.updateElements(e.data, 0, e.data.length, t); + } + updateElements(t, e, i, n) { + const o = this, + s = "reset" === n, + { + index: a, + _cachedMeta: { vScale: r }, + } = o, + l = r.getBasePixel(), + c = r.isHorizontal(), + h = o._getRuler(), + d = o.resolveDataElementOptions(e, n), + u = o.getSharedOptions(d), + f = o.includeOptions(n, u); + o.updateSharedOptions(u, n, d); + for (let d = e; d < e + i; d++) { + const e = o.getParsed(d), + i = + s || $(e[r.axis]) + ? { base: l, head: l } + : o._calculateBarValuePixels(d), + g = o._calculateBarIndexPixels(d, h), + p = (e._stacks || {})[r.axis], + m = { + horizontal: c, + base: i.base, + enableBorderRadius: + !p || go(e._custom) || a === p._top || a === p._bottom, + x: c ? i.head : g.center, + y: c ? g.center : i.head, + height: c ? g.size : Math.abs(i.size), + width: c ? Math.abs(i.size) : g.size, + }; + f && + (m.options = + u || o.resolveDataElementOptions(d, t[d].active ? "active" : n)), + po(m, m.options || t[d].options, p, a), + o.updateElement(t[d], d, m, n); + } + } + _getStacks(t, e) { + const i = this._cachedMeta.iScale, + n = i.getMatchingVisibleMetas(this._type), + o = i.options.stacked, + s = n.length, + a = []; + let r, l; + for (r = 0; r < s; ++r) + if (((l = n[r]), l.controller.options.grouped)) { + if (void 0 !== e) { + const t = + l.controller.getParsed(e)[l.controller._cachedMeta.vScale.axis]; + if ($(t) || isNaN(t)) continue; + } + if ( + ((!1 === o || + -1 === a.indexOf(l.stack) || + (void 0 === o && void 0 === l.stack)) && + a.push(l.stack), + l.index === t) + ) + break; + } + return a.length || a.push(void 0), a; + } + _getStackCount(t) { + return this._getStacks(void 0, t).length; + } + _getStackIndex(t, e, i) { + const n = this._getStacks(t, i), + o = void 0 !== e ? n.indexOf(e) : -1; + return -1 === o ? n.length - 1 : o; + } + _getRuler() { + const t = this, + e = t.options, + i = t._cachedMeta, + n = i.iScale, + o = []; + let s, a; + for (s = 0, a = i.data.length; s < a; ++s) + o.push(n.getPixelForValue(t.getParsed(s)[n.axis], s)); + const r = e.barThickness; + return { + min: r || ho(n), + pixels: o, + start: n._startPixel, + end: n._endPixel, + stackCount: t._getStackCount(), + scale: n, + grouped: e.grouped, + ratio: r ? 1 : e.categoryPercentage * e.barPercentage, + }; + } + _calculateBarValuePixels(t) { + const e = this, + { + _cachedMeta: { vScale: i, _stacked: n }, + options: { base: o, minBarLength: s }, + } = e, + a = o || 0, + r = e.getParsed(t), + l = r._custom, + c = go(l); + let h, + d, + u = r[i.axis], + f = 0, + g = n ? e.applyStack(i, r, n) : u; + g !== u && ((f = g - u), (g = u)), + c && + ((u = l.barStart), + (g = l.barEnd - l.barStart), + 0 !== u && Dt(u) !== Dt(l.barEnd) && (f = 0), + (f += u)); + const p = $(o) || c ? f : o; + let m = i.getPixelForValue(p); + if ( + ((h = e.chart.getDataVisibility(t) ? i.getPixelForValue(f + g) : m), + (d = h - m), + Math.abs(d) < s && + ((d = + (function (t, e, i) { + return 0 !== t + ? Dt(t) + : (e.isHorizontal() ? 1 : -1) * (e.min >= i ? 1 : -1); + })(d, i, a) * s), + u === a && (m -= d / 2), + (h = m + d)), + m === i.getPixelForValue(a)) + ) { + const t = (Dt(d) * i.getLineWidthForValue(a)) / 2; + (m += t), (d -= t); + } + return { size: d, base: m, head: h, center: h + d / 2 }; + } + _calculateBarIndexPixels(t, e) { + const i = this, + n = e.scale, + o = i.options, + s = o.skipNull, + a = K(o.maxBarThickness, 1 / 0); + let r, l; + if (e.grouped) { + const n = s ? i._getStackCount(t) : e.stackCount, + c = + "flex" === o.barThickness + ? (function (t, e, i, n) { + const o = e.pixels, + s = o[t]; + let a = t > 0 ? o[t - 1] : null, + r = t < o.length - 1 ? o[t + 1] : null; + const l = i.categoryPercentage; + null === a && + (a = s - (null === r ? e.end - e.start : r - s)), + null === r && (r = s + s - a); + const c = s - ((s - Math.min(a, r)) / 2) * l; + return { + chunk: ((Math.abs(r - a) / 2) * l) / n, + ratio: i.barPercentage, + start: c, + }; + })(t, e, o, n) + : (function (t, e, i, n) { + const o = i.barThickness; + let s, a; + return ( + $(o) + ? ((s = e.min * i.categoryPercentage), + (a = i.barPercentage)) + : ((s = o * n), (a = 1)), + { chunk: s / n, ratio: a, start: e.pixels[t] - s / 2 } + ); + })(t, e, o, n), + h = i._getStackIndex(i.index, i._cachedMeta.stack, s ? t : void 0); + (r = c.start + c.chunk * h + c.chunk / 2), + (l = Math.min(a, c.chunk * c.ratio)); + } else (r = n.getPixelForValue(i.getParsed(t)[n.axis], t)), (l = Math.min(a, e.min * e.ratio)); + return { base: r - l / 2, head: r + l / 2, center: r, size: l }; + } + draw() { + const t = this, + e = t._cachedMeta, + i = e.vScale, + n = e.data, + o = n.length; + let s = 0; + for (; s < o; ++s) null !== t.getParsed(s)[i.axis] && n[s].draw(t._ctx); + } + } + (bo.id = "bar"), + (bo.defaults = { + datasetElementType: !1, + dataElementType: "bar", + categoryPercentage: 0.8, + barPercentage: 0.9, + grouped: !0, + animations: { + numbers: { + type: "number", + properties: ["x", "y", "base", "width", "height"], + }, + }, + }), + (bo.overrides = { + scales: { + _index_: { type: "category", offset: !0, grid: { offset: !0 } }, + _value_: { type: "linear", beginAtZero: !0 }, + }, + }); + class _o extends wn { + initialize() { + (this.enableOptionSharing = !0), super.initialize(); + } + parseObjectData(t, e, i, n) { + const { xScale: o, yScale: s } = t, + { xAxisKey: a = "x", yAxisKey: r = "y" } = this._parsing, + l = []; + let c, h, d; + for (c = i, h = i + n; c < h; ++c) + (d = e[c]), + l.push({ + x: o.parse(lt(d, a), c), + y: s.parse(lt(d, r), c), + _custom: d && d.r && +d.r, + }); + return l; + } + getMaxOverflow() { + const { data: t, _parsed: e } = this._cachedMeta; + let i = 0; + for (let n = t.length - 1; n >= 0; --n) + i = Math.max(i, t[n].size() / 2, e[n]._custom); + return i > 0 && i; + } + getLabelAndValue(t) { + const e = this._cachedMeta, + { xScale: i, yScale: n } = e, + o = this.getParsed(t), + s = i.getLabelForValue(o.x), + a = n.getLabelForValue(o.y), + r = o._custom; + return { + label: e.label, + value: "(" + s + ", " + a + (r ? ", " + r : "") + ")", + }; + } + update(t) { + const e = this._cachedMeta.data; + this.updateElements(e, 0, e.length, t); + } + updateElements(t, e, i, n) { + const o = this, + s = "reset" === n, + { iScale: a, vScale: r } = o._cachedMeta, + l = o.resolveDataElementOptions(e, n), + c = o.getSharedOptions(l), + h = o.includeOptions(n, c), + d = a.axis, + u = r.axis; + for (let l = e; l < e + i; l++) { + const e = t[l], + i = !s && o.getParsed(l), + c = {}, + f = (c[d] = s ? a.getPixelForDecimal(0.5) : a.getPixelForValue(i[d])), + g = (c[u] = s ? r.getBasePixel() : r.getPixelForValue(i[u])); + (c.skip = isNaN(f) || isNaN(g)), + h && + ((c.options = o.resolveDataElementOptions( + l, + e.active ? "active" : n + )), + s && (c.options.radius = 0)), + o.updateElement(e, l, c, n); + } + o.updateSharedOptions(c, n, l); + } + resolveDataElementOptions(t, e) { + const i = this.getParsed(t); + let n = super.resolveDataElementOptions(t, e); + n.$shared && (n = Object.assign({}, n, { $shared: !1 })); + const o = n.radius; + return ( + "active" !== e && (n.radius = 0), (n.radius += K(i && i._custom, o)), n + ); + } + } + (_o.id = "bubble"), + (_o.defaults = { + datasetElementType: !1, + dataElementType: "point", + animations: { + numbers: { + type: "number", + properties: ["x", "y", "borderWidth", "radius"], + }, + }, + }), + (_o.overrides = { + scales: { x: { type: "linear" }, y: { type: "linear" } }, + plugins: { tooltip: { callbacks: { title: () => "" } } }, + }); + class yo extends wn { + constructor(t, e) { + super(t, e), + (this.enableOptionSharing = !0), + (this.innerRadius = void 0), + (this.outerRadius = void 0), + (this.offsetX = void 0), + (this.offsetY = void 0); + } + linkScales() {} + parse(t, e) { + const i = this.getDataset().data, + n = this._cachedMeta; + let o, s; + for (o = t, s = t + e; o < s; ++o) n._parsed[o] = +i[o]; + } + _getRotation() { + return Et(this.options.rotation - 90); + } + _getCircumference() { + return Et(this.options.circumference); + } + _getRotationExtents() { + let t = _t, + e = -_t; + const i = this; + for (let n = 0; n < i.chart.data.datasets.length; ++n) + if (i.chart.isDatasetVisible(n)) { + const o = i.chart.getDatasetMeta(n).controller, + s = o._getRotation(), + a = o._getCircumference(); + (t = Math.min(t, s)), (e = Math.max(e, s + a)); + } + return { rotation: t, circumference: e - t }; + } + update(t) { + const e = this, + i = e.chart, + { chartArea: n } = i, + o = e._cachedMeta, + s = o.data, + a = e.getMaxBorderWidth() + e.getMaxOffset(s) + e.options.spacing, + r = Math.max((Math.min(n.width, n.height) - a) / 2, 0), + l = Math.min(G(e.options.cutout, r), 1), + c = e._getRingWeight(e.index), + { circumference: h, rotation: d } = e._getRotationExtents(), + { + ratioX: u, + ratioY: f, + offsetX: g, + offsetY: p, + } = (function (t, e, i) { + let n = 1, + o = 1, + s = 0, + a = 0; + if (e < _t) { + const r = t, + l = r + e, + c = Math.cos(r), + h = Math.sin(r), + d = Math.cos(l), + u = Math.sin(l), + f = (t, e, n) => + Nt(t, r, l, !0) ? 1 : Math.max(e, e * i, n, n * i), + g = (t, e, n) => + Nt(t, r, l, !0) ? -1 : Math.min(e, e * i, n, n * i), + p = f(0, c, d), + m = f(Mt, h, u), + x = g(bt, c, d), + b = g(bt + Mt, h, u); + (n = (p - x) / 2), + (o = (m - b) / 2), + (s = -(p + x) / 2), + (a = -(m + b) / 2); + } + return { ratioX: n, ratioY: o, offsetX: s, offsetY: a }; + })(d, h, l), + m = (n.width - a) / u, + x = (n.height - a) / f, + b = Math.max(Math.min(m, x) / 2, 0), + _ = Z(e.options.radius, b), + y = (_ - Math.max(_ * l, 0)) / e._getVisibleDatasetWeightTotal(); + (e.offsetX = g * _), + (e.offsetY = p * _), + (o.total = e.calculateTotal()), + (e.outerRadius = _ - y * e._getRingWeightOffset(e.index)), + (e.innerRadius = Math.max(e.outerRadius - y * c, 0)), + e.updateElements(s, 0, s.length, t); + } + _circumference(t, e) { + const i = this, + n = i.options, + o = i._cachedMeta, + s = i._getCircumference(); + return (e && n.animation.animateRotate) || + !this.chart.getDataVisibility(t) || + null === o._parsed[t] || + o.data[t].hidden + ? 0 + : i.calculateCircumference((o._parsed[t] * s) / _t); + } + updateElements(t, e, i, n) { + const o = this, + s = "reset" === n, + a = o.chart, + r = a.chartArea, + l = a.options.animation, + c = (r.left + r.right) / 2, + h = (r.top + r.bottom) / 2, + d = s && l.animateScale, + u = d ? 0 : o.innerRadius, + f = d ? 0 : o.outerRadius, + g = o.resolveDataElementOptions(e, n), + p = o.getSharedOptions(g), + m = o.includeOptions(n, p); + let x, + b = o._getRotation(); + for (x = 0; x < e; ++x) b += o._circumference(x, s); + for (x = e; x < e + i; ++x) { + const e = o._circumference(x, s), + i = t[x], + a = { + x: c + o.offsetX, + y: h + o.offsetY, + startAngle: b, + endAngle: b + e, + circumference: e, + outerRadius: f, + innerRadius: u, + }; + m && + (a.options = + p || o.resolveDataElementOptions(x, i.active ? "active" : n)), + (b += e), + o.updateElement(i, x, a, n); + } + o.updateSharedOptions(p, n, g); + } + calculateTotal() { + const t = this._cachedMeta, + e = t.data; + let i, + n = 0; + for (i = 0; i < e.length; i++) { + const o = t._parsed[i]; + null === o || + isNaN(o) || + !this.chart.getDataVisibility(i) || + e[i].hidden || + (n += Math.abs(o)); + } + return n; + } + calculateCircumference(t) { + const e = this._cachedMeta.total; + return e > 0 && !isNaN(t) ? _t * (Math.abs(t) / e) : 0; + } + getLabelAndValue(t) { + const e = this._cachedMeta, + i = this.chart, + n = i.data.labels || [], + o = Oi(e._parsed[t], i.options.locale); + return { label: n[t] || "", value: o }; + } + getMaxBorderWidth(t) { + const e = this; + let i = 0; + const n = e.chart; + let o, s, a, r, l; + if (!t) + for (o = 0, s = n.data.datasets.length; o < s; ++o) + if (n.isDatasetVisible(o)) { + (a = n.getDatasetMeta(o)), + (t = a.data), + (r = a.controller), + r !== e && r.configure(); + break; + } + if (!t) return 0; + for (o = 0, s = t.length; o < s; ++o) + (l = r.resolveDataElementOptions(o)), + "inner" !== l.borderAlign && + (i = Math.max(i, l.borderWidth || 0, l.hoverBorderWidth || 0)); + return i; + } + getMaxOffset(t) { + let e = 0; + for (let i = 0, n = t.length; i < n; ++i) { + const t = this.resolveDataElementOptions(i); + e = Math.max(e, t.offset || 0, t.hoverOffset || 0); + } + return e; + } + _getRingWeightOffset(t) { + let e = 0; + for (let i = 0; i < t; ++i) + this.chart.isDatasetVisible(i) && (e += this._getRingWeight(i)); + return e; + } + _getRingWeight(t) { + return Math.max(K(this.chart.data.datasets[t].weight, 1), 0); + } + _getVisibleDatasetWeightTotal() { + return this._getRingWeightOffset(this.chart.data.datasets.length) || 1; + } + } + (yo.id = "doughnut"), + (yo.defaults = { + datasetElementType: !1, + dataElementType: "arc", + animation: { animateRotate: !0, animateScale: !1 }, + animations: { + numbers: { + type: "number", + properties: [ + "circumference", + "endAngle", + "innerRadius", + "outerRadius", + "startAngle", + "x", + "y", + "offset", + "borderWidth", + "spacing", + ], + }, + }, + cutout: "50%", + rotation: 0, + circumference: 360, + radius: "100%", + spacing: 0, + indexAxis: "r", + }), + (yo.descriptors = { + _scriptable: (t) => "spacing" !== t, + _indexable: (t) => "spacing" !== t, + }), + (yo.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(t) { + const e = t.data; + if (e.labels.length && e.datasets.length) { + const { + labels: { pointStyle: i }, + } = t.legend.options; + return e.labels.map((e, n) => { + const o = t.getDatasetMeta(0).controller.getStyle(n); + return { + text: e, + fillStyle: o.backgroundColor, + strokeStyle: o.borderColor, + lineWidth: o.borderWidth, + pointStyle: i, + hidden: !t.getDataVisibility(n), + index: n, + }; + }); + } + return []; + }, + }, + onClick(t, e, i) { + i.chart.toggleDataVisibility(e.index), i.chart.update(); + }, + }, + tooltip: { + callbacks: { + title: () => "", + label(t) { + let e = t.label; + const i = ": " + t.formattedValue; + return Y(e) ? ((e = e.slice()), (e[0] += i)) : (e += i), e; + }, + }, + }, + }, + }); + class vo extends wn { + initialize() { + (this.enableOptionSharing = !0), super.initialize(); + } + update(t) { + const e = this, + i = e._cachedMeta, + { dataset: n, data: o = [], _dataset: s } = i, + a = e.chart._animationsDisabled; + let { start: r, count: l } = (function (t, e, i) { + const n = e.length; + let o = 0, + s = n; + if (t._sorted) { + const { iScale: a, _parsed: r } = t, + l = a.axis, + { + min: c, + max: h, + minDefined: d, + maxDefined: u, + } = a.getUserBounds(); + d && + (o = Ht( + Math.min( + se(r, a.axis, c).lo, + i ? n : se(e, l, a.getPixelForValue(c)).lo + ), + 0, + n - 1 + )), + (s = u + ? Ht( + Math.max( + se(r, a.axis, h).hi + 1, + i ? 0 : se(e, l, a.getPixelForValue(h)).hi + 1 + ), + o, + n + ) - o + : n - o); + } + return { start: o, count: s }; + })(i, o, a); + (e._drawStart = r), + (e._drawCount = l), + (function (t) { + const { xScale: e, yScale: i, _scaleRanges: n } = t, + o = { xmin: e.min, xmax: e.max, ymin: i.min, ymax: i.max }; + if (!n) return (t._scaleRanges = o), !0; + const s = + n.xmin !== e.min || + n.xmax !== e.max || + n.ymin !== i.min || + n.ymax !== i.max; + return Object.assign(n, o), s; + })(i) && ((r = 0), (l = o.length)), + (n._datasetIndex = e.index), + (n._decimated = !!s._decimated), + (n.points = o); + const c = e.resolveDatasetElementOptions(t); + e.options.showLine || (c.borderWidth = 0), + (c.segment = e.options.segment), + e.updateElement(n, void 0, { animated: !a, options: c }, t), + e.updateElements(o, r, l, t); + } + updateElements(t, e, i, n) { + const o = this, + s = "reset" === n, + { iScale: a, vScale: r, _stacked: l } = o._cachedMeta, + c = o.resolveDataElementOptions(e, n), + h = o.getSharedOptions(c), + d = o.includeOptions(n, h), + u = a.axis, + f = r.axis, + g = o.options.spanGaps, + p = Tt(g) ? g : Number.POSITIVE_INFINITY, + m = o.chart._animationsDisabled || s || "none" === n; + let x = e > 0 && o.getParsed(e - 1); + for (let c = e; c < e + i; ++c) { + const e = t[c], + i = o.getParsed(c), + g = m ? e : {}, + b = $(i[f]), + _ = (g[u] = a.getPixelForValue(i[u], c)), + y = (g[f] = + s || b + ? r.getBasePixel() + : r.getPixelForValue(l ? o.applyStack(r, i, l) : i[f], c)); + (g.skip = isNaN(_) || isNaN(y) || b), + (g.stop = c > 0 && i[u] - x[u] > p), + (g.parsed = i), + d && + (g.options = + h || o.resolveDataElementOptions(c, e.active ? "active" : n)), + m || o.updateElement(e, c, g, n), + (x = i); + } + o.updateSharedOptions(h, n, c); + } + getMaxOverflow() { + const t = this, + e = t._cachedMeta, + i = e.dataset, + n = (i.options && i.options.borderWidth) || 0, + o = e.data || []; + if (!o.length) return n; + const s = o[0].size(t.resolveDataElementOptions(0)), + a = o[o.length - 1].size(t.resolveDataElementOptions(o.length - 1)); + return Math.max(n, s, a) / 2; + } + draw() { + const t = this._cachedMeta; + t.dataset.updateControlPoints(this.chart.chartArea, t.iScale.axis), + super.draw(); + } + } + (vo.id = "line"), + (vo.defaults = { + datasetElementType: "line", + dataElementType: "point", + showLine: !0, + spanGaps: !1, + }), + (vo.overrides = { + scales: { _index_: { type: "category" }, _value_: { type: "linear" } }, + }); + class wo extends wn { + constructor(t, e) { + super(t, e), (this.innerRadius = void 0), (this.outerRadius = void 0); + } + getLabelAndValue(t) { + const e = this._cachedMeta, + i = this.chart, + n = i.data.labels || [], + o = Oi(e._parsed[t].r, i.options.locale); + return { label: n[t] || "", value: o }; + } + update(t) { + const e = this._cachedMeta.data; + this._updateRadius(), this.updateElements(e, 0, e.length, t); + } + _updateRadius() { + const t = this, + e = t.chart, + i = e.chartArea, + n = e.options, + o = Math.min(i.right - i.left, i.bottom - i.top), + s = Math.max(o / 2, 0), + a = + (s - + Math.max( + n.cutoutPercentage ? (s / 100) * n.cutoutPercentage : 1, + 0 + )) / + e.getVisibleDatasetCount(); + (t.outerRadius = s - a * t.index), (t.innerRadius = t.outerRadius - a); + } + updateElements(t, e, i, n) { + const o = this, + s = "reset" === n, + a = o.chart, + r = o.getDataset(), + l = a.options.animation, + c = o._cachedMeta.rScale, + h = c.xCenter, + d = c.yCenter, + u = c.getIndexAngle(0) - 0.5 * bt; + let f, + g = u; + const p = 360 / o.countVisibleElements(); + for (f = 0; f < e; ++f) g += o._computeAngle(f, n, p); + for (f = e; f < e + i; f++) { + const e = t[f]; + let i = g, + m = g + o._computeAngle(f, n, p), + x = a.getDataVisibility(f) + ? c.getDistanceFromCenterForValue(r.data[f]) + : 0; + (g = m), + s && (l.animateScale && (x = 0), l.animateRotate && (i = m = u)); + const b = { + x: h, + y: d, + innerRadius: 0, + outerRadius: x, + startAngle: i, + endAngle: m, + options: o.resolveDataElementOptions(f, e.active ? "active" : n), + }; + o.updateElement(e, f, b, n); + } + } + countVisibleElements() { + const t = this.getDataset(), + e = this._cachedMeta; + let i = 0; + return ( + e.data.forEach((e, n) => { + !isNaN(t.data[n]) && this.chart.getDataVisibility(n) && i++; + }), + i + ); + } + _computeAngle(t, e, i) { + return this.chart.getDataVisibility(t) + ? Et(this.resolveDataElementOptions(t, e).angle || i) + : 0; + } + } + (wo.id = "polarArea"), + (wo.defaults = { + dataElementType: "arc", + animation: { animateRotate: !0, animateScale: !0 }, + animations: { + numbers: { + type: "number", + properties: [ + "x", + "y", + "startAngle", + "endAngle", + "innerRadius", + "outerRadius", + ], + }, + }, + indexAxis: "r", + startAngle: 0, + }), + (wo.overrides = { + aspectRatio: 1, + plugins: { + legend: { + labels: { + generateLabels(t) { + const e = t.data; + if (e.labels.length && e.datasets.length) { + const { + labels: { pointStyle: i }, + } = t.legend.options; + return e.labels.map((e, n) => { + const o = t.getDatasetMeta(0).controller.getStyle(n); + return { + text: e, + fillStyle: o.backgroundColor, + strokeStyle: o.borderColor, + lineWidth: o.borderWidth, + pointStyle: i, + hidden: !t.getDataVisibility(n), + index: n, + }; + }); + } + return []; + }, + }, + onClick(t, e, i) { + i.chart.toggleDataVisibility(e.index), i.chart.update(); + }, + }, + tooltip: { + callbacks: { + title: () => "", + label: (t) => + t.chart.data.labels[t.dataIndex] + ": " + t.formattedValue, + }, + }, + }, + scales: { + r: { + type: "radialLinear", + angleLines: { display: !1 }, + beginAtZero: !0, + grid: { circular: !0 }, + pointLabels: { display: !1 }, + startAngle: 0, + }, + }, + }); + class Mo extends yo {} + (Mo.id = "pie"), + (Mo.defaults = { + cutout: 0, + rotation: 0, + circumference: 360, + radius: "100%", + }); + class ko extends wn { + getLabelAndValue(t) { + const e = this._cachedMeta.vScale, + i = this.getParsed(t); + return { + label: e.getLabels()[t], + value: "" + e.getLabelForValue(i[e.axis]), + }; + } + update(t) { + const e = this, + i = e._cachedMeta, + n = i.dataset, + o = i.data || [], + s = i.iScale.getLabels(); + if (((n.points = o), "resize" !== t)) { + const i = e.resolveDatasetElementOptions(t); + e.options.showLine || (i.borderWidth = 0); + const a = { _loop: !0, _fullLoop: s.length === o.length, options: i }; + e.updateElement(n, void 0, a, t); + } + e.updateElements(o, 0, o.length, t); + } + updateElements(t, e, i, n) { + const o = this, + s = o.getDataset(), + a = o._cachedMeta.rScale, + r = "reset" === n; + for (let l = e; l < e + i; l++) { + const e = t[l], + i = o.resolveDataElementOptions(l, e.active ? "active" : n), + c = a.getPointPositionForValue(l, s.data[l]), + h = r ? a.xCenter : c.x, + d = r ? a.yCenter : c.y, + u = { + x: h, + y: d, + angle: c.angle, + skip: isNaN(h) || isNaN(d), + options: i, + }; + o.updateElement(e, l, u, n); + } + } + } + (ko.id = "radar"), + (ko.defaults = { + datasetElementType: "line", + dataElementType: "point", + indexAxis: "r", + showLine: !0, + elements: { line: { fill: "start" } }, + }), + (ko.overrides = { + aspectRatio: 1, + scales: { r: { type: "radialLinear" } }, + }); + class So extends vo {} + (So.id = "scatter"), + (So.defaults = { showLine: !1, fill: !1 }), + (So.overrides = { + interaction: { mode: "point" }, + plugins: { + tooltip: { + callbacks: { + title: () => "", + label: (t) => "(" + t.label + ", " + t.formattedValue + ")", + }, + }, + }, + scales: { x: { type: "linear" }, y: { type: "linear" } }, + }); + var Po = Object.freeze({ + __proto__: null, + BarController: bo, + BubbleController: _o, + DoughnutController: yo, + LineController: vo, + PolarAreaController: wo, + PieController: Mo, + RadarController: ko, + ScatterController: So, + }); + function Do(t, e, i) { + const { + startAngle: n, + pixelMargin: o, + x: s, + y: a, + outerRadius: r, + innerRadius: l, + } = e; + let c = o / r; + t.beginPath(), + t.arc(s, a, r, n - c, i + c), + l > o + ? ((c = o / l), t.arc(s, a, l, i + c, n - c, !0)) + : t.arc(s, a, o, i + Mt, n - Mt), + t.closePath(), + t.clip(); + } + function Co(t, e, i, n) { + const o = Ie(t.options.borderRadius, [ + "outerStart", + "outerEnd", + "innerStart", + "innerEnd", + ]); + const s = (i - e) / 2, + a = Math.min(s, (n * e) / 2), + r = (t) => { + const e = ((i - Math.min(s, t)) * n) / 2; + return Ht(t, 0, Math.min(s, e)); + }; + return { + outerStart: r(o.outerStart), + outerEnd: r(o.outerEnd), + innerStart: Ht(o.innerStart, 0, a), + innerEnd: Ht(o.innerEnd, 0, a), + }; + } + function Oo(t, e, i, n) { + return { x: i + t * Math.cos(e), y: n + t * Math.sin(e) }; + } + function To(t, e, i, n, o) { + const { x: s, y: a, startAngle: r, pixelMargin: l, innerRadius: c } = e, + h = Math.max(e.outerRadius + n + i - l, 0), + d = c > 0 ? c + n + i + l : 0; + let u = 0; + const f = o - r; + if (n) { + const t = ((c > 0 ? c - n : 0) + (h > 0 ? h - n : 0)) / 2; + u = (f - (0 !== t ? (f * t) / (t + n) : f)) / 2; + } + const g = (f - Math.max(0.001, f * h - i / bt) / h) / 2, + p = r + g + u, + m = o - g - u, + { + outerStart: x, + outerEnd: b, + innerStart: _, + innerEnd: y, + } = Co(e, d, h, m - p), + v = h - x, + w = h - b, + M = p + x / v, + k = m - b / w, + S = d + _, + P = d + y, + D = p + _ / S, + C = m - y / P; + if ((t.beginPath(), t.arc(s, a, h, M, k), b > 0)) { + const e = Oo(w, k, s, a); + t.arc(e.x, e.y, b, k, m + Mt); + } + const O = Oo(P, m, s, a); + if ((t.lineTo(O.x, O.y), y > 0)) { + const e = Oo(P, C, s, a); + t.arc(e.x, e.y, y, m + Mt, C + Math.PI); + } + if ((t.arc(s, a, d, m - y / d, p + _ / d, !0), _ > 0)) { + const e = Oo(S, D, s, a); + t.arc(e.x, e.y, _, D + Math.PI, p - Mt); + } + const T = Oo(v, p, s, a); + if ((t.lineTo(T.x, T.y), x > 0)) { + const e = Oo(v, M, s, a); + t.arc(e.x, e.y, x, p - Mt, M); + } + t.closePath(); + } + function Ao(t, e, i, n, o) { + const { options: s } = e, + a = "inner" === s.borderAlign; + s.borderWidth && + (a + ? ((t.lineWidth = 2 * s.borderWidth), (t.lineJoin = "round")) + : ((t.lineWidth = s.borderWidth), (t.lineJoin = "bevel")), + e.fullCircles && + (function (t, e, i) { + const { + x: n, + y: o, + startAngle: s, + pixelMargin: a, + fullCircles: r, + } = e, + l = Math.max(e.outerRadius - a, 0), + c = e.innerRadius + a; + let h; + for ( + i && Do(t, e, s + _t), + t.beginPath(), + t.arc(n, o, c, s + _t, s, !0), + h = 0; + h < r; + ++h + ) + t.stroke(); + for (t.beginPath(), t.arc(n, o, l, s, s + _t), h = 0; h < r; ++h) + t.stroke(); + })(t, e, a), + a && Do(t, e, o), + To(t, e, i, n, o), + t.stroke()); + } + class Lo extends Mn { + constructor(t) { + super(), + (this.options = void 0), + (this.circumference = void 0), + (this.startAngle = void 0), + (this.endAngle = void 0), + (this.innerRadius = void 0), + (this.outerRadius = void 0), + (this.pixelMargin = 0), + (this.fullCircles = 0), + t && Object.assign(this, t); + } + inRange(t, e, i) { + const n = this.getProps(["x", "y"], i), + { angle: o, distance: s } = Ft(n, { x: t, y: e }), + { + startAngle: a, + endAngle: r, + innerRadius: l, + outerRadius: c, + circumference: h, + } = this.getProps( + [ + "startAngle", + "endAngle", + "innerRadius", + "outerRadius", + "circumference", + ], + i + ), + d = this.options.spacing / 2; + return (h >= _t || Nt(o, a, r)) && s >= l + d && s <= c + d; + } + getCenterPoint(t) { + const { + x: e, + y: i, + startAngle: n, + endAngle: o, + innerRadius: s, + outerRadius: a, + } = this.getProps( + [ + "x", + "y", + "startAngle", + "endAngle", + "innerRadius", + "outerRadius", + "circumference", + ], + t + ), + { offset: r, spacing: l } = this.options, + c = (n + o) / 2, + h = (s + a + l + r) / 2; + return { x: e + Math.cos(c) * h, y: i + Math.sin(c) * h }; + } + tooltipPosition(t) { + return this.getCenterPoint(t); + } + draw(t) { + const e = this, + { options: i, circumference: n } = e, + o = (i.offset || 0) / 2, + s = (i.spacing || 0) / 2; + if ( + ((e.pixelMargin = "inner" === i.borderAlign ? 0.33 : 0), + (e.fullCircles = n > _t ? Math.floor(n / _t) : 0), + 0 === n || e.innerRadius < 0 || e.outerRadius < 0) + ) + return; + t.save(); + let a = 0; + if (o) { + a = o / 2; + const i = (e.startAngle + e.endAngle) / 2; + t.translate(Math.cos(i) * a, Math.sin(i) * a), + e.circumference >= bt && (a = o); + } + (t.fillStyle = i.backgroundColor), (t.strokeStyle = i.borderColor); + const r = (function (t, e, i, n) { + const { fullCircles: o, startAngle: s, circumference: a } = e; + let r = e.endAngle; + if (o) { + To(t, e, i, n, s + _t); + for (let e = 0; e < o; ++e) t.fill(); + isNaN(a) || ((r = s + (a % _t)), a % _t == 0 && (r += _t)); + } + return To(t, e, i, n, r), t.fill(), r; + })(t, e, a, s); + Ao(t, e, a, s, r), t.restore(); + } + } + function Ro(t, e, i = e) { + (t.lineCap = K(i.borderCapStyle, e.borderCapStyle)), + t.setLineDash(K(i.borderDash, e.borderDash)), + (t.lineDashOffset = K(i.borderDashOffset, e.borderDashOffset)), + (t.lineJoin = K(i.borderJoinStyle, e.borderJoinStyle)), + (t.lineWidth = K(i.borderWidth, e.borderWidth)), + (t.strokeStyle = K(i.borderColor, e.borderColor)); + } + function Eo(t, e, i) { + t.lineTo(i.x, i.y); + } + function Io(t, e, i = {}) { + const n = t.length, + { start: o = 0, end: s = n - 1 } = i, + { start: a, end: r } = e, + l = Math.max(o, a), + c = Math.min(s, r), + h = (o < a && s < a) || (o > r && s > r); + return { + count: n, + start: l, + loop: e.loop, + ilen: c < l && !h ? n + c - l : c - l, + }; + } + function zo(t, e, i, n) { + const { points: o, options: s } = e, + { count: a, start: r, loop: l, ilen: c } = Io(o, i, n), + h = (function (t) { + return t.stepped + ? Jt + : t.tension || "monotone" === t.cubicInterpolationMode + ? te + : Eo; + })(s); + let d, + u, + f, + { move: g = !0, reverse: p } = n || {}; + for (d = 0; d <= c; ++d) + (u = o[(r + (p ? c - d : d)) % a]), + u.skip || + (g ? (t.moveTo(u.x, u.y), (g = !1)) : h(t, f, u, p, s.stepped), + (f = u)); + return l && ((u = o[(r + (p ? c : 0)) % a]), h(t, f, u, p, s.stepped)), !!l; + } + function Fo(t, e, i, n) { + const o = e.points, + { count: s, start: a, ilen: r } = Io(o, i, n), + { move: l = !0, reverse: c } = n || {}; + let h, + d, + u, + f, + g, + p, + m = 0, + x = 0; + const b = (t) => (a + (c ? r - t : t)) % s, + _ = () => { + f !== g && (t.lineTo(m, g), t.lineTo(m, f), t.lineTo(m, p)); + }; + for (l && ((d = o[b(0)]), t.moveTo(d.x, d.y)), h = 0; h <= r; ++h) { + if (((d = o[b(h)]), d.skip)) continue; + const e = d.x, + i = d.y, + n = 0 | e; + n === u + ? (i < f ? (f = i) : i > g && (g = i), (m = (x * m + e) / ++x)) + : (_(), t.lineTo(e, i), (u = n), (x = 0), (f = g = i)), + (p = i); + } + _(); + } + function Bo(t) { + const e = t.options, + i = e.borderDash && e.borderDash.length; + return !( + t._decimated || + t._loop || + e.tension || + "monotone" === e.cubicInterpolationMode || + e.stepped || + i + ) + ? Fo + : zo; + } + (Lo.id = "arc"), + (Lo.defaults = { + borderAlign: "center", + borderColor: "#fff", + borderRadius: 0, + borderWidth: 2, + offset: 0, + spacing: 0, + angle: void 0, + }), + (Lo.defaultRoutes = { backgroundColor: "backgroundColor" }); + const Vo = "function" == typeof Path2D; + function Wo(t, e, i, n) { + Vo && 1 === e.segments.length + ? (function (t, e, i, n) { + let o = e._path; + o || ((o = e._path = new Path2D()), e.path(o, i, n) && o.closePath()), + Ro(t, e.options), + t.stroke(o); + })(t, e, i, n) + : (function (t, e, i, n) { + const { segments: o, options: s } = e, + a = Bo(e); + for (const r of o) + Ro(t, s, r.style), + t.beginPath(), + a(t, e, r, { start: i, end: i + n - 1 }) && t.closePath(), + t.stroke(); + })(t, e, i, n); + } + class No extends Mn { + constructor(t) { + super(), + (this.animated = !0), + (this.options = void 0), + (this._loop = void 0), + (this._fullLoop = void 0), + (this._path = void 0), + (this._points = void 0), + (this._segments = void 0), + (this._decimated = !1), + (this._pointsUpdated = !1), + (this._datasetIndex = void 0), + t && Object.assign(this, t); + } + updateControlPoints(t, e) { + const i = this, + n = i.options; + if ( + (n.tension || "monotone" === n.cubicInterpolationMode) && + !n.stepped && + !i._pointsUpdated + ) { + const o = n.spanGaps ? i._loop : i._fullLoop; + yi(i._points, n, t, o, e), (i._pointsUpdated = !0); + } + } + set points(t) { + const e = this; + (e._points = t), + delete e._segments, + delete e._path, + (e._pointsUpdated = !1); + } + get points() { + return this._points; + } + get segments() { + return ( + this._segments || (this._segments = Fi(this, this.options.segment)) + ); + } + first() { + const t = this.segments, + e = this.points; + return t.length && e[t[0].start]; + } + last() { + const t = this.segments, + e = this.points, + i = t.length; + return i && e[t[i - 1].end]; + } + interpolate(t, e) { + const i = this, + n = i.options, + o = t[e], + s = i.points, + a = zi(i, { property: e, start: o, end: o }); + if (!a.length) return; + const r = [], + l = (function (t) { + return t.stepped + ? Pi + : t.tension || "monotone" === t.cubicInterpolationMode + ? Di + : Si; + })(n); + let c, h; + for (c = 0, h = a.length; c < h; ++c) { + const { start: i, end: h } = a[c], + d = s[i], + u = s[h]; + if (d === u) { + r.push(d); + continue; + } + const f = l(d, u, Math.abs((o - d[e]) / (u[e] - d[e])), n.stepped); + (f[e] = t[e]), r.push(f); + } + return 1 === r.length ? r[0] : r; + } + pathSegment(t, e, i) { + return Bo(this)(t, this, e, i); + } + path(t, e, i) { + const n = this, + o = n.segments, + s = Bo(n); + let a = n._loop; + (e = e || 0), (i = i || n.points.length - e); + for (const r of o) a &= s(t, n, r, { start: e, end: e + i - 1 }); + return !!a; + } + draw(t, e, i, n) { + const o = this, + s = o.options || {}; + (o.points || []).length && + s.borderWidth && + (t.save(), + Wo(t, o, i, n), + t.restore(), + o.animated && ((o._pointsUpdated = !1), (o._path = void 0))); + } + } + function Ho(t, e, i, n) { + const o = t.options, + { [i]: s } = t.getProps([i], n); + return Math.abs(e - s) < o.radius + o.hitRadius; + } + (No.id = "line"), + (No.defaults = { + borderCapStyle: "butt", + borderDash: [], + borderDashOffset: 0, + borderJoinStyle: "miter", + borderWidth: 3, + capBezierPoints: !0, + cubicInterpolationMode: "default", + fill: !1, + spanGaps: !1, + stepped: !1, + tension: 0, + }), + (No.defaultRoutes = { + backgroundColor: "backgroundColor", + borderColor: "borderColor", + }), + (No.descriptors = { + _scriptable: !0, + _indexable: (t) => "borderDash" !== t && "fill" !== t, + }); + class jo extends Mn { + constructor(t) { + super(), + (this.options = void 0), + (this.parsed = void 0), + (this.skip = void 0), + (this.stop = void 0), + t && Object.assign(this, t); + } + inRange(t, e, i) { + const n = this.options, + { x: o, y: s } = this.getProps(["x", "y"], i); + return ( + Math.pow(t - o, 2) + Math.pow(e - s, 2) < + Math.pow(n.hitRadius + n.radius, 2) + ); + } + inXRange(t, e) { + return Ho(this, t, "x", e); + } + inYRange(t, e) { + return Ho(this, t, "y", e); + } + getCenterPoint(t) { + const { x: e, y: i } = this.getProps(["x", "y"], t); + return { x: e, y: i }; + } + size(t) { + let e = (t = t || this.options || {}).radius || 0; + e = Math.max(e, (e && t.hoverRadius) || 0); + return 2 * (e + ((e && t.borderWidth) || 0)); + } + draw(t, e) { + const i = this, + n = i.options; + i.skip || + n.radius < 0.1 || + !Gt(i, e, i.size(n) / 2) || + ((t.strokeStyle = n.borderColor), + (t.lineWidth = n.borderWidth), + (t.fillStyle = n.backgroundColor), + Kt(t, n, i.x, i.y)); + } + getRange() { + const t = this.options || {}; + return t.radius + t.hitRadius; + } + } + function $o(t, e) { + const { + x: i, + y: n, + base: o, + width: s, + height: a, + } = t.getProps(["x", "y", "base", "width", "height"], e); + let r, l, c, h, d; + return ( + t.horizontal + ? ((d = a / 2), + (r = Math.min(i, o)), + (l = Math.max(i, o)), + (c = n - d), + (h = n + d)) + : ((d = s / 2), + (r = i - d), + (l = i + d), + (c = Math.min(n, o)), + (h = Math.max(n, o))), + { left: r, top: c, right: l, bottom: h } + ); + } + function Yo(t, e, i, n) { + return t ? 0 : Ht(e, i, n); + } + function Uo(t) { + const e = $o(t), + i = e.right - e.left, + n = e.bottom - e.top, + o = (function (t, e, i) { + const n = t.options.borderWidth, + o = t.borderSkipped, + s = ze(n); + return { + t: Yo(o.top, s.top, 0, i), + r: Yo(o.right, s.right, 0, e), + b: Yo(o.bottom, s.bottom, 0, i), + l: Yo(o.left, s.left, 0, e), + }; + })(t, i / 2, n / 2), + s = (function (t, e, i) { + const { enableBorderRadius: n } = t.getProps(["enableBorderRadius"]), + o = t.options.borderRadius, + s = Fe(o), + a = Math.min(e, i), + r = t.borderSkipped, + l = n || U(o); + return { + topLeft: Yo(!l || r.top || r.left, s.topLeft, 0, a), + topRight: Yo(!l || r.top || r.right, s.topRight, 0, a), + bottomLeft: Yo(!l || r.bottom || r.left, s.bottomLeft, 0, a), + bottomRight: Yo(!l || r.bottom || r.right, s.bottomRight, 0, a), + }; + })(t, i / 2, n / 2); + return { + outer: { x: e.left, y: e.top, w: i, h: n, radius: s }, + inner: { + x: e.left + o.l, + y: e.top + o.t, + w: i - o.l - o.r, + h: n - o.t - o.b, + radius: { + topLeft: Math.max(0, s.topLeft - Math.max(o.t, o.l)), + topRight: Math.max(0, s.topRight - Math.max(o.t, o.r)), + bottomLeft: Math.max(0, s.bottomLeft - Math.max(o.b, o.l)), + bottomRight: Math.max(0, s.bottomRight - Math.max(o.b, o.r)), + }, + }, + }; + } + function Xo(t, e, i, n) { + const o = null === e, + s = null === i, + a = t && !(o && s) && $o(t, n); + return ( + a && + (o || (e >= a.left && e <= a.right)) && + (s || (i >= a.top && i <= a.bottom)) + ); + } + function qo(t, e) { + t.rect(e.x, e.y, e.w, e.h); + } + function Ko(t, e, i = {}) { + const n = t.x !== i.x ? -e : 0, + o = t.y !== i.y ? -e : 0, + s = (t.x + t.w !== i.x + i.w ? e : 0) - n, + a = (t.y + t.h !== i.y + i.h ? e : 0) - o; + return { x: t.x + n, y: t.y + o, w: t.w + s, h: t.h + a, radius: t.radius }; + } + (jo.id = "point"), + (jo.defaults = { + borderWidth: 1, + hitRadius: 1, + hoverBorderWidth: 1, + hoverRadius: 4, + pointStyle: "circle", + radius: 3, + rotation: 0, + }), + (jo.defaultRoutes = { + backgroundColor: "backgroundColor", + borderColor: "borderColor", + }); + class Go extends Mn { + constructor(t) { + super(), + (this.options = void 0), + (this.horizontal = void 0), + (this.base = void 0), + (this.width = void 0), + (this.height = void 0), + t && Object.assign(this, t); + } + draw(t) { + const e = this.options, + { inner: i, outer: n } = Uo(this), + o = + (s = n.radius).topLeft || s.topRight || s.bottomLeft || s.bottomRight + ? ne + : qo; + var s; + const a = 0.33; + t.save(), + (n.w === i.w && n.h === i.h) || + (t.beginPath(), + o(t, Ko(n, a, i)), + t.clip(), + o(t, Ko(i, -0.33, n)), + (t.fillStyle = e.borderColor), + t.fill("evenodd")), + t.beginPath(), + o(t, Ko(i, a, n)), + (t.fillStyle = e.backgroundColor), + t.fill(), + t.restore(); + } + inRange(t, e, i) { + return Xo(this, t, e, i); + } + inXRange(t, e) { + return Xo(this, t, null, e); + } + inYRange(t, e) { + return Xo(this, null, t, e); + } + getCenterPoint(t) { + const { + x: e, + y: i, + base: n, + horizontal: o, + } = this.getProps(["x", "y", "base", "horizontal"], t); + return { x: o ? (e + n) / 2 : e, y: o ? i : (i + n) / 2 }; + } + getRange(t) { + return "x" === t ? this.width / 2 : this.height / 2; + } + } + (Go.id = "bar"), + (Go.defaults = { + borderSkipped: "start", + borderWidth: 0, + borderRadius: 0, + enableBorderRadius: !0, + pointStyle: void 0, + }), + (Go.defaultRoutes = { + backgroundColor: "backgroundColor", + borderColor: "borderColor", + }); + var Zo = Object.freeze({ + __proto__: null, + ArcElement: Lo, + LineElement: No, + PointElement: jo, + BarElement: Go, + }); + function Qo(t) { + if (t._decimated) { + const e = t._data; + delete t._decimated, + delete t._data, + Object.defineProperty(t, "data", { value: e }); + } + } + function Jo(t) { + t.data.datasets.forEach((t) => { + Qo(t); + }); + } + var ts = { + id: "decimation", + defaults: { algorithm: "min-max", enabled: !1 }, + beforeElementsUpdate: (t, e, i) => { + if (!i.enabled) return void Jo(t); + const n = t.width; + t.data.datasets.forEach((e, o) => { + const { _data: s, indexAxis: a } = e, + r = t.getDatasetMeta(o), + l = s || e.data; + if ("y" === We([a, t.options.indexAxis])) return; + if ("line" !== r.type) return; + const c = t.scales[r.xAxisID]; + if ("linear" !== c.type && "time" !== c.type) return; + if (t.options.parsing) return; + let { start: h, count: d } = (function (t, e) { + const i = e.length; + let n, + o = 0; + const { iScale: s } = t, + { + min: a, + max: r, + minDefined: l, + maxDefined: c, + } = s.getUserBounds(); + return ( + l && (o = Ht(se(e, s.axis, a).lo, 0, i - 1)), + (n = c ? Ht(se(e, s.axis, r).hi + 1, o, i) - o : i - o), + { start: o, count: n } + ); + })(r, l); + if (d <= (i.threshold || 4 * n)) return void Qo(e); + let u; + switch ( + ($(s) && + ((e._data = l), + delete e.data, + Object.defineProperty(e, "data", { + configurable: !0, + enumerable: !0, + get: function () { + return this._decimated; + }, + set: function (t) { + this._data = t; + }, + })), + i.algorithm) + ) { + case "lttb": + u = (function (t, e, i, n, o) { + const s = o.samples || n; + if (s >= i) return t.slice(e, e + i); + const a = [], + r = (i - 2) / (s - 2); + let l = 0; + const c = e + i - 1; + let h, + d, + u, + f, + g, + p = e; + for (a[l++] = t[p], h = 0; h < s - 2; h++) { + let n, + o = 0, + s = 0; + const c = Math.floor((h + 1) * r) + 1 + e, + m = Math.min(Math.floor((h + 2) * r) + 1, i) + e, + x = m - c; + for (n = c; n < m; n++) (o += t[n].x), (s += t[n].y); + (o /= x), (s /= x); + const b = Math.floor(h * r) + 1 + e, + _ = Math.min(Math.floor((h + 1) * r) + 1, i) + e, + { x: y, y: v } = t[p]; + for (u = f = -1, n = b; n < _; n++) + (f = + 0.5 * + Math.abs((y - o) * (t[n].y - v) - (y - t[n].x) * (s - v))), + f > u && ((u = f), (d = t[n]), (g = n)); + (a[l++] = d), (p = g); + } + return (a[l++] = t[c]), a; + })(l, h, d, n, i); + break; + case "min-max": + u = (function (t, e, i, n) { + let o, + s, + a, + r, + l, + c, + h, + d, + u, + f, + g = 0, + p = 0; + const m = [], + x = e + i - 1, + b = t[e].x, + _ = t[x].x - b; + for (o = e; o < e + i; ++o) { + (s = t[o]), (a = ((s.x - b) / _) * n), (r = s.y); + const e = 0 | a; + if (e === l) + r < u ? ((u = r), (c = o)) : r > f && ((f = r), (h = o)), + (g = (p * g + s.x) / ++p); + else { + const i = o - 1; + if (!$(c) && !$(h)) { + const e = Math.min(c, h), + n = Math.max(c, h); + e !== d && e !== i && m.push({ ...t[e], x: g }), + n !== d && n !== i && m.push({ ...t[n], x: g }); + } + o > 0 && i !== d && m.push(t[i]), + m.push(s), + (l = e), + (p = 0), + (u = f = r), + (c = h = d = o); + } + } + return m; + })(l, h, d, n); + break; + default: + throw new Error( + `Unsupported decimation algorithm '${i.algorithm}'` + ); + } + e._decimated = u; + }); + }, + destroy(t) { + Jo(t); + }, + }; + function es(t, e, i) { + const n = (function (t) { + const e = t.options, + i = e.fill; + let n = K(i && i.target, i); + return ( + void 0 === n && (n = !!e.backgroundColor), + !1 !== n && null !== n && (!0 === n ? "origin" : n) + ); + })(t); + if (U(n)) return !isNaN(n.value) && n; + let o = parseFloat(n); + return X(o) && Math.floor(o) === o + ? (("-" !== n[0] && "+" !== n[0]) || (o = e + o), + !(o === e || o < 0 || o >= i) && o) + : ["origin", "start", "end", "stack", "shape"].indexOf(n) >= 0 && n; + } + class is { + constructor(t) { + (this.x = t.x), (this.y = t.y), (this.radius = t.radius); + } + pathSegment(t, e, i) { + const { x: n, y: o, radius: s } = this; + return ( + (e = e || { start: 0, end: _t }), + t.arc(n, o, s, e.end, e.start, !0), + !i.bounds + ); + } + interpolate(t) { + const { x: e, y: i, radius: n } = this, + o = t.angle; + return { x: e + Math.cos(o) * n, y: i + Math.sin(o) * n, angle: o }; + } + } + function ns(t) { + return (t.scale || {}).getPointPositionForValue + ? (function (t) { + const { scale: e, fill: i } = t, + n = e.options, + o = e.getLabels().length, + s = [], + a = n.reverse ? e.max : e.min, + r = n.reverse ? e.min : e.max; + let l, c, h; + if ( + ((h = + "start" === i + ? a + : "end" === i + ? r + : U(i) + ? i.value + : e.getBaseValue()), + n.grid.circular) + ) + return ( + (c = e.getPointPositionForValue(0, a)), + new is({ + x: c.x, + y: c.y, + radius: e.getDistanceFromCenterForValue(h), + }) + ); + for (l = 0; l < o; ++l) s.push(e.getPointPositionForValue(l, h)); + return s; + })(t) + : (function (t) { + const { scale: e = {}, fill: i } = t; + let n, + o = null; + return ( + "start" === i + ? (o = e.bottom) + : "end" === i + ? (o = e.top) + : U(i) + ? (o = e.getPixelForValue(i.value)) + : e.getBasePixel && (o = e.getBasePixel()), + X(o) + ? ((n = e.isHorizontal()), { x: n ? o : null, y: n ? null : o }) + : null + ); + })(t); + } + function os(t, e, i) { + for (; e > t; e--) { + const t = i[e]; + if (!isNaN(t.x) && !isNaN(t.y)) break; + } + return e; + } + function ss(t) { + const { chart: e, scale: i, index: n, line: o } = t, + s = [], + a = o.segments, + r = o.points, + l = (function (t, e) { + const i = [], + n = t.getSortedVisibleDatasetMetas(); + for (let t = 0; t < n.length; t++) { + const o = n[t]; + if (o.index === e) break; + as(o) && i.unshift(o.dataset); + } + return i; + })(e, n); + l.push(cs({ x: null, y: i.bottom }, o)); + for (let t = 0; t < a.length; t++) { + const e = a[t]; + for (let t = e.start; t <= e.end; t++) rs(s, r[t], l); + } + return new No({ points: s, options: {} }); + } + const as = (t) => "line" === t.type && !t.hidden; + function rs(t, e, i) { + const n = []; + for (let o = 0; o < i.length; o++) { + const s = i[o], + { first: a, last: r, point: l } = ls(s, e, "x"); + if (!(!l || (a && r))) + if (a) n.unshift(l); + else if ((t.push(l), !r)) break; + } + t.push(...n); + } + function ls(t, e, i) { + const n = t.interpolate(e, i); + if (!n) return {}; + const o = n[i], + s = t.segments, + a = t.points; + let r = !1, + l = !1; + for (let t = 0; t < s.length; t++) { + const e = s[t], + n = a[e.start][i], + c = a[e.end][i]; + if (o >= n && o <= c) { + (r = o === n), (l = o === c); + break; + } + } + return { first: r, last: l, point: n }; + } + function cs(t, e) { + let i = [], + n = !1; + return ( + Y(t) + ? ((n = !0), (i = t)) + : (i = (function (t, e) { + const { x: i = null, y: n = null } = t || {}, + o = e.points, + s = []; + return ( + e.segments.forEach(({ start: t, end: e }) => { + e = os(t, e, o); + const a = o[t], + r = o[e]; + null !== n + ? (s.push({ x: a.x, y: n }), s.push({ x: r.x, y: n })) + : null !== i && + (s.push({ x: i, y: a.y }), s.push({ x: i, y: r.y })); + }), + s + ); + })(t, e)), + i.length + ? new No({ points: i, options: { tension: 0 }, _loop: n, _fullLoop: n }) + : null + ); + } + function hs(t, e, i) { + let n = t[e].fill; + const o = [e]; + let s; + if (!i) return n; + for (; !1 !== n && -1 === o.indexOf(n); ) { + if (!X(n)) return n; + if (((s = t[n]), !s)) return !1; + if (s.visible) return n; + o.push(n), (n = s.fill); + } + return !1; + } + function ds(t, e, i) { + t.beginPath(), + e.path(t), + t.lineTo(e.last().x, i), + t.lineTo(e.first().x, i), + t.closePath(), + t.clip(); + } + function us(t, e, i, n) { + if (n) return; + let o = e[t], + s = i[t]; + return ( + "angle" === t && ((o = Wt(o)), (s = Wt(s))), + { property: t, start: o, end: s } + ); + } + function fs(t, e, i, n) { + return t && e ? n(t[i], e[i]) : t ? t[i] : e ? e[i] : 0; + } + function gs(t, e, i) { + const { top: n, bottom: o } = e.chart.chartArea, + { property: s, start: a, end: r } = i || {}; + "x" === s && (t.beginPath(), t.rect(a, n, r - a, o - n), t.clip()); + } + function ps(t, e, i, n) { + const o = e.interpolate(i, n); + o && t.lineTo(o.x, o.y); + } + function ms(t, e) { + const { line: i, target: n, property: o, color: s, scale: a } = e, + r = (function (t, e, i) { + const n = t.segments, + o = t.points, + s = e.points, + a = []; + for (const t of n) { + let { start: n, end: r } = t; + r = os(n, r, o); + const l = us(i, o[n], o[r], t.loop); + if (!e.segments) { + a.push({ source: t, target: l, start: o[n], end: o[r] }); + continue; + } + const c = zi(e, l); + for (const e of c) { + const n = us(i, s[e.start], s[e.end], e.loop), + r = Ii(t, o, n); + for (const t of r) + a.push({ + source: t, + target: e, + start: { [i]: fs(l, n, "start", Math.max) }, + end: { [i]: fs(l, n, "end", Math.min) }, + }); + } + } + return a; + })(i, n, o); + for (const { source: e, target: l, start: c, end: h } of r) { + const { style: { backgroundColor: r = s } = {} } = e, + d = !0 !== n; + t.save(), (t.fillStyle = r), gs(t, a, d && us(o, c, h)), t.beginPath(); + const u = !!i.pathSegment(t, e); + let f; + if (d) { + u ? t.closePath() : ps(t, n, h, o); + const e = !!n.pathSegment(t, l, { move: u, reverse: !0 }); + (f = u && e), f || ps(t, n, c, o); + } + t.closePath(), t.fill(f ? "evenodd" : "nonzero"), t.restore(); + } + } + function xs(t, e, i) { + const n = (function (t) { + const { chart: e, fill: i, line: n } = t; + if (X(i)) + return (function (t, e) { + const i = t.getDatasetMeta(e); + return i && t.isDatasetVisible(e) ? i.dataset : null; + })(e, i); + if ("stack" === i) return ss(t); + if ("shape" === i) return !0; + const o = ns(t); + return o instanceof is ? o : cs(o, n); + })(e), + { line: o, scale: s, axis: a } = e, + r = o.options, + l = r.fill, + c = r.backgroundColor, + { above: h = c, below: d = c } = l || {}; + n && + o.points.length && + (Zt(t, i), + (function (t, e) { + const { line: i, target: n, above: o, below: s, area: a, scale: r } = e, + l = i._loop ? "angle" : e.axis; + t.save(), + "x" === l && + s !== o && + (ds(t, n, a.top), + ms(t, { line: i, target: n, color: o, scale: r, property: l }), + t.restore(), + t.save(), + ds(t, n, a.bottom)), + ms(t, { line: i, target: n, color: s, scale: r, property: l }), + t.restore(); + })(t, { + line: o, + target: n, + above: h, + below: d, + area: i, + scale: s, + axis: a, + }), + Qt(t)); + } + var bs = { + id: "filler", + afterDatasetsUpdate(t, e, i) { + const n = (t.data.datasets || []).length, + o = []; + let s, a, r, l; + for (a = 0; a < n; ++a) + (s = t.getDatasetMeta(a)), + (r = s.dataset), + (l = null), + r && + r.options && + r instanceof No && + (l = { + visible: t.isDatasetVisible(a), + index: a, + fill: es(r, a, n), + chart: t, + axis: s.controller.options.indexAxis, + scale: s.vScale, + line: r, + }), + (s.$filler = l), + o.push(l); + for (a = 0; a < n; ++a) + (l = o[a]), l && !1 !== l.fill && (l.fill = hs(o, a, i.propagate)); + }, + beforeDraw(t, e, i) { + const n = "beforeDraw" === i.drawTime, + o = t.getSortedVisibleDatasetMetas(), + s = t.chartArea; + for (let e = o.length - 1; e >= 0; --e) { + const i = o[e].$filler; + i && (i.line.updateControlPoints(s, i.axis), n && xs(t.ctx, i, s)); + } + }, + beforeDatasetsDraw(t, e, i) { + if ("beforeDatasetsDraw" !== i.drawTime) return; + const n = t.getSortedVisibleDatasetMetas(); + for (let e = n.length - 1; e >= 0; --e) { + const i = n[e].$filler; + i && xs(t.ctx, i, t.chartArea); + } + }, + beforeDatasetDraw(t, e, i) { + const n = e.meta.$filler; + n && + !1 !== n.fill && + "beforeDatasetDraw" === i.drawTime && + xs(t.ctx, n, t.chartArea); + }, + defaults: { propagate: !0, drawTime: "beforeDatasetDraw" }, + }; + const _s = (t, e) => { + let { boxHeight: i = e, boxWidth: n = e } = t; + return ( + t.usePointStyle && ((i = Math.min(i, e)), (n = Math.min(n, e))), + { boxWidth: n, boxHeight: i, itemHeight: Math.max(e, i) } + ); + }; + class ys extends Mn { + constructor(t) { + super(), + (this._added = !1), + (this.legendHitBoxes = []), + (this._hoveredItem = null), + (this.doughnutMode = !1), + (this.chart = t.chart), + (this.options = t.options), + (this.ctx = t.ctx), + (this.legendItems = void 0), + (this.columnSizes = void 0), + (this.lineWidths = void 0), + (this.maxHeight = void 0), + (this.maxWidth = void 0), + (this.top = void 0), + (this.bottom = void 0), + (this.left = void 0), + (this.right = void 0), + (this.height = void 0), + (this.width = void 0), + (this._margins = void 0), + (this.position = void 0), + (this.weight = void 0), + (this.fullSize = void 0); + } + update(t, e, i) { + const n = this; + (n.maxWidth = t), + (n.maxHeight = e), + (n._margins = i), + n.setDimensions(), + n.buildLabels(), + n.fit(); + } + setDimensions() { + const t = this; + t.isHorizontal() + ? ((t.width = t.maxWidth), + (t.left = t._margins.left), + (t.right = t.width)) + : ((t.height = t.maxHeight), + (t.top = t._margins.top), + (t.bottom = t.height)); + } + buildLabels() { + const t = this, + e = t.options.labels || {}; + let i = Q(e.generateLabels, [t.chart], t) || []; + e.filter && (i = i.filter((i) => e.filter(i, t.chart.data))), + e.sort && (i = i.sort((i, n) => e.sort(i, n, t.chart.data))), + t.options.reverse && i.reverse(), + (t.legendItems = i); + } + fit() { + const t = this, + { options: e, ctx: i } = t; + if (!e.display) return void (t.width = t.height = 0); + const n = e.labels, + o = Ve(n.font), + s = o.size, + a = t._computeTitleHeight(), + { boxWidth: r, itemHeight: l } = _s(n, s); + let c, h; + (i.font = o.string), + t.isHorizontal() + ? ((c = t.maxWidth), (h = t._fitRows(a, s, r, l) + 10)) + : ((h = t.maxHeight), (c = t._fitCols(a, s, r, l) + 10)), + (t.width = Math.min(c, e.maxWidth || t.maxWidth)), + (t.height = Math.min(h, e.maxHeight || t.maxHeight)); + } + _fitRows(t, e, i, n) { + const o = this, + { + ctx: s, + maxWidth: a, + options: { + labels: { padding: r }, + }, + } = o, + l = (o.legendHitBoxes = []), + c = (o.lineWidths = [0]), + h = n + r; + let d = t; + (s.textAlign = "left"), (s.textBaseline = "middle"); + let u = -1, + f = -h; + return ( + o.legendItems.forEach((t, o) => { + const g = i + e / 2 + s.measureText(t.text).width; + (0 === o || c[c.length - 1] + g + 2 * r > a) && + ((d += h), (c[c.length - (o > 0 ? 0 : 1)] = 0), (f += h), u++), + (l[o] = { left: 0, top: f, row: u, width: g, height: n }), + (c[c.length - 1] += g + r); + }), + d + ); + } + _fitCols(t, e, i, n) { + const o = this, + { + ctx: s, + maxHeight: a, + options: { + labels: { padding: r }, + }, + } = o, + l = (o.legendHitBoxes = []), + c = (o.columnSizes = []), + h = a - t; + let d = r, + u = 0, + f = 0, + g = 0, + p = 0; + return ( + o.legendItems.forEach((t, o) => { + const a = i + e / 2 + s.measureText(t.text).width; + o > 0 && + f + n + 2 * r > h && + ((d += u + r), + c.push({ width: u, height: f }), + (g += u + r), + p++, + (u = f = 0)), + (l[o] = { left: g, top: f, col: p, width: a, height: n }), + (u = Math.max(u, a)), + (f += n + r); + }), + (d += u), + c.push({ width: u, height: f }), + d + ); + } + adjustHitBoxes() { + const t = this; + if (!t.options.display) return; + const e = t._computeTitleHeight(), + { + legendHitBoxes: i, + options: { + align: n, + labels: { padding: s }, + rtl: a, + }, + } = t, + r = Ti(a, t.left, t.width); + if (this.isHorizontal()) { + let a = 0, + l = o(n, t.left + s, t.right - t.lineWidths[a]); + for (const c of i) + a !== c.row && + ((a = c.row), (l = o(n, t.left + s, t.right - t.lineWidths[a]))), + (c.top += t.top + e + s), + (c.left = r.leftForLtr(r.x(l), c.width)), + (l += c.width + s); + } else { + let a = 0, + l = o(n, t.top + e + s, t.bottom - t.columnSizes[a].height); + for (const c of i) + c.col !== a && + ((a = c.col), + (l = o(n, t.top + e + s, t.bottom - t.columnSizes[a].height))), + (c.top = l), + (c.left += t.left + s), + (c.left = r.leftForLtr(r.x(c.left), c.width)), + (l += c.height + s); + } + } + isHorizontal() { + return ( + "top" === this.options.position || "bottom" === this.options.position + ); + } + draw() { + const t = this; + if (t.options.display) { + const e = t.ctx; + Zt(e, t), t._draw(), Qt(e); + } + } + _draw() { + const t = this, + { options: e, columnSizes: i, lineWidths: n, ctx: a } = t, + { align: r, labels: l } = e, + c = xt.color, + h = Ti(e.rtl, t.left, t.width), + d = Ve(l.font), + { color: u, padding: f } = l, + g = d.size, + p = g / 2; + let m; + t.drawTitle(), + (a.textAlign = h.textAlign("left")), + (a.textBaseline = "middle"), + (a.lineWidth = 0.5), + (a.font = d.string); + const { boxWidth: x, boxHeight: b, itemHeight: _ } = _s(l, g), + y = t.isHorizontal(), + v = this._computeTitleHeight(); + (m = y + ? { x: o(r, t.left + f, t.right - n[0]), y: t.top + f + v, line: 0 } + : { + x: t.left + f, + y: o(r, t.top + v + f, t.bottom - i[0].height), + line: 0, + }), + Ai(t.ctx, e.textDirection); + const w = _ + f; + t.legendItems.forEach((M, k) => { + (a.strokeStyle = M.fontColor || u), (a.fillStyle = M.fontColor || u); + const S = a.measureText(M.text).width, + P = h.textAlign(M.textAlign || (M.textAlign = l.textAlign)), + D = x + p + S; + let C = m.x, + O = m.y; + h.setWidth(t.width), + y + ? k > 0 && + C + D + f > t.right && + ((O = m.y += w), + m.line++, + (C = m.x = o(r, t.left + f, t.right - n[m.line]))) + : k > 0 && + O + w > t.bottom && + ((C = m.x = C + i[m.line].width + f), + m.line++, + (O = m.y = o(r, t.top + v + f, t.bottom - i[m.line].height))); + !(function (t, e, i) { + if (isNaN(x) || x <= 0 || isNaN(b) || b < 0) return; + a.save(); + const n = K(i.lineWidth, 1); + if ( + ((a.fillStyle = K(i.fillStyle, c)), + (a.lineCap = K(i.lineCap, "butt")), + (a.lineDashOffset = K(i.lineDashOffset, 0)), + (a.lineJoin = K(i.lineJoin, "miter")), + (a.lineWidth = n), + (a.strokeStyle = K(i.strokeStyle, c)), + a.setLineDash(K(i.lineDash, [])), + l.usePointStyle) + ) { + const o = { + radius: (x * Math.SQRT2) / 2, + pointStyle: i.pointStyle, + rotation: i.rotation, + borderWidth: n, + }, + s = h.xPlus(t, x / 2); + Kt(a, o, s, e + p); + } else { + const o = e + Math.max((g - b) / 2, 0), + s = h.leftForLtr(t, x), + r = Fe(i.borderRadius); + a.beginPath(), + Object.values(r).some((t) => 0 !== t) + ? ne(a, { x: s, y: o, w: x, h: b, radius: r }) + : a.rect(s, o, x, b), + a.fill(), + 0 !== n && a.stroke(); + } + a.restore(); + })(h.x(C), O, M), + (C = s(P, C + x + p, y ? C + D : t.right, e.rtl)), + (function (t, e, i) { + ee(a, i.text, t, e + _ / 2, d, { + strikethrough: i.hidden, + textAlign: h.textAlign(i.textAlign), + }); + })(h.x(C), O, M), + y ? (m.x += D + f) : (m.y += w); + }), + Li(t.ctx, e.textDirection); + } + drawTitle() { + const t = this, + e = t.options, + i = e.title, + s = Ve(i.font), + a = Be(i.padding); + if (!i.display) return; + const r = Ti(e.rtl, t.left, t.width), + l = t.ctx, + c = i.position, + h = s.size / 2, + d = a.top + h; + let u, + f = t.left, + g = t.width; + if (this.isHorizontal()) + (g = Math.max(...t.lineWidths)), + (u = t.top + d), + (f = o(e.align, f, t.right - g)); + else { + const i = t.columnSizes.reduce((t, e) => Math.max(t, e.height), 0); + u = + d + + o( + e.align, + t.top, + t.bottom - i - e.labels.padding - t._computeTitleHeight() + ); + } + const p = o(c, f, f + g); + (l.textAlign = r.textAlign(n(c))), + (l.textBaseline = "middle"), + (l.strokeStyle = i.color), + (l.fillStyle = i.color), + (l.font = s.string), + ee(l, i.text, p, u, s); + } + _computeTitleHeight() { + const t = this.options.title, + e = Ve(t.font), + i = Be(t.padding); + return t.display ? e.lineHeight + i.height : 0; + } + _getLegendItemAt(t, e) { + const i = this; + let n, o, s; + if (t >= i.left && t <= i.right && e >= i.top && e <= i.bottom) + for (s = i.legendHitBoxes, n = 0; n < s.length; ++n) + if ( + ((o = s[n]), + t >= o.left && + t <= o.left + o.width && + e >= o.top && + e <= o.top + o.height) + ) + return i.legendItems[n]; + return null; + } + handleEvent(t) { + const e = this, + i = e.options; + if ( + !(function (t, e) { + if ("mousemove" === t && (e.onHover || e.onLeave)) return !0; + if (e.onClick && ("click" === t || "mouseup" === t)) return !0; + return !1; + })(t.type, i) + ) + return; + const n = e._getLegendItemAt(t.x, t.y); + if ("mousemove" === t.type) { + const a = e._hoveredItem, + r = + ((s = n), + null !== (o = a) && + null !== s && + o.datasetIndex === s.datasetIndex && + o.index === s.index); + a && !r && Q(i.onLeave, [t, a, e], e), + (e._hoveredItem = n), + n && !r && Q(i.onHover, [t, n, e], e); + } else n && Q(i.onClick, [t, n, e], e); + var o, s; + } + } + var vs = { + id: "legend", + _element: ys, + start(t, e, i) { + const n = (t.legend = new ys({ ctx: t.ctx, options: i, chart: t })); + ti.configure(t, n, i), ti.addBox(t, n); + }, + stop(t) { + ti.removeBox(t, t.legend), delete t.legend; + }, + beforeUpdate(t, e, i) { + const n = t.legend; + ti.configure(t, n, i), (n.options = i); + }, + afterUpdate(t) { + const e = t.legend; + e.buildLabels(), e.adjustHitBoxes(); + }, + afterEvent(t, e) { + e.replay || t.legend.handleEvent(e.event); + }, + defaults: { + display: !0, + position: "top", + align: "center", + fullSize: !0, + reverse: !1, + weight: 1e3, + onClick(t, e, i) { + const n = e.datasetIndex, + o = i.chart; + o.isDatasetVisible(n) + ? (o.hide(n), (e.hidden = !0)) + : (o.show(n), (e.hidden = !1)); + }, + onHover: null, + onLeave: null, + labels: { + color: (t) => t.chart.options.color, + boxWidth: 40, + padding: 10, + generateLabels(t) { + const e = t.data.datasets, + { + labels: { + usePointStyle: i, + pointStyle: n, + textAlign: o, + color: s, + }, + } = t.legend.options; + return t._getSortedDatasetMetas().map((t) => { + const a = t.controller.getStyle(i ? 0 : void 0), + r = Be(a.borderWidth); + return { + text: e[t.index].label, + fillStyle: a.backgroundColor, + fontColor: s, + hidden: !t.visible, + lineCap: a.borderCapStyle, + lineDash: a.borderDash, + lineDashOffset: a.borderDashOffset, + lineJoin: a.borderJoinStyle, + lineWidth: (r.width + r.height) / 4, + strokeStyle: a.borderColor, + pointStyle: n || a.pointStyle, + rotation: a.rotation, + textAlign: o || a.textAlign, + borderRadius: 0, + datasetIndex: t.index, + }; + }, this); + }, + }, + title: { + color: (t) => t.chart.options.color, + display: !1, + position: "center", + text: "", + }, + }, + descriptors: { + _scriptable: (t) => !t.startsWith("on"), + labels: { + _scriptable: (t) => !["generateLabels", "filter", "sort"].includes(t), + }, + }, + }; + class ws extends Mn { + constructor(t) { + super(), + (this.chart = t.chart), + (this.options = t.options), + (this.ctx = t.ctx), + (this._padding = void 0), + (this.top = void 0), + (this.bottom = void 0), + (this.left = void 0), + (this.right = void 0), + (this.width = void 0), + (this.height = void 0), + (this.position = void 0), + (this.weight = void 0), + (this.fullSize = void 0); + } + update(t, e) { + const i = this, + n = i.options; + if (((i.left = 0), (i.top = 0), !n.display)) + return void (i.width = i.height = i.right = i.bottom = 0); + (i.width = i.right = t), (i.height = i.bottom = e); + const o = Y(n.text) ? n.text.length : 1; + i._padding = Be(n.padding); + const s = o * Ve(n.font).lineHeight + i._padding.height; + i.isHorizontal() ? (i.height = s) : (i.width = s); + } + isHorizontal() { + const t = this.options.position; + return "top" === t || "bottom" === t; + } + _drawArgs(t) { + const { top: e, left: i, bottom: n, right: s, options: a } = this, + r = a.align; + let l, + c, + h, + d = 0; + return ( + this.isHorizontal() + ? ((c = o(r, i, s)), (h = e + t), (l = s - i)) + : ("left" === a.position + ? ((c = i + t), (h = o(r, n, e)), (d = -0.5 * bt)) + : ((c = s - t), (h = o(r, e, n)), (d = 0.5 * bt)), + (l = n - e)), + { titleX: c, titleY: h, maxWidth: l, rotation: d } + ); + } + draw() { + const t = this, + e = t.ctx, + i = t.options; + if (!i.display) return; + const o = Ve(i.font), + s = o.lineHeight / 2 + t._padding.top, + { titleX: a, titleY: r, maxWidth: l, rotation: c } = t._drawArgs(s); + ee(e, i.text, 0, 0, o, { + color: i.color, + maxWidth: l, + rotation: c, + textAlign: n(i.align), + textBaseline: "middle", + translation: [a, r], + }); + } + } + var Ms = { + id: "title", + _element: ws, + start(t, e, i) { + !(function (t, e) { + const i = new ws({ ctx: t.ctx, options: e, chart: t }); + ti.configure(t, i, e), ti.addBox(t, i), (t.titleBlock = i); + })(t, i); + }, + stop(t) { + const e = t.titleBlock; + ti.removeBox(t, e), delete t.titleBlock; + }, + beforeUpdate(t, e, i) { + const n = t.titleBlock; + ti.configure(t, n, i), (n.options = i); + }, + defaults: { + align: "center", + display: !1, + font: { weight: "bold" }, + fullSize: !0, + padding: 10, + position: "top", + text: "", + weight: 2e3, + }, + defaultRoutes: { color: "color" }, + descriptors: { _scriptable: !0, _indexable: !1 }, + }; + const ks = new WeakMap(); + var Ss = { + id: "subtitle", + start(t, e, i) { + const n = new ws({ ctx: t.ctx, options: i, chart: t }); + ti.configure(t, n, i), ti.addBox(t, n), ks.set(t, n); + }, + stop(t) { + ti.removeBox(t, ks.get(t)), ks.delete(t); + }, + beforeUpdate(t, e, i) { + const n = ks.get(t); + ti.configure(t, n, i), (n.options = i); + }, + defaults: { + align: "center", + display: !1, + font: { weight: "normal" }, + fullSize: !0, + padding: 0, + position: "top", + text: "", + weight: 1500, + }, + defaultRoutes: { color: "color" }, + descriptors: { _scriptable: !0, _indexable: !1 }, + }; + const Ps = { + average(t) { + if (!t.length) return !1; + let e, + i, + n = 0, + o = 0, + s = 0; + for (e = 0, i = t.length; e < i; ++e) { + const i = t[e].element; + if (i && i.hasValue()) { + const t = i.tooltipPosition(); + (n += t.x), (o += t.y), ++s; + } + } + return { x: n / s, y: o / s }; + }, + nearest(t, e) { + if (!t.length) return !1; + let i, + n, + o, + s = e.x, + a = e.y, + r = Number.POSITIVE_INFINITY; + for (i = 0, n = t.length; i < n; ++i) { + const n = t[i].element; + if (n && n.hasValue()) { + const t = Bt(e, n.getCenterPoint()); + t < r && ((r = t), (o = n)); + } + } + if (o) { + const t = o.tooltipPosition(); + (s = t.x), (a = t.y); + } + return { x: s, y: a }; + }, + }; + function Ds(t, e) { + return e && (Y(e) ? Array.prototype.push.apply(t, e) : t.push(e)), t; + } + function Cs(t) { + return ("string" == typeof t || t instanceof String) && t.indexOf("\n") > -1 + ? t.split("\n") + : t; + } + function Os(t, e) { + const { element: i, datasetIndex: n, index: o } = e, + s = t.getDatasetMeta(n).controller, + { label: a, value: r } = s.getLabelAndValue(o); + return { + chart: t, + label: a, + parsed: s.getParsed(o), + raw: t.data.datasets[n].data[o], + formattedValue: r, + dataset: s.getDataset(), + dataIndex: o, + datasetIndex: n, + element: i, + }; + } + function Ts(t, e) { + const i = t._chart.ctx, + { body: n, footer: o, title: s } = t, + { boxWidth: a, boxHeight: r } = e, + l = Ve(e.bodyFont), + c = Ve(e.titleFont), + h = Ve(e.footerFont), + d = s.length, + u = o.length, + f = n.length, + g = Be(e.padding); + let p = g.height, + m = 0, + x = n.reduce( + (t, e) => t + e.before.length + e.lines.length + e.after.length, + 0 + ); + if ( + ((x += t.beforeBody.length + t.afterBody.length), + d && + (p += + d * c.lineHeight + (d - 1) * e.titleSpacing + e.titleMarginBottom), + x) + ) { + p += + f * (e.displayColors ? Math.max(r, l.lineHeight) : l.lineHeight) + + (x - f) * l.lineHeight + + (x - 1) * e.bodySpacing; + } + u && + (p += e.footerMarginTop + u * h.lineHeight + (u - 1) * e.footerSpacing); + let b = 0; + const _ = function (t) { + m = Math.max(m, i.measureText(t).width + b); + }; + return ( + i.save(), + (i.font = c.string), + J(t.title, _), + (i.font = l.string), + J(t.beforeBody.concat(t.afterBody), _), + (b = e.displayColors ? a + 2 : 0), + J(n, (t) => { + J(t.before, _), J(t.lines, _), J(t.after, _); + }), + (b = 0), + (i.font = h.string), + J(t.footer, _), + i.restore(), + (m += g.width), + { width: m, height: p } + ); + } + function As(t, e, i, n) { + const { x: o, width: s } = i, + { + width: a, + chartArea: { left: r, right: l }, + } = t; + let c = "center"; + return ( + "center" === n + ? (c = o <= (r + l) / 2 ? "left" : "right") + : o <= s / 2 + ? (c = "left") + : o >= a - s / 2 && (c = "right"), + (function (t, e, i, n) { + const { x: o, width: s } = n, + a = i.caretSize + i.caretPadding; + return ( + ("left" === t && o + s + a > e.width) || + ("right" === t && o - s - a < 0) || + void 0 + ); + })(c, t, e, i) && (c = "center"), + c + ); + } + function Ls(t, e, i) { + const n = + e.yAlign || + (function (t, e) { + const { y: i, height: n } = e; + return i < n / 2 ? "top" : i > t.height - n / 2 ? "bottom" : "center"; + })(t, i); + return { xAlign: e.xAlign || As(t, e, i, n), yAlign: n }; + } + function Rs(t, e, i, n) { + const { caretSize: o, caretPadding: s, cornerRadius: a } = t, + { xAlign: r, yAlign: l } = i, + c = o + s, + h = a + s; + let d = (function (t, e) { + let { x: i, width: n } = t; + return "right" === e ? (i -= n) : "center" === e && (i -= n / 2), i; + })(e, r); + const u = (function (t, e, i) { + let { y: n, height: o } = t; + return "top" === e ? (n += i) : (n -= "bottom" === e ? o + i : o / 2), n; + })(e, l, c); + return ( + "center" === l + ? "left" === r + ? (d += c) + : "right" === r && (d -= c) + : "left" === r + ? (d -= h) + : "right" === r && (d += h), + { x: Ht(d, 0, n.width - e.width), y: Ht(u, 0, n.height - e.height) } + ); + } + function Es(t, e, i) { + const n = Be(i.padding); + return "center" === e + ? t.x + t.width / 2 + : "right" === e + ? t.x + t.width - n.right + : t.x + n.left; + } + function Is(t) { + return Ds([], Cs(t)); + } + function zs(t, e) { + const i = + e && e.dataset && e.dataset.tooltip && e.dataset.tooltip.callbacks; + return i ? t.override(i) : t; + } + class Fs extends Mn { + constructor(t) { + super(), + (this.opacity = 0), + (this._active = []), + (this._chart = t._chart), + (this._eventPosition = void 0), + (this._size = void 0), + (this._cachedAnimations = void 0), + (this._tooltipItems = []), + (this.$animations = void 0), + (this.$context = void 0), + (this.options = t.options), + (this.dataPoints = void 0), + (this.title = void 0), + (this.beforeBody = void 0), + (this.body = void 0), + (this.afterBody = void 0), + (this.footer = void 0), + (this.xAlign = void 0), + (this.yAlign = void 0), + (this.x = void 0), + (this.y = void 0), + (this.height = void 0), + (this.width = void 0), + (this.caretX = void 0), + (this.caretY = void 0), + (this.labelColors = void 0), + (this.labelPointStyles = void 0), + (this.labelTextColors = void 0); + } + initialize(t) { + (this.options = t), + (this._cachedAnimations = void 0), + (this.$context = void 0); + } + _resolveAnimations() { + const t = this, + e = t._cachedAnimations; + if (e) return e; + const i = t._chart, + n = t.options.setContext(t.getContext()), + o = n.enabled && i.options.animation && n.animations, + s = new hn(t._chart, o); + return o._cacheable && (t._cachedAnimations = Object.freeze(s)), s; + } + getContext() { + const t = this; + return ( + t.$context || + (t.$context = + ((e = t._chart.getContext()), + (i = t), + (n = t._tooltipItems), + Object.assign(Object.create(e), { + tooltip: i, + tooltipItems: n, + type: "tooltip", + }))) + ); + var e, i, n; + } + getTitle(t, e) { + const i = this, + { callbacks: n } = e, + o = n.beforeTitle.apply(i, [t]), + s = n.title.apply(i, [t]), + a = n.afterTitle.apply(i, [t]); + let r = []; + return (r = Ds(r, Cs(o))), (r = Ds(r, Cs(s))), (r = Ds(r, Cs(a))), r; + } + getBeforeBody(t, e) { + return Is(e.callbacks.beforeBody.apply(this, [t])); + } + getBody(t, e) { + const i = this, + { callbacks: n } = e, + o = []; + return ( + J(t, (t) => { + const e = { before: [], lines: [], after: [] }, + s = zs(n, t); + Ds(e.before, Cs(s.beforeLabel.call(i, t))), + Ds(e.lines, s.label.call(i, t)), + Ds(e.after, Cs(s.afterLabel.call(i, t))), + o.push(e); + }), + o + ); + } + getAfterBody(t, e) { + return Is(e.callbacks.afterBody.apply(this, [t])); + } + getFooter(t, e) { + const i = this, + { callbacks: n } = e, + o = n.beforeFooter.apply(i, [t]), + s = n.footer.apply(i, [t]), + a = n.afterFooter.apply(i, [t]); + let r = []; + return (r = Ds(r, Cs(o))), (r = Ds(r, Cs(s))), (r = Ds(r, Cs(a))), r; + } + _createItems(t) { + const e = this, + i = e._active, + n = e._chart.data, + o = [], + s = [], + a = []; + let r, + l, + c = []; + for (r = 0, l = i.length; r < l; ++r) c.push(Os(e._chart, i[r])); + return ( + t.filter && (c = c.filter((e, i, o) => t.filter(e, i, o, n))), + t.itemSort && (c = c.sort((e, i) => t.itemSort(e, i, n))), + J(c, (i) => { + const n = zs(t.callbacks, i); + o.push(n.labelColor.call(e, i)), + s.push(n.labelPointStyle.call(e, i)), + a.push(n.labelTextColor.call(e, i)); + }), + (e.labelColors = o), + (e.labelPointStyles = s), + (e.labelTextColors = a), + (e.dataPoints = c), + c + ); + } + update(t, e) { + const i = this, + n = i.options.setContext(i.getContext()), + o = i._active; + let s, + a = []; + if (o.length) { + const t = Ps[n.position].call(i, o, i._eventPosition); + (a = i._createItems(n)), + (i.title = i.getTitle(a, n)), + (i.beforeBody = i.getBeforeBody(a, n)), + (i.body = i.getBody(a, n)), + (i.afterBody = i.getAfterBody(a, n)), + (i.footer = i.getFooter(a, n)); + const e = (i._size = Ts(i, n)), + r = Object.assign({}, t, e), + l = Ls(i._chart, n, r), + c = Rs(n, r, l, i._chart); + (i.xAlign = l.xAlign), + (i.yAlign = l.yAlign), + (s = { + opacity: 1, + x: c.x, + y: c.y, + width: e.width, + height: e.height, + caretX: t.x, + caretY: t.y, + }); + } else 0 !== i.opacity && (s = { opacity: 0 }); + (i._tooltipItems = a), + (i.$context = void 0), + s && i._resolveAnimations().update(i, s), + t && + n.external && + n.external.call(i, { chart: i._chart, tooltip: i, replay: e }); + } + drawCaret(t, e, i, n) { + const o = this.getCaretPosition(t, i, n); + e.lineTo(o.x1, o.y1), e.lineTo(o.x2, o.y2), e.lineTo(o.x3, o.y3); + } + getCaretPosition(t, e, i) { + const { xAlign: n, yAlign: o } = this, + { cornerRadius: s, caretSize: a } = i, + { x: r, y: l } = t, + { width: c, height: h } = e; + let d, u, f, g, p, m; + return ( + "center" === o + ? ((p = l + h / 2), + "left" === n + ? ((d = r), (u = d - a), (g = p + a), (m = p - a)) + : ((d = r + c), (u = d + a), (g = p - a), (m = p + a)), + (f = d)) + : ((u = + "left" === n + ? r + s + a + : "right" === n + ? r + c - s - a + : this.caretX), + "top" === o + ? ((g = l), (p = g - a), (d = u - a), (f = u + a)) + : ((g = l + h), (p = g + a), (d = u + a), (f = u - a)), + (m = g)), + { x1: d, x2: u, x3: f, y1: g, y2: p, y3: m } + ); + } + drawTitle(t, e, i) { + const n = this, + o = n.title, + s = o.length; + let a, r, l; + if (s) { + const c = Ti(i.rtl, n.x, n.width); + for ( + t.x = Es(n, i.titleAlign, i), + e.textAlign = c.textAlign(i.titleAlign), + e.textBaseline = "middle", + a = Ve(i.titleFont), + r = i.titleSpacing, + e.fillStyle = i.titleColor, + e.font = a.string, + l = 0; + l < s; + ++l + ) + e.fillText(o[l], c.x(t.x), t.y + a.lineHeight / 2), + (t.y += a.lineHeight + r), + l + 1 === s && (t.y += i.titleMarginBottom - r); + } + } + _drawColorBox(t, e, i, n, o) { + const s = this, + a = s.labelColors[i], + r = s.labelPointStyles[i], + { boxHeight: l, boxWidth: c } = o, + h = Ve(o.bodyFont), + d = Es(s, "left", o), + u = n.x(d), + f = l < h.lineHeight ? (h.lineHeight - l) / 2 : 0, + g = e.y + f; + if (o.usePointStyle) { + const e = { + radius: Math.min(c, l) / 2, + pointStyle: r.pointStyle, + rotation: r.rotation, + borderWidth: 1, + }, + i = n.leftForLtr(u, c) + c / 2, + s = g + l / 2; + (t.strokeStyle = o.multiKeyBackground), + (t.fillStyle = o.multiKeyBackground), + Kt(t, e, i, s), + (t.strokeStyle = a.borderColor), + (t.fillStyle = a.backgroundColor), + Kt(t, e, i, s); + } else { + (t.lineWidth = a.borderWidth || 1), + (t.strokeStyle = a.borderColor), + t.setLineDash(a.borderDash || []), + (t.lineDashOffset = a.borderDashOffset || 0); + const e = n.leftForLtr(u, c), + i = n.leftForLtr(n.xPlus(u, 1), c - 2), + s = Fe(a.borderRadius); + Object.values(s).some((t) => 0 !== t) + ? (t.beginPath(), + (t.fillStyle = o.multiKeyBackground), + ne(t, { x: e, y: g, w: c, h: l, radius: s }), + t.fill(), + t.stroke(), + (t.fillStyle = a.backgroundColor), + t.beginPath(), + ne(t, { x: i, y: g + 1, w: c - 2, h: l - 2, radius: s }), + t.fill()) + : ((t.fillStyle = o.multiKeyBackground), + t.fillRect(e, g, c, l), + t.strokeRect(e, g, c, l), + (t.fillStyle = a.backgroundColor), + t.fillRect(i, g + 1, c - 2, l - 2)); + } + t.fillStyle = s.labelTextColors[i]; + } + drawBody(t, e, i) { + const n = this, + { body: o } = n, + { + bodySpacing: s, + bodyAlign: a, + displayColors: r, + boxHeight: l, + boxWidth: c, + } = i, + h = Ve(i.bodyFont); + let d = h.lineHeight, + u = 0; + const f = Ti(i.rtl, n.x, n.width), + g = function (i) { + e.fillText(i, f.x(t.x + u), t.y + d / 2), (t.y += d + s); + }, + p = f.textAlign(a); + let m, x, b, _, y, v, w; + for ( + e.textAlign = a, + e.textBaseline = "middle", + e.font = h.string, + t.x = Es(n, p, i), + e.fillStyle = i.bodyColor, + J(n.beforeBody, g), + u = r && "right" !== p ? ("center" === a ? c / 2 + 1 : c + 2) : 0, + _ = 0, + v = o.length; + _ < v; + ++_ + ) { + for ( + m = o[_], + x = n.labelTextColors[_], + e.fillStyle = x, + J(m.before, g), + b = m.lines, + r && + b.length && + (n._drawColorBox(e, t, _, f, i), (d = Math.max(h.lineHeight, l))), + y = 0, + w = b.length; + y < w; + ++y + ) + g(b[y]), (d = h.lineHeight); + J(m.after, g); + } + (u = 0), (d = h.lineHeight), J(n.afterBody, g), (t.y -= s); + } + drawFooter(t, e, i) { + const n = this, + o = n.footer, + s = o.length; + let a, r; + if (s) { + const l = Ti(i.rtl, n.x, n.width); + for ( + t.x = Es(n, i.footerAlign, i), + t.y += i.footerMarginTop, + e.textAlign = l.textAlign(i.footerAlign), + e.textBaseline = "middle", + a = Ve(i.footerFont), + e.fillStyle = i.footerColor, + e.font = a.string, + r = 0; + r < s; + ++r + ) + e.fillText(o[r], l.x(t.x), t.y + a.lineHeight / 2), + (t.y += a.lineHeight + i.footerSpacing); + } + } + drawBackground(t, e, i, n) { + const { xAlign: o, yAlign: s } = this, + { x: a, y: r } = t, + { width: l, height: c } = i, + h = n.cornerRadius; + (e.fillStyle = n.backgroundColor), + (e.strokeStyle = n.borderColor), + (e.lineWidth = n.borderWidth), + e.beginPath(), + e.moveTo(a + h, r), + "top" === s && this.drawCaret(t, e, i, n), + e.lineTo(a + l - h, r), + e.quadraticCurveTo(a + l, r, a + l, r + h), + "center" === s && "right" === o && this.drawCaret(t, e, i, n), + e.lineTo(a + l, r + c - h), + e.quadraticCurveTo(a + l, r + c, a + l - h, r + c), + "bottom" === s && this.drawCaret(t, e, i, n), + e.lineTo(a + h, r + c), + e.quadraticCurveTo(a, r + c, a, r + c - h), + "center" === s && "left" === o && this.drawCaret(t, e, i, n), + e.lineTo(a, r + h), + e.quadraticCurveTo(a, r, a + h, r), + e.closePath(), + e.fill(), + n.borderWidth > 0 && e.stroke(); + } + _updateAnimationTarget(t) { + const e = this, + i = e._chart, + n = e.$animations, + o = n && n.x, + s = n && n.y; + if (o || s) { + const n = Ps[t.position].call(e, e._active, e._eventPosition); + if (!n) return; + const a = (e._size = Ts(e, t)), + r = Object.assign({}, n, e._size), + l = Ls(i, t, r), + c = Rs(t, r, l, i); + (o._to === c.x && s._to === c.y) || + ((e.xAlign = l.xAlign), + (e.yAlign = l.yAlign), + (e.width = a.width), + (e.height = a.height), + (e.caretX = n.x), + (e.caretY = n.y), + e._resolveAnimations().update(e, c)); + } + } + draw(t) { + const e = this, + i = e.options.setContext(e.getContext()); + let n = e.opacity; + if (!n) return; + e._updateAnimationTarget(i); + const o = { width: e.width, height: e.height }, + s = { x: e.x, y: e.y }; + n = Math.abs(n) < 0.001 ? 0 : n; + const a = Be(i.padding), + r = + e.title.length || + e.beforeBody.length || + e.body.length || + e.afterBody.length || + e.footer.length; + i.enabled && + r && + (t.save(), + (t.globalAlpha = n), + e.drawBackground(s, t, o, i), + Ai(t, i.textDirection), + (s.y += a.top), + e.drawTitle(s, t, i), + e.drawBody(s, t, i), + e.drawFooter(s, t, i), + Li(t, i.textDirection), + t.restore()); + } + getActiveElements() { + return this._active || []; + } + setActiveElements(t, e) { + const i = this, + n = i._active, + o = t.map(({ datasetIndex: t, index: e }) => { + const n = i._chart.getDatasetMeta(t); + if (!n) throw new Error("Cannot find a dataset at index " + t); + return { datasetIndex: t, element: n.data[e], index: e }; + }), + s = !tt(n, o), + a = i._positionChanged(o, e); + (s || a) && ((i._active = o), (i._eventPosition = e), i.update(!0)); + } + handleEvent(t, e) { + const i = this, + n = i.options, + o = i._active || []; + let s = !1, + a = []; + "mouseout" !== t.type && + ((a = i._chart.getElementsAtEventForMode(t, n.mode, n, e)), + n.reverse && a.reverse()); + const r = i._positionChanged(a, t); + return ( + (s = e || !tt(a, o) || r), + s && + ((i._active = a), + (n.enabled || n.external) && + ((i._eventPosition = { x: t.x, y: t.y }), i.update(!0, e))), + s + ); + } + _positionChanged(t, e) { + const { caretX: i, caretY: n, options: o } = this, + s = Ps[o.position].call(this, t, e); + return !1 !== s && (i !== s.x || n !== s.y); + } + } + Fs.positioners = Ps; + var Bs = { + id: "tooltip", + _element: Fs, + positioners: Ps, + afterInit(t, e, i) { + i && (t.tooltip = new Fs({ _chart: t, options: i })); + }, + beforeUpdate(t, e, i) { + t.tooltip && t.tooltip.initialize(i); + }, + reset(t, e, i) { + t.tooltip && t.tooltip.initialize(i); + }, + afterDraw(t) { + const e = t.tooltip, + i = { tooltip: e }; + !1 !== t.notifyPlugins("beforeTooltipDraw", i) && + (e && e.draw(t.ctx), t.notifyPlugins("afterTooltipDraw", i)); + }, + afterEvent(t, e) { + if (t.tooltip) { + const i = e.replay; + t.tooltip.handleEvent(e.event, i) && (e.changed = !0); + } + }, + defaults: { + enabled: !0, + external: null, + position: "average", + backgroundColor: "rgba(0,0,0,0.8)", + titleColor: "#fff", + titleFont: { weight: "bold" }, + titleSpacing: 2, + titleMarginBottom: 6, + titleAlign: "left", + bodyColor: "#fff", + bodySpacing: 2, + bodyFont: {}, + bodyAlign: "left", + footerColor: "#fff", + footerSpacing: 2, + footerMarginTop: 6, + footerFont: { weight: "bold" }, + footerAlign: "left", + padding: 6, + caretPadding: 2, + caretSize: 5, + cornerRadius: 6, + boxHeight: (t, e) => e.bodyFont.size, + boxWidth: (t, e) => e.bodyFont.size, + multiKeyBackground: "#fff", + displayColors: !0, + borderColor: "rgba(0,0,0,0)", + borderWidth: 0, + animation: { duration: 400, easing: "easeOutQuart" }, + animations: { + numbers: { + type: "number", + properties: ["x", "y", "width", "height", "caretX", "caretY"], + }, + opacity: { easing: "linear", duration: 200 }, + }, + callbacks: { + beforeTitle: H, + title(t) { + if (t.length > 0) { + const e = t[0], + i = e.chart.data.labels, + n = i ? i.length : 0; + if (this && this.options && "dataset" === this.options.mode) + return e.dataset.label || ""; + if (e.label) return e.label; + if (n > 0 && e.dataIndex < n) return i[e.dataIndex]; + } + return ""; + }, + afterTitle: H, + beforeBody: H, + beforeLabel: H, + label(t) { + if (this && this.options && "dataset" === this.options.mode) + return t.label + ": " + t.formattedValue || t.formattedValue; + let e = t.dataset.label || ""; + e && (e += ": "); + const i = t.formattedValue; + return $(i) || (e += i), e; + }, + labelColor(t) { + const e = t.chart + .getDatasetMeta(t.datasetIndex) + .controller.getStyle(t.dataIndex); + return { + borderColor: e.borderColor, + backgroundColor: e.backgroundColor, + borderWidth: e.borderWidth, + borderDash: e.borderDash, + borderDashOffset: e.borderDashOffset, + borderRadius: 0, + }; + }, + labelTextColor() { + return this.options.bodyColor; + }, + labelPointStyle(t) { + const e = t.chart + .getDatasetMeta(t.datasetIndex) + .controller.getStyle(t.dataIndex); + return { pointStyle: e.pointStyle, rotation: e.rotation }; + }, + afterLabel: H, + afterBody: H, + beforeFooter: H, + footer: H, + afterFooter: H, + }, + }, + defaultRoutes: { + bodyFont: "font", + footerFont: "font", + titleFont: "font", + }, + descriptors: { + _scriptable: (t) => + "filter" !== t && "itemSort" !== t && "external" !== t, + _indexable: !1, + callbacks: { _scriptable: !1, _indexable: !1 }, + animation: { _fallback: !1 }, + animations: { _fallback: "animation" }, + }, + additionalOptionScopes: ["interaction"], + }, + Vs = Object.freeze({ + __proto__: null, + Decimation: ts, + Filler: bs, + Legend: vs, + SubTitle: Ss, + Title: Ms, + Tooltip: Bs, + }); + function Ws(t, e, i) { + const n = t.indexOf(e); + if (-1 === n) + return ((t, e, i) => + "string" == typeof e ? t.push(e) - 1 : isNaN(e) ? null : i)(t, e, i); + return n !== t.lastIndexOf(e) ? i : n; + } + class Ns extends En { + constructor(t) { + super(t), (this._startValue = void 0), (this._valueRange = 0); + } + parse(t, e) { + if ($(t)) return null; + const i = this.getLabels(); + return ((t, e) => + null === t + ? null + : Ht( + Math.round(t), + 0, + e + ))((e = isFinite(e) && i[e] === t ? e : Ws(i, t, K(e, t))), i.length - 1); + } + determineDataLimits() { + const t = this, + { minDefined: e, maxDefined: i } = t.getUserBounds(); + let { min: n, max: o } = t.getMinMax(!0); + "ticks" === t.options.bounds && + (e || (n = 0), i || (o = t.getLabels().length - 1)), + (t.min = n), + (t.max = o); + } + buildTicks() { + const t = this, + e = t.min, + i = t.max, + n = t.options.offset, + o = []; + let s = t.getLabels(); + (s = 0 === e && i === s.length - 1 ? s : s.slice(e, i + 1)), + (t._valueRange = Math.max(s.length - (n ? 0 : 1), 1)), + (t._startValue = t.min - (n ? 0.5 : 0)); + for (let t = e; t <= i; t++) o.push({ value: t }); + return o; + } + getLabelForValue(t) { + const e = this.getLabels(); + return t >= 0 && t < e.length ? e[t] : t; + } + configure() { + const t = this; + super.configure(), + t.isHorizontal() || (t._reversePixels = !t._reversePixels); + } + getPixelForValue(t) { + const e = this; + return ( + "number" != typeof t && (t = e.parse(t)), + null === t + ? NaN + : e.getPixelForDecimal((t - e._startValue) / e._valueRange) + ); + } + getPixelForTick(t) { + const e = this.ticks; + return t < 0 || t > e.length - 1 + ? null + : this.getPixelForValue(e[t].value); + } + getValueForPixel(t) { + const e = this; + return Math.round( + e._startValue + e.getDecimalForPixel(t) * e._valueRange + ); + } + getBasePixel() { + return this.bottom; + } + } + function Hs(t, e, { horizontal: i, minRotation: n }) { + const o = Et(n), + s = (i ? Math.sin(o) : Math.cos(o)) || 0.001, + a = 0.75 * e * ("" + t).length; + return Math.min(e / s, a); + } + (Ns.id = "category"), + (Ns.defaults = { ticks: { callback: Ns.prototype.getLabelForValue } }); + class js extends En { + constructor(t) { + super(t), + (this.start = void 0), + (this.end = void 0), + (this._startValue = void 0), + (this._endValue = void 0), + (this._valueRange = 0); + } + parse(t, e) { + return $(t) || + (("number" == typeof t || t instanceof Number) && !isFinite(+t)) + ? null + : +t; + } + handleTickRangeOptions() { + const t = this, + { beginAtZero: e } = t.options, + { minDefined: i, maxDefined: n } = t.getUserBounds(); + let { min: o, max: s } = t; + const a = (t) => (o = i ? o : t), + r = (t) => (s = n ? s : t); + if (e) { + const t = Dt(o), + e = Dt(s); + t < 0 && e < 0 ? r(0) : t > 0 && e > 0 && a(0); + } + if (o === s) { + let t = 1; + (s >= Number.MAX_SAFE_INTEGER || o <= Number.MIN_SAFE_INTEGER) && + (t = Math.abs(0.05 * s)), + r(s + t), + e || a(o - t); + } + (t.min = o), (t.max = s); + } + getTickLimit() { + const t = this, + e = t.options.ticks; + let i, + { maxTicksLimit: n, stepSize: o } = e; + return ( + o + ? (i = Math.ceil(t.max / o) - Math.floor(t.min / o) + 1) + : ((i = t.computeTickLimit()), (n = n || 11)), + n && (i = Math.min(n, i)), + i + ); + } + computeTickLimit() { + return Number.POSITIVE_INFINITY; + } + buildTicks() { + const t = this, + e = t.options, + i = e.ticks; + let n = t.getTickLimit(); + n = Math.max(2, n); + const o = (function (t, e) { + const i = [], + { + bounds: n, + step: o, + min: s, + max: a, + precision: r, + count: l, + maxTicks: c, + maxDigits: h, + includeBounds: d, + } = t, + u = o || 1, + f = c - 1, + { min: g, max: p } = e, + m = !$(s), + x = !$(a), + b = !$(l), + _ = (p - g) / (h + 1); + let y, + v, + w, + M, + k = Ct((p - g) / f / u) * u; + if (k < 1e-14 && !m && !x) return [{ value: g }, { value: p }]; + (M = Math.ceil(p / k) - Math.floor(g / k)), + M > f && (k = Ct((M * k) / f / u) * u), + $(r) || ((y = Math.pow(10, r)), (k = Math.ceil(k * y) / y)), + "ticks" === n + ? ((v = Math.floor(g / k) * k), (w = Math.ceil(p / k) * k)) + : ((v = g), (w = p)), + m && x && o && Lt((a - s) / o, k / 1e3) + ? ((M = Math.round(Math.min((a - s) / k, c))), + (k = (a - s) / M), + (v = s), + (w = a)) + : b + ? ((v = m ? s : v), (w = x ? a : w), (M = l - 1), (k = (w - v) / M)) + : ((M = (w - v) / k), + (M = At(M, Math.round(M), k / 1e3) + ? Math.round(M) + : Math.ceil(M))); + const S = Math.max(zt(k), zt(v)); + (y = Math.pow(10, $(r) ? S : r)), + (v = Math.round(v * y) / y), + (w = Math.round(w * y) / y); + let P = 0; + for ( + m && + (d && v !== s + ? (i.push({ value: s }), + v < s && P++, + At(Math.round((v + P * k) * y) / y, s, Hs(s, _, t)) && P++) + : v < s && P++); + P < M; + ++P + ) + i.push({ value: Math.round((v + P * k) * y) / y }); + return ( + x && d && w !== a + ? At(i[i.length - 1].value, a, Hs(a, _, t)) + ? (i[i.length - 1].value = a) + : i.push({ value: a }) + : (x && w !== a) || i.push({ value: w }), + i + ); + })( + { + maxTicks: n, + bounds: e.bounds, + min: e.min, + max: e.max, + precision: i.precision, + step: i.stepSize, + count: i.count, + maxDigits: t._maxDigits(), + horizontal: t.isHorizontal(), + minRotation: i.minRotation || 0, + includeBounds: !1 !== i.includeBounds, + }, + t._range || t + ); + return ( + "ticks" === e.bounds && Rt(o, t, "value"), + e.reverse + ? (o.reverse(), (t.start = t.max), (t.end = t.min)) + : ((t.start = t.min), (t.end = t.max)), + o + ); + } + configure() { + const t = this, + e = t.ticks; + let i = t.min, + n = t.max; + if ((super.configure(), t.options.offset && e.length)) { + const t = (n - i) / Math.max(e.length - 1, 1) / 2; + (i -= t), (n += t); + } + (t._startValue = i), (t._endValue = n), (t._valueRange = n - i); + } + getLabelForValue(t) { + return Oi(t, this.chart.options.locale); + } + } + class $s extends js { + determineDataLimits() { + const t = this, + { min: e, max: i } = t.getMinMax(!0); + (t.min = X(e) ? e : 0), + (t.max = X(i) ? i : 1), + t.handleTickRangeOptions(); + } + computeTickLimit() { + const t = this, + e = t.isHorizontal(), + i = e ? t.width : t.height, + n = Et(t.options.ticks.minRotation), + o = (e ? Math.sin(n) : Math.cos(n)) || 0.001, + s = t._resolveTickFontOptions(0); + return Math.ceil(i / Math.min(40, s.lineHeight / o)); + } + getPixelForValue(t) { + return null === t + ? NaN + : this.getPixelForDecimal((t - this._startValue) / this._valueRange); + } + getValueForPixel(t) { + return this._startValue + this.getDecimalForPixel(t) * this._valueRange; + } + } + function Ys(t) { + return 1 === t / Math.pow(10, Math.floor(Pt(t))); + } + ($s.id = "linear"), + ($s.defaults = { ticks: { callback: Sn.formatters.numeric } }); + class Us extends En { + constructor(t) { + super(t), + (this.start = void 0), + (this.end = void 0), + (this._startValue = void 0), + (this._valueRange = 0); + } + parse(t, e) { + const i = js.prototype.parse.apply(this, [t, e]); + if (0 !== i) return X(i) && i > 0 ? i : null; + this._zero = !0; + } + determineDataLimits() { + const t = this, + { min: e, max: i } = t.getMinMax(!0); + (t.min = X(e) ? Math.max(0, e) : null), + (t.max = X(i) ? Math.max(0, i) : null), + t.options.beginAtZero && (t._zero = !0), + t.handleTickRangeOptions(); + } + handleTickRangeOptions() { + const t = this, + { minDefined: e, maxDefined: i } = t.getUserBounds(); + let n = t.min, + o = t.max; + const s = (t) => (n = e ? n : t), + a = (t) => (o = i ? o : t), + r = (t, e) => Math.pow(10, Math.floor(Pt(t)) + e); + n === o && (n <= 0 ? (s(1), a(10)) : (s(r(n, -1)), a(r(o, 1)))), + n <= 0 && s(r(o, -1)), + o <= 0 && a(r(n, 1)), + t._zero && + t.min !== t._suggestedMin && + n === r(t.min, 0) && + s(r(n, -1)), + (t.min = n), + (t.max = o); + } + buildTicks() { + const t = this, + e = t.options, + i = (function (t, e) { + const i = Math.floor(Pt(e.max)), + n = Math.ceil(e.max / Math.pow(10, i)), + o = []; + let s = q(t.min, Math.pow(10, Math.floor(Pt(e.min)))), + a = Math.floor(Pt(s)), + r = Math.floor(s / Math.pow(10, a)), + l = a < 0 ? Math.pow(10, Math.abs(a)) : 1; + do { + o.push({ value: s, major: Ys(s) }), + ++r, + 10 === r && ((r = 1), ++a, (l = a >= 0 ? 1 : l)), + (s = Math.round(r * Math.pow(10, a) * l) / l); + } while (a < i || (a === i && r < n)); + const c = q(t.max, s); + return o.push({ value: c, major: Ys(s) }), o; + })({ min: t._userMin, max: t._userMax }, t); + return ( + "ticks" === e.bounds && Rt(i, t, "value"), + e.reverse + ? (i.reverse(), (t.start = t.max), (t.end = t.min)) + : ((t.start = t.min), (t.end = t.max)), + i + ); + } + getLabelForValue(t) { + return void 0 === t ? "0" : Oi(t, this.chart.options.locale); + } + configure() { + const t = this, + e = t.min; + super.configure(), + (t._startValue = Pt(e)), + (t._valueRange = Pt(t.max) - Pt(e)); + } + getPixelForValue(t) { + const e = this; + return ( + (void 0 !== t && 0 !== t) || (t = e.min), + null === t || isNaN(t) + ? NaN + : e.getPixelForDecimal( + t === e.min ? 0 : (Pt(t) - e._startValue) / e._valueRange + ) + ); + } + getValueForPixel(t) { + const e = this, + i = e.getDecimalForPixel(t); + return Math.pow(10, e._startValue + i * e._valueRange); + } + } + function Xs(t) { + const e = t.ticks; + if (e.display && t.display) { + const t = Be(e.backdropPadding); + return K(e.font && e.font.size, xt.font.size) + t.height; + } + return 0; + } + function qs(t, e, i, n, o) { + return t === n || t === o + ? { start: e - i / 2, end: e + i / 2 } + : t < n || t > o + ? { start: e - i, end: e } + : { start: e, end: e + i }; + } + function Ks(t) { + const e = { l: 0, r: t.width, t: 0, b: t.height - t.paddingTop }, + i = {}, + n = [], + o = [], + s = t.getLabels().length; + for (let c = 0; c < s; c++) { + const s = t.options.pointLabels.setContext(t.getPointLabelContext(c)); + o[c] = s.padding; + const h = t.getPointPosition(c, t.drawingArea + o[c]), + d = Ve(s.font), + u = + ((a = t.ctx), + (r = d), + (l = Y((l = t._pointLabels[c])) ? l : [l]), + { w: Ut(a, r.string, l), h: l.length * r.lineHeight }); + n[c] = u; + const f = t.getIndexAngle(c), + g = It(f), + p = qs(g, h.x, u.w, 0, 180), + m = qs(g, h.y, u.h, 90, 270); + p.start < e.l && ((e.l = p.start), (i.l = f)), + p.end > e.r && ((e.r = p.end), (i.r = f)), + m.start < e.t && ((e.t = m.start), (i.t = f)), + m.end > e.b && ((e.b = m.end), (i.b = f)); + } + var a, r, l; + t._setReductions(t.drawingArea, e, i), + (t._pointLabelItems = (function (t, e, i) { + const n = [], + o = t.getLabels().length, + s = t.options, + a = Xs(s), + r = t.getDistanceFromCenterForValue(s.ticks.reverse ? t.min : t.max); + for (let s = 0; s < o; s++) { + const o = 0 === s ? a / 2 : 0, + l = t.getPointPosition(s, r + o + i[s]), + c = It(t.getIndexAngle(s)), + h = e[s], + d = Qs(l.y, h.h, c), + u = Gs(c), + f = Zs(l.x, h.w, u); + n.push({ + x: l.x, + y: d, + textAlign: u, + left: f, + top: d, + right: f + h.w, + bottom: d + h.h, + }); + } + return n; + })(t, n, o)); + } + function Gs(t) { + return 0 === t || 180 === t ? "center" : t < 180 ? "left" : "right"; + } + function Zs(t, e, i) { + return "right" === i ? (t -= e) : "center" === i && (t -= e / 2), t; + } + function Qs(t, e, i) { + return ( + 90 === i || 270 === i ? (t -= e / 2) : (i > 270 || i < 90) && (t -= e), t + ); + } + function Js(t, e, i, n) { + const { ctx: o } = t; + if (i) o.arc(t.xCenter, t.yCenter, e, 0, _t); + else { + let i = t.getPointPosition(0, e); + o.moveTo(i.x, i.y); + for (let s = 1; s < n; s++) + (i = t.getPointPosition(s, e)), o.lineTo(i.x, i.y); + } + } + function ta(t) { + return Tt(t) ? t : 0; + } + (Us.id = "logarithmic"), + (Us.defaults = { + ticks: { callback: Sn.formatters.logarithmic, major: { enabled: !0 } }, + }); + class ea extends js { + constructor(t) { + super(t), + (this.xCenter = void 0), + (this.yCenter = void 0), + (this.drawingArea = void 0), + (this._pointLabels = []), + (this._pointLabelItems = []); + } + setDimensions() { + const t = this; + (t.width = t.maxWidth), + (t.height = t.maxHeight), + (t.paddingTop = Xs(t.options) / 2), + (t.xCenter = Math.floor(t.width / 2)), + (t.yCenter = Math.floor((t.height - t.paddingTop) / 2)), + (t.drawingArea = Math.min(t.height - t.paddingTop, t.width) / 2); + } + determineDataLimits() { + const t = this, + { min: e, max: i } = t.getMinMax(!1); + (t.min = X(e) && !isNaN(e) ? e : 0), + (t.max = X(i) && !isNaN(i) ? i : 0), + t.handleTickRangeOptions(); + } + computeTickLimit() { + return Math.ceil(this.drawingArea / Xs(this.options)); + } + generateTickLabels(t) { + const e = this; + js.prototype.generateTickLabels.call(e, t), + (e._pointLabels = e.getLabels().map((t, i) => { + const n = Q(e.options.pointLabels.callback, [t, i], e); + return n || 0 === n ? n : ""; + })); + } + fit() { + const t = this, + e = t.options; + e.display && e.pointLabels.display ? Ks(t) : t.setCenterPoint(0, 0, 0, 0); + } + _setReductions(t, e, i) { + const n = this; + let o = e.l / Math.sin(i.l), + s = Math.max(e.r - n.width, 0) / Math.sin(i.r), + a = -e.t / Math.cos(i.t), + r = -Math.max(e.b - (n.height - n.paddingTop), 0) / Math.cos(i.b); + (o = ta(o)), + (s = ta(s)), + (a = ta(a)), + (r = ta(r)), + (n.drawingArea = Math.max( + t / 2, + Math.min(Math.floor(t - (o + s) / 2), Math.floor(t - (a + r) / 2)) + )), + n.setCenterPoint(o, s, a, r); + } + setCenterPoint(t, e, i, n) { + const o = this, + s = o.width - e - o.drawingArea, + a = t + o.drawingArea, + r = i + o.drawingArea, + l = o.height - o.paddingTop - n - o.drawingArea; + (o.xCenter = Math.floor((a + s) / 2 + o.left)), + (o.yCenter = Math.floor((r + l) / 2 + o.top + o.paddingTop)); + } + getIndexAngle(t) { + return Wt( + t * (_t / this.getLabels().length) + Et(this.options.startAngle || 0) + ); + } + getDistanceFromCenterForValue(t) { + const e = this; + if ($(t)) return NaN; + const i = e.drawingArea / (e.max - e.min); + return e.options.reverse ? (e.max - t) * i : (t - e.min) * i; + } + getValueForDistanceFromCenter(t) { + if ($(t)) return NaN; + const e = this, + i = t / (e.drawingArea / (e.max - e.min)); + return e.options.reverse ? e.max - i : e.min + i; + } + getPointLabelContext(t) { + const e = this, + i = e._pointLabels || []; + if (t >= 0 && t < i.length) { + const n = i[t]; + return (function (t, e, i) { + return Object.assign(Object.create(t), { + label: i, + index: e, + type: "pointLabel", + }); + })(e.getContext(), t, n); + } + } + getPointPosition(t, e) { + const i = this, + n = i.getIndexAngle(t) - Mt; + return { + x: Math.cos(n) * e + i.xCenter, + y: Math.sin(n) * e + i.yCenter, + angle: n, + }; + } + getPointPositionForValue(t, e) { + return this.getPointPosition(t, this.getDistanceFromCenterForValue(e)); + } + getBasePosition(t) { + return this.getPointPositionForValue(t || 0, this.getBaseValue()); + } + getPointLabelPosition(t) { + const { left: e, top: i, right: n, bottom: o } = this._pointLabelItems[t]; + return { left: e, top: i, right: n, bottom: o }; + } + drawBackground() { + const t = this, + { + backgroundColor: e, + grid: { circular: i }, + } = t.options; + if (e) { + const n = t.ctx; + n.save(), + n.beginPath(), + Js( + t, + t.getDistanceFromCenterForValue(t._endValue), + i, + t.getLabels().length + ), + n.closePath(), + (n.fillStyle = e), + n.fill(), + n.restore(); + } + } + drawGrid() { + const t = this, + e = t.ctx, + i = t.options, + { angleLines: n, grid: o } = i, + s = t.getLabels().length; + let a, r, l; + if ( + (i.pointLabels.display && + (function (t, e) { + const { + ctx: i, + options: { pointLabels: n }, + } = t; + for (let o = e - 1; o >= 0; o--) { + const e = n.setContext(t.getPointLabelContext(o)), + s = Ve(e.font), + { + x: a, + y: r, + textAlign: l, + left: c, + top: h, + right: d, + bottom: u, + } = t._pointLabelItems[o], + { backdropColor: f } = e; + if (!$(f)) { + const t = Be(e.backdropPadding); + (i.fillStyle = f), + i.fillRect( + c - t.left, + h - t.top, + d - c + t.width, + u - h + t.height + ); + } + ee(i, t._pointLabels[o], a, r + s.lineHeight / 2, s, { + color: e.color, + textAlign: l, + textBaseline: "middle", + }); + } + })(t, s), + o.display && + t.ticks.forEach((e, i) => { + if (0 !== i) { + r = t.getDistanceFromCenterForValue(e.value); + const n = o.setContext(t.getContext(i - 1)); + !(function (t, e, i, n) { + const o = t.ctx, + s = e.circular, + { color: a, lineWidth: r } = e; + (!s && !n) || + !a || + !r || + i < 0 || + (o.save(), + (o.strokeStyle = a), + (o.lineWidth = r), + o.setLineDash(e.borderDash), + (o.lineDashOffset = e.borderDashOffset), + o.beginPath(), + Js(t, i, s, n), + o.closePath(), + o.stroke(), + o.restore()); + })(t, n, r, s); + } + }), + n.display) + ) { + for (e.save(), a = t.getLabels().length - 1; a >= 0; a--) { + const o = n.setContext(t.getPointLabelContext(a)), + { color: s, lineWidth: c } = o; + c && + s && + ((e.lineWidth = c), + (e.strokeStyle = s), + e.setLineDash(o.borderDash), + (e.lineDashOffset = o.borderDashOffset), + (r = t.getDistanceFromCenterForValue( + i.ticks.reverse ? t.min : t.max + )), + (l = t.getPointPosition(a, r)), + e.beginPath(), + e.moveTo(t.xCenter, t.yCenter), + e.lineTo(l.x, l.y), + e.stroke()); + } + e.restore(); + } + } + drawBorder() {} + drawLabels() { + const t = this, + e = t.ctx, + i = t.options, + n = i.ticks; + if (!n.display) return; + const o = t.getIndexAngle(0); + let s, a; + e.save(), + e.translate(t.xCenter, t.yCenter), + e.rotate(o), + (e.textAlign = "center"), + (e.textBaseline = "middle"), + t.ticks.forEach((o, r) => { + if (0 === r && !i.reverse) return; + const l = n.setContext(t.getContext(r)), + c = Ve(l.font); + if ( + ((s = t.getDistanceFromCenterForValue(t.ticks[r].value)), + l.showLabelBackdrop) + ) { + (e.font = c.string), + (a = e.measureText(o.label).width), + (e.fillStyle = l.backdropColor); + const t = Be(l.backdropPadding); + e.fillRect( + -a / 2 - t.left, + -s - c.size / 2 - t.top, + a + t.width, + c.size + t.height + ); + } + ee(e, o.label, 0, -s, c, { color: l.color }); + }), + e.restore(); + } + drawTitle() {} + } + (ea.id = "radialLinear"), + (ea.defaults = { + display: !0, + animate: !0, + position: "chartArea", + angleLines: { + display: !0, + lineWidth: 1, + borderDash: [], + borderDashOffset: 0, + }, + grid: { circular: !1 }, + startAngle: 0, + ticks: { showLabelBackdrop: !0, callback: Sn.formatters.numeric }, + pointLabels: { + backdropColor: void 0, + backdropPadding: 2, + display: !0, + font: { size: 10 }, + callback: (t) => t, + padding: 5, + }, + }), + (ea.defaultRoutes = { + "angleLines.color": "borderColor", + "pointLabels.color": "color", + "ticks.color": "color", + }), + (ea.descriptors = { angleLines: { _fallback: "grid" } }); + const ia = { + millisecond: { common: !0, size: 1, steps: 1e3 }, + second: { common: !0, size: 1e3, steps: 60 }, + minute: { common: !0, size: 6e4, steps: 60 }, + hour: { common: !0, size: 36e5, steps: 24 }, + day: { common: !0, size: 864e5, steps: 30 }, + week: { common: !1, size: 6048e5, steps: 4 }, + month: { common: !0, size: 2628e6, steps: 12 }, + quarter: { common: !1, size: 7884e6, steps: 4 }, + year: { common: !0, size: 3154e7 }, + }, + na = Object.keys(ia); + function oa(t, e) { + return t - e; + } + function sa(t, e) { + if ($(e)) return null; + const i = t._adapter, + { parser: n, round: o, isoWeekday: s } = t._parseOpts; + let a = e; + return ( + "function" == typeof n && (a = n(a)), + X(a) || (a = "string" == typeof n ? i.parse(a, n) : i.parse(a)), + null === a + ? null + : (o && + (a = + "week" !== o || (!Tt(s) && !0 !== s) + ? i.startOf(a, o) + : i.startOf(a, "isoWeek", s)), + +a) + ); + } + function aa(t, e, i, n) { + const o = na.length; + for (let s = na.indexOf(t); s < o - 1; ++s) { + const t = ia[na[s]], + o = t.steps ? t.steps : Number.MAX_SAFE_INTEGER; + if (t.common && Math.ceil((i - e) / (o * t.size)) <= n) return na[s]; + } + return na[o - 1]; + } + function ra(t, e, i) { + if (i) { + if (i.length) { + const { lo: n, hi: o } = oe(i, e); + t[i[n] >= e ? i[n] : i[o]] = !0; + } + } else t[e] = !0; + } + function la(t, e, i) { + const n = [], + o = {}, + s = e.length; + let a, r; + for (a = 0; a < s; ++a) + (r = e[a]), (o[r] = a), n.push({ value: r, major: !1 }); + return 0 !== s && i + ? (function (t, e, i, n) { + const o = t._adapter, + s = +o.startOf(e[0].value, n), + a = e[e.length - 1].value; + let r, l; + for (r = s; r <= a; r = +o.add(r, 1, n)) + (l = i[r]), l >= 0 && (e[l].major = !0); + return e; + })(t, n, o, i) + : n; + } + class ca extends En { + constructor(t) { + super(t), + (this._cache = { data: [], labels: [], all: [] }), + (this._unit = "day"), + (this._majorUnit = void 0), + (this._offsets = {}), + (this._normalized = !1), + (this._parseOpts = void 0); + } + init(t, e) { + const i = t.time || (t.time = {}), + n = (this._adapter = new co._date(t.adapters.date)); + st(i.displayFormats, n.formats()), + (this._parseOpts = { + parser: i.parser, + round: i.round, + isoWeekday: i.isoWeekday, + }), + super.init(t), + (this._normalized = e.normalized); + } + parse(t, e) { + return void 0 === t ? null : sa(this, t); + } + beforeLayout() { + super.beforeLayout(), (this._cache = { data: [], labels: [], all: [] }); + } + determineDataLimits() { + const t = this, + e = t.options, + i = t._adapter, + n = e.time.unit || "day"; + let { min: o, max: s, minDefined: a, maxDefined: r } = t.getUserBounds(); + function l(t) { + a || isNaN(t.min) || (o = Math.min(o, t.min)), + r || isNaN(t.max) || (s = Math.max(s, t.max)); + } + (a && r) || + (l(t._getLabelBounds()), + ("ticks" === e.bounds && "labels" === e.ticks.source) || + l(t.getMinMax(!1))), + (o = X(o) && !isNaN(o) ? o : +i.startOf(Date.now(), n)), + (s = X(s) && !isNaN(s) ? s : +i.endOf(Date.now(), n) + 1), + (t.min = Math.min(o, s - 1)), + (t.max = Math.max(o + 1, s)); + } + _getLabelBounds() { + const t = this.getLabelTimestamps(); + let e = Number.POSITIVE_INFINITY, + i = Number.NEGATIVE_INFINITY; + return ( + t.length && ((e = t[0]), (i = t[t.length - 1])), { min: e, max: i } + ); + } + buildTicks() { + const t = this, + e = t.options, + i = e.time, + n = e.ticks, + o = "labels" === n.source ? t.getLabelTimestamps() : t._generate(); + "ticks" === e.bounds && + o.length && + ((t.min = t._userMin || o[0]), (t.max = t._userMax || o[o.length - 1])); + const s = t.min, + a = re(o, s, t.max); + return ( + (t._unit = + i.unit || + (n.autoSkip + ? aa(i.minUnit, t.min, t.max, t._getLabelCapacity(s)) + : (function (t, e, i, n, o) { + for (let s = na.length - 1; s >= na.indexOf(i); s--) { + const i = na[s]; + if (ia[i].common && t._adapter.diff(o, n, i) >= e - 1) + return i; + } + return na[i ? na.indexOf(i) : 0]; + })(t, a.length, i.minUnit, t.min, t.max))), + (t._majorUnit = + n.major.enabled && "year" !== t._unit + ? (function (t) { + for (let e = na.indexOf(t) + 1, i = na.length; e < i; ++e) + if (ia[na[e]].common) return na[e]; + })(t._unit) + : void 0), + t.initOffsets(o), + e.reverse && a.reverse(), + la(t, a, t._majorUnit) + ); + } + initOffsets(t) { + const e = this; + let i, + n, + o = 0, + s = 0; + e.options.offset && + t.length && + ((i = e.getDecimalForValue(t[0])), + (o = 1 === t.length ? 1 - i : (e.getDecimalForValue(t[1]) - i) / 2), + (n = e.getDecimalForValue(t[t.length - 1])), + (s = + 1 === t.length + ? n + : (n - e.getDecimalForValue(t[t.length - 2])) / 2)); + const a = t.length < 3 ? 0.5 : 0.25; + (o = Ht(o, 0, a)), + (s = Ht(s, 0, a)), + (e._offsets = { start: o, end: s, factor: 1 / (o + 1 + s) }); + } + _generate() { + const t = this, + e = t._adapter, + i = t.min, + n = t.max, + o = t.options, + s = o.time, + a = s.unit || aa(s.minUnit, i, n, t._getLabelCapacity(i)), + r = K(s.stepSize, 1), + l = "week" === a && s.isoWeekday, + c = Tt(l) || !0 === l, + h = {}; + let d, + u, + f = i; + if ( + (c && (f = +e.startOf(f, "isoWeek", l)), + (f = +e.startOf(f, c ? "day" : a)), + e.diff(n, i, a) > 1e5 * r) + ) + throw new Error( + i + " and " + n + " are too far apart with stepSize of " + r + " " + a + ); + const g = "data" === o.ticks.source && t.getDataTimestamps(); + for (d = f, u = 0; d < n; d = +e.add(d, r, a), u++) ra(h, d, g); + return ( + (d !== n && "ticks" !== o.bounds && 1 !== u) || ra(h, d, g), + Object.keys(h) + .sort((t, e) => t - e) + .map((t) => +t) + ); + } + getLabelForValue(t) { + const e = this._adapter, + i = this.options.time; + return i.tooltipFormat + ? e.format(t, i.tooltipFormat) + : e.format(t, i.displayFormats.datetime); + } + _tickFormatFunction(t, e, i, n) { + const o = this, + s = o.options, + a = s.time.displayFormats, + r = o._unit, + l = o._majorUnit, + c = r && a[r], + h = l && a[l], + d = i[e], + u = l && h && d && d.major, + f = o._adapter.format(t, n || (u ? h : c)), + g = s.ticks.callback; + return g ? Q(g, [f, e, i], o) : f; + } + generateTickLabels(t) { + let e, i, n; + for (e = 0, i = t.length; e < i; ++e) + (n = t[e]), (n.label = this._tickFormatFunction(n.value, e, t)); + } + getDecimalForValue(t) { + const e = this; + return null === t ? NaN : (t - e.min) / (e.max - e.min); + } + getPixelForValue(t) { + const e = this, + i = e._offsets, + n = e.getDecimalForValue(t); + return e.getPixelForDecimal((i.start + n) * i.factor); + } + getValueForPixel(t) { + const e = this, + i = e._offsets, + n = e.getDecimalForPixel(t) / i.factor - i.end; + return e.min + n * (e.max - e.min); + } + _getLabelSize(t) { + const e = this, + i = e.options.ticks, + n = e.ctx.measureText(t).width, + o = Et(e.isHorizontal() ? i.maxRotation : i.minRotation), + s = Math.cos(o), + a = Math.sin(o), + r = e._resolveTickFontOptions(0).size; + return { w: n * s + r * a, h: n * a + r * s }; + } + _getLabelCapacity(t) { + const e = this, + i = e.options.time, + n = i.displayFormats, + o = n[i.unit] || n.millisecond, + s = e._tickFormatFunction(t, 0, la(e, [t], e._majorUnit), o), + a = e._getLabelSize(s), + r = Math.floor(e.isHorizontal() ? e.width / a.w : e.height / a.h) - 1; + return r > 0 ? r : 1; + } + getDataTimestamps() { + const t = this; + let e, + i, + n = t._cache.data || []; + if (n.length) return n; + const o = t.getMatchingVisibleMetas(); + if (t._normalized && o.length) + return (t._cache.data = o[0].controller.getAllParsedValues(t)); + for (e = 0, i = o.length; e < i; ++e) + n = n.concat(o[e].controller.getAllParsedValues(t)); + return (t._cache.data = t.normalize(n)); + } + getLabelTimestamps() { + const t = this, + e = t._cache.labels || []; + let i, n; + if (e.length) return e; + const o = t.getLabels(); + for (i = 0, n = o.length; i < n; ++i) e.push(sa(t, o[i])); + return (t._cache.labels = t._normalized ? e : t.normalize(e)); + } + normalize(t) { + return de(t.sort(oa)); + } + } + function ha(t, e, i) { + let n, + o, + s, + a, + r = 0, + l = t.length - 1; + i + ? (e >= t[r].pos && e <= t[l].pos && ({ lo: r, hi: l } = se(t, "pos", e)), + ({ pos: n, time: s } = t[r]), + ({ pos: o, time: a } = t[l])) + : (e >= t[r].time && + e <= t[l].time && + ({ lo: r, hi: l } = se(t, "time", e)), + ({ time: n, pos: s } = t[r]), + ({ time: o, pos: a } = t[l])); + const c = o - n; + return c ? s + ((a - s) * (e - n)) / c : s; + } + (ca.id = "time"), + (ca.defaults = { + bounds: "data", + adapters: {}, + time: { + parser: !1, + unit: !1, + round: !1, + isoWeekday: !1, + minUnit: "millisecond", + displayFormats: {}, + }, + ticks: { source: "auto", major: { enabled: !1 } }, + }); + class da extends ca { + constructor(t) { + super(t), + (this._table = []), + (this._minPos = void 0), + (this._tableRange = void 0); + } + initOffsets() { + const t = this, + e = t._getTimestampsForTable(), + i = (t._table = t.buildLookupTable(e)); + (t._minPos = ha(i, t.min)), + (t._tableRange = ha(i, t.max) - t._minPos), + super.initOffsets(e); + } + buildLookupTable(t) { + const { min: e, max: i } = this, + n = [], + o = []; + let s, a, r, l, c; + for (s = 0, a = t.length; s < a; ++s) + (l = t[s]), l >= e && l <= i && n.push(l); + if (n.length < 2) + return [ + { time: e, pos: 0 }, + { time: i, pos: 1 }, + ]; + for (s = 0, a = n.length; s < a; ++s) + (c = n[s + 1]), + (r = n[s - 1]), + (l = n[s]), + Math.round((c + r) / 2) !== l && + o.push({ time: l, pos: s / (a - 1) }); + return o; + } + _getTimestampsForTable() { + const t = this; + let e = t._cache.all || []; + if (e.length) return e; + const i = t.getDataTimestamps(), + n = t.getLabelTimestamps(); + return ( + (e = + i.length && n.length ? t.normalize(i.concat(n)) : i.length ? i : n), + (e = t._cache.all = e), + e + ); + } + getDecimalForValue(t) { + return (ha(this._table, t) - this._minPos) / this._tableRange; + } + getValueForPixel(t) { + const e = this, + i = e._offsets, + n = e.getDecimalForPixel(t) / i.factor - i.end; + return ha(e._table, n * e._tableRange + e._minPos, !0); + } + } + (da.id = "timeseries"), (da.defaults = ca.defaults); + var ua = Object.freeze({ + __proto__: null, + CategoryScale: Ns, + LinearScale: $s, + LogarithmicScale: Us, + RadialLinearScale: ea, + TimeScale: ca, + TimeSeriesScale: da, + }); + return ( + oo.register(Po, ua, Zo, Vs), + (oo.helpers = { ...Ni }), + (oo._adapters = co), + (oo.Animation = ln), + (oo.Animations = hn), + (oo.animator = a), + (oo.controllers = zn.controllers.items), + (oo.DatasetController = wn), + (oo.Element = Mn), + (oo.elements = Zo), + (oo.Interaction = Ae), + (oo.layouts = ti), + (oo.platforms = sn), + (oo.Scale = En), + (oo.Ticks = Sn), + Object.assign(oo, Po, ua, Zo, Vs, sn), + (oo.Chart = oo), + "undefined" != typeof window && (window.Chart = oo), + oo + ); + }); + \ No newline at end of file diff --git a/apiferia/src/assets/js/dashboard.js b/apiferia/src/assets/js/dashboard.js new file mode 100644 index 00000000..9cbc558d --- /dev/null +++ b/apiferia/src/assets/js/dashboard.js @@ -0,0 +1,92 @@ +/** + * Modal_Right + * datePicker + * dashboardChart + */ + +(function ($) { + "use strict"; + + var Modal_Right = function () { + const dashboard = $(".sidebar-dashboard"); + var adminbar = $("#wpadminbar").height(); + $(".sidebar-dashboard").css({ top: adminbar }); + + if (dashboard.length) { + const open = function () { + dashboard.addClass("active"); + $(".dashboard-overlay").addClass("active"); + }; + const close = function () { + dashboard.removeClass("active"); + $(".dashboard-overlay").removeClass("active"); + }; + + $(".dashboard-toggle").on("click", function () { + open(); + }); + $(".dashboard-overlay, .btn-menu").on( + "click", + function () { + close(); + } + ); + + } + }; + + /* Datepicker + -------------------------------------------------------------------------------------*/ + var datePicker = function () { + if ($(".hasDatepicker").length > 0) { + $(".hasDatepicker").datepicker({ + firstDay: 1, + dateFormat: "dd/mm/yy", + }); + } + }; + +var dashboardChart = function () { + if ($(".tfcl-page-insight").length) { + // diagram + var ctx = document.getElementById('lineChart').getContext('2d'); + var myChart = new Chart(ctx, { + type: 'line', + height: 50, + backgroundColor: 'linear-gradient(180deg, rgba(255, 169, 32, 0.2) 0.26%, rgba(255, 169, 32, 0) 100%)', + data: { + labels: ['Mar 21', 'Mar 22', 'Mar 23', 'Mar 24', 'Mar 25', 'Mar 26', 'Mar 27', 'Mar 28', 'Mar 29', 'Mar 30', 'Mar 31'], + datasets: [{ + label: '# of Votes', + data: [50, 100,15, 150, 25, 50, 100,15, 50, 25,75], + backgroundColor: [ + 'rgba(255, 169, 32, 1)' + + ], + // background: linear-gradient(180deg, rgba(255, 169, 32, 0.2) 0.26%, rgba(255, 169, 32, 0) 100%), + + borderColor: [ + 'rgba(255, 169, 32, 1)', + ], + borderWidth: 2 + }] + }, + options: { + responsive: true, + scales: { + y: { + beginAtZero: true, + } + } + } + }); + } + } + + // Dom Ready + $(function () { + Modal_Right(); + dashboardChart(); + datePicker(); + }); +})(jQuery); diff --git a/apiferia/src/assets/js/infobox.min.js b/apiferia/src/assets/js/infobox.min.js new file mode 100644 index 00000000..ca0ff140 --- /dev/null +++ b/apiferia/src/assets/js/infobox.min.js @@ -0,0 +1,35 @@ +eval( + (function (p, a, c, k, e, r) { + e = function (c) { + return ( + (c < a ? "" : e(parseInt(c / a))) + + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) + ); + }; + if (!"".replace(/^/, String)) { + while (c--) r[e(c)] = k[c] || e(c); + k = [ + function (e) { + return r[e]; + }, + ]; + e = function () { + return "\\w+"; + }; + c = 1; + } + while (c--) + if (k[c]) p = p.replace(new RegExp("\\b" + e(c) + "\\b", "g"), k[c]); + return p; + })( + '7 8(a){a=a||{};r.s.1R.2k(2,3d);2.Q=a.1v||"";2.1H=a.1B||J;2.S=a.1G||0;2.H=a.1z||1h r.s.1Y(0,0);2.B=a.U||1h r.s.2E(0,0);2.15=a.13||t;2.1p=a.1t||"2h";2.1m=a.F||{};2.1E=a.1C||"3g";2.P=a.1j||"3b://38.r.33/2Y/2T/2N/1r.2K";3(a.1j===""){2.P=""}2.1f=a.1x||1h r.s.1Y(1,1);3(q a.A==="p"){3(q a.18==="p"){a.A=L}v{a.A=!a.18}}2.w=!a.A;2.17=a.1n||J;2.1I=a.2g||"2e";2.16=a.1l||J;2.4=t;2.z=t;2.14=t;2.V=t;2.E=t;2.R=t}8.9=1h r.s.1R();8.9.25=7(){5 i;5 f;5 a;5 d=2;5 c=7(e){e.20=L;3(e.1i){e.1i()}};5 b=7(e){e.30=J;3(e.1Z){e.1Z()}3(!d.16){c(e)}};3(!2.4){2.4=1e.2S("2Q");2.1d();3(q 2.Q.1u==="p"){2.4.O=2.G()+2.Q}v{2.4.O=2.G();2.4.1a(2.Q)}2.2J()[2.1I].1a(2.4);2.1w();3(2.4.6.D){2.R=L}v{3(2.S!==0&&2.4.Z>2.S){2.4.6.D=2.S;2.4.6.2D="2A";2.R=L}v{a=2.1P();2.4.6.D=(2.4.Z-a.W-a.11)+"12";2.R=J}}2.1F(2.1H);3(!2.16){2.E=[];f=["2t","1O","2q","2p","1M","2o","2n","2m","2l"];1o(i=0;ih){e=o.x+g+k+i-h}3(2.17){3(o.y<(-l+j+b)){I=o.y+l-j-b}v 3((o.y+l+j)>f){I=o.y+l+j-f}}v{3(o.y<(-l+j)){I=o.y+l-j}v 3((o.y+b+l+j)>f){I=o.y+b+l+j-f}}3(!(e===0&&I===0)){5 c=m.3a();m.39(e,I)}}}};8.9.1d=7(){5 i,F;3(2.4){2.4.37=2.1p;2.4.6.36="";F=2.1m;1o(i 35 F){3(F.34(i)){2.4.6[i]=F[i]}}2.4.6.32="31(0)";3(q 2.4.6.X!=="p"&&2.4.6.X!==""){2.4.6.2Z="\\"2X:2W.2V.2U(2R="+(2.4.6.X*1X)+")\\"";2.4.6.2P="2O(X="+(2.4.6.X*1X)+")"}2.4.6.U="2M";2.4.6.M=\'1c\';3(2.15!==t){2.4.6.13=2.15}}};8.9.1P=7(){5 c;5 a={1b:0,1g:0,W:0,11:0};5 b=2.4;3(1e.1s&&1e.1s.1W){c=b.2L.1s.1W(b,"");3(c){a.1b=C(c.1V,10)||0;a.1g=C(c.1U,10)||0;a.W=C(c.1T,10)||0;a.11=C(c.1S,10)||0}}v 3(1e.2I.N){3(b.N){a.1b=C(b.N.1V,10)||0;a.1g=C(b.N.1U,10)||0;a.W=C(b.N.1T,10)||0;a.11=C(b.N.1S,10)||0}}K a};8.9.2H=7(){3(2.4){2.4.2G.2F(2.4);2.4=t}};8.9.1y=7(){2.25();5 a=2.23().2C(2.B);2.4.6.W=(a.x+2.H.D)+"12";3(2.17){2.4.6.1g=-(a.y+2.H.1k)+"12"}v{2.4.6.1b=(a.y+2.H.1k)+"12"}3(2.w){2.4.6.M="1c"}v{2.4.6.M="A"}};8.9.2B=7(a){3(q a.1t!=="p"){2.1p=a.1t;2.1d()}3(q a.F!=="p"){2.1m=a.F;2.1d()}3(q a.1v!=="p"){2.1Q(a.1v)}3(q a.1B!=="p"){2.1H=a.1B}3(q a.1G!=="p"){2.S=a.1G}3(q a.1z!=="p"){2.H=a.1z}3(q a.1n!=="p"){2.17=a.1n}3(q a.U!=="p"){2.1q(a.U)}3(q a.13!=="p"){2.22(a.13)}3(q a.1C!=="p"){2.1E=a.1C}3(q a.1j!=="p"){2.P=a.1j}3(q a.1x!=="p"){2.1f=a.1x}3(q a.18!=="p"){2.w=a.18}3(q a.A!=="p"){2.w=!a.A}3(q a.1l!=="p"){2.16=a.1l}3(2.4){2.1y()}};8.9.1Q=7(a){2.Q=a;3(2.4){3(2.z){r.s.u.Y(2.z);2.z=t}3(!2.R){2.4.6.D=""}3(q a.1u==="p"){2.4.O=2.G()+a}v{2.4.O=2.G();2.4.1a(a)}3(!2.R){2.4.6.D=2.4.Z+"12";3(q a.1u==="p"){2.4.O=2.G()+a}v{2.4.O=2.G();2.4.1a(a)}}2.1w()}r.s.u.T(2,"2z")};8.9.1q=7(a){2.B=a;3(2.4){2.1y()}r.s.u.T(2,"21")};8.9.22=7(a){2.15=a;3(2.4){2.4.6.13=a}r.s.u.T(2,"2y")};8.9.2x=7(a){2.w=!a;3(2.4){2.4.6.M=(2.w?"1c":"A")}};8.9.2w=7(){K 2.Q};8.9.1A=7(){K 2.B};8.9.2v=7(){K 2.15};8.9.2u=7(){5 a;3((q 2.1D()==="p")||(2.1D()===t)){a=J}v{a=!2.w}K a};8.9.3i=7(){2.w=J;3(2.4){2.4.6.M="A"}};8.9.3j=7(){2.w=L;3(2.4){2.4.6.M="1c"}};8.9.2s=7(c,b){5 a=2;3(b){2.B=b.1A();2.14=r.s.u.2r(b,"21",7(){a.1q(2.1A())})}2.1N(c);3(2.4){2.1F()}};8.9.1r=7(){5 i;3(2.z){r.s.u.Y(2.z);2.z=t}3(2.E){1o(i=0;i<2.E.1L;i++){r.s.u.Y(2.E[i])}2.E=t}3(2.14){r.s.u.Y(2.14);2.14=t}3(2.V){r.s.u.Y(2.V);2.V=t}2.1N(t)};', + 62, + 210, + "||this|if|div_|var|style|function|InfoBox|prototype||||||||||||||||undefined|typeof|google|maps|null|event|else|isHidden_|||closeListener_|visible|position_|parseInt|width|eventListeners_|boxStyle|getCloseBoxImg_|pixelOffset_|yOffset|false|return|true|visibility|currentStyle|innerHTML|closeBoxURL_|content_|fixedWidthSet_|maxWidth_|trigger|position|contextListener_|left|opacity|removeListener|offsetWidth||right|px|zIndex|moveListener_|zIndex_|enableEventPropagation_|alignBottom_|isHidden|addDomListener|appendChild|top|hidden|setBoxStyle_|document|infoBoxClearance_|bottom|new|stopPropagation|closeBoxURL|height|enableEventPropagation|boxStyle_|alignBottom|for|boxClass_|setPosition|close|defaultView|boxClass|nodeType|content|addClickHandler_|infoBoxClearance|draw|pixelOffset|getPosition|disableAutoPan|closeBoxMargin|getMap|closeBoxMargin_|panBox_|maxWidth|disableAutoPan_|pane_|cursor|push|length|click|setMap|mouseover|getBoxWidths_|setContent|OverlayView|borderRightWidth|borderLeftWidth|borderBottomWidth|borderTopWidth|getComputedStyle|100|Size|preventDefault|cancelBubble|position_changed|setZIndex|getProjection|offsetHeight|createInfoBoxDiv_|getBounds|getCloseClickHandler_|margin|pointer|relative|align|src|img|floatPane|domready|pane|infoBox|contextmenu|default|apply|touchmove|touchend|touchstart|dblclick|mouseup|mouseout|addListener|open|mousedown|getVisible|getZIndex|getContent|setVisible|zindex_changed|content_changed|auto|setOptions|fromLatLngToDivPixel|overflow|LatLng|removeChild|parentNode|onRemove|documentElement|getPanes|gif|ownerDocument|absolute|mapfiles|alpha|filter|div|Opacity|createElement|en_us|Alpha|Microsoft|DXImageTransform|progid|intl|MsFilter|returnValue|translateZ|WebkitTransform|com|hasOwnProperty|in|cssText|className|www|panBy|getCenter|http|fromLatLngToContainerPixel|arguments|getDiv|setCenter|2px|contains|show|hide|Map|instanceof|closeclick|firstChild".split( + "|" + ), + 0, + {} + ) + ); + \ No newline at end of file diff --git a/apiferia/src/assets/js/jquery-ui.js b/apiferia/src/assets/js/jquery-ui.js new file mode 100644 index 00000000..1a613bf2 --- /dev/null +++ b/apiferia/src/assets/js/jquery-ui.js @@ -0,0 +1,19062 @@ +/*! jQuery UI - v1.13.2 - 2022-07-14 +* http://jqueryui.com +* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-patch.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js +* Copyright jQuery Foundation and other contributors; Licensed MIT */ + +( function( factory ) { + "use strict"; + + if ( typeof define === "function" && define.amd ) { + + // AMD. Register as an anonymous module. + define( [ "jquery" ], factory ); + } else { + + // Browser globals + factory( jQuery ); + } +} )( function( $ ) { +"use strict"; + +$.ui = $.ui || {}; + +var version = $.ui.version = "1.13.2"; + + +/*! + * jQuery UI Widget 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Widget +//>>group: Core +//>>description: Provides a factory for creating stateful widgets with a common API. +//>>docs: http://api.jqueryui.com/jQuery.widget/ +//>>demos: http://jqueryui.com/widget/ + + +var widgetUuid = 0; +var widgetHasOwnProperty = Array.prototype.hasOwnProperty; +var widgetSlice = Array.prototype.slice; + +$.cleanData = ( function( orig ) { + return function( elems ) { + var events, elem, i; + for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) { + + // Only trigger remove when necessary to save time + events = $._data( elem, "events" ); + if ( events && events.remove ) { + $( elem ).triggerHandler( "remove" ); + } + } + orig( elems ); + }; +} )( $.cleanData ); + +$.widget = function( name, base, prototype ) { + var existingConstructor, constructor, basePrototype; + + // ProxiedPrototype allows the provided prototype to remain unmodified + // so that it can be used as a mixin for multiple widgets (#8876) + var proxiedPrototype = {}; + + var namespace = name.split( "." )[ 0 ]; + name = name.split( "." )[ 1 ]; + var fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + if ( Array.isArray( prototype ) ) { + prototype = $.extend.apply( null, [ {} ].concat( prototype ) ); + } + + // Create selector for plugin + $.expr.pseudos[ fullName.toLowerCase() ] = function( elem ) { + return !!$.data( elem, fullName ); + }; + + $[ namespace ] = $[ namespace ] || {}; + existingConstructor = $[ namespace ][ name ]; + constructor = $[ namespace ][ name ] = function( options, element ) { + + // Allow instantiation without "new" keyword + if ( !this || !this._createWidget ) { + return new constructor( options, element ); + } + + // Allow instantiation without initializing for simple inheritance + // must use "new" keyword (the code above always passes args) + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + // Extend with the existing constructor to carry over any static properties + $.extend( constructor, existingConstructor, { + version: prototype.version, + + // Copy the object used to create the prototype in case we need to + // redefine the widget later + _proto: $.extend( {}, prototype ), + + // Track widgets that inherit from this widget in case this widget is + // redefined after a widget inherits from it + _childConstructors: [] + } ); + + basePrototype = new base(); + + // We need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from + basePrototype.options = $.widget.extend( {}, basePrototype.options ); + $.each( prototype, function( prop, value ) { + if ( typeof value !== "function" ) { + proxiedPrototype[ prop ] = value; + return; + } + proxiedPrototype[ prop ] = ( function() { + function _super() { + return base.prototype[ prop ].apply( this, arguments ); + } + + function _superApply( args ) { + return base.prototype[ prop ].apply( this, args ); + } + + return function() { + var __super = this._super; + var __superApply = this._superApply; + var returnValue; + + this._super = _super; + this._superApply = _superApply; + + returnValue = value.apply( this, arguments ); + + this._super = __super; + this._superApply = __superApply; + + return returnValue; + }; + } )(); + } ); + constructor.prototype = $.widget.extend( basePrototype, { + + // TODO: remove support for widgetEventPrefix + // always use the name + a colon as the prefix, e.g., draggable:start + // don't prefix for widgets that aren't DOM-based + widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name + }, proxiedPrototype, { + constructor: constructor, + namespace: namespace, + widgetName: name, + widgetFullName: fullName + } ); + + // If this widget is being redefined then we need to find all widgets that + // are inheriting from it and redefine all of them so that they inherit from + // the new version of this widget. We're essentially trying to replace one + // level in the prototype chain. + if ( existingConstructor ) { + $.each( existingConstructor._childConstructors, function( i, child ) { + var childPrototype = child.prototype; + + // Redefine the child widget using the same prototype that was + // originally used, but inherit from the new version of the base + $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, + child._proto ); + } ); + + // Remove the list of existing child constructors from the old constructor + // so the old child constructors can be garbage collected + delete existingConstructor._childConstructors; + } else { + base._childConstructors.push( constructor ); + } + + $.widget.bridge( name, constructor ); + + return constructor; +}; + +$.widget.extend = function( target ) { + var input = widgetSlice.call( arguments, 1 ); + var inputIndex = 0; + var inputLength = input.length; + var key; + var value; + + for ( ; inputIndex < inputLength; inputIndex++ ) { + for ( key in input[ inputIndex ] ) { + value = input[ inputIndex ][ key ]; + if ( widgetHasOwnProperty.call( input[ inputIndex ], key ) && value !== undefined ) { + + // Clone objects + if ( $.isPlainObject( value ) ) { + target[ key ] = $.isPlainObject( target[ key ] ) ? + $.widget.extend( {}, target[ key ], value ) : + + // Don't extend strings, arrays, etc. with objects + $.widget.extend( {}, value ); + + // Copy everything else by reference + } else { + target[ key ] = value; + } + } + } + } + return target; +}; + +$.widget.bridge = function( name, object ) { + var fullName = object.prototype.widgetFullName || name; + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string"; + var args = widgetSlice.call( arguments, 1 ); + var returnValue = this; + + if ( isMethodCall ) { + + // If this is an empty collection, we need to have the instance method + // return undefined instead of the jQuery instance + if ( !this.length && options === "instance" ) { + returnValue = undefined; + } else { + this.each( function() { + var methodValue; + var instance = $.data( this, fullName ); + + if ( options === "instance" ) { + returnValue = instance; + return false; + } + + if ( !instance ) { + return $.error( "cannot call methods on " + name + + " prior to initialization; " + + "attempted to call method '" + options + "'" ); + } + + if ( typeof instance[ options ] !== "function" || + options.charAt( 0 ) === "_" ) { + return $.error( "no such method '" + options + "' for " + name + + " widget instance" ); + } + + methodValue = instance[ options ].apply( instance, args ); + + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue && methodValue.jquery ? + returnValue.pushStack( methodValue.get() ) : + methodValue; + return false; + } + } ); + } + } else { + + // Allow multiple hashes to be passed on init + if ( args.length ) { + options = $.widget.extend.apply( null, [ options ].concat( args ) ); + } + + this.each( function() { + var instance = $.data( this, fullName ); + if ( instance ) { + instance.option( options || {} ); + if ( instance._init ) { + instance._init(); + } + } else { + $.data( this, fullName, new object( options, this ) ); + } + } ); + } + + return returnValue; + }; +}; + +$.Widget = function( /* options, element */ ) {}; +$.Widget._childConstructors = []; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + defaultElement: "
    ", + + options: { + classes: {}, + disabled: false, + + // Callbacks + create: null + }, + + _createWidget: function( options, element ) { + element = $( element || this.defaultElement || this )[ 0 ]; + this.element = $( element ); + this.uuid = widgetUuid++; + this.eventNamespace = "." + this.widgetName + this.uuid; + + this.bindings = $(); + this.hoverable = $(); + this.focusable = $(); + this.classesElementLookup = {}; + + if ( element !== this ) { + $.data( element, this.widgetFullName, this ); + this._on( true, this.element, { + remove: function( event ) { + if ( event.target === element ) { + this.destroy(); + } + } + } ); + this.document = $( element.style ? + + // Element within the document + element.ownerDocument : + + // Element is window or document + element.document || element ); + this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow ); + } + + this.options = $.widget.extend( {}, + this.options, + this._getCreateOptions(), + options ); + + this._create(); + + if ( this.options.disabled ) { + this._setOptionDisabled( this.options.disabled ); + } + + this._trigger( "create", null, this._getCreateEventData() ); + this._init(); + }, + + _getCreateOptions: function() { + return {}; + }, + + _getCreateEventData: $.noop, + + _create: $.noop, + + _init: $.noop, + + destroy: function() { + var that = this; + + this._destroy(); + $.each( this.classesElementLookup, function( key, value ) { + that._removeClass( value, key ); + } ); + + // We can probably remove the unbind calls in 2.0 + // all event bindings should go through this._on() + this.element + .off( this.eventNamespace ) + .removeData( this.widgetFullName ); + this.widget() + .off( this.eventNamespace ) + .removeAttr( "aria-disabled" ); + + // Clean up events and states + this.bindings.off( this.eventNamespace ); + }, + + _destroy: $.noop, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + var parts; + var curOption; + var i; + + if ( arguments.length === 0 ) { + + // Don't return a reference to the internal hash + return $.widget.extend( {}, this.options ); + } + + if ( typeof key === "string" ) { + + // Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } + options = {}; + parts = key.split( "." ); + key = parts.shift(); + if ( parts.length ) { + curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); + for ( i = 0; i < parts.length - 1; i++ ) { + curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; + curOption = curOption[ parts[ i ] ]; + } + key = parts.pop(); + if ( arguments.length === 1 ) { + return curOption[ key ] === undefined ? null : curOption[ key ]; + } + curOption[ key ] = value; + } else { + if ( arguments.length === 1 ) { + return this.options[ key ] === undefined ? null : this.options[ key ]; + } + options[ key ] = value; + } + } + + this._setOptions( options ); + + return this; + }, + + _setOptions: function( options ) { + var key; + + for ( key in options ) { + this._setOption( key, options[ key ] ); + } + + return this; + }, + + _setOption: function( key, value ) { + if ( key === "classes" ) { + this._setOptionClasses( value ); + } + + this.options[ key ] = value; + + if ( key === "disabled" ) { + this._setOptionDisabled( value ); + } + + return this; + }, + + _setOptionClasses: function( value ) { + var classKey, elements, currentElements; + + for ( classKey in value ) { + currentElements = this.classesElementLookup[ classKey ]; + if ( value[ classKey ] === this.options.classes[ classKey ] || + !currentElements || + !currentElements.length ) { + continue; + } + + // We are doing this to create a new jQuery object because the _removeClass() call + // on the next line is going to destroy the reference to the current elements being + // tracked. We need to save a copy of this collection so that we can add the new classes + // below. + elements = $( currentElements.get() ); + this._removeClass( currentElements, classKey ); + + // We don't use _addClass() here, because that uses this.options.classes + // for generating the string of classes. We want to use the value passed in from + // _setOption(), this is the new value of the classes option which was passed to + // _setOption(). We pass this value directly to _classes(). + elements.addClass( this._classes( { + element: elements, + keys: classKey, + classes: value, + add: true + } ) ); + } + }, + + _setOptionDisabled: function( value ) { + this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value ); + + // If the widget is becoming disabled, then nothing is interactive + if ( value ) { + this._removeClass( this.hoverable, null, "ui-state-hover" ); + this._removeClass( this.focusable, null, "ui-state-focus" ); + } + }, + + enable: function() { + return this._setOptions( { disabled: false } ); + }, + + disable: function() { + return this._setOptions( { disabled: true } ); + }, + + _classes: function( options ) { + var full = []; + var that = this; + + options = $.extend( { + element: this.element, + classes: this.options.classes || {} + }, options ); + + function bindRemoveEvent() { + var nodesToBind = []; + + options.element.each( function( _, element ) { + var isTracked = $.map( that.classesElementLookup, function( elements ) { + return elements; + } ) + .some( function( elements ) { + return elements.is( element ); + } ); + + if ( !isTracked ) { + nodesToBind.push( element ); + } + } ); + + that._on( $( nodesToBind ), { + remove: "_untrackClassesElement" + } ); + } + + function processClassString( classes, checkOption ) { + var current, i; + for ( i = 0; i < classes.length; i++ ) { + current = that.classesElementLookup[ classes[ i ] ] || $(); + if ( options.add ) { + bindRemoveEvent(); + current = $( $.uniqueSort( current.get().concat( options.element.get() ) ) ); + } else { + current = $( current.not( options.element ).get() ); + } + that.classesElementLookup[ classes[ i ] ] = current; + full.push( classes[ i ] ); + if ( checkOption && options.classes[ classes[ i ] ] ) { + full.push( options.classes[ classes[ i ] ] ); + } + } + } + + if ( options.keys ) { + processClassString( options.keys.match( /\S+/g ) || [], true ); + } + if ( options.extra ) { + processClassString( options.extra.match( /\S+/g ) || [] ); + } + + return full.join( " " ); + }, + + _untrackClassesElement: function( event ) { + var that = this; + $.each( that.classesElementLookup, function( key, value ) { + if ( $.inArray( event.target, value ) !== -1 ) { + that.classesElementLookup[ key ] = $( value.not( event.target ).get() ); + } + } ); + + this._off( $( event.target ) ); + }, + + _removeClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, false ); + }, + + _addClass: function( element, keys, extra ) { + return this._toggleClass( element, keys, extra, true ); + }, + + _toggleClass: function( element, keys, extra, add ) { + add = ( typeof add === "boolean" ) ? add : extra; + var shift = ( typeof element === "string" || element === null ), + options = { + extra: shift ? keys : extra, + keys: shift ? element : keys, + element: shift ? this.element : element, + add: add + }; + options.element.toggleClass( this._classes( options ), add ); + return this; + }, + + _on: function( suppressDisabledCheck, element, handlers ) { + var delegateElement; + var instance = this; + + // No suppressDisabledCheck flag, shuffle arguments + if ( typeof suppressDisabledCheck !== "boolean" ) { + handlers = element; + element = suppressDisabledCheck; + suppressDisabledCheck = false; + } + + // No element argument, shuffle and use this.element + if ( !handlers ) { + handlers = element; + element = this.element; + delegateElement = this.widget(); + } else { + element = delegateElement = $( element ); + this.bindings = this.bindings.add( element ); + } + + $.each( handlers, function( event, handler ) { + function handlerProxy() { + + // Allow widgets to customize the disabled handling + // - disabled as an array instead of boolean + // - disabled class as method for disabling individual parts + if ( !suppressDisabledCheck && + ( instance.options.disabled === true || + $( this ).hasClass( "ui-state-disabled" ) ) ) { + return; + } + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + + // Copy the guid so direct unbinding works + if ( typeof handler !== "string" ) { + handlerProxy.guid = handler.guid = + handler.guid || handlerProxy.guid || $.guid++; + } + + var match = event.match( /^([\w:-]*)\s*(.*)$/ ); + var eventName = match[ 1 ] + instance.eventNamespace; + var selector = match[ 2 ]; + + if ( selector ) { + delegateElement.on( eventName, selector, handlerProxy ); + } else { + element.on( eventName, handlerProxy ); + } + } ); + }, + + _off: function( element, eventName ) { + eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) + + this.eventNamespace; + element.off( eventName ); + + // Clear the stack to avoid memory leaks (#10056) + this.bindings = $( this.bindings.not( element ).get() ); + this.focusable = $( this.focusable.not( element ).get() ); + this.hoverable = $( this.hoverable.not( element ).get() ); + }, + + _delay: function( handler, delay ) { + function handlerProxy() { + return ( typeof handler === "string" ? instance[ handler ] : handler ) + .apply( instance, arguments ); + } + var instance = this; + return setTimeout( handlerProxy, delay || 0 ); + }, + + _hoverable: function( element ) { + this.hoverable = this.hoverable.add( element ); + this._on( element, { + mouseenter: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-hover" ); + }, + mouseleave: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-hover" ); + } + } ); + }, + + _focusable: function( element ) { + this.focusable = this.focusable.add( element ); + this._on( element, { + focusin: function( event ) { + this._addClass( $( event.currentTarget ), null, "ui-state-focus" ); + }, + focusout: function( event ) { + this._removeClass( $( event.currentTarget ), null, "ui-state-focus" ); + } + } ); + }, + + _trigger: function( type, event, data ) { + var prop, orig; + var callback = this.options[ type ]; + + data = data || {}; + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + + // The original event may come from any element + // so we need to reset the target on the new event + event.target = this.element[ 0 ]; + + // Copy original event properties over to the new event + orig = event.originalEvent; + if ( orig ) { + for ( prop in orig ) { + if ( !( prop in event ) ) { + event[ prop ] = orig[ prop ]; + } + } + } + + this.element.trigger( event, data ); + return !( typeof callback === "function" && + callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false || + event.isDefaultPrevented() ); + } +}; + +$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { + $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { + if ( typeof options === "string" ) { + options = { effect: options }; + } + + var hasOptions; + var effectName = !options ? + method : + options === true || typeof options === "number" ? + defaultEffect : + options.effect || defaultEffect; + + options = options || {}; + if ( typeof options === "number" ) { + options = { duration: options }; + } else if ( options === true ) { + options = {}; + } + + hasOptions = !$.isEmptyObject( options ); + options.complete = callback; + + if ( options.delay ) { + element.delay( options.delay ); + } + + if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { + element[ method ]( options ); + } else if ( effectName !== method && element[ effectName ] ) { + element[ effectName ]( options.duration, options.easing, callback ); + } else { + element.queue( function( next ) { + $( this )[ method ](); + if ( callback ) { + callback.call( element[ 0 ] ); + } + next(); + } ); + } + }; +} ); + +var widget = $.widget; + + +/*! + * jQuery UI Position 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * http://api.jqueryui.com/position/ + */ + +//>>label: Position +//>>group: Core +//>>description: Positions elements relative to other elements. +//>>docs: http://api.jqueryui.com/position/ +//>>demos: http://jqueryui.com/position/ + + +( function() { +var cachedScrollbarWidth, + max = Math.max, + abs = Math.abs, + rhorizontal = /left|center|right/, + rvertical = /top|center|bottom/, + roffset = /[\+\-]\d+(\.[\d]+)?%?/, + rposition = /^\w+/, + rpercent = /%$/, + _position = $.fn.position; + +function getOffsets( offsets, width, height ) { + return [ + parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ), + parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 ) + ]; +} + +function parseCss( element, property ) { + return parseInt( $.css( element, property ), 10 ) || 0; +} + +function isWindow( obj ) { + return obj != null && obj === obj.window; +} + +function getDimensions( elem ) { + var raw = elem[ 0 ]; + if ( raw.nodeType === 9 ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: 0, left: 0 } + }; + } + if ( isWindow( raw ) ) { + return { + width: elem.width(), + height: elem.height(), + offset: { top: elem.scrollTop(), left: elem.scrollLeft() } + }; + } + if ( raw.preventDefault ) { + return { + width: 0, + height: 0, + offset: { top: raw.pageY, left: raw.pageX } + }; + } + return { + width: elem.outerWidth(), + height: elem.outerHeight(), + offset: elem.offset() + }; +} + +$.position = { + scrollbarWidth: function() { + if ( cachedScrollbarWidth !== undefined ) { + return cachedScrollbarWidth; + } + var w1, w2, + div = $( "
    " + + "
    " ), + innerDiv = div.children()[ 0 ]; + + $( "body" ).append( div ); + w1 = innerDiv.offsetWidth; + div.css( "overflow", "scroll" ); + + w2 = innerDiv.offsetWidth; + + if ( w1 === w2 ) { + w2 = div[ 0 ].clientWidth; + } + + div.remove(); + + return ( cachedScrollbarWidth = w1 - w2 ); + }, + getScrollInfo: function( within ) { + var overflowX = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-x" ), + overflowY = within.isWindow || within.isDocument ? "" : + within.element.css( "overflow-y" ), + hasOverflowX = overflowX === "scroll" || + ( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ), + hasOverflowY = overflowY === "scroll" || + ( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight ); + return { + width: hasOverflowY ? $.position.scrollbarWidth() : 0, + height: hasOverflowX ? $.position.scrollbarWidth() : 0 + }; + }, + getWithinInfo: function( element ) { + var withinElement = $( element || window ), + isElemWindow = isWindow( withinElement[ 0 ] ), + isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9, + hasOffset = !isElemWindow && !isDocument; + return { + element: withinElement, + isWindow: isElemWindow, + isDocument: isDocument, + offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 }, + scrollLeft: withinElement.scrollLeft(), + scrollTop: withinElement.scrollTop(), + width: withinElement.outerWidth(), + height: withinElement.outerHeight() + }; + } +}; + +$.fn.position = function( options ) { + if ( !options || !options.of ) { + return _position.apply( this, arguments ); + } + + // Make a copy, we don't want to modify arguments + options = $.extend( {}, options ); + + var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions, + + // Make sure string options are treated as CSS selectors + target = typeof options.of === "string" ? + $( document ).find( options.of ) : + $( options.of ), + + within = $.position.getWithinInfo( options.within ), + scrollInfo = $.position.getScrollInfo( within ), + collision = ( options.collision || "flip" ).split( " " ), + offsets = {}; + + dimensions = getDimensions( target ); + if ( target[ 0 ].preventDefault ) { + + // Force left top to allow flipping + options.at = "left top"; + } + targetWidth = dimensions.width; + targetHeight = dimensions.height; + targetOffset = dimensions.offset; + + // Clone to reuse original targetOffset later + basePosition = $.extend( {}, targetOffset ); + + // Force my and at to have valid horizontal and vertical positions + // if a value is missing or invalid, it will be converted to center + $.each( [ "my", "at" ], function() { + var pos = ( options[ this ] || "" ).split( " " ), + horizontalOffset, + verticalOffset; + + if ( pos.length === 1 ) { + pos = rhorizontal.test( pos[ 0 ] ) ? + pos.concat( [ "center" ] ) : + rvertical.test( pos[ 0 ] ) ? + [ "center" ].concat( pos ) : + [ "center", "center" ]; + } + pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center"; + pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center"; + + // Calculate offsets + horizontalOffset = roffset.exec( pos[ 0 ] ); + verticalOffset = roffset.exec( pos[ 1 ] ); + offsets[ this ] = [ + horizontalOffset ? horizontalOffset[ 0 ] : 0, + verticalOffset ? verticalOffset[ 0 ] : 0 + ]; + + // Reduce to just the positions without the offsets + options[ this ] = [ + rposition.exec( pos[ 0 ] )[ 0 ], + rposition.exec( pos[ 1 ] )[ 0 ] + ]; + } ); + + // Normalize collision option + if ( collision.length === 1 ) { + collision[ 1 ] = collision[ 0 ]; + } + + if ( options.at[ 0 ] === "right" ) { + basePosition.left += targetWidth; + } else if ( options.at[ 0 ] === "center" ) { + basePosition.left += targetWidth / 2; + } + + if ( options.at[ 1 ] === "bottom" ) { + basePosition.top += targetHeight; + } else if ( options.at[ 1 ] === "center" ) { + basePosition.top += targetHeight / 2; + } + + atOffset = getOffsets( offsets.at, targetWidth, targetHeight ); + basePosition.left += atOffset[ 0 ]; + basePosition.top += atOffset[ 1 ]; + + return this.each( function() { + var collisionPosition, using, + elem = $( this ), + elemWidth = elem.outerWidth(), + elemHeight = elem.outerHeight(), + marginLeft = parseCss( this, "marginLeft" ), + marginTop = parseCss( this, "marginTop" ), + collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) + + scrollInfo.width, + collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) + + scrollInfo.height, + position = $.extend( {}, basePosition ), + myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() ); + + if ( options.my[ 0 ] === "right" ) { + position.left -= elemWidth; + } else if ( options.my[ 0 ] === "center" ) { + position.left -= elemWidth / 2; + } + + if ( options.my[ 1 ] === "bottom" ) { + position.top -= elemHeight; + } else if ( options.my[ 1 ] === "center" ) { + position.top -= elemHeight / 2; + } + + position.left += myOffset[ 0 ]; + position.top += myOffset[ 1 ]; + + collisionPosition = { + marginLeft: marginLeft, + marginTop: marginTop + }; + + $.each( [ "left", "top" ], function( i, dir ) { + if ( $.ui.position[ collision[ i ] ] ) { + $.ui.position[ collision[ i ] ][ dir ]( position, { + targetWidth: targetWidth, + targetHeight: targetHeight, + elemWidth: elemWidth, + elemHeight: elemHeight, + collisionPosition: collisionPosition, + collisionWidth: collisionWidth, + collisionHeight: collisionHeight, + offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ], + my: options.my, + at: options.at, + within: within, + elem: elem + } ); + } + } ); + + if ( options.using ) { + + // Adds feedback as second argument to using callback, if present + using = function( props ) { + var left = targetOffset.left - position.left, + right = left + targetWidth - elemWidth, + top = targetOffset.top - position.top, + bottom = top + targetHeight - elemHeight, + feedback = { + target: { + element: target, + left: targetOffset.left, + top: targetOffset.top, + width: targetWidth, + height: targetHeight + }, + element: { + element: elem, + left: position.left, + top: position.top, + width: elemWidth, + height: elemHeight + }, + horizontal: right < 0 ? "left" : left > 0 ? "right" : "center", + vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle" + }; + if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) { + feedback.horizontal = "center"; + } + if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) { + feedback.vertical = "middle"; + } + if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) { + feedback.important = "horizontal"; + } else { + feedback.important = "vertical"; + } + options.using.call( this, props, feedback ); + }; + } + + elem.offset( $.extend( position, { using: using } ) ); + } ); +}; + +$.ui.position = { + fit: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollLeft : within.offset.left, + outerWidth = within.width, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = withinOffset - collisionPosLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset, + newOverRight; + + // Element is wider than within + if ( data.collisionWidth > outerWidth ) { + + // Element is initially over the left side of within + if ( overLeft > 0 && overRight <= 0 ) { + newOverRight = position.left + overLeft + data.collisionWidth - outerWidth - + withinOffset; + position.left += overLeft - newOverRight; + + // Element is initially over right side of within + } else if ( overRight > 0 && overLeft <= 0 ) { + position.left = withinOffset; + + // Element is initially over both left and right sides of within + } else { + if ( overLeft > overRight ) { + position.left = withinOffset + outerWidth - data.collisionWidth; + } else { + position.left = withinOffset; + } + } + + // Too far left -> align with left edge + } else if ( overLeft > 0 ) { + position.left += overLeft; + + // Too far right -> align with right edge + } else if ( overRight > 0 ) { + position.left -= overRight; + + // Adjust based on position and margin + } else { + position.left = max( position.left - collisionPosLeft, position.left ); + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.isWindow ? within.scrollTop : within.offset.top, + outerHeight = data.within.height, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = withinOffset - collisionPosTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset, + newOverBottom; + + // Element is taller than within + if ( data.collisionHeight > outerHeight ) { + + // Element is initially over the top of within + if ( overTop > 0 && overBottom <= 0 ) { + newOverBottom = position.top + overTop + data.collisionHeight - outerHeight - + withinOffset; + position.top += overTop - newOverBottom; + + // Element is initially over bottom of within + } else if ( overBottom > 0 && overTop <= 0 ) { + position.top = withinOffset; + + // Element is initially over both top and bottom of within + } else { + if ( overTop > overBottom ) { + position.top = withinOffset + outerHeight - data.collisionHeight; + } else { + position.top = withinOffset; + } + } + + // Too far up -> align with top + } else if ( overTop > 0 ) { + position.top += overTop; + + // Too far down -> align with bottom edge + } else if ( overBottom > 0 ) { + position.top -= overBottom; + + // Adjust based on position and margin + } else { + position.top = max( position.top - collisionPosTop, position.top ); + } + } + }, + flip: { + left: function( position, data ) { + var within = data.within, + withinOffset = within.offset.left + within.scrollLeft, + outerWidth = within.width, + offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left, + collisionPosLeft = position.left - data.collisionPosition.marginLeft, + overLeft = collisionPosLeft - offsetLeft, + overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft, + myOffset = data.my[ 0 ] === "left" ? + -data.elemWidth : + data.my[ 0 ] === "right" ? + data.elemWidth : + 0, + atOffset = data.at[ 0 ] === "left" ? + data.targetWidth : + data.at[ 0 ] === "right" ? + -data.targetWidth : + 0, + offset = -2 * data.offset[ 0 ], + newOverRight, + newOverLeft; + + if ( overLeft < 0 ) { + newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth - + outerWidth - withinOffset; + if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) { + position.left += myOffset + atOffset + offset; + } + } else if ( overRight > 0 ) { + newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset + + atOffset + offset - offsetLeft; + if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) { + position.left += myOffset + atOffset + offset; + } + } + }, + top: function( position, data ) { + var within = data.within, + withinOffset = within.offset.top + within.scrollTop, + outerHeight = within.height, + offsetTop = within.isWindow ? within.scrollTop : within.offset.top, + collisionPosTop = position.top - data.collisionPosition.marginTop, + overTop = collisionPosTop - offsetTop, + overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop, + top = data.my[ 1 ] === "top", + myOffset = top ? + -data.elemHeight : + data.my[ 1 ] === "bottom" ? + data.elemHeight : + 0, + atOffset = data.at[ 1 ] === "top" ? + data.targetHeight : + data.at[ 1 ] === "bottom" ? + -data.targetHeight : + 0, + offset = -2 * data.offset[ 1 ], + newOverTop, + newOverBottom; + if ( overTop < 0 ) { + newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight - + outerHeight - withinOffset; + if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) { + position.top += myOffset + atOffset + offset; + } + } else if ( overBottom > 0 ) { + newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset + + offset - offsetTop; + if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) { + position.top += myOffset + atOffset + offset; + } + } + } + }, + flipfit: { + left: function() { + $.ui.position.flip.left.apply( this, arguments ); + $.ui.position.fit.left.apply( this, arguments ); + }, + top: function() { + $.ui.position.flip.top.apply( this, arguments ); + $.ui.position.fit.top.apply( this, arguments ); + } + } +}; + +} )(); + +var position = $.ui.position; + + +/*! + * jQuery UI :data 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :data Selector +//>>group: Core +//>>description: Selects elements which have data stored under the specified key. +//>>docs: http://api.jqueryui.com/data-selector/ + + +var data = $.extend( $.expr.pseudos, { + data: $.expr.createPseudo ? + $.expr.createPseudo( function( dataName ) { + return function( elem ) { + return !!$.data( elem, dataName ); + }; + } ) : + + // Support: jQuery <1.8 + function( elem, i, match ) { + return !!$.data( elem, match[ 3 ] ); + } +} ); + +/*! + * jQuery UI Disable Selection 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: disableSelection +//>>group: Core +//>>description: Disable selection of text content within the set of matched elements. +//>>docs: http://api.jqueryui.com/disableSelection/ + +// This file is deprecated + +var disableSelection = $.fn.extend( { + disableSelection: ( function() { + var eventType = "onselectstart" in document.createElement( "div" ) ? + "selectstart" : + "mousedown"; + + return function() { + return this.on( eventType + ".ui-disableSelection", function( event ) { + event.preventDefault(); + } ); + }; + } )(), + + enableSelection: function() { + return this.off( ".ui-disableSelection" ); + } +} ); + + + +// Create a local jQuery because jQuery Color relies on it and the +// global may not exist with AMD and a custom build (#10199). +// This module is a noop if used as a regular AMD module. +// eslint-disable-next-line no-unused-vars +var jQuery = $; + + +/*! + * jQuery Color Animations v2.2.0 + * https://github.com/jquery/jquery-color + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + * Date: Sun May 10 09:02:36 2020 +0200 + */ + + + + var stepHooks = "backgroundColor borderBottomColor borderLeftColor borderRightColor " + + "borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor", + + class2type = {}, + toString = class2type.toString, + + // plusequals test for += 100 -= 100 + rplusequals = /^([\-+])=\s*(\d+\.?\d*)/, + + // a set of RE's that can match strings and generate color tuples. + stringParsers = [ { + re: /rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ], + execResult[ 3 ], + execResult[ 4 ] + ]; + } + }, { + re: /rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + parse: function( execResult ) { + return [ + execResult[ 1 ] * 2.55, + execResult[ 2 ] * 2.55, + execResult[ 3 ] * 2.55, + execResult[ 4 ] + ]; + } + }, { + + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ], 16 ), + execResult[ 4 ] ? + ( parseInt( execResult[ 4 ], 16 ) / 255 ).toFixed( 2 ) : + 1 + ]; + } + }, { + + // this regex ignores A-F because it's compared against an already lowercased string + re: /#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/, + parse: function( execResult ) { + return [ + parseInt( execResult[ 1 ] + execResult[ 1 ], 16 ), + parseInt( execResult[ 2 ] + execResult[ 2 ], 16 ), + parseInt( execResult[ 3 ] + execResult[ 3 ], 16 ), + execResult[ 4 ] ? + ( parseInt( execResult[ 4 ] + execResult[ 4 ], 16 ) / 255 ) + .toFixed( 2 ) : + 1 + ]; + } + }, { + re: /hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/, + space: "hsla", + parse: function( execResult ) { + return [ + execResult[ 1 ], + execResult[ 2 ] / 100, + execResult[ 3 ] / 100, + execResult[ 4 ] + ]; + } + } ], + + // jQuery.Color( ) + color = jQuery.Color = function( color, green, blue, alpha ) { + return new jQuery.Color.fn.parse( color, green, blue, alpha ); + }, + spaces = { + rgba: { + props: { + red: { + idx: 0, + type: "byte" + }, + green: { + idx: 1, + type: "byte" + }, + blue: { + idx: 2, + type: "byte" + } + } + }, + + hsla: { + props: { + hue: { + idx: 0, + type: "degrees" + }, + saturation: { + idx: 1, + type: "percent" + }, + lightness: { + idx: 2, + type: "percent" + } + } + } + }, + propTypes = { + "byte": { + floor: true, + max: 255 + }, + "percent": { + max: 1 + }, + "degrees": { + mod: 360, + floor: true + } + }, + support = color.support = {}, + + // element for support tests + supportElem = jQuery( "

    " )[ 0 ], + + // colors = jQuery.Color.names + colors, + + // local aliases of functions called often + each = jQuery.each; + +// determine rgba support immediately +supportElem.style.cssText = "background-color:rgba(1,1,1,.5)"; +support.rgba = supportElem.style.backgroundColor.indexOf( "rgba" ) > -1; + +// define cache name and alpha properties +// for rgba and hsla spaces +each( spaces, function( spaceName, space ) { + space.cache = "_" + spaceName; + space.props.alpha = { + idx: 3, + type: "percent", + def: 1 + }; +} ); + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function getType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + return typeof obj === "object" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} + +function clamp( value, prop, allowEmpty ) { + var type = propTypes[ prop.type ] || {}; + + if ( value == null ) { + return ( allowEmpty || !prop.def ) ? null : prop.def; + } + + // ~~ is an short way of doing floor for positive numbers + value = type.floor ? ~~value : parseFloat( value ); + + // IE will pass in empty strings as value for alpha, + // which will hit this case + if ( isNaN( value ) ) { + return prop.def; + } + + if ( type.mod ) { + + // we add mod before modding to make sure that negatives values + // get converted properly: -10 -> 350 + return ( value + type.mod ) % type.mod; + } + + // for now all property types without mod have min and max + return Math.min( type.max, Math.max( 0, value ) ); +} + +function stringParse( string ) { + var inst = color(), + rgba = inst._rgba = []; + + string = string.toLowerCase(); + + each( stringParsers, function( _i, parser ) { + var parsed, + match = parser.re.exec( string ), + values = match && parser.parse( match ), + spaceName = parser.space || "rgba"; + + if ( values ) { + parsed = inst[ spaceName ]( values ); + + // if this was an rgba parse the assignment might happen twice + // oh well.... + inst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ]; + rgba = inst._rgba = parsed._rgba; + + // exit each( stringParsers ) here because we matched + return false; + } + } ); + + // Found a stringParser that handled it + if ( rgba.length ) { + + // if this came from a parsed string, force "transparent" when alpha is 0 + // chrome, (and maybe others) return "transparent" as rgba(0,0,0,0) + if ( rgba.join() === "0,0,0,0" ) { + jQuery.extend( rgba, colors.transparent ); + } + return inst; + } + + // named colors + return colors[ string ]; +} + +color.fn = jQuery.extend( color.prototype, { + parse: function( red, green, blue, alpha ) { + if ( red === undefined ) { + this._rgba = [ null, null, null, null ]; + return this; + } + if ( red.jquery || red.nodeType ) { + red = jQuery( red ).css( green ); + green = undefined; + } + + var inst = this, + type = getType( red ), + rgba = this._rgba = []; + + // more than 1 argument specified - assume ( red, green, blue, alpha ) + if ( green !== undefined ) { + red = [ red, green, blue, alpha ]; + type = "array"; + } + + if ( type === "string" ) { + return this.parse( stringParse( red ) || colors._default ); + } + + if ( type === "array" ) { + each( spaces.rgba.props, function( _key, prop ) { + rgba[ prop.idx ] = clamp( red[ prop.idx ], prop ); + } ); + return this; + } + + if ( type === "object" ) { + if ( red instanceof color ) { + each( spaces, function( _spaceName, space ) { + if ( red[ space.cache ] ) { + inst[ space.cache ] = red[ space.cache ].slice(); + } + } ); + } else { + each( spaces, function( _spaceName, space ) { + var cache = space.cache; + each( space.props, function( key, prop ) { + + // if the cache doesn't exist, and we know how to convert + if ( !inst[ cache ] && space.to ) { + + // if the value was null, we don't need to copy it + // if the key was alpha, we don't need to copy it either + if ( key === "alpha" || red[ key ] == null ) { + return; + } + inst[ cache ] = space.to( inst._rgba ); + } + + // this is the only case where we allow nulls for ALL properties. + // call clamp with alwaysAllowEmpty + inst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true ); + } ); + + // everything defined but alpha? + if ( inst[ cache ] && jQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) { + + // use the default of 1 + if ( inst[ cache ][ 3 ] == null ) { + inst[ cache ][ 3 ] = 1; + } + + if ( space.from ) { + inst._rgba = space.from( inst[ cache ] ); + } + } + } ); + } + return this; + } + }, + is: function( compare ) { + var is = color( compare ), + same = true, + inst = this; + + each( spaces, function( _, space ) { + var localCache, + isCache = is[ space.cache ]; + if ( isCache ) { + localCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || []; + each( space.props, function( _, prop ) { + if ( isCache[ prop.idx ] != null ) { + same = ( isCache[ prop.idx ] === localCache[ prop.idx ] ); + return same; + } + } ); + } + return same; + } ); + return same; + }, + _space: function() { + var used = [], + inst = this; + each( spaces, function( spaceName, space ) { + if ( inst[ space.cache ] ) { + used.push( spaceName ); + } + } ); + return used.pop(); + }, + transition: function( other, distance ) { + var end = color( other ), + spaceName = end._space(), + space = spaces[ spaceName ], + startColor = this.alpha() === 0 ? color( "transparent" ) : this, + start = startColor[ space.cache ] || space.to( startColor._rgba ), + result = start.slice(); + + end = end[ space.cache ]; + each( space.props, function( _key, prop ) { + var index = prop.idx, + startValue = start[ index ], + endValue = end[ index ], + type = propTypes[ prop.type ] || {}; + + // if null, don't override start value + if ( endValue === null ) { + return; + } + + // if null - use end + if ( startValue === null ) { + result[ index ] = endValue; + } else { + if ( type.mod ) { + if ( endValue - startValue > type.mod / 2 ) { + startValue += type.mod; + } else if ( startValue - endValue > type.mod / 2 ) { + startValue -= type.mod; + } + } + result[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop ); + } + } ); + return this[ spaceName ]( result ); + }, + blend: function( opaque ) { + + // if we are already opaque - return ourself + if ( this._rgba[ 3 ] === 1 ) { + return this; + } + + var rgb = this._rgba.slice(), + a = rgb.pop(), + blend = color( opaque )._rgba; + + return color( jQuery.map( rgb, function( v, i ) { + return ( 1 - a ) * blend[ i ] + a * v; + } ) ); + }, + toRgbaString: function() { + var prefix = "rgba(", + rgba = jQuery.map( this._rgba, function( v, i ) { + if ( v != null ) { + return v; + } + return i > 2 ? 1 : 0; + } ); + + if ( rgba[ 3 ] === 1 ) { + rgba.pop(); + prefix = "rgb("; + } + + return prefix + rgba.join() + ")"; + }, + toHslaString: function() { + var prefix = "hsla(", + hsla = jQuery.map( this.hsla(), function( v, i ) { + if ( v == null ) { + v = i > 2 ? 1 : 0; + } + + // catch 1 and 2 + if ( i && i < 3 ) { + v = Math.round( v * 100 ) + "%"; + } + return v; + } ); + + if ( hsla[ 3 ] === 1 ) { + hsla.pop(); + prefix = "hsl("; + } + return prefix + hsla.join() + ")"; + }, + toHexString: function( includeAlpha ) { + var rgba = this._rgba.slice(), + alpha = rgba.pop(); + + if ( includeAlpha ) { + rgba.push( ~~( alpha * 255 ) ); + } + + return "#" + jQuery.map( rgba, function( v ) { + + // default to 0 when nulls exist + v = ( v || 0 ).toString( 16 ); + return v.length === 1 ? "0" + v : v; + } ).join( "" ); + }, + toString: function() { + return this._rgba[ 3 ] === 0 ? "transparent" : this.toRgbaString(); + } +} ); +color.fn.parse.prototype = color.fn; + +// hsla conversions adapted from: +// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021 + +function hue2rgb( p, q, h ) { + h = ( h + 1 ) % 1; + if ( h * 6 < 1 ) { + return p + ( q - p ) * h * 6; + } + if ( h * 2 < 1 ) { + return q; + } + if ( h * 3 < 2 ) { + return p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6; + } + return p; +} + +spaces.hsla.to = function( rgba ) { + if ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) { + return [ null, null, null, rgba[ 3 ] ]; + } + var r = rgba[ 0 ] / 255, + g = rgba[ 1 ] / 255, + b = rgba[ 2 ] / 255, + a = rgba[ 3 ], + max = Math.max( r, g, b ), + min = Math.min( r, g, b ), + diff = max - min, + add = max + min, + l = add * 0.5, + h, s; + + if ( min === max ) { + h = 0; + } else if ( r === max ) { + h = ( 60 * ( g - b ) / diff ) + 360; + } else if ( g === max ) { + h = ( 60 * ( b - r ) / diff ) + 120; + } else { + h = ( 60 * ( r - g ) / diff ) + 240; + } + + // chroma (diff) == 0 means greyscale which, by definition, saturation = 0% + // otherwise, saturation is based on the ratio of chroma (diff) to lightness (add) + if ( diff === 0 ) { + s = 0; + } else if ( l <= 0.5 ) { + s = diff / add; + } else { + s = diff / ( 2 - add ); + } + return [ Math.round( h ) % 360, s, l, a == null ? 1 : a ]; +}; + +spaces.hsla.from = function( hsla ) { + if ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) { + return [ null, null, null, hsla[ 3 ] ]; + } + var h = hsla[ 0 ] / 360, + s = hsla[ 1 ], + l = hsla[ 2 ], + a = hsla[ 3 ], + q = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s, + p = 2 * l - q; + + return [ + Math.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ), + Math.round( hue2rgb( p, q, h ) * 255 ), + Math.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ), + a + ]; +}; + + +each( spaces, function( spaceName, space ) { + var props = space.props, + cache = space.cache, + to = space.to, + from = space.from; + + // makes rgba() and hsla() + color.fn[ spaceName ] = function( value ) { + + // generate a cache for this space if it doesn't exist + if ( to && !this[ cache ] ) { + this[ cache ] = to( this._rgba ); + } + if ( value === undefined ) { + return this[ cache ].slice(); + } + + var ret, + type = getType( value ), + arr = ( type === "array" || type === "object" ) ? value : arguments, + local = this[ cache ].slice(); + + each( props, function( key, prop ) { + var val = arr[ type === "object" ? key : prop.idx ]; + if ( val == null ) { + val = local[ prop.idx ]; + } + local[ prop.idx ] = clamp( val, prop ); + } ); + + if ( from ) { + ret = color( from( local ) ); + ret[ cache ] = local; + return ret; + } else { + return color( local ); + } + }; + + // makes red() green() blue() alpha() hue() saturation() lightness() + each( props, function( key, prop ) { + + // alpha is included in more than one space + if ( color.fn[ key ] ) { + return; + } + color.fn[ key ] = function( value ) { + var local, cur, match, fn, + vtype = getType( value ); + + if ( key === "alpha" ) { + fn = this._hsla ? "hsla" : "rgba"; + } else { + fn = spaceName; + } + local = this[ fn ](); + cur = local[ prop.idx ]; + + if ( vtype === "undefined" ) { + return cur; + } + + if ( vtype === "function" ) { + value = value.call( this, cur ); + vtype = getType( value ); + } + if ( value == null && prop.empty ) { + return this; + } + if ( vtype === "string" ) { + match = rplusequals.exec( value ); + if ( match ) { + value = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === "+" ? 1 : -1 ); + } + } + local[ prop.idx ] = value; + return this[ fn ]( local ); + }; + } ); +} ); + +// add cssHook and .fx.step function for each named hook. +// accept a space separated string of properties +color.hook = function( hook ) { + var hooks = hook.split( " " ); + each( hooks, function( _i, hook ) { + jQuery.cssHooks[ hook ] = { + set: function( elem, value ) { + var parsed, curElem, + backgroundColor = ""; + + if ( value !== "transparent" && ( getType( value ) !== "string" || ( parsed = stringParse( value ) ) ) ) { + value = color( parsed || value ); + if ( !support.rgba && value._rgba[ 3 ] !== 1 ) { + curElem = hook === "backgroundColor" ? elem.parentNode : elem; + while ( + ( backgroundColor === "" || backgroundColor === "transparent" ) && + curElem && curElem.style + ) { + try { + backgroundColor = jQuery.css( curElem, "backgroundColor" ); + curElem = curElem.parentNode; + } catch ( e ) { + } + } + + value = value.blend( backgroundColor && backgroundColor !== "transparent" ? + backgroundColor : + "_default" ); + } + + value = value.toRgbaString(); + } + try { + elem.style[ hook ] = value; + } catch ( e ) { + + // wrapped to prevent IE from throwing errors on "invalid" values like 'auto' or 'inherit' + } + } + }; + jQuery.fx.step[ hook ] = function( fx ) { + if ( !fx.colorInit ) { + fx.start = color( fx.elem, hook ); + fx.end = color( fx.end ); + fx.colorInit = true; + } + jQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) ); + }; + } ); + +}; + +color.hook( stepHooks ); + +jQuery.cssHooks.borderColor = { + expand: function( value ) { + var expanded = {}; + + each( [ "Top", "Right", "Bottom", "Left" ], function( _i, part ) { + expanded[ "border" + part + "Color" ] = value; + } ); + return expanded; + } +}; + +// Basic color names only. +// Usage of any of the other color names requires adding yourself or including +// jquery.color.svg-names.js. +colors = jQuery.Color.names = { + + // 4.1. Basic color keywords + aqua: "#00ffff", + black: "#000000", + blue: "#0000ff", + fuchsia: "#ff00ff", + gray: "#808080", + green: "#008000", + lime: "#00ff00", + maroon: "#800000", + navy: "#000080", + olive: "#808000", + purple: "#800080", + red: "#ff0000", + silver: "#c0c0c0", + teal: "#008080", + white: "#ffffff", + yellow: "#ffff00", + + // 4.2.3. "transparent" color keyword + transparent: [ null, null, null, 0 ], + + _default: "#ffffff" +}; + + +/*! + * jQuery UI Effects 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Effects Core +//>>group: Effects +/* eslint-disable max-len */ +//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects. +/* eslint-enable max-len */ +//>>docs: http://api.jqueryui.com/category/effects-core/ +//>>demos: http://jqueryui.com/effect/ + + +var dataSpace = "ui-effects-", + dataSpaceStyle = "ui-effects-style", + dataSpaceAnimated = "ui-effects-animated"; + +$.effects = { + effect: {} +}; + +/******************************************************************************/ +/****************************** CLASS ANIMATIONS ******************************/ +/******************************************************************************/ +( function() { + +var classAnimationActions = [ "add", "remove", "toggle" ], + shorthandStyles = { + border: 1, + borderBottom: 1, + borderColor: 1, + borderLeft: 1, + borderRight: 1, + borderTop: 1, + borderWidth: 1, + margin: 1, + padding: 1 + }; + +$.each( + [ "borderLeftStyle", "borderRightStyle", "borderBottomStyle", "borderTopStyle" ], + function( _, prop ) { + $.fx.step[ prop ] = function( fx ) { + if ( fx.end !== "none" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) { + jQuery.style( fx.elem, prop, fx.end ); + fx.setAttr = true; + } + }; + } +); + +function camelCase( string ) { + return string.replace( /-([\da-z])/gi, function( all, letter ) { + return letter.toUpperCase(); + } ); +} + +function getElementStyles( elem ) { + var key, len, + style = elem.ownerDocument.defaultView ? + elem.ownerDocument.defaultView.getComputedStyle( elem, null ) : + elem.currentStyle, + styles = {}; + + if ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) { + len = style.length; + while ( len-- ) { + key = style[ len ]; + if ( typeof style[ key ] === "string" ) { + styles[ camelCase( key ) ] = style[ key ]; + } + } + + // Support: Opera, IE <9 + } else { + for ( key in style ) { + if ( typeof style[ key ] === "string" ) { + styles[ key ] = style[ key ]; + } + } + } + + return styles; +} + +function styleDifference( oldStyle, newStyle ) { + var diff = {}, + name, value; + + for ( name in newStyle ) { + value = newStyle[ name ]; + if ( oldStyle[ name ] !== value ) { + if ( !shorthandStyles[ name ] ) { + if ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) { + diff[ name ] = value; + } + } + } + } + + return diff; +} + +// Support: jQuery <1.8 +if ( !$.fn.addBack ) { + $.fn.addBack = function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + }; +} + +$.effects.animateClass = function( value, duration, easing, callback ) { + var o = $.speed( duration, easing, callback ); + + return this.queue( function() { + var animated = $( this ), + baseClass = animated.attr( "class" ) || "", + applyClassChange, + allAnimations = o.children ? animated.find( "*" ).addBack() : animated; + + // Map the animated objects to store the original styles. + allAnimations = allAnimations.map( function() { + var el = $( this ); + return { + el: el, + start: getElementStyles( this ) + }; + } ); + + // Apply class change + applyClassChange = function() { + $.each( classAnimationActions, function( i, action ) { + if ( value[ action ] ) { + animated[ action + "Class" ]( value[ action ] ); + } + } ); + }; + applyClassChange(); + + // Map all animated objects again - calculate new styles and diff + allAnimations = allAnimations.map( function() { + this.end = getElementStyles( this.el[ 0 ] ); + this.diff = styleDifference( this.start, this.end ); + return this; + } ); + + // Apply original class + animated.attr( "class", baseClass ); + + // Map all animated objects again - this time collecting a promise + allAnimations = allAnimations.map( function() { + var styleInfo = this, + dfd = $.Deferred(), + opts = $.extend( {}, o, { + queue: false, + complete: function() { + dfd.resolve( styleInfo ); + } + } ); + + this.el.animate( this.diff, opts ); + return dfd.promise(); + } ); + + // Once all animations have completed: + $.when.apply( $, allAnimations.get() ).done( function() { + + // Set the final class + applyClassChange(); + + // For each animated element, + // clear all css properties that were animated + $.each( arguments, function() { + var el = this.el; + $.each( this.diff, function( key ) { + el.css( key, "" ); + } ); + } ); + + // This is guarnteed to be there if you use jQuery.speed() + // it also handles dequeuing the next anim... + o.complete.call( animated[ 0 ] ); + } ); + } ); +}; + +$.fn.extend( { + addClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return speed ? + $.effects.animateClass.call( this, + { add: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.addClass ), + + removeClass: ( function( orig ) { + return function( classNames, speed, easing, callback ) { + return arguments.length > 1 ? + $.effects.animateClass.call( this, + { remove: classNames }, speed, easing, callback ) : + orig.apply( this, arguments ); + }; + } )( $.fn.removeClass ), + + toggleClass: ( function( orig ) { + return function( classNames, force, speed, easing, callback ) { + if ( typeof force === "boolean" || force === undefined ) { + if ( !speed ) { + + // Without speed parameter + return orig.apply( this, arguments ); + } else { + return $.effects.animateClass.call( this, + ( force ? { add: classNames } : { remove: classNames } ), + speed, easing, callback ); + } + } else { + + // Without force parameter + return $.effects.animateClass.call( this, + { toggle: classNames }, force, speed, easing ); + } + }; + } )( $.fn.toggleClass ), + + switchClass: function( remove, add, speed, easing, callback ) { + return $.effects.animateClass.call( this, { + add: add, + remove: remove + }, speed, easing, callback ); + } +} ); + +} )(); + +/******************************************************************************/ +/*********************************** EFFECTS **********************************/ +/******************************************************************************/ + +( function() { + +if ( $.expr && $.expr.pseudos && $.expr.pseudos.animated ) { + $.expr.pseudos.animated = ( function( orig ) { + return function( elem ) { + return !!$( elem ).data( dataSpaceAnimated ) || orig( elem ); + }; + } )( $.expr.pseudos.animated ); +} + +if ( $.uiBackCompat !== false ) { + $.extend( $.effects, { + + // Saves a set of properties in a data storage + save: function( element, set ) { + var i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); + } + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function( element, set ) { + var val, i = 0, length = set.length; + for ( ; i < length; i++ ) { + if ( set[ i ] !== null ) { + val = element.data( dataSpace + set[ i ] ); + element.css( set[ i ], val ); + } + } + }, + + setMode: function( el, mode ) { + if ( mode === "toggle" ) { + mode = el.is( ":hidden" ) ? "show" : "hide"; + } + return mode; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function( element ) { + + // If the element is already wrapped, return it + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + return element.parent(); + } + + // Wrap the element + var props = { + width: element.outerWidth( true ), + height: element.outerHeight( true ), + "float": element.css( "float" ) + }, + wrapper = $( "

    " ) + .addClass( "ui-effects-wrapper" ) + .css( { + fontSize: "100%", + background: "transparent", + border: "none", + margin: 0, + padding: 0 + } ), + + // Store the size in case width/height are defined in % - Fixes #5245 + size = { + width: element.width(), + height: element.height() + }, + active = document.activeElement; + + // Support: Firefox + // Firefox incorrectly exposes anonymous content + // https://bugzilla.mozilla.org/show_bug.cgi?id=561664 + try { + // eslint-disable-next-line no-unused-expressions + active.id; + } catch ( e ) { + active = document.body; + } + + element.wrap( wrapper ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + + // Hotfix for jQuery 1.4 since some change in wrap() seems to actually + // lose the reference to the wrapped element + wrapper = element.parent(); + + // Transfer positioning properties to the wrapper + if ( element.css( "position" ) === "static" ) { + wrapper.css( { position: "relative" } ); + element.css( { position: "relative" } ); + } else { + $.extend( props, { + position: element.css( "position" ), + zIndex: element.css( "z-index" ) + } ); + $.each( [ "top", "left", "bottom", "right" ], function( i, pos ) { + props[ pos ] = element.css( pos ); + if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { + props[ pos ] = "auto"; + } + } ); + element.css( { + position: "relative", + top: 0, + left: 0, + right: "auto", + bottom: "auto" + } ); + } + element.css( size ); + + return wrapper.css( props ).show(); + }, + + removeWrapper: function( element ) { + var active = document.activeElement; + + if ( element.parent().is( ".ui-effects-wrapper" ) ) { + element.parent().replaceWith( element ); + + // Fixes #7595 - Elements lose focus when wrapped. + if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { + $( active ).trigger( "focus" ); + } + } + + return element; + } + } ); +} + +$.extend( $.effects, { + version: "1.13.2", + + define: function( name, mode, effect ) { + if ( !effect ) { + effect = mode; + mode = "effect"; + } + + $.effects.effect[ name ] = effect; + $.effects.effect[ name ].mode = mode; + + return effect; + }, + + scaledDimensions: function( element, percent, direction ) { + if ( percent === 0 ) { + return { + height: 0, + width: 0, + outerHeight: 0, + outerWidth: 0 + }; + } + + var x = direction !== "horizontal" ? ( ( percent || 100 ) / 100 ) : 1, + y = direction !== "vertical" ? ( ( percent || 100 ) / 100 ) : 1; + + return { + height: element.height() * y, + width: element.width() * x, + outerHeight: element.outerHeight() * y, + outerWidth: element.outerWidth() * x + }; + + }, + + clipToBox: function( animation ) { + return { + width: animation.clip.right - animation.clip.left, + height: animation.clip.bottom - animation.clip.top, + left: animation.clip.left, + top: animation.clip.top + }; + }, + + // Injects recently queued functions to be first in line (after "inprogress") + unshift: function( element, queueLength, count ) { + var queue = element.queue(); + + if ( queueLength > 1 ) { + queue.splice.apply( queue, + [ 1, 0 ].concat( queue.splice( queueLength, count ) ) ); + } + element.dequeue(); + }, + + saveStyle: function( element ) { + element.data( dataSpaceStyle, element[ 0 ].style.cssText ); + }, + + restoreStyle: function( element ) { + element[ 0 ].style.cssText = element.data( dataSpaceStyle ) || ""; + element.removeData( dataSpaceStyle ); + }, + + mode: function( element, mode ) { + var hidden = element.is( ":hidden" ); + + if ( mode === "toggle" ) { + mode = hidden ? "show" : "hide"; + } + if ( hidden ? mode === "hide" : mode === "show" ) { + mode = "none"; + } + return mode; + }, + + // Translates a [top,left] array into a baseline value + getBaseline: function( origin, original ) { + var y, x; + + switch ( origin[ 0 ] ) { + case "top": + y = 0; + break; + case "middle": + y = 0.5; + break; + case "bottom": + y = 1; + break; + default: + y = origin[ 0 ] / original.height; + } + + switch ( origin[ 1 ] ) { + case "left": + x = 0; + break; + case "center": + x = 0.5; + break; + case "right": + x = 1; + break; + default: + x = origin[ 1 ] / original.width; + } + + return { + x: x, + y: y + }; + }, + + // Creates a placeholder element so that the original element can be made absolute + createPlaceholder: function( element ) { + var placeholder, + cssPosition = element.css( "position" ), + position = element.position(); + + // Lock in margins first to account for form elements, which + // will change margin if you explicitly set height + // see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380 + // Support: Safari + element.css( { + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ); + + if ( /^(static|relative)/.test( cssPosition ) ) { + cssPosition = "absolute"; + + placeholder = $( "<" + element[ 0 ].nodeName + ">" ).insertAfter( element ).css( { + + // Convert inline to inline block to account for inline elements + // that turn to inline block based on content (like img) + display: /^(inline|ruby)/.test( element.css( "display" ) ) ? + "inline-block" : + "block", + visibility: "hidden", + + // Margins need to be set to account for margin collapse + marginTop: element.css( "marginTop" ), + marginBottom: element.css( "marginBottom" ), + marginLeft: element.css( "marginLeft" ), + marginRight: element.css( "marginRight" ), + "float": element.css( "float" ) + } ) + .outerWidth( element.outerWidth() ) + .outerHeight( element.outerHeight() ) + .addClass( "ui-effects-placeholder" ); + + element.data( dataSpace + "placeholder", placeholder ); + } + + element.css( { + position: cssPosition, + left: position.left, + top: position.top + } ); + + return placeholder; + }, + + removePlaceholder: function( element ) { + var dataKey = dataSpace + "placeholder", + placeholder = element.data( dataKey ); + + if ( placeholder ) { + placeholder.remove(); + element.removeData( dataKey ); + } + }, + + // Removes a placeholder if it exists and restores + // properties that were modified during placeholder creation + cleanUp: function( element ) { + $.effects.restoreStyle( element ); + $.effects.removePlaceholder( element ); + }, + + setTransition: function( element, list, factor, value ) { + value = value || {}; + $.each( list, function( i, x ) { + var unit = element.cssUnit( x ); + if ( unit[ 0 ] > 0 ) { + value[ x ] = unit[ 0 ] * factor + unit[ 1 ]; + } + } ); + return value; + } +} ); + +// Return an effect options object for the given parameters: +function _normalizeArguments( effect, options, speed, callback ) { + + // Allow passing all options as the first parameter + if ( $.isPlainObject( effect ) ) { + options = effect; + effect = effect.effect; + } + + // Convert to an object + effect = { effect: effect }; + + // Catch (effect, null, ...) + if ( options == null ) { + options = {}; + } + + // Catch (effect, callback) + if ( typeof options === "function" ) { + callback = options; + speed = null; + options = {}; + } + + // Catch (effect, speed, ?) + if ( typeof options === "number" || $.fx.speeds[ options ] ) { + callback = speed; + speed = options; + options = {}; + } + + // Catch (effect, options, callback) + if ( typeof speed === "function" ) { + callback = speed; + speed = null; + } + + // Add options to effect + if ( options ) { + $.extend( effect, options ); + } + + speed = speed || options.duration; + effect.duration = $.fx.off ? 0 : + typeof speed === "number" ? speed : + speed in $.fx.speeds ? $.fx.speeds[ speed ] : + $.fx.speeds._default; + + effect.complete = callback || options.complete; + + return effect; +} + +function standardAnimationOption( option ) { + + // Valid standard speeds (nothing, number, named speed) + if ( !option || typeof option === "number" || $.fx.speeds[ option ] ) { + return true; + } + + // Invalid strings - treat as "normal" speed + if ( typeof option === "string" && !$.effects.effect[ option ] ) { + return true; + } + + // Complete callback + if ( typeof option === "function" ) { + return true; + } + + // Options hash (but not naming an effect) + if ( typeof option === "object" && !option.effect ) { + return true; + } + + // Didn't match any standard API + return false; +} + +$.fn.extend( { + effect: function( /* effect, options, speed, callback */ ) { + var args = _normalizeArguments.apply( this, arguments ), + effectMethod = $.effects.effect[ args.effect ], + defaultMode = effectMethod.mode, + queue = args.queue, + queueName = queue || "fx", + complete = args.complete, + mode = args.mode, + modes = [], + prefilter = function( next ) { + var el = $( this ), + normalizedMode = $.effects.mode( el, mode ) || defaultMode; + + // Sentinel for duck-punching the :animated pseudo-selector + el.data( dataSpaceAnimated, true ); + + // Save effect mode for later use, + // we can't just call $.effects.mode again later, + // as the .show() below destroys the initial state + modes.push( normalizedMode ); + + // See $.uiBackCompat inside of run() for removal of defaultMode in 1.14 + if ( defaultMode && ( normalizedMode === "show" || + ( normalizedMode === defaultMode && normalizedMode === "hide" ) ) ) { + el.show(); + } + + if ( !defaultMode || normalizedMode !== "none" ) { + $.effects.saveStyle( el ); + } + + if ( typeof next === "function" ) { + next(); + } + }; + + if ( $.fx.off || !effectMethod ) { + + // Delegate to the original method (e.g., .show()) if possible + if ( mode ) { + return this[ mode ]( args.duration, complete ); + } else { + return this.each( function() { + if ( complete ) { + complete.call( this ); + } + } ); + } + } + + function run( next ) { + var elem = $( this ); + + function cleanup() { + elem.removeData( dataSpaceAnimated ); + + $.effects.cleanUp( elem ); + + if ( args.mode === "hide" ) { + elem.hide(); + } + + done(); + } + + function done() { + if ( typeof complete === "function" ) { + complete.call( elem[ 0 ] ); + } + + if ( typeof next === "function" ) { + next(); + } + } + + // Override mode option on a per element basis, + // as toggle can be either show or hide depending on element state + args.mode = modes.shift(); + + if ( $.uiBackCompat !== false && !defaultMode ) { + if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, done ); + } + } else { + if ( args.mode === "none" ) { + + // Call the core method to track "olddisplay" properly + elem[ mode ](); + done(); + } else { + effectMethod.call( elem[ 0 ], args, cleanup ); + } + } + } + + // Run prefilter on all elements first to ensure that + // any showing or hiding happens before placeholder creation, + // which ensures that any layout changes are correctly captured. + return queue === false ? + this.each( prefilter ).each( run ) : + this.queue( queueName, prefilter ).queue( queueName, run ); + }, + + show: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "show"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.show ), + + hide: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "hide"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.hide ), + + toggle: ( function( orig ) { + return function( option ) { + if ( standardAnimationOption( option ) || typeof option === "boolean" ) { + return orig.apply( this, arguments ); + } else { + var args = _normalizeArguments.apply( this, arguments ); + args.mode = "toggle"; + return this.effect.call( this, args ); + } + }; + } )( $.fn.toggle ), + + cssUnit: function( key ) { + var style = this.css( key ), + val = []; + + $.each( [ "em", "px", "%", "pt" ], function( i, unit ) { + if ( style.indexOf( unit ) > 0 ) { + val = [ parseFloat( style ), unit ]; + } + } ); + return val; + }, + + cssClip: function( clipObj ) { + if ( clipObj ) { + return this.css( "clip", "rect(" + clipObj.top + "px " + clipObj.right + "px " + + clipObj.bottom + "px " + clipObj.left + "px)" ); + } + return parseClip( this.css( "clip" ), this ); + }, + + transfer: function( options, done ) { + var element = $( this ), + target = $( options.to ), + targetFixed = target.css( "position" ) === "fixed", + body = $( "body" ), + fixTop = targetFixed ? body.scrollTop() : 0, + fixLeft = targetFixed ? body.scrollLeft() : 0, + endPosition = target.offset(), + animation = { + top: endPosition.top - fixTop, + left: endPosition.left - fixLeft, + height: target.innerHeight(), + width: target.innerWidth() + }, + startPosition = element.offset(), + transfer = $( "
    " ); + + transfer + .appendTo( "body" ) + .addClass( options.className ) + .css( { + top: startPosition.top - fixTop, + left: startPosition.left - fixLeft, + height: element.innerHeight(), + width: element.innerWidth(), + position: targetFixed ? "fixed" : "absolute" + } ) + .animate( animation, options.duration, options.easing, function() { + transfer.remove(); + if ( typeof done === "function" ) { + done(); + } + } ); + } +} ); + +function parseClip( str, element ) { + var outerWidth = element.outerWidth(), + outerHeight = element.outerHeight(), + clipRegex = /^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/, + values = clipRegex.exec( str ) || [ "", 0, outerWidth, outerHeight, 0 ]; + + return { + top: parseFloat( values[ 1 ] ) || 0, + right: values[ 2 ] === "auto" ? outerWidth : parseFloat( values[ 2 ] ), + bottom: values[ 3 ] === "auto" ? outerHeight : parseFloat( values[ 3 ] ), + left: parseFloat( values[ 4 ] ) || 0 + }; +} + +$.fx.step.clip = function( fx ) { + if ( !fx.clipInit ) { + fx.start = $( fx.elem ).cssClip(); + if ( typeof fx.end === "string" ) { + fx.end = parseClip( fx.end, fx.elem ); + } + fx.clipInit = true; + } + + $( fx.elem ).cssClip( { + top: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top, + right: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right, + bottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom, + left: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left + } ); +}; + +} )(); + +/******************************************************************************/ +/*********************************** EASING ***********************************/ +/******************************************************************************/ + +( function() { + +// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing) + +var baseEasings = {}; + +$.each( [ "Quad", "Cubic", "Quart", "Quint", "Expo" ], function( i, name ) { + baseEasings[ name ] = function( p ) { + return Math.pow( p, i + 2 ); + }; +} ); + +$.extend( baseEasings, { + Sine: function( p ) { + return 1 - Math.cos( p * Math.PI / 2 ); + }, + Circ: function( p ) { + return 1 - Math.sqrt( 1 - p * p ); + }, + Elastic: function( p ) { + return p === 0 || p === 1 ? p : + -Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 ); + }, + Back: function( p ) { + return p * p * ( 3 * p - 2 ); + }, + Bounce: function( p ) { + var pow2, + bounce = 4; + + while ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {} + return 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 ); + } +} ); + +$.each( baseEasings, function( name, easeIn ) { + $.easing[ "easeIn" + name ] = easeIn; + $.easing[ "easeOut" + name ] = function( p ) { + return 1 - easeIn( 1 - p ); + }; + $.easing[ "easeInOut" + name ] = function( p ) { + return p < 0.5 ? + easeIn( p * 2 ) / 2 : + 1 - easeIn( p * -2 + 2 ) / 2; + }; +} ); + +} )(); + +var effect = $.effects; + + +/*! + * jQuery UI Effects Blind 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Blind Effect +//>>group: Effects +//>>description: Blinds the element. +//>>docs: http://api.jqueryui.com/blind-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectBlind = $.effects.define( "blind", "hide", function( options, done ) { + var map = { + up: [ "bottom", "top" ], + vertical: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + horizontal: [ "right", "left" ], + right: [ "left", "right" ] + }, + element = $( this ), + direction = options.direction || "up", + start = element.cssClip(), + animate = { clip: $.extend( {}, start ) }, + placeholder = $.effects.createPlaceholder( element ); + + animate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ]; + + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animate ) ); + } + + animate.clip = start; + } + + if ( placeholder ) { + placeholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing ); + } + + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Bounce 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Bounce Effect +//>>group: Effects +//>>description: Bounces an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/bounce-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectBounce = $.effects.define( "bounce", function( options, done ) { + var upAnim, downAnim, refValue, + element = $( this ), + + // Defaults: + mode = options.mode, + hide = mode === "hide", + show = mode === "show", + direction = options.direction || "up", + distance = options.distance, + times = options.times || 5, + + // Number of internal animations + anims = times * 2 + ( show || hide ? 1 : 0 ), + speed = options.duration / anims, + easing = options.easing, + + // Utility: + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ), + i = 0, + + queuelen = element.queue().length; + + $.effects.createPlaceholder( element ); + + refValue = element.css( ref ); + + // Default distance for the BIGGEST bounce is the outer Distance / 3 + if ( !distance ) { + distance = element[ ref === "top" ? "outerHeight" : "outerWidth" ]() / 3; + } + + if ( show ) { + downAnim = { opacity: 1 }; + downAnim[ ref ] = refValue; + + // If we are showing, force opacity 0 and set the initial position + // then do the "first" animation + element + .css( "opacity", 0 ) + .css( ref, motion ? -distance * 2 : distance * 2 ) + .animate( downAnim, speed, easing ); + } + + // Start at the smallest distance if we are hiding + if ( hide ) { + distance = distance / Math.pow( 2, times - 1 ); + } + + downAnim = {}; + downAnim[ ref ] = refValue; + + // Bounces up/down/left/right then back to 0 -- times * 2 animations happen here + for ( ; i < times; i++ ) { + upAnim = {}; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + element + .animate( upAnim, speed, easing ) + .animate( downAnim, speed, easing ); + + distance = hide ? distance * 2 : distance / 2; + } + + // Last Bounce when Hiding + if ( hide ) { + upAnim = { opacity: 0 }; + upAnim[ ref ] = ( motion ? "-=" : "+=" ) + distance; + + element.animate( upAnim, speed, easing ); + } + + element.queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Clip 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Clip Effect +//>>group: Effects +//>>description: Clips the element on and off like an old TV. +//>>docs: http://api.jqueryui.com/clip-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectClip = $.effects.define( "clip", "hide", function( options, done ) { + var start, + animate = {}, + element = $( this ), + direction = options.direction || "vertical", + both = direction === "both", + horizontal = both || direction === "horizontal", + vertical = both || direction === "vertical"; + + start = element.cssClip(); + animate.clip = { + top: vertical ? ( start.bottom - start.top ) / 2 : start.top, + right: horizontal ? ( start.right - start.left ) / 2 : start.right, + bottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom, + left: horizontal ? ( start.right - start.left ) / 2 : start.left + }; + + $.effects.createPlaceholder( element ); + + if ( options.mode === "show" ) { + element.cssClip( animate.clip ); + animate.clip = start; + } + + element.animate( animate, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); + +} ); + + +/*! + * jQuery UI Effects Drop 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Drop Effect +//>>group: Effects +//>>description: Moves an element in one direction and hides it at the same time. +//>>docs: http://api.jqueryui.com/drop-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectDrop = $.effects.define( "drop", "hide", function( options, done ) { + + var distance, + element = $( this ), + mode = options.mode, + show = mode === "show", + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + motion = ( direction === "up" || direction === "left" ) ? "-=" : "+=", + oppositeMotion = ( motion === "+=" ) ? "-=" : "+=", + animation = { + opacity: 0 + }; + + $.effects.createPlaceholder( element ); + + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ) / 2; + + animation[ ref ] = motion + distance; + + if ( show ) { + element.css( animation ); + + animation[ ref ] = oppositeMotion + distance; + animation.opacity = 1; + } + + // Animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Explode 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Explode Effect +//>>group: Effects +/* eslint-disable max-len */ +//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness. +/* eslint-enable max-len */ +//>>docs: http://api.jqueryui.com/explode-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectExplode = $.effects.define( "explode", "hide", function( options, done ) { + + var i, j, left, top, mx, my, + rows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3, + cells = rows, + element = $( this ), + mode = options.mode, + show = mode === "show", + + // Show and then visibility:hidden the element before calculating offset + offset = element.show().css( "visibility", "hidden" ).offset(), + + // Width and height of a piece + width = Math.ceil( element.outerWidth() / cells ), + height = Math.ceil( element.outerHeight() / rows ), + pieces = []; + + // Children animate complete: + function childComplete() { + pieces.push( this ); + if ( pieces.length === rows * cells ) { + animComplete(); + } + } + + // Clone the element for each row and cell. + for ( i = 0; i < rows; i++ ) { // ===> + top = offset.top + i * height; + my = i - ( rows - 1 ) / 2; + + for ( j = 0; j < cells; j++ ) { // ||| + left = offset.left + j * width; + mx = j - ( cells - 1 ) / 2; + + // Create a clone of the now hidden main element that will be absolute positioned + // within a wrapper div off the -left and -top equal to size of our pieces + element + .clone() + .appendTo( "body" ) + .wrap( "
    " ) + .css( { + position: "absolute", + visibility: "visible", + left: -j * width, + top: -i * height + } ) + + // Select the wrapper - make it overflow: hidden and absolute positioned based on + // where the original was located +left and +top equal to the size of pieces + .parent() + .addClass( "ui-effects-explode" ) + .css( { + position: "absolute", + overflow: "hidden", + width: width, + height: height, + left: left + ( show ? mx * width : 0 ), + top: top + ( show ? my * height : 0 ), + opacity: show ? 0 : 1 + } ) + .animate( { + left: left + ( show ? 0 : mx * width ), + top: top + ( show ? 0 : my * height ), + opacity: show ? 1 : 0 + }, options.duration || 500, options.easing, childComplete ); + } + } + + function animComplete() { + element.css( { + visibility: "visible" + } ); + $( pieces ).remove(); + done(); + } +} ); + + +/*! + * jQuery UI Effects Fade 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Fade Effect +//>>group: Effects +//>>description: Fades the element. +//>>docs: http://api.jqueryui.com/fade-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectFade = $.effects.define( "fade", "toggle", function( options, done ) { + var show = options.mode === "show"; + + $( this ) + .css( "opacity", show ? 0 : 1 ) + .animate( { + opacity: show ? 1 : 0 + }, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Fold 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Fold Effect +//>>group: Effects +//>>description: Folds an element first horizontally and then vertically. +//>>docs: http://api.jqueryui.com/fold-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectFold = $.effects.define( "fold", "hide", function( options, done ) { + + // Create element + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + size = options.size || 15, + percent = /([0-9]+)%/.exec( size ), + horizFirst = !!options.horizFirst, + ref = horizFirst ? [ "right", "bottom" ] : [ "bottom", "right" ], + duration = options.duration / 2, + + placeholder = $.effects.createPlaceholder( element ), + + start = element.cssClip(), + animation1 = { clip: $.extend( {}, start ) }, + animation2 = { clip: $.extend( {}, start ) }, + + distance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ], + + queuelen = element.queue().length; + + if ( percent ) { + size = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ]; + } + animation1.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 0 ] ] = size; + animation2.clip[ ref[ 1 ] ] = 0; + + if ( show ) { + element.cssClip( animation2.clip ); + if ( placeholder ) { + placeholder.css( $.effects.clipToBox( animation2 ) ); + } + + animation2.clip = start; + } + + // Animate + element + .queue( function( next ) { + if ( placeholder ) { + placeholder + .animate( $.effects.clipToBox( animation1 ), duration, options.easing ) + .animate( $.effects.clipToBox( animation2 ), duration, options.easing ); + } + + next(); + } ) + .animate( animation1, duration, options.easing ) + .animate( animation2, duration, options.easing ) + .queue( done ); + + $.effects.unshift( element, queuelen, 4 ); +} ); + + +/*! + * jQuery UI Effects Highlight 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Highlight Effect +//>>group: Effects +//>>description: Highlights the background of an element in a defined color for a custom duration. +//>>docs: http://api.jqueryui.com/highlight-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectHighlight = $.effects.define( "highlight", "show", function( options, done ) { + var element = $( this ), + animation = { + backgroundColor: element.css( "backgroundColor" ) + }; + + if ( options.mode === "hide" ) { + animation.opacity = 0; + } + + $.effects.saveStyle( element ); + + element + .css( { + backgroundImage: "none", + backgroundColor: options.color || "#ffff99" + } ) + .animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Size 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Size Effect +//>>group: Effects +//>>description: Resize an element to a specified width and height. +//>>docs: http://api.jqueryui.com/size-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectSize = $.effects.define( "size", function( options, done ) { + + // Create element + var baseline, factor, temp, + element = $( this ), + + // Copy for children + cProps = [ "fontSize" ], + vProps = [ "borderTopWidth", "borderBottomWidth", "paddingTop", "paddingBottom" ], + hProps = [ "borderLeftWidth", "borderRightWidth", "paddingLeft", "paddingRight" ], + + // Set options + mode = options.mode, + restore = mode !== "effect", + scale = options.scale || "both", + origin = options.origin || [ "middle", "center" ], + position = element.css( "position" ), + pos = element.position(), + original = $.effects.scaledDimensions( element ), + from = options.from || original, + to = options.to || $.effects.scaledDimensions( element, 0 ); + + $.effects.createPlaceholder( element ); + + if ( mode === "show" ) { + temp = from; + from = to; + to = temp; + } + + // Set scaling factor + factor = { + from: { + y: from.height / original.height, + x: from.width / original.width + }, + to: { + y: to.height / original.height, + x: to.width / original.width + } + }; + + // Scale the css box + if ( scale === "box" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, vProps, factor.from.y, from ); + to = $.effects.setTransition( element, vProps, factor.to.y, to ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + from = $.effects.setTransition( element, hProps, factor.from.x, from ); + to = $.effects.setTransition( element, hProps, factor.to.x, to ); + } + } + + // Scale the content + if ( scale === "content" || scale === "both" ) { + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + from = $.effects.setTransition( element, cProps, factor.from.y, from ); + to = $.effects.setTransition( element, cProps, factor.to.y, to ); + } + } + + // Adjust the position properties based on the provided origin points + if ( origin ) { + baseline = $.effects.getBaseline( origin, original ); + from.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top; + from.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left; + to.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top; + to.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left; + } + delete from.outerHeight; + delete from.outerWidth; + element.css( from ); + + // Animate the children if desired + if ( scale === "content" || scale === "both" ) { + + vProps = vProps.concat( [ "marginTop", "marginBottom" ] ).concat( cProps ); + hProps = hProps.concat( [ "marginLeft", "marginRight" ] ); + + // Only animate children with width attributes specified + // TODO: is this right? should we include anything with css width specified as well + element.find( "*[width]" ).each( function() { + var child = $( this ), + childOriginal = $.effects.scaledDimensions( child ), + childFrom = { + height: childOriginal.height * factor.from.y, + width: childOriginal.width * factor.from.x, + outerHeight: childOriginal.outerHeight * factor.from.y, + outerWidth: childOriginal.outerWidth * factor.from.x + }, + childTo = { + height: childOriginal.height * factor.to.y, + width: childOriginal.width * factor.to.x, + outerHeight: childOriginal.height * factor.to.y, + outerWidth: childOriginal.width * factor.to.x + }; + + // Vertical props scaling + if ( factor.from.y !== factor.to.y ) { + childFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom ); + childTo = $.effects.setTransition( child, vProps, factor.to.y, childTo ); + } + + // Horizontal props scaling + if ( factor.from.x !== factor.to.x ) { + childFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom ); + childTo = $.effects.setTransition( child, hProps, factor.to.x, childTo ); + } + + if ( restore ) { + $.effects.saveStyle( child ); + } + + // Animate children + child.css( childFrom ); + child.animate( childTo, options.duration, options.easing, function() { + + // Restore children + if ( restore ) { + $.effects.restoreStyle( child ); + } + } ); + } ); + } + + // Animate + element.animate( to, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: function() { + + var offset = element.offset(); + + if ( to.opacity === 0 ) { + element.css( "opacity", from.opacity ); + } + + if ( !restore ) { + element + .css( "position", position === "static" ? "relative" : position ) + .offset( offset ); + + // Need to save style here so that automatic style restoration + // doesn't restore to the original styles from before the animation. + $.effects.saveStyle( element ); + } + + done(); + } + } ); + +} ); + + +/*! + * jQuery UI Effects Scale 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Scale Effect +//>>group: Effects +//>>description: Grows or shrinks an element and its content. +//>>docs: http://api.jqueryui.com/scale-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectScale = $.effects.define( "scale", function( options, done ) { + + // Create element + var el = $( this ), + mode = options.mode, + percent = parseInt( options.percent, 10 ) || + ( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== "effect" ? 0 : 100 ) ), + + newOptions = $.extend( true, { + from: $.effects.scaledDimensions( el ), + to: $.effects.scaledDimensions( el, percent, options.direction || "both" ), + origin: options.origin || [ "middle", "center" ] + }, options ); + + // Fade option to support puff + if ( options.fade ) { + newOptions.from.opacity = 1; + newOptions.to.opacity = 0; + } + + $.effects.effect.size.call( this, newOptions, done ); +} ); + + +/*! + * jQuery UI Effects Puff 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Puff Effect +//>>group: Effects +//>>description: Creates a puff effect by scaling the element up and hiding it at the same time. +//>>docs: http://api.jqueryui.com/puff-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectPuff = $.effects.define( "puff", "hide", function( options, done ) { + var newOptions = $.extend( true, {}, options, { + fade: true, + percent: parseInt( options.percent, 10 ) || 150 + } ); + + $.effects.effect.scale.call( this, newOptions, done ); +} ); + + +/*! + * jQuery UI Effects Pulsate 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Pulsate Effect +//>>group: Effects +//>>description: Pulsates an element n times by changing the opacity to zero and back. +//>>docs: http://api.jqueryui.com/pulsate-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectPulsate = $.effects.define( "pulsate", "show", function( options, done ) { + var element = $( this ), + mode = options.mode, + show = mode === "show", + hide = mode === "hide", + showhide = show || hide, + + // Showing or hiding leaves off the "last" animation + anims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ), + duration = options.duration / anims, + animateTo = 0, + i = 1, + queuelen = element.queue().length; + + if ( show || !element.is( ":visible" ) ) { + element.css( "opacity", 0 ).show(); + animateTo = 1; + } + + // Anims - 1 opacity "toggles" + for ( ; i < anims; i++ ) { + element.animate( { opacity: animateTo }, duration, options.easing ); + animateTo = 1 - animateTo; + } + + element.animate( { opacity: animateTo }, duration, options.easing ); + + element.queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Shake 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Shake Effect +//>>group: Effects +//>>description: Shakes an element horizontally or vertically n times. +//>>docs: http://api.jqueryui.com/shake-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectShake = $.effects.define( "shake", function( options, done ) { + + var i = 1, + element = $( this ), + direction = options.direction || "left", + distance = options.distance || 20, + times = options.times || 3, + anims = times * 2 + 1, + speed = Math.round( options.duration / anims ), + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + animation = {}, + animation1 = {}, + animation2 = {}, + + queuelen = element.queue().length; + + $.effects.createPlaceholder( element ); + + // Animation + animation[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance; + animation1[ ref ] = ( positiveMotion ? "+=" : "-=" ) + distance * 2; + animation2[ ref ] = ( positiveMotion ? "-=" : "+=" ) + distance * 2; + + // Animate + element.animate( animation, speed, options.easing ); + + // Shakes + for ( ; i < times; i++ ) { + element + .animate( animation1, speed, options.easing ) + .animate( animation2, speed, options.easing ); + } + + element + .animate( animation1, speed, options.easing ) + .animate( animation, speed / 2, options.easing ) + .queue( done ); + + $.effects.unshift( element, queuelen, anims + 1 ); +} ); + + +/*! + * jQuery UI Effects Slide 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Slide Effect +//>>group: Effects +//>>description: Slides an element in and out of the viewport. +//>>docs: http://api.jqueryui.com/slide-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effectsEffectSlide = $.effects.define( "slide", "show", function( options, done ) { + var startClip, startRef, + element = $( this ), + map = { + up: [ "bottom", "top" ], + down: [ "top", "bottom" ], + left: [ "right", "left" ], + right: [ "left", "right" ] + }, + mode = options.mode, + direction = options.direction || "left", + ref = ( direction === "up" || direction === "down" ) ? "top" : "left", + positiveMotion = ( direction === "up" || direction === "left" ), + distance = options.distance || + element[ ref === "top" ? "outerHeight" : "outerWidth" ]( true ), + animation = {}; + + $.effects.createPlaceholder( element ); + + startClip = element.cssClip(); + startRef = element.position()[ ref ]; + + // Define hide animation + animation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef; + animation.clip = element.cssClip(); + animation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ]; + + // Reverse the animation if we're showing + if ( mode === "show" ) { + element.cssClip( animation.clip ); + element.css( ref, animation[ ref ] ); + animation.clip = startClip; + animation[ ref ] = startRef; + } + + // Actually animate + element.animate( animation, { + queue: false, + duration: options.duration, + easing: options.easing, + complete: done + } ); +} ); + + +/*! + * jQuery UI Effects Transfer 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Transfer Effect +//>>group: Effects +//>>description: Displays a transfer effect from one element to another. +//>>docs: http://api.jqueryui.com/transfer-effect/ +//>>demos: http://jqueryui.com/effect/ + + +var effect; +if ( $.uiBackCompat !== false ) { + effect = $.effects.define( "transfer", function( options, done ) { + $( this ).transfer( options, done ); + } ); +} +var effectsEffectTransfer = effect; + + +/*! + * jQuery UI Focusable 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :focusable Selector +//>>group: Core +//>>description: Selects elements which can be focused. +//>>docs: http://api.jqueryui.com/focusable-selector/ + + +// Selectors +$.ui.focusable = function( element, hasTabindex ) { + var map, mapName, img, focusableIfVisible, fieldset, + nodeName = element.nodeName.toLowerCase(); + + if ( "area" === nodeName ) { + map = element.parentNode; + mapName = map.name; + if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) { + return false; + } + img = $( "img[usemap='#" + mapName + "']" ); + return img.length > 0 && img.is( ":visible" ); + } + + if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) { + focusableIfVisible = !element.disabled; + + if ( focusableIfVisible ) { + + // Form controls within a disabled fieldset are disabled. + // However, controls within the fieldset's legend do not get disabled. + // Since controls generally aren't placed inside legends, we skip + // this portion of the check. + fieldset = $( element ).closest( "fieldset" )[ 0 ]; + if ( fieldset ) { + focusableIfVisible = !fieldset.disabled; + } + } + } else if ( "a" === nodeName ) { + focusableIfVisible = element.href || hasTabindex; + } else { + focusableIfVisible = hasTabindex; + } + + return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) ); +}; + +// Support: IE 8 only +// IE 8 doesn't resolve inherit to visible/hidden for computed values +function visible( element ) { + var visibility = element.css( "visibility" ); + while ( visibility === "inherit" ) { + element = element.parent(); + visibility = element.css( "visibility" ); + } + return visibility === "visible"; +} + +$.extend( $.expr.pseudos, { + focusable: function( element ) { + return $.ui.focusable( element, $.attr( element, "tabindex" ) != null ); + } +} ); + +var focusable = $.ui.focusable; + + + +// Support: IE8 Only +// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop +// with a string, so we need to find the proper form. +var form = $.fn._form = function() { + return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form ); +}; + + +/*! + * jQuery UI Form Reset Mixin 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Form Reset Mixin +//>>group: Core +//>>description: Refresh input widgets when their form is reset +//>>docs: http://api.jqueryui.com/form-reset-mixin/ + + +var formResetMixin = $.ui.formResetMixin = { + _formResetHandler: function() { + var form = $( this ); + + // Wait for the form reset to actually happen before refreshing + setTimeout( function() { + var instances = form.data( "ui-form-reset-instances" ); + $.each( instances, function() { + this.refresh(); + } ); + } ); + }, + + _bindFormResetHandler: function() { + this.form = this.element._form(); + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ) || []; + if ( !instances.length ) { + + // We don't use _on() here because we use a single event handler per form + this.form.on( "reset.ui-form-reset", this._formResetHandler ); + } + instances.push( this ); + this.form.data( "ui-form-reset-instances", instances ); + }, + + _unbindFormResetHandler: function() { + if ( !this.form.length ) { + return; + } + + var instances = this.form.data( "ui-form-reset-instances" ); + instances.splice( $.inArray( this, instances ), 1 ); + if ( instances.length ) { + this.form.data( "ui-form-reset-instances", instances ); + } else { + this.form + .removeData( "ui-form-reset-instances" ) + .off( "reset.ui-form-reset" ); + } + } +}; + + +/*! + * jQuery UI Support for jQuery core 1.8.x and newer 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + * + */ + +//>>label: jQuery 1.8+ Support +//>>group: Core +//>>description: Support version 1.8.x and newer of jQuery core + + +// Support: jQuery 1.9.x or older +// $.expr[ ":" ] is deprecated. +if ( !$.expr.pseudos ) { + $.expr.pseudos = $.expr[ ":" ]; +} + +// Support: jQuery 1.11.x or older +// $.unique has been renamed to $.uniqueSort +if ( !$.uniqueSort ) { + $.uniqueSort = $.unique; +} + +// Support: jQuery 2.2.x or older. +// This method has been defined in jQuery 3.0.0. +// Code from https://github.com/jquery/jquery/blob/e539bac79e666bba95bba86d690b4e609dca2286/src/selector/escapeSelector.js +if ( !$.escapeSelector ) { + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + + var fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }; + + $.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); + }; +} + +// Support: jQuery 3.4.x or older +// These methods have been defined in jQuery 3.5.0. +if ( !$.fn.even || !$.fn.odd ) { + $.fn.extend( { + even: function() { + return this.filter( function( i ) { + return i % 2 === 0; + } ); + }, + odd: function() { + return this.filter( function( i ) { + return i % 2 === 1; + } ); + } + } ); +} + +; +/*! + * jQuery UI Keycode 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Keycode +//>>group: Core +//>>description: Provide keycodes as keynames +//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/ + + +var keycode = $.ui.keyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38 +}; + + +/*! + * jQuery UI Labels 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: labels +//>>group: Core +//>>description: Find all the labels associated with a given input +//>>docs: http://api.jqueryui.com/labels/ + + +var labels = $.fn.labels = function() { + var ancestor, selector, id, labels, ancestors; + + if ( !this.length ) { + return this.pushStack( [] ); + } + + // Check control.labels first + if ( this[ 0 ].labels && this[ 0 ].labels.length ) { + return this.pushStack( this[ 0 ].labels ); + } + + // Support: IE <= 11, FF <= 37, Android <= 2.3 only + // Above browsers do not support control.labels. Everything below is to support them + // as well as document fragments. control.labels does not work on document fragments + labels = this.eq( 0 ).parents( "label" ); + + // Look for the label based on the id + id = this.attr( "id" ); + if ( id ) { + + // We don't search against the document in case the element + // is disconnected from the DOM + ancestor = this.eq( 0 ).parents().last(); + + // Get a full set of top level ancestors + ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() ); + + // Create a selector for the label based on the id + selector = "label[for='" + $.escapeSelector( id ) + "']"; + + labels = labels.add( ancestors.find( selector ).addBack( selector ) ); + + } + + // Return whatever we have found for labels + return this.pushStack( labels ); +}; + + +/*! + * jQuery UI Scroll Parent 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: scrollParent +//>>group: Core +//>>description: Get the closest ancestor element that is scrollable. +//>>docs: http://api.jqueryui.com/scrollParent/ + + +var scrollParent = $.fn.scrollParent = function( includeHidden ) { + var position = this.css( "position" ), + excludeStaticParent = position === "absolute", + overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/, + scrollParent = this.parents().filter( function() { + var parent = $( this ); + if ( excludeStaticParent && parent.css( "position" ) === "static" ) { + return false; + } + return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) + + parent.css( "overflow-x" ) ); + } ).eq( 0 ); + + return position === "fixed" || !scrollParent.length ? + $( this[ 0 ].ownerDocument || document ) : + scrollParent; +}; + + +/*! + * jQuery UI Tabbable 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: :tabbable Selector +//>>group: Core +//>>description: Selects elements which can be tabbed to. +//>>docs: http://api.jqueryui.com/tabbable-selector/ + + +var tabbable = $.extend( $.expr.pseudos, { + tabbable: function( element ) { + var tabIndex = $.attr( element, "tabindex" ), + hasTabindex = tabIndex != null; + return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex ); + } +} ); + + +/*! + * jQuery UI Unique ID 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: uniqueId +//>>group: Core +//>>description: Functions to generate and remove uniqueId's +//>>docs: http://api.jqueryui.com/uniqueId/ + + +var uniqueId = $.fn.extend( { + uniqueId: ( function() { + var uuid = 0; + + return function() { + return this.each( function() { + if ( !this.id ) { + this.id = "ui-id-" + ( ++uuid ); + } + } ); + }; + } )(), + + removeUniqueId: function() { + return this.each( function() { + if ( /^ui-id-\d+$/.test( this.id ) ) { + $( this ).removeAttr( "id" ); + } + } ); + } +} ); + + +/*! + * jQuery UI Accordion 1.13.2 + * http://jqueryui.com + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +//>>label: Accordion +//>>group: Widgets +/* eslint-disable max-len */ +//>>description: Displays collapsible content panels for presenting information in a limited amount of space. +/* eslint-enable max-len */ +//>>docs: http://api.jqueryui.com/accordion/ +//>>demos: http://jqueryui.com/accordion/ +//>>css.structure: ../../themes/base/core.css +//>>css.structure: ../../themes/base/accordion.css +//>>css.theme: ../../themes/base/theme.css + + +var widgetsAccordion = $.widget( "ui.accordion", { + version: "1.13.2", + options: { + active: 0, + animate: {}, + classes: { + "ui-accordion-header": "ui-corner-top", + "ui-accordion-header-collapsed": "ui-corner-all", + "ui-accordion-content": "ui-corner-bottom" + }, + collapsible: false, + event: "click", + header: function( elem ) { + return elem.find( "> li > :first-child" ).add( elem.find( "> :not(li)" ).even() ); + }, + heightStyle: "auto", + icons: { + activeHeader: "ui-icon-triangle-1-s", + header: "ui-icon-triangle-1-e" + }, + + // Callbacks + activate: null, + beforeActivate: null + }, + + hideProps: { + borderTopWidth: "hide", + borderBottomWidth: "hide", + paddingTop: "hide", + paddingBottom: "hide", + height: "hide" + }, + + showProps: { + borderTopWidth: "show", + borderBottomWidth: "show", + paddingTop: "show", + paddingBottom: "show", + height: "show" + }, + + _create: function() { + var options = this.options; + + this.prevShow = this.prevHide = $(); + this._addClass( "ui-accordion", "ui-widget ui-helper-reset" ); + this.element.attr( "role", "tablist" ); + + // Don't allow collapsible: false and active: false / null + if ( !options.collapsible && ( options.active === false || options.active == null ) ) { + options.active = 0; + } + + this._processPanels(); + + // handle negative values + if ( options.active < 0 ) { + options.active += this.headers.length; + } + this._refresh(); + }, + + _getCreateEventData: function() { + return { + header: this.active, + panel: !this.active.length ? $() : this.active.next() + }; + }, + + _createIcons: function() { + var icon, children, + icons = this.options.icons; + + if ( icons ) { + icon = $( "" ); + this._addClass( icon, "ui-accordion-header-icon", "ui-icon " + icons.header ); + icon.prependTo( this.headers ); + children = this.active.children( ".ui-accordion-header-icon" ); + this._removeClass( children, icons.header ) + ._addClass( children, null, icons.activeHeader ) + ._addClass( this.headers, "ui-accordion-icons" ); + } + }, + + _destroyIcons: function() { + this._removeClass( this.headers, "ui-accordion-icons" ); + this.headers.children( ".ui-accordion-header-icon" ).remove(); + }, + + _destroy: function() { + var contents; + + // Clean up main element + this.element.removeAttr( "role" ); + + // Clean up headers + this.headers + .removeAttr( "role aria-expanded aria-selected aria-controls tabIndex" ) + .removeUniqueId(); + + this._destroyIcons(); + + // Clean up content panels + contents = this.headers.next() + .css( "display", "" ) + .removeAttr( "role aria-hidden aria-labelledby" ) + .removeUniqueId(); + + if ( this.options.heightStyle !== "content" ) { + contents.css( "height", "" ); + } + }, + + _setOption: function( key, value ) { + if ( key === "active" ) { + + // _activate() will handle invalid values and update this.options + this._activate( value ); + return; + } + + if ( key === "event" ) { + if ( this.options.event ) { + this._off( this.headers, this.options.event ); + } + this._setupEvents( value ); + } + + this._super( key, value ); + + // Setting collapsible: false while collapsed; open first panel + if ( key === "collapsible" && !value && this.options.active === false ) { + this._activate( 0 ); + } + + if ( key === "icons" ) { + this._destroyIcons(); + if ( value ) { + this._createIcons(); + } + } + }, + + _setOptionDisabled: function( value ) { + this._super( value ); + + this.element.attr( "aria-disabled", value ); + + // Support: IE8 Only + // #5332 / #6059 - opacity doesn't cascade to positioned elements in IE + // so we need to add the disabled class to the headers and panels + this._toggleClass( null, "ui-state-disabled", !!value ); + this._toggleClass( this.headers.add( this.headers.next() ), null, "ui-state-disabled", + !!value ); + }, + + _keydown: function( event ) { + if ( event.altKey || event.ctrlKey ) { + return; + } + + var keyCode = $.ui.keyCode, + length = this.headers.length, + currentIndex = this.headers.index( event.target ), + toFocus = false; + + switch ( event.keyCode ) { + case keyCode.RIGHT: + case keyCode.DOWN: + toFocus = this.headers[ ( currentIndex + 1 ) % length ]; + break; + case keyCode.LEFT: + case keyCode.UP: + toFocus = this.headers[ ( currentIndex - 1 + length ) % length ]; + break; + case keyCode.SPACE: + case keyCode.ENTER: + this._eventHandler( event ); + break; + case keyCode.HOME: + toFocus = this.headers[ 0 ]; + break; + case keyCode.END: + toFocus = this.headers[ length - 1 ]; + break; + } + + if ( toFocus ) { + $( event.target ).attr( "tabIndex", -1 ); + $( toFocus ).attr( "tabIndex", 0 ); + $( toFocus ).trigger( "focus" ); + event.preventDefault(); + } + }, + + _panelKeyDown: function( event ) { + if ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) { + $( event.currentTarget ).prev().trigger( "focus" ); + } + }, + + refresh: function() { + var options = this.options; + this._processPanels(); + + // Was collapsed or no panel + if ( ( options.active === false && options.collapsible === true ) || + !this.headers.length ) { + options.active = false; + this.active = $(); + + // active false only when collapsible is true + } else if ( options.active === false ) { + this._activate( 0 ); + + // was active, but active panel is gone + } else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) { + + // all remaining panel are disabled + if ( this.headers.length === this.headers.find( ".ui-state-disabled" ).length ) { + options.active = false; + this.active = $(); + + // activate previous panel + } else { + this._activate( Math.max( 0, options.active - 1 ) ); + } + + // was active, active panel still exists + } else { + + // make sure active index is correct + options.active = this.headers.index( this.active ); + } + + this._destroyIcons(); + + this._refresh(); + }, + + _processPanels: function() { + var prevHeaders = this.headers, + prevPanels = this.panels; + + if ( typeof this.options.header === "function" ) { + this.headers = this.options.header( this.element ); + } else { + this.headers = this.element.find( this.options.header ); + } + this._addClass( this.headers, "ui-accordion-header ui-accordion-header-collapsed", + "ui-state-default" ); + + this.panels = this.headers.next().filter( ":not(.ui-accordion-content-active)" ).hide(); + this._addClass( this.panels, "ui-accordion-content", "ui-helper-reset ui-widget-content" ); + + // Avoid memory leaks (#10056) + if ( prevPanels ) { + this._off( prevHeaders.not( this.headers ) ); + this._off( prevPanels.not( this.panels ) ); + } + }, + + _refresh: function() { + var maxHeight, + options = this.options, + heightStyle = options.heightStyle, + parent = this.element.parent(); + + this.active = this._findActive( options.active ); + this._addClass( this.active, "ui-accordion-header-active", "ui-state-active" ) + ._removeClass( this.active, "ui-accordion-header-collapsed" ); + this._addClass( this.active.next(), "ui-accordion-content-active" ); + this.active.next().show(); + + this.headers + .attr( "role", "tab" ) + .each( function() { + var header = $( this ), + headerId = header.uniqueId().attr( "id" ), + panel = header.next(), + panelId = panel.uniqueId().attr( "id" ); + header.attr( "aria-controls", panelId ); + panel.attr( "aria-labelledby", headerId ); + } ) + .next() + .attr( "role", "tabpanel" ); + + this.headers + .not( this.active ) + .attr( { + "aria-selected": "false", + "aria-expanded": "false", + tabIndex: -1 + } ) + .next() + .attr( { + "aria-hidden": "true" + } ) + .hide(); + + // Make sure at least one header is in the tab order + if ( !this.active.length ) { + this.headers.eq( 0 ).attr( "tabIndex", 0 ); + } else { + this.active.attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ) + .next() + .attr( { + "aria-hidden": "false" + } ); + } + + this._createIcons(); + + this._setupEvents( options.event ); + + if ( heightStyle === "fill" ) { + maxHeight = parent.height(); + this.element.siblings( ":visible" ).each( function() { + var elem = $( this ), + position = elem.css( "position" ); + + if ( position === "absolute" || position === "fixed" ) { + return; + } + maxHeight -= elem.outerHeight( true ); + } ); + + this.headers.each( function() { + maxHeight -= $( this ).outerHeight( true ); + } ); + + this.headers.next() + .each( function() { + $( this ).height( Math.max( 0, maxHeight - + $( this ).innerHeight() + $( this ).height() ) ); + } ) + .css( "overflow", "auto" ); + } else if ( heightStyle === "auto" ) { + maxHeight = 0; + this.headers.next() + .each( function() { + var isVisible = $( this ).is( ":visible" ); + if ( !isVisible ) { + $( this ).show(); + } + maxHeight = Math.max( maxHeight, $( this ).css( "height", "" ).height() ); + if ( !isVisible ) { + $( this ).hide(); + } + } ) + .height( maxHeight ); + } + }, + + _activate: function( index ) { + var active = this._findActive( index )[ 0 ]; + + // Trying to activate the already active panel + if ( active === this.active[ 0 ] ) { + return; + } + + // Trying to collapse, simulate a click on the currently active header + active = active || this.active[ 0 ]; + + this._eventHandler( { + target: active, + currentTarget: active, + preventDefault: $.noop + } ); + }, + + _findActive: function( selector ) { + return typeof selector === "number" ? this.headers.eq( selector ) : $(); + }, + + _setupEvents: function( event ) { + var events = { + keydown: "_keydown" + }; + if ( event ) { + $.each( event.split( " " ), function( index, eventName ) { + events[ eventName ] = "_eventHandler"; + } ); + } + + this._off( this.headers.add( this.headers.next() ) ); + this._on( this.headers, events ); + this._on( this.headers.next(), { keydown: "_panelKeyDown" } ); + this._hoverable( this.headers ); + this._focusable( this.headers ); + }, + + _eventHandler: function( event ) { + var activeChildren, clickedChildren, + options = this.options, + active = this.active, + clicked = $( event.currentTarget ), + clickedIsActive = clicked[ 0 ] === active[ 0 ], + collapsing = clickedIsActive && options.collapsible, + toShow = collapsing ? $() : clicked.next(), + toHide = active.next(), + eventData = { + oldHeader: active, + oldPanel: toHide, + newHeader: collapsing ? $() : clicked, + newPanel: toShow + }; + + event.preventDefault(); + + if ( + + // click on active header, but not collapsible + ( clickedIsActive && !options.collapsible ) || + + // allow canceling activation + ( this._trigger( "beforeActivate", event, eventData ) === false ) ) { + return; + } + + options.active = collapsing ? false : this.headers.index( clicked ); + + // When the call to ._toggle() comes after the class changes + // it causes a very odd bug in IE 8 (see #6720) + this.active = clickedIsActive ? $() : clicked; + this._toggle( eventData ); + + // Switch classes + // corner classes on the previously active header stay after the animation + this._removeClass( active, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + activeChildren = active.children( ".ui-accordion-header-icon" ); + this._removeClass( activeChildren, null, options.icons.activeHeader ) + ._addClass( activeChildren, null, options.icons.header ); + } + + if ( !clickedIsActive ) { + this._removeClass( clicked, "ui-accordion-header-collapsed" ) + ._addClass( clicked, "ui-accordion-header-active", "ui-state-active" ); + if ( options.icons ) { + clickedChildren = clicked.children( ".ui-accordion-header-icon" ); + this._removeClass( clickedChildren, null, options.icons.header ) + ._addClass( clickedChildren, null, options.icons.activeHeader ); + } + + this._addClass( clicked.next(), "ui-accordion-content-active" ); + } + }, + + _toggle: function( data ) { + var toShow = data.newPanel, + toHide = this.prevShow.length ? this.prevShow : data.oldPanel; + + // Handle activating a panel during the animation for another activation + this.prevShow.add( this.prevHide ).stop( true, true ); + this.prevShow = toShow; + this.prevHide = toHide; + + if ( this.options.animate ) { + this._animate( toShow, toHide, data ); + } else { + toHide.hide(); + toShow.show(); + this._toggleComplete( data ); + } + + toHide.attr( { + "aria-hidden": "true" + } ); + toHide.prev().attr( { + "aria-selected": "false", + "aria-expanded": "false" + } ); + + // if we're switching panels, remove the old header from the tab order + // if we're opening from collapsed state, remove the previous header from the tab order + // if we're collapsing, then keep the collapsing header in the tab order + if ( toShow.length && toHide.length ) { + toHide.prev().attr( { + "tabIndex": -1, + "aria-expanded": "false" + } ); + } else if ( toShow.length ) { + this.headers.filter( function() { + return parseInt( $( this ).attr( "tabIndex" ), 10 ) === 0; + } ) + .attr( "tabIndex", -1 ); + } + + toShow + .attr( "aria-hidden", "false" ) + .prev() + .attr( { + "aria-selected": "true", + "aria-expanded": "true", + tabIndex: 0 + } ); + }, + + _animate: function( toShow, toHide, data ) { + var total, easing, duration, + that = this, + adjust = 0, + boxSizing = toShow.css( "box-sizing" ), + down = toShow.length && + ( !toHide.length || ( toShow.index() < toHide.index() ) ), + animate = this.options.animate || {}, + options = down && animate.down || animate, + complete = function() { + that._toggleComplete( data ); + }; + + if ( typeof options === "number" ) { + duration = options; + } + if ( typeof options === "string" ) { + easing = options; + } + + // fall back from options to animation in case of partial down settings + easing = easing || options.easing || animate.easing; + duration = duration || options.duration || animate.duration; + + if ( !toHide.length ) { + return toShow.animate( this.showProps, duration, easing, complete ); + } + if ( !toShow.length ) { + return toHide.animate( this.hideProps, duration, easing, complete ); + } + + total = toShow.show().outerHeight(); + toHide.animate( this.hideProps, { + duration: duration, + easing: easing, + step: function( now, fx ) { + fx.now = Math.round( now ); + } + } ); + toShow + .hide() + .animate( this.showProps, { + duration: duration, + easing: easing, + complete: complete, + step: function( now, fx ) { + fx.now = Math.round( now ); + if ( fx.prop !== "height" ) { + if ( boxSizing === "content-box" ) { + adjust += fx.now; + } + } else if ( that.options.heightStyle !== "content" ) { + fx.now = Math.round( total - toHide.outerHeight() - adjust ); + adjust = 0; + } + } + } ); + }, + + _toggleComplete: function( data ) { + var toHide = data.oldPanel, + prev = toHide.prev(); + + this._removeClass( toHide, "ui-accordion-content-active" ); + this._removeClass( prev, "ui-accordion-header-active" ) + ._addClass( prev, "ui-accordion-header-collapsed" ); + + // Work around for rendering bug in IE (#5421) + if ( toHide.length ) { + toHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className; + } + this._trigger( "activate", null, data ); + } +} ); + + + +var safeActiveElement = $.ui.safeActiveElement = function( document ) { + var activeElement; + + // Support: IE 9 only + // IE9 throws an "Unspecified error" accessing document.activeElement from an ', + + // Preload iframe before displaying it + // This allows to calculate iframe content width and height + // (note: Due to "Same Origin Policy", you can't get cross domain data). + preload : true, + + // Custom CSS styling for iframe wrapping element + // You can use this to set custom iframe dimensions + css : {}, + + // Iframe tag attributes + attr : { + scrolling : 'auto' + } + + }, + + // Default content type if cannot be detected automatically + defaultType : 'image', + + // Open/close animation type + // Possible values: + // false - disable + // "zoom" - zoom images from/to thumbnail + // "fade" + // "zoom-in-out" + // + animationEffect : "zoom", + + // Duration in ms for open/close animation + animationDuration : 500, + + // Should image change opacity while zooming + // If opacity is "auto", then opacity will be changed if image and thumbnail have different aspect ratios + zoomOpacity : "auto", + + // Transition effect between slides + // + // Possible values: + // false - disable + // "fade' + // "slide' + // "circular' + // "tube' + // "zoom-in-out' + // "rotate' + // + transitionEffect : "fade", + + // Duration in ms for transition animation + transitionDuration : 366, + + // Custom CSS class for slide element + slideClass : '', + + // Custom CSS class for layout + baseClass : '', + + // Base template for layout + baseTpl : + '', + + // Loading indicator template + spinnerTpl : '
    ', + + // Error message template + errorTpl : '

    {{ERROR}}

    ', + + btnTpl : { + + download : '' + + '' + + '' + + '' + + '', + + zoom : '', + + close : '', + + // This small close button will be appended to your html/inline/ajax content by default, + // if "smallBtn" option is not set to false + smallBtn : '', + + // Arrows + arrowLeft : '', + + arrowRight : '' + }, + + // Container is injected into this element + parentEl : 'body', + + + // Focus handling + // ============== + + // Try to focus on the first focusable element after opening + autoFocus : false, + + // Put focus back to active element after closing + backFocus : true, + + // Do not let user to focus on element outside modal content + trapFocus : true, + + + // Module specific options + // ======================= + + fullScreen : { + autoStart : false, + }, + + // Set `touch: false` to disable dragging/swiping + touch : { + vertical : true, // Allow to drag content vertically + momentum : true // Continue movement after releasing mouse/touch when panning + }, + + // Hash value when initializing manually, + // set `false` to disable hash change + hash : null, + + // Customize or add new media types + // Example: + /* + media : { + youtube : { + params : { + autoplay : 0 + } + } + } + */ + media : {}, + + slideShow : { + autoStart : false, + speed : 4000 + }, + + thumbs : { + autoStart : false, // Display thumbnails on opening + hideOnClose : true, // Hide thumbnail grid when closing animation starts + parentEl : '.fancybox-container', // Container is injected into this element + axis : 'y' // Vertical (y) or horizontal (x) scrolling + }, + + // Use mousewheel to navigate gallery + // If 'auto' - enabled for images only + wheel : 'auto', + + // Callbacks + //========== + + // See Documentation/API/Events for more information + // Example: + /* + afterShow: function( instance, current ) { + console.info( 'Clicked element:' ); + console.info( current.opts.$orig ); + } + */ + + onInit : $.noop, // When instance has been initialized + + beforeLoad : $.noop, // Before the content of a slide is being loaded + afterLoad : $.noop, // When the content of a slide is done loading + + beforeShow : $.noop, // Before open animation starts + afterShow : $.noop, // When content is done loading and animating + + beforeClose : $.noop, // Before the instance attempts to close. Return false to cancel the close. + afterClose : $.noop, // After instance has been closed + + onActivate : $.noop, // When instance is brought to front + onDeactivate : $.noop, // When other instance has been activated + + + // Interaction + // =========== + + // Use options below to customize taken action when user clicks or double clicks on the fancyBox area, + // each option can be string or method that returns value. + // + // Possible values: + // "close" - close instance + // "next" - move to next gallery item + // "nextOrClose" - move to next gallery item or close if gallery has only one item + // "toggleControls" - show/hide controls + // "zoom" - zoom image (if loaded) + // false - do nothing + + // Clicked on the content + clickContent : function( current, event ) { + return current.type === 'image' ? 'zoom' : false; + }, + + // Clicked on the slide + clickSlide : 'close', + + // Clicked on the background (backdrop) element + clickOutside : 'close', + + // Same as previous two, but for double click + dblclickContent : false, + dblclickSlide : false, + dblclickOutside : false, + + + // Custom options when mobile device is detected + // ============================================= + + mobile : { + idleTime : false, + margin : 0, + + clickContent : function( current, event ) { + return current.type === 'image' ? 'toggleControls' : false; + }, + clickSlide : function( current, event ) { + return current.type === 'image' ? 'toggleControls' : 'close'; + }, + dblclickContent : function( current, event ) { + return current.type === 'image' ? 'zoom' : false; + }, + dblclickSlide : function( current, event ) { + return current.type === 'image' ? 'zoom' : false; + } + }, + + + // Internationalization + // ============ + + lang : 'en', + i18n : { + 'en' : { + CLOSE : 'Close', + NEXT : 'Next', + PREV : 'Previous', + ERROR : 'The requested content cannot be loaded.
    Please try again later.', + PLAY_START : 'Start slideshow', + PLAY_STOP : 'Pause slideshow', + FULL_SCREEN : 'Full screen', + THUMBS : 'Thumbnails', + DOWNLOAD : 'Download', + SHARE : 'Share', + ZOOM : 'Zoom' + }, + 'de' : { + CLOSE : 'Schliessen', + NEXT : 'Weiter', + PREV : 'ZurĂ¼ck', + ERROR : 'Die angeforderten Daten konnten nicht geladen werden.
    Bitte versuchen Sie es später nochmal.', + PLAY_START : 'Diaschau starten', + PLAY_STOP : 'Diaschau beenden', + FULL_SCREEN : 'Vollbild', + THUMBS : 'Vorschaubilder', + DOWNLOAD : 'Herunterladen', + SHARE : 'Teilen', + ZOOM : 'MaĂŸstab' + } + } + + }; + + // Few useful variables and methods + // ================================ + + var $W = $(window); + var $D = $(document); + + var called = 0; + + + // Check if an object is a jQuery object and not a native JavaScript object + // ======================================================================== + + var isQuery = function ( obj ) { + return obj && obj.hasOwnProperty && obj instanceof $; + }; + + + // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame" + // =============================================================================== + + var requestAFrame = (function () { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + // if all else fails, use setTimeout + function (callback) { + return window.setTimeout(callback, 1000 / 60); + }; + })(); + + + // Detect the supported transition-end event property name + // ======================================================= + + var transitionEnd = (function () { + var t, el = document.createElement("fakeelement"); + + var transitions = { + "transition" : "transitionend", + "OTransition" : "oTransitionEnd", + "MozTransition" : "transitionend", + "WebkitTransition": "webkitTransitionEnd" + }; + + for (t in transitions) { + if (el.style[t] !== undefined){ + return transitions[t]; + } + } + + return 'transitionend'; + })(); + + + // Force redraw on an element. + // This helps in cases where the browser doesn't redraw an updated element properly. + // ================================================================================= + + var forceRedraw = function( $el ) { + return ( $el && $el.length && $el[0].offsetHeight ); + }; + + + // Class definition + // ================ + + var FancyBox = function( content, opts, index ) { + var self = this; + + self.opts = $.extend( true, { index : index }, $.fancybox.defaults, opts || {} ); + + if ( $.fancybox.isMobile ) { + self.opts = $.extend( true, {}, self.opts, self.opts.mobile ); + } + + // Exclude buttons option from deep merging + if ( opts && $.isArray( opts.buttons ) ) { + self.opts.buttons = opts.buttons; + } + + self.id = self.opts.id || ++called; + self.group = []; + + self.currIndex = parseInt( self.opts.index, 10 ) || 0; + self.prevIndex = null; + + self.prevPos = null; + self.currPos = 0; + + self.firstRun = null; + + // Create group elements from original item collection + self.createGroup( content ); + + if ( !self.group.length ) { + return; + } + + // Save last active element and current scroll position + self.$lastFocus = $(document.activeElement).blur(); + + // Collection of gallery objects + self.slides = {}; + + self.init(); + }; + + $.extend(FancyBox.prototype, { + + // Create DOM structure + // ==================== + + init : function() { + var self = this, + firstItem = self.group[ self.currIndex ], + firstItemOpts = firstItem.opts, + scrollbarWidth = $.fancybox.scrollbarWidth, + $scrollDiv, + $container, + buttonStr; + + self.scrollTop = $D.scrollTop(); + self.scrollLeft = $D.scrollLeft(); + + + // Hide scrollbars + // =============== + + if ( !$.fancybox.getInstance() ) { + + $( 'body' ).addClass( 'fancybox-active' ); + + // iOS hack + if ( /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream ) { + + // iOS has problems for input elements inside fixed containers, + // the workaround is to apply `position: fixed` to `` element, + // unfortunately, this makes it lose the scrollbars and forces address bar to appear. + + if ( firstItem.type !== 'image' ) { + $( 'body' ).css( 'top', $( 'body' ).scrollTop() * -1 ).addClass( 'fancybox-iosfix' ); + } + + } else if ( !$.fancybox.isMobile && document.body.scrollHeight > window.innerHeight ) { + + if ( scrollbarWidth === undefined ) { + $scrollDiv = $('
    ').appendTo( 'body' ); + + scrollbarWidth = $.fancybox.scrollbarWidth = $scrollDiv[0].offsetWidth - $scrollDiv[0].clientWidth; + + $scrollDiv.remove(); + } + + $( 'head' ).append( '' ); + $( 'body' ).addClass( 'compensate-for-scrollbar' ); + } + } + + + // Build html markup and set references + // ==================================== + + // Build html code for buttons and insert into main template + buttonStr = ''; + + $.each( firstItemOpts.buttons, function( index, value ) { + buttonStr += ( firstItemOpts.btnTpl[ value ] || '' ); + }); + + // Create markup from base template, it will be initially hidden to + // avoid unnecessary work like painting while initializing is not complete + $container = $( + self.translate( self, + firstItemOpts.baseTpl + .replace( '\{\{buttons\}\}', buttonStr ) + .replace( '\{\{arrows\}\}', firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight ) + ) + ) + .attr( 'id', 'fancybox-container-' + self.id ) + .addClass( 'fancybox-is-hidden' ) + .addClass( firstItemOpts.baseClass ) + .data( 'FancyBox', self ) + .appendTo( firstItemOpts.parentEl ); + + // Create object holding references to jQuery wrapped nodes + self.$refs = { + container : $container + }; + + [ 'bg', 'inner', 'infobar', 'toolbar', 'stage', 'caption', 'navigation' ].forEach(function(item) { + self.$refs[ item ] = $container.find( '.fancybox-' + item ); + }); + + self.trigger( 'onInit' ); + + // Enable events, deactive previous instances + self.activate(); + + // Build slides, load and reveal content + self.jumpTo( self.currIndex ); + }, + + + // Simple i18n support - replaces object keys found in template + // with corresponding values + // ============================================================ + + translate : function( obj, str ) { + var arr = obj.opts.i18n[ obj.opts.lang ]; + + return str.replace(/\{\{(\w+)\}\}/g, function(match, n) { + var value = arr[n]; + + if ( value === undefined ) { + return match; + } + + return value; + }); + }, + + // Create array of gally item objects + // Check if each object has valid type and content + // =============================================== + + createGroup : function ( content ) { + var self = this; + var items = $.makeArray( content ); + + $.each(items, function( i, item ) { + var obj = {}, + opts = {}, + $item, + type, + found, + src, + srcParts; + + // Step 1 - Make sure we have an object + // ==================================== + + if ( $.isPlainObject( item ) ) { + + // We probably have manual usage here, something like + // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] ) + + obj = item; + opts = item.opts || item; + + } else if ( $.type( item ) === 'object' && $( item ).length ) { + + // Here we probably have jQuery collection returned by some selector + $item = $( item ); + + opts = $item.data(); + opts = $.extend( {}, opts, opts.options || {} ); + + // Here we store clicked element + opts.$orig = $item; + + obj.src = opts.src || $item.attr( 'href' ); + + // Assume that simple syntax is used, for example: + // `$.fancybox.open( $("#test"), {} );` + if ( !obj.type && !obj.src ) { + obj.type = 'inline'; + obj.src = item; + } + + } else { + + // Assume we have a simple html code, for example: + // $.fancybox.open( '

    Hi!

    ' ); + + obj = { + type : 'html', + src : item + '' + }; + + } + + // Each gallery object has full collection of options + obj.opts = $.extend( true, {}, self.opts, opts ); + + // Do not merge buttons array + if ( $.isArray( opts.buttons ) ) { + obj.opts.buttons = opts.buttons; + } + + + // Step 2 - Make sure we have content type, if not - try to guess + // ============================================================== + + type = obj.type || obj.opts.type; + src = obj.src || ''; + + if ( !type && src ) { + if ( src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i) ) { + type = 'image'; + + } else if ( src.match(/\.(pdf)((\?|#).*)?$/i) ) { + type = 'pdf'; + + } else if ( found = src.match(/\.(mp4|mov|ogv)((\?|#).*)?$/i) ) { + type = 'video'; + + if ( !obj.opts.videoFormat ) { + obj.opts.videoFormat = 'video/' + ( found[1] === 'ogv' ? 'ogg' : found[1] ); + } + + } else if ( src.charAt(0) === '#' ) { + type = 'inline'; + } + } + + if ( type ) { + obj.type = type; + + } else { + self.trigger( 'objectNeedsType', obj ); + } + + + // Step 3 - Some adjustments + // ========================= + + obj.index = self.group.length; + + // Check if $orig and $thumb objects exist + if ( obj.opts.$orig && !obj.opts.$orig.length ) { + delete obj.opts.$orig; + } + + if ( !obj.opts.$thumb && obj.opts.$orig ) { + obj.opts.$thumb = obj.opts.$orig.find( 'img:first' ); + } + + if ( obj.opts.$thumb && !obj.opts.$thumb.length ) { + delete obj.opts.$thumb; + } + + // "caption" is a "special" option, it can be used to customize caption per gallery item .. + if ( $.type( obj.opts.caption ) === 'function' ) { + obj.opts.caption = obj.opts.caption.apply( item, [ self, obj ] ); + } + + if ( $.type( self.opts.caption ) === 'function' ) { + obj.opts.caption = self.opts.caption.apply( item, [ self, obj ] ); + } + + // Make sure we have caption as a string or jQuery object + if ( !( obj.opts.caption instanceof $ ) ) { + obj.opts.caption = obj.opts.caption === undefined ? '' : obj.opts.caption + ''; + } + + // Check if url contains "filter" used to filter the content + // Example: "ajax.html #something" + if ( type === 'ajax' ) { + srcParts = src.split(/\s+/, 2); + + if ( srcParts.length > 1 ) { + obj.src = srcParts.shift(); + + obj.opts.filter = srcParts.shift(); + } + } + + if ( obj.opts.smallBtn == 'auto' ) { + + if ( $.inArray( type, ['html', 'inline', 'ajax'] ) > -1 ) { + obj.opts.toolbar = false; + obj.opts.smallBtn = true; + + } else { + obj.opts.smallBtn = false; + } + + } + + // If the type is "pdf", then simply load file into iframe + if ( type === 'pdf' ) { + obj.type = 'iframe'; + + obj.opts.iframe.preload = false; + } + + // Hide all buttons and disable interactivity for modal items + if ( obj.opts.modal ) { + + obj.opts = $.extend(true, obj.opts, { + // Remove buttons + infobar : 0, + toolbar : 0, + + smallBtn : 0, + + // Disable keyboard navigation + keyboard : 0, + + // Disable some modules + slideShow : 0, + fullScreen : 0, + thumbs : 0, + touch : 0, + + // Disable click event handlers + clickContent : false, + clickSlide : false, + clickOutside : false, + dblclickContent : false, + dblclickSlide : false, + dblclickOutside : false + }); + + } + + // Step 4 - Add processed object to group + // ====================================== + + self.group.push( obj ); + + }); + + }, + + + // Attach an event handler functions for: + // - navigation buttons + // - browser scrolling, resizing; + // - focusing + // - keyboard + // - detect idle + // ====================================== + + addEvents : function() { + var self = this; + + self.removeEvents(); + + // Make navigation elements clickable + self.$refs.container.on('click.fb-close', '[data-fancybox-close]', function(e) { + e.stopPropagation(); + e.preventDefault(); + + self.close( e ); + + }).on( 'click.fb-prev touchend.fb-prev', '[data-fancybox-prev]', function(e) { + e.stopPropagation(); + e.preventDefault(); + + self.previous(); + + }).on( 'click.fb-next touchend.fb-next', '[data-fancybox-next]', function(e) { + e.stopPropagation(); + e.preventDefault(); + + self.next(); + + }).on( 'click.fb', '[data-fancybox-zoom]', function(e) { + // Click handler for zoom button + self[ self.isScaledDown() ? 'scaleToActual' : 'scaleToFit' ](); + }); + + + // Handle page scrolling and browser resizing + $W.on('orientationchange.fb resize.fb', function(e) { + + if ( e && e.originalEvent && e.originalEvent.type === "resize" ) { + + requestAFrame(function() { + self.update(); + }); + + } else { + + self.$refs.stage.hide(); + + setTimeout(function() { + self.$refs.stage.show(); + + self.update(); + }, 600); + + } + + }); + + // Trap keyboard focus inside of the modal, so the user does not accidentally tab outside of the modal + // (a.k.a. "escaping the modal") + $D.on('focusin.fb', function(e) { + var instance = $.fancybox ? $.fancybox.getInstance() : null; + + if ( instance.isClosing || !instance.current || !instance.current.opts.trapFocus || $( e.target ).hasClass( 'fancybox-container' ) || $( e.target ).is( document ) ) { + return; + } + + if ( instance && $( e.target ).css( 'position' ) !== 'fixed' && !instance.$refs.container.has( e.target ).length ) { + e.stopPropagation(); + + instance.focus(); + + // Sometimes page gets scrolled, set it back + $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft ); + } + }); + + + // Enable keyboard navigation + $D.on('keydown.fb', function (e) { + var current = self.current, + keycode = e.keyCode || e.which; + + if ( !current || !current.opts.keyboard ) { + return; + } + + if ( $(e.target).is('input') || $(e.target).is('textarea') ) { + return; + } + + // Backspace and Esc keys + if ( keycode === 8 || keycode === 27 ) { + e.preventDefault(); + + self.close( e ); + + return; + } + + // Left arrow and Up arrow + if ( keycode === 37 || keycode === 38 ) { + e.preventDefault(); + + self.previous(); + + return; + } + + // Righ arrow and Down arrow + if ( keycode === 39 || keycode === 40 ) { + e.preventDefault(); + + self.next(); + + return; + } + + self.trigger('afterKeydown', e, keycode); + }); + + + // Hide controls after some inactivity period + if ( self.group[ self.currIndex ].opts.idleTime ) { + self.idleSecondsCounter = 0; + + $D.on('mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle', function(e) { + self.idleSecondsCounter = 0; + + if ( self.isIdle ) { + self.showControls(); + } + + self.isIdle = false; + }); + + self.idleInterval = window.setInterval(function() { + self.idleSecondsCounter++; + + if ( self.idleSecondsCounter >= self.group[ self.currIndex ].opts.idleTime && !self.isDragging ) { + self.isIdle = true; + self.idleSecondsCounter = 0; + + self.hideControls(); + } + + }, 1000); + } + + }, + + + // Remove events added by the core + // =============================== + + removeEvents : function() { + var self = this; + + $W.off( 'orientationchange.fb resize.fb' ); + $D.off( 'focusin.fb keydown.fb .fb-idle' ); + + this.$refs.container.off( '.fb-close .fb-prev .fb-next' ); + + if ( self.idleInterval ) { + window.clearInterval( self.idleInterval ); + + self.idleInterval = null; + } + }, + + + // Change to previous gallery item + // =============================== + + previous : function( duration ) { + return this.jumpTo( this.currPos - 1, duration ); + }, + + + // Change to next gallery item + // =========================== + + next : function( duration ) { + return this.jumpTo( this.currPos + 1, duration ); + }, + + + // Switch to selected gallery item + // =============================== + + jumpTo : function ( pos, duration, slide ) { + var self = this, + firstRun, + loop, + current, + previous, + canvasWidth, + currentPos, + transitionProps; + + var groupLen = self.group.length; + + if ( self.isDragging || self.isClosing || ( self.isAnimating && self.firstRun ) ) { + return; + } + + pos = parseInt( pos, 10 ); + loop = self.current ? self.current.opts.loop : self.opts.loop; + + if ( !loop && ( pos < 0 || pos >= groupLen ) ) { + return false; + } + + firstRun = self.firstRun = ( self.firstRun === null ); + + if ( groupLen < 2 && !firstRun && !!self.isDragging ) { + return; + } + + previous = self.current; + + self.prevIndex = self.currIndex; + self.prevPos = self.currPos; + + // Create slides + current = self.createSlide( pos ); + + if ( groupLen > 1 ) { + if ( loop || current.index > 0 ) { + self.createSlide( pos - 1 ); + } + + if ( loop || current.index < groupLen - 1 ) { + self.createSlide( pos + 1 ); + } + } + + self.current = current; + self.currIndex = current.index; + self.currPos = current.pos; + + self.trigger( 'beforeShow', firstRun ); + + self.updateControls(); + + currentPos = $.fancybox.getTranslate( current.$slide ); + + current.isMoved = ( currentPos.left !== 0 || currentPos.top !== 0 ) && !current.$slide.hasClass( 'fancybox-animated' ); + current.forcedDuration = undefined; + + if ( $.isNumeric( duration ) ) { + current.forcedDuration = duration; + } else { + duration = current.opts[ firstRun ? 'animationDuration' : 'transitionDuration' ]; + } + + duration = parseInt( duration, 10 ); + + // Fresh start - reveal container, current slide and start loading content + if ( firstRun ) { + + if ( current.opts.animationEffect && duration ) { + self.$refs.container.css( 'transition-duration', duration + 'ms' ); + } + + self.$refs.container.removeClass( 'fancybox-is-hidden' ); + + forceRedraw( self.$refs.container ); + + self.$refs.container.addClass( 'fancybox-is-open' ); + + // Make first slide visible (to display loading icon, if needed) + current.$slide.addClass( 'fancybox-slide--current' ); + + self.loadSlide( current ); + + self.preload( 'image' ); + + return; + } + + // Clean up + $.each(self.slides, function( index, slide ) { + $.fancybox.stop( slide.$slide ); + }); + + // Make current that slide is visible even if content is still loading + current.$slide.removeClass( 'fancybox-slide--next fancybox-slide--previous' ).addClass( 'fancybox-slide--current' ); + + // If slides have been dragged, animate them to correct position + if ( current.isMoved ) { + canvasWidth = Math.round( current.$slide.width() ); + + $.each(self.slides, function( index, slide ) { + var pos = slide.pos - current.pos; + + $.fancybox.animate( slide.$slide, { + top : 0, + left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ) + }, duration, function() { + + slide.$slide.removeAttr('style').removeClass( 'fancybox-slide--next fancybox-slide--previous' ); + + if ( slide.pos === self.currPos ) { + current.isMoved = false; + + self.complete(); + } + }); + }); + + } else { + self.$refs.stage.children().removeAttr( 'style' ); + } + + // Start transition that reveals current content + // or wait when it will be loaded + + if ( current.isLoaded ) { + self.revealContent( current ); + + } else { + self.loadSlide( current ); + } + + self.preload( 'image' ); + + if ( previous.pos === current.pos ) { + return; + } + + // Handle previous slide + // ===================== + + transitionProps = 'fancybox-slide--' + ( previous.pos > current.pos ? 'next' : 'previous' ); + + previous.$slide.removeClass( 'fancybox-slide--complete fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ); + + previous.isComplete = false; + + if ( !duration || ( !current.isMoved && !current.opts.transitionEffect ) ) { + return; + } + + if ( current.isMoved ) { + previous.$slide.addClass( transitionProps ); + + } else { + + transitionProps = 'fancybox-animated ' + transitionProps + ' fancybox-fx-' + current.opts.transitionEffect; + + $.fancybox.animate( previous.$slide, transitionProps, duration, function() { + previous.$slide.removeClass( transitionProps ).removeAttr( 'style' ); + }); + + } + + }, + + + // Create new "slide" element + // These are gallery items that are actually added to DOM + // ======================================================= + + createSlide : function( pos ) { + + var self = this; + var $slide; + var index; + + index = pos % self.group.length; + index = index < 0 ? self.group.length + index : index; + + if ( !self.slides[ pos ] && self.group[ index ] ) { + $slide = $('
    ').appendTo( self.$refs.stage ); + + self.slides[ pos ] = $.extend( true, {}, self.group[ index ], { + pos : pos, + $slide : $slide, + isLoaded : false, + }); + + self.updateSlide( self.slides[ pos ] ); + } + + return self.slides[ pos ]; + }, + + + // Scale image to the actual size of the image + // =========================================== + + scaleToActual : function( x, y, duration ) { + + var self = this; + + var current = self.current; + var $what = current.$content; + + var imgPos, posX, posY, scaleX, scaleY; + + var canvasWidth = parseInt( current.$slide.width(), 10 ); + var canvasHeight = parseInt( current.$slide.height(), 10 ); + + var newImgWidth = current.width; + var newImgHeight = current.height; + + if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) { + return; + } + + $.fancybox.stop( $what ); + + self.isAnimating = true; + + x = x === undefined ? canvasWidth * 0.5 : x; + y = y === undefined ? canvasHeight * 0.5 : y; + + imgPos = $.fancybox.getTranslate( $what ); + + scaleX = newImgWidth / imgPos.width; + scaleY = newImgHeight / imgPos.height; + + // Get center position for original image + posX = ( canvasWidth * 0.5 - newImgWidth * 0.5 ); + posY = ( canvasHeight * 0.5 - newImgHeight * 0.5 ); + + // Make sure image does not move away from edges + if ( newImgWidth > canvasWidth ) { + posX = imgPos.left * scaleX - ( ( x * scaleX ) - x ); + + if ( posX > 0 ) { + posX = 0; + } + + if ( posX < canvasWidth - newImgWidth ) { + posX = canvasWidth - newImgWidth; + } + } + + if ( newImgHeight > canvasHeight) { + posY = imgPos.top * scaleY - ( ( y * scaleY ) - y ); + + if ( posY > 0 ) { + posY = 0; + } + + if ( posY < canvasHeight - newImgHeight ) { + posY = canvasHeight - newImgHeight; + } + } + + self.updateCursor( newImgWidth, newImgHeight ); + + $.fancybox.animate( $what, { + top : posY, + left : posX, + scaleX : scaleX, + scaleY : scaleY + }, duration || 330, function() { + self.isAnimating = false; + }); + + // Stop slideshow + if ( self.SlideShow && self.SlideShow.isActive ) { + self.SlideShow.stop(); + } + }, + + + // Scale image to fit inside parent element + // ======================================== + + scaleToFit : function( duration ) { + + var self = this; + + var current = self.current; + var $what = current.$content; + var end; + + if ( !( current.type == 'image' && !current.hasError) || !$what || self.isAnimating ) { + return; + } + + $.fancybox.stop( $what ); + + self.isAnimating = true; + + end = self.getFitPos( current ); + + self.updateCursor( end.width, end.height ); + + $.fancybox.animate( $what, { + top : end.top, + left : end.left, + scaleX : end.width / $what.width(), + scaleY : end.height / $what.height() + }, duration || 330, function() { + self.isAnimating = false; + }); + + }, + + // Calculate image size to fit inside viewport + // =========================================== + + getFitPos : function( slide ) { + var self = this; + var $what = slide.$content; + + var imgWidth = slide.width; + var imgHeight = slide.height; + + var margin = slide.opts.margin; + + var canvasWidth, canvasHeight, minRatio, width, height; + + if ( !$what || !$what.length || ( !imgWidth && !imgHeight) ) { + return false; + } + + // Convert "margin to CSS style: [ top, right, bottom, left ] + if ( $.type( margin ) === "number" ) { + margin = [ margin, margin ]; + } + + if ( margin.length == 2 ) { + margin = [ margin[0], margin[1], margin[0], margin[1] ]; + } + + // We can not use $slide width here, because it can have different diemensions while in transiton + canvasWidth = parseInt( self.$refs.stage.width(), 10 ) - ( margin[ 1 ] + margin[ 3 ] ); + canvasHeight = parseInt( self.$refs.stage.height(), 10 ) - ( margin[ 0 ] + margin[ 2 ] ); + + minRatio = Math.min(1, canvasWidth / imgWidth, canvasHeight / imgHeight ); + + width = Math.floor( minRatio * imgWidth ); + height = Math.floor( minRatio * imgHeight ); + + // Use floor rounding to make sure it really fits + return { + top : Math.floor( ( canvasHeight - height ) * 0.5 ) + margin[ 0 ], + left : Math.floor( ( canvasWidth - width ) * 0.5 ) + margin[ 3 ], + width : width, + height : height + }; + + }, + + + // Update content size and position for all slides + // ============================================== + + update : function() { + var self = this; + + $.each( self.slides, function( key, slide ) { + self.updateSlide( slide ); + }); + }, + + + // Update slide content position and size + // ====================================== + + updateSlide : function( slide, duration ) { + var self = this, + $what = slide && slide.$content; + + if ( $what && ( slide.width || slide.height ) ) { + self.isAnimating = false; + + $.fancybox.stop( $what ); + + $.fancybox.setTranslate( $what, self.getFitPos( slide ) ); + + if ( slide.pos === self.currPos ) { + self.updateCursor(); + } + } + + slide.$slide.trigger( 'refresh' ); + + self.trigger( 'onUpdate', slide ); + + }, + + + // Horizontally center slide + // ========================= + + centerSlide : function( slide, duration ) { + var self = this, canvasWidth, pos; + + if ( self.current ) { + canvasWidth = Math.round( slide.$slide.width() ); + pos = slide.pos - self.current.pos; + + $.fancybox.animate( slide.$slide, { + top : 0, + left : ( pos * canvasWidth ) + ( pos * slide.opts.gutter ), + opacity : 1 + }, duration === undefined ? 0 : duration, null, false); + } + }, + + + // Update cursor style depending if content can be zoomed + // ====================================================== + + updateCursor : function( nextWidth, nextHeight ) { + + var self = this; + var isScaledDown; + + var $container = self.$refs.container.removeClass( 'fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-drag fancybox-can-zoomOut' ); + + if ( !self.current || self.isClosing ) { + return; + } + + if ( self.isZoomable() ) { + + $container.addClass( 'fancybox-is-zoomable' ); + + if ( nextWidth !== undefined && nextHeight !== undefined ) { + isScaledDown = nextWidth < self.current.width && nextHeight < self.current.height; + + } else { + isScaledDown = self.isScaledDown(); + } + + if ( isScaledDown ) { + + // If image is scaled down, then, obviously, it can be zoomed to full size + $container.addClass( 'fancybox-can-zoomIn' ); + + } else { + + if ( self.current.opts.touch ) { + + // If image size ir largen than available available and touch module is not disable, + // then user can do panning + $container.addClass( 'fancybox-can-drag' ); + + } else { + $container.addClass( 'fancybox-can-zoomOut' ); + } + + } + + } else if ( self.current.opts.touch ) { + $container.addClass( 'fancybox-can-drag' ); + } + + }, + + + // Check if current slide is zoomable + // ================================== + + isZoomable : function() { + + var self = this; + + var current = self.current; + var fitPos; + + if ( !current || self.isClosing ) { + return; + } + + // Assume that slide is zoomable if + // - image is loaded successfuly + // - click action is "zoom" + // - actual size of the image is smaller than available area + if ( current.type === 'image' && current.isLoaded && !current.hasError && + ( current.opts.clickContent === 'zoom' || ( $.isFunction( current.opts.clickContent ) && current.opts.clickContent( current ) === "zoom" ) ) + ) { + + fitPos = self.getFitPos( current ); + + if ( current.width > fitPos.width || current.height > fitPos.height ) { + return true; + } + + } + + return false; + + }, + + + // Check if current image dimensions are smaller than actual + // ========================================================= + + isScaledDown : function() { + + var self = this; + + var current = self.current; + var $what = current.$content; + + var rez = false; + + if ( $what ) { + rez = $.fancybox.getTranslate( $what ); + rez = rez.width < current.width || rez.height < current.height; + } + + return rez; + + }, + + + // Check if image dimensions exceed parent element + // =============================================== + + canPan : function() { + + var self = this; + + var current = self.current; + var $what = current.$content; + + var rez = false; + + if ( $what ) { + rez = self.getFitPos( current ); + rez = Math.abs( $what.width() - rez.width ) > 1 || Math.abs( $what.height() - rez.height ) > 1; + } + + return rez; + + }, + + + // Load content into the slide + // =========================== + + loadSlide : function( slide ) { + + var self = this, type, $slide; + var ajaxLoad; + + if ( slide.isLoading ) { + return; + } + + if ( slide.isLoaded ) { + return; + } + + slide.isLoading = true; + + self.trigger( 'beforeLoad', slide ); + + type = slide.type; + $slide = slide.$slide; + + $slide + .off( 'refresh' ) + .trigger( 'onReset' ) + .addClass( 'fancybox-slide--' + ( type || 'unknown' ) ) + .addClass( slide.opts.slideClass ); + + // Create content depending on the type + + switch ( type ) { + + case 'image': + + self.setImage( slide ); + + break; + + case 'iframe': + + self.setIframe( slide ); + + break; + + case 'html': + + self.setContent( slide, slide.src || slide.content ); + + break; + + case 'inline': + + if ( $( slide.src ).length ) { + self.setContent( slide, $( slide.src ) ); + + } else { + self.setError( slide ); + } + + break; + + case 'ajax': + + self.showLoading( slide ); + + ajaxLoad = $.ajax( $.extend( {}, slide.opts.ajax.settings, { + url : slide.src, + success : function ( data, textStatus ) { + + if ( textStatus === 'success' ) { + self.setContent( slide, data ); + } + + }, + error : function ( jqXHR, textStatus ) { + + if ( jqXHR && textStatus !== 'abort' ) { + self.setError( slide ); + } + + } + })); + + $slide.one( 'onReset', function () { + ajaxLoad.abort(); + }); + + break; + + case 'video' : + + self.setContent( slide, + '' + ); + + break; + + default: + + self.setError( slide ); + + break; + + } + + return true; + + }, + + + // Use thumbnail image, if possible + // ================================ + + setImage : function( slide ) { + + var self = this; + var srcset = slide.opts.srcset || slide.opts.image.srcset; + + var found, temp, pxRatio, windowWidth; + + // If we have "srcset", then we need to find matching "src" value. + // This is necessary, because when you set an src attribute, the browser will preload the image + // before any javascript or even CSS is applied. + if ( srcset ) { + pxRatio = window.devicePixelRatio || 1; + windowWidth = window.innerWidth * pxRatio; + + temp = srcset.split(',').map(function ( el ) { + var ret = {}; + + el.trim().split(/\s+/).forEach(function ( el, i ) { + var value = parseInt( el.substring(0, el.length - 1), 10 ); + + if ( i === 0 ) { + return ( ret.url = el ); + } + + if ( value ) { + ret.value = value; + ret.postfix = el[ el.length - 1 ]; + } + + }); + + return ret; + }); + + // Sort by value + temp.sort(function (a, b) { + return a.value - b.value; + }); + + // Ok, now we have an array of all srcset values + for ( var j = 0; j < temp.length; j++ ) { + var el = temp[ j ]; + + if ( ( el.postfix === 'w' && el.value >= windowWidth ) || ( el.postfix === 'x' && el.value >= pxRatio ) ) { + found = el; + break; + } + } + + // If not found, take the last one + if ( !found && temp.length ) { + found = temp[ temp.length - 1 ]; + } + + if ( found ) { + slide.src = found.url; + + // If we have default width/height values, we can calculate height for matching source + if ( slide.width && slide.height && found.postfix == 'w' ) { + slide.height = ( slide.width / slide.height ) * found.value; + slide.width = found.value; + } + } + } + + // This will be wrapper containing both ghost and actual image + slide.$content = $('
    ') + .addClass( 'fancybox-is-hidden' ) + .appendTo( slide.$slide ); + + + // If we have a thumbnail, we can display it while actual image is loading + // Users will not stare at black screen and actual image will appear gradually + if ( slide.opts.preload !== false && slide.opts.width && slide.opts.height && ( slide.opts.thumb || slide.opts.$thumb ) ) { + + slide.width = slide.opts.width; + slide.height = slide.opts.height; + + slide.$ghost = $('') + .one('error', function() { + + $(this).remove(); + + slide.$ghost = null; + + self.setBigImage( slide ); + + }) + .one('load', function() { + + self.afterLoad( slide ); + + self.setBigImage( slide ); + + }) + .addClass( 'fancybox-image' ) + .appendTo( slide.$content ) + .attr( 'src', slide.opts.thumb || slide.opts.$thumb.attr( 'src' ) ); + + } else { + + self.setBigImage( slide ); + + } + + }, + + + // Create full-size image + // ====================== + + setBigImage : function ( slide ) { + var self = this; + var $img = $(''); + + slide.$image = $img + .one('error', function() { + + self.setError( slide ); + + }) + .one('load', function() { + + // Clear timeout that checks if loading icon needs to be displayed + clearTimeout( slide.timouts ); + + slide.timouts = null; + + if ( self.isClosing ) { + return; + } + + slide.width = slide.opts.width || this.naturalWidth; + slide.height = slide.opts.height || this.naturalHeight; + + if ( slide.opts.image.srcset ) { + $img.attr( 'sizes', '100vw' ).attr( 'srcset', slide.opts.image.srcset ); + } + + self.hideLoading( slide ); + + if ( slide.$ghost ) { + + slide.timouts = setTimeout(function() { + slide.timouts = null; + + slide.$ghost.hide(); + + }, Math.min( 300, Math.max( 1000, slide.height / 1600 ) ) ); + + } else { + self.afterLoad( slide ); + } + + }) + .addClass( 'fancybox-image' ) + .attr('src', slide.src) + .appendTo( slide.$content ); + + if ( ( $img[0].complete || $img[0].readyState == "complete" ) && $img[0].naturalWidth && $img[0].naturalHeight ) { + $img.trigger( 'load' ); + + } else if( $img[0].error ) { + $img.trigger( 'error' ); + + } else { + + slide.timouts = setTimeout(function() { + if ( !$img[0].complete && !slide.hasError ) { + self.showLoading( slide ); + } + + }, 100); + + } + + }, + + + // Create iframe wrapper, iframe and bindings + // ========================================== + + setIframe : function( slide ) { + var self = this, + opts = slide.opts.iframe, + $slide = slide.$slide, + $iframe; + + slide.$content = $('
    ') + .css( opts.css ) + .appendTo( $slide ); + + $iframe = $( opts.tpl.replace(/\{rnd\}/g, new Date().getTime()) ) + .attr( opts.attr ) + .appendTo( slide.$content ); + + if ( opts.preload ) { + + self.showLoading( slide ); + + // Unfortunately, it is not always possible to determine if iframe is successfully loaded + // (due to browser security policy) + + $iframe.on('load.fb error.fb', function(e) { + this.isReady = 1; + + slide.$slide.trigger( 'refresh' ); + + self.afterLoad( slide ); + }); + + // Recalculate iframe content size + // =============================== + + $slide.on('refresh.fb', function() { + var $wrap = slide.$content, + frameWidth = opts.css.width, + frameHeight = opts.css.height, + scrollWidth, + $contents, + $body; + + if ( $iframe[0].isReady !== 1 ) { + return; + } + + // Check if content is accessible, + // it will fail if frame is not with the same origin + + try { + $contents = $iframe.contents(); + $body = $contents.find('body'); + + } catch (ignore) {} + + // Calculate dimensions for the wrapper + if ( $body && $body.length ) { + + if ( frameWidth === undefined ) { + scrollWidth = $iframe[0].contentWindow.document.documentElement.scrollWidth; + + frameWidth = Math.ceil( $body.outerWidth(true) + ( $wrap.width() - scrollWidth ) ); + frameWidth += $wrap.outerWidth() - $wrap.innerWidth(); + } + + if ( frameHeight === undefined ) { + frameHeight = Math.ceil( $body.outerHeight(true) ); + frameHeight += $wrap.outerHeight() - $wrap.innerHeight(); + } + + // Resize wrapper to fit iframe content + if ( frameWidth ) { + $wrap.width( frameWidth ); + } + + if ( frameHeight ) { + $wrap.height( frameHeight ); + } + } + + $wrap.removeClass( 'fancybox-is-hidden' ); + + }); + + } else { + + this.afterLoad( slide ); + + } + + $iframe.attr( 'src', slide.src ); + + if ( slide.opts.smallBtn === true ) { + slide.$content.prepend( self.translate( slide, slide.opts.btnTpl.smallBtn ) ); + } + + // Remove iframe if closing or changing gallery item + $slide.one( 'onReset', function () { + + // This helps IE not to throw errors when closing + try { + + $( this ).find( 'iframe' ).hide().attr( 'src', '//about:blank' ); + + } catch ( ignore ) {} + + $( this ).empty(); + + slide.isLoaded = false; + + }); + + }, + + + // Wrap and append content to the slide + // ====================================== + + setContent : function ( slide, content ) { + + var self = this; + + if ( self.isClosing ) { + return; + } + + self.hideLoading( slide ); + + slide.$slide.empty(); + + if ( isQuery( content ) && content.parent().length ) { + + // If content is a jQuery object, then it will be moved to the slide. + // The placeholder is created so we will know where to put it back. + // If user is navigating gallery fast, then the content might be already inside fancyBox + // ===================================================================================== + + // Make sure content is not already moved to fancyBox + content.parent( '.fancybox-slide--inline' ).trigger( 'onReset' ); + + // Create temporary element marking original place of the content + slide.$placeholder = $( '
    ' ).hide().insertAfter( content ); + + // Make sure content is visible + content.css('display', 'inline-block'); + + } else if ( !slide.hasError ) { + + // If content is just a plain text, try to convert it to html + if ( $.type( content ) === 'string' ) { + content = $('
    ').append( $.trim( content ) ).contents(); + + // If we have text node, then add wrapping element to make vertical alignment work + if ( content[0].nodeType === 3 ) { + content = $('
    ').html( content ); + } + } + + // If "filter" option is provided, then filter content + if ( slide.opts.filter ) { + content = $('
    ').html( content ).find( slide.opts.filter ); + } + + } + + slide.$slide.one('onReset', function () { + + // Pause all html5 video/audio + $( this ).find( 'video,audio' ).trigger( 'pause' ); + + // Put content back + if ( slide.$placeholder ) { + slide.$placeholder.after( content.hide() ).remove(); + + slide.$placeholder = null; + } + + // Remove custom close button + if ( slide.$smallBtn ) { + slide.$smallBtn.remove(); + + slide.$smallBtn = null; + } + + // Remove content and mark slide as not loaded + if ( !slide.hasError ) { + $(this).empty(); + + slide.isLoaded = false; + } + + }); + + slide.$content = $( content ).appendTo( slide.$slide ); + + this.afterLoad( slide ); + }, + + // Display error message + // ===================== + + setError : function ( slide ) { + + slide.hasError = true; + + slide.$slide.removeClass( 'fancybox-slide--' + slide.type ); + + this.setContent( slide, this.translate( slide, slide.opts.errorTpl ) ); + + }, + + + // Show loading icon inside the slide + // ================================== + + showLoading : function( slide ) { + + var self = this; + + slide = slide || self.current; + + if ( slide && !slide.$spinner ) { + slide.$spinner = $( self.opts.spinnerTpl ).appendTo( slide.$slide ); + } + + }, + + // Remove loading icon from the slide + // ================================== + + hideLoading : function( slide ) { + + var self = this; + + slide = slide || self.current; + + if ( slide && slide.$spinner ) { + slide.$spinner.remove(); + + delete slide.$spinner; + } + + }, + + + // Adjustments after slide content has been loaded + // =============================================== + + afterLoad : function( slide ) { + + var self = this; + + if ( self.isClosing ) { + return; + } + + slide.isLoading = false; + slide.isLoaded = true; + + self.trigger( 'afterLoad', slide ); + + self.hideLoading( slide ); + + if ( slide.opts.smallBtn && !slide.$smallBtn ) { + slide.$smallBtn = $( self.translate( slide, slide.opts.btnTpl.smallBtn ) ).appendTo( slide.$content.filter('div,form').first() ); + } + + if ( slide.opts.protect && slide.$content && !slide.hasError ) { + + // Disable right click + slide.$content.on( 'contextmenu.fb', function( e ) { + if ( e.button == 2 ) { + e.preventDefault(); + } + + return true; + }); + + // Add fake element on top of the image + // This makes a bit harder for user to select image + if ( slide.type === 'image' ) { + $( '
    ' ).appendTo( slide.$content ); + } + + } + + self.revealContent( slide ); + + }, + + + // Make content visible + // This method is called right after content has been loaded or + // user navigates gallery and transition should start + // ============================================================ + + revealContent : function( slide ) { + + var self = this; + var $slide = slide.$slide; + + var effect, effectClassName, duration, opacity, end, start = false; + + effect = slide.opts[ self.firstRun ? 'animationEffect' : 'transitionEffect' ]; + duration = slide.opts[ self.firstRun ? 'animationDuration' : 'transitionDuration' ]; + + duration = parseInt( slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10 ); + + if ( slide.isMoved || slide.pos !== self.currPos || !duration ) { + effect = false; + } + + // Check if can zoom + if ( effect === 'zoom' && !( slide.pos === self.currPos && duration && slide.type === 'image' && !slide.hasError && ( start = self.getThumbPos( slide ) ) ) ) { + effect = 'fade'; + } + + // Zoom animation + // ============== + + if ( effect === 'zoom' ) { + end = self.getFitPos( slide ); + + end.scaleX = end.width / start.width; + end.scaleY = end.height / start.height; + + delete end.width; + delete end.height; + + // Check if we need to animate opacity + opacity = slide.opts.zoomOpacity; + + if ( opacity == 'auto' ) { + opacity = Math.abs( slide.width / slide.height - start.width / start.height ) > 0.1; + } + + if ( opacity ) { + start.opacity = 0.1; + end.opacity = 1; + } + + // Draw image at start position + $.fancybox.setTranslate( slide.$content.removeClass( 'fancybox-is-hidden' ), start ); + + forceRedraw( slide.$content ); + + // Start animation + $.fancybox.animate( slide.$content, end, duration, function() { + self.complete(); + }); + + return; + } + + self.updateSlide( slide ); + + + // Simply show content + // =================== + + if ( !effect ) { + forceRedraw( $slide ); + + slide.$content.removeClass( 'fancybox-is-hidden' ); + + if ( slide.pos === self.currPos ) { + self.complete(); + } + + return; + } + + $.fancybox.stop( $slide ); + + effectClassName = 'fancybox-animated fancybox-slide--' + ( slide.pos >= self.prevPos ? 'next' : 'previous' ) + ' fancybox-fx-' + effect; + + $slide.removeAttr( 'style' ).removeClass( 'fancybox-slide--current fancybox-slide--next fancybox-slide--previous' ).addClass( effectClassName ); + + slide.$content.removeClass( 'fancybox-is-hidden' ); + + //Force reflow for CSS3 transitions + forceRedraw( $slide ); + + $.fancybox.animate( $slide, 'fancybox-slide--current', duration, function(e) { + $slide.removeClass( effectClassName ).removeAttr( 'style' ); + + if ( slide.pos === self.currPos ) { + self.complete(); + } + + }, true); + + }, + + + // Check if we can and have to zoom from thumbnail + //================================================ + + getThumbPos : function( slide ) { + + var self = this; + var rez = false; + + // Check if element is inside the viewport by at least 1 pixel + var isElementVisible = function( $el ) { + var element = $el[0]; + + var elementRect = element.getBoundingClientRect(); + var parentRects = []; + + var visibleInAllParents; + + while ( element.parentElement !== null ) { + if ( $(element.parentElement).css('overflow') === 'hidden' || $(element.parentElement).css('overflow') === 'auto' ) { + parentRects.push(element.parentElement.getBoundingClientRect()); + } + + element = element.parentElement; + } + + visibleInAllParents = parentRects.every(function(parentRect){ + var visiblePixelX = Math.min(elementRect.right, parentRect.right) - Math.max(elementRect.left, parentRect.left); + var visiblePixelY = Math.min(elementRect.bottom, parentRect.bottom) - Math.max(elementRect.top, parentRect.top); + + return visiblePixelX > 0 && visiblePixelY > 0; + }); + + return visibleInAllParents && + elementRect.bottom > 0 && elementRect.right > 0 && + elementRect.left < $(window).width() && elementRect.top < $(window).height(); + }; + + var $thumb = slide.opts.$thumb; + var thumbPos = $thumb ? $thumb.offset() : 0; + var slidePos; + + if ( thumbPos && $thumb[0].ownerDocument === document && isElementVisible( $thumb ) ) { + slidePos = self.$refs.stage.offset(); + + rez = { + top : thumbPos.top - slidePos.top + parseFloat( $thumb.css( "border-top-width" ) || 0 ), + left : thumbPos.left - slidePos.left + parseFloat( $thumb.css( "border-left-width" ) || 0 ), + width : $thumb.width(), + height : $thumb.height(), + scaleX : 1, + scaleY : 1 + }; + } + + return rez; + }, + + + // Final adjustments after current gallery item is moved to position + // and it`s content is loaded + // ================================================================== + + complete : function() { + var self = this, + current = self.current, + slides = {}, + promise; + + if ( current.isMoved || !current.isLoaded || current.isComplete ) { + return; + } + + current.isComplete = true; + + current.$slide.siblings().trigger( 'onReset' ); + + self.preload( 'inline' ); + + // Trigger any CSS3 transiton inside the slide + forceRedraw( current.$slide ); + + current.$slide.addClass( 'fancybox-slide--complete' ); + + // Remove unnecessary slides + $.each( self.slides, function( key, slide ) { + if ( slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1 ) { + slides[ slide.pos ] = slide; + + } else if ( slide ) { + $.fancybox.stop( slide.$slide ); + + slide.$slide.off().remove(); + } + }); + + self.slides = slides; + + self.updateCursor(); + + self.trigger( 'afterShow' ); + + // Play first html5 video/audio + current.$slide.find( 'video,audio' ).first().trigger( 'play' ); + + // Try to focus on the first focusable element + if ( $( document.activeElement ).is( '[disabled]' ) || ( current.opts.autoFocus && !( current.type == 'image' || current.type === 'iframe' ) ) ) { + self.focus(); + } + + }, + + + // Preload next and previous slides + // ================================ + + preload : function( type ) { + var self = this, + next = self.slides[ self.currPos + 1 ], + prev = self.slides[ self.currPos - 1 ]; + + if ( next && next.type === type ) { + self.loadSlide( next ); + } + + if ( prev && prev.type === type ) { + self.loadSlide( prev ); + } + }, + + + // Try to find and focus on the first focusable element + // ==================================================== + + focus : function() { + var current = this.current; + var $el; + + if ( this.isClosing ) { + return; + } + + if ( current && current.isComplete ) { + + // Look for first input with autofocus attribute + $el = current.$slide.find('input[autofocus]:enabled:visible:first'); + + if ( !$el.length ) { + $el = current.$slide.find('button,:input,[tabindex],a').filter(':enabled:visible:first'); + } + } + + $el = $el && $el.length ? $el : this.$refs.container; + + $el.focus(); + }, + + + // Activates current instance - brings container to the front and enables keyboard, + // notifies other instances about deactivating + // ================================================================================= + + activate : function () { + var self = this; + + // Deactivate all instances + $( '.fancybox-container' ).each(function () { + var instance = $(this).data( 'FancyBox' ); + + // Skip self and closing instances + if (instance && instance.id !== self.id && !instance.isClosing) { + instance.trigger( 'onDeactivate' ); + + instance.removeEvents(); + + instance.isVisible = false; + } + + }); + + self.isVisible = true; + + if ( self.current || self.isIdle ) { + self.update(); + + self.updateControls(); + } + + self.trigger( 'onActivate' ); + + self.addEvents(); + }, + + + // Start closing procedure + // This will start "zoom-out" animation if needed and clean everything up afterwards + // ================================================================================= + + close : function( e, d ) { + + var self = this; + var current = self.current; + + var effect, duration; + var $what, opacity, start, end; + + var done = function() { + self.cleanUp( e ); + }; + + if ( self.isClosing ) { + return false; + } + + self.isClosing = true; + + // If beforeClose callback prevents closing, make sure content is centered + if ( self.trigger( 'beforeClose', e ) === false ) { + self.isClosing = false; + + requestAFrame(function() { + self.update(); + }); + + return false; + } + + // Remove all events + // If there are multiple instances, they will be set again by "activate" method + self.removeEvents(); + + if ( current.timouts ) { + clearTimeout( current.timouts ); + } + + $what = current.$content; + effect = current.opts.animationEffect; + duration = $.isNumeric( d ) ? d : ( effect ? current.opts.animationDuration : 0 ); + + // Remove other slides + current.$slide.off( transitionEnd ).removeClass( 'fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated' ); + + current.$slide.siblings().trigger( 'onReset' ).remove(); + + // Trigger animations + if ( duration ) { + self.$refs.container.removeClass( 'fancybox-is-open' ).addClass( 'fancybox-is-closing' ); + } + + // Clean up + self.hideLoading( current ); + + self.hideControls(); + + self.updateCursor(); + + // Check if possible to zoom-out + if ( effect === 'zoom' && !( e !== true && $what && duration && current.type === 'image' && !current.hasError && ( end = self.getThumbPos( current ) ) ) ) { + effect = 'fade'; + } + + if ( effect === 'zoom' ) { + $.fancybox.stop( $what ); + + start = $.fancybox.getTranslate( $what ); + + start.width = start.width * start.scaleX; + start.height = start.height * start.scaleY; + + // Check if we need to animate opacity + opacity = current.opts.zoomOpacity; + + if ( opacity == 'auto' ) { + opacity = Math.abs( current.width / current.height - end.width / end.height ) > 0.1; + } + + if ( opacity ) { + end.opacity = 0; + } + + start.scaleX = start.width / end.width; + start.scaleY = start.height / end.height; + + start.width = end.width; + start.height = end.height; + + $.fancybox.setTranslate( current.$content, start ); + + forceRedraw( current.$content ); + + $.fancybox.animate( current.$content, end, duration, done ); + + return true; + } + + if ( effect && duration ) { + + // If skip animation + if ( e === true ) { + setTimeout( done, duration ); + + } else { + $.fancybox.animate( current.$slide.removeClass( 'fancybox-slide--current' ), 'fancybox-animated fancybox-slide--previous fancybox-fx-' + effect, duration, done ); + } + + } else { + done(); + } + + return true; + }, + + + // Final adjustments after removing the instance + // ============================================= + + cleanUp : function( e ) { + var self = this, + $body = $( 'body' ), + instance, + offset; + + self.current.$slide.trigger( 'onReset' ); + + self.$refs.container.empty().remove(); + + self.trigger( 'afterClose', e ); + + // Place back focus + if ( self.$lastFocus && !!self.current.opts.backFocus ) { + self.$lastFocus.focus(); + } + + self.current = null; + + // Check if there are other instances + instance = $.fancybox.getInstance(); + + if ( instance ) { + instance.activate(); + + } else { + + $W.scrollTop( self.scrollTop ).scrollLeft( self.scrollLeft ); + + $body.removeClass( 'fancybox-active compensate-for-scrollbar' ); + + if ( $body.hasClass( 'fancybox-iosfix' ) ) { + offset = parseInt(document.body.style.top, 10); + + $body.removeClass( 'fancybox-iosfix' ).css( 'top', '' ).scrollTop( offset * -1 ); + } + + $( '#fancybox-style-noscroll' ).remove(); + + } + + }, + + + // Call callback and trigger an event + // ================================== + + trigger : function( name, slide ) { + var args = Array.prototype.slice.call(arguments, 1), + self = this, + obj = slide && slide.opts ? slide : self.current, + rez; + + if ( obj ) { + args.unshift( obj ); + + } else { + obj = self; + } + + args.unshift( self ); + + if ( $.isFunction( obj.opts[ name ] ) ) { + rez = obj.opts[ name ].apply( obj, args ); + } + + if ( rez === false ) { + return rez; + } + + if ( name === 'afterClose' || !self.$refs ) { + $D.trigger( name + '.fb', args ); + + } else { + self.$refs.container.trigger( name + '.fb', args ); + } + + }, + + + // Update infobar values, navigation button states and reveal caption + // ================================================================== + + updateControls : function ( force ) { + + var self = this; + + var current = self.current, + index = current.index, + caption = current.opts.caption, + $container = self.$refs.container, + $caption = self.$refs.caption; + + // Recalculate content dimensions + current.$slide.trigger( 'refresh' ); + + self.$caption = caption && caption.length ? $caption.html( caption ) : null; + + if ( !self.isHiddenControls && !self.isIdle ) { + self.showControls(); + } + + // Update info and navigation elements + $container.find('[data-fancybox-count]').html( self.group.length ); + $container.find('[data-fancybox-index]').html( index + 1 ); + + $container.find('[data-fancybox-prev]').prop( 'disabled', ( !current.opts.loop && index <= 0 ) ); + $container.find('[data-fancybox-next]').prop( 'disabled', ( !current.opts.loop && index >= self.group.length - 1 ) ); + + if ( current.type === 'image' ) { + + // Update download button source + $container.find('[data-fancybox-download]').attr( 'href', current.opts.image.src || current.src ).show(); + + } else { + $container.find('[data-fancybox-download],[data-fancybox-zoom]').hide(); + } + }, + + // Hide toolbar and caption + // ======================== + + hideControls : function () { + + this.isHiddenControls = true; + + this.$refs.container.removeClass( 'fancybox-show-infobar fancybox-show-toolbar fancybox-show-caption fancybox-show-nav' ); + + }, + + showControls : function() { + var self = this; + var opts = self.current ? self.current.opts : self.opts; + var $container = self.$refs.container; + + self.isHiddenControls = false; + self.idleSecondsCounter = 0; + + $container + .toggleClass( 'fancybox-show-toolbar', !!( opts.toolbar && opts.buttons ) ) + .toggleClass( 'fancybox-show-infobar', !!( opts.infobar && self.group.length > 1 ) ) + .toggleClass( 'fancybox-show-nav', !!( opts.arrows && self.group.length > 1 ) ) + .toggleClass( 'fancybox-is-modal', !!opts.modal ); + + if ( self.$caption ) { + $container.addClass( 'fancybox-show-caption '); + + } else { + $container.removeClass( 'fancybox-show-caption' ); + } + + }, + + + // Toggle toolbar and caption + // ========================== + + toggleControls : function() { + if ( this.isHiddenControls ) { + this.showControls(); + + } else { + this.hideControls(); + } + + }, + + + }); + + + $.fancybox = { + + version : "3.2.10", + defaults : defaults, + + + // Get current instance and execute a command. + // + // Examples of usage: + // + // $instance = $.fancybox.getInstance(); + // $.fancybox.getInstance().jumpTo( 1 ); + // $.fancybox.getInstance( 'jumpTo', 1 ); + // $.fancybox.getInstance( function() { + // console.info( this.currIndex ); + // }); + // ====================================================== + + getInstance : function ( command ) { + var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data( 'FancyBox' ); + var args = Array.prototype.slice.call(arguments, 1); + + if ( instance instanceof FancyBox ) { + + if ( $.type( command ) === 'string' ) { + instance[ command ].apply( instance, args ); + + } else if ( $.type( command ) === 'function' ) { + command.apply( instance, args ); + } + + return instance; + } + + return false; + + }, + + + // Create new instance + // =================== + + open : function ( items, opts, index ) { + return new FancyBox( items, opts, index ); + }, + + + // Close current or all instances + // ============================== + + close : function ( all ) { + var instance = this.getInstance(); + + if ( instance ) { + instance.close(); + + // Try to find and close next instance + + if ( all === true ) { + this.close(); + } + } + + }, + + // Close instances and unbind all events + // ============================== + + destroy : function() { + + this.close( true ); + + $D.off( 'click.fb-start' ); + + }, + + + // Try to detect mobile devices + // ============================ + + isMobile : document.createTouch !== undefined && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), + + + // Detect if 'translate3d' support is available + // ============================================ + + use3d : (function() { + var div = document.createElement('div'); + + return window.getComputedStyle && window.getComputedStyle( div ).getPropertyValue('transform') && !(document.documentMode && document.documentMode < 11); + }()), + + // Helper function to get current visual state of an element + // returns array[ top, left, horizontal-scale, vertical-scale, opacity ] + // ===================================================================== + + getTranslate : function( $el ) { + var matrix; + + if ( !$el || !$el.length ) { + return false; + } + + matrix = $el.eq( 0 ).css('transform'); + + if ( matrix && matrix.indexOf( 'matrix' ) !== -1 ) { + matrix = matrix.split('(')[1]; + matrix = matrix.split(')')[0]; + matrix = matrix.split(','); + } else { + matrix = []; + } + + if ( matrix.length ) { + + // If IE + if ( matrix.length > 10 ) { + matrix = [ matrix[13], matrix[12], matrix[0], matrix[5] ]; + + } else { + matrix = [ matrix[5], matrix[4], matrix[0], matrix[3]]; + } + + matrix = matrix.map(parseFloat); + + } else { + matrix = [ 0, 0, 1, 1 ]; + + var transRegex = /\.*translate\((.*)px,(.*)px\)/i; + var transRez = transRegex.exec( $el.eq( 0 ).attr('style') ); + + if ( transRez ) { + matrix[ 0 ] = parseFloat( transRez[2] ); + matrix[ 1 ] = parseFloat( transRez[1] ); + } + } + + return { + top : matrix[ 0 ], + left : matrix[ 1 ], + scaleX : matrix[ 2 ], + scaleY : matrix[ 3 ], + opacity : parseFloat( $el.css('opacity') ), + width : $el.width(), + height : $el.height() + }; + + }, + + + // Shortcut for setting "translate3d" properties for element + // Can set be used to set opacity, too + // ======================================================== + + setTranslate : function( $el, props ) { + var str = ''; + var css = {}; + + if ( !$el || !props ) { + return; + } + + if ( props.left !== undefined || props.top !== undefined ) { + str = ( props.left === undefined ? $el.position().left : props.left ) + 'px, ' + ( props.top === undefined ? $el.position().top : props.top ) + 'px'; + + if ( this.use3d ) { + str = 'translate3d(' + str + ', 0px)'; + + } else { + str = 'translate(' + str + ')'; + } + } + + if ( props.scaleX !== undefined && props.scaleY !== undefined ) { + str = (str.length ? str + ' ' : '') + 'scale(' + props.scaleX + ', ' + props.scaleY + ')'; + } + + if ( str.length ) { + css.transform = str; + } + + if ( props.opacity !== undefined ) { + css.opacity = props.opacity; + } + + if ( props.width !== undefined ) { + css.width = props.width; + } + + if ( props.height !== undefined ) { + css.height = props.height; + } + + return $el.css( css ); + }, + + + // Simple CSS transition handler + // ============================= + + animate : function ( $el, to, duration, callback, leaveAnimationName ) { + if ( $.isFunction( duration ) ) { + callback = duration; + duration = null; + } + + if ( !$.isPlainObject( to ) ) { + $el.removeAttr( 'style' ); + } + + $el.on( transitionEnd, function(e) { + + // Skip events from child elements and z-index change + if ( e && e.originalEvent && ( !$el.is( e.originalEvent.target ) || e.originalEvent.propertyName == 'z-index' ) ) { + return; + } + + $.fancybox.stop( $el ); + + if ( $.isPlainObject( to ) ) { + + if ( to.scaleX !== undefined && to.scaleY !== undefined ) { + $el.css( 'transition-duration', '' ); + + to.width = Math.round( $el.width() * to.scaleX ); + to.height = Math.round( $el.height() * to.scaleY ); + + to.scaleX = 1; + to.scaleY = 1; + + $.fancybox.setTranslate( $el, to ); + } + + if ( leaveAnimationName === false ) { + $el.removeAttr( 'style' ); + } + + } else if ( leaveAnimationName !== true ) { + $el.removeClass( to ); + } + + if ( $.isFunction( callback ) ) { + callback( e ); + } + + }); + + if ( $.isNumeric( duration ) ) { + $el.css( 'transition-duration', duration + 'ms' ); + } + + if ( $.isPlainObject( to ) ) { + $.fancybox.setTranslate( $el, to ); + + } else { + $el.addClass( to ); + } + + if ( to.scaleX && $el.hasClass( 'fancybox-image-wrap' ) ) { + $el.parent().addClass( 'fancybox-is-scaling' ); + } + + // Make sure that `transitionend` callback gets fired + $el.data("timer", setTimeout(function() { + $el.trigger( 'transitionend' ); + }, duration + 16)); + + }, + + stop : function( $el ) { + clearTimeout( $el.data("timer") ); + + $el.off( 'transitionend' ).css( 'transition-duration', '' ); + + if ( $el.hasClass( 'fancybox-image-wrap' ) ) { + $el.parent().removeClass( 'fancybox-is-scaling' ); + } + } + + }; + + + // Default click handler for "fancyboxed" links + // ============================================ + + function _run( e ) { + var $target = $( e.currentTarget ), + opts = e.data ? e.data.options : {}, + value = $target.attr( 'data-fancybox' ) || '', + index = 0, + items = []; + + // Avoid opening multiple times + if ( e.isDefaultPrevented() ) { + return; + } + + e.preventDefault(); + + // Get all related items and find index for clicked one + if ( value ) { + items = opts.selector ? $( opts.selector ) : ( e.data ? e.data.items : [] ); + items = items.length ? items.filter( '[data-fancybox="' + value + '"]' ) : $( '[data-fancybox="' + value + '"]' ); + + index = items.index( $target ); + + // Sometimes current item can not be found + // (for example, when slider clones items) + if ( index < 0 ) { + index = 0; + } + + } else { + items = [ $target ]; + } + + $.fancybox.open( items, opts, index ); + } + + + // Create a jQuery plugin + // ====================== + + $.fn.fancybox = function (options) { + var selector; + + options = options || {}; + selector = options.selector || false; + + if ( selector ) { + + $( 'body' ).off( 'click.fb-start', selector ).on( 'click.fb-start', selector, { + options : options + }, _run ); + + } else { + + this.off( 'click.fb-start' ).on( 'click.fb-start', { + items : this, + options : options + }, _run); + + } + + return this; + }; + + + // Self initializing plugin + // ======================== + + $D.on( 'click.fb-start', '[data-fancybox]', _run ); + +}( window, document, window.jQuery || jQuery )); + +// ========================================================================== +// +// Media +// Adds additional media type support +// +// ========================================================================== +;(function ($) { + + 'use strict'; + + // Formats matching url to final form + + var format = function (url, rez, params) { + if ( !url ) { + return; + } + + params = params || ''; + + if ( $.type(params) === "object" ) { + params = $.param(params, true); + } + + $.each(rez, function (key, value) { + url = url.replace('$' + key, value || ''); + }); + + if (params.length) { + url += (url.indexOf('?') > 0 ? '&' : '?') + params; + } + + return url; + }; + + // Object containing properties for each media type + + var defaults = { + youtube : { + matcher : /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i, + params : { + autoplay : 1, + autohide : 1, + fs : 1, + rel : 0, + hd : 1, + wmode : 'transparent', + enablejsapi : 1, + html5 : 1 + }, + paramPlace : 8, + type : 'iframe', + url : '//www.youtube.com/embed/$4', + thumb : '//img.youtube.com/vi/$4/hqdefault.jpg' + }, + + vimeo : { + matcher : /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/, + params : { + autoplay : 1, + hd : 1, + show_title : 1, + show_byline : 1, + show_portrait : 0, + fullscreen : 1, + api : 1 + }, + paramPlace : 3, + type : 'iframe', + url : '//player.vimeo.com/video/$2' + }, + + metacafe : { + matcher : /metacafe.com\/watch\/(\d+)\/(.*)?/, + type : 'iframe', + url : '//www.metacafe.com/embed/$1/?ap=1' + }, + + dailymotion : { + matcher : /dailymotion.com\/video\/(.*)\/?(.*)/, + params : { + additionalInfos : 0, + autoStart : 1 + }, + type : 'iframe', + url : '//www.dailymotion.com/embed/video/$1' + }, + + vine : { + matcher : /vine.co\/v\/([a-zA-Z0-9\?\=\-]+)/, + type : 'iframe', + url : '//vine.co/v/$1/embed/simple' + }, + + instagram : { + matcher : /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i, + type : 'image', + url : '//$1/p/$2/media/?size=l' + }, + + // Examples: + // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16 + // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z + // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572 + gmap_place : { + matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i, + type : 'iframe', + url : function (rez) { + return '//maps.google.' + rez[2] + '/?ll=' + ( rez[9] ? rez[9] + '&z=' + Math.floor( rez[10] ) + ( rez[12] ? rez[12].replace(/^\//, "&") : '' ) : rez[12] ) + '&output=' + ( rez[12] && rez[12].indexOf('layer=c') > 0 ? 'svembed' : 'embed' ); + } + }, + + // Examples: + // https://www.google.com/maps/search/Empire+State+Building/ + // https://www.google.com/maps/search/?api=1&query=centurylink+field + // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393 + gmap_search : { + matcher : /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i, + type : 'iframe', + url : function (rez) { + return '//maps.google.' + rez[2] + '/maps?q=' + rez[5].replace('query=', 'q=').replace('api=1', '') + '&output=embed'; + } + } + }; + + $(document).on('objectNeedsType.fb', function (e, instance, item) { + + var url = item.src || '', + type = false, + media, + thumb, + rez, + params, + urlParams, + paramObj, + provider; + + media = $.extend( true, {}, defaults, item.opts.media ); + + // Look for any matching media type + $.each(media, function ( providerName, providerOpts ) { + rez = url.match( providerOpts.matcher ); + + if ( !rez ) { + return; + } + + type = providerOpts.type; + paramObj = {}; + + if ( providerOpts.paramPlace && rez[ providerOpts.paramPlace ] ) { + urlParams = rez[ providerOpts.paramPlace ]; + + if ( urlParams[ 0 ] == '?' ) { + urlParams = urlParams.substring(1); + } + + urlParams = urlParams.split('&'); + + for ( var m = 0; m < urlParams.length; ++m ) { + var p = urlParams[ m ].split('=', 2); + + if ( p.length == 2 ) { + paramObj[ p[0] ] = decodeURIComponent( p[1].replace(/\+/g, " ") ); + } + } + } + + params = $.extend( true, {}, providerOpts.params, item.opts[ providerName ], paramObj ); + + url = $.type( providerOpts.url ) === "function" ? providerOpts.url.call( this, rez, params, item ) : format( providerOpts.url, rez, params ); + thumb = $.type( providerOpts.thumb ) === "function" ? providerOpts.thumb.call( this, rez, params, item ) : format( providerOpts.thumb, rez ); + + if ( providerName === 'vimeo' ) { + url = url.replace('&%23', '#'); + } + + return false; + }); + + // If it is found, then change content type and update the url + + if ( type ) { + item.src = url; + item.type = type; + + if ( !item.opts.thumb && !( item.opts.$thumb && item.opts.$thumb.length ) ) { + item.opts.thumb = thumb; + } + + if ( type === 'iframe' ) { + $.extend(true, item.opts, { + iframe : { + preload : false, + attr : { + scrolling : "no" + } + } + }); + + item.contentProvider = provider; + + item.opts.slideClass += ' fancybox-slide--' + ( provider == 'gmap_place' || provider == 'gmap_search' ? 'map' : 'video' ); + } + + } else if ( url ) { + item.type = item.opts.defaultType; + } + + }); + +}( window.jQuery || jQuery )); + +// ========================================================================== +// +// Guestures +// Adds touch guestures, handles click and tap events +// +// ========================================================================== +;(function (window, document, $) { + 'use strict'; + + var requestAFrame = (function () { + return window.requestAnimationFrame || + window.webkitRequestAnimationFrame || + window.mozRequestAnimationFrame || + window.oRequestAnimationFrame || + // if all else fails, use setTimeout + function (callback) { + return window.setTimeout(callback, 1000 / 60); + }; + })(); + + var cancelAFrame = (function () { + return window.cancelAnimationFrame || + window.webkitCancelAnimationFrame || + window.mozCancelAnimationFrame || + window.oCancelAnimationFrame || + function (id) { + window.clearTimeout(id); + }; + })(); + + var pointers = function( e ) { + var result = []; + + e = e.originalEvent || e || window.e; + e = e.touches && e.touches.length ? e.touches : ( e.changedTouches && e.changedTouches.length ? e.changedTouches : [ e ] ); + + for ( var key in e ) { + + if ( e[ key ].pageX ) { + result.push( { x : e[ key ].pageX, y : e[ key ].pageY } ); + + } else if ( e[ key ].clientX ) { + result.push( { x : e[ key ].clientX, y : e[ key ].clientY } ); + } + } + + return result; + }; + + var distance = function( point2, point1, what ) { + if ( !point1 || !point2 ) { + return 0; + } + + if ( what === 'x' ) { + return point2.x - point1.x; + + } else if ( what === 'y' ) { + return point2.y - point1.y; + } + + return Math.sqrt( Math.pow( point2.x - point1.x, 2 ) + Math.pow( point2.y - point1.y, 2 ) ); + }; + + var isClickable = function( $el ) { + if ( $el.is('a,area,button,[role="button"],input,label,select,summary,textarea') || $.isFunction( $el.get(0).onclick ) || $el.data('selectable') ) { + return true; + } + + // Check for attributes like data-fancybox-next or data-fancybox-close + for ( var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++ ) { + if ( atts[i].nodeName.substr(0, 14) === 'data-fancybox-' ) { + return true; + } + } + + return false; + }; + + var hasScrollbars = function( el ) { + var overflowY = window.getComputedStyle( el )['overflow-y']; + var overflowX = window.getComputedStyle( el )['overflow-x']; + + var vertical = (overflowY === 'scroll' || overflowY === 'auto') && el.scrollHeight > el.clientHeight; + var horizontal = (overflowX === 'scroll' || overflowX === 'auto') && el.scrollWidth > el.clientWidth; + + return vertical || horizontal; + }; + + var isScrollable = function ( $el ) { + var rez = false; + + while ( true ) { + rez = hasScrollbars( $el.get(0) ); + + if ( rez ) { + break; + } + + $el = $el.parent(); + + if ( !$el.length || $el.hasClass( 'fancybox-stage' ) || $el.is( 'body' ) ) { + break; + } + } + + return rez; + }; + + + var Guestures = function ( instance ) { + var self = this; + + self.instance = instance; + + self.$bg = instance.$refs.bg; + self.$stage = instance.$refs.stage; + self.$container = instance.$refs.container; + + self.destroy(); + + self.$container.on( 'touchstart.fb.touch mousedown.fb.touch', $.proxy(self, 'ontouchstart') ); + }; + + Guestures.prototype.destroy = function() { + this.$container.off( '.fb.touch' ); + }; + + Guestures.prototype.ontouchstart = function( e ) { + var self = this; + + var $target = $( e.target ); + var instance = self.instance; + var current = instance.current; + var $content = current.$content; + + var isTouchDevice = ( e.type == 'touchstart' ); + + // Do not respond to both (touch and mouse) events + if ( isTouchDevice ) { + self.$container.off( 'mousedown.fb.touch' ); + } + + // Ignore right click + if ( e.originalEvent && e.originalEvent.button == 2 ) { + return; + } + + // Ignore taping on links, buttons, input elements + if ( !$target.length || isClickable( $target ) || isClickable( $target.parent() ) ) { + return; + } + + // Ignore clicks on the scrollbar + if ( !$target.is('img') && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left ) { + return; + } + + // Ignore clicks while zooming or closing + if ( !current || self.instance.isAnimating || self.instance.isClosing ) { + e.stopPropagation(); + e.preventDefault(); + + return; + } + + self.realPoints = self.startPoints = pointers( e ); + + if ( !self.startPoints ) { + return; + } + + e.stopPropagation(); + + self.startEvent = e; + + self.canTap = true; + self.$target = $target; + self.$content = $content; + self.opts = current.opts.touch; + + self.isPanning = false; + self.isSwiping = false; + self.isZooming = false; + self.isScrolling = false; + + self.sliderStartPos = self.sliderLastPos || { top: 0, left: 0 }; + self.contentStartPos = $.fancybox.getTranslate( self.$content ); + self.contentLastPos = null; + + self.startTime = new Date().getTime(); + self.distanceX = self.distanceY = self.distance = 0; + + self.canvasWidth = Math.round( current.$slide[0].clientWidth ); + self.canvasHeight = Math.round( current.$slide[0].clientHeight ); + + $(document) + .off( '.fb.touch' ) + .on( isTouchDevice ? 'touchend.fb.touch touchcancel.fb.touch' : 'mouseup.fb.touch mouseleave.fb.touch', $.proxy(self, "ontouchend")) + .on( isTouchDevice ? 'touchmove.fb.touch' : 'mousemove.fb.touch', $.proxy(self, "ontouchmove")); + + if ( $.fancybox.isMobile ) { + document.addEventListener('scroll', self.onscroll, true); + } + + if ( !(self.opts || instance.canPan() ) || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) { + + // Prevent image ghosting while dragging + if ( $target.is('img') ) { + e.preventDefault(); + } + + return; + } + + if ( !( $.fancybox.isMobile && ( isScrollable( $target ) || isScrollable( $target.parent() ) ) ) ) { + e.preventDefault(); + } + + if ( self.startPoints.length === 1 ) { + if ( current.type === 'image' && ( self.contentStartPos.width > self.canvasWidth + 1 || self.contentStartPos.height > self.canvasHeight + 1 ) ) { + $.fancybox.stop( self.$content ); + + self.$content.css( 'transition-duration', '' ); + + self.isPanning = true; + + } else { + self.isSwiping = true; + } + + self.$container.addClass( 'fancybox-controls--isGrabbing' ); + } + + if ( self.startPoints.length === 2 && !instance.isAnimating && !current.hasError && current.type === 'image' && ( current.isLoaded || current.$ghost ) ) { + self.canTap = false; + self.isSwiping = false; + self.isPanning = false; + + self.isZooming = true; + + $.fancybox.stop( self.$content ); + + self.$content.css( 'transition-duration', '' ); + + self.centerPointStartX = ( ( self.startPoints[0].x + self.startPoints[1].x ) * 0.5 ) - $(window).scrollLeft(); + self.centerPointStartY = ( ( self.startPoints[0].y + self.startPoints[1].y ) * 0.5 ) - $(window).scrollTop(); + + self.percentageOfImageAtPinchPointX = ( self.centerPointStartX - self.contentStartPos.left ) / self.contentStartPos.width; + self.percentageOfImageAtPinchPointY = ( self.centerPointStartY - self.contentStartPos.top ) / self.contentStartPos.height; + + self.startDistanceBetweenFingers = distance( self.startPoints[0], self.startPoints[1] ); + } + + }; + + Guestures.prototype.onscroll = function(e) { + self.isScrolling = true; + }; + + Guestures.prototype.ontouchmove = function( e ) { + var self = this, + $target = $(e.target); + + if ( self.isScrolling || !( $target.is( self.$stage ) || self.$stage.find( $target ).length ) ) { + self.canTap = false; + + return; + } + + self.newPoints = pointers( e ); + + if ( !( self.opts || self.instance.canPan() ) || !self.newPoints || !self.newPoints.length ) { + return; + } + + if ( !(self.isSwiping && self.isSwiping === true) ) { + e.preventDefault(); + } + + self.distanceX = distance( self.newPoints[0], self.startPoints[0], 'x' ); + self.distanceY = distance( self.newPoints[0], self.startPoints[0], 'y' ); + + self.distance = distance( self.newPoints[0], self.startPoints[0] ) + + // Skip false ontouchmove events (Chrome) + if ( self.distance > 0 ) { + if ( self.isSwiping ) { + self.onSwipe(e); + + } else if ( self.isPanning ) { + self.onPan(); + + } else if ( self.isZooming ) { + self.onZoom(); + } + } + + }; + + Guestures.prototype.onSwipe = function(e) { + var self = this, + swiping = self.isSwiping, + left = self.sliderStartPos.left || 0, + angle; + + // If direction is not yet determined + if ( swiping === true ) { + + // We need at least 10px distance to correctly calculate an angle + if ( Math.abs( self.distance ) > 10 ) { + self.canTap = false; + + if ( self.instance.group.length < 2 && self.opts.vertical ) { + self.isSwiping = 'y'; + + } else if ( self.instance.isDragging || self.opts.vertical === false || ( self.opts.vertical === 'auto' && $( window ).width() > 800 ) ) { + self.isSwiping = 'x'; + + } else { + angle = Math.abs( Math.atan2( self.distanceY, self.distanceX ) * 180 / Math.PI ); + + self.isSwiping = ( angle > 45 && angle < 135 ) ? 'y' : 'x'; + } + + self.canTap = false; + + if ( self.isSwiping === 'y' && $.fancybox.isMobile && ( isScrollable( self.$target ) || isScrollable( self.$target.parent() ) ) ) { + self.isScrolling = true; + + return; + } + + self.instance.isDragging = self.isSwiping; + + // Reset points to avoid jumping, because we dropped first swipes to calculate the angle + self.startPoints = self.newPoints; + + $.each(self.instance.slides, function( index, slide ) { + $.fancybox.stop( slide.$slide ); + + slide.$slide.css( 'transition-duration', '' ); + + slide.inTransition = false; + + if ( slide.pos === self.instance.current.pos ) { + self.sliderStartPos.left = $.fancybox.getTranslate( slide.$slide ).left; + } + }); + + // Stop slideshow + if ( self.instance.SlideShow && self.instance.SlideShow.isActive ) { + self.instance.SlideShow.stop(); + } + } + + return; + } + + // Sticky edges + if ( swiping == 'x' ) { + if ( self.distanceX > 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === 0 && !self.instance.current.opts.loop ) ) ) { + left = left + Math.pow( self.distanceX, 0.8 ); + + } else if ( self.distanceX < 0 && ( self.instance.group.length < 2 || ( self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop ) ) ) { + left = left - Math.pow( -self.distanceX, 0.8 ); + + } else { + left = left + self.distanceX; + } + } + + self.sliderLastPos = { + top : swiping == 'x' ? 0 : self.sliderStartPos.top + self.distanceY, + left : left + }; + + if ( self.requestId ) { + cancelAFrame( self.requestId ); + + self.requestId = null; + } + + self.requestId = requestAFrame(function() { + + if ( self.sliderLastPos ) { + $.each(self.instance.slides, function( index, slide ) { + var pos = slide.pos - self.instance.currPos; + + $.fancybox.setTranslate( slide.$slide, { + top : self.sliderLastPos.top, + left : self.sliderLastPos.left + ( pos * self.canvasWidth ) + ( pos * slide.opts.gutter ) + }); + }); + + self.$container.addClass( 'fancybox-is-sliding' ); + } + + }); + + }; + + Guestures.prototype.onPan = function() { + var self = this; + + // Sometimes, when tapping causally, image can move a bit and that breaks double tapping + if ( distance( self.newPoints[0], self.realPoints[0] ) < ($.fancybox.isMobile ? 10 : 5) ) { + self.startPoints = self.newPoints; + return; + } + + self.canTap = false; + + self.contentLastPos = self.limitMovement(); + + if ( self.requestId ) { + cancelAFrame( self.requestId ); + + self.requestId = null; + } + + self.requestId = requestAFrame(function() { + $.fancybox.setTranslate( self.$content, self.contentLastPos ); + }); + }; + + // Make panning sticky to the edges + Guestures.prototype.limitMovement = function() { + var self = this; + + var canvasWidth = self.canvasWidth; + var canvasHeight = self.canvasHeight; + + var distanceX = self.distanceX; + var distanceY = self.distanceY; + + var contentStartPos = self.contentStartPos; + + var currentOffsetX = contentStartPos.left; + var currentOffsetY = contentStartPos.top; + + var currentWidth = contentStartPos.width; + var currentHeight = contentStartPos.height; + + var minTranslateX, minTranslateY, + maxTranslateX, maxTranslateY, + newOffsetX, newOffsetY; + + if ( currentWidth > canvasWidth ) { + newOffsetX = currentOffsetX + distanceX; + + } else { + newOffsetX = currentOffsetX; + } + + newOffsetY = currentOffsetY + distanceY; + + // Slow down proportionally to traveled distance + minTranslateX = Math.max( 0, canvasWidth * 0.5 - currentWidth * 0.5 ); + minTranslateY = Math.max( 0, canvasHeight * 0.5 - currentHeight * 0.5 ); + + maxTranslateX = Math.min( canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5 ); + maxTranslateY = Math.min( canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5 ); + + if ( currentWidth > canvasWidth ) { + + // -> + if ( distanceX > 0 && newOffsetX > minTranslateX ) { + newOffsetX = minTranslateX - 1 + Math.pow( -minTranslateX + currentOffsetX + distanceX, 0.8 ) || 0; + } + + // <- + if ( distanceX < 0 && newOffsetX < maxTranslateX ) { + newOffsetX = maxTranslateX + 1 - Math.pow( maxTranslateX - currentOffsetX - distanceX, 0.8 ) || 0; + } + + } + + if ( currentHeight > canvasHeight ) { + + // \/ + if ( distanceY > 0 && newOffsetY > minTranslateY ) { + newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8 ) || 0; + } + + // /\ + if ( distanceY < 0 && newOffsetY < maxTranslateY ) { + newOffsetY = maxTranslateY + 1 - Math.pow ( maxTranslateY - currentOffsetY - distanceY, 0.8 ) || 0; + } + + } + + return { + top : newOffsetY, + left : newOffsetX, + scaleX : contentStartPos.scaleX, + scaleY : contentStartPos.scaleY + }; + + }; + + Guestures.prototype.limitPosition = function( newOffsetX, newOffsetY, newWidth, newHeight ) { + var self = this; + + var canvasWidth = self.canvasWidth; + var canvasHeight = self.canvasHeight; + + if ( newWidth > canvasWidth ) { + newOffsetX = newOffsetX > 0 ? 0 : newOffsetX; + newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX; + + } else { + + // Center horizontally + newOffsetX = Math.max( 0, canvasWidth / 2 - newWidth / 2 ); + + } + + if ( newHeight > canvasHeight ) { + newOffsetY = newOffsetY > 0 ? 0 : newOffsetY; + newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY; + + } else { + + // Center vertically + newOffsetY = Math.max( 0, canvasHeight / 2 - newHeight / 2 ); + + } + + return { + top : newOffsetY, + left : newOffsetX + }; + + }; + + Guestures.prototype.onZoom = function() { + var self = this; + + // Calculate current distance between points to get pinch ratio and new width and height + + var currentWidth = self.contentStartPos.width; + var currentHeight = self.contentStartPos.height; + + var currentOffsetX = self.contentStartPos.left; + var currentOffsetY = self.contentStartPos.top; + + var endDistanceBetweenFingers = distance( self.newPoints[0], self.newPoints[1] ); + + var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers; + + var newWidth = Math.floor( currentWidth * pinchRatio ); + var newHeight = Math.floor( currentHeight * pinchRatio ); + + // This is the translation due to pinch-zooming + var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX; + var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY; + + //Point between the two touches + + var centerPointEndX = ((self.newPoints[0].x + self.newPoints[1].x) / 2) - $(window).scrollLeft(); + var centerPointEndY = ((self.newPoints[0].y + self.newPoints[1].y) / 2) - $(window).scrollTop(); + + // And this is the translation due to translation of the centerpoint + // between the two fingers + + var translateFromTranslatingX = centerPointEndX - self.centerPointStartX; + var translateFromTranslatingY = centerPointEndY - self.centerPointStartY; + + // The new offset is the old/current one plus the total translation + + var newOffsetX = currentOffsetX + ( translateFromZoomingX + translateFromTranslatingX ); + var newOffsetY = currentOffsetY + ( translateFromZoomingY + translateFromTranslatingY ); + + var newPos = { + top : newOffsetY, + left : newOffsetX, + scaleX : self.contentStartPos.scaleX * pinchRatio, + scaleY : self.contentStartPos.scaleY * pinchRatio + }; + + self.canTap = false; + + self.newWidth = newWidth; + self.newHeight = newHeight; + + self.contentLastPos = newPos; + + if ( self.requestId ) { + cancelAFrame( self.requestId ); + + self.requestId = null; + } + + self.requestId = requestAFrame(function() { + $.fancybox.setTranslate( self.$content, self.contentLastPos ); + }); + + }; + + Guestures.prototype.ontouchend = function( e ) { + var self = this; + var dMs = Math.max( (new Date().getTime() ) - self.startTime, 1); + + var swiping = self.isSwiping; + var panning = self.isPanning; + var zooming = self.isZooming; + var scrolling = self.isScrolling; + + self.endPoints = pointers( e ); + + self.$container.removeClass( 'fancybox-controls--isGrabbing' ); + + $(document).off( '.fb.touch' ); + + document.removeEventListener('scroll', self.onscroll, true); + + if ( self.requestId ) { + cancelAFrame( self.requestId ); + + self.requestId = null; + } + + self.isSwiping = false; + self.isPanning = false; + self.isZooming = false; + self.isScrolling = false; + + self.instance.isDragging = false; + + if ( self.canTap ) { + return self.onTap( e ); + } + + self.speed = 366; + + // Speed in px/ms + self.velocityX = self.distanceX / dMs * 0.5; + self.velocityY = self.distanceY / dMs * 0.5; + + self.speedX = Math.max( self.speed * 0.5, Math.min( self.speed * 1.5, ( 1 / Math.abs( self.velocityX ) ) * self.speed ) ); + + if ( panning ) { + self.endPanning(); + + } else if ( zooming ) { + self.endZooming(); + + } else { + self.endSwiping( swiping, scrolling ); + } + + return; + }; + + Guestures.prototype.endSwiping = function( swiping, scrolling ) { + var self = this, + ret = false, + len = self.instance.group.length; + + self.sliderLastPos = null; + + // Close if swiped vertically / navigate if horizontally + if ( swiping == 'y' && !scrolling && Math.abs( self.distanceY ) > 50 ) { + + // Continue vertical movement + $.fancybox.animate( self.instance.current.$slide, { + top : self.sliderStartPos.top + self.distanceY + ( self.velocityY * 150 ), + opacity : 0 + }, 150 ); + + ret = self.instance.close( true, 300 ); + + } else if ( swiping == 'x' && self.distanceX > 50 && len > 1 ) { + ret = self.instance.previous( self.speedX ); + + } else if ( swiping == 'x' && self.distanceX < -50 && len > 1 ) { + ret = self.instance.next( self.speedX ); + } + + if ( ret === false && ( swiping == 'x' || swiping == 'y' ) ) { + if ( scrolling || len < 2 ) { + self.instance.centerSlide( self.instance.current, 150 ); + } else { + self.instance.jumpTo( self.instance.current.index ); + } + } + + self.$container.removeClass( 'fancybox-is-sliding' ); + + }; + + // Limit panning from edges + // ======================== + + Guestures.prototype.endPanning = function() { + + var self = this; + var newOffsetX, newOffsetY, newPos; + + if ( !self.contentLastPos ) { + return; + } + + if ( self.opts.momentum === false ) { + newOffsetX = self.contentLastPos.left; + newOffsetY = self.contentLastPos.top; + + } else { + + // Continue movement + newOffsetX = self.contentLastPos.left + ( self.velocityX * self.speed ); + newOffsetY = self.contentLastPos.top + ( self.velocityY * self.speed ); + } + + newPos = self.limitPosition( newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height ); + + newPos.width = self.contentStartPos.width; + newPos.height = self.contentStartPos.height; + + $.fancybox.animate( self.$content, newPos, 330 ); + }; + + + Guestures.prototype.endZooming = function() { + var self = this; + + var current = self.instance.current; + + var newOffsetX, newOffsetY, newPos, reset; + + var newWidth = self.newWidth; + var newHeight = self.newHeight; + + if ( !self.contentLastPos ) { + return; + } + + newOffsetX = self.contentLastPos.left; + newOffsetY = self.contentLastPos.top; + + reset = { + top : newOffsetY, + left : newOffsetX, + width : newWidth, + height : newHeight, + scaleX : 1, + scaleY : 1 + }; + + // Reset scalex/scaleY values; this helps for perfomance and does not break animation + $.fancybox.setTranslate( self.$content, reset ); + + if ( newWidth < self.canvasWidth && newHeight < self.canvasHeight ) { + self.instance.scaleToFit( 150 ); + + } else if ( newWidth > current.width || newHeight > current.height ) { + self.instance.scaleToActual( self.centerPointStartX, self.centerPointStartY, 150 ); + + } else { + + newPos = self.limitPosition( newOffsetX, newOffsetY, newWidth, newHeight ); + + // Switch from scale() to width/height or animation will not work correctly + $.fancybox.setTranslate( self.content, $.fancybox.getTranslate( self.$content ) ); + + $.fancybox.animate( self.$content, newPos, 150 ); + } + + }; + + Guestures.prototype.onTap = function(e) { + var self = this; + var $target = $( e.target ); + + var instance = self.instance; + var current = instance.current; + + var endPoints = ( e && pointers( e ) ) || self.startPoints; + + var tapX = endPoints[0] ? endPoints[0].x - self.$stage.offset().left : 0; + var tapY = endPoints[0] ? endPoints[0].y - self.$stage.offset().top : 0; + + var where; + + var process = function ( prefix ) { + + var action = current.opts[ prefix ]; + + if ( $.isFunction( action ) ) { + action = action.apply( instance, [ current, e ] ); + } + + if ( !action) { + return; + } + + switch ( action ) { + + case "close" : + + instance.close( self.startEvent ); + + break; + + case "toggleControls" : + + instance.toggleControls( true ); + + break; + + case "next" : + + instance.next(); + + break; + + case "nextOrClose" : + + if ( instance.group.length > 1 ) { + instance.next(); + + } else { + instance.close( self.startEvent ); + } + + break; + + case "zoom" : + + if ( current.type == 'image' && ( current.isLoaded || current.$ghost ) ) { + + if ( instance.canPan() ) { + instance.scaleToFit(); + + } else if ( instance.isScaledDown() ) { + instance.scaleToActual( tapX, tapY ); + + } else if ( instance.group.length < 2 ) { + instance.close( self.startEvent ); + } + } + + break; + } + + }; + + // Ignore right click + if ( e.originalEvent && e.originalEvent.button == 2 ) { + return; + } + + // Skip if clicked on the scrollbar + if ( !$target.is('img') && tapX > $target[0].clientWidth + $target.offset().left ) { + return; + } + + // Check where is clicked + if ( $target.is( '.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container' ) ) { + where = 'Outside'; + + } else if ( $target.is( '.fancybox-slide' ) ) { + where = 'Slide'; + + } else if ( instance.current.$content && instance.current.$content.find( $target ).addBack().filter( $target ).length ) { + where = 'Content'; + + } else { + return; + } + + // Check if this is a double tap + if ( self.tapped ) { + + // Stop previously created single tap + clearTimeout( self.tapped ); + self.tapped = null; + + // Skip if distance between taps is too big + if ( Math.abs( tapX - self.tapX ) > 50 || Math.abs( tapY - self.tapY ) > 50 ) { + return this; + } + + // OK, now we assume that this is a double-tap + process( 'dblclick' + where ); + + } else { + + // Single tap will be processed if user has not clicked second time within 300ms + // or there is no need to wait for double-tap + self.tapX = tapX; + self.tapY = tapY; + + if ( current.opts[ 'dblclick' + where ] && current.opts[ 'dblclick' + where ] !== current.opts[ 'click' + where ] ) { + + self.tapped = setTimeout(function() { + self.tapped = null; + + process( 'click' + where ); + + }, 500); + + } else { + process( 'click' + where ); + } + + } + + return this; + }; + + $(document).on('onActivate.fb', function (e, instance) { + if ( instance && !instance.Guestures ) { + instance.Guestures = new Guestures( instance ); + } + }); + +}( window, document, window.jQuery || jQuery )); + +// ========================================================================== +// +// SlideShow +// Enables slideshow functionality +// +// Example of usage: +// $.fancybox.getInstance().SlideShow.start() +// +// ========================================================================== +;(function (document, $) { + 'use strict'; + + $.extend(true, $.fancybox.defaults, { + btnTpl : { + slideShow : + '' + }, + slideShow : { + autoStart : false, + speed : 3000 + } + }); + + var SlideShow = function( instance ) { + this.instance = instance; + this.init(); + }; + + $.extend( SlideShow.prototype, { + timer : null, + isActive : false, + $button : null, + + init : function() { + var self = this; + + self.$button = self.instance.$refs.toolbar.find('[data-fancybox-play]').on('click', function() { + self.toggle(); + }); + + if ( self.instance.group.length < 2 || !self.instance.group[ self.instance.currIndex ].opts.slideShow ) { + self.$button.hide(); + } + }, + + set : function( force ) { + var self = this; + + // Check if reached last element + if ( self.instance && self.instance.current && (force === true || self.instance.current.opts.loop || self.instance.currIndex < self.instance.group.length - 1 )) { + self.timer = setTimeout(function() { + if ( self.isActive ) { + self.instance.jumpTo( (self.instance.currIndex + 1) % self.instance.group.length ); + } + + }, self.instance.current.opts.slideShow.speed); + + } else { + self.stop(); + self.instance.idleSecondsCounter = 0; + self.instance.showControls(); + } + }, + + clear : function() { + var self = this; + + clearTimeout( self.timer ); + + self.timer = null; + }, + + start : function() { + var self = this; + var current = self.instance.current; + + if ( current ) { + self.isActive = true; + + self.$button + .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_STOP ) + .removeClass( 'fancybox-button--play' ) + .addClass( 'fancybox-button--pause' ); + + self.set( true ); + } + }, + + stop : function() { + var self = this; + var current = self.instance.current; + + self.clear(); + + self.$button + .attr( 'title', current.opts.i18n[ current.opts.lang ].PLAY_START ) + .removeClass( 'fancybox-button--pause' ) + .addClass( 'fancybox-button--play' ); + + self.isActive = false; + }, + + toggle : function() { + var self = this; + + if ( self.isActive ) { + self.stop(); + + } else { + self.start(); + } + } + + }); + + $(document).on({ + 'onInit.fb' : function(e, instance) { + if ( instance && !instance.SlideShow ) { + instance.SlideShow = new SlideShow( instance ); + } + }, + + 'beforeShow.fb' : function(e, instance, current, firstRun) { + var SlideShow = instance && instance.SlideShow; + + if ( firstRun ) { + + if ( SlideShow && current.opts.slideShow.autoStart ) { + SlideShow.start(); + } + + } else if ( SlideShow && SlideShow.isActive ) { + SlideShow.clear(); + } + }, + + 'afterShow.fb' : function(e, instance, current) { + var SlideShow = instance && instance.SlideShow; + + if ( SlideShow && SlideShow.isActive ) { + SlideShow.set(); + } + }, + + 'afterKeydown.fb' : function(e, instance, current, keypress, keycode) { + var SlideShow = instance && instance.SlideShow; + + // "P" or Spacebar + if ( SlideShow && current.opts.slideShow && ( keycode === 80 || keycode === 32 ) && !$(document.activeElement).is( 'button,a,input' ) ) { + keypress.preventDefault(); + + SlideShow.toggle(); + } + }, + + 'beforeClose.fb onDeactivate.fb' : function(e, instance) { + var SlideShow = instance && instance.SlideShow; + + if ( SlideShow ) { + SlideShow.stop(); + } + } + }); + + // Page Visibility API to pause slideshow when window is not active + $(document).on("visibilitychange", function() { + var instance = $.fancybox.getInstance(); + var SlideShow = instance && instance.SlideShow; + + if ( SlideShow && SlideShow.isActive ) { + if ( document.hidden ) { + SlideShow.clear(); + + } else { + SlideShow.set(); + } + } + }); + +}( document, window.jQuery || jQuery )); + +// ========================================================================== +// +// FullScreen +// Adds fullscreen functionality +// +// ========================================================================== +;(function (document, $) { + 'use strict'; + + // Collection of methods supported by user browser + var fn = (function () { + + var fnMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror' + ], + // new WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + // old WebKit (Safari 5.1) + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror' + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror' + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError' + ] + ]; + + var val; + var ret = {}; + var i, j; + + for ( i = 0; i < fnMap.length; i++ ) { + val = fnMap[ i ]; + + if ( val && val[ 1 ] in document ) { + for ( j = 0; j < val.length; j++ ) { + ret[ fnMap[ 0 ][ j ] ] = val[ j ]; + } + + return ret; + } + } + + return false; + })(); + + // If browser does not have Full Screen API, then simply unset default button template and stop + if ( !fn ) { + + if ( $ && $.fancybox ) { + $.fancybox.defaults.btnTpl.fullScreen = false; + } + + return; + } + + var FullScreen = { + + request : function ( elem ) { + + elem = elem || document.documentElement; + + elem[ fn.requestFullscreen ]( elem.ALLOW_KEYBOARD_INPUT ); + + }, + exit : function () { + + document[ fn.exitFullscreen ](); + + }, + toggle : function ( elem ) { + + elem = elem || document.documentElement; + + if ( this.isFullscreen() ) { + this.exit(); + + } else { + this.request( elem ); + } + + }, + isFullscreen : function() { + + return Boolean( document[ fn.fullscreenElement ] ); + + }, + enabled : function() { + + return Boolean( document[ fn.fullscreenEnabled ] ); + + } + }; + + $.extend(true, $.fancybox.defaults, { + btnTpl : { + fullScreen : + '' + }, + fullScreen : { + autoStart : false + } + }); + + $(document).on({ + 'onInit.fb' : function(e, instance) { + var $container; + + if ( instance && instance.group[ instance.currIndex ].opts.fullScreen ) { + $container = instance.$refs.container; + + $container.on('click.fb-fullscreen', '[data-fancybox-fullscreen]', function(e) { + + e.stopPropagation(); + e.preventDefault(); + + FullScreen.toggle( $container[ 0 ] ); + + }); + + if ( instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true ) { + FullScreen.request( $container[ 0 ] ); + } + + // Expose API + instance.FullScreen = FullScreen; + + } else if ( instance ) { + instance.$refs.toolbar.find('[data-fancybox-fullscreen]').hide(); + } + + }, + + 'afterKeydown.fb' : function(e, instance, current, keypress, keycode) { + + // "P" or Spacebar + if ( instance && instance.FullScreen && keycode === 70 ) { + keypress.preventDefault(); + + instance.FullScreen.toggle( instance.$refs.container[ 0 ] ); + } + + }, + + 'beforeClose.fb' : function( instance ) { + if ( instance && instance.FullScreen ) { + FullScreen.exit(); + } + } + }); + + $(document).on(fn.fullscreenchange, function() { + var isFullscreen = FullScreen.isFullscreen(), + instance = $.fancybox.getInstance(); + + if ( instance ) { + + // If image is zooming, then force to stop and reposition properly + if ( instance.current && instance.current.type === 'image' && instance.isAnimating ) { + instance.current.$content.css( 'transition', 'none' ); + + instance.isAnimating = false; + + instance.update( true, true, 0 ); + } + + instance.trigger( 'onFullscreenChange', isFullscreen ); + + instance.$refs.container.toggleClass( 'fancybox-is-fullscreen', isFullscreen ); + } + + }); + +}( document, window.jQuery || jQuery )); + +// ========================================================================== +// +// Thumbs +// Displays thumbnails in a grid +// +// ========================================================================== +;(function (document, $) { + 'use strict'; + + // Make sure there are default values + $.fancybox.defaults = $.extend(true, { + btnTpl : { + thumbs : + '' + }, + thumbs : { + autoStart : false, // Display thumbnails on opening + hideOnClose : true, // Hide thumbnail grid when closing animation starts + parentEl : '.fancybox-container', // Container is injected into this element + axis : 'y' // Vertical (y) or horizontal (x) scrolling + } + }, $.fancybox.defaults); + + var FancyThumbs = function( instance ) { + this.init( instance ); + }; + + $.extend( FancyThumbs.prototype, { + + $button : null, + $grid : null, + $list : null, + isVisible : false, + isActive : false, + + init : function( instance ) { + var self = this; + + self.instance = instance; + + instance.Thumbs = self; + + // Enable thumbs if at least two group items have thumbnails + var first = instance.group[0], + second = instance.group[1]; + + self.opts = instance.group[ instance.currIndex ].opts.thumbs; + + self.$button = instance.$refs.toolbar.find( '[data-fancybox-thumbs]' ); + + if ( self.opts && first && second && ( + ( first.type == 'image' || first.opts.thumb || first.opts.$thumb ) && + ( second.type == 'image' || second.opts.thumb || second.opts.$thumb ) + )) { + + self.$button.show().on('click', function() { + self.toggle(); + }); + + self.isActive = true; + + } else { + self.$button.hide(); + } + }, + + create : function() { + var self = this, + instance = self.instance, + parentEl = self.opts.parentEl, + list, + src; + + self.$grid = $('
    ').appendTo( instance.$refs.container.find( parentEl ).addBack().filter( parentEl ) ); + + // Build list HTML + list = '
      '; + + $.each(instance.group, function( i, item ) { + src = item.opts.thumb || ( item.opts.$thumb ? item.opts.$thumb.attr( 'src' ) : null ); + + if ( !src && item.type === 'image' ) { + src = item.src; + } + + if ( src && src.length ) { + list += '
    • '; + } + }); + + list += '
    '; + + self.$list = $( list ).appendTo( self.$grid ).on('click', 'li', function() { + instance.jumpTo( $(this).data('index') ); + }); + + self.$list.find( 'img' ).hide().one('load', function() { + var $parent = $(this).parent().removeClass( 'fancybox-thumbs-loading' ), + thumbWidth = $parent.outerWidth(), + thumbHeight = $parent.outerHeight(), + width, + height, + widthRatio, + heightRatio; + + width = this.naturalWidth || this.width; + height = this.naturalHeight || this.height; + + // Calculate thumbnail dimensions; center vertically and horizontally + widthRatio = width / thumbWidth; + heightRatio = height / thumbHeight; + + if (widthRatio >= 1 && heightRatio >= 1) { + if (widthRatio > heightRatio) { + width = width / heightRatio; + height = thumbHeight; + + } else { + width = thumbWidth; + height = height / widthRatio; + } + } + + $(this).css({ + width : Math.floor(width), + height : Math.floor(height), + 'margin-top' : height > thumbHeight ? ( Math.floor(thumbHeight * 0.3 - height * 0.3 ) ) : Math.floor(thumbHeight * 0.5 - height * 0.5 ), + 'margin-left' : Math.floor(thumbWidth * 0.5 - width * 0.5 ) + }).show(); + + }) + .each(function() { + this.src = $( this ).data( 'src' ); + }); + + if ( self.opts.axis === 'x' ) { + self.$list.width( parseInt( self.$grid.css("padding-right") ) + ( instance.group.length * self.$list.children().eq(0).outerWidth(true) ) + 'px' ); + } + }, + + focus : function( duration ) { + var self = this, + $list = self.$list, + thumb, + thumbPos; + + if ( self.instance.current ) { + thumb = $list.children() + .removeClass( 'fancybox-thumbs-active' ) + .filter('[data-index="' + self.instance.current.index + '"]') + .addClass('fancybox-thumbs-active'); + + thumbPos = thumb.position(); + + // Check if need to scroll to make current thumb visible + if ( self.opts.axis === 'y' && ( thumbPos.top < 0 || thumbPos.top > ( $list.height() - thumb.outerHeight() ) ) ) { + $list.stop().animate({ 'scrollTop' : $list.scrollTop() + thumbPos.top }, duration); + + } else if ( self.opts.axis === 'x' && ( + thumbPos.left < $list.parent().scrollLeft() || + thumbPos.left > ( $list.parent().scrollLeft() + ( $list.parent().width() - thumb.outerWidth() ) ) + ) + ) { + $list.parent().stop().animate({ 'scrollLeft' : thumbPos.left }, duration); + } + } + }, + + update : function() { + this.instance.$refs.container.toggleClass( 'fancybox-show-thumbs', this.isVisible ); + + if ( this.isVisible ) { + if ( !this.$grid ) { + this.create(); + } + + this.instance.trigger( 'onThumbsShow' ); + + this.focus( 0 ); + + } else if ( this.$grid ) { + this.instance.trigger( 'onThumbsHide' ); + } + + // Update content position + this.instance.update(); + }, + + hide : function() { + this.isVisible = false; + this.update(); + }, + + show : function() { + this.isVisible = true; + this.update(); + }, + + toggle : function() { + this.isVisible = !this.isVisible; + this.update(); + } + }); + + $(document).on({ + + 'onInit.fb' : function(e, instance) { + var Thumbs; + + if ( instance && !instance.Thumbs ) { + Thumbs = new FancyThumbs( instance ); + + if ( Thumbs.isActive && Thumbs.opts.autoStart === true ) { + Thumbs.show(); + } + } + }, + + 'beforeShow.fb' : function(e, instance, item, firstRun) { + var Thumbs = instance && instance.Thumbs; + + if ( Thumbs && Thumbs.isVisible ) { + Thumbs.focus( firstRun ? 0 : 250 ); + } + }, + + 'afterKeydown.fb' : function(e, instance, current, keypress, keycode) { + var Thumbs = instance && instance.Thumbs; + + // "G" + if ( Thumbs && Thumbs.isActive && keycode === 71 ) { + keypress.preventDefault(); + + Thumbs.toggle(); + } + }, + + 'beforeClose.fb' : function( e, instance ) { + var Thumbs = instance && instance.Thumbs; + + if ( Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false ) { + Thumbs.$grid.hide(); + } + } + + }); + +}(document, window.jQuery)); + +//// ========================================================================== +// +// Share +// Displays simple form for sharing current url +// +// ========================================================================== +;(function (document, $) { + 'use strict'; + + $.extend(true, $.fancybox.defaults, { + btnTpl : { + share : + '' + }, + share : { + tpl : + '
    ' + + '

    {{SHARE}}

    ' + + '' + + '

    ' + + '
    ' + } + }); + + function escapeHtml(string) { + var entityMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/', + '`': '`', + '=': '=' + }; + + return String(string).replace(/[&<>"'`=\/]/g, function (s) { + return entityMap[s]; + }); + } + + $(document).on('click', '[data-fancybox-share]', function() { + var f = $.fancybox.getInstance(), + url, + tpl; + + if ( f ) { + url = f.current.opts.hash === false ? f.current.src : window.location; + tpl = f.current.opts.share.tpl + .replace( /\{\{media\}\}/g, f.current.type === 'image' ? encodeURIComponent( f.current.src ) : '' ) + .replace( /\{\{url\}\}/g, encodeURIComponent( url ) ) + .replace( /\{\{url_raw\}\}/g, escapeHtml( url ) ) + .replace( /\{\{descr\}\}/g, f.$caption ? encodeURIComponent( f.$caption.text() ) : '' ); + + $.fancybox.open({ + src : f.translate( f, tpl ), + type : 'html', + opts : { + animationEffect : "fade", + animationDuration : 250, + afterLoad : function(instance, current) { + // Opening links in a popup window + current.$content.find('.fancybox-share__links a').click(function() { + window.open(this.href, "Share", "width=550, height=450"); + return false; + }); + } + } + }); + } + + }); + +}( document, window.jQuery || jQuery )); + +// ========================================================================== +// +// Hash +// Enables linking to each modal +// +// ========================================================================== +;(function (document, window, $) { + 'use strict'; + + // Simple $.escapeSelector polyfill (for jQuery prior v3) + if ( !$.escapeSelector ) { + $.escapeSelector = function( sel ) { + var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + var fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }; + + return ( sel + "" ).replace( rcssescape, fcssescape ); + }; + } + + // Create new history entry only once + var shouldCreateHistory = true; + + // Variable containing last hash value set by fancyBox + // It will be used to determine if fancyBox needs to close after hash change is detected + var currentHash = null; + + // Throttling the history change + var timerID = null; + + // Get info about gallery name and current index from url + function parseUrl() { + var hash = window.location.hash.substr( 1 ); + var rez = hash.split( '-' ); + var index = rez.length > 1 && /^\+?\d+$/.test( rez[ rez.length - 1 ] ) ? parseInt( rez.pop( -1 ), 10 ) || 1 : 1; + var gallery = rez.join( '-' ); + + // Index is starting from 1 + if ( index < 1 ) { + index = 1; + } + + return { + hash : hash, + index : index, + gallery : gallery + }; + } + + // Trigger click evnt on links to open new fancyBox instance + function triggerFromUrl( url ) { + var $el; + + if ( url.gallery !== '' ) { + + // If we can find element matching 'data-fancybox' atribute, then trigger click event for that .. + $el = $( "[data-fancybox='" + $.escapeSelector( url.gallery ) + "']" ).eq( url.index - 1 ); + + if ( !$el.length ) { + // .. if not, try finding element by ID + $el = $( "#" + $.escapeSelector( url.gallery ) + "" ); + } + + if ( $el.length ) { + shouldCreateHistory = false; + + $el.trigger( 'click' ); + } + + } + } + + // Get gallery name from current instance + function getGalleryID( instance ) { + var opts; + + if ( !instance ) { + return false; + } + + opts = instance.current ? instance.current.opts : instance.opts; + + return opts.hash || ( opts.$orig ? opts.$orig.data( 'fancybox' ) : '' ); + } + + // Start when DOM becomes ready + $(function() { + + // Check if user has disabled this module + if ( $.fancybox.defaults.hash === false ) { + return; + } + + // Update hash when opening/closing fancyBox + $(document).on({ + 'onInit.fb' : function( e, instance ) { + var url, gallery; + + if ( instance.group[ instance.currIndex ].opts.hash === false ) { + return; + } + + url = parseUrl(); + gallery = getGalleryID( instance ); + + // Make sure gallery start index matches index from hash + if ( gallery && url.gallery && gallery == url.gallery ) { + instance.currIndex = url.index - 1; + } + }, + + 'beforeShow.fb' : function( e, instance, current ) { + var gallery; + + if ( !current || current.opts.hash === false ) { + return; + } + + gallery = getGalleryID( instance ); + + // Update window hash + if ( gallery && gallery !== '' ) { + + if ( window.location.hash.indexOf( gallery ) < 0 ) { + instance.opts.origHash = window.location.hash; + } + + currentHash = gallery + ( instance.group.length > 1 ? '-' + ( current.index + 1 ) : '' ); + + if ( 'replaceState' in window.history ) { + if ( timerID ) { + clearTimeout( timerID ); + } + + timerID = setTimeout(function() { + window.history[ shouldCreateHistory ? 'pushState' : 'replaceState' ]( {} , document.title, window.location.pathname + window.location.search + '#' + currentHash ); + + timerID = null; + + shouldCreateHistory = false; + + }, 300); + + } else { + window.location.hash = currentHash; + } + + } + + }, + + 'beforeClose.fb' : function( e, instance, current ) { + var gallery, origHash; + + if ( timerID ) { + clearTimeout( timerID ); + } + + if ( current.opts.hash === false ) { + return; + } + + gallery = getGalleryID( instance ); + origHash = instance && instance.opts.origHash ? instance.opts.origHash : ''; + + // Remove hash from location bar + if ( gallery && gallery !== '' ) { + + if ( 'replaceState' in history ) { + window.history.replaceState( {} , document.title, window.location.pathname + window.location.search + origHash ); + + } else { + window.location.hash = origHash; + + // Keep original scroll position + $( window ).scrollTop( instance.scrollTop ).scrollLeft( instance.scrollLeft ); + } + } + + currentHash = null; + } + }); + + // Check if need to close after url has changed + $(window).on('hashchange.fb', function() { + var url = parseUrl(); + + if ( $.fancybox.getInstance() ) { + if ( currentHash && currentHash !== url.gallery + '-' + url.index && !( url.index === 1 && currentHash == url.gallery ) ) { + currentHash = null; + + $.fancybox.close(); + } + + } else if ( url.gallery !== '' ) { + triggerFromUrl( url ); + } + }); + + // Check current hash and trigger click event on matching element to start fancyBox, if needed + setTimeout(function() { + triggerFromUrl( parseUrl() ); + }, 50); + }); + +}( document, window, window.jQuery || jQuery )); + +;(function (document, $) { + 'use strict'; + + var prevTime = new Date().getTime(); + + $(document).on({ + 'onInit.fb' : function( e, instance, current ) { + instance.$refs.stage.on('mousewheel DOMMouseScroll wheel MozMousePixelScroll', function(e) { + var current = instance.current, + currTime = new Date().getTime(); + + if ( instance.group.length < 1 || current.opts.wheel === false || ( current.opts.wheel === 'auto' && current.type !== 'image' ) ) { + return; + } + + e.preventDefault(); + e.stopPropagation(); + + if ( current.$slide.hasClass( 'fancybox-animated' ) ) { + return; + } + + e = e.originalEvent || e; + + if ( currTime - prevTime < 250 ) { + return; + } + + prevTime = currTime; + + instance[ ( -e.deltaY || -e.deltaX || e.wheelDelta || -e.detail ) < 0 ? 'next' : 'previous' ](); + + }); + } + }); + +}( document, window.jQuery || jQuery )); \ No newline at end of file diff --git a/apiferia/src/assets/js/jquery.min.js b/apiferia/src/assets/js/jquery.min.js new file mode 100644 index 00000000..798cc8bf --- /dev/null +++ b/apiferia/src/assets/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
    ",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0
    ') + .addClass('nice-select') + .addClass($select.attr('class') || '') + .addClass($select.attr('disabled') ? 'disabled' : '') + .attr('tabindex', $select.attr('disabled') ? null : '0') + .html('
      ') + ); + + var $dropdown = $select.next(); + var $options = $select.find('option'); + var $selected = $select.find('option:selected'); + + $dropdown.find('.current').html($selected.data('display') || $selected.text()); + + $options.each(function(i) { + var $option = $(this); + var display = $option.data('display'); + + $dropdown.find('ul').append($('
    • ') + .attr('data-value', $option.val()) + .attr('data-display', (display || null)) + .addClass('option' + + ($option.is(':selected') ? ' selected' : '') + + ($option.is(':disabled') ? ' disabled' : '')) + .html($option.text()) + ); + }); + } + + /* Event listeners */ + + // Unbind existing events in case that the plugin has been initialized before + $(document).off('.nice_select'); + + // Open/close + $(document).on('click.nice_select', '.nice-select', function(event) { + var $dropdown = $(this); + + $('.nice-select').not($dropdown).removeClass('open'); + $dropdown.toggleClass('open'); + + if ($dropdown.hasClass('open')) { + $dropdown.find('.option'); + $dropdown.find('.focus').removeClass('focus'); + $dropdown.find('.selected').addClass('focus'); + } else { + $dropdown.focus(); + } + }); + + // Close when clicking outside + $(document).on('click.nice_select', function(event) { + if ($(event.target).closest('.nice-select').length === 0) { + $('.nice-select').removeClass('open').find('.option'); + } + }); + + // Option click + $(document).on('click.nice_select', '.nice-select .option:not(.disabled)', function(event) { + var $option = $(this); + var $dropdown = $option.closest('.nice-select'); + + $dropdown.find('.selected').removeClass('selected'); + $option.addClass('selected'); + + var text = $option.data('display') || $option.text(); + $dropdown.find('.current').text(text); + + $dropdown.prev('select').val($option.data('value')).trigger('change'); + }); + + // Keyboard events + $(document).on('keydown.nice_select', '.nice-select', function(event) { + var $dropdown = $(this); + var $focused_option = $($dropdown.find('.focus') || $dropdown.find('.list .option.selected')); + + // Space or Enter + if (event.keyCode == 32 || event.keyCode == 13) { + if ($dropdown.hasClass('open')) { + $focused_option.trigger('click'); + } else { + $dropdown.trigger('click'); + } + return false; + // Down + } else if (event.keyCode == 40) { + if (!$dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } else { + var $next = $focused_option.nextAll('.option:not(.disabled)').first(); + if ($next.length > 0) { + $dropdown.find('.focus').removeClass('focus'); + $next.addClass('focus'); + } + } + return false; + // Up + } else if (event.keyCode == 38) { + if (!$dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } else { + var $prev = $focused_option.prevAll('.option:not(.disabled)').first(); + if ($prev.length > 0) { + $dropdown.find('.focus').removeClass('focus'); + $prev.addClass('focus'); + } + } + return false; + // Esc + } else if (event.keyCode == 27) { + if ($dropdown.hasClass('open')) { + $dropdown.trigger('click'); + } + // Tab + } else if (event.keyCode == 9) { + if ($dropdown.hasClass('open')) { + return false; + } + } + }); + + // Detect CSS pointer-events support, for IE <= 10. From Modernizr. + var style = document.createElement('a').style; + style.cssText = 'pointer-events:auto'; + if (style.pointerEvents !== 'auto') { + $('html').addClass('no-csspointerevents'); + } + + return this; + + }; + + }(jQuery)); \ No newline at end of file diff --git a/apiferia/src/assets/js/lazysize.min.js b/apiferia/src/assets/js/lazysize.min.js new file mode 100644 index 00000000..5b7adc11 --- /dev/null +++ b/apiferia/src/assets/js/lazysize.min.js @@ -0,0 +1,630 @@ +/*! lazysizes - v5.3.2 */ + +!(function (e) { + var t = (function (u, D, f) { + "use strict"; + var k, H; + if ( + ((function () { + var e; + var t = { + lazyClass: "lazyload", + loadedClass: "lazyloaded", + loadingClass: "lazyloading", + preloadClass: "lazypreload", + errorClass: "lazyerror", + autosizesClass: "lazyautosizes", + fastLoadedClass: "ls-is-cached", + iframeLoadMode: 0, + srcAttr: "data-src", + srcsetAttr: "data-srcset", + sizesAttr: "data-sizes", + minSize: 40, + customMedia: {}, + init: true, + expFactor: 1.5, + hFac: 0.8, + loadMode: 2, + loadHidden: true, + ricTimeout: 0, + throttleDelay: 125, + }; + H = u.lazySizesConfig || u.lazysizesConfig || {}; + for (e in t) { + if (!(e in H)) { + H[e] = t[e]; + } + } + })(), + !D || !D.getElementsByClassName) + ) { + return { init: function () {}, cfg: H, noSupport: true }; + } + var O = D.documentElement, + i = u.HTMLPictureElement, + P = "addEventListener", + $ = "getAttribute", + q = u[P].bind(u), + I = u.setTimeout, + U = u.requestAnimationFrame || I, + o = u.requestIdleCallback, + j = /^picture$/i, + r = ["load", "error", "lazyincluded", "_lazyloaded"], + a = {}, + G = Array.prototype.forEach, + J = function (e, t) { + if (!a[t]) { + a[t] = new RegExp("(\\s|^)" + t + "(\\s|$)"); + } + return a[t].test(e[$]("class") || "") && a[t]; + }, + K = function (e, t) { + if (!J(e, t)) { + e.setAttribute("class", (e[$]("class") || "").trim() + " " + t); + } + }, + Q = function (e, t) { + var a; + if ((a = J(e, t))) { + e.setAttribute("class", (e[$]("class") || "").replace(a, " ")); + } + }, + V = function (t, a, e) { + var i = e ? P : "removeEventListener"; + if (e) { + V(t, a); + } + r.forEach(function (e) { + t[i](e, a); + }); + }, + X = function (e, t, a, i, r) { + var n = D.createEvent("Event"); + if (!a) { + a = {}; + } + a.instance = k; + n.initEvent(t, !i, !r); + n.detail = a; + e.dispatchEvent(n); + return n; + }, + Y = function (e, t) { + var a; + if (!i && (a = u.picturefill || H.pf)) { + if (t && t.src && !e[$]("srcset")) { + e.setAttribute("srcset", t.src); + } + a({ reevaluate: true, elements: [e] }); + } else if (t && t.src) { + e.src = t.src; + } + }, + Z = function (e, t) { + return (getComputedStyle(e, null) || {})[t]; + }, + s = function (e, t, a) { + a = a || e.offsetWidth; + while (a < H.minSize && t && !e._lazysizesWidth) { + a = t.offsetWidth; + t = t.parentNode; + } + return a; + }, + ee = (function () { + var a, i; + var t = []; + var r = []; + var n = t; + var s = function () { + var e = n; + n = t.length ? r : t; + a = true; + i = false; + while (e.length) { + e.shift()(); + } + a = false; + }; + var e = function (e, t) { + if (a && !t) { + e.apply(this, arguments); + } else { + n.push(e); + if (!i) { + i = true; + (D.hidden ? I : U)(s); + } + } + }; + e._lsFlush = s; + return e; + })(), + te = function (a, e) { + return e + ? function () { + ee(a); + } + : function () { + var e = this; + var t = arguments; + ee(function () { + a.apply(e, t); + }); + }; + }, + ae = function (e) { + var a; + var i = 0; + var r = H.throttleDelay; + var n = H.ricTimeout; + var t = function () { + a = false; + i = f.now(); + e(); + }; + var s = + o && n > 49 + ? function () { + o(t, { timeout: n }); + if (n !== H.ricTimeout) { + n = H.ricTimeout; + } + } + : te(function () { + I(t); + }, true); + return function (e) { + var t; + if ((e = e === true)) { + n = 33; + } + if (a) { + return; + } + a = true; + t = r - (f.now() - i); + if (t < 0) { + t = 0; + } + if (e || t < 9) { + s(); + } else { + I(s, t); + } + }; + }, + ie = function (e) { + var t, a; + var i = 99; + var r = function () { + t = null; + e(); + }; + var n = function () { + var e = f.now() - a; + if (e < i) { + I(n, i - e); + } else { + (o || r)(r); + } + }; + return function () { + a = f.now(); + if (!t) { + t = I(n, i); + } + }; + }, + e = (function () { + var v, m, c, h, e; + var y, z, g, p, C, b, A; + var n = /^img$/i; + var d = /^iframe$/i; + var E = "onscroll" in u && !/(gle|ing)bot/.test(navigator.userAgent); + var _ = 0; + var w = 0; + var M = 0; + var N = -1; + var L = function (e) { + M--; + if (!e || M < 0 || !e.target) { + M = 0; + } + }; + var x = function (e) { + if (A == null) { + A = Z(D.body, "visibility") == "hidden"; + } + return ( + A || + !( + Z(e.parentNode, "visibility") == "hidden" && + Z(e, "visibility") == "hidden" + ) + ); + }; + var W = function (e, t) { + var a; + var i = e; + var r = x(e); + g -= t; + b += t; + p -= t; + C += t; + while (r && (i = i.offsetParent) && i != D.body && i != O) { + r = (Z(i, "opacity") || 1) > 0; + if (r && Z(i, "overflow") != "visible") { + a = i.getBoundingClientRect(); + r = + C > a.left && p < a.right && b > a.top - 1 && g < a.bottom + 1; + } + } + return r; + }; + var t = function () { + var e, t, a, i, r, n, s, o, l, u, f, c; + var d = k.elements; + if ((h = H.loadMode) && M < 8 && (e = d.length)) { + t = 0; + N++; + for (; t < e; t++) { + if (!d[t] || d[t]._lazyRace) { + continue; + } + if (!E || (k.prematureUnveil && k.prematureUnveil(d[t]))) { + R(d[t]); + continue; + } + if (!(o = d[t][$]("data-expand")) || !(n = o * 1)) { + n = w; + } + if (!u) { + u = + !H.expand || H.expand < 1 + ? O.clientHeight > 500 && O.clientWidth > 500 + ? 500 + : 370 + : H.expand; + k._defEx = u; + f = u * H.expFactor; + c = H.hFac; + A = null; + if (w < f && M < 1 && N > 2 && h > 2 && !D.hidden) { + w = f; + N = 0; + } else if (h > 1 && N > 1 && M < 6) { + w = u; + } else { + w = _; + } + } + if (l !== n) { + y = innerWidth + n * c; + z = innerHeight + n; + s = n * -1; + l = n; + } + a = d[t].getBoundingClientRect(); + if ( + (b = a.bottom) >= s && + (g = a.top) <= z && + (C = a.right) >= s * c && + (p = a.left) <= y && + (b || C || p || g) && + (H.loadHidden || x(d[t])) && + ((m && M < 3 && !o && (h < 3 || N < 4)) || W(d[t], n)) + ) { + R(d[t]); + r = true; + if (M > 9) { + break; + } + } else if ( + !r && + m && + !i && + M < 4 && + N < 4 && + h > 2 && + (v[0] || H.preloadAfterLoad) && + (v[0] || + (!o && (b || C || p || g || d[t][$](H.sizesAttr) != "auto"))) + ) { + i = v[0] || d[t]; + } + } + if (i && !r) { + R(i); + } + } + }; + var a = ae(t); + var S = function (e) { + var t = e.target; + if (t._lazyCache) { + delete t._lazyCache; + return; + } + L(e); + K(t, H.loadedClass); + Q(t, H.loadingClass); + V(t, B); + X(t, "lazyloaded"); + }; + var i = te(S); + var B = function (e) { + i({ target: e.target }); + }; + var T = function (e, t) { + var a = e.getAttribute("data-load-mode") || H.iframeLoadMode; + if (a == 0) { + e.contentWindow.location.replace(t); + } else if (a == 1) { + e.src = t; + } + }; + var F = function (e) { + var t; + var a = e[$](H.srcsetAttr); + if ((t = H.customMedia[e[$]("data-media") || e[$]("media")])) { + e.setAttribute("media", t); + } + if (a) { + e.setAttribute("srcset", a); + } + }; + var s = te(function (t, e, a, i, r) { + var n, s, o, l, u, f; + if (!(u = X(t, "lazybeforeunveil", e)).defaultPrevented) { + if (i) { + if (a) { + K(t, H.autosizesClass); + } else { + t.setAttribute("sizes", i); + } + } + s = t[$](H.srcsetAttr); + n = t[$](H.srcAttr); + if (r) { + o = t.parentNode; + l = o && j.test(o.nodeName || ""); + } + f = e.firesLoad || ("src" in t && (s || n || l)); + u = { target: t }; + K(t, H.loadingClass); + if (f) { + clearTimeout(c); + c = I(L, 2500); + V(t, B, true); + } + if (l) { + G.call(o.getElementsByTagName("source"), F); + } + if (s) { + t.setAttribute("srcset", s); + } else if (n && !l) { + if (d.test(t.nodeName)) { + T(t, n); + } else { + t.src = n; + } + } + if (r && (s || l)) { + Y(t, { src: n }); + } + } + if (t._lazyRace) { + delete t._lazyRace; + } + Q(t, H.lazyClass); + ee(function () { + var e = t.complete && t.naturalWidth > 1; + if (!f || e) { + if (e) { + K(t, H.fastLoadedClass); + } + S(u); + t._lazyCache = true; + I(function () { + if ("_lazyCache" in t) { + delete t._lazyCache; + } + }, 9); + } + if (t.loading == "lazy") { + M--; + } + }, true); + }); + var R = function (e) { + if (e._lazyRace) { + return; + } + var t; + var a = n.test(e.nodeName); + var i = a && (e[$](H.sizesAttr) || e[$]("sizes")); + var r = i == "auto"; + if ( + (r || !m) && + a && + (e[$]("src") || e.srcset) && + !e.complete && + !J(e, H.errorClass) && + J(e, H.lazyClass) + ) { + return; + } + t = X(e, "lazyunveilread").detail; + if (r) { + re.updateElem(e, true, e.offsetWidth); + } + e._lazyRace = true; + M++; + s(e, t, r, i, a); + }; + var r = ie(function () { + H.loadMode = 3; + a(); + }); + var o = function () { + if (H.loadMode == 3) { + H.loadMode = 2; + } + r(); + }; + var l = function () { + if (m) { + return; + } + if (f.now() - e < 999) { + I(l, 999); + return; + } + m = true; + H.loadMode = 3; + a(); + q("scroll", o, true); + }; + return { + _: function () { + e = f.now(); + k.elements = D.getElementsByClassName(H.lazyClass); + v = D.getElementsByClassName(H.lazyClass + " " + H.preloadClass); + q("scroll", a, true); + q("resize", a, true); + q("pageshow", function (e) { + if (e.persisted) { + var t = D.querySelectorAll("." + H.loadingClass); + if (t.length && t.forEach) { + U(function () { + t.forEach(function (e) { + if (e.complete) { + R(e); + } + }); + }); + } + } + }); + if (u.MutationObserver) { + new MutationObserver(a).observe(O, { + childList: true, + subtree: true, + attributes: true, + }); + } else { + O[P]("DOMNodeInserted", a, true); + O[P]("DOMAttrModified", a, true); + setInterval(a, 999); + } + q("hashchange", a, true); + [ + "focus", + "mouseover", + "click", + "load", + "transitionend", + "animationend", + ].forEach(function (e) { + D[P](e, a, true); + }); + if (/d$|^c/.test(D.readyState)) { + l(); + } else { + q("load", l); + D[P]("DOMContentLoaded", a); + I(l, 2e4); + } + if (k.elements.length) { + t(); + ee._lsFlush(); + } else { + a(); + } + }, + checkElems: a, + unveil: R, + _aLSL: o, + }; + })(), + re = (function () { + var a; + var n = te(function (e, t, a, i) { + var r, n, s; + e._lazysizesWidth = i; + i += "px"; + e.setAttribute("sizes", i); + if (j.test(t.nodeName || "")) { + r = t.getElementsByTagName("source"); + for (n = 0, s = r.length; n < s; n++) { + r[n].setAttribute("sizes", i); + } + } + if (!a.detail.dataAttr) { + Y(e, a.detail); + } + }); + var i = function (e, t, a) { + var i; + var r = e.parentNode; + if (r) { + a = s(e, r, a); + i = X(e, "lazybeforesizes", { width: a, dataAttr: !!t }); + if (!i.defaultPrevented) { + a = i.detail.width; + if (a && a !== e._lazysizesWidth) { + n(e, r, i, a); + } + } + } + }; + var e = function () { + var e; + var t = a.length; + if (t) { + e = 0; + for (; e < t; e++) { + i(a[e]); + } + } + }; + var t = ie(e); + return { + _: function () { + a = D.getElementsByClassName(H.autosizesClass); + q("resize", t); + }, + checkElems: t, + updateElem: i, + }; + })(), + t = function () { + if (!t.i && D.getElementsByClassName) { + t.i = true; + re._(); + e._(); + } + }; + return ( + I(function () { + H.init && t(); + }), + (k = { + cfg: H, + autoSizer: re, + loader: e, + init: t, + uP: Y, + aC: K, + rC: Q, + hC: J, + fire: X, + gW: s, + rAF: ee, + }) + ); + })(e, e.document, Date); + (e.lazySizes = t), + "object" == typeof module && module.exports && (module.exports = t); +})("undefined" != typeof window ? window : {}); diff --git a/apiferia/src/assets/js/main.js b/apiferia/src/assets/js/main.js new file mode 100644 index 00000000..0d273346 --- /dev/null +++ b/apiferia/src/assets/js/main.js @@ -0,0 +1,346 @@ +/** + * Header Connect + * retinaLogo + * ajaxContactForm + * headerFixed + * select js + * mobileNav + * ajaxSubscribe + * alertBox + * loadmore +*/ + +; (function ($) { + "use strict"; + + var themesflatTheme = { + + // Main init function + init: function () { + this.config(); + this.events(); + }, + + // Define vars for caching + config: function () { + this.config = { + $window: $(window), + $document: $(document), + }; + }, + + // Events + events: function () { + var self = this; + + // Run on document ready + self.config.$document.on('ready', function () { + + + // Retina Logos + self.retinaLogo(); + + + }); + + // Run on Window Load + self.config.$window.on('load', function () { + + }); + }, + + }; // end themesflatTheme + + // Start things up + themesflatTheme.init(); + + var retinaLogos = function() { + var retina = window.devicePixelRatio > 1 ? true : false; + if(retina) { + $('#site-logo-inner').find('img').attr( {src:'assets/images/logo/logo@2x.png',width:'197',height:'48'} ); + + $('#logo-footer.style').find('img').attr( {src:'assets/images/logo/logo-footer@2x.png',width:'197',height:'48'} ); + } + }; + + var ajaxContactForm = function () { + $('#contactform,#commentform').each(function () { + $(this).validate({ + submitHandler: function (form) { + var $form = $(form), + str = $form.serialize(), + loading = $('
      ', { 'class': 'loading' }); + + $.ajax({ + type: "POST", + url: $form.attr('action'), + data: str, + beforeSend: function () { + $form.find('.form-submit,comment-form').append(loading); + }, + success: function (msg) { + var result, cls; + if (msg === 'Success') { + result = 'Message Sent Successfully To Email Administrator. ( You can change the email management a very easy way to get the message of customers in the user manual )'; + cls = 'msg-success'; + } else { + result = 'Error sending email.'; + cls = 'msg-error'; + } + + $form.prepend( + $('
      ', { + 'class': 'flat-alert ' + cls, + 'text': result + }).append( + $('') + ) + ); + + $form.find(':input').not('.submit').val(''); + }, + complete: function (xhr, status, error_thrown) { + $form.find('.loading').remove(); + } + }); + } + }); + }); // each contactform + }; + + + var headerFixed = function () { + if ($('body').hasClass('header-fixed')) { + var nav = $('.header-lower'); + if (nav.length) { + var + offsetTop = nav.offset().top, + headerHeight = nav.height(), + injectSpace = $("
      ", { + height: headerHeight + }).insertAfter(nav); + injectSpace.hide(); + + $(window).on('load scroll', function () { + if ($(window).scrollTop() > offsetTop + headerHeight) { + nav.addClass('is-fixed'); + injectSpace.show(); + } else { + nav.removeClass('is-fixed'); + injectSpace.hide(); + } + + if ($(window).scrollTop() > 300) { + nav.addClass('is-small'); + } else { + nav.removeClass('is-small'); + } + }) + } + } + }; + + //=========NICE SELECT========= + $('.select_js').niceSelect(); + + + //Submenu Dropdown Toggle + if($('.main-header li.dropdown2 ul').length){ + $('.main-header li.dropdown2').append(''); + + //Dropdown Button + $('.main-header li.dropdown2 .dropdown2-btn').on('click', function() { + $(this).prev('ul').slideToggle(500); + }); + + //Disable dropdown parent link + $('.navigation li.dropdown2 > a').on('click', function(e) { + e.preventDefault(); + }); + + //Disable dropdown parent link + $('.main-header .navigation li.dropdown2 > a,.hidden-bar .side-menu li.dropdown2 > a').on('click', function(e) { + e.preventDefault(); + }); + + $('.price-block .features .arrow').on('click', function(e) { + $(e.target.offsetParent.offsetParent.offsetParent).toggleClass('active-show-hidden') + }); + + } + + // Mobile Nav Hide Show + if($('.mobile-menu').length){ + + //$('.mobile-menu .menu-box').mCustomScrollbar(); + + var mobileMenuContent = $('.main-header .nav-outer .main-menu').html(); + $('.mobile-menu .menu-box .menu-outer').append(mobileMenuContent); + $('.sticky-header .main-menu').append(mobileMenuContent); + + //Hide / Show Submenu + $('.mobile-menu .navigation > li.dropdown2 > .dropdown2-btn').on('click', function(e) { + e.preventDefault(); + var target = $(this).parent('li').children('ul'); + + if ($(target).is(':visible')){ + $(this).parent('li').removeClass('open'); + $(target).slideUp(500); + $(this).parents('.navigation').children('li.dropdown2').removeClass('open'); + $(this).parents('.navigation').children('li.dropdown2 > ul').slideUp(500); + return false; + }else{ + $(this).parents('.navigation').children('li.dropdown2').removeClass('open'); + $(this).parents('.navigation').children('li.dropdown2').children('ul').slideUp(500); + $(this).parent('li').toggleClass('open'); + $(this).parent('li').children('ul').slideToggle(500); + } + }); + + //3rd Level Nav + $('.mobile-menu .navigation > li.dropdown2 > ul > li.dropdown2 > .dropdown2-btn').on('click', function(e) { + e.preventDefault(); + var targetInner = $(this).parent('li').children('ul'); + + if ($(targetInner).is(':visible')){ + $(this).parent('li').removeClass('open'); + $(targetInner).slideUp(500); + $(this).parents('.navigation > ul').find('li.dropdown2').removeClass('open'); + $(this).parents('.navigation > ul').find('li.dropdown > ul').slideUp(500); + return false; + }else{ + $(this).parents('.navigation > ul').find('li.dropdown2').removeClass('open'); + $(this).parents('.navigation > ul').find('li.dropdown2 > ul').slideUp(500); + $(this).parent('li').toggleClass('open'); + $(this).parent('li').children('ul').slideToggle(500); + } + }); + + //Menu Toggle Btn + $('.mobile-nav-toggler').on('click', function() { + $('body').addClass('mobile-menu-visible'); + + }); + + //Menu Toggle Btn + $('.mobile-menu .menu-backdrop, .close-btn').on('click', function() { + $('body').removeClass('mobile-menu-visible'); + $('.mobile-menu .navigation > li').removeClass('open'); + $('.mobile-menu .navigation li ul').slideUp(0); + }); + + $(document).keydown(function(e){ + if(e.keyCode === 27) { + $('body').removeClass('mobile-menu-visible'); + $('.mobile-menu .navigation > li').removeClass('open'); + $('.mobile-menu .navigation li ul').slideUp(0); + } + }); + + } + + var ajaxSubscribe = { + obj: { + subscribeEmail: $('#subscribe-email'), + subscribeButton: $('#subscribe-button'), + subscribeMsg: $('#subscribe-msg'), + subscribeContent: $("#subscribe-content"), + dataMailchimp: $('#subscribe-form').attr('data-mailchimp'), + success_message: '
      Thank you for joining our mailing list! Please check your email for a confirmation link.
      ', + failure_message: '
      Error! There was a problem processing your submission.
      ', + noticeError: '
      {msg}
      ', + noticeInfo: '
      {msg}
      ', + basicAction: 'mail/subscribe.php', + mailChimpAction: 'mail/subscribe-mailchimp.php' + }, + + eventLoad: function () { + var objUse = ajaxSubscribe.obj; + + $(objUse.subscribeButton).on('click', function () { + if (window.ajaxCalling) return; + var isMailchimp = objUse.dataMailchimp === 'true'; + + if (isMailchimp) { + ajaxSubscribe.ajaxCall(objUse.mailChimpAction); + } else { + ajaxSubscribe.ajaxCall(objUse.basicAction); + } + }); + }, + + ajaxCall: function (action) { + window.ajaxCalling = true; + var objUse = ajaxSubscribe.obj; + var messageDiv = objUse.subscribeMsg.html('').hide(); + $.ajax({ + url: action, + type: 'POST', + dataType: 'json', + data: { + subscribeEmail: objUse.subscribeEmail.val() + }, + success: function (responseData, textStatus, jqXHR) { + if (responseData.status) { + objUse.subscribeContent.fadeOut(500, function () { + messageDiv.html(objUse.success_message).fadeIn(500); + }); + } else { + switch (responseData.msg) { + case "email-required": + messageDiv.html(objUse.noticeError.replace('{msg}', 'Error! Email is required.')); + break; + case "email-err": + messageDiv.html(objUse.noticeError.replace('{msg}', 'Error! Email invalid.')); + break; + case "duplicate": + messageDiv.html(objUse.noticeError.replace('{msg}', 'Error! Email is duplicate.')); + break; + case "filewrite": + messageDiv.html(objUse.noticeInfo.replace('{msg}', 'Error! Mail list file is open.')); + break; + case "undefined": + messageDiv.html(objUse.noticeInfo.replace('{msg}', 'Error! undefined error.')); + break; + case "api-error": + objUse.subscribeContent.fadeOut(500, function () { + messageDiv.html(objUse.failure_message); + }); + } + messageDiv.fadeIn(500); + } + }, + error: function (jqXHR, textStatus, errorThrown) { + alert('Connection error'); + }, + complete: function (data) { + window.ajaxCalling = false; + } + }); + } + }; + + + + var alertBox = function () { + $(document).on('click', '.close', function (e) { + $(this).closest('.flat-alert').remove(); + e.preventDefault(); + }) + }; + + + // Dom Ready + $(function () { + $( window ).on('load resize',function() { + retinaLogos(); + }); + headerFixed(); + ajaxContactForm(); + ajaxSubscribe.eventLoad(); + alertBox(); + + }); + +})(jQuery); + diff --git a/apiferia/src/assets/js/map-single.js b/apiferia/src/assets/js/map-single.js new file mode 100644 index 00000000..663dd289 --- /dev/null +++ b/apiferia/src/assets/js/map-single.js @@ -0,0 +1,531 @@ + +/*var infoBox_ratingType='star-rating';*/ + +(function ($) { + "use strict"; + function mainMap() { + var ib = new InfoBox(); + function locationData(mapImg, mapURL, mapTitle, mapLocation) { + return ""; + } + + var locations = [[locationData(), 40.709327, -74.004815, 1, "
      "]]; + + function numericalRating(ratingElem) { + $(ratingElem).each(function () { + var dataRating = $(this).attr("data-rating"); + if (dataRating >= 4.0) { + $(this).addClass("high"); + } else if (dataRating >= 3.0) { + $(this).addClass("mid"); + } else if (dataRating < 3.0) { + $(this).addClass("low"); + } + }); + } + numericalRating(".numerical-rating"); + + function starRating(ratingElem) { + $(ratingElem).each(function () { + var dataRating = $(this).attr("data-rating"); + + function starsOutput( + firstStar, + secondStar, + thirdStar, + fourthStar, + fifthStar + ) { + return ( + "" + + '' + + '' + + '' + + '' + + '' + ); + } + var fiveStars = starsOutput("star", "star", "star", "star", "star"); + var fourHalfStars = starsOutput( + "star", + "star", + "star", + "star", + "star half" + ); + var fourStars = starsOutput( + "star", + "star", + "star", + "star", + "star empty" + ); + var threeHalfStars = starsOutput( + "star", + "star", + "star", + "star half", + "star empty" + ); + var threeStars = starsOutput( + "star", + "star", + "star", + "star empty", + "star empty" + ); + var twoHalfStars = starsOutput( + "star", + "star", + "star half", + "star empty", + "star empty" + ); + var twoStars = starsOutput( + "star", + "star", + "star empty", + "star empty", + "star empty" + ); + var oneHalfStar = starsOutput( + "star", + "star half", + "star empty", + "star empty", + "star empty" + ); + var oneStar = starsOutput( + "star", + "star empty", + "star empty", + "star empty", + "star empty" + ); + if (dataRating >= 4.75) { + $(this).append(fiveStars); + } else if (dataRating >= 4.25) { + $(this).append(fourHalfStars); + } else if (dataRating >= 3.75) { + $(this).append(fourStars); + } else if (dataRating >= 3.25) { + $(this).append(threeHalfStars); + } else if (dataRating >= 2.75) { + $(this).append(threeStars); + } else if (dataRating >= 2.25) { + $(this).append(twoHalfStars); + } else if (dataRating >= 1.75) { + $(this).append(twoStars); + } else if (dataRating >= 1.25) { + $(this).append(oneHalfStar); + } else if (dataRating < 1.25) { + $(this).append(oneStar); + } + }); + } + starRating(".star-rating"); + + var mapZoomAttr = $("#map-single").attr("data-map-zoom"); + var mapScrollAttr = $("#map-single").attr("data-map-scroll"); + if (typeof mapZoomAttr !== typeof undefined && mapZoomAttr !== false) { + var zoomLevel = parseInt(mapZoomAttr); + } else { + var zoomLevel = 5; + } + if (typeof mapScrollAttr !== typeof undefined && mapScrollAttr !== false) { + var scrollEnabled = parseInt(mapScrollAttr); + } else { + var scrollEnabled = false; + } + var map = new google.maps.Map(document.getElementById("map-single"), { + zoom: zoomLevel, + scrollwheel: false, + center: new google.maps.LatLng(40.709295, -74.003099), + mapTypeId: google.maps.MapTypeId.ROADMAP, + zoomControl: true, + zoomControlOptions: { + position: google.maps.ControlPosition.TOP_LEFT, + }, + mapTypeControl: false, + scaleControl: false, + panControl: false, + navigationControl: false, + streetViewControl: false, + gestureHandling: "cooperative", + styles: [ + { + featureType: "all", + elementType: "geometry.fill", + stylers: [ + { + weight: "2.00", + }, + ], + }, + { + featureType: "all", + elementType: "geometry.stroke", + stylers: [ + { + color: "#9c9c9c", + }, + ], + }, + { + featureType: "all", + elementType: "labels.text", + stylers: [ + { + visibility: "on", + }, + ], + }, + { + featureType: "landscape", + elementType: "all", + stylers: [ + { + color: "#f2f2f2", + }, + ], + }, + { + featureType: "landscape", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "landscape.man_made", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "poi", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "road", + elementType: "all", + stylers: [ + { + saturation: -100, + }, + { + lightness: 45, + }, + ], + }, + { + featureType: "road", + elementType: "geometry.fill", + stylers: [ + { + color: "#eeeeee", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.fill", + stylers: [ + { + color: "#7b7b7b", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "road.highway", + elementType: "all", + stylers: [ + { + visibility: "simplified", + }, + ], + }, + { + featureType: "road.arterial", + elementType: "labels.icon", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "transit", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "water", + elementType: "all", + stylers: [ + { + color: "#46bcec", + }, + { + visibility: "on", + }, + ], + }, + { + featureType: "water", + elementType: "geometry.fill", + stylers: [ + { + color: "#c8d7d4", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.fill", + stylers: [ + { + color: "#070707", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + ], + }); + + $(".listing-item-container").on("mouseover", function () { + var listingAttr = $(this).data("marker-id"); + if (listingAttr !== undefined) { + var listing_id = $(this).data("marker-id") - 1; + var marker_div = allMarkers[listing_id].div; + $(marker_div).addClass("clicked"); + $(this).on("mouseout", function () { + if ($(marker_div).is(":not(.infoBox-opened)")) { + $(marker_div).removeClass("clicked"); + } + }); + } + }); + + var boxText = document.createElement("div"); + boxText.className = "map-box"; + var currentInfobox; + var boxOptions = { + content: boxText, + disableAutoPan: false, + alignBottom: true, + maxWidth: 0, + pixelOffset: new google.maps.Size(-134, -55), + zIndex: null, + boxStyle: { width: "360px" }, + closeBoxMargin: "0", + closeBoxURL: "", + infoBoxClearance: new google.maps.Size(25, 25), + isHidden: false, + pane: "floatPane", + enableEventPropagation: false, + }; + var markerCluster, overlay, i; + var allMarkers = []; + var clusterStyles = [ + { textColor: "white", url: "", height: 50, width: 50 }, + ]; + var markerIco; + for (i = 0; i < locations.length; i++) { + markerIco = locations[i][4]; + var overlaypositions = new google.maps.LatLng( + locations[i][1], + locations[i][2] + ), + overlay = new CustomMarker( + overlaypositions, + map, + { marker_id: i }, + markerIco + ); + allMarkers.push(overlay); + google.maps.event.addDomListener( + overlay, + "click", + (function (overlay, i) { + return function () { + ib.setOptions(boxOptions); + boxText.innerHTML = locations[i][0]; + ib.close(); + ib.open(map, overlay); + currentInfobox = locations[i][3]; + google.maps.event.addListener(ib, "domready", function () { + $(".infoBox-close").click(function (e) { + e.preventDefault(); + ib.close(); + $(".map-marker-container").removeClass( + "clicked infoBox-opened" + ); + }); + }); + }; + })(overlay, i) + ); + } + var options = { + imagePath: "images/", + styles: clusterStyles, + minClusterSize: 2, + }; + markerCluster = new MarkerClusterer(map, allMarkers, options); + google.maps.event.addDomListener(window, "resize", function () { + var center = map.getCenter(); + google.maps.event.trigger(map, "resize"); + map.setCenter(center); + }); + var zoomControlDiv = document.createElement("div"); + var zoomControl = new ZoomControl(zoomControlDiv, map); + function ZoomControl(controlDiv, map) { + zoomControlDiv.index = 1; + map.controls[google.maps.ControlPosition.RIGHT_CENTER].push( + zoomControlDiv + ); + controlDiv.style.padding = "5px"; + controlDiv.className = "zoomControlWrapper"; + var controlWrapper = document.createElement("div"); + controlDiv.appendChild(controlWrapper); + var zoomInButton = document.createElement("div"); + zoomInButton.className = "custom-zoom-in"; + controlWrapper.appendChild(zoomInButton); + var zoomOutButton = document.createElement("div"); + zoomOutButton.className = "custom-zoom-out"; + controlWrapper.appendChild(zoomOutButton); + google.maps.event.addDomListener(zoomInButton, "click", function () { + map.setZoom(map.getZoom() + 1); + }); + google.maps.event.addDomListener(zoomOutButton, "click", function () { + map.setZoom(map.getZoom() - 1); + }); + } + var scrollEnabling = $("#scrollEnabling"); + $(scrollEnabling).click(function (e) { + e.preventDefault(); + $(this).toggleClass("enabled"); + if ($(this).is(".enabled")) { + map.setOptions({ scrollwheel: true }); + } else { + map.setOptions({ scrollwheel: false }); + } + }); + $("#geoLocation, .input-with-icon.location a").click(function (e) { + e.preventDefault(); + geolocate(); + }); + + function geolocate() { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (position) { + var pos = new google.maps.LatLng( + position.coords.latitude, + position.coords.longitude + ); + map.setCenter(pos); + map.setZoom(12); + }); + } + } + } + var map = document.getElementById("map-single"); + if (typeof map != "undefined" && map != null) { + google.maps.event.addDomListener(window, "load", mainMap); + } + + function CustomMarker(latlng, map, args, markerIco) { + this.latlng = latlng; + this.args = args; + this.markerIco = markerIco; + this.setMap(map); + } + CustomMarker.prototype = new google.maps.OverlayView(); + CustomMarker.prototype.draw = function () { + var self = this; + var div = this.div; + if (!div) { + div = this.div = document.createElement("div"); + div.className = "map-marker-container"; + div.innerHTML = + '
      ' + + '
      ' + + '
      ' + + self.markerIco + + "
      " + + '
      ' + + self.markerIco + + "
      " + + '
      ' + + "
      " + + "
      "; + google.maps.event.addDomListener(div, "click", function (event) { + $(".map-marker-container").removeClass("clicked infoBox-opened"); + google.maps.event.trigger(self, "click"); + $(this).addClass("clicked infoBox-opened"); + }); + if (typeof self.args.marker_id !== "undefined") { + div.dataset.marker_id = self.args.marker_id; + } + var panes = this.getPanes(); + panes.overlayImage.appendChild(div); + } + var point = this.getProjection().fromLatLngToDivPixel(this.latlng); + if (point) { + div.style.left = point.x + "px"; + div.style.top = point.y + "px"; + } + }; + CustomMarker.prototype.remove = function () { + if (this.div) { + this.div.parentNode.removeChild(this.div); + this.div = null; + $(this).removeClass("clicked"); + } + }; + CustomMarker.prototype.getPosition = function () { + return this.latlng; + }; + })(this.jQuery); \ No newline at end of file diff --git a/apiferia/src/assets/js/maps.js b/apiferia/src/assets/js/maps.js new file mode 100644 index 00000000..6dd0081f --- /dev/null +++ b/apiferia/src/assets/js/maps.js @@ -0,0 +1,920 @@ +/*var infoBox_ratingType='star-rating';*/ + +(function ($) { + "use strict"; + function mainMap() { + var ib = new InfoBox(); + function locationData( + locationImg, + locationURL, + locationcate, + locationTitle, + locationTopCity, + locationTopCity2, + locationTopCity3, + job_address + ) { + return ( + "" + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + '
      ' + + "
      " + + '
      ' + + + '

      ' + + locationcate + + "

      " + + + '
      ' + + locationTitle + + "
      " + + + '
      ' + + '

      ' + '' + + locationTopCity + + "

      " + + '

      ' + '' + + locationTopCity2 + + "

      " + + '

      ' + '' + + locationTopCity3 + + "

      " + + "
      " + + + '

      ' + + job_address + + "

      " + + + "
      " + + "
      " + ); + } + + var locations = [ + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.706755, + -74.006821, + 1, + '
      ', + ], + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.705445, + -74.00423, + 2, + '
      ', + ], + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.703859, + -74.009766, + 3, + '
      ', + ], + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.706828, + -74.014434, + 4, + '
      ', + ], + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.709024, + -74.012139, + 5, + '
      ', + ], + [ + locationData( + "assets/images/img-box/map-location.jpg", + "property-detail-v1.html", + "Sedan", + "2017 BMV X1 xDrive 20d xline", + "72,491 kms", + "Diesel", + "Automatic", + "$73,000", + ), + + 40.704015, + -73.992613, + 6, + '
      ', + ], + ]; + + function numericalRating(ratingElem) { + $(ratingElem).each(function () { + var dataRating = $(this).attr("data-rating"); + if (dataRating >= 4.0) { + $(this).addClass("high"); + } else if (dataRating >= 3.0) { + $(this).addClass("mid"); + } else if (dataRating < 3.0) { + $(this).addClass("low"); + } + }); + } + numericalRating(".numerical-rating"); + + function starRating(ratingElem) { + $(ratingElem).each(function () { + var dataRating = $(this).attr("data-rating"); + + function starsOutput( + firstStar, + secondStar, + thirdStar, + fourthStar, + fifthStar + ) { + return ( + "" + + '' + + '' + + '' + + '' + + '' + ); + } + var fiveStars = starsOutput("star", "star", "star", "star", "star"); + var fourHalfStars = starsOutput( + "star", + "star", + "star", + "star", + "star half" + ); + var fourStars = starsOutput( + "star", + "star", + "star", + "star", + "star empty" + ); + var threeHalfStars = starsOutput( + "star", + "star", + "star", + "star half", + "star empty" + ); + var threeStars = starsOutput( + "star", + "star", + "star", + "star empty", + "star empty" + ); + var twoHalfStars = starsOutput( + "star", + "star", + "star half", + "star empty", + "star empty" + ); + var twoStars = starsOutput( + "star", + "star", + "star empty", + "star empty", + "star empty" + ); + var oneHalfStar = starsOutput( + "star", + "star half", + "star empty", + "star empty", + "star empty" + ); + var oneStar = starsOutput( + "star", + "star empty", + "star empty", + "star empty", + "star empty" + ); + if (dataRating >= 4.75) { + $(this).append(fiveStars); + } else if (dataRating >= 4.25) { + $(this).append(fourHalfStars); + } else if (dataRating >= 3.75) { + $(this).append(fourStars); + } else if (dataRating >= 3.25) { + $(this).append(threeHalfStars); + } else if (dataRating >= 2.75) { + $(this).append(threeStars); + } else if (dataRating >= 2.25) { + $(this).append(twoHalfStars); + } else if (dataRating >= 1.75) { + $(this).append(twoStars); + } else if (dataRating >= 1.25) { + $(this).append(oneHalfStar); + } else if (dataRating < 1.25) { + $(this).append(oneStar); + } + }); + } + starRating(".star-rating"); + + var mapZoomAttr = $("#map").attr("data-map-zoom"); + var mapScrollAttr = $("#map").attr("data-map-scroll"); + if (typeof mapZoomAttr !== typeof undefined && mapZoomAttr !== false) { + var zoomLevel = parseInt(mapZoomAttr); + } else { + var zoomLevel = 5; + } + if (typeof mapScrollAttr !== typeof undefined && mapScrollAttr !== false) { + var scrollEnabled = parseInt(mapScrollAttr); + } else { + var scrollEnabled = false; + } + var map = new google.maps.Map(document.getElementById("map"), { + zoom: zoomLevel, + scrollwheel: false, + center: new google.maps.LatLng(40.706243, -74.000303), + mapTypeId: google.maps.MapTypeId.ROADMAP, + zoomControl: true, + zoomControlOptions: { + position: google.maps.ControlPosition.TOP_LEFT, + }, + mapTypeControl: false, + scaleControl: false, + panControl: false, + navigationControl: false, + streetViewControl: false, + gestureHandling: "cooperative", + styles: [ + { + featureType: "all", + elementType: "geometry.fill", + stylers: [ + { + weight: "2.00", + }, + ], + }, + { + featureType: "all", + elementType: "geometry.stroke", + stylers: [ + { + color: "#9c9c9c", + }, + ], + }, + { + featureType: "all", + elementType: "labels.text", + stylers: [ + { + visibility: "on", + }, + ], + }, + { + featureType: "landscape", + elementType: "all", + stylers: [ + { + color: "#f2f2f2", + }, + ], + }, + { + featureType: "landscape", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "landscape.man_made", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "poi", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "road", + elementType: "all", + stylers: [ + { + saturation: -100, + }, + { + lightness: 45, + }, + ], + }, + { + featureType: "road", + elementType: "geometry.fill", + stylers: [ + { + color: "#eeeeee", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.fill", + stylers: [ + { + color: "#7b7b7b", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "road.highway", + elementType: "all", + stylers: [ + { + visibility: "simplified", + }, + ], + }, + { + featureType: "road.arterial", + elementType: "labels.icon", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "transit", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "water", + elementType: "all", + stylers: [ + { + color: "#46bcec", + }, + { + visibility: "on", + }, + ], + }, + { + featureType: "water", + elementType: "geometry.fill", + stylers: [ + { + color: "#c8d7d4", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.fill", + stylers: [ + { + color: "#070707", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + ], + }); + + + $(".listing-item-container").on("mouseover", function () { + var listingAttr = $(this).data("marker-id"); + if (listingAttr !== undefined) { + var listing_id = $(this).data("marker-id") - 1; + var marker_div = allMarkers[listing_id].div; + $(marker_div).addClass("clicked"); + $(this).on("mouseout", function () { + if ($(marker_div).is(":not(.infoBox-opened)")) { + $(marker_div).removeClass("clicked"); + } + }); + } + }); + + var boxText = document.createElement("div"); + boxText.className = "map-box"; + var currentInfobox; + var boxOptions = { + content: boxText, + disableAutoPan: false, + alignBottom: true, + maxWidth: 0, + pixelOffset: new google.maps.Size(-134, -55), + zIndex: null, + boxStyle: { width: "360px" }, + closeBoxMargin: "0", + closeBoxURL: "", + infoBoxClearance: new google.maps.Size(25, 25), + isHidden: false, + pane: "floatPane", + enableEventPropagation: false, + }; + var markerCluster, overlay, i; + var allMarkers = []; + var clusterStyles = [ + { textColor: "white", url: "", height: 50, width: 50 }, + ]; + var markerIco; + for (i = 0; i < locations.length; i++) { + markerIco = locations[i][4]; + var overlaypositions = new google.maps.LatLng( + locations[i][1], + locations[i][2] + ), + overlay = new CustomMarker( + overlaypositions, + map, + { marker_id: i }, + markerIco + ); + allMarkers.push(overlay); + google.maps.event.addDomListener( + overlay, + "click", + (function (overlay, i) { + return function () { + ib.setOptions(boxOptions); + boxText.innerHTML = locations[i][0]; + ib.close(); + ib.open(map, overlay); + currentInfobox = locations[i][3]; + google.maps.event.addListener(ib, "domready", function () { + $(".infoBox-close").click(function (e) { + e.preventDefault(); + ib.close(); + $(".map-marker-container").removeClass( + "clicked infoBox-opened" + ); + }); + }); + }; + })(overlay, i) + ); + } + var options = { + imagePath: "images/", + styles: clusterStyles, + minClusterSize: 2, + }; + markerCluster = new MarkerClusterer(map, allMarkers, options); + google.maps.event.addDomListener(window, "resize", function () { + var center = map.getCenter(); + google.maps.event.trigger(map, "resize"); + map.setCenter(center); + }); + var zoomControlDiv = document.createElement("div"); + var zoomControl = new ZoomControl(zoomControlDiv, map); + function ZoomControl(controlDiv, map) { + zoomControlDiv.index = 1; + map.controls[google.maps.ControlPosition.RIGHT_CENTER].push( + zoomControlDiv + ); + controlDiv.style.padding = "5px"; + controlDiv.className = "zoomControlWrapper"; + var controlWrapper = document.createElement("div"); + controlDiv.appendChild(controlWrapper); + var zoomInButton = document.createElement("div"); + zoomInButton.className = "custom-zoom-in"; + controlWrapper.appendChild(zoomInButton); + var zoomOutButton = document.createElement("div"); + zoomOutButton.className = "custom-zoom-out"; + controlWrapper.appendChild(zoomOutButton); + google.maps.event.addDomListener(zoomInButton, "click", function () { + map.setZoom(map.getZoom() + 1); + }); + google.maps.event.addDomListener(zoomOutButton, "click", function () { + map.setZoom(map.getZoom() - 1); + }); + } + var scrollEnabling = $("#scrollEnabling"); + $(scrollEnabling).click(function (e) { + e.preventDefault(); + $(this).toggleClass("enabled"); + if ($(this).is(".enabled")) { + map.setOptions({ scrollwheel: true }); + } else { + map.setOptions({ scrollwheel: false }); + } + }); + $("#geoLocation, .input-with-icon.location a").click(function (e) { + e.preventDefault(); + geolocate(); + }); + + function geolocate() { + if (navigator.geolocation) { + navigator.geolocation.getCurrentPosition(function (position) { + var pos = new google.maps.LatLng( + position.coords.latitude, + position.coords.longitude + ); + map.setCenter(pos); + map.setZoom(12); + }); + } + } + } + var map = document.getElementById("map"); + if (typeof map != "undefined" && map != null) { + google.maps.event.addDomListener(window, "load", mainMap); + } + + function singleListingMap() { + var myLatlng = new google.maps.LatLng({ + lng: $("#singleListingMap").data("longitude"), + lat: $("#singleListingMap").data("latitude"), + }); + var single_map = new google.maps.Map( + document.getElementById("singleListingMap"), + { + zoom: 16, + center: myLatlng, + scrollwheel: false, + zoomControl: false, + mapTypeControl: false, + scaleControl: false, + panControl: false, + navigationControl: false, + streetViewControl: false, + styles: [ + { + featureType: "all", + elementType: "geometry.fill", + stylers: [ + { + weight: "2.00", + }, + ], + }, + { + featureType: "all", + elementType: "geometry.stroke", + stylers: [ + { + color: "#9c9c9c", + }, + ], + }, + { + featureType: "all", + elementType: "labels.text", + stylers: [ + { + visibility: "on", + }, + ], + }, + { + featureType: "landscape", + elementType: "all", + stylers: [ + { + color: "#f2f2f2", + }, + ], + }, + { + featureType: "landscape", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "landscape.man_made", + elementType: "geometry.fill", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "poi", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "road", + elementType: "all", + stylers: [ + { + saturation: -100, + }, + { + lightness: 45, + }, + ], + }, + { + featureType: "road", + elementType: "geometry.fill", + stylers: [ + { + color: "#eeeeee", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.fill", + stylers: [ + { + color: "#7b7b7b", + }, + ], + }, + { + featureType: "road", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + { + featureType: "road.highway", + elementType: "all", + stylers: [ + { + visibility: "simplified", + }, + ], + }, + { + featureType: "road.arterial", + elementType: "labels.icon", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "transit", + elementType: "all", + stylers: [ + { + visibility: "off", + }, + ], + }, + { + featureType: "water", + elementType: "all", + stylers: [ + { + color: "#46bcec", + }, + { + visibility: "on", + }, + ], + }, + { + featureType: "water", + elementType: "geometry.fill", + stylers: [ + { + color: "#c8d7d4", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.fill", + stylers: [ + { + color: "#070707", + }, + ], + }, + { + featureType: "water", + elementType: "labels.text.stroke", + stylers: [ + { + color: "#ffffff", + }, + ], + }, + ], + } + ); + $("#streetView").click(function (e) { + e.preventDefault(); + single_map.getStreetView().setOptions({ + visible: true, + position: myLatlng, + }); + }); + var zoomControlDiv = document.createElement("div"); + var zoomControl = new ZoomControl(zoomControlDiv, single_map); + function ZoomControl(controlDiv, single_map) { + zoomControlDiv.index = 1; + single_map.controls[google.maps.ControlPosition.RIGHT_CENTER].push( + zoomControlDiv + ); + controlDiv.style.padding = "5px"; + var controlWrapper = document.createElement("div"); + controlDiv.appendChild(controlWrapper); + var zoomInButton = document.createElement("div"); + zoomInButton.className = "custom-zoom-in"; + controlWrapper.appendChild(zoomInButton); + var zoomOutButton = document.createElement("div"); + zoomOutButton.className = "custom-zoom-out"; + controlWrapper.appendChild(zoomOutButton); + google.maps.event.addDomListener(zoomInButton, "click", function () { + single_map.setZoom(single_map.getZoom() + 1); + }); + google.maps.event.addDomListener(zoomOutButton, "click", function () { + single_map.setZoom(single_map.getZoom() - 1); + }); + } + var singleMapIco = + ""; + new CustomMarker( + myLatlng, + single_map, + { + marker_id: "1", + }, + singleMapIco + ); + } + + var single_map = document.getElementById("singleListingMap"); + if (typeof single_map != "undefined" && single_map != null) { + google.maps.event.addDomListener(window, "load", singleListingMap); + } + + function CustomMarker(latlng, map, args, markerIco) { + this.latlng = latlng; + this.args = args; + this.markerIco = markerIco; + this.setMap(map); + } + CustomMarker.prototype = new google.maps.OverlayView(); + CustomMarker.prototype.draw = function () { + var self = this; + var div = this.div; + if (!div) { + div = this.div = document.createElement("div"); + div.className = "map-marker-container"; + div.innerHTML = + '
      ' + + '
      ' + + '
      ' + + self.markerIco + + "
      " + + '
      ' + + self.markerIco + + "
      " + + '
      ' + + "
      " + + "
      "; + google.maps.event.addDomListener(div, "click", function (event) { + $(".map-marker-container").removeClass("clicked infoBox-opened"); + google.maps.event.trigger(self, "click"); + $(this).addClass("clicked infoBox-opened"); + }); + if (typeof self.args.marker_id !== "undefined") { + div.dataset.marker_id = self.args.marker_id; + } + var panes = this.getPanes(); + panes.overlayImage.appendChild(div); + } + var point = this.getProjection().fromLatLngToDivPixel(this.latlng); + if (point) { + div.style.left = point.x + "px"; + div.style.top = point.y + "px"; + } + }; + CustomMarker.prototype.remove = function () { + if (this.div) { + this.div.parentNode.removeChild(this.div); + this.div = null; + $(this).removeClass("clicked"); + } + }; + CustomMarker.prototype.getPosition = function () { + return this.latlng; + }; + })(this.jQuery); + \ No newline at end of file diff --git a/apiferia/src/assets/js/marker.js b/apiferia/src/assets/js/marker.js new file mode 100644 index 00000000..38f246ce --- /dev/null +++ b/apiferia/src/assets/js/marker.js @@ -0,0 +1,670 @@ +function MarkerClusterer(map, opt_markers, opt_options) { + this.extend(MarkerClusterer, google.maps.OverlayView); + this.map_ = map; + this.markers_ = []; + this.clusters_ = []; + this.sizes = [53, 56, 66, 78, 90]; + this.styles_ = []; + this.ready_ = false; + var options = opt_options || {}; + this.gridSize_ = options["gridSize"] || 60; + this.minClusterSize_ = options["minimumClusterSize"] || 2; + this.maxZoom_ = options["maxZoom"] || null; + this.styles_ = options["styles"] || []; + this.imagePath_ = options["imagePath"] || this.MARKER_CLUSTER_IMAGE_PATH_; + this.imageExtension_ = + options["imageExtension"] || this.MARKER_CLUSTER_IMAGE_EXTENSION_; + this.zoomOnClick_ = true; + if (options["zoomOnClick"] != undefined) { + this.zoomOnClick_ = options["zoomOnClick"]; + } + this.averageCenter_ = false; + if (options["averageCenter"] != undefined) { + this.averageCenter_ = options["averageCenter"]; + } + this.setupStyles_(); + this.setMap(map); + this.prevZoom_ = this.map_.getZoom(); + var that = this; + google.maps.event.addListener(this.map_, "zoom_changed", function () { + var zoom = that.map_.getZoom(); + if (that.prevZoom_ != zoom) { + that.prevZoom_ = zoom; + that.resetViewport(); + } + }); + google.maps.event.addListener(this.map_, "idle", function () { + that.redraw(); + }); + if (opt_markers && opt_markers.length) { + this.addMarkers(opt_markers, false); + } + } + MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_PATH_ = "../images/m"; + MarkerClusterer.prototype.MARKER_CLUSTER_IMAGE_EXTENSION_ = "png"; + MarkerClusterer.prototype.extend = function (obj1, obj2) { + return function (object) { + for (var property in object.prototype) { + this.prototype[property] = object.prototype[property]; + } + return this; + }.apply(obj1, [obj2]); + }; + MarkerClusterer.prototype.onAdd = function () { + this.setReady_(true); + }; + MarkerClusterer.prototype.draw = function () {}; + MarkerClusterer.prototype.setupStyles_ = function () { + if (this.styles_.length) { + return; + } + for (var i = 0, size; (size = this.sizes[i]); i++) { + this.styles_.push({ + url: this.imagePath_ + (i + 1) + "." + this.imageExtension_, + height: size, + width: size, + }); + } + }; + MarkerClusterer.prototype.fitMapToMarkers = function () { + var markers = this.getMarkers(); + var bounds = new google.maps.LatLngBounds(); + for (var i = 0, marker; (marker = markers[i]); i++) { + bounds.extend(marker.getPosition()); + } + this.map_.fitBounds(bounds); + }; + MarkerClusterer.prototype.setStyles = function (styles) { + this.styles_ = styles; + }; + MarkerClusterer.prototype.getStyles = function () { + return this.styles_; + }; + MarkerClusterer.prototype.isZoomOnClick = function () { + return this.zoomOnClick_; + }; + MarkerClusterer.prototype.isAverageCenter = function () { + return this.averageCenter_; + }; + MarkerClusterer.prototype.getMarkers = function () { + return this.markers_; + }; + MarkerClusterer.prototype.getTotalMarkers = function () { + return this.markers_.length; + }; + MarkerClusterer.prototype.setMaxZoom = function (maxZoom) { + this.maxZoom_ = maxZoom; + }; + MarkerClusterer.prototype.getMaxZoom = function () { + return this.maxZoom_; + }; + MarkerClusterer.prototype.calculator_ = function (markers, numStyles) { + var index = 0; + var count = markers.length; + var dv = count; + while (dv !== 0) { + dv = parseInt(dv / 10, 10); + index++; + } + index = Math.min(index, numStyles); + return { text: count, index: index }; + }; + MarkerClusterer.prototype.setCalculator = function (calculator) { + this.calculator_ = calculator; + }; + MarkerClusterer.prototype.getCalculator = function () { + return this.calculator_; + }; + MarkerClusterer.prototype.addMarkers = function (markers, opt_nodraw) { + for (var i = 0, marker; (marker = markers[i]); i++) { + this.pushMarkerTo_(marker); + } + if (!opt_nodraw) { + this.redraw(); + } + }; + MarkerClusterer.prototype.pushMarkerTo_ = function (marker) { + marker.isAdded = false; + if (marker["draggable"]) { + var that = this; + google.maps.event.addListener(marker, "dragend", function () { + marker.isAdded = false; + that.repaint(); + }); + } + this.markers_.push(marker); + }; + MarkerClusterer.prototype.addMarker = function (marker, opt_nodraw) { + this.pushMarkerTo_(marker); + if (!opt_nodraw) { + this.redraw(); + } + }; + MarkerClusterer.prototype.removeMarker_ = function (marker) { + var index = -1; + if (this.markers_.indexOf) { + index = this.markers_.indexOf(marker); + } else { + for (var i = 0, m; (m = this.markers_[i]); i++) { + if (m == marker) { + index = i; + break; + } + } + } + if (index == -1) { + return false; + } + marker.setMap(null); + this.markers_.splice(index, 1); + return true; + }; + MarkerClusterer.prototype.removeMarker = function (marker, opt_nodraw) { + var removed = this.removeMarker_(marker); + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } else { + return false; + } + }; + MarkerClusterer.prototype.removeMarkers = function (markers, opt_nodraw) { + var removed = false; + for (var i = 0, marker; (marker = markers[i]); i++) { + var r = this.removeMarker_(marker); + removed = removed || r; + } + if (!opt_nodraw && removed) { + this.resetViewport(); + this.redraw(); + return true; + } + }; + MarkerClusterer.prototype.setReady_ = function (ready) { + if (!this.ready_) { + this.ready_ = ready; + this.createClusters_(); + } + }; + MarkerClusterer.prototype.getTotalClusters = function () { + return this.clusters_.length; + }; + MarkerClusterer.prototype.getMap = function () { + return this.map_; + }; + MarkerClusterer.prototype.setMap = function (map) { + this.map_ = map; + }; + MarkerClusterer.prototype.getGridSize = function () { + return this.gridSize_; + }; + MarkerClusterer.prototype.setGridSize = function (size) { + this.gridSize_ = size; + }; + MarkerClusterer.prototype.getMinClusterSize = function () { + return this.minClusterSize_; + }; + MarkerClusterer.prototype.setMinClusterSize = function (size) { + this.minClusterSize_ = size; + }; + MarkerClusterer.prototype.getExtendedBounds = function (bounds) { + var projection = this.getProjection(); + var tr = new google.maps.LatLng( + bounds.getNorthEast().lat(), + bounds.getNorthEast().lng() + ); + var bl = new google.maps.LatLng( + bounds.getSouthWest().lat(), + bounds.getSouthWest().lng() + ); + var trPix = projection.fromLatLngToDivPixel(tr); + trPix.x += this.gridSize_; + trPix.y -= this.gridSize_; + var blPix = projection.fromLatLngToDivPixel(bl); + blPix.x -= this.gridSize_; + blPix.y += this.gridSize_; + var ne = projection.fromDivPixelToLatLng(trPix); + var sw = projection.fromDivPixelToLatLng(blPix); + bounds.extend(ne); + bounds.extend(sw); + return bounds; + }; + MarkerClusterer.prototype.isMarkerInBounds_ = function (marker, bounds) { + return bounds.contains(marker.getPosition()); + }; + MarkerClusterer.prototype.clearMarkers = function () { + this.resetViewport(true); + this.markers_ = []; + }; + MarkerClusterer.prototype.resetViewport = function (opt_hide) { + for (var i = 0, cluster; (cluster = this.clusters_[i]); i++) { + cluster.remove(); + } + for (var i = 0, marker; (marker = this.markers_[i]); i++) { + marker.isAdded = false; + if (opt_hide) { + marker.setMap(null); + } + } + this.clusters_ = []; + }; + MarkerClusterer.prototype.repaint = function () { + var oldClusters = this.clusters_.slice(); + this.clusters_.length = 0; + this.resetViewport(); + this.redraw(); + window.setTimeout(function () { + for (var i = 0, cluster; (cluster = oldClusters[i]); i++) { + cluster.remove(); + } + }, 0); + }; + MarkerClusterer.prototype.redraw = function () { + this.createClusters_(); + }; + MarkerClusterer.prototype.distanceBetweenPoints_ = function (p1, p2) { + if (!p1 || !p2) { + return 0; + } + var R = 6371; + var dLat = ((p2.lat() - p1.lat()) * Math.PI) / 180; + var dLon = ((p2.lng() - p1.lng()) * Math.PI) / 180; + var a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos((p1.lat() * Math.PI) / 180) * + Math.cos((p2.lat() * Math.PI) / 180) * + Math.sin(dLon / 2) * + Math.sin(dLon / 2); + var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + var d = R * c; + return d; + }; + MarkerClusterer.prototype.addToClosestCluster_ = function (marker) { + var distance = 40000; + var clusterToAddTo = null; + var pos = marker.getPosition(); + for (var i = 0, cluster; (cluster = this.clusters_[i]); i++) { + var center = cluster.getCenter(); + if (center) { + var d = this.distanceBetweenPoints_(center, marker.getPosition()); + if (d < distance) { + distance = d; + clusterToAddTo = cluster; + } + } + } + if (clusterToAddTo && clusterToAddTo.isMarkerInClusterBounds(marker)) { + clusterToAddTo.addMarker(marker); + } else { + var cluster = new Cluster(this); + cluster.addMarker(marker); + this.clusters_.push(cluster); + } + }; + MarkerClusterer.prototype.createClusters_ = function () { + if (!this.ready_) { + return; + } + var mapBounds = new google.maps.LatLngBounds( + this.map_.getBounds().getSouthWest(), + this.map_.getBounds().getNorthEast() + ); + var bounds = this.getExtendedBounds(mapBounds); + for (var i = 0, marker; (marker = this.markers_[i]); i++) { + if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) { + this.addToClosestCluster_(marker); + } + } + }; + function Cluster(markerClusterer) { + this.markerClusterer_ = markerClusterer; + this.map_ = markerClusterer.getMap(); + this.gridSize_ = markerClusterer.getGridSize(); + this.minClusterSize_ = markerClusterer.getMinClusterSize(); + this.averageCenter_ = markerClusterer.isAverageCenter(); + this.center_ = null; + this.markers_ = []; + this.bounds_ = null; + this.clusterIcon_ = new ClusterIcon( + this, + markerClusterer.getStyles(), + markerClusterer.getGridSize() + ); + } + Cluster.prototype.isMarkerAlreadyAdded = function (marker) { + if (this.markers_.indexOf) { + return this.markers_.indexOf(marker) != -1; + } else { + for (var i = 0, m; (m = this.markers_[i]); i++) { + if (m == marker) { + return true; + } + } + } + return false; + }; + Cluster.prototype.addMarker = function (marker) { + if (this.isMarkerAlreadyAdded(marker)) { + return false; + } + if (!this.center_) { + this.center_ = marker.getPosition(); + this.calculateBounds_(); + } else { + if (this.averageCenter_) { + var l = this.markers_.length + 1; + var lat = (this.center_.lat() * (l - 1) + marker.getPosition().lat()) / l; + var lng = (this.center_.lng() * (l - 1) + marker.getPosition().lng()) / l; + this.center_ = new google.maps.LatLng(lat, lng); + this.calculateBounds_(); + } + } + marker.isAdded = true; + this.markers_.push(marker); + var len = this.markers_.length; + if (len < this.minClusterSize_ && marker.getMap() != this.map_) { + marker.setMap(this.map_); + } + if (len == this.minClusterSize_) { + for (var i = 0; i < len; i++) { + this.markers_[i].setMap(null); + } + } + if (len >= this.minClusterSize_) { + marker.setMap(null); + } + this.updateIcon(); + return true; + }; + Cluster.prototype.getMarkerClusterer = function () { + return this.markerClusterer_; + }; + Cluster.prototype.getBounds = function () { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + var markers = this.getMarkers(); + for (var i = 0, marker; (marker = markers[i]); i++) { + bounds.extend(marker.getPosition()); + } + return bounds; + }; + Cluster.prototype.remove = function () { + this.clusterIcon_.remove(); + this.markers_.length = 0; + delete this.markers_; + }; + Cluster.prototype.getSize = function () { + return this.markers_.length; + }; + Cluster.prototype.getMarkers = function () { + return this.markers_; + }; + Cluster.prototype.getCenter = function () { + return this.center_; + }; + Cluster.prototype.calculateBounds_ = function () { + var bounds = new google.maps.LatLngBounds(this.center_, this.center_); + this.bounds_ = this.markerClusterer_.getExtendedBounds(bounds); + }; + Cluster.prototype.isMarkerInClusterBounds = function (marker) { + return this.bounds_.contains(marker.getPosition()); + }; + Cluster.prototype.getMap = function () { + return this.map_; + }; + Cluster.prototype.updateIcon = function () { + var zoom = this.map_.getZoom(); + var mz = this.markerClusterer_.getMaxZoom(); + if (mz && zoom > mz) { + for (var i = 0, marker; (marker = this.markers_[i]); i++) { + marker.setMap(this.map_); + } + return; + } + if (this.markers_.length < this.minClusterSize_) { + this.clusterIcon_.hide(); + return; + } + var numStyles = this.markerClusterer_.getStyles().length; + var sums = this.markerClusterer_.getCalculator()(this.markers_, numStyles); + this.clusterIcon_.setCenter(this.center_); + this.clusterIcon_.setSums(sums); + this.clusterIcon_.show(); + }; + function ClusterIcon(cluster, styles, opt_padding) { + cluster.getMarkerClusterer().extend(ClusterIcon, google.maps.OverlayView); + this.styles_ = styles; + this.padding_ = opt_padding || 0; + this.cluster_ = cluster; + this.center_ = null; + this.map_ = cluster.getMap(); + this.div_ = null; + this.sums_ = null; + this.visible_ = false; + this.setMap(this.map_); + } + ClusterIcon.prototype.triggerClusterClick = function (event) { + var markerClusterer = this.cluster_.getMarkerClusterer(); + google.maps.event.trigger( + markerClusterer, + "clusterclick", + this.cluster_, + event + ); + if (markerClusterer.isZoomOnClick()) { + this.map_.fitBounds(this.cluster_.getBounds()); + } + }; + ClusterIcon.prototype.onAdd = function () { + this.div_ = document.createElement("DIV"); + this.div_.className = "cluster"; + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.innerHTML = this.sums_.text; + this.div_.className = "cluster-map-visible"; + } + var panes = this.getPanes(); + panes.overlayMouseTarget.appendChild(this.div_); + var that = this; + var isDragging = false; + google.maps.event.addDomListener(this.div_, "click", function (event) { + if (!isDragging) { + that.triggerClusterClick(event); + } + }); + google.maps.event.addDomListener(this.div_, "mousedown", function () { + isDragging = false; + }); + google.maps.event.addDomListener(this.div_, "mousemove", function () { + isDragging = true; + }); + }; + ClusterIcon.prototype.getPosFromLatLng_ = function (latlng) { + var pos = this.getProjection().fromLatLngToDivPixel(latlng); + if (typeof this.iconAnchor_ === "object" && this.iconAnchor_.length === 2) { + pos.x -= this.iconAnchor_[0]; + pos.y -= this.iconAnchor_[1]; + } else { + pos.x -= parseInt(this.width_ / 2, 10); + pos.y -= parseInt(this.height_ / 2, 10); + } + return pos; + }; + ClusterIcon.prototype.draw = function () { + if (this.visible_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.top = pos.y + "px"; + this.div_.style.left = pos.x + "px"; + } + }; + ClusterIcon.prototype.hide = function () { + if (this.div_) { + this.div_.style.display = "none"; + } + this.visible_ = false; + }; + ClusterIcon.prototype.show = function () { + if (this.div_) { + var pos = this.getPosFromLatLng_(this.center_); + this.div_.style.cssText = this.createCss(pos); + this.div_.style.display = ""; + } + this.visible_ = true; + }; + ClusterIcon.prototype.remove = function () { + this.setMap(null); + }; + ClusterIcon.prototype.onRemove = function () { + if (this.div_ && this.div_.parentNode) { + this.hide(); + this.div_.parentNode.removeChild(this.div_); + this.div_ = null; + } + }; + ClusterIcon.prototype.setSums = function (sums) { + this.sums_ = sums; + this.text_ = sums.text; + this.index_ = sums.index; + if (this.div_) { + this.div_.innerHTML = sums.text; + } + this.useStyle(); + }; + ClusterIcon.prototype.useStyle = function () { + var index = Math.max(0, this.sums_.index - 1); + index = Math.min(this.styles_.length - 1, index); + var style = this.styles_[index]; + this.url_ = style["url"]; + this.height_ = style["height"]; + this.width_ = style["width"]; + this.textColor_ = style["textColor"]; + this.anchor_ = style["anchor"]; + this.textSize_ = style["textSize"]; + this.backgroundPosition_ = style["backgroundPosition"]; + this.iconAnchor_ = style["iconAnchor"]; + }; + ClusterIcon.prototype.setCenter = function (center) { + this.center_ = center; + }; + ClusterIcon.prototype.createCss = function (pos) { + var style = []; + style.push("background-image:url(" + this.url_ + ");"); + var backgroundPosition = this.backgroundPosition_ + ? this.backgroundPosition_ + : "0 0"; + style.push("background-position:" + backgroundPosition + ";"); + if (typeof this.anchor_ === "object") { + if ( + typeof this.anchor_[0] === "number" && + this.anchor_[0] > 0 && + this.anchor_[0] < this.height_ + ) { + style.push( + "height:" + + (this.height_ - this.anchor_[0]) + + "px; padding-top:" + + this.anchor_[0] + + "px;" + ); + } else if ( + typeof this.anchor_[0] === "number" && + this.anchor_[0] < 0 && + -this.anchor_[0] < this.height_ + ) { + style.push( + "height:" + + this.height_ + + "px; line-height:" + + (this.height_ + this.anchor_[0]) + + "px;" + ); + } else { + style.push( + "height:" + this.height_ + "px; line-height:" + this.height_ + "px;" + ); + } + if ( + typeof this.anchor_[1] === "number" && + this.anchor_[1] > 0 && + this.anchor_[1] < this.width_ + ) { + style.push( + "width:" + + (this.width_ - this.anchor_[1]) + + "px; padding-left:" + + this.anchor_[1] + + "px;" + ); + } else { + style.push("width:" + this.width_ + "px; text-align:center;"); + } + } else { + style.push( + "height:" + + this.height_ + + "px; line-height:" + + this.height_ + + "px; width:" + + this.width_ + + "px; text-align:center;" + ); + } + var txtColor = this.textColor_ ? this.textColor_ : "black"; + var txtSize = this.textSize_ ? this.textSize_ : 11; + style.push( + "cursor:pointer; top:" + + pos.y + + "px; left:" + + pos.x + + "px; color:" + + txtColor + + "; position:absolute; font-size:" + + txtSize + + "px; font-family:Arial,sans-serif; font-weight:bold" + ); + return style.join(""); + }; + window["MarkerClusterer"] = MarkerClusterer; + MarkerClusterer.prototype["addMarker"] = MarkerClusterer.prototype.addMarker; + MarkerClusterer.prototype["addMarkers"] = MarkerClusterer.prototype.addMarkers; + MarkerClusterer.prototype["clearMarkers"] = + MarkerClusterer.prototype.clearMarkers; + MarkerClusterer.prototype["fitMapToMarkers"] = + MarkerClusterer.prototype.fitMapToMarkers; + MarkerClusterer.prototype["getCalculator"] = + MarkerClusterer.prototype.getCalculator; + MarkerClusterer.prototype["getGridSize"] = + MarkerClusterer.prototype.getGridSize; + MarkerClusterer.prototype["getExtendedBounds"] = + MarkerClusterer.prototype.getExtendedBounds; + MarkerClusterer.prototype["getMap"] = MarkerClusterer.prototype.getMap; + MarkerClusterer.prototype["getMarkers"] = MarkerClusterer.prototype.getMarkers; + MarkerClusterer.prototype["getMaxZoom"] = MarkerClusterer.prototype.getMaxZoom; + MarkerClusterer.prototype["getStyles"] = MarkerClusterer.prototype.getStyles; + MarkerClusterer.prototype["getTotalClusters"] = + MarkerClusterer.prototype.getTotalClusters; + MarkerClusterer.prototype["getTotalMarkers"] = + MarkerClusterer.prototype.getTotalMarkers; + MarkerClusterer.prototype["redraw"] = MarkerClusterer.prototype.redraw; + MarkerClusterer.prototype["removeMarker"] = + MarkerClusterer.prototype.removeMarker; + MarkerClusterer.prototype["removeMarkers"] = + MarkerClusterer.prototype.removeMarkers; + MarkerClusterer.prototype["resetViewport"] = + MarkerClusterer.prototype.resetViewport; + MarkerClusterer.prototype["repaint"] = MarkerClusterer.prototype.repaint; + MarkerClusterer.prototype["setCalculator"] = + MarkerClusterer.prototype.setCalculator; + MarkerClusterer.prototype["setGridSize"] = + MarkerClusterer.prototype.setGridSize; + MarkerClusterer.prototype["setMaxZoom"] = MarkerClusterer.prototype.setMaxZoom; + MarkerClusterer.prototype["onAdd"] = MarkerClusterer.prototype.onAdd; + MarkerClusterer.prototype["draw"] = MarkerClusterer.prototype.draw; + Cluster.prototype["getCenter"] = Cluster.prototype.getCenter; + Cluster.prototype["getSize"] = Cluster.prototype.getSize; + Cluster.prototype["getMarkers"] = Cluster.prototype.getMarkers; + ClusterIcon.prototype["onAdd"] = ClusterIcon.prototype.onAdd; + ClusterIcon.prototype["draw"] = ClusterIcon.prototype.draw; + ClusterIcon.prototype["onRemove"] = ClusterIcon.prototype.onRemove; + \ No newline at end of file diff --git a/apiferia/src/assets/js/plugin.js b/apiferia/src/assets/js/plugin.js new file mode 100644 index 00000000..66919399 --- /dev/null +++ b/apiferia/src/assets/js/plugin.js @@ -0,0 +1,189 @@ +/*! jQuery Easing v1.3 + * http://gsgd.co.uk/sandbox/jquery/easing/ + */ +jQuery.easing.jswing=jQuery.easing.swing,jQuery.extend(jQuery.easing,{def:"easeOutQuad",swing:function(n,e,t,u,a){return jQuery.easing[jQuery.easing.def](n,e,t,u,a)},easeInQuad:function(n,e,t,u,a){return u*(e/=a)*e+t},easeOutQuad:function(n,e,t,u,a){return-u*(e/=a)*(e-2)+t},easeInOutQuad:function(n,e,t,u,a){return(e/=a/2)<1?u/2*e*e+t:-u/2*(--e*(e-2)-1)+t},easeInCubic:function(n,e,t,u,a){return u*(e/=a)*e*e+t},easeOutCubic:function(n,e,t,u,a){return u*((e=e/a-1)*e*e+1)+t},easeInOutCubic:function(n,e,t,u,a){return(e/=a/2)<1?u/2*e*e*e+t:u/2*((e-=2)*e*e+2)+t},easeInQuart:function(n,e,t,u,a){return u*(e/=a)*e*e*e+t},easeOutQuart:function(n,e,t,u,a){return-u*((e=e/a-1)*e*e*e-1)+t},easeInOutQuart:function(n,e,t,u,a){return(e/=a/2)<1?u/2*e*e*e*e+t:-u/2*((e-=2)*e*e*e-2)+t},easeInQuint:function(n,e,t,u,a){return u*(e/=a)*e*e*e*e+t},easeOutQuint:function(n,e,t,u,a){return u*((e=e/a-1)*e*e*e*e+1)+t},easeInOutQuint:function(n,e,t,u,a){return(e/=a/2)<1?u/2*e*e*e*e*e+t:u/2*((e-=2)*e*e*e*e+2)+t},easeInSine:function(n,e,t,u,a){return-u*Math.cos(e/a*(Math.PI/2))+u+t},easeOutSine:function(n,e,t,u,a){return u*Math.sin(e/a*(Math.PI/2))+t},easeInOutSine:function(n,e,t,u,a){return-u/2*(Math.cos(Math.PI*e/a)-1)+t},easeInExpo:function(n,e,t,u,a){return 0==e?t:u*Math.pow(2,10*(e/a-1))+t},easeOutExpo:function(n,e,t,u,a){return e==a?t+u:u*(-Math.pow(2,-10*e/a)+1)+t},easeInOutExpo:function(n,e,t,u,a){return 0==e?t:e==a?t+u:(e/=a/2)<1?u/2*Math.pow(2,10*(e-1))+t:u/2*(-Math.pow(2,-10*--e)+2)+t},easeInCirc:function(n,e,t,u,a){return-u*(Math.sqrt(1-(e/=a)*e)-1)+t},easeOutCirc:function(n,e,t,u,a){return u*Math.sqrt(1-(e=e/a-1)*e)+t},easeInOutCirc:function(n,e,t,u,a){return(e/=a/2)<1?-u/2*(Math.sqrt(1-e*e)-1)+t:u/2*(Math.sqrt(1-(e-=2)*e)+1)+t},easeInElastic:function(n,e,t,u,a){var r=1.70158,i=0,s=u;if(0==e)return t;if(1==(e/=a))return t+u;if(i||(i=.3*a),se?-.5*(s*Math.pow(2,10*(e-=1))*Math.sin((e*a-r)*(2*Math.PI)/i))+t:s*Math.pow(2,-10*(e-=1))*Math.sin((e*a-r)*(2*Math.PI)/i)*.5+u+t},easeInBack:function(n,e,t,u,a,r){return void 0==r&&(r=1.70158),u*(e/=a)*e*((r+1)*e-r)+t},easeOutBack:function(n,e,t,u,a,r){return void 0==r&&(r=1.70158),u*((e=e/a-1)*e*((r+1)*e+r)+1)+t},easeInOutBack:function(n,e,t,u,a,r){return void 0==r&&(r=1.70158),(e/=a/2)<1?u/2*(e*e*(((r*=1.525)+1)*e-r))+t:u/2*((e-=2)*e*(((r*=1.525)+1)*e+r)+2)+t},easeInBounce:function(n,e,t,u,a){return u-jQuery.easing.easeOutBounce(n,a-e,0,u,a)+t},easeOutBounce:function(n,e,t,u,a){return(e/=a)<1/2.75?u*(7.5625*e*e)+t:2/2.75>e?u*(7.5625*(e-=1.5/2.75)*e+.75)+t:2.5/2.75>e?u*(7.5625*(e-=2.25/2.75)*e+.9375)+t:u*(7.5625*(e-=2.625/2.75)*e+.984375)+t},easeInOutBounce:function(n,e,t,u,a){return a/2>e?.5*jQuery.easing.easeInBounce(n,2*e,0,u,a)+t:.5*jQuery.easing.easeOutBounce(n,2*e-a,0,u,a)+.5*u+t}}); + +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(e,t){function n(e,t){var n=e.createElement("p"),r=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",r.insertBefore(n.lastChild,r.firstChild)}function r(){var e=E.elements;return"string"==typeof e?e.split(" "):e}function a(e,t){var n=E.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),E.elements=n+" "+e,m(t)}function o(e){var t=y[e[g]];return t||(t={},v++,e[g]=v,y[v]=t),t}function c(e,n,r){if(n||(n=t),s)return n.createElement(e);r||(r=o(n));var a;return a=r.cache[e]?r.cache[e].cloneNode():p.test(e)?(r.cache[e]=r.createElem(e)).cloneNode():r.createElem(e),!a.canHaveChildren||h.test(e)||a.tagUrn?a:r.frag.appendChild(a)}function i(e,n){if(e||(e=t),s)return e.createDocumentFragment();n=n||o(e);for(var a=n.frag.cloneNode(),c=0,i=r(),l=i.length;l>c;c++)a.createElement(i[c]);return a}function l(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return E.shivMethods?c(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(E,t.frag)}function m(e){e||(e=t);var r=o(e);return!E.shivCSS||u||r.hasCSS||(r.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),s||l(e,r),e}var u,s,d="3.7.3",f=e.html5||{},h=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",v=0,y={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,s=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){u=!0,s=!0}}();var E={elements:f.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:f.shivCSS!==!1,supportsUnknownElements:s,shivMethods:f.shivMethods!==!1,type:"default",shivDocument:m,createElement:c,createDocumentFragment:i,addElements:a};e.html5=E,m(t),"object"==typeof module&&module.exports&&(module.exports=E)}("undefined"!=typeof window?window:this,document); + +/*! Respond.js v1.3.0 + * (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs + */ +(function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this); + +/* +Plugin: jQuery Parallax +Version 1.1.3 +Author: Ian Lunn +Twitter: @IanLunn +Author URL: http://www.ianlunn.co.uk/ +Plugin URL: http://www.ianlunn.co.uk/plugins/jquery-parallax/ + +Dual licensed under the MIT and GPL licenses: +http://www.opensource.org/licenses/mit-license.php +http://www.gnu.org/licenses/gpl.html +*/ + +(function( jQuery ){ + var jQuerywindow = jQuery(window); + var windowHeight = jQuerywindow.height(); + + jQuerywindow.resize(function () { + windowHeight = jQuerywindow.height(); + }); + + jQuery.fn.parallax = function(xpos, speedFactor, outerHeight) { + var jQuerythis = jQuery(this); + var getHeight; + var firstTop; + var paddingTop = 0; + + //get the starting position of each element to have parallax applied to it + jQuerythis.each(function(){ + firstTop = jQuerythis.offset().top; + }); + + if (outerHeight) { + getHeight = function(jqo) { + return jqo.outerHeight(true); + }; + } else { + getHeight = function(jqo) { + return jqo.height(); + }; + } + + // setup defaults if arguments aren't specified + if (arguments.length < 1 || xpos === null) xpos = "50%"; + if (arguments.length < 2 || speedFactor === null) speedFactor = 0.1; + if (arguments.length < 3 || outerHeight === null) outerHeight = true; + + // function to be called whenever the window is scrolled or resized + function update(){ + var pos = jQuerywindow.scrollTop(); + + jQuerythis.each(function(){ + var jQueryelement = jQuery(this); + var top = jQueryelement.offset().top; + var height = getHeight(jQueryelement); + + // Check if totally above or totally below viewport + if (top + height < pos || top > pos + windowHeight) { + return; + } + + + jQuerythis.css('backgroundPosition', xpos + " " + Math.round((top - pos) * speedFactor) + "px"); + + + }); + } + + jQuerywindow.bind('scroll', update).resize(update); + update(); + }; +})(jQuery); +/*! FitVids 1.1 + * Copyright 2011, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com + * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ + * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ + */ +(function(e){"use strict";e.fn.fitVids=function(t){var n={customSelector:null};var r=document.createElement("div"),i=document.getElementsByTagName("base")[0]||document.getElementsByTagName("script")[0];r.className="fit-vids-style";r.innerHTML="­";i.parentNode.insertBefore(r,i);if(t){e.extend(n,t)}return this.each(function(){var t=["iframe[src*='player.vimeo.com']","iframe[src*='www.youtube.com']","iframe[src*='www.youtube-nocookie.com']","iframe[src*='www.kickstarter.com']","object","embed"];if(n.customSelector){t.push(n.customSelector)}var r=e(this).find(t.join(","));r.each(function(){var t=e(this);if(this.tagName.toLowerCase()==="embed"&&t.parent("object").length||t.parent(".fluid-width-video-wrapper").length){return}var n=this.tagName.toLowerCase()==="object"||t.attr("height")&&!isNaN(parseInt(t.attr("height"),10))?parseInt(t.attr("height"),10):t.height(),r=!isNaN(parseInt(t.attr("width"),10))?parseInt(t.attr("width"),10):t.width(),i=n/r;if(!t.attr("id")){var s="fitvid"+Math.floor(Math.random()*999999);t.attr("id",s)}t.wrap('
      ').parent(".fluid-width-video-wrapper").css("padding-top",i*100+"%");t.removeAttr("height").removeAttr("width")})})}})(jQuery); + +/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. Dual MIT/BSD license */ +window.matchMedia||(window.matchMedia=function(){"use strict";var a=window.styleMedia||window.media;if(!a){var b=document.createElement("style"),c=document.getElementsByTagName("script")[0],d=null;b.type="text/css",b.id="matchmediajs-test",c.parentNode.insertBefore(b,c),d="getComputedStyle"in window&&window.getComputedStyle(b,null)||b.currentStyle,a={matchMedium:function(a){var c="@media "+a+"{ #matchmediajs-test { width: 1px; } }";return b.styleSheet?b.styleSheet.cssText=c:b.textContent=c,"1px"===d.width}}}return function(b){return{matches:a.matchMedium(b||"all"),media:b||"all"}}}()); + +/* jQuery Appear */ +!function(e){e.fn.appear=function(a,r){var n=e.extend({data:void 0,one:!0,accX:0,accY:0},r);return this.each(function(){var r=e(this);if(r.appeared=!1,!a)return void r.trigger("appear",n.data);var p=e(window),t=function(){if(!r.is(":visible"))return void(r.appeared=!1);var e=p.scrollLeft(),a=p.scrollTop(),t=r.offset(),c=t.left,i=t.top,o=n.accX,f=n.accY,s=r.height(),u=p.height(),d=r.width(),l=p.width();i+s+f>=a&&a+u+f>=i&&c+d+o>=e&&e+l+o>=c?r.appeared||r.trigger("appear",n.data):r.appeared=!1},c=function(){if(r.appeared=!0,n.one){p.unbind("scroll",t);var c=e.inArray(t,e.fn.appear.checks);c>=0&&e.fn.appear.checks.splice(c,1)}a.apply(this,arguments)};n.one?r.one("appear",n.data,c):r.bind("appear",n.data,c),p.scroll(t),e.fn.appear.checks.push(t),t()})},e.extend(e.fn.appear,{checks:[],timeout:null,checkAll:function(){var a=e.fn.appear.checks.length;if(a>0)for(;a--;)e.fn.appear.checks[a]()},run:function(){e.fn.appear.timeout&&clearTimeout(e.fn.appear.timeout),e.fn.appear.timeout=setTimeout(e.fn.appear.checkAll,20)}}),e.each(["append","prepend","after","before","attr","removeAttr","addClass","removeClass","toggleClass","remove","css","show","hide"],function(a,r){var n=e.fn[r];n&&(e.fn[r]=function(){var a=n.apply(this,arguments);return e.fn.appear.run(),a})})}(jQuery); + + +/* Easy-pie-chart */ +!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"object"==typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.trackWidth||b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(a,b){},onStep:function(a,b,c){},onStop:function(a,b){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));"string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?e.easing=jQuery.easing[e.easing]:e.easing=d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}}); + + +/* +jQuery Waypoints - v2.0.4 +Copyright (c) 2011-2014 Caleb Troughton +Dual licensed under the MIT license and GPL license. +https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt +*/ + +/*! + * imagesLoaded PACKAGED v4.1.3 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return-1==n.indexOf(t)&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return-1!=n&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=0,o=i[n];t=t||[];for(var r=this._onceEvents&&this._onceEvents[e];o;){var s=r&&r[o];s&&(this.off(e,o),delete r[o]),o.apply(this,t),n+=s?0:1,o=i[n]}return this}},t.allOff=t.removeAllListeners=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){var t=[];if(Array.isArray(e))t=e;else if("number"==typeof e.length)for(var i=0;i=e.delay&&o<=s+e.delay){var a=(o-e.delay)/s;n.strokeDashoffset=i.getVal(a,r.easing)*e.pathLen*(r.reverse?-1:1)+"px"}})},t.prototype.animate=function(){var n=this;n.$elm.attr("class",function(t,e){return[e,r+"-animating"].join(" ")}),i({len:0}).animate({len:1},{easing:"linear",duration:n.totalDuration,step:function(t,e){n.progress.call(n,t/e.end)},complete:function(){n.options.callback.call(this),n.$elm.attr("class",function(t,e){return e.replace(r+"-animating","")})}})},t);i.fn[r]=function(e,n){return this.each(function(){var t=i.data(this,r);t&&""+e===e&&t[e]?t[e](n):i.data(this,r,new a(this,e))})}}); + + + + + +/*! +* simpleParallax.min - simpleParallax is a simple JavaScript library that gives your website parallax animations on any images, +* @date: 01-02-2020 23:1:26, +* @version: 5.3.0, +* @link: https://simpleparallax.com/ +*/ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("simpleParallax",[],e):"object"==typeof exports?exports.simpleParallax=e():t.simpleParallax=e()}(window,(function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=0)}([function(t,e,n){"use strict";function i(t,e){for(var n=0;n0&&setTimeout((function(){t.setTransitionCSS()}),10),this.isInit=!0)}},{key:"wrapElement",value:function(){var t=this.element.closest("picture")||this.element,e=document.createElement("div");e.classList.add("simpleParallax"),e.style.overflow="hidden",t.parentNode.insertBefore(e,t),e.appendChild(t),this.elementContainer=e}},{key:"unWrapElement",value:function(){var t=this.elementContainer;t.replaceWith.apply(t,l(t.childNodes))}},{key:"setTransformCSS",value:function(){!1===this.settings.overflow&&(this.element.style[r]="scale(".concat(this.settings.scale,")")),this.element.style.willChange="transform"}},{key:"setTransitionCSS",value:function(){this.element.style.transition="transform ".concat(this.settings.delay,"s ").concat(this.settings.transition)}},{key:"unSetStyle",value:function(){this.element.style.willChange="",this.element.style[r]="",this.element.style.transition=""}},{key:"getElementOffset",value:function(){var t=this.elementContainer.getBoundingClientRect();if(this.elementHeight=t.height,this.elementTop=t.top+s.positions.top,this.settings.customContainer){var e=this.settings.customContainer.getBoundingClientRect();this.elementTop=t.top-e.top+s.positions.top}this.elementBottom=this.elementHeight+this.elementTop}},{key:"buildThresholdList",value:function(){for(var t=[],e=1;e<=this.elementHeight;e++){var n=e/this.elementHeight;t.push(n)}return t}},{key:"intersectionObserver",value:function(){var t={root:null,threshold:this.buildThresholdList()};this.observer=new IntersectionObserver(this.intersectionObserverCallback.bind(this),t),this.observer.observe(this.element)}},{key:"intersectionObserverCallback",value:function(t){for(var e=t.length-1;e>=0;e--)t[e].isIntersecting?this.isVisible=!0:this.isVisible=!1}},{key:"checkIfVisible",value:function(){return this.elementBottom>s.positions.top&&this.elementTopthis.settings.maxTransition&&(t=this.settings.maxTransition),this.oldPercentage!==t&&(this.rangeMax||this.getRangeMax(),this.translateValue=(t/100*this.rangeMax-this.rangeMax/2).toFixed(0),this.oldTranslateValue!==this.translateValue&&(this.oldPercentage=t,this.oldTranslateValue=this.translateValue,!0))}},{key:"animate",value:function(){var t,e=0,n=0;(this.settings.orientation.includes("left")||this.settings.orientation.includes("right"))&&(n="".concat(this.settings.orientation.includes("left")?-1*this.translateValue:this.translateValue,"px")),(this.settings.orientation.includes("up")||this.settings.orientation.includes("down"))&&(e="".concat(this.settings.orientation.includes("up")?-1*this.translateValue:this.translateValue,"px")),t=!1===this.settings.overflow?"translate3d(".concat(n,", ").concat(e,", 0) scale(").concat(this.settings.scale,")"):"translate3d(".concat(n,", ").concat(e,", 0)"),this.element.style[r]=t}}])&&u(e.prototype,n),i&&u(e,i),t}();function c(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e=0;t--)y[t].getElementOffset(),y[t].getRangeMax();this.lastPosition=-1}},{key:"proceedRequestAnimationFrame",value:function(){if(s.setViewportTop(this.customContainer),this.lastPosition!==s.positions.top){s.setViewportBottom();for(var t=m-1;t>=0;t--)this.proceedElement(y[t]);p=window.requestAnimationFrame(this.proceedRequestAnimationFrame),this.lastPosition=s.positions.top}else p=window.requestAnimationFrame(this.proceedRequestAnimationFrame)}},{key:"proceedElement",value:function(t){(!g||this.customContainer?t.checkIfVisible():t.isVisible)&&t.getTranslateValue()&&t.animate()}},{key:"destroy",value:function(){var t=this,e=[];y=y.filter((function(n){return t.elements.includes(n.element)?(e.push(n),!1):n}));for(var n=e.length-1;n>=0;n--)e[n].unSetStyle(),!1===this.settings.overflow&&e[n].unWrapElement();(m=y.length)||(window.cancelAnimationFrame(p),window.removeEventListener("resize",this.handleResize))}}])&&f(e.prototype,n),i&&f(e,i),t}()}]).default})); + +!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):n.Splitting=t()}(this,function(){"use strict" +var u=document,l=u.createTextNode.bind(u) +function d(n,t,e){n.style.setProperty(t,e)}function f(n,t){return n.appendChild(t)}function p(n,t,e,r){var i=u.createElement("span") +return t&&(i.className=t),e&&(!r&&i.setAttribute("data-"+t,e),i.textContent=e),n&&f(n,i)||i}function h(n,t){return n.getAttribute("data-"+t)}function m(n,t){return n&&0!=n.length?n.nodeName?[n]:[].slice.call(n[0].nodeName?n:(t||u).querySelectorAll(n)):[]}function o(n){for(var t=[];n--;)t[n]=[] +return t}function g(n,t){n&&n.some(t)}function c(t){return function(n){return t[n]}}var a={} +function n(n,t,e,r){return{by:n,depends:t,key:e,split:r}}function e(n){return function t(e,n,r){var i=r.indexOf(e) +if(-1==i)r.unshift(e),g(a[e].depends,function(n){t(n,e,r)}) +else{var u=r.indexOf(n) +r.splice(i,1),r.splice(u,0,e)}return r}(n,0,[]).map(c(a))}function t(n){a[n.by]=n}function v(n,r,i,u,o){n.normalize() +var c=[],a=document.createDocumentFragment() +u&&c.push(n.previousSibling) +var s=[] +return m(n.childNodes).some(function(n){if(!n.tagName||n.hasChildNodes()){if(n.childNodes&&n.childNodes.length)return s.push(n),void c.push.apply(c,v(n,r,i,u,o)) +var t=n.wholeText||"",e=t.trim() +e.length&&(" "===t[0]&&s.push(l(" ")),g(e.split(i),function(n,t){t&&o&&s.push(p(a,"whitespace"," ",o)) +var e=p(a,r,n) +c.push(e),s.push(e)})," "===t[t.length-1]&&s.push(l(" ")))}else s.push(n)}),g(s,function(n){f(a,n)}),n.innerHTML="",f(n,a),c}var s=0 +var i="words",r=n(i,s,"word",function(n){return v(n,"word",/\s+/,0,1)}),y="chars",w=n(y,[i],"char",function(n,e,t){var r=[] +return g(t[i],function(n,t){r.push.apply(r,v(n,"char","",e.whitespace&&t))}),r}) +function b(t){var f=(t=t||{}).key +return m(t.target||"[data-splitting]").map(function(a){var s=a["Ă°Å¸ÂÅ’"] +if(!t.force&&s)return s +s=a["Ă°Å¸ÂÅ’"]={el:a} +var n=e(t.by||h(a,"splitting")||y),l=function(n,t){for(var e in t)n[e]=t[e] +return n}({},t) +return g(n,function(n){if(n.split){var t=n.by,e=(f?"-"+f:"")+n.key,r=n.split(a,l,s) +e&&(i=a,c=(o="--"+e)+"-index",g(u=r,function(n,t){Array.isArray(n)?g(n,function(n){d(n,c,t)}):d(n,c,t)}),d(i,o+"-total",u.length)),s[t]=r,a.classList.add(t)}var i,u,o,c}),a.classList.add("splitting"),s})}function N(n,t,e){var r=m(t.matching||n.children,n),i={} +return g(r,function(n){var t=Math.round(n[e]);(i[t]||(i[t]=[])).push(n)}),Object.keys(i).map(Number).sort(x).map(c(i))}function x(n,t){return n-t}b.html=function(n){var t=(n=n||{}).target=p() +return t.innerHTML=n.content,b(n),t.outerHTML},b.add=t +var T=n("lines",[i],"line",function(n,t,e){return N(n,{matching:e[i]},"offsetTop")}),L=n("items",s,"item",function(n,t){return m(t.matching||n.children,n)}),k=n("rows",s,"row",function(n,t){return N(n,t,"offsetTop")}),A=n("cols",s,"col",function(n,t){return N(n,t,"offsetLeft")}),C=n("grid",["rows","cols"]),M="layout",S=n(M,s,s,function(n,t){var e=t.rows=+(t.rows||h(n,"rows")||1),r=t.columns=+(t.columns||h(n,"columns")||1) +if(t.image=t.image||h(n,"image")||n.currentSrc||n.src,t.image){var i=m("img",n)[0] +t.image=i&&(i.currentSrc||i.src)}t.image&&d(n,"background-image","url("+t.image+")") +for(var u=e*r,o=[],c=p(s,"cell-grid");u--;){var a=p(c,"cell") +p(a,"cell-inner"),o.push(a)}return f(n,c),o}),H=n("cellRows",[M],"row",function(n,t,e){var r=t.rows,i=o(r) +return g(e[M],function(n,t,e){i[Math.floor(t/(e.length/r))].push(n)}),i}),O=n("cellColumns",[M],"col",function(n,t,e){var r=t.columns,i=o(r) +return g(e[M],function(n,t){i[t%r].push(n)}),i}),j=n("cells",["cellRows","cellColumns"],"cell",function(n,t,e){return e[M]}) +return t(r),t(w),t(T),t(L),t(k),t(A),t(C),t(S),t(H),t(O),t(j),b}) + + + + +!function(t){"use strict";function e(e){return e.is('[type="checkbox"]')?e.prop("checked"):e.is('[type="radio"]')?!!t('[name="'+e.attr("name")+'"]:checked').length:e.val()}var r=function(a,i){this.options=i,this.validators=t.extend({},r.VALIDATORS,i.custom),this.$element=t(a),this.$btn=t('button[type="submit"], input[type="submit"]').filter('[form="'+this.$element.attr("id")+'"]').add(this.$element.find('input[type="submit"], button[type="submit"]')),this.update(),this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator",t.proxy(this.onInput,this)),this.$element.on("submit.bs.validator",t.proxy(this.onSubmit,this)),this.$element.on("reset.bs.validator",t.proxy(this.reset,this)),this.$element.find("[data-match]").each(function(){var r=t(this),a=r.data("match");t(a).on("input.bs.validator",function(t){e(r)&&r.trigger("input.bs.validator")})}),this.$inputs.filter(function(){return e(t(this))}).trigger("focusout"),this.$element.attr("novalidate",!0),this.toggleSubmit()};function a(e){return this.each(function(){var a=t(this),i=t.extend({},r.DEFAULTS,a.data(),"object"==typeof e&&e),o=a.data("bs.validator");(o||"destroy"!=e)&&(o||a.data("bs.validator",o=new r(this,i)),"string"==typeof e&&o[e]())})}r.VERSION="0.11.5",r.INPUT_SELECTOR=':input:not([type="hidden"], [type="submit"], [type="reset"], button)',r.FOCUS_OFFSET=20,r.DEFAULTS={delay:500,html:!1,disable:!0,focus:!0,custom:{},errors:{match:"Does not match",minlength:"Not long enough"},feedback:{success:"glyphicon-ok",error:"glyphicon-remove"}},r.VALIDATORS={native:function(t){var e=t[0];if(e.checkValidity)return!e.checkValidity()&&!e.validity.valid&&(e.validationMessage||"error!")},match:function(e){var a=e.data("match");return e.val()!==t(a).val()&&r.DEFAULTS.errors.match},minlength:function(t){var e=t.data("minlength");return t.val().length").addClass("list-unstyled").append(t.map(a,function(e){return t("
    • ")[r](e)})),void 0===o.data("bs.validator.originalContent")&&o.data("bs.validator.originalContent",o.html()),o.empty().append(a),i.addClass("has-error has-danger"),i.hasClass("has-feedback")&&s.removeClass(this.options.feedback.success)&&s.addClass(this.options.feedback.error)&&i.removeClass("has-success"))},r.prototype.clearErrors=function(t){var r=t.closest(".form-group"),a=r.find(".help-block.with-errors"),i=r.find(".form-control-feedback");a.html(a.data("bs.validator.originalContent")),r.removeClass("has-error has-danger has-success"),r.hasClass("has-feedback")&&i.removeClass(this.options.feedback.error)&&i.removeClass(this.options.feedback.success)&&e(t)&&i.addClass(this.options.feedback.success)&&r.addClass("has-success")},r.prototype.hasErrors=function(){return!!this.$inputs.filter(function(){return!!(t(this).data("bs.validator.errors")||[]).length}).length},r.prototype.isIncomplete=function(){return!!this.$inputs.filter("[required]").filter(function(){var r=e(t(this));return!("string"==typeof r?t.trim(r):r)}).length},r.prototype.onSubmit=function(t){this.validate(),(this.isIncomplete()||this.hasErrors())&&t.preventDefault()},r.prototype.toggleSubmit=function(){this.options.disable&&this.$btn.toggleClass("disabled",this.isIncomplete()||this.hasErrors())},r.prototype.defer=function(e,r){if(r=t.proxy(r,this,e),!this.options.delay)return r();window.clearTimeout(e.data("bs.validator.timeout")),e.data("bs.validator.timeout",window.setTimeout(r,this.options.delay))},r.prototype.reset=function(){return this.$element.find(".form-control-feedback").removeClass(this.options.feedback.error).removeClass(this.options.feedback.success),this.$inputs.removeData(["bs.validator.errors","bs.validator.deferred"]).each(function(){var e=t(this),r=e.data("bs.validator.timeout");window.clearTimeout(r)&&e.removeData("bs.validator.timeout")}),this.$element.find(".help-block.with-errors").each(function(){var e=t(this),r=e.data("bs.validator.originalContent");e.removeData("bs.validator.originalContent").html(r)}),this.$btn.removeClass("disabled"),this.$element.find(".has-error, .has-danger, .has-success").removeClass("has-error has-danger has-success"),this},r.prototype.destroy=function(){return this.reset(),this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"),this.$inputs.off(".bs.validator"),this.options=null,this.validators=null,this.$element=null,this.$btn=null,this};var i=t.fn.validator;t.fn.validator=a,t.fn.validator.Constructor=r,t.fn.validator.noConflict=function(){return t.fn.validator=i,this},t(window).on("load",function(){t('form[data-toggle="validator"]').each(function(){var e=t(this);a.call(e,e.data())})})}(jQuery); + + +/*! WOW wow.js - v1.3.0 - 2016-10-04 +* https://wowjs.uk +* Copyright (c) 2016 Thomas Grainger; Licensed MIT */!function(a,b){if("function"==typeof define&&define.amd)define(["module","exports"],b);else if("undefined"!=typeof exports)b(module,exports);else{var c={exports:{}};b(c,c.exports),a.WOW=c.exports}}(this,function(a,b){"use strict";function c(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function d(a,b){return b.indexOf(a)>=0}function e(a,b){for(var c in b)if(null==a[c]){var d=b[c];a[c]=d}return a}function f(a){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a)}function g(a){var b=arguments.length<=1||void 0===arguments[1]?!1:arguments[1],c=arguments.length<=2||void 0===arguments[2]?!1:arguments[2],d=arguments.length<=3||void 0===arguments[3]?null:arguments[3],e=void 0;return null!=document.createEvent?(e=document.createEvent("CustomEvent"),e.initCustomEvent(a,b,c,d)):null!=document.createEventObject?(e=document.createEventObject(),e.eventType=a):e.eventName=a,e}function h(a,b){null!=a.dispatchEvent?a.dispatchEvent(b):b in(null!=a)?a[b]():"on"+b in(null!=a)&&a["on"+b]()}function i(a,b,c){null!=a.addEventListener?a.addEventListener(b,c,!1):null!=a.attachEvent?a.attachEvent("on"+b,c):a[b]=c}function j(a,b,c){null!=a.removeEventListener?a.removeEventListener(b,c,!1):null!=a.detachEvent?a.detachEvent("on"+b,c):delete a[b]}function k(){return"innerHeight"in window?window.innerHeight:document.documentElement.clientHeight}Object.defineProperty(b,"__esModule",{value:!0});var l,m,n=function(){function a(a,b){for(var c=0;c=0){var b=a.target||a.srcElement;b.className=b.className.replace(this.config.animateClass,"").trim()}}},{key:"customStyle",value:function(a,b,c,d,e){return b&&this.cacheAnimationName(a),a.style.visibility=b?"hidden":"visible",c&&this.vendorSet(a.style,{animationDuration:c}),d&&this.vendorSet(a.style,{animationDelay:d}),e&&this.vendorSet(a.style,{animationIterationCount:e}),this.vendorSet(a.style,{animationName:b?"none":this.cachedAnimationName(a)}),a}},{key:"vendorSet",value:function(a,b){for(var c in b)if(b.hasOwnProperty(c)){var d=b[c];a[""+c]=d;for(var e=0;e=e&&f>=c}},{key:"disabled",value:function(){return!this.config.mobile&&f(navigator.userAgent)}}]),a}();b["default"]=r,a.exports=b["default"]}); + + +!function(o){o.fn.YouTubePopUp=function(e){var u=o.extend({autoplay:1},e);o(this).on("click",function(e){var a=o(this).attr("href");if(a.match(/(youtube.com)/))var p="v=",t=1;if(a.match(/(youtu.be)/)||a.match(/(vimeo.com\/)+[0-9]/))p="http://innovationplans.com/",t=3;if(a.match(/(vimeo.com\/)+[a-zA-Z]/))p="http://innovationplans.com/",t=5;var i=a.split(p)[t].replace(/(&)+(.*)/,"");if(a.match(/(youtu.be)/)||a.match(/(youtube.com)/))var c="https://www.youtube.com/embed/"+i+"?autoplay="+u.autoplay;if(a.match(/(vimeo.com\/)+[0-9]/)||a.match(/(vimeo.com\/)+[a-zA-Z]/))c="https://player.vimeo.com/video/"+i+"?autoplay="+u.autoplay;o("body").append('
      '),o(".YouTubePopUp-Wrap").hasClass("YouTubePopUp-animation")&&setTimeout(function(){o(".YouTubePopUp-Wrap").removeClass("YouTubePopUp-animation")},600),o(".YouTubePopUp-Wrap, .YouTubePopUp-Close").click(function(){o(".YouTubePopUp-Wrap").addClass("YouTubePopUp-Hide").delay(515).queue(function(){o(this).remove()})}),e.preventDefault()}),o(document).keyup(function(e){27==e.keyCode&&o(".YouTubePopUp-Wrap, .YouTubePopUp-Close").click()})}}(jQuery); + diff --git a/apiferia/src/assets/js/price-ranger.js b/apiferia/src/assets/js/price-ranger.js new file mode 100644 index 00000000..6970c7f7 --- /dev/null +++ b/apiferia/src/assets/js/price-ranger.js @@ -0,0 +1,2128 @@ +// Requires jQuery + +// Initialize slider: +$(document).ready(function () { + $('.noUi-handle').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: 'km ' + }); + noUiSlider.create(rangeSlider, { + start: [0, 1000000], + step: 1, + range: { + 'min': [100], + 'max': [1000000] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value1').innerHTML = values[0]; + document.getElementById('slider-range-value2').innerHTML = values[1]; + document.getElementsByName('min-value').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value').value = moneyFormat.from( + values[1]); + }); +}); + +$(document).ready(function () { + $('.noUi-handle2').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range2'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: '$ ' + }); + noUiSlider.create(rangeSlider, { + start: [0, 50000], + step: 1, + range: { + 'min': [0], + 'max': [50000] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value01').innerHTML = values[0]; + document.getElementById('slider-range-value02').innerHTML = values[1]; + document.getElementsByName('min-value2').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value2').value = moneyFormat.from( + values[1]); + }); +}); +$(document).ready(function () { + $('.noUi-handle3').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range3'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: '' + }); + noUiSlider.create(rangeSlider, { + start: [2000, 2025], + step: 1, + range: { + 'min': [2000], + 'max': [2025] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value03').innerHTML = values[0]; + document.getElementById('slider-range-value04').innerHTML = values[1]; + document.getElementsByName('min-value3').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value3').value = moneyFormat.from( + values[1]); + }); +}); +$(document).ready(function () { + $('.noUi-handle4').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range4'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: 'km' + }); + noUiSlider.create(rangeSlider, { + start: [2000, 2025], + step: 1, + range: { + 'min': [2000], + 'max': [2025] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value003').innerHTML = values[0]; + document.getElementById('slider-range-value004').innerHTML = values[1]; + document.getElementsByName('min-value4').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value4').value = moneyFormat.from( + values[1]); + }); +}); +$(document).ready(function () { + $('.noUi-handle5').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range5'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: '$' + }); + noUiSlider.create(rangeSlider, { + start: [2000, 2025], + step: 1, + range: { + 'min': [2000], + 'max': [2025] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value005').innerHTML = values[0]; + document.getElementById('slider-range-value006').innerHTML = values[1]; + document.getElementsByName('min-value5').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value5').value = moneyFormat.from( + values[1]); + }); +}); +$(document).ready(function () { + $('.noUi-handle6').on('click', function () { + $(this).width(50); + }); + var rangeSlider = document.getElementById('slider-range6'); + var moneyFormat = wNumb({ + decimals: 0, + thousand: ',', + prefix: '' + }); + noUiSlider.create(rangeSlider, { + start: [2000, 2025], + step: 1, + range: { + 'min': [2000], + 'max': [2025] + }, + format: moneyFormat, + connect: true + }); + // Set visual min and max values and also update value hidden form inputs + rangeSlider.noUiSlider.on('update', function (values, handle) { + document.getElementById('slider-range-value007').innerHTML = values[0]; + document.getElementById('slider-range-value008').innerHTML = values[1]; + document.getElementsByName('min-value6').value = moneyFormat.from( + values[0]); + document.getElementsByName('max-value6').value = moneyFormat.from( + values[1]); + }); +}); + + + +// https://refreshless.com/nouislider/ +/*! nouislider - 8.3.0 - 2016-02-14 17:37:19 */ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define([], factory); + } else if (typeof exports === 'object') { + // Node/CommonJS + module.exports = factory(); + } else { + // Browser globals + window.noUiSlider = factory(); + } +}(function () { + 'use strict'; + // Removes duplicates from an array. + function unique(array) { + return array.filter(function (a) { + return !this[a] ? this[a] = true : false; + }, {}); + } + // Round a value to the closest 'to'. + + function closest(value, to) { + return Math.round(value / to) * to; + } + // Current position of an element relative to the document. + + function offset(elem) { + var rect = elem.getBoundingClientRect(), + doc = elem.ownerDocument, + docElem = doc.documentElement, + pageOffset = getPageOffset(); + // getBoundingClientRect contains left scroll in Chrome on Android. + // I haven't found a feature detection that proves this. Worst case + // scenario on mis-match: the 'tap' feature on horizontal sliders breaks. + if (/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)) { + pageOffset.x = 0; + } + return { + top: rect.top + pageOffset.y - docElem.clientTop, + left: rect.left + pageOffset.x - docElem.clientLeft + }; + } + // Checks whether a value is numerical. + + function isNumeric(a) { + return typeof a === 'number' && !isNaN(a) && isFinite(a); + } + // Rounds a number to 7 supported decimals. + + function accurateNumber(number) { + var p = Math.pow(10, 7); + return Number((Math.round(number * p) / p).toFixed(7)); + } + // Sets a class and removes it after [duration] ms. + + function addClassFor(element, className, duration) { + addClass(element, className); + setTimeout(function () { + removeClass(element, className); + }, duration); + } + // Limits a value to 0 - 100 + + function limit(a) { + return Math.max(Math.min(a, 100), 0); + } + // Wraps a variable as an array, if it isn't one yet. + + function asArray(a) { + return Array.isArray(a) ? a : [a]; + } + // Counts decimals + + function countDecimals(numStr) { + var pieces = numStr.split("."); + return pieces.length > 1 ? pieces[1].length : 0; + } + // http://youmightnotneedjquery.com/#add_class + + function addClass(el, className) { + if (el.classList) { + el.classList.add(className); + } else { + el.className += ' ' + className; + } + } + // http://youmightnotneedjquery.com/#remove_class + + function removeClass(el, className) { + if (el.classList) { + el.classList.remove(className); + } else { + el.className = el.className.replace(new RegExp('(^|\\b)' + + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); + } + } + // https://plainjs.com/javascript/attributes/adding-removing-and-testing-for-classes-9/ + + function hasClass(el, className) { + return el.classList ? el.classList.contains(className) : new RegExp( + '\\b' + className + '\\b').test(el.className); + } + // https://developer.mozilla.org/en-US/docs/Web/API/Window/scrollY#Notes + + function getPageOffset() { + var supportPageOffset = window.pageXOffset !== undefined, + isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"), + x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? + document.documentElement.scrollLeft : document.body.scrollLeft, + y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? + document.documentElement.scrollTop : document.body.scrollTop; + return { + x: x, + y: y + }; + } + // Shorthand for stopPropagation so we don't have to create a dynamic method + + function stopPropagation(e) { + e.stopPropagation(); + } + // todo + + function addCssPrefix(cssPrefix) { + return function (className) { + return cssPrefix + className; + }; + } + var + // Determine the events to bind. IE11 implements pointerEvents without + // a prefix, which breaks compatibility with the IE10 implementation. + /** @const */ + actions = window.navigator.pointerEnabled ? { + start: 'pointerdown', + move: 'pointermove', + end: 'pointerup' + } : window.navigator.msPointerEnabled ? { + start: 'MSPointerDown', + move: 'MSPointerMove', + end: 'MSPointerUp' + } : { + start: 'mousedown touchstart', + move: 'mousemove touchmove', + end: 'mouseup touchend' + }, + defaultCssPrefix = 'noUi-'; + // Value calculation + // Determine the size of a sub-range in relation to a full range. + function subRangeRatio(pa, pb) { + return (100 / (pb - pa)); + } + // (percentage) How many percent is this value of this range? + + function fromPercentage(range, value) { + return (value * 100) / (range[1] - range[0]); + } + // (percentage) Where is this value on this range? + + function toPercentage(range, value) { + return fromPercentage(range, range[0] < 0 ? value + Math.abs(range[0]) : + value - range[0]); + } + // (value) How much is this percentage on this range? + + function isPercentage(range, value) { + return ((value * (range[1] - range[0])) / 100) + range[0]; + } + // Range conversion + + function getJ(value, arr) { + var j = 1; + while (value >= arr[j]) { + j += 1; + } + return j; + } + // (percentage) Input a value, find where, on a scale of 0-100, it applies. + + function toStepping(xVal, xPct, value) { + if (value >= xVal.slice(-1)[0]) { + return 100; + } + var j = getJ(value, xVal), + va, vb, pa, pb; + va = xVal[j - 1]; + vb = xVal[j]; + pa = xPct[j - 1]; + pb = xPct[j]; + return pa + (toPercentage([va, vb], value) / subRangeRatio(pa, pb)); + } + // (value) Input a percentage, find where it is on the specified range. + + function fromStepping(xVal, xPct, value) { + // There is no range group that fits 100 + if (value >= 100) { + return xVal.slice(-1)[0]; + } + var j = getJ(value, xPct), + va, vb, pa, pb; + va = xVal[j - 1]; + vb = xVal[j]; + pa = xPct[j - 1]; + pb = xPct[j]; + return isPercentage([va, vb], (value - pa) * subRangeRatio(pa, pb)); + } + // (percentage) Get the step that applies at a certain value. + + function getStep(xPct, xSteps, snap, value) { + if (value === 100) { + return value; + } + var j = getJ(value, xPct), + a, b; + // If 'snap' is set, steps are used as fixed points on the slider. + if (snap) { + a = xPct[j - 1]; + b = xPct[j]; + // Find the closest position, a or b. + if ((value - a) > ((b - a) / 2)) { + return b; + } + return a; + } + if (!xSteps[j - 1]) { + return value; + } + return xPct[j - 1] + closest(value - xPct[j - 1], xSteps[j - 1]); + } + // Entry parsing + + function handleEntryPoint(index, value, that) { + var percentage; + // Wrap numerical input in an array. + if (typeof value === "number") { + value = [value]; + } + // Reject any invalid input, by testing whether value is an array. + if (Object.prototype.toString.call(value) !== '[object Array]') { + throw new Error("noUiSlider: 'range' contains invalid value."); + } + // Covert min/max syntax to 0 and 100. + if (index === 'min') { + percentage = 0; + } else if (index === 'max') { + percentage = 100; + } else { + percentage = parseFloat(index); + } + // Check for correct input. + if (!isNumeric(percentage) || !isNumeric(value[0])) { + throw new Error("noUiSlider: 'range' value isn't numeric."); + } + // Store values. + that.xPct.push(percentage); + that.xVal.push(value[0]); + // NaN will evaluate to false too, but to keep + // logging clear, set step explicitly. Make sure + // not to override the 'step' setting with false. + if (!percentage) { + if (!isNaN(value[1])) { + that.xSteps[0] = value[1]; + } + } else { + that.xSteps.push(isNaN(value[1]) ? false : value[1]); + } + } + + function handleStepPoint(i, n, that) { + // Ignore 'false' stepping. + if (!n) { + return true; + } + // Factor to range ratio + that.xSteps[i] = fromPercentage([ + that.xVal[i], that.xVal[i + 1] + ], n) / subRangeRatio(that.xPct[i], that.xPct[i + 1]); + } + // Interface + // The interface to Spectrum handles all direction-based + // conversions, so the above values are unaware. + + function Spectrum(entry, snap, direction, singleStep) { + this.xPct = []; + this.xVal = []; + this.xSteps = [singleStep || false]; + this.xNumSteps = [false]; + this.snap = snap; + this.direction = direction; + var index, ordered = [ /* [0, 'min'], [1, '50%'], [2, 'max'] */]; + // Map the object keys to an array. + for (index in entry) { + if (entry.hasOwnProperty(index)) { + ordered.push([entry[index], index]); + } + } + // Sort all entries by value (numeric sort). + if (ordered.length && typeof ordered[0][0] === "object") { + ordered.sort(function (a, b) { + return a[0][0] - b[0][0]; + }); + } else { + ordered.sort(function (a, b) { + return a[0] - b[0]; + }); + } + // Convert all entries to subranges. + for (index = 0; index < ordered.length; index++) { + handleEntryPoint(ordered[index][1], ordered[index][0], this); + } + // Store the actual step values. + // xSteps is sorted in the same order as xPct and xVal. + this.xNumSteps = this.xSteps.slice(0); + // Convert all numeric steps to the percentage of the subrange they represent. + for (index = 0; index < this.xNumSteps.length; index++) { + handleStepPoint(index, this.xNumSteps[index], this); + } + } + Spectrum.prototype.getMargin = function (value) { + return this.xPct.length === 2 ? fromPercentage(this.xVal, value) : + false; + }; + Spectrum.prototype.toStepping = function (value) { + value = toStepping(this.xVal, this.xPct, value); + // Invert the value if this is a right-to-left slider. + if (this.direction) { + value = 100 - value; + } + return value; + }; + Spectrum.prototype.fromStepping = function (value) { + // Invert the value if this is a right-to-left slider. + if (this.direction) { + value = 100 - value; + } + return accurateNumber(fromStepping(this.xVal, this.xPct, value)); + }; + Spectrum.prototype.getStep = function (value) { + // Find the proper step for rtl sliders by search in inverse direction. + // Fixes issue #262. + if (this.direction) { + value = 100 - value; + } + value = getStep(this.xPct, this.xSteps, this.snap, value); + if (this.direction) { + value = 100 - value; + } + return value; + }; + Spectrum.prototype.getApplicableStep = function (value) { + // If the value is 100%, return the negative step twice. + var j = getJ(value, this.xPct), + offset = value === 100 ? 2 : 1; + return [this.xNumSteps[j - 2], this.xVal[j - offset], this.xNumSteps[ + j - offset]]; + }; + // Outside testing + Spectrum.prototype.convert = function (value) { + return this.getStep(this.toStepping(value)); + }; + /* Every input option is tested and parsed. This'll prevent + endless validation in internal methods. These tests are + structured with an item for every option available. An + option can be marked as required by setting the 'r' flag. + The testing function is provided with three arguments: + - The provided value for the option; + - A reference to the options object; + - The name for the option; + + The testing function returns false when an error is detected, + or true when everything is OK. It can also modify the option + object, to make sure all values can be correctly looped elsewhere. */ + var defaultFormatter = { + 'to': function (value) { + return value !== undefined && value.toFixed(2); + }, + 'from': Number + }; + + function testStep(parsed, entry) { + if (!isNumeric(entry)) { + throw new Error("noUiSlider: 'step' is not numeric."); + } + // The step option can still be used to set stepping + // for linear sliders. Overwritten if set in 'range'. + parsed.singleStep = entry; + } + + function testRange(parsed, entry) { + // Filter incorrect input. + if (typeof entry !== 'object' || Array.isArray(entry)) { + throw new Error("noUiSlider: 'range' is not an object."); + } + // Catch missing start or end. + if (entry.min === undefined || entry.max === undefined) { + throw new Error("noUiSlider: Missing 'min' or 'max' in 'range'."); + } + // Catch equal start or end. + if (entry.min === entry.max) { + throw new Error( + "noUiSlider: 'range' 'min' and 'max' cannot be equal."); + } + parsed.spectrum = new Spectrum(entry, parsed.snap, parsed.dir, parsed + .singleStep); + } + + function testStart(parsed, entry) { + entry = asArray(entry); + // Validate input. Values aren't tested, as the public .val method + // will always provide a valid location. + if (!Array.isArray(entry) || !entry.length || entry.length > 2) { + throw new Error("noUiSlider: 'start' option is incorrect."); + } + // Store the number of handles. + parsed.handles = entry.length; + // When the slider is initialized, the .val method will + // be called with the start options. + parsed.start = entry; + } + + function testSnap(parsed, entry) { + // Enforce 100% stepping within subranges. + parsed.snap = entry; + if (typeof entry !== 'boolean') { + throw new Error("noUiSlider: 'snap' option must be a boolean."); + } + } + + function testAnimate(parsed, entry) { + // Enforce 100% stepping within subranges. + parsed.animate = entry; + if (typeof entry !== 'boolean') { + throw new Error("noUiSlider: 'animate' option must be a boolean."); + } + } + + function testConnect(parsed, entry) { + if (entry === 'lower' && parsed.handles === 1) { + parsed.connect = 1; + } else if (entry === 'upper' && parsed.handles === 1) { + parsed.connect = 2; + } else if (entry === true && parsed.handles === 2) { + parsed.connect = 3; + } else if (entry === false) { + parsed.connect = 0; + } else { + throw new Error( + "noUiSlider: 'connect' option doesn't match handle count."); + } + } + + function testOrientation(parsed, entry) { + // Set orientation to an a numerical value for easy + // array selection. + switch (entry) { + case 'horizontal': + parsed.ort = 0; + break; + case 'vertical': + parsed.ort = 1; + break; + default: + throw new Error("noUiSlider: 'orientation' option is invalid."); + } + } + + function testMargin(parsed, entry) { + if (!isNumeric(entry)) { + throw new Error("noUiSlider: 'margin' option must be numeric."); + } + // Issue #582 + if (entry === 0) { + return; + } + parsed.margin = parsed.spectrum.getMargin(entry); + if (!parsed.margin) { + throw new Error( + "noUiSlider: 'margin' option is only supported on linear sliders." + ); + } + } + + function testLimit(parsed, entry) { + if (!isNumeric(entry)) { + throw new Error("noUiSlider: 'limit' option must be numeric."); + } + parsed.limit = parsed.spectrum.getMargin(entry); + if (!parsed.limit) { + throw new Error( + "noUiSlider: 'limit' option is only supported on linear sliders." + ); + } + } + + function testDirection(parsed, entry) { + // Set direction as a numerical value for easy parsing. + // Invert connection for RTL sliders, so that the proper + // handles get the connect/background classes. + switch (entry) { + case 'ltr': + parsed.dir = 0; + break; + case 'rtl': + parsed.dir = 1; + parsed.connect = [0, 2, 1, 3][parsed.connect]; + break; + default: + throw new Error( + "noUiSlider: 'direction' option was not recognized."); + } + } + + function testBehaviour(parsed, entry) { + // Make sure the input is a string. + if (typeof entry !== 'string') { + throw new Error( + "noUiSlider: 'behaviour' must be a string containing options."); + } + // Check if the string contains any keywords. + // None are required. + var tap = entry.indexOf('tap') >= 0, + drag = entry.indexOf('drag') >= 0, + fixed = entry.indexOf('fixed') >= 0, + snap = entry.indexOf('snap') >= 0, + hover = entry.indexOf('hover') >= 0; + // Fix #472 + if (drag && !parsed.connect) { + throw new Error( + "noUiSlider: 'drag' behaviour must be used with 'connect': true." + ); + } + parsed.events = { + tap: tap || snap, + drag: drag, + fixed: fixed, + snap: snap, + hover: hover + }; + } + + function testTooltips(parsed, entry) { + var i; + if (entry === false) { + return; + } else if (entry === true) { + parsed.tooltips = []; + for (i = 0; i < parsed.handles; i++) { + parsed.tooltips.push(true); + } + } else { + parsed.tooltips = asArray(entry); + if (parsed.tooltips.length !== parsed.handles) { + throw new Error( + "noUiSlider: must pass a formatter for all handles."); + } + parsed.tooltips.forEach(function (formatter) { + if (typeof formatter !== 'boolean' && (typeof formatter !== + 'object' || typeof formatter.to !== 'function')) { + throw new Error( + "noUiSlider: 'tooltips' must be passed a formatter or 'false'." + ); + } + }); + } + } + + function testFormat(parsed, entry) { + parsed.format = entry; + // Any object with a to and from method is supported. + if (typeof entry.to === 'function' && typeof entry.from === + 'function') { + return true; + } + throw new Error( + "noUiSlider: 'format' requires 'to' and 'from' methods."); + } + + function testCssPrefix(parsed, entry) { + if (entry !== undefined && typeof entry !== 'string') { + throw new Error("noUiSlider: 'cssPrefix' must be a string."); + } + parsed.cssPrefix = entry; + } + // Test all developer settings and parse to assumption-safe values. + + function testOptions(options) { + // To prove a fix for #537, freeze options here. + // If the object is modified, an error will be thrown. + // Object.freeze(options); + var parsed = { + margin: 0, + limit: 0, + animate: true, + format: defaultFormatter + }, + tests; + // Tests are executed in the order they are presented here. + tests = { + 'step': { + r: false, + t: testStep + }, + 'start': { + r: true, + t: testStart + }, + 'connect': { + r: true, + t: testConnect + }, + 'direction': { + r: true, + t: testDirection + }, + 'snap': { + r: false, + t: testSnap + }, + 'animate': { + r: false, + t: testAnimate + }, + 'range': { + r: true, + t: testRange + }, + 'orientation': { + r: false, + t: testOrientation + }, + 'margin': { + r: false, + t: testMargin + }, + 'limit': { + r: false, + t: testLimit + }, + 'behaviour': { + r: true, + t: testBehaviour + }, + 'format': { + r: false, + t: testFormat + }, + 'tooltips': { + r: false, + t: testTooltips + }, + 'cssPrefix': { + r: false, + t: testCssPrefix + } + }; + var defaults = { + 'connect': false, + 'direction': 'ltr', + 'behaviour': 'tap', + 'orientation': 'horizontal' + }; + // Run all options through a testing mechanism to ensure correct + // input. It should be noted that options might get modified to + // be handled properly. E.g. wrapping integers in arrays. + Object.keys(tests).forEach(function (name) { + // If the option isn't set, but it is required, throw an error. + if (options[name] === undefined && defaults[name] === undefined) { + if (tests[name].r) { + throw new Error("noUiSlider: '" + name + "' is required."); + } + return true; + } + tests[name].t(parsed, options[name] === undefined ? defaults[ + name] : options[name]); + }); + // Forward pips options + parsed.pips = options.pips; + // Pre-define the styles. + parsed.style = parsed.ort ? 'top' : 'left'; + return parsed; + } + + function closure(target, options) { + // All variables local to 'closure' are prefixed with 'scope_' + var scope_Target = target, + scope_Locations = [-1, -1], + scope_Base, + scope_Handles, + scope_Spectrum = options.spectrum, + scope_Values = [], + scope_Events = {}, + scope_Self; + var cssClasses = [ + /* 0 */ + 'target' + /* 1 */ + , 'base' + /* 2 */ + , 'origin' + /* 3 */ + , 'handle' + /* 4 */ + , 'horizontal' + /* 5 */ + , 'vertical' + /* 6 */ + , 'background' + /* 7 */ + , 'connect' + /* 8 */ + , 'ltr' + /* 9 */ + , 'rtl' + /* 10 */ + , 'draggable' + /* 11 */ + , '' + /* 12 */ + , 'state-drag' + /* 13 */ + , '' + /* 14 */ + , 'state-tap' + /* 15 */ + , 'active' + /* 16 */ + , '' + /* 17 */ + , 'stacking' + /* 18 */ + , 'tooltip' + /* 19 */ + , '' + /* 20 */ + , 'pips' + /* 21 */ + , 'marker' + /* 22 */ + , 'value' + ].map(addCssPrefix(options.cssPrefix || defaultCssPrefix)); + // Delimit proposed values for handle positions. + function getPositions(a, b, delimit) { + // Add movement to current position. + var c = a + b[0], + d = a + b[1]; + // Only alter the other position on drag, + // not on standard sliding. + if (delimit) { + if (c < 0) { + d += Math.abs(c); + } + if (d > 100) { + c -= (d - 100); + } + // Limit values to 0 and 100. + return [limit(c), limit(d)]; + } + return [c, d]; + } + // Provide a clean event with standardized offset values. + + function fixEvent(e, pageOffset) { + // Prevent scrolling and panning on touch events, while + // attempting to slide. The tap event also depends on this. + e.preventDefault(); + // Filter the event to register the type, which can be + // touch, mouse or pointer. Offset changes need to be + // made on an event specific basis. + var touch = e.type.indexOf('touch') === 0, + mouse = e.type.indexOf('mouse') === 0, + pointer = e.type.indexOf('pointer') === 0, + x, y, event = e; + // IE10 implemented pointer events with a prefix; + if (e.type.indexOf('MSPointer') === 0) { + pointer = true; + } + if (touch) { + // noUiSlider supports one movement at a time, + // so we can select the first 'changedTouch'. + x = e.changedTouches[0].pageX; + y = e.changedTouches[0].pageY; + } + pageOffset = pageOffset || getPageOffset(); + if (mouse || pointer) { + x = e.clientX + pageOffset.x; + y = e.clientY + pageOffset.y; + } + event.pageOffset = pageOffset; + event.points = [x, y]; + event.cursor = mouse || pointer; // Fix #435 + return event; + } + // Append a handle to the base. + + function addHandle(direction, index) { + var origin = document.createElement('div'), + handle = document.createElement('div'), + additions = ['-lower', '-upper']; + if (direction) { + additions.reverse(); + } + addClass(handle, cssClasses[3]); + addClass(handle, cssClasses[3] + additions[index]); + addClass(origin, cssClasses[2]); + origin.appendChild(handle); + return origin; + } + // Add the proper connection classes. + + function addConnection(connect, target, handles) { + // Apply the required connection classes to the elements + // that need them. Some classes are made up for several + // segments listed in the class list, to allow easy + // renaming and provide a minor compression benefit. + switch (connect) { + case 1: + addClass(target, cssClasses[7]); + addClass(handles[0], cssClasses[6]); + break; + case 3: + addClass(handles[1], cssClasses[6]); + /* falls through */ + case 2: + addClass(handles[0], cssClasses[7]); + /* falls through */ + case 0: + addClass(target, cssClasses[6]); + break; + } + } + // Add handles to the slider base. + + function addHandles(nrHandles, direction, base) { + var index, handles = []; + // Append handles. + for (index = 0; index < nrHandles; index += 1) { + // Keep a list of all added handles. + handles.push(base.appendChild(addHandle(direction, index))); + } + return handles; + } + // Initialize a single slider. + + function addSlider(direction, orientation, target) { + // Apply classes and data to the target. + addClass(target, cssClasses[0]); + addClass(target, cssClasses[8 + direction]); + addClass(target, cssClasses[4 + orientation]); + var div = document.createElement('div'); + addClass(div, cssClasses[1]); + target.appendChild(div); + return div; + } + + function addTooltip(handle, index) { + if (!options.tooltips[index]) { + return false; + } + var element = document.createElement('div'); + element.className = cssClasses[18]; + return handle.firstChild.appendChild(element); + } + // The tooltips option is a shorthand for using the 'update' event. + + function tooltips() { + if (options.dir) { + options.tooltips.reverse(); + } + // Tooltips are added with options.tooltips in original order. + var tips = scope_Handles.map(addTooltip); + if (options.dir) { + tips.reverse(); + options.tooltips.reverse(); + } + bindEvent('update', function (f, o, r) { + if (tips[o]) { + tips[o].innerHTML = options.tooltips[o] === true ? f[o] : + options.tooltips[o].to(r[o]); + } + }); + } + + function getGroup(mode, values, stepped) { + // Use the range. + if (mode === 'range' || mode === 'steps') { + return scope_Spectrum.xVal; + } + if (mode === 'count') { + // Divide 0 - 100 in 'count' parts. + var spread = (100 / (values - 1)), + v, i = 0; + values = []; + // List these parts and have them handled as 'positions'. + while ((v = i++ * spread) <= 100) { + values.push(v); + } + mode = 'positions'; + } + if (mode === 'positions') { + // Map all percentages to on-range values. + return values.map(function (value) { + return scope_Spectrum.fromStepping(stepped ? + scope_Spectrum.getStep(value) : value); + }); + } + if (mode === 'values') { + // If the value must be stepped, it needs to be converted to a percentage first. + if (stepped) { + return values.map(function (value) { + // Convert to percentage, apply step, return to value. + return scope_Spectrum.fromStepping(scope_Spectrum.getStep( + scope_Spectrum.toStepping(value))); + }); + } + // Otherwise, we can simply use the values. + return values; + } + } + + function generateSpread(density, mode, group) { + function safeIncrement(value, increment) { + // Avoid floating point variance by dropping the smallest decimal places. + return (value + increment).toFixed(7) / 1; + } + var originalSpectrumDirection = scope_Spectrum.direction, + indexes = {}, + firstInRange = scope_Spectrum.xVal[0], + lastInRange = scope_Spectrum.xVal[scope_Spectrum.xVal.length - + 1], + ignoreFirst = false, + ignoreLast = false, + prevPct = 0; + // This function loops the spectrum in an ltr linear fashion, + // while the toStepping method is direction aware. Trick it into + // believing it is ltr. + scope_Spectrum.direction = 0; + // Create a copy of the group, sort it and filter away all duplicates. + group = unique(group.slice().sort(function (a, b) { + return a - b; + })); + // Make sure the range starts with the first element. + if (group[0] !== firstInRange) { + group.unshift(firstInRange); + ignoreFirst = true; + } + // Likewise for the last one. + if (group[group.length - 1] !== lastInRange) { + group.push(lastInRange); + ignoreLast = true; + } + group.forEach(function (current, index) { + // Get the current step and the lower + upper positions. + var step, i, q, + low = current, + high = group[index + 1], + newPct, pctDifference, pctPos, type, + steps, realSteps, stepsize; + // When using 'steps' mode, use the provided steps. + // Otherwise, we'll step on to the next subrange. + if (mode === 'steps') { + step = scope_Spectrum.xNumSteps[index]; + } + // Default to a 'full' step. + if (!step) { + step = high - low; + } + // Low can be 0, so test for false. If high is undefined, + // we are at the last subrange. Index 0 is already handled. + if (low === false || high === undefined) { + return; + } + // Find all steps in the subrange. + for (i = low; i <= high; i = safeIncrement(i, step)) { + // Get the percentage value for the current step, + // calculate the size for the subrange. + newPct = scope_Spectrum.toStepping(i); + pctDifference = newPct - prevPct; + steps = pctDifference / density; + realSteps = Math.round(steps); + // This ratio represents the ammount of percentage-space a point indicates. + // For a density 1 the points/percentage = 1. For density 2, that percentage needs to be re-devided. + // Round the percentage offset to an even number, then divide by two + // to spread the offset on both sides of the range. + stepsize = pctDifference / realSteps; + // Divide all points evenly, adding the correct number to this subrange. + // Run up to <= so that 100% gets a point, event if ignoreLast is set. + for (q = 1; q <= realSteps; q += 1) { + // The ratio between the rounded value and the actual size might be ~1% off. + // Correct the percentage offset by the number of points + // per subrange. density = 1 will result in 100 points on the + // full range, 2 for 50, 4 for 25, etc. + pctPos = prevPct + (q * stepsize); + indexes[pctPos.toFixed(5)] = ['x', 0]; + } + // Determine the point type. + type = (group.indexOf(i) > -1) ? 1 : (mode === 'steps' ? + 2 : 0); + // Enforce the 'ignoreFirst' option by overwriting the type for 0. + if (!index && ignoreFirst) { + type = 0; + } + if (!(i === high && ignoreLast)) { + // Mark the 'type' of this point. 0 = plain, 1 = real value, 2 = step value. + indexes[newPct.toFixed(5)] = [i, type]; + } + // Update the percentage count. + prevPct = newPct; + } + }); + // Reset the spectrum. + scope_Spectrum.direction = originalSpectrumDirection; + return indexes; + } + + function addMarking(spread, filterFunc, formatter) { + var style = ['horizontal', 'vertical'][options.ort], + element = document.createElement('div'), + out = ''; + addClass(element, cssClasses[20]); + addClass(element, cssClasses[20] + '-' + style); + + function getSize(type) { + return ['-normal', '-large', '-sub'][type]; + } + + function getTags(offset, source, values) { + return 'class="' + source + ' ' + source + '-' + style + ' ' + + source + getSize(values[1]) + '" style="' + options.style + + ': ' + offset + '%"'; + } + + function addSpread(offset, values) { + if (scope_Spectrum.direction) { + offset = 100 - offset; + } + // Apply the filter function, if it is set. + values[1] = (values[1] && filterFunc) ? filterFunc(values[0], + values[1]) : values[1]; + // Add a marker for every point + out += '
      '; + // Values are only appended for points marked '1' or '2'. + if (values[1]) { + out += '
      ' + formatter.to(values[0]) + '
      '; + } + } + // Append all points. + Object.keys(spread).forEach(function (a) { + addSpread(a, spread[a]); + }); + element.innerHTML = out; + return element; + } + + function pips(grid) { + var mode = grid.mode, + density = grid.density || 1, + filter = grid.filter || false, + values = grid.values || false, + stepped = grid.stepped || false, + group = getGroup(mode, values, stepped), + spread = generateSpread(density, mode, group), + format = grid.format || { + to: Math.round + }; + return scope_Target.appendChild(addMarking(spread, filter, format)); + } + // Shorthand for base dimensions. + + function baseSize() { + var rect = scope_Base.getBoundingClientRect(), + alt = 'offset' + ['Width', 'Height'][options.ort]; + return options.ort === 0 ? (rect.width || scope_Base[alt]) : ( + rect.height || scope_Base[alt]); + } + // External event handling + + function fireEvent(event, handleNumber, tap) { + if (handleNumber !== undefined && options.handles !== 1) { + handleNumber = Math.abs(handleNumber - options.dir); + } + Object.keys(scope_Events).forEach(function (targetEvent) { + var eventType = targetEvent.split('.')[0]; + if (event === eventType) { + scope_Events[targetEvent].forEach(function (callback) { + callback.call( + // Use the slider public API as the scope ('this') + scope_Self, + // Return values as array, so arg_1[arg_2] is always valid. + asArray(valueGet()), + // Handle index, 0 or 1 + handleNumber, + // Unformatted slider values + asArray(inSliderOrder(Array.prototype.slice.call( + scope_Values))), + // Event is fired by tap, true or false + tap || false, + // Left offset of the handle, in relation to the slider + scope_Locations); + }); + } + }); + } + // Returns the input array, respecting the slider direction configuration. + + function inSliderOrder(values) { + // If only one handle is used, return a single value. + if (values.length === 1) { + return values[0]; + } + if (options.dir) { + return values.reverse(); + } + return values; + } + // Handler for attaching events trough a proxy. + + function attach(events, element, callback, data) { + // This function can be used to 'filter' events to the slider. + // element is a node, not a nodeList + var method = function (e) { + if (scope_Target.hasAttribute('disabled')) { + return false; + } + // Stop if an active 'tap' transition is taking place. + if (hasClass(scope_Target, cssClasses[14])) { + return false; + } + e = fixEvent(e, data.pageOffset); + // Ignore right or middle clicks on start #454 + if (events === actions.start && e.buttons !== undefined && e.buttons > + 1) { + return false; + } + // Ignore right or middle clicks on start #454 + if (data.hover && e.buttons) { + return false; + } + e.calcPoint = e.points[options.ort]; + // Call the event handler with the event [ and additional data ]. + callback(e, data); + }, + methods = []; + // Bind a closure on the target for every event type. + events.split(' ').forEach(function (eventName) { + element.addEventListener(eventName, method, false); + methods.push([eventName, method]); + }); + return methods; + } + // Handle movement on document for handle and range drag. + + function move(event, data) { + // Fix #498 + // Check value of .buttons in 'start' to work around a bug in IE10 mobile (data.buttonsProperty). + // https://connect.microsoft.com/IE/feedback/details/927005/mobile-ie10-windows-phone-buttons-property-of-pointermove-event-always-zero + // IE9 has .buttons and .which zero on mousemove. + // Firefox breaks the spec MDN defines. + if (navigator.appVersion.indexOf("MSIE 9") === -1 && event.buttons === + 0 && data.buttonsProperty !== 0) { + return end(event, data); + } + var handles = data.handles || scope_Handles, + positions, state = false, + proposal = ((event.calcPoint - data.start) * 100) / data.baseSize, + handleNumber = handles[0] === scope_Handles[0] ? 0 : 1, + i; + // Calculate relative positions for the handles. + positions = getPositions(proposal, data.positions, handles.length > + 1); + state = setHandle(handles[0], positions[handleNumber], handles.length === + 1); + if (handles.length > 1) { + state = setHandle(handles[1], positions[handleNumber ? 0 : 1], + false) || state; + if (state) { + // fire for both handles + for (i = 0; i < data.handles.length; i++) { + fireEvent('slide', i); + } + } + } else if (state) { + // Fire for a single handle + fireEvent('slide', handleNumber); + } + } + // Unbind move events on document, call callbacks. + + function end(event, data) { + // The handle is no longer active, so remove the class. + var active = scope_Base.querySelector('.' + cssClasses[15]), + handleNumber = data.handles[0] === scope_Handles[0] ? 0 : 1; + if (active !== null) { + removeClass(active, cssClasses[15]); + } + // Remove cursor styles and text-selection events bound to the body. + if (event.cursor) { + document.body.style.cursor = ''; + document.body.removeEventListener('selectstart', document.body.noUiListener); + } + var d = document.documentElement; + // Unbind the move and end events, which are added on 'start'. + d.noUiListeners.forEach(function (c) { + d.removeEventListener(c[0], c[1]); + }); + // Remove dragging class. + removeClass(scope_Target, cssClasses[12]); + // Fire the change and set events. + fireEvent('set', handleNumber); + fireEvent('change', handleNumber); + // If this is a standard handle movement, fire the end event. + if (data.handleNumber !== undefined) { + fireEvent('end', data.handleNumber); + } + } + // Fire 'end' when a mouse or pen leaves the document. + + function documentLeave(event, data) { + if (event.type === "mouseout" && event.target.nodeName === "HTML" && + event.relatedTarget === null) { + end(event, data); + } + } + // Bind move events on document. + + function start(event, data) { + var d = document.documentElement; + // Mark the handle as 'active' so it can be styled. + if (data.handles.length === 1) { + addClass(data.handles[0].children[0], cssClasses[15]); + // Support 'disabled' handles + if (data.handles[0].hasAttribute('disabled')) { + return false; + } + } + // Fix #551, where a handle gets selected instead of dragged. + event.preventDefault(); + // A drag should never propagate up to the 'tap' event. + event.stopPropagation(); + // Attach the move and end events. + var moveEvent = attach(actions.move, d, move, { + start: event.calcPoint, + baseSize: baseSize(), + pageOffset: event.pageOffset, + handles: data.handles, + handleNumber: data.handleNumber, + buttonsProperty: event.buttons, + positions: [ + scope_Locations[0], + scope_Locations[scope_Handles.length - 1] + ] + }), + endEvent = attach(actions.end, d, end, { + handles: data.handles, + handleNumber: data.handleNumber + }); + var outEvent = attach("mouseout", d, documentLeave, { + handles: data.handles, + handleNumber: data.handleNumber + }); + d.noUiListeners = moveEvent.concat(endEvent, outEvent); + // Text selection isn't an issue on touch devices, + // so adding cursor styles can be skipped. + if (event.cursor) { + // Prevent the 'I' cursor and extend the range-drag cursor. + document.body.style.cursor = getComputedStyle(event.target).cursor; + // Mark the target with a dragging state. + if (scope_Handles.length > 1) { + addClass(scope_Target, cssClasses[12]); + } + var f = function () { + return false; + }; + document.body.noUiListener = f; + // Prevent text selection when dragging the handles. + document.body.addEventListener('selectstart', f, false); + } + if (data.handleNumber !== undefined) { + fireEvent('start', data.handleNumber); + } + } + // Move closest handle to tapped location. + + function tap(event) { + var location = event.calcPoint, + total = 0, + handleNumber, to; + // The tap event shouldn't propagate up and cause 'edge' to run. + event.stopPropagation(); + // Add up the handle offsets. + scope_Handles.forEach(function (a) { + total += offset(a)[options.style]; + }); + // Find the handle closest to the tapped position. + handleNumber = (location < total / 2 || scope_Handles.length === + 1) ? 0 : 1; + // Check if handler is not disablet if yes set number to the next handler + if (scope_Handles[handleNumber].hasAttribute('disabled')) { + handleNumber = handleNumber ? 0 : 1; + } + location -= offset(scope_Base)[options.style]; + // Calculate the new position. + to = (location * 100) / baseSize(); + if (!options.events.snap) { + // Flag the slider as it is now in a transitional state. + // Transition takes 300 ms, so re-enable the slider afterwards. + addClassFor(scope_Target, cssClasses[14], 300); + } + // Support 'disabled' handles + if (scope_Handles[handleNumber].hasAttribute('disabled')) { + return false; + } + // Find the closest handle and calculate the tapped point. + // The set handle to the new position. + setHandle(scope_Handles[handleNumber], to); + fireEvent('slide', handleNumber, true); + fireEvent('set', handleNumber, true); + fireEvent('change', handleNumber, true); + if (options.events.snap) { + start(event, { + handles: [scope_Handles[handleNumber]] + }); + } + } + // Fires a 'hover' event for a hovered mouse/pen position. + + function hover(event) { + var location = event.calcPoint - offset(scope_Base)[options.style], + to = scope_Spectrum.getStep((location * 100) / baseSize()), + value = scope_Spectrum.fromStepping(to); + Object.keys(scope_Events).forEach(function (targetEvent) { + if ('hover' === targetEvent.split('.')[0]) { + scope_Events[targetEvent].forEach(function (callback) { + callback.call(scope_Self, value); + }); + } + }); + } + // Attach events to several slider parts. + + function events(behaviour) { + var i, drag; + // Attach the standard drag event to the handles. + if (!behaviour.fixed) { + for (i = 0; i < scope_Handles.length; i += 1) { + // These events are only bound to the visual handle + // element, not the 'real' origin element. + attach(actions.start, scope_Handles[i].children[0], start, { + handles: [scope_Handles[i]], + handleNumber: i + }); + } + } + // Attach the tap event to the slider base. + if (behaviour.tap) { + attach(actions.start, scope_Base, tap, { + handles: scope_Handles + }); + } + // Fire hover events + if (behaviour.hover) { + attach(actions.move, scope_Base, hover, { + hover: true + }); + for (i = 0; i < scope_Handles.length; i += 1) { + ['mousemove MSPointerMove pointermove'].forEach(function ( + eventName) { + scope_Handles[i].children[0].addEventListener(eventName, + stopPropagation, false); + }); + } + } + // Make the range draggable. + if (behaviour.drag) { + drag = [scope_Base.querySelector('.' + cssClasses[7])]; + addClass(drag[0], cssClasses[10]); + // When the range is fixed, the entire range can + // be dragged by the handles. The handle in the first + // origin will propagate the start event upward, + // but it needs to be bound manually on the other. + if (behaviour.fixed) { + drag.push(scope_Handles[(drag[0] === scope_Handles[0] ? 1 : 0)] + .children[0]); + } + drag.forEach(function (element) { + attach(actions.start, element, start, { + handles: scope_Handles + }); + }); + } + } + // Test suggested values and apply margin, step. + + function setHandle(handle, to, noLimitOption) { + var trigger = handle !== scope_Handles[0] ? 1 : 0, + lowerMargin = scope_Locations[0] + options.margin, + upperMargin = scope_Locations[1] - options.margin, + lowerLimit = scope_Locations[0] + options.limit, + upperLimit = scope_Locations[1] - options.limit; + // For sliders with multiple handles, + // limit movement to the other handle. + // Apply the margin option by adding it to the handle positions. + if (scope_Handles.length > 1) { + to = trigger ? Math.max(to, lowerMargin) : Math.min(to, + upperMargin); + } + // The limit option has the opposite effect, limiting handles to a + // maximum distance from another. Limit must be > 0, as otherwise + // handles would be unmoveable. 'noLimitOption' is set to 'false' + // for the .val() method, except for pass 4/4. + if (noLimitOption !== false && options.limit && scope_Handles.length > + 1) { + to = trigger ? Math.min(to, lowerLimit) : Math.max(to, + upperLimit); + } + // Handle the step option. + to = scope_Spectrum.getStep(to); + // Limit to 0/100 for .val input, trim anything beyond 7 digits, as + // JavaScript has some issues in its floating point implementation. + to = limit(parseFloat(to.toFixed(7))); + // Return false if handle can't move + if (to === scope_Locations[trigger]) { + return false; + } + // Set the handle to the new position. + // Use requestAnimationFrame for efficient painting. + // No significant effect in Chrome, Edge sees dramatic + // performace improvements. + if (window.requestAnimationFrame) { + window.requestAnimationFrame(function () { + handle.style[options.style] = to + '%'; + }); + } else { + handle.style[options.style] = to + '%'; + } + // Force proper handle stacking + if (!handle.previousSibling) { + removeClass(handle, cssClasses[17]); + if (to > 50) { + addClass(handle, cssClasses[17]); + } + } + // Update locations. + scope_Locations[trigger] = to; + // Convert the value to the slider stepping/range. + scope_Values[trigger] = scope_Spectrum.fromStepping(to); + fireEvent('update', trigger); + return true; + } + // Loop values from value method and apply them. + + function setValues(count, values) { + var i, trigger, to; + // With the limit option, we'll need another limiting pass. + if (options.limit) { + count += 1; + } + // If there are multiple handles to be set run the setting + // mechanism twice for the first handle, to make sure it + // can be bounced of the second one properly. + for (i = 0; i < count; i += 1) { + trigger = i % 2; + // Get the current argument from the array. + to = values[trigger]; + // Setting with null indicates an 'ignore'. + // Inputting 'false' is invalid. + if (to !== null && to !== false) { + // If a formatted number was passed, attemt to decode it. + if (typeof to === 'number') { + to = String(to); + } + to = options.format.from(to); + // Request an update for all links if the value was invalid. + // Do so too if setting the handle fails. + if (to === false || isNaN(to) || setHandle(scope_Handles[ + trigger], scope_Spectrum.toStepping(to), i === (3 - + options.dir)) === false) { + fireEvent('update', trigger); + } + } + } + } + // Set the slider value. + + function valueSet(input) { + var count, values = asArray(input), + i; + // The RTL settings is implemented by reversing the front-end, + // internal mechanisms are the same. + if (options.dir && options.handles > 1) { + values.reverse(); + } + // Animation is optional. + // Make sure the initial values where set before using animated placement. + if (options.animate && scope_Locations[0] !== -1) { + addClassFor(scope_Target, cssClasses[14], 300); + } + // Determine how often to set the handles. + count = scope_Handles.length > 1 ? 3 : 1; + if (values.length === 1) { + count = 1; + } + setValues(count, values); + // Fire the 'set' event for both handles. + for (i = 0; i < scope_Handles.length; i++) { + // Fire the event only for handles that received a new value, as per #579 + if (values[i] !== null) { + fireEvent('set', i); + } + } + } + // Get the slider value. + + function valueGet() { + var i, retour = []; + // Get the value from all handles. + for (i = 0; i < options.handles; i += 1) { + retour[i] = options.format.to(scope_Values[i]); + } + return inSliderOrder(retour); + } + // Removes classes from the root and empties it. + + function destroy() { + cssClasses.forEach(function (cls) { + if (!cls) { + return; + } // Ignore empty classes + removeClass(scope_Target, cls); + }); + while (scope_Target.firstChild) { + scope_Target.removeChild(scope_Target.firstChild); + } + delete scope_Target.noUiSlider; + } + // Get the current step size for the slider. + + function getCurrentStep() { + // Check all locations, map them to their stepping point. + // Get the step point, then find it in the input list. + var retour = scope_Locations.map(function (location, index) { + var step = scope_Spectrum.getApplicableStep(location), + // As per #391, the comparison for the decrement step can have some rounding issues. + // Round the value to the precision used in the step. + stepDecimals = countDecimals(String(step[2])), + // Get the current numeric value + value = scope_Values[index], + // To move the slider 'one step up', the current step value needs to be added. + // Use null if we are at the maximum slider value. + increment = location === 100 ? null : step[2], + // Going 'one step down' might put the slider in a different sub-range, so we + // need to switch between the current or the previous step. + prev = Number((value - step[2]).toFixed(stepDecimals)), + // If the value fits the step, return the current step value. Otherwise, use the + // previous step. Return null if the slider is at its minimum value. + decrement = location === 0 ? null : (prev >= step[1]) ? + step[2] : (step[0] || false); + return [decrement, increment]; + }); + // Return values in the proper order. + return inSliderOrder(retour); + } + // Attach an event to this slider, possibly including a namespace + + function bindEvent(namespacedEvent, callback) { + scope_Events[namespacedEvent] = scope_Events[namespacedEvent] || []; + scope_Events[namespacedEvent].push(callback); + // If the event bound is 'update,' fire it immediately for all handles. + if (namespacedEvent.split('.')[0] === 'update') { + scope_Handles.forEach(function (a, index) { + fireEvent('update', index); + }); + } + } + // Undo attachment of event + + function removeEvent(namespacedEvent) { + var event = namespacedEvent.split('.')[0], + namespace = namespacedEvent.substring(event.length); + Object.keys(scope_Events).forEach(function (bind) { + var tEvent = bind.split('.')[0], + tNamespace = bind.substring(tEvent.length); + if ((!event || event === tEvent) && (!namespace || + namespace === tNamespace)) { + delete scope_Events[bind]; + } + }); + } + // Updateable: margin, limit, step, range, animate, snap + + function updateOptions(optionsToUpdate) { + var v = valueGet(), + i, newOptions = testOptions({ + start: [0, 0], + margin: optionsToUpdate.margin, + limit: optionsToUpdate.limit, + step: optionsToUpdate.step, + range: optionsToUpdate.range, + animate: optionsToUpdate.animate, + snap: optionsToUpdate.snap === undefined ? options.snap : optionsToUpdate + .snap + }); + ['margin', 'limit', 'step', 'range', 'animate'].forEach(function ( + name) { + if (optionsToUpdate[name] !== undefined) { + options[name] = optionsToUpdate[name]; + } + }); + // Save current spectrum direction as testOptions in testRange call + // doesn't rely on current direction + newOptions.spectrum.direction = scope_Spectrum.direction; + scope_Spectrum = newOptions.spectrum; + // Invalidate the current positioning so valueSet forces an update. + scope_Locations = [-1, -1]; + valueSet(v); + for (i = 0; i < scope_Handles.length; i++) { + fireEvent('update', i); + } + } + // Throw an error if the slider was already initialized. + if (scope_Target.noUiSlider) { + throw new Error('Slider was already initialized.'); + } + // Create the base element, initialise HTML and set classes. + // Add handles and links. + scope_Base = addSlider(options.dir, options.ort, scope_Target); + scope_Handles = addHandles(options.handles, options.dir, scope_Base); + // Set the connect classes. + addConnection(options.connect, scope_Target, scope_Handles); + if (options.pips) { + pips(options.pips); + } + if (options.tooltips) { + tooltips(); + } + scope_Self = { + destroy: destroy, + steps: getCurrentStep, + on: bindEvent, + off: removeEvent, + get: valueGet, + set: valueSet, + updateOptions: updateOptions, + options: options, // Issue #600 + target: scope_Target, // Issue #597 + pips: pips // Issue #594 + }; + // Attach user events. + events(options.events); + return scope_Self; + } + // Run the standard initializer + + function initialize(target, originalOptions) { + if (!target.nodeName) { + throw new Error('noUiSlider.create requires a single element.'); + } + // Test the options and create the slider environment; + var options = testOptions(originalOptions, target), + slider = closure(target, options); + // Use the public value method to set the start values. + slider.set(options.start); + target.noUiSlider = slider; + return slider; + } + // Use an object instead of a function for future expansibility; + return { + create: initialize + }; +})); +// wNumb number formatter: https://refreshless.com/wnumb/ +(function () { + 'use strict'; + var + /** @const */ + FormatOptions = ['decimals', 'thousand', 'mark', 'prefix', 'postfix', + 'encoder', 'decoder', 'negativeBefore', 'negative', 'edit', 'undo' + ]; + // General + // Reverse a string + function strReverse(a) { + return a.split('').reverse().join(''); + } + // Check if a string starts with a specified prefix. + + function strStartsWith(input, match) { + return input.substring(0, match.length) === match; + } + // Check is a string ends in a specified postfix. + + function strEndsWith(input, match) { + return input.slice(-1 * match.length) === match; + } + // Throw an error if formatting options are incompatible. + + function throwEqualError(F, a, b) { + if ((F[a] || F[b]) && (F[a] === F[b])) { + throw new Error(a); + } + } + // Check if a number is finite and not NaN + + function isValidNumber(input) { + return typeof input === 'number' && isFinite(input); + } + // Provide rounding-accurate toFixed method. + + function toFixed(value, decimals) { + var scale = Math.pow(10, decimals); + return (Math.round(value * scale) / scale).toFixed(decimals); + } + // Formatting + // Accept a number as input, output formatted string. + + function formatTo(decimals, thousand, mark, prefix, postfix, encoder, + decoder, negativeBefore, negative, edit, undo, input) { + var originalInput = input, + inputIsNegative, inputPieces, inputBase, inputDecimals = '', + output = ''; + // Apply user encoder to the input. + // Expected outcome: number. + if (encoder) { + input = encoder(input); + } + // Stop if no valid number was provided, the number is infinite or NaN. + if (!isValidNumber(input)) { + return false; + } + // Rounding away decimals might cause a value of -0 + // when using very small ranges. Remove those cases. + if (decimals !== false && parseFloat(input.toFixed(decimals)) === 0) { + input = 0; + } + // Formatting is done on absolute numbers, + // decorated by an optional negative symbol. + if (input < 0) { + inputIsNegative = true; + input = Math.abs(input); + } + // Reduce the number of decimals to the specified option. + if (decimals !== false) { + input = toFixed(input, decimals); + } + // Transform the number into a string, so it can be split. + input = input.toString(); + // Break the number on the decimal separator. + if (input.indexOf('.') !== -1) { + inputPieces = input.split('.'); + inputBase = inputPieces[0]; + if (mark) { + inputDecimals = mark + inputPieces[1]; + } + } else { + // If it isn't split, the entire number will do. + inputBase = input; + } + // Group numbers in sets of three. + if (thousand) { + inputBase = strReverse(inputBase).match(/.{1,3}/g); + inputBase = strReverse(inputBase.join(strReverse(thousand))); + } + // If the number is negative, prefix with negation symbol. + if (inputIsNegative && negativeBefore) { + output += negativeBefore; + } + // Prefix the number + if (prefix) { + output += prefix; + } + // Normal negative option comes after the prefix. Defaults to '-'. + if (inputIsNegative && negative) { + output += negative; + } + // Append the actual number. + output += inputBase; + output += inputDecimals; + // Apply the postfix. + if (postfix) { + output += postfix; + } + // Run the output through a user-specified post-formatter. + if (edit) { + output = edit(output, originalInput); + } + // All done. + return output; + } + // Accept a sting as input, output decoded number. + + function formatFrom(decimals, thousand, mark, prefix, postfix, encoder, + decoder, negativeBefore, negative, edit, undo, input) { + var originalInput = input, + inputIsNegative, output = ''; + // User defined pre-decoder. Result must be a non empty string. + if (undo) { + input = undo(input); + } + // Test the input. Can't be empty. + if (!input || typeof input !== 'string') { + return false; + } + // If the string starts with the negativeBefore value: remove it. + // Remember is was there, the number is negative. + if (negativeBefore && strStartsWith(input, negativeBefore)) { + input = input.replace(negativeBefore, ''); + inputIsNegative = true; + } + // Repeat the same procedure for the prefix. + if (prefix && strStartsWith(input, prefix)) { + input = input.replace(prefix, ''); + } + // And again for negative. + if (negative && strStartsWith(input, negative)) { + input = input.replace(negative, ''); + inputIsNegative = true; + } + // Remove the postfix. + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/slice + if (postfix && strEndsWith(input, postfix)) { + input = input.slice(0, -1 * postfix.length); + } + // Remove the thousand grouping. + if (thousand) { + input = input.split(thousand).join(''); + } + // Set the decimal separator back to period. + if (mark) { + input = input.replace(mark, '.'); + } + // Prepend the negative symbol. + if (inputIsNegative) { + output += '-'; + } + // Add the number + output += input; + // Trim all non-numeric characters (allow '.' and '-'); + output = output.replace(/[^0-9\.\-.]/g, ''); + // The value contains no parse-able number. + if (output === '') { + return false; + } + // Covert to number. + output = Number(output); + // Run the user-specified post-decoder. + if (decoder) { + output = decoder(output); + } + // Check is the output is valid, otherwise: return false. + if (!isValidNumber(output)) { + return false; + } + return output; + } + // Framework + // Validate formatting options + + function validate(inputOptions) { + var i, optionName, optionValue, + filteredOptions = {}; + for (i = 0; i < FormatOptions.length; i += 1) { + optionName = FormatOptions[i]; + optionValue = inputOptions[optionName]; + if (optionValue === undefined) { + // Only default if negativeBefore isn't set. + if (optionName === 'negative' && !filteredOptions.negativeBefore) { + filteredOptions[optionName] = '-'; + // Don't set a default for mark when 'thousand' is set. + } else if (optionName === 'mark' && filteredOptions.thousand !== + '.') { + filteredOptions[optionName] = '.'; + } else { + filteredOptions[optionName] = false; + } + // Floating points in JS are stable up to 7 decimals. + } else if (optionName === 'decimals') { + if (optionValue >= 0 && optionValue < 8) { + filteredOptions[optionName] = optionValue; + } else { + throw new Error(optionName); + } + // These options, when provided, must be functions. + } else if (optionName === 'encoder' || optionName === 'decoder' || + optionName === 'edit' || optionName === 'undo') { + if (typeof optionValue === 'function') { + filteredOptions[optionName] = optionValue; + } else { + throw new Error(optionName); + } + // Other options are strings. + } else { + if (typeof optionValue === 'string') { + filteredOptions[optionName] = optionValue; + } else { + throw new Error(optionName); + } + } + } + // Some values can't be extracted from a + // string if certain combinations are present. + throwEqualError(filteredOptions, 'mark', 'thousand'); + throwEqualError(filteredOptions, 'prefix', 'negative'); + throwEqualError(filteredOptions, 'prefix', 'negativeBefore'); + return filteredOptions; + } + // Pass all options as function arguments + + function passAll(options, method, input) { + var i, args = []; + // Add all options in order of FormatOptions + for (i = 0; i < FormatOptions.length; i += 1) { + args.push(options[FormatOptions[i]]); + } + // Append the input, then call the method, presenting all + // options as arguments. + args.push(input); + return method.apply('', args); + } + /** @constructor */ + + function wNumb(options) { + if (!(this instanceof wNumb)) { + return new wNumb(options); + } + if (typeof options !== "object") { + return; + } + options = validate(options); + // Call 'formatTo' with proper arguments. + this.to = function (input) { + return passAll(options, formatTo, input); + }; + // Call 'formatFrom' with proper arguments. + this.from = function (input) { + return passAll(options, formatFrom, input); + }; + } + /** @export */ + window.wNumb = wNumb; +}()); \ No newline at end of file diff --git a/apiferia/src/assets/js/shortcodes.js b/apiferia/src/assets/js/shortcodes.js new file mode 100644 index 00000000..629336e2 --- /dev/null +++ b/apiferia/src/assets/js/shortcodes.js @@ -0,0 +1,451 @@ +/** + * isMobile + * gotop + * topSearch + * flatAccordion + * toggleMenu + * flatProgressBar + * no_link + * flcustominput + * tabs + * delete_img + * Preloader + * hoverActiveGallery + * clickSearchForm + * popUpLightBox + * footer + * sidebar_mobie + * onClickViewListingType +*/ + +; (function ($) { + + "use strict"; + + var isMobile = { + Android: function () { + return navigator.userAgent.match(/Android/i); + }, + BlackBerry: function () { + return navigator.userAgent.match(/BlackBerry/i); + }, + iOS: function () { + return navigator.userAgent.match(/iPhone|iPad|iPod/i); + }, + Opera: function () { + return navigator.userAgent.match(/Opera Mini/i); + }, + Windows: function () { + return navigator.userAgent.match(/IEMobile/i); + }, + any: function () { + return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); + } + }; + + var flatAccordion = function () { + var args = { duration: 600 }; + $('.flat-toggle .toggle-title.active').siblings('.toggle-content').show(); + $('.flat-toggle.enable .toggle-title').on('click', function () { + $(this).closest('.flat-toggle').find('.toggle-content').slideToggle(args); + $(this).toggleClass('active'); + }); + + $('.flat-accordion .toggle-title').on('click', function () { + if (!$(this).is('.active')) { + $(this).closest('.flat-accordion').find('.toggle-title.active').toggleClass('active').next().slideToggle(args); + $(this).toggleClass('active'); + $(this).next().slideToggle(args); + } else { + $(this).toggleClass('active'); + $(this).next().slideToggle(args); + } + }); + + $('.flat-accordion .flat-toggle').on('click', function () { + if (!$(this).is('.activ')) { + $(this).find('.flat-toggle.activ').toggleClass('activ').next(); + $(this).toggleClass('activ'); + } else { + $(this).toggleClass('activ'); + + } + }); + + }; + + var gotop = function () { + if ($('div').hasClass('progress-wrap')) { + var progressPath = document.querySelector('.progress-wrap path'); + var pathLength = progressPath.getTotalLength(); + progressPath.style.transition = progressPath.style.WebkitTransition = 'none'; + progressPath.style.strokeDasharray = pathLength + ' ' + pathLength; + progressPath.style.strokeDashoffset = pathLength; + progressPath.getBoundingClientRect(); + progressPath.style.transition = progressPath.style.WebkitTransition = 'stroke-dashoffset 10ms linear'; + var updateprogress = function () { + var scroll = $(window).scrollTop(); + var height = $(document).height() - $(window).height(); + var progress = pathLength - (scroll * pathLength / height); + progressPath.style.strokeDashoffset = progress; + } + updateprogress(); + $(window).scroll(updateprogress); + var offset = 150; + var duration = 300; + jQuery(window).on('scroll', function () { + if (jQuery(this).scrollTop() > offset) { + jQuery('.progress-wrap').addClass('active-progress'); + } else { + jQuery('.progress-wrap').removeClass('active-progress'); + } + }); + jQuery('.progress-wrap').on('click', function (event) { + event.preventDefault(); + jQuery('html, body').animate({ scrollTop: 0 }, duration); + return false; + }) + } + } + + new WOW().init(); + + var toggleMenu = function () { + $(".header-menu").on("click", function () { + $(".side-menu__block").addClass("active"); + }); + + $(".side-menu__block-overlay,.side-menu__toggler, .scrollToLink").on( + "click", + function (e) { + $(".side-menu__block").removeClass("active"); + e.preventDefault(); + } + ); + } + + var topSearch = function () { + + $(document).on('click', function (e) { + var clickID = e.target.id; if ((clickID !== 's')) { + $('.top-search').removeClass('show'); + } + }); + $(document).on('click', function (e) { + var clickID = e.target.class; if ((clickID !== 'a111')) { + $('.show-search').removeClass('active'); + } + }); + + $('.show-search').on('click', function (event) { + event.stopPropagation(); + }); + $('.search-form').on('click', function (event) { + event.stopPropagation(); + }); + $('.show-search').on('click', function (event) { + if (!$('.top-search').hasClass("show")) { + $('.top-search').addClass('show'); + event.preventDefault(); + } + else + $('.top-search').removeClass('show'); + event.preventDefault(); + if (!$('.show-search').hasClass("active")) + $('.show-search').addClass('active'); + else + $('.show-search').removeClass('active'); + }) + ; + } + + var flatProgressBar = function () { + $('.couter').appear(function () { + $('.chart').easyPieChart({ + easing: 'easeOut', + lineWidth: 3, + size: 68, + scaleColor: false, + barColor: '#FFF5E0', + trackColor: '#FFA920', + animate: 5000, + onStep: function (from, to, percent) { + $(this.el).find('.percent').text(Math.round(percent)); + }, + rotate: 0, + }); + + }, { + offset: 400 + }); + }; + + + var Preloader = function () { + setTimeout(function () { + $(".preload").fadeOut("slow", function () { + $(this).remove(); + }); + }, 100); + }; + + var no_link = function () { + $('a.nolink').on('click', function (e) { + e.preventDefault(); + }); + $('.icon_menu .icon a').on('click', function (e) { + e.preventDefault(); + }); + } + + var flcustominput = function () { + $("input[type=file]").change(function (e) { + $(this).parents(".uploadFile").find("#filename,#filename2").text(e.target.files[0].name); + }); + }; + + + var tabs = function () { + $('.flat-tabs').each(function () { + $(this).find('.content-tab').children().hide(); + $(this).find('.content-tab').children().first().show(); + $(this).find('.menu-tab').children('li').on('click', function () { + var liActive = $(this).index(); + var contentActive = $(this).siblings().removeClass('active').parents('.flat-tabs').find('.content-tab').children().eq(liActive); + contentActive.addClass('active').fadeIn("slow"); + contentActive.siblings().removeClass('active'); + $(this).addClass('active').parents('.flat-tabs').find('.content-tab').children().eq(liActive).siblings().hide(); + }); + }); + }; + + // img upload style 1 + $("#profileimg").click(function (e) { + $("#tf-upload-img").click(); + }); + + function fasterPreview(uploader) { + if (uploader.files && uploader.files[0]) { + $('#profileimg').attr('src', + window.URL.createObjectURL(uploader.files[0])); + } + } + + $("#tf-upload-img").change(function () { + fasterPreview(this); + }); + + // delete img + var delete_img = function (e) { + $(".remove-file").on("click", function (e) { + e.preventDefault(); + var $this = $(this); + $this.closest(".file-delete").remove(); + }); + }; + ; + var clickSearchForm = function () { + const widgetSearchForm = $(".wd-search-form"); + if (widgetSearchForm.length) { + $(".pull-right").on("click", function () { + widgetSearchForm.toggleClass("show"); + }); + $(document).on( + "click.pull-right, click.offcanvas-backdrop", + function (a) { + if ( + $(a.target).closest(".pull-right, .wd-search-form").length === 0 + ) { + widgetSearchForm.removeClass("show"); + } + } + ); + } + }; + + $(".toggle-password").click(function () { + + $(this).toggleClass("fa-eye fa-eye-slash"); + var input = $($(this).attr("toggle")); + if (input.attr("type") == "password") { + input.attr("type", "text"); + } else { + input.attr("type", "password"); + } + }); + $('.header-search-icon').addClass('closed'); + + $('.header-search-icon .search-icon').click(function (e) { + if ($('.header-search-icon').hasClass('closed')) { + $('.header-search-icon').removeClass('closed').addClass('opened'); + $('.header-search-icon, .wd-find-select').addClass('opened'); + $('#search-terms').focus(); + } else { + $('.header-search-icon').removeClass('opened').addClass('closed'); + $('.header-search-icon, .wd-find-select').removeClass('opened'); + } + }); + var hoverActiveGallery = function () { + if ($('.container-grid-gallery').length) { + $(document).ready(function () { + $('.listing-detail .tfcl-listing-info.style-grid .tfcl-light-gallery').click( + function () { + $(this).closest('.tfcl-listing-info').find('.tfcl-light-gallery').removeClass('active'); + $(this).addClass('active'); + } + ); + }); + } + } + + //tab-lisst + var onClickViewListingType = function () { + if ($('.category-filter').length > 0) { + $('.btn-view.grid').click(function (event) { + event.preventDefault(); + localStorage.setItem('VIEW_LISTING_TYPE', 'grid'); + checkViewListing(); + }); + $('.btn-view.list').click(function (event) { + event.preventDefault(); + localStorage.setItem('VIEW_LISTING_TYPE', 'list'); + checkViewListing(); + }); + } + }; + + var checkViewListing = function () { + if ($('.category-filter').length > 0) { + var type = localStorage.getItem('VIEW_LISTING_TYPE'); + switch (type) { + case 'grid': + $('.listing-list-car-wrap').find('.list-car-list-1').addClass('list-car-grid-1'); + $('.btn-view.grid').addClass('active'); + $('.btn-view.list').removeClass('active'); + break; + case 'list': + $('.listing-list-car-wrap').find('.list-car-list-1').removeClass('list-car-grid-1'); + $('.btn-view.list').addClass('active'); + $('.btn-view.grid').removeClass('active'); + break; + default: + break; + } + } + } + + var popUpLightBox = function () { + if ($(".lightbox-image").length) { + $(".lightbox-image").fancybox({ + openEffect: "fade", + closeEffect: "fade", + helpers: { + media: {}, + }, + }); + } + }; + + var width = $(window).width(); + if (width < 1500) { + $(".js-letters").removeClass("wow").show(); + + } + var footer = function () { + var args = { duration: 250 }; + $(".footer-heading-mobie").on("click", function () { + $(this).parent(".footer-col-block").toggleClass("open"); + if (!$(this).parent(".footer-col-block").is(".open")) { + $(this).next().slideUp(args); + } else { + $(this).next().slideDown(args); + } + }); + }; + var sidebar_mobie = function () { + $(".btn-siderbar-mobie-filter").on("click", function () { + $(".listing-sidebar").toggleClass("open"); + $(".overlay-siderbar-mobie").toggleClass("open"); + }); + $(".overlay-siderbar-mobie").on("click", function () { + $(".listing-sidebar").toggleClass("open"); + $(".overlay-siderbar-mobie").toggleClass("open"); + }); + }; + var RTL = function () { + if (localStorage.getItem("dir") === "rtl") { + $("html").attr("dir", "rtl"); + $("body").addClass("rtl"); + $("#toggle-rtl").text("ltr"); + } else { + $("html").attr("dir", "ltr"); + $("body").removeClass("rtl"); + $("#toggle-rtl").text("rtl"); + } + $("#toggle-rtl").on("click", function () { + if ($("html").attr("dir") === "rtl") { + localStorage.setItem("dir", "ltr"); + $("#toggle-rtl").text("rtl"); + } else { + localStorage.setItem("dir", "rtl"); + $("#toggle-rtl").text("ltr"); + } + location.reload(); + }); + }; + + var dark_light = function () { + if (localStorage.toggled === "dark-theme") { + $("body").addClass("dark-theme"); + $(".main-header:not(.style2) .logo-box img").attr({ src: 'assets/images/logo/logo2.png' }); + $(".mobile-menu .nav-logo img").attr({ src: 'assets/images/logo/logo2.png' }); + } else { + $("body").removeClass("dark-theme"); + $(".main-header:not(.style2) .logo-box img").attr({ src: 'assets/images/logo/logo.png' }); + $(".mobile-menu .nav-logo img").attr({ src: 'assets/images/logo/logo.png' }); + } + $("#theme-toggle").on("click", function () { + if ($("body").hasClass("dark-theme")) { + $("body").addClass("light-theme"); + $("body").removeClass("dark-theme"); + localStorage.toggled = "light-theme"; + $(".main-header:not(.style2) .logo-box img").attr({ src: 'assets/images/logo/logo.png' }); + $(".mobile-menu .nav-logo img").attr({ src: 'assets/images/logo/logo.png' }); + } else { + $("body").removeClass("light-theme"); + $("body").addClass("dark-theme"); + localStorage.toggled = "dark-theme"; + $(".main-header:not(.style2) .logo-box img").attr({ src: 'assets/images/logo/logo2.png' }); + $(".mobile-menu .nav-logo img").attr({ src: 'assets/images/logo/logo2.png' }); + } + }); + + $(".btn-setting").click(function () { + $(".popup-setting").toggleClass("show"); + }); + }; + + // Dom Ready + $(function () { + gotop(); + topSearch(); + flatAccordion(); + toggleMenu(); + flatProgressBar(); + no_link(); + flcustominput(); + tabs(); + delete_img(); + hoverActiveGallery(); + clickSearchForm(); + popUpLightBox(); + footer(); + sidebar_mobie(); + onClickViewListingType(); + dark_light(); + RTL(); + Preloader(); + }); + +})(jQuery); + diff --git a/apiferia/src/assets/js/swiper-bundle.min.js b/apiferia/src/assets/js/swiper-bundle.min.js new file mode 100644 index 00000000..4a7c79cb --- /dev/null +++ b/apiferia/src/assets/js/swiper-bundle.min.js @@ -0,0 +1,14 @@ +/** + * Swiper 6.8.1 + * Most modern mobile touch slider and framework with hardware accelerated transitions + * https://swiperjs.com + * + * Copyright 2014-2021 Vladimir Kharlampidi + * + * Released under the MIT License + * + * Released on: August 3, 2021 + */ + + !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e,t){for(var a=0;a0&&i(e[s],t[s])}))}var s={body:{},addEventListener:function(){},removeEventListener:function(){},activeElement:{blur:function(){},nodeName:""},querySelector:function(){return null},querySelectorAll:function(){return[]},getElementById:function(){return null},createEvent:function(){return{initEvent:function(){}}},createElement:function(){return{children:[],childNodes:[],style:{},setAttribute:function(){},getElementsByTagName:function(){return[]}}},createElementNS:function(){return{}},importNode:function(){return null},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function r(){var e="undefined"!=typeof document?document:{};return i(e,s),e}var n={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState:function(){},pushState:function(){},go:function(){},back:function(){}},CustomEvent:function(){return this},addEventListener:function(){},removeEventListener:function(){},getComputedStyle:function(){return{getPropertyValue:function(){return""}}},Image:function(){},Date:function(){},screen:{},setTimeout:function(){},clearTimeout:function(){},matchMedia:function(){return{}},requestAnimationFrame:function(e){return"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0)},cancelAnimationFrame:function(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function l(){var e="undefined"!=typeof window?window:{};return i(e,n),e}function o(e){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function d(e,t){return(d=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function p(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function u(e,t,a){return(u=p()?Reflect.construct:function(e,t,a){var i=[null];i.push.apply(i,t);var s=new(Function.bind.apply(e,i));return a&&d(s,a.prototype),s}).apply(null,arguments)}function c(e){var t="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||(a=e,-1===Function.toString.call(a).indexOf("[native code]")))return e;var a;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,i)}function i(){return u(e,arguments,o(this).constructor)}return i.prototype=Object.create(e.prototype,{constructor:{value:i,enumerable:!1,writable:!0,configurable:!0}}),d(i,e)})(e)}var h=function(e){var t,a;function i(t){var a,i,s;return a=e.call.apply(e,[this].concat(t))||this,i=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(a),s=i.__proto__,Object.defineProperty(i,"__proto__",{get:function(){return s},set:function(e){s.__proto__=e}}),a}return a=e,(t=i).prototype=Object.create(a.prototype),t.prototype.constructor=t,t.__proto__=a,i}(c(Array));function v(e){void 0===e&&(e=[]);var t=[];return e.forEach((function(e){Array.isArray(e)?t.push.apply(t,v(e)):t.push(e)})),t}function f(e,t){return Array.prototype.filter.call(e,t)}function m(e,t){var a=l(),i=r(),s=[];if(!t&&e instanceof h)return e;if(!e)return new h(s);if("string"==typeof e){var n=e.trim();if(n.indexOf("<")>=0&&n.indexOf(">")>=0){var o="div";0===n.indexOf("0})).length>0},toggleClass:function(){for(var e=arguments.length,t=new Array(e),a=0;a=0;h-=1){var v=c[h];r&&v.listener===r||r&&v.listener&&v.listener.dom7proxy&&v.listener.dom7proxy===r?(u.removeEventListener(d,v.proxyListener,n),c.splice(h,1)):r||(u.removeEventListener(d,v.proxyListener,n),c.splice(h,1))}}return this},trigger:function(){for(var e=l(),t=arguments.length,a=new Array(t),i=0;i0})),p.dispatchEvent(u),p.dom7EventData=[],delete p.dom7EventData}}return this},transitionEnd:function(e){var t=this;return e&&t.on("transitionend",(function a(i){i.target===this&&(e.call(this,i),t.off("transitionend",a))})),this},outerWidth:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetWidth+parseFloat(t.getPropertyValue("margin-right"))+parseFloat(t.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){var t=this.styles();return this[0].offsetHeight+parseFloat(t.getPropertyValue("margin-top"))+parseFloat(t.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){var e=l();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){var e=l(),t=r(),a=this[0],i=a.getBoundingClientRect(),s=t.body,n=a.clientTop||s.clientTop||0,o=a.clientLeft||s.clientLeft||0,d=a===e?e.scrollY:a.scrollTop,p=a===e?e.scrollX:a.scrollLeft;return{top:i.top+d-n,left:i.left+p-o}}return null},css:function(e,t){var a,i=l();if(1===arguments.length){if("string"!=typeof e){for(a=0;at-1)return m([]);if(e<0){var a=t+e;return m(a<0?[]:[this[a]])}return m([this[e]])},append:function(){for(var e,t=r(),a=0;a=0;a-=1)this[t].insertBefore(s.childNodes[a],this[t].childNodes[0])}else if(e instanceof h)for(a=0;a0?e?this[0].nextElementSibling&&m(this[0].nextElementSibling).is(e)?m([this[0].nextElementSibling]):m([]):this[0].nextElementSibling?m([this[0].nextElementSibling]):m([]):m([])},nextAll:function(e){var t=[],a=this[0];if(!a)return m([]);for(;a.nextElementSibling;){var i=a.nextElementSibling;e?m(i).is(e)&&t.push(i):t.push(i),a=i}return m(t)},prev:function(e){if(this.length>0){var t=this[0];return e?t.previousElementSibling&&m(t.previousElementSibling).is(e)?m([t.previousElementSibling]):m([]):t.previousElementSibling?m([t.previousElementSibling]):m([])}return m([])},prevAll:function(e){var t=[],a=this[0];if(!a)return m([]);for(;a.previousElementSibling;){var i=a.previousElementSibling;e?m(i).is(e)&&t.push(i):t.push(i),a=i}return m(t)},parent:function(e){for(var t=[],a=0;a6&&(i=i.split(", ").map((function(e){return e.replace(",",".")})).join(", ")),s=new r.WebKitCSSMatrix("none"===i?"":i)):a=(s=n.MozTransform||n.OTransform||n.MsTransform||n.msTransform||n.transform||n.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,")).toString().split(","),"x"===t&&(i=r.WebKitCSSMatrix?s.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=r.WebKitCSSMatrix?s.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function C(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function S(e){return"undefined"!=typeof window&&void 0!==window.HTMLElement?e instanceof HTMLElement:e&&(1===e.nodeType||11===e.nodeType)}function M(){for(var e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"],a=1;a=0,observer:"MutationObserver"in e||"WebkitMutationObserver"in e,passiveListener:function(){var t=!1;try{var a=Object.defineProperty({},"passive",{get:function(){t=!0}});e.addEventListener("testPassiveListener",null,a)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),g}function L(e){return void 0===e&&(e={}),b||(b=function(e){var t=(void 0===e?{}:e).userAgent,a=$(),i=l(),s=i.navigator.platform,r=t||i.navigator.userAgent,n={ios:!1,android:!1},o=i.screen.width,d=i.screen.height,p=r.match(/(Android);?[\s\/]+([\d.]+)?/),u=r.match(/(iPad).*OS\s([\d_]+)/),c=r.match(/(iPod)(.*OS\s([\d_]+))?/),h=!u&&r.match(/(iPhone\sOS|iOS)\s([\d_]+)/),v="Win32"===s,f="MacIntel"===s;return!u&&f&&a.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(o+"x"+d)>=0&&((u=r.match(/(Version)\/([\d.]+)/))||(u=[0,1,"13_0_0"]),f=!1),p&&!v&&(n.os="android",n.android=!0),(u||h||c)&&(n.os="ios",n.ios=!0),n}(e)),b}function I(){return w||(w=function(){var e,t=l();return{isEdge:!!t.navigator.userAgent.match(/Edge/g),isSafari:(e=t.navigator.userAgent.toLowerCase(),e.indexOf("safari")>=0&&e.indexOf("chrome")<0&&e.indexOf("android")<0),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(t.navigator.userAgent)}}()),w}Object.keys(y).forEach((function(e){Object.defineProperty(m.fn,e,{value:y[e],writable:!0})}));var O={name:"resize",create:function(){var e=this;M(e,{resize:{observer:null,createObserver:function(){e&&!e.destroyed&&e.initialized&&(e.resize.observer=new ResizeObserver((function(t){var a=e.width,i=e.height,s=a,r=i;t.forEach((function(t){var a=t.contentBoxSize,i=t.contentRect,n=t.target;n&&n!==e.el||(s=i?i.width:(a[0]||a).inlineSize,r=i?i.height:(a[0]||a).blockSize)})),s===a&&r===i||e.resize.resizeHandler()})),e.resize.observer.observe(e.el))},removeObserver:function(){e.resize.observer&&e.resize.observer.unobserve&&e.el&&(e.resize.observer.unobserve(e.el),e.resize.observer=null)},resizeHandler:function(){e&&!e.destroyed&&e.initialized&&(e.emit("beforeResize"),e.emit("resize"))},orientationChangeHandler:function(){e&&!e.destroyed&&e.initialized&&e.emit("orientationchange")}}})},on:{init:function(e){var t=l();e.params.resizeObserver&&void 0!==l().ResizeObserver?e.resize.createObserver():(t.addEventListener("resize",e.resize.resizeHandler),t.addEventListener("orientationchange",e.resize.orientationChangeHandler))},destroy:function(e){var t=l();e.resize.removeObserver(),t.removeEventListener("resize",e.resize.resizeHandler),t.removeEventListener("orientationchange",e.resize.orientationChangeHandler)}}},A={attach:function(e,t){void 0===t&&(t={});var a=l(),i=this,s=new(a.MutationObserver||a.WebkitMutationObserver)((function(e){if(1!==e.length){var t=function(){i.emit("observerUpdate",e[0])};a.requestAnimationFrame?a.requestAnimationFrame(t):a.setTimeout(t,0)}else i.emit("observerUpdate",e[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}),i.observer.observers.push(s)},init:function(){var e=this;if(e.support.observer&&e.params.observer){if(e.params.observeParents)for(var t=e.$el.parents(),a=0;a0||s.isTouched&&s.isMoved))){!!n.noSwipingClass&&""!==n.noSwipingClass&&d.target&&d.target.shadowRoot&&e.path&&e.path[0]&&(p=m(e.path[0]));var u=n.noSwipingSelector?n.noSwipingSelector:"."+n.noSwipingClass,c=!(!d.target||!d.target.shadowRoot);if(n.noSwiping&&(c?function(e,t){return void 0===t&&(t=this),function t(a){return a&&a!==r()&&a!==l()?(a.assignedSlot&&(a=a.assignedSlot),a.closest(e)||t(a.getRootNode().host)):null}(t)}(u,d.target):p.closest(u)[0]))t.allowClick=!0;else if(!n.swipeHandler||p.closest(n.swipeHandler)[0]){o.currentX="touchstart"===d.type?d.targetTouches[0].pageX:d.pageX,o.currentY="touchstart"===d.type?d.targetTouches[0].pageY:d.pageY;var h=o.currentX,v=o.currentY,f=n.edgeSwipeDetection||n.iOSEdgeSwipeDetection,g=n.edgeSwipeThreshold||n.iOSEdgeSwipeThreshold;if(f&&(h<=g||h>=i.innerWidth-g)){if("prevent"!==f)return;e.preventDefault()}if(M(s,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=h,o.startY=v,s.touchStartTime=x(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,n.threshold>0&&(s.allowThresholdMove=!1),"touchstart"!==d.type){var b=!0;p.is(s.focusableElements)&&(b=!1),a.activeElement&&m(a.activeElement).is(s.focusableElements)&&a.activeElement!==p[0]&&a.activeElement.blur();var w=b&&t.allowTouchMove&&n.touchStartPreventDefault;!n.touchStartForcePreventDefault&&!w||p[0].isContentEditable||d.preventDefault()}t.emit("touchStart",d)}}}}function G(e){var t=r(),a=this,i=a.touchEventsData,s=a.params,n=a.touches,l=a.rtlTranslate;if(a.enabled){var o=e;if(o.originalEvent&&(o=o.originalEvent),i.isTouched){if(!i.isTouchEvent||"touchmove"===o.type){var d="touchmove"===o.type&&o.targetTouches&&(o.targetTouches[0]||o.changedTouches[0]),p="touchmove"===o.type?d.pageX:o.pageX,u="touchmove"===o.type?d.pageY:o.pageY;if(o.preventedByNestedSwiper)return n.startX=p,void(n.startY=u);if(!a.allowTouchMove)return a.allowClick=!1,void(i.isTouched&&(M(n,{startX:p,startY:u,currentX:p,currentY:u}),i.touchStartTime=x()));if(i.isTouchEvent&&s.touchReleaseOnEdges&&!s.loop)if(a.isVertical()){if(un.startY&&a.translate>=a.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(pn.startX&&a.translate>=a.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&o.target===t.activeElement&&m(o.target).is(i.focusableElements))return i.isMoved=!0,void(a.allowClick=!1);if(i.allowTouchCallbacks&&a.emit("touchMove",o),!(o.targetTouches&&o.targetTouches.length>1)){n.currentX=p,n.currentY=u;var c=n.currentX-n.startX,h=n.currentY-n.startY;if(!(a.params.threshold&&Math.sqrt(Math.pow(c,2)+Math.pow(h,2))=25&&(v=180*Math.atan2(Math.abs(h),Math.abs(c))/Math.PI,i.isScrolling=a.isHorizontal()?v>s.touchAngle:90-v>s.touchAngle);if(i.isScrolling&&a.emit("touchMoveOpposite",o),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)i.isTouched=!1;else if(i.startMoving){a.allowClick=!1,!s.cssMode&&o.cancelable&&o.preventDefault(),s.touchMoveStopPropagation&&!s.nested&&o.stopPropagation(),i.isMoved||(s.loop&&a.loopFix(),i.startTranslate=a.getTranslate(),a.setTransition(0),a.animating&&a.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!s.grabCursor||!0!==a.allowSlideNext&&!0!==a.allowSlidePrev||a.setGrabCursor(!0),a.emit("sliderFirstMove",o)),a.emit("sliderMove",o),i.isMoved=!0;var f=a.isHorizontal()?c:h;n.diff=f,f*=s.touchRatio,l&&(f=-f),a.swipeDirection=f>0?"prev":"next",i.currentTranslate=f+i.startTranslate;var g=!0,b=s.resistanceRatio;if(s.touchReleaseOnEdges&&(b=0),f>0&&i.currentTranslate>a.minTranslate()?(g=!1,s.resistance&&(i.currentTranslate=a.minTranslate()-1+Math.pow(-a.minTranslate()+i.startTranslate+f,b))):f<0&&i.currentTranslatei.startTranslate&&(i.currentTranslate=i.startTranslate),a.allowSlidePrev||a.allowSlideNext||(i.currentTranslate=i.startTranslate),s.threshold>0){if(!(Math.abs(f)>s.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=a.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}s.followFinger&&!s.cssMode&&((s.freeMode||s.watchSlidesProgress||s.watchSlidesVisibility)&&(a.updateActiveIndex(),a.updateSlidesClasses()),s.freeMode&&(0===i.velocities.length&&i.velocities.push({position:n[a.isHorizontal()?"startX":"startY"],time:i.touchStartTime}),i.velocities.push({position:n[a.isHorizontal()?"currentX":"currentY"],time:x()})),a.updateProgress(i.currentTranslate),a.setTranslate(i.currentTranslate))}}}}}else i.startMoving&&i.isScrolling&&a.emit("touchMoveOpposite",o)}}function B(e){var t=this,a=t.touchEventsData,i=t.params,s=t.touches,r=t.rtlTranslate,n=t.$wrapperEl,l=t.slidesGrid,o=t.snapGrid;if(t.enabled){var d=e;if(d.originalEvent&&(d=d.originalEvent),a.allowTouchCallbacks&&t.emit("touchEnd",d),a.allowTouchCallbacks=!1,!a.isTouched)return a.isMoved&&i.grabCursor&&t.setGrabCursor(!1),a.isMoved=!1,void(a.startMoving=!1);i.grabCursor&&a.isMoved&&a.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);var p,u=x(),c=u-a.touchStartTime;if(t.allowClick&&(t.updateClickedSlide(d),t.emit("tap click",d),c<300&&u-a.lastClickTime<300&&t.emit("doubleTap doubleClick",d)),a.lastClickTime=x(),E((function(){t.destroyed||(t.allowClick=!0)})),!a.isTouched||!a.isMoved||!t.swipeDirection||0===s.diff||a.currentTranslate===a.startTranslate)return a.isTouched=!1,a.isMoved=!1,void(a.startMoving=!1);if(a.isTouched=!1,a.isMoved=!1,a.startMoving=!1,p=i.followFinger?r?t.translate:-t.translate:-a.currentTranslate,!i.cssMode)if(i.freeMode){if(p<-t.minTranslate())return void t.slideTo(t.activeIndex);if(p>-t.maxTranslate())return void(t.slides.length1){var h=a.velocities.pop(),v=a.velocities.pop(),f=h.position-v.position,m=h.time-v.time;t.velocity=f/m,t.velocity/=2,Math.abs(t.velocity)150||x()-h.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=i.freeModeMomentumVelocityRatio,a.velocities.length=0;var g=1e3*i.freeModeMomentumRatio,b=t.velocity*g,w=t.translate+b;r&&(w=-w);var y,T,C=!1,S=20*Math.abs(t.velocity)*i.freeModeMomentumBounceRatio;if(wt.minTranslate())i.freeModeMomentumBounce?(w-t.minTranslate()>S&&(w=t.minTranslate()+S),y=t.minTranslate(),C=!0,a.allowMomentumBounce=!0):w=t.minTranslate(),i.loop&&i.centeredSlides&&(T=!0);else if(i.freeModeSticky){for(var M,z=0;z-w){M=z;break}w=-(w=Math.abs(o[M]-w)=i.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}else{for(var $=0,L=t.slidesSizesGrid[0],I=0;I=l[I]&&p=l[I]&&($=I,L=l[l.length-1]-l[l.length-2])}var A=(p-l[$])/L,D=$i.longSwipesMs){if(!i.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(A>=i.longSwipesRatio?t.slideTo($+D):t.slideTo($)),"prev"===t.swipeDirection&&(A>1-i.longSwipesRatio?t.slideTo($+D):t.slideTo($))}else{if(!i.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(d.target===t.navigation.nextEl||d.target===t.navigation.prevEl)?d.target===t.navigation.nextEl?t.slideTo($+D):t.slideTo($):("next"===t.swipeDirection&&t.slideTo($+D),"prev"===t.swipeDirection&&t.slideTo($))}}}}function H(){var e=this,t=e.params,a=e.el;if(!a||0!==a.offsetWidth){t.breakpoints&&e.setBreakpoint();var i=e.allowSlideNext,s=e.allowSlidePrev,r=e.snapGrid;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=s,e.allowSlideNext=i,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}}function R(e){var t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function X(){var e=this,t=e.wrapperEl,a=e.rtlTranslate;if(e.enabled){e.previousTranslate=e.translate,e.isHorizontal()?e.translate=a?t.scrollWidth-t.offsetWidth-t.scrollLeft:-t.scrollLeft:e.translate=-t.scrollTop,-0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();var i=e.maxTranslate()-e.minTranslate();(0===i?0:(e.translate-e.minTranslate())/i)!==e.progress&&e.updateProgress(a?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}}var Y=!1;function V(){}var W={init:!0,direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!1,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,slidesPerGroupSkip:0,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!1,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1},F={modular:{useParams:function(e){var t=this;t.modules&&Object.keys(t.modules).forEach((function(a){var i=t.modules[a];i.params&&M(e,i.params)}))},useModules:function(e){void 0===e&&(e={});var t=this;t.modules&&Object.keys(t.modules).forEach((function(a){var i=t.modules[a],s=e[a]||{};i.on&&t.on&&Object.keys(i.on).forEach((function(e){t.on(e,i.on[e])})),i.create&&i.create.bind(t)(s)}))}},eventsEmitter:{on:function(e,t,a){var i=this;if("function"!=typeof t)return i;var s=a?"unshift":"push";return e.split(" ").forEach((function(e){i.eventsListeners[e]||(i.eventsListeners[e]=[]),i.eventsListeners[e][s](t)})),i},once:function(e,t,a){var i=this;if("function"!=typeof t)return i;function s(){i.off(e,s),s.__emitterProxy&&delete s.__emitterProxy;for(var a=arguments.length,r=new Array(a),n=0;n=0&&t.eventsAnyListeners.splice(a,1),t},off:function(e,t){var a=this;return a.eventsListeners?(e.split(" ").forEach((function(e){void 0===t?a.eventsListeners[e]=[]:a.eventsListeners[e]&&a.eventsListeners[e].forEach((function(i,s){(i===t||i.__emitterProxy&&i.__emitterProxy===t)&&a.eventsListeners[e].splice(s,1)}))})),a):a},emit:function(){var e,t,a,i=this;if(!i.eventsListeners)return i;for(var s=arguments.length,r=new Array(s),n=0;n=0&&(w=parseFloat(w.replace("%",""))/100*r),e.virtualSize=-w,n?p.css({marginLeft:"",marginBottom:"",marginTop:""}):p.css({marginRight:"",marginBottom:"",marginTop:""}),i.slidesPerColumn>1&&(T=Math.floor(u/i.slidesPerColumn)===u/e.params.slidesPerColumn?u:Math.ceil(u/i.slidesPerColumn)*i.slidesPerColumn,"auto"!==i.slidesPerView&&"row"===i.slidesPerColumnFill&&(T=Math.max(T,i.slidesPerView*i.slidesPerColumn)));for(var S,z,P,k=i.slidesPerColumn,$=T/k,L=Math.floor(u/i.slidesPerColumn),I=0;I1){var A=void 0,D=void 0,N=void 0;if("row"===i.slidesPerColumnFill&&i.slidesPerGroup>1){var G=Math.floor(I/(i.slidesPerGroup*i.slidesPerColumn)),B=I-i.slidesPerColumn*i.slidesPerGroup*G,H=0===G?i.slidesPerGroup:Math.min(Math.ceil((u-G*k*i.slidesPerGroup)/k),i.slidesPerGroup);A=(D=B-(N=Math.floor(B/H))*H+G*i.slidesPerGroup)+N*T/k,O.css({"-webkit-box-ordinal-group":A,"-moz-box-ordinal-group":A,"-ms-flex-order":A,"-webkit-order":A,order:A})}else"column"===i.slidesPerColumnFill?(N=I-(D=Math.floor(I/k))*k,(D>L||D===L&&N===k-1)&&(N+=1)>=k&&(N=0,D+=1)):D=I-(N=Math.floor(I/$))*$;O.css(t("margin-top"),0!==N?i.spaceBetween&&i.spaceBetween+"px":"")}if("none"!==O.css("display")){if("auto"===i.slidesPerView){var R=getComputedStyle(O[0]),X=O[0].style.transform,Y=O[0].style.webkitTransform;if(X&&(O[0].style.transform="none"),Y&&(O[0].style.webkitTransform="none"),i.roundLengths)C=e.isHorizontal()?O.outerWidth(!0):O.outerHeight(!0);else{var V=a(R,"width"),W=a(R,"padding-left"),F=a(R,"padding-right"),_=a(R,"margin-left"),q=a(R,"margin-right"),j=R.getPropertyValue("box-sizing");if(j&&"border-box"===j)C=V+_+q;else{var U=O[0],K=U.clientWidth;C=V+W+F+_+q+(U.offsetWidth-K)}}X&&(O[0].style.transform=X),Y&&(O[0].style.webkitTransform=Y),i.roundLengths&&(C=Math.floor(C))}else C=(r-(i.slidesPerView-1)*w)/i.slidesPerView,i.roundLengths&&(C=Math.floor(C)),p[I]&&(p[I].style[t("width")]=C+"px");p[I]&&(p[I].swiperSlideSize=C),v.push(C),i.centeredSlides?(y=y+C/2+E/2+w,0===E&&0!==I&&(y=y-r/2-w),0===I&&(y=y-r/2-w),Math.abs(y)<.001&&(y=0),i.roundLengths&&(y=Math.floor(y)),x%i.slidesPerGroup==0&&c.push(y),h.push(y)):(i.roundLengths&&(y=Math.floor(y)),(x-Math.min(e.params.slidesPerGroupSkip,x))%e.params.slidesPerGroup==0&&c.push(y),h.push(y),y=y+C+w),e.virtualSize+=C+w,E=C,x+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+m,n&&l&&("slide"===i.effect||"coverflow"===i.effect)&&s.css({width:e.virtualSize+i.spaceBetween+"px"}),i.setWrapperSize)s.css(((z={})[t("width")]=e.virtualSize+i.spaceBetween+"px",z));if(i.slidesPerColumn>1)if(e.virtualSize=(C+i.spaceBetween)*T,e.virtualSize=Math.ceil(e.virtualSize/i.slidesPerColumn)-i.spaceBetween,s.css(((P={})[t("width")]=e.virtualSize+i.spaceBetween+"px",P)),i.centeredSlides){S=[];for(var Z=0;Z1&&c.push(e.virtualSize-r)}if(0===c.length&&(c=[0]),0!==i.spaceBetween){var te,ae=e.isHorizontal()&&n?"marginLeft":t("marginRight");p.filter((function(e,t){return!i.cssMode||t!==p.length-1})).css(((te={})[ae]=w+"px",te))}if(i.centeredSlides&&i.centeredSlidesBounds){var ie=0;v.forEach((function(e){ie+=e+(i.spaceBetween?i.spaceBetween:0)}));var se=(ie-=i.spaceBetween)-r;c=c.map((function(e){return e<0?-f:e>se?se+m:e}))}if(i.centerInsufficientSlides){var re=0;if(v.forEach((function(e){re+=e+(i.spaceBetween?i.spaceBetween:0)})),(re-=i.spaceBetween)1)if(a.params.centeredSlides)a.visibleSlides.each((function(e){i.push(e)}));else for(t=0;ta.slides.length&&!s)break;i.push(n(l))}else i.push(n(a.activeIndex));for(t=0;tr?o:r}r&&a.$wrapperEl.css("height",r+"px")},updateSlidesOffset:function(){for(var e=this.slides,t=0;t=0&&d1&&p<=t.size||d<=0&&p>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(n),i.eq(n).addClass(a.slideVisibleClass))}l.progress=s?-o:o}t.visibleSlides=m(t.visibleSlides)}},updateProgress:function(e){var t=this;if(void 0===e){var a=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*a||0}var i=t.params,s=t.maxTranslate()-t.minTranslate(),r=t.progress,n=t.isBeginning,l=t.isEnd,o=n,d=l;0===s?(r=0,n=!0,l=!0):(n=(r=(e-t.minTranslate())/s)<=0,l=r>=1),M(t,{progress:r,isBeginning:n,isEnd:l}),(i.watchSlidesProgress||i.watchSlidesVisibility||i.centeredSlides&&i.autoHeight)&&t.updateSlidesProgress(e),n&&!o&&t.emit("reachBeginning toEdge"),l&&!d&&t.emit("reachEnd toEdge"),(o&&!n||d&&!l)&&t.emit("fromEdge"),t.emit("progress",r)},updateSlidesClasses:function(){var e,t=this,a=t.slides,i=t.params,s=t.$wrapperEl,r=t.activeIndex,n=t.realIndex,l=t.virtual&&i.virtual.enabled;a.removeClass(i.slideActiveClass+" "+i.slideNextClass+" "+i.slidePrevClass+" "+i.slideDuplicateActiveClass+" "+i.slideDuplicateNextClass+" "+i.slideDuplicatePrevClass),(e=l?t.$wrapperEl.find("."+i.slideClass+'[data-swiper-slide-index="'+r+'"]'):a.eq(r)).addClass(i.slideActiveClass),i.loop&&(e.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+n+'"]').addClass(i.slideDuplicateActiveClass));var o=e.nextAll("."+i.slideClass).eq(0).addClass(i.slideNextClass);i.loop&&0===o.length&&(o=a.eq(0)).addClass(i.slideNextClass);var d=e.prevAll("."+i.slideClass).eq(0).addClass(i.slidePrevClass);i.loop&&0===d.length&&(d=a.eq(-1)).addClass(i.slidePrevClass),i.loop&&(o.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+o.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicateNextClass),d.hasClass(i.slideDuplicateClass)?s.children("."+i.slideClass+":not(."+i.slideDuplicateClass+')[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass):s.children("."+i.slideClass+"."+i.slideDuplicateClass+'[data-swiper-slide-index="'+d.attr("data-swiper-slide-index")+'"]').addClass(i.slideDuplicatePrevClass)),t.emitSlidesClasses()},updateActiveIndex:function(e){var t,a=this,i=a.rtlTranslate?a.translate:-a.translate,s=a.slidesGrid,r=a.snapGrid,n=a.params,l=a.activeIndex,o=a.realIndex,d=a.snapIndex,p=e;if(void 0===p){for(var u=0;u=s[u]&&i=s[u]&&i=s[u]&&(p=u);n.normalizeSlideIndex&&(p<0||void 0===p)&&(p=0)}if(r.indexOf(i)>=0)t=r.indexOf(i);else{var c=Math.min(n.slidesPerGroupSkip,p);t=c+Math.floor((p-c)/n.slidesPerGroup)}if(t>=r.length&&(t=r.length-1),p!==l){var h=parseInt(a.slides.eq(p).attr("data-swiper-slide-index")||p,10);M(a,{snapIndex:t,realIndex:h,previousIndex:l,activeIndex:p}),a.emit("activeIndexChange"),a.emit("snapIndexChange"),o!==h&&a.emit("realIndexChange"),(a.initialized||a.params.runCallbacksOnInit)&&a.emit("slideChange")}else t!==d&&(a.snapIndex=t,a.emit("snapIndexChange"))},updateClickedSlide:function(e){var t,a=this,i=a.params,s=m(e.target).closest("."+i.slideClass)[0],r=!1;if(s)for(var n=0;nd?d:i&&er?"next":is?"next":i=d.length&&(g=d.length-1),(c||o.initialSlide||0)===(u||0)&&a&&n.emit("beforeSlideChangeStart");var b,w=-d[g];if(n.updateProgress(w),o.normalizeSlideIndex)for(var y=0;y=x&&E=x&&E=x&&(l=y)}if(n.initialized&&l!==c){if(!n.allowSlideNext&&wn.translate&&w>n.maxTranslate()&&(c||0)!==l)return!1}if(b=l>c?"next":l=e&&(h=e)})),void 0!==h&&(p=l.indexOf(h))<0&&(p=i.activeIndex-1),i.slideTo(p,e,t,a)},slideReset:function(e,t,a){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,a)},slideToClosest:function(e,t,a,i){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===i&&(i=.5);var s=this,r=s.activeIndex,n=Math.min(s.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/s.params.slidesPerGroup),o=s.rtlTranslate?s.translate:-s.translate;if(o>=s.snapGrid[l]){var d=s.snapGrid[l];o-d>(s.snapGrid[l+1]-d)*i&&(r+=s.params.slidesPerGroup)}else{var p=s.snapGrid[l-1];o-p<=(s.snapGrid[l]-p)*i&&(r-=s.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,s.slidesGrid.length-1),s.slideTo(r,e,t,a)},slideToClickedSlide:function(){var e,t=this,a=t.params,i=t.$wrapperEl,s="auto"===a.slidesPerView?t.slidesPerViewDynamic():a.slidesPerView,r=t.clickedIndex;if(a.loop){if(t.animating)return;e=parseInt(m(t.clickedSlide).attr("data-swiper-slide-index"),10),a.centeredSlides?rt.slides.length-t.loopedSlides+s/2?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),E((function(){t.slideTo(r)}))):t.slideTo(r):r>t.slides.length-s?(t.loopFix(),r=i.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]:not(.'+a.slideDuplicateClass+")").eq(0).index(),E((function(){t.slideTo(r)}))):t.slideTo(r)}else t.slideTo(r)}},loop:{loopCreate:function(){var e=this,t=r(),a=e.params,i=e.$wrapperEl;i.children("."+a.slideClass+"."+a.slideDuplicateClass).remove();var s=i.children("."+a.slideClass);if(a.loopFillGroupWithBlank){var n=a.slidesPerGroup-s.length%a.slidesPerGroup;if(n!==a.slidesPerGroup){for(var l=0;ls.length&&(e.loopedSlides=s.length);var d=[],p=[];s.each((function(t,a){var i=m(t);a=s.length-e.loopedSlides&&d.push(t),i.attr("data-swiper-slide-index",a)}));for(var u=0;u=0;c-=1)i.prepend(m(d[c].cloneNode(!0)).addClass(a.slideDuplicateClass))},loopFix:function(){var e=this;e.emit("beforeLoopFix");var t,a=e.activeIndex,i=e.slides,s=e.loopedSlides,r=e.allowSlidePrev,n=e.allowSlideNext,l=e.snapGrid,o=e.rtlTranslate;e.allowSlidePrev=!0,e.allowSlideNext=!0;var d=-l[a]-e.getTranslate();if(a=i.length-s){t=-i.length+a+s,t+=s,e.slideTo(t,0,!1,!0)&&0!==d&&e.setTranslate((o?-e.translate:e.translate)-d)}e.allowSlidePrev=r,e.allowSlideNext=n,e.emit("loopFix")},loopDestroy:function(){var e=this,t=e.$wrapperEl,a=e.params,i=e.slides;t.children("."+a.slideClass+"."+a.slideDuplicateClass+",."+a.slideClass+"."+a.slideBlankClass).remove(),i.removeAttr("data-swiper-slide-index")}},grabCursor:{setGrabCursor:function(e){var t=this;if(!(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)){var a=t.el;a.style.cursor="move",a.style.cursor=e?"-webkit-grabbing":"-webkit-grab",a.style.cursor=e?"-moz-grabbin":"-moz-grab",a.style.cursor=e?"grabbing":"grab"}},unsetGrabCursor:function(){var e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e.el.style.cursor="")}},manipulation:{appendSlide:function(e){var t=this,a=t.$wrapperEl,i=t.params;if(i.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(var s=0;s=n)a.appendSlide(t);else{for(var l=r>e?r+1:r,o=[],d=n-1;d>=e;d-=1){var p=a.slides.eq(d);p.remove(),o.unshift(p)}if("object"==typeof t&&"length"in t){for(var u=0;ue?r+t.length:r}else i.append(t);for(var c=0;c1,c=p.slidesPerColumn>1,h=r.enabled;u&&!c?(n.removeClass(r.containerModifierClass+"multirow "+r.containerModifierClass+"multirow-column"),e.emitContainerClasses()):!u&&c&&(n.addClass(r.containerModifierClass+"multirow"),(p.slidesPerColumnFill&&"column"===p.slidesPerColumnFill||!p.slidesPerColumnFill&&"column"===r.slidesPerColumnFill)&&n.addClass(r.containerModifierClass+"multirow-column"),e.emitContainerClasses());var v=p.direction&&p.direction!==r.direction,f=r.loop&&(p.slidesPerView!==r.slidesPerView||v);v&&a&&e.changeDirection(),M(e.params,p);var m=e.params.enabled;M(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),h&&!m?e.disable():!h&&m&&e.enable(),e.currentBreakpoint=o,e.emit("_beforeBreakpoint",p),f&&a&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-s+e.loopedSlides,0,!1)),e.emit("breakpoint",p)}}},getBreakpoint:function(e,t,a){if(void 0===t&&(t="window"),e&&("container"!==t||a)){var i=!1,s=l(),r="window"===t?s.innerHeight:a.clientHeight,n=Object.keys(e).map((function(e){if("string"==typeof e&&0===e.indexOf("@")){var t=parseFloat(e.substr(1));return{value:r*t,point:e}}return{value:e,point:e}}));n.sort((function(e,t){return parseInt(e.value,10)-parseInt(t.value,10)}));for(var o=0;o0&&t.slidesOffsetBefore+t.spaceBetween*(e.slides.length-1)+e.slides[0].offsetWidth*e.slides.length;t.slidesOffsetBefore&&t.slidesOffsetAfter&&i?e.isLocked=i<=e.size:e.isLocked=1===e.snapGrid.length,e.allowSlideNext=!e.isLocked,e.allowSlidePrev=!e.isLocked,a!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock"),a&&a!==e.isLocked&&(e.isEnd=!1,e.navigation&&e.navigation.update())}},classes:{addClasses:function(){var e,t,a,i=this,s=i.classNames,r=i.params,n=i.rtl,l=i.$el,o=i.device,d=i.support,p=(e=["initialized",r.direction,{"pointer-events":d.pointerEvents&&!d.touch},{"free-mode":r.freeMode},{autoheight:r.autoHeight},{rtl:n},{multirow:r.slidesPerColumn>1},{"multirow-column":r.slidesPerColumn>1&&"column"===r.slidesPerColumnFill},{android:o.android},{ios:o.ios},{"css-mode":r.cssMode}],t=r.containerModifierClass,a=[],e.forEach((function(e){"object"==typeof e?Object.keys(e).forEach((function(i){e[i]&&a.push(t+i)})):"string"==typeof e&&a.push(t+e)})),a);s.push.apply(s,p),l.addClass([].concat(s).join(" ")),i.emitContainerClasses()},removeClasses:function(){var e=this,t=e.$el,a=e.classNames;t.removeClass(a.join(" ")),e.emitContainerClasses()}},images:{loadImage:function(e,t,a,i,s,r){var n,o=l();function d(){r&&r()}m(e).parent("picture")[0]||e.complete&&s?d():t?((n=new o.Image).onload=d,n.onerror=d,i&&(n.sizes=i),a&&(n.srcset=a),t&&(n.src=t)):d()},preloadImages:function(){var e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(var a=0;a1){var n=[];return m(a.el).each((function(e){var i=M({},a,{el:e});n.push(new t(i))})),n}var l=this;l.__swiper__=!0,l.support=$(),l.device=L({userAgent:a.userAgent}),l.browser=I(),l.eventsListeners={},l.eventsAnyListeners=[],void 0===l.modules&&(l.modules={}),Object.keys(l.modules).forEach((function(e){var t=l.modules[e];if(t.params){var i=Object.keys(t.params)[0],s=t.params[i];if("object"!=typeof s||null===s)return;if(["navigation","pagination","scrollbar"].indexOf(i)>=0&&!0===a[i]&&(a[i]={auto:!0}),!(i in a)||!("enabled"in s))return;!0===a[i]&&(a[i]={enabled:!0}),"object"!=typeof a[i]||"enabled"in a[i]||(a[i].enabled=!0),a[i]||(a[i]={enabled:!1})}}));var o,d,p=M({},W);return l.useParams(p),l.params=M({},p,_,a),l.originalParams=M({},l.params),l.passedParams=M({},a),l.params&&l.params.on&&Object.keys(l.params.on).forEach((function(e){l.on(e,l.params.on[e])})),l.params&&l.params.onAny&&l.onAny(l.params.onAny),l.$=m,M(l,{enabled:l.params.enabled,el:e,classNames:[],slides:m(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:function(){return"horizontal"===l.params.direction},isVertical:function(){return"vertical"===l.params.direction},activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:l.params.allowSlideNext,allowSlidePrev:l.params.allowSlidePrev,touchEvents:(o=["touchstart","touchmove","touchend","touchcancel"],d=["mousedown","mousemove","mouseup"],l.support.pointerEvents&&(d=["pointerdown","pointermove","pointerup"]),l.touchEventsTouch={start:o[0],move:o[1],end:o[2],cancel:o[3]},l.touchEventsDesktop={start:d[0],move:d[1],end:d[2]},l.support.touch||!l.params.simulateTouch?l.touchEventsTouch:l.touchEventsDesktop),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:l.params.focusableElements,lastClickTime:x(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:l.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),l.useModules(),l.emit("_swiper"),l.params.init&&l.init(),l}var a,i,s,n=t.prototype;return n.enable=function(){var e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))},n.disable=function(){var e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))},n.setProgress=function(e,t){var a=this;e=Math.min(Math.max(e,0),1);var i=a.minTranslate(),s=(a.maxTranslate()-i)*e+i;a.translateTo(s,void 0===t?0:t),a.updateActiveIndex(),a.updateSlidesClasses()},n.emitContainerClasses=function(){var e=this;if(e.params._emitClasses&&e.el){var t=e.el.className.split(" ").filter((function(t){return 0===t.indexOf("swiper-container")||0===t.indexOf(e.params.containerModifierClass)}));e.emit("_containerClasses",t.join(" "))}},n.getSlideClasses=function(e){var t=this;return e.className.split(" ").filter((function(e){return 0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass)})).join(" ")},n.emitSlidesClasses=function(){var e=this;if(e.params._emitClasses&&e.el){var t=[];e.slides.each((function(a){var i=e.getSlideClasses(a);t.push({slideEl:a,classNames:i}),e.emit("_slideClass",a,i)})),e.emit("_slideClasses",t)}},n.slidesPerViewDynamic=function(){var e=this,t=e.params,a=e.slides,i=e.slidesGrid,s=e.size,r=e.activeIndex,n=1;if(t.centeredSlides){for(var l,o=a[r].swiperSlideSize,d=r+1;ds&&(l=!0));for(var p=r-1;p>=0;p-=1)a[p]&&!l&&(n+=1,(o+=a[p].swiperSlideSize)>s&&(l=!0))}else for(var u=r+1;u1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0))||i(),a.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}function i(){var t=e.rtlTranslate?-1*e.translate:e.translate,a=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(a),e.updateActiveIndex(),e.updateSlidesClasses()}},n.changeDirection=function(e,t){void 0===t&&(t=!0);var a=this,i=a.params.direction;return e||(e="horizontal"===i?"vertical":"horizontal"),e===i||"horizontal"!==e&&"vertical"!==e||(a.$el.removeClass(""+a.params.containerModifierClass+i).addClass(""+a.params.containerModifierClass+e),a.emitContainerClasses(),a.params.direction=e,a.slides.each((function(t){"vertical"===e?t.style.width="":t.style.height=""})),a.emit("changeDirection"),t&&a.update()),a},n.mount=function(e){var t=this;if(t.mounted)return!0;var a=m(e||t.params.el);if(!(e=a[0]))return!1;e.swiper=t;var i=function(){return"."+(t.params.wrapperClass||"").trim().split(" ").join(".")},s=function(){if(e&&e.shadowRoot&&e.shadowRoot.querySelector){var t=m(e.shadowRoot.querySelector(i()));return t.children=function(e){return a.children(e)},t}return a.children(i())}();if(0===s.length&&t.params.createElements){var n=r().createElement("div");s=m(n),n.className=t.params.wrapperClass,a.append(n),a.children("."+t.params.slideClass).each((function(e){s.append(e)}))}return M(t,{$el:a,el:e,$wrapperEl:s,wrapperEl:s[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===a.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===a.css("direction")),wrongRTL:"-webkit-box"===s.css("display")}),!0},n.init=function(e){var t=this;return t.initialized||!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t},n.destroy=function(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);var a,i=this,s=i.params,r=i.$el,n=i.$wrapperEl,l=i.slides;return void 0===i.params||i.destroyed||(i.emit("beforeDestroy"),i.initialized=!1,i.detachEvents(),s.loop&&i.loopDestroy(),t&&(i.removeClasses(),r.removeAttr("style"),n.removeAttr("style"),l&&l.length&&l.removeClass([s.slideVisibleClass,s.slideActiveClass,s.slideNextClass,s.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),i.emit("destroy"),Object.keys(i.eventsListeners).forEach((function(e){i.off(e)})),!1!==e&&(i.$el[0].swiper=null,a=i,Object.keys(a).forEach((function(e){try{a[e]=null}catch(e){}try{delete a[e]}catch(e){}}))),i.destroyed=!0),null},t.extendDefaults=function(e){M(_,e)},t.installModule=function(e){t.prototype.modules||(t.prototype.modules={});var a=e.name||Object.keys(t.prototype.modules).length+"_"+x();t.prototype.modules[a]=e},t.use=function(e){return Array.isArray(e)?(e.forEach((function(e){return t.installModule(e)})),t):(t.installModule(e),t)},a=t,s=[{key:"extendedDefaults",get:function(){return _}},{key:"defaults",get:function(){return W}}],(i=null)&&e(a.prototype,i),s&&e(a,s),t}();Object.keys(F).forEach((function(e){Object.keys(F[e]).forEach((function(t){q.prototype[t]=F[e][t]}))})),q.use([O,D]);var j={update:function(e){var t=this,a=t.params,i=a.slidesPerView,s=a.slidesPerGroup,r=a.centeredSlides,n=t.params.virtual,l=n.addSlidesBefore,o=n.addSlidesAfter,d=t.virtual,p=d.from,u=d.to,c=d.slides,h=d.slidesGrid,v=d.renderSlide,f=d.offset;t.updateActiveIndex();var m,g,b,w=t.activeIndex||0;m=t.rtlTranslate?"right":t.isHorizontal()?"left":"top",r?(g=Math.floor(i/2)+s+o,b=Math.floor(i/2)+s+l):(g=i+(s-1)+o,b=s+l);var y=Math.max((w||0)-b,0),E=Math.min((w||0)+g,c.length-1),x=(t.slidesGrid[y]||0)-(t.slidesGrid[0]||0);function T(){t.updateSlides(),t.updateProgress(),t.updateSlidesClasses(),t.lazy&&t.params.lazy.enabled&&t.lazy.load()}if(M(t.virtual,{from:y,to:E,offset:x,slidesGrid:t.slidesGrid}),p===y&&u===E&&!e)return t.slidesGrid!==h&&x!==f&&t.slides.css(m,x+"px"),void t.updateProgress();if(t.params.virtual.renderExternal)return t.params.virtual.renderExternal.call(t,{offset:x,from:y,to:E,slides:function(){for(var e=[],t=y;t<=E;t+=1)e.push(c[t]);return e}()}),void(t.params.virtual.renderExternalUpdate&&T());var C=[],S=[];if(e)t.$wrapperEl.find("."+t.params.slideClass).remove();else for(var z=p;z<=u;z+=1)(zE)&&t.$wrapperEl.find("."+t.params.slideClass+'[data-swiper-slide-index="'+z+'"]').remove();for(var P=0;P=y&&P<=E&&(void 0===u||e?S.push(P):(P>u&&S.push(P),P'+e+"
    • ");return s.attr("data-swiper-slide-index")||s.attr("data-swiper-slide-index",t),i.cache&&(a.virtual.cache[t]=s),s},appendSlide:function(e){var t=this;if("object"==typeof e&&"length"in e)for(var a=0;a=0;i-=1)t.virtual.slides.splice(e[i],1),t.params.virtual.cache&&delete t.virtual.cache[e[i]],e[i]0&&0===t.$el.parents("."+t.params.slideActiveClass).length)return;var g=t.$el,b=g[0].clientWidth,w=g[0].clientHeight,y=a.innerWidth,E=a.innerHeight,x=t.$el.offset();s&&(x.left-=t.$el[0].scrollLeft);for(var T=[[x.left,x.top],[x.left+b,x.top],[x.left,x.top+w],[x.left+b,x.top+w]],C=0;C=0&&S[0]<=y&&S[1]>=0&&S[1]<=E){if(0===S[0]&&0===S[1])continue;m=!0}}if(!m)return}t.isHorizontal()?((p||u||c||h)&&(n.preventDefault?n.preventDefault():n.returnValue=!1),((u||h)&&!s||(p||c)&&s)&&t.slideNext(),((p||c)&&!s||(u||h)&&s)&&t.slidePrev()):((p||u||v||f)&&(n.preventDefault?n.preventDefault():n.returnValue=!1),(u||f)&&t.slideNext(),(p||v)&&t.slidePrev()),t.emit("keyPress",o)}}},enable:function(){var e=this,t=r();e.keyboard.enabled||(m(t).on("keydown",e.keyboard.handle),e.keyboard.enabled=!0)},disable:function(){var e=this,t=r();e.keyboard.enabled&&(m(t).off("keydown",e.keyboard.handle),e.keyboard.enabled=!1)}},Z={name:"keyboard",params:{keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}},create:function(){z(this,{keyboard:t({enabled:!1},K)})},on:{init:function(e){e.params.keyboard.enabled&&e.keyboard.enable()},destroy:function(e){e.keyboard.enabled&&e.keyboard.disable()}}};var J={lastScrollTime:x(),lastEventBeforeSnap:void 0,recentWheelEvents:[],event:function(){return l().navigator.userAgent.indexOf("firefox")>-1?"DOMMouseScroll":function(){var e=r(),t="onwheel",a=t in e;if(!a){var i=e.createElement("div");i.setAttribute(t,"return;"),a="function"==typeof i.onwheel}return!a&&e.implementation&&e.implementation.hasFeature&&!0!==e.implementation.hasFeature("","")&&(a=e.implementation.hasFeature("Events.wheel","3.0")),a}()?"wheel":"mousewheel"},normalize:function(e){var t=0,a=0,i=0,s=0;return"detail"in e&&(a=e.detail),"wheelDelta"in e&&(a=-e.wheelDelta/120),"wheelDeltaY"in e&&(a=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=a,a=0),i=10*t,s=10*a,"deltaY"in e&&(s=e.deltaY),"deltaX"in e&&(i=e.deltaX),e.shiftKey&&!i&&(i=s,s=0),(i||s)&&e.deltaMode&&(1===e.deltaMode?(i*=40,s*=40):(i*=800,s*=800)),i&&!t&&(t=i<1?-1:1),s&&!a&&(a=s<1?-1:1),{spinX:t,spinY:a,pixelX:i,pixelY:s}},handleMouseEnter:function(){this.enabled&&(this.mouseEntered=!0)},handleMouseLeave:function(){this.enabled&&(this.mouseEntered=!1)},handle:function(e){var t=e,a=this;if(a.enabled){var i=a.params.mousewheel;a.params.cssMode&&t.preventDefault();var s=a.$el;if("container"!==a.params.mousewheel.eventsTarget&&(s=m(a.params.mousewheel.eventsTarget)),!a.mouseEntered&&!s[0].contains(t.target)&&!i.releaseOnEdges)return!0;t.originalEvent&&(t=t.originalEvent);var r=0,n=a.rtlTranslate?-1:1,l=J.normalize(t);if(i.forceToAxis)if(a.isHorizontal()){if(!(Math.abs(l.pixelX)>Math.abs(l.pixelY)))return!0;r=-l.pixelX*n}else{if(!(Math.abs(l.pixelY)>Math.abs(l.pixelX)))return!0;r=-l.pixelY}else r=Math.abs(l.pixelX)>Math.abs(l.pixelY)?-l.pixelX*n:-l.pixelY;if(0===r)return!0;i.invert&&(r=-r);var o=a.getTranslate()+r*i.sensitivity;if(o>=a.minTranslate()&&(o=a.minTranslate()),o<=a.maxTranslate()&&(o=a.maxTranslate()),(!!a.params.loop||!(o===a.minTranslate()||o===a.maxTranslate()))&&a.params.nested&&t.stopPropagation(),a.params.freeMode){var d={time:x(),delta:Math.abs(r),direction:Math.sign(r)},p=a.mousewheel.lastEventBeforeSnap,u=p&&d.time=a.minTranslate()&&(c=a.minTranslate()),c<=a.maxTranslate()&&(c=a.maxTranslate()),a.setTransition(0),a.setTranslate(c),a.updateProgress(),a.updateActiveIndex(),a.updateSlidesClasses(),(!h&&a.isBeginning||!v&&a.isEnd)&&a.updateSlidesClasses(),a.params.freeModeSticky){clearTimeout(a.mousewheel.timeout),a.mousewheel.timeout=void 0;var f=a.mousewheel.recentWheelEvents;f.length>=15&&f.shift();var g=f.length?f[f.length-1]:void 0,b=f[0];if(f.push(d),g&&(d.delta>g.delta||d.direction!==g.direction))f.splice(0);else if(f.length>=15&&d.time-b.time<500&&b.delta-d.delta>=1&&d.delta<=6){var w=r>0?.8:.2;a.mousewheel.lastEventBeforeSnap=d,f.splice(0),a.mousewheel.timeout=E((function(){a.slideToClosest(a.params.speed,!0,void 0,w)}),0)}a.mousewheel.timeout||(a.mousewheel.timeout=E((function(){a.mousewheel.lastEventBeforeSnap=d,f.splice(0),a.slideToClosest(a.params.speed,!0,void 0,.5)}),500))}if(u||a.emit("scroll",t),a.params.autoplay&&a.params.autoplayDisableOnInteraction&&a.autoplay.stop(),c===a.minTranslate()||c===a.maxTranslate())return!0}}else{var y={time:x(),delta:Math.abs(r),direction:Math.sign(r),raw:e},T=a.mousewheel.recentWheelEvents;T.length>=2&&T.shift();var C=T.length?T[T.length-1]:void 0;if(T.push(y),C?(y.direction!==C.direction||y.delta>C.delta||y.time>C.time+150)&&a.mousewheel.animateSlider(y):a.mousewheel.animateSlider(y),a.mousewheel.releaseScroll(y))return!0}return t.preventDefault?t.preventDefault():t.returnValue=!1,!1}},animateSlider:function(e){var t=this,a=l();return!(this.params.mousewheel.thresholdDelta&&e.delta=6&&x()-t.mousewheel.lastScrollTime<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),t.emit("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),t.emit("scroll",e.raw)),t.mousewheel.lastScrollTime=(new a.Date).getTime(),!1)))},releaseScroll:function(e){var t=this,a=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&a.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&a.releaseOnEdges)return!0;return!1},enable:function(){var e=this,t=J.event();if(e.params.cssMode)return e.wrapperEl.removeEventListener(t,e.mousewheel.handle),!0;if(!t)return!1;if(e.mousewheel.enabled)return!1;var a=e.$el;return"container"!==e.params.mousewheel.eventsTarget&&(a=m(e.params.mousewheel.eventsTarget)),a.on("mouseenter",e.mousewheel.handleMouseEnter),a.on("mouseleave",e.mousewheel.handleMouseLeave),a.on(t,e.mousewheel.handle),e.mousewheel.enabled=!0,!0},disable:function(){var e=this,t=J.event();if(e.params.cssMode)return e.wrapperEl.addEventListener(t,e.mousewheel.handle),!0;if(!t)return!1;if(!e.mousewheel.enabled)return!1;var a=e.$el;return"container"!==e.params.mousewheel.eventsTarget&&(a=m(e.params.mousewheel.eventsTarget)),a.off(t,e.mousewheel.handle),e.mousewheel.enabled=!1,!0}},Q={toggleEl:function(e,t){e[t?"addClass":"removeClass"](this.params.navigation.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=t)},update:function(){var e=this,t=e.params.navigation,a=e.navigation.toggleEl;if(!e.params.loop){var i=e.navigation,s=i.$nextEl,r=i.$prevEl;r&&r.length>0&&(e.isBeginning?a(r,!0):a(r,!1),e.params.watchOverflow&&e.enabled&&r[e.isLocked?"addClass":"removeClass"](t.lockClass)),s&&s.length>0&&(e.isEnd?a(s,!0):a(s,!1),e.params.watchOverflow&&e.enabled&&s[e.isLocked?"addClass":"removeClass"](t.lockClass))}},onPrevClick:function(e){var t=this;e.preventDefault(),t.isBeginning&&!t.params.loop||t.slidePrev()},onNextClick:function(e){var t=this;e.preventDefault(),t.isEnd&&!t.params.loop||t.slideNext()},init:function(){var e,t,a=this,i=a.params.navigation;(a.params.navigation=k(a.$el,a.params.navigation,a.params.createElements,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),i.nextEl||i.prevEl)&&(i.nextEl&&(e=m(i.nextEl),a.params.uniqueNavElements&&"string"==typeof i.nextEl&&e.length>1&&1===a.$el.find(i.nextEl).length&&(e=a.$el.find(i.nextEl))),i.prevEl&&(t=m(i.prevEl),a.params.uniqueNavElements&&"string"==typeof i.prevEl&&t.length>1&&1===a.$el.find(i.prevEl).length&&(t=a.$el.find(i.prevEl))),e&&e.length>0&&e.on("click",a.navigation.onNextClick),t&&t.length>0&&t.on("click",a.navigation.onPrevClick),M(a.navigation,{$nextEl:e,nextEl:e&&e[0],$prevEl:t,prevEl:t&&t[0]}),a.enabled||(e&&e.addClass(i.lockClass),t&&t.addClass(i.lockClass)))},destroy:function(){var e=this,t=e.navigation,a=t.$nextEl,i=t.$prevEl;a&&a.length&&(a.off("click",e.navigation.onNextClick),a.removeClass(e.params.navigation.disabledClass)),i&&i.length&&(i.off("click",e.navigation.onPrevClick),i.removeClass(e.params.navigation.disabledClass))}},ee={update:function(){var e=this,t=e.rtl,a=e.params.pagination;if(a.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var i,s=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,r=e.pagination.$el,n=e.params.loop?Math.ceil((s-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;if(e.params.loop?((i=Math.ceil((e.activeIndex-e.loopedSlides)/e.params.slidesPerGroup))>s-1-2*e.loopedSlides&&(i-=s-2*e.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==e.params.paginationType&&(i=n+i)):i=void 0!==e.snapIndex?e.snapIndex:e.activeIndex||0,"bullets"===a.type&&e.pagination.bullets&&e.pagination.bullets.length>0){var l,o,d,p=e.pagination.bullets;if(a.dynamicBullets&&(e.pagination.bulletSize=p.eq(0)[e.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(e.isHorizontal()?"width":"height",e.pagination.bulletSize*(a.dynamicMainBullets+4)+"px"),a.dynamicMainBullets>1&&void 0!==e.previousIndex&&(e.pagination.dynamicBulletIndex+=i-e.previousIndex,e.pagination.dynamicBulletIndex>a.dynamicMainBullets-1?e.pagination.dynamicBulletIndex=a.dynamicMainBullets-1:e.pagination.dynamicBulletIndex<0&&(e.pagination.dynamicBulletIndex=0)),l=i-e.pagination.dynamicBulletIndex,d=((o=l+(Math.min(p.length,a.dynamicMainBullets)-1))+l)/2),p.removeClass(a.bulletActiveClass+" "+a.bulletActiveClass+"-next "+a.bulletActiveClass+"-next-next "+a.bulletActiveClass+"-prev "+a.bulletActiveClass+"-prev-prev "+a.bulletActiveClass+"-main"),r.length>1)p.each((function(e){var t=m(e),s=t.index();s===i&&t.addClass(a.bulletActiveClass),a.dynamicBullets&&(s>=l&&s<=o&&t.addClass(a.bulletActiveClass+"-main"),s===l&&t.prev().addClass(a.bulletActiveClass+"-prev").prev().addClass(a.bulletActiveClass+"-prev-prev"),s===o&&t.next().addClass(a.bulletActiveClass+"-next").next().addClass(a.bulletActiveClass+"-next-next"))}));else{var u=p.eq(i),c=u.index();if(u.addClass(a.bulletActiveClass),a.dynamicBullets){for(var h=p.eq(l),v=p.eq(o),f=l;f<=o;f+=1)p.eq(f).addClass(a.bulletActiveClass+"-main");if(e.params.loop)if(c>=p.length-a.dynamicMainBullets){for(var g=a.dynamicMainBullets;g>=0;g-=1)p.eq(p.length-g).addClass(a.bulletActiveClass+"-main");p.eq(p.length-a.dynamicMainBullets-1).addClass(a.bulletActiveClass+"-prev")}else h.prev().addClass(a.bulletActiveClass+"-prev").prev().addClass(a.bulletActiveClass+"-prev-prev"),v.next().addClass(a.bulletActiveClass+"-next").next().addClass(a.bulletActiveClass+"-next-next");else h.prev().addClass(a.bulletActiveClass+"-prev").prev().addClass(a.bulletActiveClass+"-prev-prev"),v.next().addClass(a.bulletActiveClass+"-next").next().addClass(a.bulletActiveClass+"-next-next")}}if(a.dynamicBullets){var b=Math.min(p.length,a.dynamicMainBullets+4),w=(e.pagination.bulletSize*b-e.pagination.bulletSize)/2-d*e.pagination.bulletSize,y=t?"right":"left";p.css(e.isHorizontal()?y:"top",w+"px")}}if("fraction"===a.type&&(r.find(P(a.currentClass)).text(a.formatFractionCurrent(i+1)),r.find(P(a.totalClass)).text(a.formatFractionTotal(n))),"progressbar"===a.type){var E;E=a.progressbarOpposite?e.isHorizontal()?"vertical":"horizontal":e.isHorizontal()?"horizontal":"vertical";var x=(i+1)/n,T=1,C=1;"horizontal"===E?T=x:C=x,r.find(P(a.progressbarFillClass)).transform("translate3d(0,0,0) scaleX("+T+") scaleY("+C+")").transition(e.params.speed)}"custom"===a.type&&a.renderCustom?(r.html(a.renderCustom(e,i+1,n)),e.emit("paginationRender",r[0])):e.emit("paginationUpdate",r[0]),e.params.watchOverflow&&e.enabled&&r[e.isLocked?"addClass":"removeClass"](a.lockClass)}},render:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var a=e.virtual&&e.params.virtual.enabled?e.virtual.slides.length:e.slides.length,i=e.pagination.$el,s="";if("bullets"===t.type){var r=e.params.loop?Math.ceil((a-2*e.loopedSlides)/e.params.slidesPerGroup):e.snapGrid.length;e.params.freeMode&&!e.params.loop&&r>a&&(r=a);for(var n=0;n";i.html(s),e.pagination.bullets=i.find(P(t.bulletClass))}"fraction"===t.type&&(s=t.renderFraction?t.renderFraction.call(e,t.currentClass,t.totalClass):' / ',i.html(s)),"progressbar"===t.type&&(s=t.renderProgressbar?t.renderProgressbar.call(e,t.progressbarFillClass):'',i.html(s)),"custom"!==t.type&&e.emit("paginationRender",e.pagination.$el[0])}},init:function(){var e=this;e.params.pagination=k(e.$el,e.params.pagination,e.params.createElements,{el:"swiper-pagination"});var t=e.params.pagination;if(t.el){var a=m(t.el);0!==a.length&&(e.params.uniqueNavElements&&"string"==typeof t.el&&a.length>1&&(a=e.$el.find(t.el)),"bullets"===t.type&&t.clickable&&a.addClass(t.clickableClass),a.addClass(t.modifierClass+t.type),"bullets"===t.type&&t.dynamicBullets&&(a.addClass(""+t.modifierClass+t.type+"-dynamic"),e.pagination.dynamicBulletIndex=0,t.dynamicMainBullets<1&&(t.dynamicMainBullets=1)),"progressbar"===t.type&&t.progressbarOpposite&&a.addClass(t.progressbarOppositeClass),t.clickable&&a.on("click",P(t.bulletClass),(function(t){t.preventDefault();var a=m(this).index()*e.params.slidesPerGroup;e.params.loop&&(a+=e.loopedSlides),e.slideTo(a)})),M(e.pagination,{$el:a,el:a[0]}),e.enabled||a.addClass(t.lockClass))}},destroy:function(){var e=this,t=e.params.pagination;if(t.el&&e.pagination.el&&e.pagination.$el&&0!==e.pagination.$el.length){var a=e.pagination.$el;a.removeClass(t.hiddenClass),a.removeClass(t.modifierClass+t.type),e.pagination.bullets&&e.pagination.bullets.removeClass(t.bulletActiveClass),t.clickable&&a.off("click",P(t.bulletClass))}}},te={setTranslate:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,a=e.rtlTranslate,i=e.progress,s=t.dragSize,r=t.trackSize,n=t.$dragEl,l=t.$el,o=e.params.scrollbar,d=s,p=(r-s)*i;a?(p=-p)>0?(d=s-p,p=0):-p+s>r&&(d=r+p):p<0?(d=s+p,p=0):p+s>r&&(d=r-p),e.isHorizontal()?(n.transform("translate3d("+p+"px, 0, 0)"),n[0].style.width=d+"px"):(n.transform("translate3d(0px, "+p+"px, 0)"),n[0].style.height=d+"px"),o.hide&&(clearTimeout(e.scrollbar.timeout),l[0].style.opacity=1,e.scrollbar.timeout=setTimeout((function(){l[0].style.opacity=0,l.transition(400)}),1e3))}},setTransition:function(e){var t=this;t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)},updateSize:function(){var e=this;if(e.params.scrollbar.el&&e.scrollbar.el){var t=e.scrollbar,a=t.$dragEl,i=t.$el;a[0].style.width="",a[0].style.height="";var s,r=e.isHorizontal()?i[0].offsetWidth:i[0].offsetHeight,n=e.size/e.virtualSize,l=n*(r/e.size);s="auto"===e.params.scrollbar.dragSize?r*n:parseInt(e.params.scrollbar.dragSize,10),e.isHorizontal()?a[0].style.width=s+"px":a[0].style.height=s+"px",i[0].style.display=n>=1?"none":"",e.params.scrollbar.hide&&(i[0].style.opacity=0),M(t,{trackSize:r,divider:n,moveDivider:l,dragSize:s}),e.params.watchOverflow&&e.enabled&&t.$el[e.isLocked?"addClass":"removeClass"](e.params.scrollbar.lockClass)}},getPointerPosition:function(e){return this.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},setDragPosition:function(e){var t,a=this,i=a.scrollbar,s=a.rtlTranslate,r=i.$el,n=i.dragSize,l=i.trackSize,o=i.dragStartPos;t=(i.getPointerPosition(e)-r.offset()[a.isHorizontal()?"left":"top"]-(null!==o?o:n/2))/(l-n),t=Math.max(Math.min(t,1),0),s&&(t=1-t);var d=a.minTranslate()+(a.maxTranslate()-a.minTranslate())*t;a.updateProgress(d),a.setTranslate(d),a.updateActiveIndex(),a.updateSlidesClasses()},onDragStart:function(e){var t=this,a=t.params.scrollbar,i=t.scrollbar,s=t.$wrapperEl,r=i.$el,n=i.$dragEl;t.scrollbar.isTouched=!0,t.scrollbar.dragStartPos=e.target===n[0]||e.target===n?i.getPointerPosition(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),s.transition(100),n.transition(100),i.setDragPosition(e),clearTimeout(t.scrollbar.dragTimeout),r.transition(0),a.hide&&r.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),t.emit("scrollbarDragStart",e)},onDragMove:function(e){var t=this,a=t.scrollbar,i=t.$wrapperEl,s=a.$el,r=a.$dragEl;t.scrollbar.isTouched&&(e.preventDefault?e.preventDefault():e.returnValue=!1,a.setDragPosition(e),i.transition(0),s.transition(0),r.transition(0),t.emit("scrollbarDragMove",e))},onDragEnd:function(e){var t=this,a=t.params.scrollbar,i=t.scrollbar,s=t.$wrapperEl,r=i.$el;t.scrollbar.isTouched&&(t.scrollbar.isTouched=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),s.transition("")),a.hide&&(clearTimeout(t.scrollbar.dragTimeout),t.scrollbar.dragTimeout=E((function(){r.css("opacity",0),r.transition(400)}),1e3)),t.emit("scrollbarDragEnd",e),a.snapOnRelease&&t.slideToClosest())},enableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=r(),a=e.scrollbar,i=e.touchEventsTouch,s=e.touchEventsDesktop,n=e.params,l=e.support,o=a.$el[0],d=!(!l.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},p=!(!l.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};o&&(l.touch?(o.addEventListener(i.start,e.scrollbar.onDragStart,d),o.addEventListener(i.move,e.scrollbar.onDragMove,d),o.addEventListener(i.end,e.scrollbar.onDragEnd,p)):(o.addEventListener(s.start,e.scrollbar.onDragStart,d),t.addEventListener(s.move,e.scrollbar.onDragMove,d),t.addEventListener(s.end,e.scrollbar.onDragEnd,p)))}},disableDraggable:function(){var e=this;if(e.params.scrollbar.el){var t=r(),a=e.scrollbar,i=e.touchEventsTouch,s=e.touchEventsDesktop,n=e.params,l=e.support,o=a.$el[0],d=!(!l.passiveListener||!n.passiveListeners)&&{passive:!1,capture:!1},p=!(!l.passiveListener||!n.passiveListeners)&&{passive:!0,capture:!1};o&&(l.touch?(o.removeEventListener(i.start,e.scrollbar.onDragStart,d),o.removeEventListener(i.move,e.scrollbar.onDragMove,d),o.removeEventListener(i.end,e.scrollbar.onDragEnd,p)):(o.removeEventListener(s.start,e.scrollbar.onDragStart,d),t.removeEventListener(s.move,e.scrollbar.onDragMove,d),t.removeEventListener(s.end,e.scrollbar.onDragEnd,p)))}},init:function(){var e=this,t=e.scrollbar,a=e.$el;e.params.scrollbar=k(a,e.params.scrollbar,e.params.createElements,{el:"swiper-scrollbar"});var i=e.params.scrollbar;if(i.el){var s=m(i.el);e.params.uniqueNavElements&&"string"==typeof i.el&&s.length>1&&1===a.find(i.el).length&&(s=a.find(i.el));var r=s.find("."+e.params.scrollbar.dragClass);0===r.length&&(r=m('
      '),s.append(r)),M(t,{$el:s,el:s[0],$dragEl:r,dragEl:r[0]}),i.draggable&&t.enableDraggable(),s&&s[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)}},destroy:function(){this.scrollbar.disableDraggable()}},ae={setTransform:function(e,t){var a=this.rtl,i=m(e),s=a?-1:1,r=i.attr("data-swiper-parallax")||"0",n=i.attr("data-swiper-parallax-x"),l=i.attr("data-swiper-parallax-y"),o=i.attr("data-swiper-parallax-scale"),d=i.attr("data-swiper-parallax-opacity");if(n||l?(n=n||"0",l=l||"0"):this.isHorizontal()?(n=r,l="0"):(l=r,n="0"),n=n.indexOf("%")>=0?parseInt(n,10)*t*s+"%":n*t*s+"px",l=l.indexOf("%")>=0?parseInt(l,10)*t+"%":l*t+"px",null!=d){var p=d-(d-1)*(1-Math.abs(t));i[0].style.opacity=p}if(null==o)i.transform("translate3d("+n+", "+l+", 0px)");else{var u=o-(o-1)*(1-Math.abs(t));i.transform("translate3d("+n+", "+l+", 0px) scale("+u+")")}},setTranslate:function(){var e=this,t=e.$el,a=e.slides,i=e.progress,s=e.snapGrid;t.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t){e.parallax.setTransform(t,i)})),a.each((function(t,a){var r=t.progress;e.params.slidesPerGroup>1&&"auto"!==e.params.slidesPerView&&(r+=Math.ceil(a/2)-i*(s.length-1)),r=Math.min(Math.max(r,-1),1),m(t).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t){e.parallax.setTransform(t,r)}))}))},setTransition:function(e){void 0===e&&(e=this.params.speed);this.$el.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((function(t){var a=m(t),i=parseInt(a.attr("data-swiper-parallax-duration"),10)||e;0===e&&(i=0),a.transition(i)}))}},ie={getDistanceBetweenTouches:function(e){if(e.targetTouches.length<2)return 1;var t=e.targetTouches[0].pageX,a=e.targetTouches[0].pageY,i=e.targetTouches[1].pageX,s=e.targetTouches[1].pageY;return Math.sqrt(Math.pow(i-t,2)+Math.pow(s-a,2))},onGestureStart:function(e){var t=this,a=t.support,i=t.params.zoom,s=t.zoom,r=s.gesture;if(s.fakeGestureTouched=!1,s.fakeGestureMoved=!1,!a.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;s.fakeGestureTouched=!0,r.scaleStart=ie.getDistanceBetweenTouches(e)}r.$slideEl&&r.$slideEl.length||(r.$slideEl=m(e.target).closest("."+t.params.slideClass),0===r.$slideEl.length&&(r.$slideEl=t.slides.eq(t.activeIndex)),r.$imageEl=r.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),r.$imageWrapEl=r.$imageEl.parent("."+i.containerClass),r.maxRatio=r.$imageWrapEl.attr("data-swiper-zoom")||i.maxRatio,0!==r.$imageWrapEl.length)?(r.$imageEl&&r.$imageEl.transition(0),t.zoom.isScaling=!0):r.$imageEl=void 0},onGestureChange:function(e){var t=this,a=t.support,i=t.params.zoom,s=t.zoom,r=s.gesture;if(!a.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;s.fakeGestureMoved=!0,r.scaleMove=ie.getDistanceBetweenTouches(e)}r.$imageEl&&0!==r.$imageEl.length?(a.gestures?s.scale=e.scale*s.currentScale:s.scale=r.scaleMove/r.scaleStart*s.currentScale,s.scale>r.maxRatio&&(s.scale=r.maxRatio-1+Math.pow(s.scale-r.maxRatio+1,.5)),s.scales.touchesStart.x))return void(s.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(s.minY)===Math.floor(s.startY)&&s.touchesCurrent.ys.touchesStart.y))return void(s.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),s.isMoved=!0,s.currentX=s.touchesCurrent.x-s.touchesStart.x+s.startX,s.currentY=s.touchesCurrent.y-s.touchesStart.y+s.startY,s.currentXs.maxX&&(s.currentX=s.maxX-1+Math.pow(s.currentX-s.maxX+1,.8)),s.currentYs.maxY&&(s.currentY=s.maxY-1+Math.pow(s.currentY-s.maxY+1,.8)),r.prevPositionX||(r.prevPositionX=s.touchesCurrent.x),r.prevPositionY||(r.prevPositionY=s.touchesCurrent.y),r.prevTime||(r.prevTime=Date.now()),r.x=(s.touchesCurrent.x-r.prevPositionX)/(Date.now()-r.prevTime)/2,r.y=(s.touchesCurrent.y-r.prevPositionY)/(Date.now()-r.prevTime)/2,Math.abs(s.touchesCurrent.x-r.prevPositionX)<2&&(r.x=0),Math.abs(s.touchesCurrent.y-r.prevPositionY)<2&&(r.y=0),r.prevPositionX=s.touchesCurrent.x,r.prevPositionY=s.touchesCurrent.y,r.prevTime=Date.now(),i.$imageWrapEl.transform("translate3d("+s.currentX+"px, "+s.currentY+"px,0)")}}},onTouchEnd:function(){var e=this.zoom,t=e.gesture,a=e.image,i=e.velocity;if(t.$imageEl&&0!==t.$imageEl.length){if(!a.isTouched||!a.isMoved)return a.isTouched=!1,void(a.isMoved=!1);a.isTouched=!1,a.isMoved=!1;var s=300,r=300,n=i.x*s,l=a.currentX+n,o=i.y*r,d=a.currentY+o;0!==i.x&&(s=Math.abs((l-a.currentX)/i.x)),0!==i.y&&(r=Math.abs((d-a.currentY)/i.y));var p=Math.max(s,r);a.currentX=l,a.currentY=d;var u=a.width*e.scale,c=a.height*e.scale;a.minX=Math.min(t.slideWidth/2-u/2,0),a.maxX=-a.minX,a.minY=Math.min(t.slideHeight/2-c/2,0),a.maxY=-a.minY,a.currentX=Math.max(Math.min(a.currentX,a.maxX),a.minX),a.currentY=Math.max(Math.min(a.currentY,a.maxY),a.minY),t.$imageWrapEl.transition(p).transform("translate3d("+a.currentX+"px, "+a.currentY+"px,0)")}},onTransitionEnd:function(){var e=this,t=e.zoom,a=t.gesture;a.$slideEl&&e.previousIndex!==e.activeIndex&&(a.$imageEl&&a.$imageEl.transform("translate3d(0,0,0) scale(1)"),a.$imageWrapEl&&a.$imageWrapEl.transform("translate3d(0,0,0)"),t.scale=1,t.currentScale=1,a.$slideEl=void 0,a.$imageEl=void 0,a.$imageWrapEl=void 0)},toggle:function(e){var t=this.zoom;t.scale&&1!==t.scale?t.out():t.in(e)},in:function(e){var t,a,i,s,r,n,o,d,p,u,c,h,v,f,g,b,w=this,y=l(),E=w.zoom,x=w.params.zoom,T=E.gesture,C=E.image;(T.$slideEl||(e&&e.target&&(T.$slideEl=m(e.target).closest("."+w.params.slideClass)),T.$slideEl||(w.params.virtual&&w.params.virtual.enabled&&w.virtual?T.$slideEl=w.$wrapperEl.children("."+w.params.slideActiveClass):T.$slideEl=w.slides.eq(w.activeIndex)),T.$imageEl=T.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),T.$imageWrapEl=T.$imageEl.parent("."+x.containerClass)),T.$imageEl&&0!==T.$imageEl.length&&T.$imageWrapEl&&0!==T.$imageWrapEl.length)&&(T.$slideEl.addClass(""+x.zoomedSlideClass),void 0===C.touchesStart.x&&e?(t="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,a="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(t=C.touchesStart.x,a=C.touchesStart.y),E.scale=T.$imageWrapEl.attr("data-swiper-zoom")||x.maxRatio,E.currentScale=T.$imageWrapEl.attr("data-swiper-zoom")||x.maxRatio,e?(g=T.$slideEl[0].offsetWidth,b=T.$slideEl[0].offsetHeight,i=T.$slideEl.offset().left+y.scrollX+g/2-t,s=T.$slideEl.offset().top+y.scrollY+b/2-a,o=T.$imageEl[0].offsetWidth,d=T.$imageEl[0].offsetHeight,p=o*E.scale,u=d*E.scale,v=-(c=Math.min(g/2-p/2,0)),f=-(h=Math.min(b/2-u/2,0)),(r=i*E.scale)v&&(r=v),(n=s*E.scale)f&&(n=f)):(r=0,n=0),T.$imageWrapEl.transition(300).transform("translate3d("+r+"px, "+n+"px,0)"),T.$imageEl.transition(300).transform("translate3d(0,0,0) scale("+E.scale+")"))},out:function(){var e=this,t=e.zoom,a=e.params.zoom,i=t.gesture;i.$slideEl||(e.params.virtual&&e.params.virtual.enabled&&e.virtual?i.$slideEl=e.$wrapperEl.children("."+e.params.slideActiveClass):i.$slideEl=e.slides.eq(e.activeIndex),i.$imageEl=i.$slideEl.find("img, svg, canvas, picture, .swiper-zoom-target"),i.$imageWrapEl=i.$imageEl.parent("."+a.containerClass)),i.$imageEl&&0!==i.$imageEl.length&&i.$imageWrapEl&&0!==i.$imageWrapEl.length&&(t.scale=1,t.currentScale=1,i.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),i.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),i.$slideEl.removeClass(""+a.zoomedSlideClass),i.$slideEl=void 0)},toggleGestures:function(e){var t=this,a=t.zoom,i=a.slideSelector,s=a.passiveListener;t.$wrapperEl[e]("gesturestart",i,a.onGestureStart,s),t.$wrapperEl[e]("gesturechange",i,a.onGestureChange,s),t.$wrapperEl[e]("gestureend",i,a.onGestureEnd,s)},enableGestures:function(){this.zoom.gesturesEnabled||(this.zoom.gesturesEnabled=!0,this.zoom.toggleGestures("on"))},disableGestures:function(){this.zoom.gesturesEnabled&&(this.zoom.gesturesEnabled=!1,this.zoom.toggleGestures("off"))},enable:function(){var e=this,t=e.support,a=e.zoom;if(!a.enabled){a.enabled=!0;var i=!("touchstart"!==e.touchEvents.start||!t.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},s=!t.passiveListener||{passive:!1,capture:!0},r="."+e.params.slideClass;e.zoom.passiveListener=i,e.zoom.slideSelector=r,t.gestures?(e.$wrapperEl.on(e.touchEvents.start,e.zoom.enableGestures,i),e.$wrapperEl.on(e.touchEvents.end,e.zoom.disableGestures,i)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.on(e.touchEvents.start,r,a.onGestureStart,i),e.$wrapperEl.on(e.touchEvents.move,r,a.onGestureChange,s),e.$wrapperEl.on(e.touchEvents.end,r,a.onGestureEnd,i),e.touchEvents.cancel&&e.$wrapperEl.on(e.touchEvents.cancel,r,a.onGestureEnd,i)),e.$wrapperEl.on(e.touchEvents.move,"."+e.params.zoom.containerClass,a.onTouchMove,s)}},disable:function(){var e=this,t=e.zoom;if(t.enabled){var a=e.support;e.zoom.enabled=!1;var i=!("touchstart"!==e.touchEvents.start||!a.passiveListener||!e.params.passiveListeners)&&{passive:!0,capture:!1},s=!a.passiveListener||{passive:!1,capture:!0},r="."+e.params.slideClass;a.gestures?(e.$wrapperEl.off(e.touchEvents.start,e.zoom.enableGestures,i),e.$wrapperEl.off(e.touchEvents.end,e.zoom.disableGestures,i)):"touchstart"===e.touchEvents.start&&(e.$wrapperEl.off(e.touchEvents.start,r,t.onGestureStart,i),e.$wrapperEl.off(e.touchEvents.move,r,t.onGestureChange,s),e.$wrapperEl.off(e.touchEvents.end,r,t.onGestureEnd,i),e.touchEvents.cancel&&e.$wrapperEl.off(e.touchEvents.cancel,r,t.onGestureEnd,i)),e.$wrapperEl.off(e.touchEvents.move,"."+e.params.zoom.containerClass,t.onTouchMove,s)}}},se={loadInSlide:function(e,t){void 0===t&&(t=!0);var a=this,i=a.params.lazy;if(void 0!==e&&0!==a.slides.length){var s=a.virtual&&a.params.virtual.enabled?a.$wrapperEl.children("."+a.params.slideClass+'[data-swiper-slide-index="'+e+'"]'):a.slides.eq(e),r=s.find("."+i.elementClass+":not(."+i.loadedClass+"):not(."+i.loadingClass+")");!s.hasClass(i.elementClass)||s.hasClass(i.loadedClass)||s.hasClass(i.loadingClass)||r.push(s[0]),0!==r.length&&r.each((function(e){var r=m(e);r.addClass(i.loadingClass);var n=r.attr("data-background"),l=r.attr("data-src"),o=r.attr("data-srcset"),d=r.attr("data-sizes"),p=r.parent("picture");a.loadImage(r[0],l||n,o,d,!1,(function(){if(null!=a&&a&&(!a||a.params)&&!a.destroyed){if(n?(r.css("background-image",'url("'+n+'")'),r.removeAttr("data-background")):(o&&(r.attr("srcset",o),r.removeAttr("data-srcset")),d&&(r.attr("sizes",d),r.removeAttr("data-sizes")),p.length&&p.children("source").each((function(e){var t=m(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),l&&(r.attr("src",l),r.removeAttr("data-src"))),r.addClass(i.loadedClass).removeClass(i.loadingClass),s.find("."+i.preloaderClass).remove(),a.params.loop&&t){var e=s.attr("data-swiper-slide-index");if(s.hasClass(a.params.slideDuplicateClass)){var u=a.$wrapperEl.children('[data-swiper-slide-index="'+e+'"]:not(.'+a.params.slideDuplicateClass+")");a.lazy.loadInSlide(u.index(),!1)}else{var c=a.$wrapperEl.children("."+a.params.slideDuplicateClass+'[data-swiper-slide-index="'+e+'"]');a.lazy.loadInSlide(c.index(),!1)}}a.emit("lazyImageReady",s[0],r[0]),a.params.autoHeight&&a.updateAutoHeight()}})),a.emit("lazyImageLoad",s[0],r[0])}))}},load:function(){var e=this,t=e.$wrapperEl,a=e.params,i=e.slides,s=e.activeIndex,r=e.virtual&&a.virtual.enabled,n=a.lazy,l=a.slidesPerView;function o(e){if(r){if(t.children("."+a.slideClass+'[data-swiper-slide-index="'+e+'"]').length)return!0}else if(i[e])return!0;return!1}function d(e){return r?m(e).attr("data-swiper-slide-index"):m(e).index()}if("auto"===l&&(l=0),e.lazy.initialImageLoaded||(e.lazy.initialImageLoaded=!0),e.params.watchSlidesVisibility)t.children("."+a.slideVisibleClass).each((function(t){var a=r?m(t).attr("data-swiper-slide-index"):m(t).index();e.lazy.loadInSlide(a)}));else if(l>1)for(var p=s;p1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){for(var u=n.loadPrevNextAmount,c=l,h=Math.min(s+c+Math.max(u,c),i.length),v=Math.max(s-Math.max(c,u),0),f=s+l;f0&&e.lazy.loadInSlide(d(b));var w=t.children("."+a.slidePrevClass);w.length>0&&e.lazy.loadInSlide(d(w))}},checkInViewOnLoad:function(){var e=l(),t=this;if(t&&!t.destroyed){var a=t.params.lazy.scrollingElement?m(t.params.lazy.scrollingElement):m(e),i=a[0]===e,s=i?e.innerWidth:a[0].offsetWidth,r=i?e.innerHeight:a[0].offsetHeight,n=t.$el.offset(),o=!1;t.rtlTranslate&&(n.left-=t.$el[0].scrollLeft);for(var d=[[n.left,n.top],[n.left+t.width,n.top],[n.left,n.top+t.height],[n.left+t.width,n.top+t.height]],p=0;p=0&&u[0]<=s&&u[1]>=0&&u[1]<=r){if(0===u[0]&&0===u[1])continue;o=!0}}var c=!("touchstart"!==t.touchEvents.start||!t.support.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1};o?(t.lazy.load(),a.off("scroll",t.lazy.checkInViewOnLoad,c)):t.lazy.scrollHandlerAttached||(t.lazy.scrollHandlerAttached=!0,a.on("scroll",t.lazy.checkInViewOnLoad,c))}}},re={LinearSpline:function(e,t){var a,i,s,r,n,l=function(e,t){for(i=-1,a=e.length;a-i>1;)e[s=a+i>>1]<=t?i=s:a=s;return a};return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(n=l(this.x,e),r=n-1,(e-this.x[r])*(this.y[n]-this.y[r])/(this.x[n]-this.x[r])+this.y[r]):0},this},getInterpolateFunction:function(e){var t=this;t.controller.spline||(t.controller.spline=t.params.loop?new re.LinearSpline(t.slidesGrid,e.slidesGrid):new re.LinearSpline(t.snapGrid,e.snapGrid))},setTranslate:function(e,t){var a,i,s=this,r=s.controller.control,n=s.constructor;function l(e){var t=s.rtlTranslate?-s.translate:s.translate;"slide"===s.params.controller.by&&(s.controller.getInterpolateFunction(e),i=-s.controller.spline.interpolate(-t)),i&&"container"!==s.params.controller.by||(a=(e.maxTranslate()-e.minTranslate())/(s.maxTranslate()-s.minTranslate()),i=(t-s.minTranslate())*a+e.minTranslate()),s.params.controller.inverse&&(i=e.maxTranslate()-i),e.updateProgress(i),e.setTranslate(i,s),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(r))for(var o=0;o0&&(e.isBeginning?(e.a11y.disableEl(i),e.a11y.makeElNotFocusable(i)):(e.a11y.enableEl(i),e.a11y.makeElFocusable(i))),a&&a.length>0&&(e.isEnd?(e.a11y.disableEl(a),e.a11y.makeElNotFocusable(a)):(e.a11y.enableEl(a),e.a11y.makeElFocusable(a)))}},updatePagination:function(){var e=this,t=e.params.a11y;e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.bullets.each((function(a){var i=m(a);e.a11y.makeElFocusable(i),e.params.pagination.renderBullet||(e.a11y.addElRole(i,"button"),e.a11y.addElLabel(i,t.paginationBulletMessage.replace(/\{\{index\}\}/,i.index()+1)))}))},init:function(){var e=this,t=e.params.a11y;e.$el.append(e.a11y.liveRegion);var a=e.$el;t.containerRoleDescriptionMessage&&e.a11y.addElRoleDescription(a,t.containerRoleDescriptionMessage),t.containerMessage&&e.a11y.addElLabel(a,t.containerMessage);var i=e.$wrapperEl,s=i.attr("id")||"swiper-wrapper-"+e.a11y.getRandomNumber(16),r=e.params.autoplay&&e.params.autoplay.enabled?"off":"polite";e.a11y.addElId(i,s),e.a11y.addElLive(i,r),t.itemRoleDescriptionMessage&&e.a11y.addElRoleDescription(m(e.slides),t.itemRoleDescriptionMessage),e.a11y.addElRole(m(e.slides),t.slideRole);var n,l,o=e.params.loop?e.slides.filter((function(t){return!t.classList.contains(e.params.slideDuplicateClass)})).length:e.slides.length;e.slides.each((function(a,i){var s=m(a),r=e.params.loop?parseInt(s.attr("data-swiper-slide-index"),10):i,n=t.slideLabelMessage.replace(/\{\{index\}\}/,r+1).replace(/\{\{slidesLength\}\}/,o);e.a11y.addElLabel(s,n)})),e.navigation&&e.navigation.$nextEl&&(n=e.navigation.$nextEl),e.navigation&&e.navigation.$prevEl&&(l=e.navigation.$prevEl),n&&n.length&&(e.a11y.makeElFocusable(n),"BUTTON"!==n[0].tagName&&(e.a11y.addElRole(n,"button"),n.on("keydown",e.a11y.onEnterOrSpaceKey)),e.a11y.addElLabel(n,t.nextSlideMessage),e.a11y.addElControls(n,s)),l&&l.length&&(e.a11y.makeElFocusable(l),"BUTTON"!==l[0].tagName&&(e.a11y.addElRole(l,"button"),l.on("keydown",e.a11y.onEnterOrSpaceKey)),e.a11y.addElLabel(l,t.prevSlideMessage),e.a11y.addElControls(l,s)),e.pagination&&e.params.pagination.clickable&&e.pagination.bullets&&e.pagination.bullets.length&&e.pagination.$el.on("keydown",P(e.params.pagination.bulletClass),e.a11y.onEnterOrSpaceKey)},destroy:function(){var e,t,a=this;a.a11y.liveRegion&&a.a11y.liveRegion.length>0&&a.a11y.liveRegion.remove(),a.navigation&&a.navigation.$nextEl&&(e=a.navigation.$nextEl),a.navigation&&a.navigation.$prevEl&&(t=a.navigation.$prevEl),e&&e.off("keydown",a.a11y.onEnterOrSpaceKey),t&&t.off("keydown",a.a11y.onEnterOrSpaceKey),a.pagination&&a.params.pagination.clickable&&a.pagination.bullets&&a.pagination.bullets.length&&a.pagination.$el.off("keydown",P(a.params.pagination.bulletClass),a.a11y.onEnterOrSpaceKey)}},le={init:function(){var e=this,t=l();if(e.params.history){if(!t.history||!t.history.pushState)return e.params.history.enabled=!1,void(e.params.hashNavigation.enabled=!0);var a=e.history;a.initialized=!0,a.paths=le.getPathValues(e.params.url),(a.paths.key||a.paths.value)&&(a.scrollToSlide(0,a.paths.value,e.params.runCallbacksOnInit),e.params.history.replaceState||t.addEventListener("popstate",e.history.setHistoryPopState))}},destroy:function(){var e=l();this.params.history.replaceState||e.removeEventListener("popstate",this.history.setHistoryPopState)},setHistoryPopState:function(){var e=this;e.history.paths=le.getPathValues(e.params.url),e.history.scrollToSlide(e.params.speed,e.history.paths.value,!1)},getPathValues:function(e){var t=l(),a=(e?new URL(e):t.location).pathname.slice(1).split("/").filter((function(e){return""!==e})),i=a.length;return{key:a[i-2],value:a[i-1]}},setHistory:function(e,t){var a=this,i=l();if(a.history.initialized&&a.params.history.enabled){var s;s=a.params.url?new URL(a.params.url):i.location;var r=a.slides.eq(t),n=le.slugify(r.attr("data-history"));if(a.params.history.root.length>0){var o=a.params.history.root;"/"===o[o.length-1]&&(o=o.slice(0,o.length-1)),n=o+"/"+e+"/"+n}else s.pathname.includes(e)||(n=e+"/"+n);var d=i.history.state;d&&d.value===n||(a.params.history.replaceState?i.history.replaceState({value:n},null,n):i.history.pushState({value:n},null,n))}},slugify:function(e){return e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,"")},scrollToSlide:function(e,t,a){var i=this;if(t)for(var s=0,r=i.slides.length;s
      '),i.append(e)),e.css({height:r+"px"})):0===(e=a.find(".swiper-cube-shadow")).length&&(e=m('
      '),a.append(e)));for(var v=0;v-1&&(h=90*g+90*y,l&&(h=90*-g-90*y)),f.transform(C),p.slideShadows){var S=u?f.find(".swiper-slide-shadow-left"):f.find(".swiper-slide-shadow-top"),M=u?f.find(".swiper-slide-shadow-right"):f.find(".swiper-slide-shadow-bottom");0===S.length&&(S=m('
      '),f.append(S)),0===M.length&&(M=m('
      '),f.append(M)),S.length&&(S[0].style.opacity=Math.max(-y,0)),M.length&&(M[0].style.opacity=Math.max(y,0))}}if(i.css({"-webkit-transform-origin":"50% 50% -"+o/2+"px","-moz-transform-origin":"50% 50% -"+o/2+"px","-ms-transform-origin":"50% 50% -"+o/2+"px","transform-origin":"50% 50% -"+o/2+"px"}),p.shadow)if(u)e.transform("translate3d(0px, "+(r/2+p.shadowOffset)+"px, "+-r/2+"px) rotateX(90deg) rotateZ(0deg) scale("+p.shadowScale+")");else{var z=Math.abs(h)-90*Math.floor(Math.abs(h)/90),P=1.5-(Math.sin(2*z*Math.PI/360)/2+Math.cos(2*z*Math.PI/360)/2),k=p.shadowScale,$=p.shadowScale/P,L=p.shadowOffset;e.transform("scale3d("+k+", 1, "+$+") translate3d(0px, "+(n/2+L)+"px, "+-n/2/$+"px) rotateX(-90deg)")}var I=d.isSafari||d.isWebView?-o/2:0;i.transform("translate3d(0px,0,"+I+"px) rotateX("+(t.isHorizontal()?0:h)+"deg) rotateY("+(t.isHorizontal()?-h:0)+"deg)")},setTransition:function(e){var t=this,a=t.$el;t.slides.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()&&a.find(".swiper-cube-shadow").transition(e)}},ce={setTranslate:function(){for(var e=this,t=e.slides,a=e.rtlTranslate,i=0;i
      '),s.append(p)),0===u.length&&(u=m('
      '),s.append(u)),p.length&&(p[0].style.opacity=Math.max(-r,0)),u.length&&(u[0].style.opacity=Math.max(r,0))}s.transform("translate3d("+o+"px, "+d+"px, 0px) rotateX("+l+"deg) rotateY("+n+"deg)")}},setTransition:function(e){var t=this,a=t.slides,i=t.activeIndex,s=t.$wrapperEl;if(a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.virtualTranslate&&0!==e){var r=!1;a.eq(i).transitionEnd((function(){if(!r&&t&&!t.destroyed){r=!0,t.animating=!1;for(var e=["webkitTransitionEnd","transitionend"],a=0;a
      '),h.append(S)),0===M.length&&(M=m('
      '),h.append(M)),S.length&&(S[0].style.opacity=f>0?f:0),M.length&&(M[0].style.opacity=-f>0?-f:0)}}},setTransition:function(e){this.slides.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)}},ve={init:function(){var e=this,t=e.params.thumbs;if(e.thumbs.initialized)return!1;e.thumbs.initialized=!0;var a=e.constructor;return t.swiper instanceof a?(e.thumbs.swiper=t.swiper,M(e.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),M(e.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1})):C(t.swiper)&&(e.thumbs.swiper=new a(M({},t.swiper,{watchSlidesVisibility:!0,watchSlidesProgress:!0,slideToClickedSlide:!1})),e.thumbs.swiperCreated=!0),e.thumbs.swiper.$el.addClass(e.params.thumbs.thumbsContainerClass),e.thumbs.swiper.on("tap",e.thumbs.onThumbClick),!0},onThumbClick:function(){var e=this,t=e.thumbs.swiper;if(t){var a=t.clickedIndex,i=t.clickedSlide;if(!(i&&m(i).hasClass(e.params.thumbs.slideThumbActiveClass)||null==a)){var s;if(s=t.params.loop?parseInt(m(t.clickedSlide).attr("data-swiper-slide-index"),10):a,e.params.loop){var r=e.activeIndex;e.slides.eq(r).hasClass(e.params.slideDuplicateClass)&&(e.loopFix(),e._clientLeft=e.$wrapperEl[0].clientLeft,r=e.activeIndex);var n=e.slides.eq(r).prevAll('[data-swiper-slide-index="'+s+'"]').eq(0).index(),l=e.slides.eq(r).nextAll('[data-swiper-slide-index="'+s+'"]').eq(0).index();s=void 0===n?l:void 0===l?n:l-r1?p:o:p-ot.previousIndex?"next":"prev"}else l=(n=t.realIndex)>t.previousIndex?"next":"prev";r&&(n+="next"===l?s:-1*s),a.visibleSlidesIndexes&&a.visibleSlidesIndexes.indexOf(n)<0&&(a.params.centeredSlides?n=n>o?n-Math.floor(i/2)+1:n+Math.floor(i/2)-1:n>o&&a.params.slidesPerGroup,a.slideTo(n,e?0:void 0))}var u=1,c=t.params.thumbs.slideThumbActiveClass;if(t.params.slidesPerView>1&&!t.params.centeredSlides&&(u=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(u=1),u=Math.floor(u),a.slides.removeClass(c),a.params.loop||a.params.virtual&&a.params.virtual.enabled)for(var h=0;h0&&!m(a).hasClass(e.params.pagination.bulletClass)){if(e.navigation&&(e.navigation.nextEl&&a===e.navigation.nextEl||e.navigation.prevEl&&a===e.navigation.prevEl))return;!0===e.pagination.$el.hasClass(e.params.pagination.hiddenClass)?e.emit("paginationShow"):e.emit("paginationHide"),e.pagination.$el.toggleClass(e.params.pagination.hiddenClass)}}}},{name:"scrollbar",params:{scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}},create:function(){z(this,{scrollbar:t({isTouched:!1,timeout:null,dragTimeout:null},te)})},on:{init:function(e){e.scrollbar.init(),e.scrollbar.updateSize(),e.scrollbar.setTranslate()},update:function(e){e.scrollbar.updateSize()},resize:function(e){e.scrollbar.updateSize()},observerUpdate:function(e){e.scrollbar.updateSize()},setTranslate:function(e){e.scrollbar.setTranslate()},setTransition:function(e,t){e.scrollbar.setTransition(t)},"enable disable":function(e){var t=e.scrollbar.$el;t&&t[e.enabled?"removeClass":"addClass"](e.params.scrollbar.lockClass)},destroy:function(e){e.scrollbar.destroy()}}},{name:"parallax",params:{parallax:{enabled:!1}},create:function(){z(this,{parallax:t({},ae)})},on:{beforeInit:function(e){e.params.parallax.enabled&&(e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},init:function(e){e.params.parallax.enabled&&e.parallax.setTranslate()},setTranslate:function(e){e.params.parallax.enabled&&e.parallax.setTranslate()},setTransition:function(e,t){e.params.parallax.enabled&&e.parallax.setTransition(t)}}},{name:"zoom",params:{zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}},create:function(){var e=this;z(e,{zoom:t({enabled:!1,scale:1,currentScale:1,isScaling:!1,gesture:{$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},image:{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:{}},velocity:{x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0}},ie)});var a=1;Object.defineProperty(e.zoom,"scale",{get:function(){return a},set:function(t){if(a!==t){var i=e.zoom.gesture.$imageEl?e.zoom.gesture.$imageEl[0]:void 0,s=e.zoom.gesture.$slideEl?e.zoom.gesture.$slideEl[0]:void 0;e.emit("zoomChange",t,i,s)}a=t}})},on:{init:function(e){e.params.zoom.enabled&&e.zoom.enable()},destroy:function(e){e.zoom.disable()},touchStart:function(e,t){e.zoom.enabled&&e.zoom.onTouchStart(t)},touchEnd:function(e,t){e.zoom.enabled&&e.zoom.onTouchEnd(t)},doubleTap:function(e,t){!e.animating&&e.params.zoom.enabled&&e.zoom.enabled&&e.params.zoom.toggle&&e.zoom.toggle(t)},transitionEnd:function(e){e.zoom.enabled&&e.params.zoom.enabled&&e.zoom.onTransitionEnd()},slideChange:function(e){e.zoom.enabled&&e.params.zoom.enabled&&e.params.cssMode&&e.zoom.onTransitionEnd()}}},{name:"lazy",params:{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"}},create:function(){z(this,{lazy:t({initialImageLoaded:!1},se)})},on:{beforeInit:function(e){e.params.lazy.enabled&&e.params.preloadImages&&(e.params.preloadImages=!1)},init:function(e){e.params.lazy.enabled&&!e.params.loop&&0===e.params.initialSlide&&(e.params.lazy.checkInView?e.lazy.checkInViewOnLoad():e.lazy.load())},scroll:function(e){e.params.freeMode&&!e.params.freeModeSticky&&e.lazy.load()},"scrollbarDragMove resize _freeModeNoMomentumRelease":function(e){e.params.lazy.enabled&&e.lazy.load()},transitionStart:function(e){e.params.lazy.enabled&&(e.params.lazy.loadOnTransitionStart||!e.params.lazy.loadOnTransitionStart&&!e.lazy.initialImageLoaded)&&e.lazy.load()},transitionEnd:function(e){e.params.lazy.enabled&&!e.params.lazy.loadOnTransitionStart&&e.lazy.load()},slideChange:function(e){var t=e.params,a=t.lazy,i=t.cssMode,s=t.watchSlidesVisibility,r=t.watchSlidesProgress,n=t.touchReleaseOnEdges,l=t.resistanceRatio;a.enabled&&(i||(s||r)&&(n||0===l))&&e.lazy.load()}}},{name:"controller",params:{controller:{control:void 0,inverse:!1,by:"slide"}},create:function(){z(this,{controller:t({control:this.params.controller.control},re)})},on:{update:function(e){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},resize:function(e){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},observerUpdate:function(e){e.controller.control&&e.controller.spline&&(e.controller.spline=void 0,delete e.controller.spline)},setTranslate:function(e,t,a){e.controller.control&&e.controller.setTranslate(t,a)},setTransition:function(e,t,a){e.controller.control&&e.controller.setTransition(t,a)}}},{name:"a11y",params:{a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group"}},create:function(){z(this,{a11y:t({},ne,{liveRegion:m('')})})},on:{afterInit:function(e){e.params.a11y.enabled&&(e.a11y.init(),e.a11y.updateNavigation())},toEdge:function(e){e.params.a11y.enabled&&e.a11y.updateNavigation()},fromEdge:function(e){e.params.a11y.enabled&&e.a11y.updateNavigation()},paginationUpdate:function(e){e.params.a11y.enabled&&e.a11y.updatePagination()},destroy:function(e){e.params.a11y.enabled&&e.a11y.destroy()}}},{name:"history",params:{history:{enabled:!1,root:"",replaceState:!1,key:"slides"}},create:function(){z(this,{history:t({},le)})},on:{init:function(e){e.params.history.enabled&&e.history.init()},destroy:function(e){e.params.history.enabled&&e.history.destroy()},"transitionEnd _freeModeNoMomentumRelease":function(e){e.history.initialized&&e.history.setHistory(e.params.history.key,e.activeIndex)},slideChange:function(e){e.history.initialized&&e.params.cssMode&&e.history.setHistory(e.params.history.key,e.activeIndex)}}},{name:"hash-navigation",params:{hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}},create:function(){z(this,{hashNavigation:t({initialized:!1},oe)})},on:{init:function(e){e.params.hashNavigation.enabled&&e.hashNavigation.init()},destroy:function(e){e.params.hashNavigation.enabled&&e.hashNavigation.destroy()},"transitionEnd _freeModeNoMomentumRelease":function(e){e.hashNavigation.initialized&&e.hashNavigation.setHash()},slideChange:function(e){e.hashNavigation.initialized&&e.params.cssMode&&e.hashNavigation.setHash()}}},{name:"autoplay",params:{autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}},create:function(){z(this,{autoplay:t({},de,{running:!1,paused:!1})})},on:{init:function(e){e.params.autoplay.enabled&&(e.autoplay.start(),r().addEventListener("visibilitychange",e.autoplay.onVisibilityChange),e.autoplay.attachMouseEvents())},beforeTransitionStart:function(e,t,a){e.autoplay.running&&(a||!e.params.autoplay.disableOnInteraction?e.autoplay.pause(t):e.autoplay.stop())},sliderFirstMove:function(e){e.autoplay.running&&(e.params.autoplay.disableOnInteraction?e.autoplay.stop():e.autoplay.pause())},touchEnd:function(e){e.params.cssMode&&e.autoplay.paused&&!e.params.autoplay.disableOnInteraction&&e.autoplay.run()},destroy:function(e){e.autoplay.detachMouseEvents(),e.autoplay.running&&e.autoplay.stop(),r().removeEventListener("visibilitychange",e.autoplay.onVisibilityChange)}}},{name:"effect-fade",params:{fadeEffect:{crossFade:!1}},create:function(){z(this,{fadeEffect:t({},pe)})},on:{beforeInit:function(e){if("fade"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"fade");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};M(e.params,t),M(e.originalParams,t)}},setTranslate:function(e){"fade"===e.params.effect&&e.fadeEffect.setTranslate()},setTransition:function(e,t){"fade"===e.params.effect&&e.fadeEffect.setTransition(t)}}},{name:"effect-cube",params:{cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}},create:function(){z(this,{cubeEffect:t({},ue)})},on:{beforeInit:function(e){if("cube"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"cube"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0};M(e.params,t),M(e.originalParams,t)}},setTranslate:function(e){"cube"===e.params.effect&&e.cubeEffect.setTranslate()},setTransition:function(e,t){"cube"===e.params.effect&&e.cubeEffect.setTransition(t)}}},{name:"effect-flip",params:{flipEffect:{slideShadows:!0,limitRotation:!0}},create:function(){z(this,{flipEffect:t({},ce)})},on:{beforeInit:function(e){if("flip"===e.params.effect){e.classNames.push(e.params.containerModifierClass+"flip"),e.classNames.push(e.params.containerModifierClass+"3d");var t={slidesPerView:1,slidesPerColumn:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!0};M(e.params,t),M(e.originalParams,t)}},setTranslate:function(e){"flip"===e.params.effect&&e.flipEffect.setTranslate()},setTransition:function(e,t){"flip"===e.params.effect&&e.flipEffect.setTransition(t)}}},{name:"effect-coverflow",params:{coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0}},create:function(){z(this,{coverflowEffect:t({},he)})},on:{beforeInit:function(e){"coverflow"===e.params.effect&&(e.classNames.push(e.params.containerModifierClass+"coverflow"),e.classNames.push(e.params.containerModifierClass+"3d"),e.params.watchSlidesProgress=!0,e.originalParams.watchSlidesProgress=!0)},setTranslate:function(e){"coverflow"===e.params.effect&&e.coverflowEffect.setTranslate()},setTransition:function(e,t){"coverflow"===e.params.effect&&e.coverflowEffect.setTransition(t)}}},{name:"thumbs",params:{thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-container-thumbs"}},create:function(){z(this,{thumbs:t({swiper:null,initialized:!1},ve)})},on:{beforeInit:function(e){var t=e.params.thumbs;t&&t.swiper&&(e.thumbs.init(),e.thumbs.update(!0))},slideChange:function(e){e.thumbs.swiper&&e.thumbs.update()},update:function(e){e.thumbs.swiper&&e.thumbs.update()},resize:function(e){e.thumbs.swiper&&e.thumbs.update()},observerUpdate:function(e){e.thumbs.swiper&&e.thumbs.update()},setTransition:function(e,t){var a=e.thumbs.swiper;a&&a.setTransition(t)},beforeDestroy:function(e){var t=e.thumbs.swiper;t&&e.thumbs.swiperCreated&&t&&t.destroy()}}}];return q.use(fe),q})); + //# sourceMappingURL=swiper-bundle.min.js.map \ No newline at end of file diff --git a/apiferia/src/assets/js/swiper.js b/apiferia/src/assets/js/swiper.js new file mode 100644 index 00000000..eec6f60b --- /dev/null +++ b/apiferia/src/assets/js/swiper.js @@ -0,0 +1,744 @@ +// ainimate sider +(function ($) { + var Spanizer = (function () { + var settings = { + letters: $('.js-letters'), + }; + return { + init: function () { + this.bind(); + }, + bind: function () { + Spanizer.doSpanize(); + }, + doSpanize: function () { + settings.letters.html(function (i, el) { + var spanize = $.trim(el).split(""); + var template = '' + spanize.join('') + '' + return template; + }); + }, + }; + })(); + // Let's GO! + if (matchMedia("only screen and (min-width: 768px)").matches) { + Spanizer.init(); + } +})(jQuery); + +//slider +if ($(".tf-sw-mobile").length > 0) { + var preview = $(".tf-sw-mobile").data("preview"); + var tablet = $(".tf-sw-mobile").data("tablet"); + var mobile = $(".tf-sw-mobile").data("mobile"); + var mobileSm = $(".tf-sw-mobile").data("mobile-sm"); + var spacingLg = $(".tf-sw-mobile").data("space-lg"); + var spacingMd = $(".tf-sw-mobile").data("space-md"); + var spacing = $(".tf-sw-mobile").data("space"); + var swiper = new Swiper(".tf-sw-mobile", { + slidesPerView: mobile, + spaceBetween: spacing, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + navigation: { + clickable: true, + nextEl: ".nav-prev-latest", + prevEl: ".nav-next-latest", + }, + breakpoints: { + 575: { + slidesPerView: mobileSm, + spaceBetween: spacing, + }, + 768: { + slidesPerView: tablet, + spaceBetween: spacingMd, + }, + 1150: { + slidesPerView: preview, + spaceBetween: spacingLg, + }, + }, + }); +} +if ($(".tf-sw-mobile2").length > 0) { + let swiperMb; + let screenWidth = $('.tf-sw-mobile2').data('screen'); + function initSwiperMb() { + if (matchMedia("only screen and (max-width: 1200px)").matches) { + if (!swiperMb) { + let preview = $(".tf-sw-mobile2").data("preview"); + let spacing = $(".tf-sw-mobile2").data("space"); + + swiperMb = new Swiper(".tf-sw-mobile2", { + slidesPerView: preview, + spaceBetween: spacing, + observer: true, + observeParents: true, + speed: 1000, + pagination: { + el: ".swiper-pagination5", + clickable: true, + }, + navigation: { + clickable: true, + nextEl: ".nav-prev-mb-1", + prevEl: ".nav-next-mb-1", + }, + breakpoints: { + 0: { + slidesPerView: 1, + }, + 600: { + slidesPerView: 2, + }, + 991: { + slidesPerView: 3, + }, + 1200: { + slidesPerView: preview, + }, + }, + }); + } + } else { + if (swiperMb) { + swiperMb.destroy(true, true); + swiperMb = null; + $(".tf-sw-mobile2 .swiper-wrapper").removeAttr('style'); + $(".tf-sw-mobile2 .swiper-slide").removeAttr('style'); + } + } + } + + initSwiperMb(); + window.addEventListener("resize", function () { + initSwiperMb(); + }); +} +if ($(".tf-sw-mobile4").length > 0) { + let swiperMb; + let screenWidth = $('.tf-sw-mobile4').data('screen'); + function initSwiperMb() { + if (matchMedia("only screen and (max-width: 1200px)").matches) { + if (!swiperMb) { + let preview = $(".tf-sw-mobile4").data("preview"); + let spacing = $(".tf-sw-mobile4").data("space"); + + swiperMb = new Swiper(".tf-sw-mobile4", { + slidesPerView: preview, + spaceBetween: spacing, + speed: 1000, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination5", + clickable: true, + }, + navigation: { + clickable: true, + nextEl: ".nav-prev-mb-1", + prevEl: ".nav-next-mb-1", + }, + breakpoints: { + 0: { + slidesPerView: 1, + }, + 600: { + slidesPerView: 2, + }, + 991: { + slidesPerView: 3, + }, + 1200: { + slidesPerView: preview, + }, + }, + }); + } + } else { + if (swiperMb) { + swiperMb.destroy(true, true); + swiperMb = null; + $(".tf-sw-mobile4 .swiper-wrapper").removeAttr('style'); + $(".tf-sw-mobile4 .swiper-slide").removeAttr('style'); + } + } + } + + initSwiperMb(); + window.addEventListener("resize", function () { + initSwiperMb(); + }); +} +if ($(".tf-sw-mobile6").length > 0) { + let swiperMb; + let screenWidth = $('.tf-sw-mobile6').data('screen'); + function initSwiperMb() { + if (matchMedia("only screen and (max-width: 1200px)").matches) { + if (!swiperMb) { + let preview = $(".tf-sw-mobile6").data("preview"); + let spacing = $(".tf-sw-mobile6").data("space"); + + swiperMb = new Swiper(".tf-sw-mobile6", { + slidesPerView: preview, + spaceBetween: spacing, + speed: 1000, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination5", + clickable: true, + }, + navigation: { + clickable: true, + nextEl: ".nav-prev-mb-1", + prevEl: ".nav-next-mb-1", + }, + breakpoints: { + 0: { + slidesPerView: 1, + }, + 600: { + slidesPerView: 2, + }, + 991: { + slidesPerView: 4, + }, + 1200: { + slidesPerView: 5, + }, + }, + }); + } + } else { + if (swiperMb) { + swiperMb.destroy(true, true); + swiperMb = null; + $(".tf-sw-mobile6 .swiper-wrapper").removeAttr('style'); + $(".tf-sw-mobile6 .swiper-slide").removeAttr('style'); + } + } + } + + initSwiperMb(); + window.addEventListener("resize", function () { + initSwiperMb(); + }); +} +if ($(".tf-sw-mobile7").length > 0) { + let swiperMb; + let screenWidth = $('.tf-sw-mobile7').data('screen'); + function initSwiperMb() { + if (matchMedia("only screen and (max-width: 991px)").matches) { + if (!swiperMb) { + let preview = $(".tf-sw-mobile7").data("preview"); + let spacing = $(".tf-sw-mobile7").data("space"); + + swiperMb = new Swiper(".tf-sw-mobile7", { + slidesPerView: preview, + spaceBetween: spacing, + speed: 1000, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + navigation: { + clickable: true, + nextEl: ".nav-prev-mb-1", + prevEl: ".nav-next-mb-1", + }, + breakpoints: { + 0: { + slidesPerView: 1, + }, + 480: { + slidesPerView: 2, + }, + 991: { + slidesPerView: preview, + }, + }, + }); + } + } else { + if (swiperMb) { + swiperMb.destroy(true, true); + swiperMb = null; + $(".tf-sw-mobile7 .swiper-wrapper").removeAttr('style'); + $(".tf-sw-mobile7 .swiper-slide").removeAttr('style'); + } + } + } + + initSwiperMb(); + window.addEventListener("resize", function () { + initSwiperMb(); + }); +} + +var swiper = new Swiper(".tf-sw-mobile3", { + speed: 1000, + spaceBetween: 30, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination5", + clickable: true, + }, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 600: { + slidesPerView: 2, + spaceBetween: 20, + }, + 991: { + slidesPerView: 3, + }, + 1200: { + slidesPerView: 4, + }, + }, +}); +var swiper = new Swiper(".tf-sw-mobile5", { + speed: 1000, + spaceBetween: 30, + observer: true, + observeParents: true, + pagination: { + el: ".sw-pagination-mb", + clickable: true, + }, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 600: { + slidesPerView: 2, + spaceBetween: 20, + }, + 991: { + slidesPerView: 3, + }, + 1200: { + slidesPerView: 4, + }, + }, +}); +var swiper = new Swiper(".mainslider", { + autoplay: { + delay: 6000, + disableOnInteraction: false, + }, + slidesPerView: 1, + observeParents: true, + speed: 500, + effect: "fade", + fadeEffect: { + crossFade: true, + }, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, + pagination: { + el: ".swiper-pagination5", + clickable: true, + + }, +}); +var swiper = new Swiper(".partner-slide", { + slidesPerView: 6, + spaceBetween: 30, + // autoplay: { + // delay: 0, + // disableOnInteraction: false, + // }, + // speed: 10000, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination4", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 2, + spaceBetween: 20, + }, + 600: { + slidesPerView: 3, + spaceBetween: 20, + }, + 992: { + slidesPerView: 4, + }, + 1440: { + slidesPerView: 6, + }, + }, +}); +var swiper = new Swiper(".partner-slide2", { + slidesPerView: 8, + spaceBetween: 30, + // autoplay: { + // delay: 0, + // disableOnInteraction: false, + // }, + // speed: 10000, + observer: true, + observeParents: true, + loop: true, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 480: { + slidesPerView: 2, + spaceBetween: 20, + }, + 992: { + slidesPerView: 5, + }, + 1440: { + slidesPerView: 8, + }, + }, +}); +var swiper = new Swiper(".partner-slide3", { + observer: true, + observeParents: true, + spaceBetween: 30, + slidesPerView: 6, + slidesPerColumn: 2, + slidesPerColumnFill: 'row', + // direction: 'horizontal', + // loop: true, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 450: { + slidesPerView: 2, + spaceBetween: 20, + }, + 768: { + slidesPerView: 4, + }, + 1400: { + slidesPerView: 6, + }, + }, +}); +var swiper = new Swiper(".carousel-1", { + slidesPerView: 8, + spaceBetween: 30, + autoplay: { + delay: 0, + disableOnInteraction: false, + }, + speed: 10000, + loop: true, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination5", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 2, + spaceBetween: 20, + + }, + 480: { + slidesPerView: 3, + spaceBetween: 20, + }, + 768: { + slidesPerView: 4, + }, + 992: { + slidesPerView: 5, + }, + 1440: { + slidesPerView: 8, + }, + }, +}); +var swiper = new Swiper(".carousel-2", { + // autoplay: { + // delay: 5000, + // disableOnInteraction: false, + // }, + loop: false, + slidesPerView: 1, + observer: true, + observeParents: true, + spaceBetween: 0, + navigation: { + clickable: true, + nextEl: ".swiper-button-next2", + prevEl: ".swiper-button-prev2", + }, + pagination: { + el: ".swiper-pagination2", + clickable: true, + }, + breakpoints: { + 768: { + slidesPerView: 1, + spaceBetween: 0, + }, + 1200: { + slidesPerView: 1, + spaceBetween: 0, + }, + }, +}); +var swiper = new Swiper(".carousel-3", { + slidesPerView: 1, + speed: 500, + effect: "fade", + observer: true, + observeParents: true, + fadeEffect: { + crossFade: true, + }, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev", + }, +}); +var swiper = new Swiper(".carousel-5", { + autoplay: { + delay: 0, + disableOnInteraction: false, + }, + slidesPerView: 2, + loop: true, + spaceBetween: 30, + speed: 10000, + observer: true, + observeParents: true, + pagination: { + el: ".swiper-pagination", + clickable: true, + }, + breakpoints: { + 450: { + slidesPerView: 3, + spaceBetween: 20, + }, + 768: { + slidesPerView: 4, + spaceBetween: 20, + }, + 868: { + slidesPerView: 5, + spaceBetween: 30, + }, + 992: { + slidesPerView: 6, + spaceBetween: 30, + }, + }, +}); +var swiper = new Swiper(".carousel-6", { + // autoplay: { + // delay: 5000, + // disableOnInteraction: false, + // }, + loop: true, + observer: true, + observeParents: true, + slidesPerView: 1, + spaceBetween: 30, + centeredSlides: true, + navigation: { + clickable: true, + nextEl: ".swiper-button-next4", + prevEl: ".swiper-button-prev4", + }, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 768: { + slidesPerView: 2, + spaceBetween: 20, + }, + 992: { + slidesPerView: 3, + spaceBetween: 30, + }, + 1440: { + slidesPerView: 4.3, + spaceBetween: 30, + }, + }, +}); +var swiper = new Swiper(".carousel-7", { + // autoplay: { + // delay: 5000, + // disableOnInteraction: false, + // }, + loop: true, + slidesPerView: 1, + observer: true, + observeParents: true, + spaceBetween: 30, + navigation: { + clickable: true, + nextEl: ".swiper-button-next4", + prevEl: ".swiper-button-prev4", + }, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 768: { + slidesPerView: 2, + spaceBetween: 20, + }, + 992: { + slidesPerView: 3, + spaceBetween: 30, + }, + + }, +}); +var swiper = new Swiper(".carousel-8", { + // autoplay: { + // delay: 5000, + // disableOnInteraction: false, + // }, + loop: true, + slidesPerView: 1, + observer: true, + observeParents: true, + spaceBetween: 30, + navigation: { + clickable: true, + nextEl: ".swiper-button-next4", + prevEl: ".swiper-button-prev4", + }, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 768: { + slidesPerView: 1, + spaceBetween: 20, + }, + 992: { + slidesPerView: 2, + spaceBetween: 30, + }, + 1440: { + slidesPerView: 2.8, + spaceBetween: 30, + }, + }, +}); +var swiper = new Swiper(".carousel-9", { + // autoplay: { + // delay: 5000, + // disableOnInteraction: false, + // }, + loop: true, + slidesPerView: 1, + spaceBetween: 10, + observer: true, + observeParents: true, + navigation: { + clickable: true, + nextEl: ".swiper-button-next4", + prevEl: ".swiper-button-prev4", + }, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + breakpoints: { + 768: { + slidesPerView: 1, + }, + 992: { + slidesPerView: 2, + }, + 1440: { + slidesPerView: 3, + }, + }, +}); +var swiper = new Swiper(".listing-slide", { + slidesPerView: 3, + spaceBetween: 40, + centeredSlides: true, + observer: true, + observeParents: true, + centeredSlidesBounds: true, + speed: 1000, + loop: true, + pagination: { + el: ".swiper-pagination3", + clickable: true, + }, + navigation: { + nextEl: ".swiper-button-next", + prevEl: ".swiper-button-prev" + }, + breakpoints: { + 0: { + slidesPerView: 1, + spaceBetween: 20, + }, + 768: { + slidesPerView: 2, + spaceBetween: 20, + }, + 1200: { + slidesPerView: 3, + }, + }, +}); \ No newline at end of file diff --git a/apiferia/src/assets/scss/app.scss b/apiferia/src/assets/scss/app.scss new file mode 100644 index 00000000..9a4359ad --- /dev/null +++ b/apiferia/src/assets/scss/app.scss @@ -0,0 +1,83 @@ +// +// app.scss +// + +// Core files +@import 'bootstrap/scss/functions'; +@import 'bootstrap/scss/variables'; +@import 'config/variables'; +@import 'config/variables-dark'; + +@import 'config/variables-custom'; +@import 'config/theme-mode'; + + +@import 'bootstrap/scss/bootstrap'; + +// Structure +@import 'structure/topbar'; +@import 'structure/vertical'; +@import 'structure/page-title'; +@import 'structure/footer'; + +// Bootstrap +@import 'components/accordion'; +@import 'components/alerts'; +@import 'components/avatar'; +@import 'components/backgrounds'; +@import 'components/badge'; +@import 'components/breadcrumb'; +@import 'components/buttons'; +@import 'components/card'; +@import 'components/docs'; +@import 'components/dropdown'; +@import 'components/forms'; +@import 'components/helper'; +@import 'components/list-group'; +@import 'components/modal'; +@import 'components/nav'; +@import 'components/pagination'; +@import 'components/popover'; +@import 'components/print'; +@import 'components/progress'; +@import 'components/reboot'; +@import 'components/switch'; +@import 'components/tables'; +@import 'components/type'; +@import 'components/tooltip'; +@import 'components/widgets'; + +// Plugin +@import 'plugins/simplebar'; +@import 'plugins/calendar'; +@import 'plugins/choice'; +@import 'plugins/dropzone'; +@import 'plugins/editors'; +@import 'plugins/gridjs'; +@import 'plugins/apexcharts'; +@import 'plugins/google-map'; +@import 'plugins/vector-map'; +@import 'plugins/dragula'; +@import 'plugins/flatpicker'; +@import 'plugins/swiper'; +@import 'plugins/sweetalert'; +@import 'plugins/prismjs'; +@import 'plugins/range-slider'; +@import 'plugins/toastify'; + +// App Page +@import 'pages/app-chat'; +@import 'pages/app-file-manager'; +@import 'pages/app-email'; +@import 'pages/app-ecommerce'; +@import 'pages/app-social'; + +// Pages +@import 'pages/icon-demo'; +@import 'pages/authentication'; +@import 'pages/pricing'; +@import 'pages/timeline'; + +@import 'config/custom_ng'; + + diff --git a/apiferia/src/assets/scss/components/_accordion.scss b/apiferia/src/assets/scss/components/_accordion.scss new file mode 100644 index 00000000..56c9ca76 --- /dev/null +++ b/apiferia/src/assets/scss/components/_accordion.scss @@ -0,0 +1,3 @@ +// +// accordions.scss +// diff --git a/apiferia/src/assets/scss/components/_alerts.scss b/apiferia/src/assets/scss/components/_alerts.scss new file mode 100644 index 00000000..4175d1e2 --- /dev/null +++ b/apiferia/src/assets/scss/components/_alerts.scss @@ -0,0 +1,5 @@ +// alert.scss + +.alert-icon { + padding: $alert-padding-y * 0.5 $alert-padding-y * 0.5; +} diff --git a/apiferia/src/assets/scss/components/_avatar.scss b/apiferia/src/assets/scss/components/_avatar.scss new file mode 100644 index 00000000..7623080e --- /dev/null +++ b/apiferia/src/assets/scss/components/_avatar.scss @@ -0,0 +1,59 @@ +// +// _avatar.scss +// + +// avatar height +.avatar-xs { + height: 1.5rem; + width: 1.5rem; +} + +.avatar-sm { + height: 2.25rem; + width: 2.25rem; +} + +.avatar { + height: 3rem; + width: 3rem; +} + +.avatar-md { + height: 3.5rem; + width: 3.5rem; +} + +.avatar-lg { + height: 4.5rem; + width: 4.5rem; +} + +.avatar-xl { + height: 6rem; + width: 6rem; +} + +.avatar-xxl { + height: 7.5rem; + width: 7.5rem; +} + +.avatar-title { + align-items: center; + color: $white; + display: flex; + height: 100%; + width: 100%; + justify-content: center; +} + +.avatar-group { + padding-left: 12px; + + .avatar-group-item { + margin: 0 0 0 -12px; + display: inline-block; + border: $border-width * 2 solid $border-color; + border-radius: 50%; + } +} diff --git a/apiferia/src/assets/scss/components/_backgrounds.scss b/apiferia/src/assets/scss/components/_backgrounds.scss new file mode 100644 index 00000000..36742c60 --- /dev/null +++ b/apiferia/src/assets/scss/components/_backgrounds.scss @@ -0,0 +1,28 @@ +// +// backgrounds.scss +// + +@each $color, $value in $theme-colors-rgb { + .bg-soft-#{$color} { + --#{$prefix}bg-opacity: 0.25; + background-color: rgba( + var(--#{$prefix}#{$color}-rgb), + var(--#{$prefix}bg-opacity) + ) !important; + } +} + +.bg-ghost { + opacity: 0.4; +} + +.bg-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; + width: 100%; + opacity: 0.7; +} diff --git a/apiferia/src/assets/scss/components/_badge.scss b/apiferia/src/assets/scss/components/_badge.scss new file mode 100644 index 00000000..634962aa --- /dev/null +++ b/apiferia/src/assets/scss/components/_badge.scss @@ -0,0 +1,26 @@ +// +// _badges.scss +// + +// Soft badge +@each $color, $value in $theme-colors-rgb { + .badge-soft-#{$color} { + --#{$prefix}badge-color: var(--#{$prefix}#{$color}); + --#{$prefix}bg-opacity: 0.18; + background-color: rgba( + var(--#{$prefix}#{$color}-rgb), + var(--#{$prefix}bg-opacity) + ) !important; + box-shadow: none; + } +} + +// Outline Badge +@each $color, $value in $theme-colors-rgb { + .badge-outline-#{$color} { + --#{$prefix}badge-color: var(--#{$prefix}#{$color}); + border: 1px solid var(--#{$prefix}#{$color}); + background-color: transparent; + box-shadow: none; + } +} diff --git a/apiferia/src/assets/scss/components/_breadcrumb.scss b/apiferia/src/assets/scss/components/_breadcrumb.scss new file mode 100644 index 00000000..765b99bc --- /dev/null +++ b/apiferia/src/assets/scss/components/_breadcrumb.scss @@ -0,0 +1,25 @@ +// +// breadcrumb.scss +// + +// Breadcrumb item arrow +.breadcrumb-item { + > a { + color: var(--#{$prefix}body-color); + + &:hover { + color: $primary; + } + } + + + .breadcrumb-item { + &::before { + font-family: 'boxicons'; + font-size: 1rem; + } + } + + &.active { + color: $breadcrumb-active-color; + } +} diff --git a/apiferia/src/assets/scss/components/_buttons.scss b/apiferia/src/assets/scss/components/_buttons.scss new file mode 100644 index 00000000..317e2d4a --- /dev/null +++ b/apiferia/src/assets/scss/components/_buttons.scss @@ -0,0 +1,184 @@ +// +// buttons.scss +// + +.button-list { + margin-left: -8px; + margin-bottom: -8px; + + .btn { + margin-bottom: 8px; + margin-left: 8px; + } +} + +button:focus { + outline: none; +} + +// Icon Button +.btn { + i, + span { + vertical-align: middle; + } + + &:focus { + box-shadow: none; + } + + .icon { + svg { + width: 1rem; + height: 1rem; + margin-left: 0.1rem; + margin-top: -2px; + } + } +} + +// Button Shadows +@each $color, $value in $theme-colors { + .btn-#{$color} { + box-shadow: $btn-box-shadow rgba(var(--#{$prefix}#{$color}-rgb), 0.5); + // @include button-shadow($value); + } +} + +// Link buttons (Make a button look and behave like a link) +.btn-link { + font-weight: $font-weight-normal; + color: $link-color; + background-color: transparent; + + &:hover { + color: $link-hover-color; + text-decoration: $link-hover-decoration; + background-color: transparent; + border-color: transparent; + } + + &:focus { + text-decoration: $link-hover-decoration; + border-color: transparent; + box-shadow: none; + } + + &:disabled { + color: $btn-link-disabled-color; + pointer-events: none; + } +} + +// Button Extra Small Size +.btn-xs { + padding: 0.2rem 0.6rem; + font-size: 0.75rem; + border-radius: $border-radius-sm; +} + +// Soft Variants +@mixin button-variant-soft($bg) { + --#{$prefix}btn-color: #{$bg}; + --#{$prefix}btn-bg: #{rgba($bg, 0.1)}; + --#{$prefix}btn-border-color: #{transparent}; + --#{$prefix}btn-hover-color: #{$white}; + --#{$prefix}btn-hover-bg: #{$bg}; + --#{$prefix}btn-hover-border-color: #{$bg}; + --#{$prefix}btn-active-color: #{$white}; + --#{$prefix}btn-active-bg: #{$bg}; + --#{$prefix}btn-active-border-color: #{$bg}; + --#{$prefix}btn-disabled-color: #{$white}; + --#{$prefix}btn-disabled-bg: #{$bg}; + --#{$prefix}btn-disabled-border-color: #{$bg}; + --#{$prefix}btn-focus-shadow-rgb: 0 0 0 $btn-focus-width rgba($bg, 0.5); +} + +// Button Soft +@each $color, $value in $theme-colors { + .btn-soft-#{$color} { + @include button-variant-soft($value); + } +} + +// Button Light and Dark +.btn-light { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: var(--#{$prefix}light); + --#{$prefix}btn-border-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-bg: var(--#{$prefix}light); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}light); + --#{$prefix}btn-disabled-color: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}light); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}light); +} + +.btn-dark { + --#{$prefix}btn-color: var(--#{$prefix}light); + --#{$prefix}btn-bg: var(--#{$prefix}dark); + --#{$prefix}btn-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-bg: var(--#{$prefix}dark); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-color: var(--#{$prefix}light); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}dark); +} + +.btn-outline-dark { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-bg: var(--#{$prefix}dark); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-color: var(--#{$prefix}light); + --#{$prefix}btn-active-bg: var(--#{$prefix}dark); + --#{$prefix}btn-active-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-color: var(--#{$prefix}light); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}dark); +} + +.btn-outline-light { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: transparent; + --#{$prefix}btn-border-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-color: var(--#{$prefix}dark); + --#{$prefix}btn-hover-bg: var(--#{$prefix}light); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}light); + --#{$prefix}btn-active-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-bg: var(--#{$prefix}light); + --#{$prefix}btn-active-border-color: var(--#{$prefix}light); + --#{$prefix}btn-disabled-color: var(--#{$prefix}dark); + --#{$prefix}btn-disabled-bg: var(--#{$prefix}light); + --#{$prefix}btn-disabled-border-color: var(--#{$prefix}light); +} + +.btn-soft-dark { + --#{$prefix}btn-color: var(--#{$prefix}dark); + --#{$prefix}btn-bg: var(--#{$prefix}light); + --#{$prefix}btn-border-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-color: var(--#{$prefix}light); + --#{$prefix}btn-hover-bg: var(--#{$prefix}dark); + --#{$prefix}btn-hover-border-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-color: var(--#{$prefix}light); + --#{$prefix}btn-active-bg: var(--#{$prefix}dark); + --#{$prefix}btn-active-border-color: var(--#{$prefix}dark); +} + +// Dark Mode +html[data-bs-theme='dark'] { + .btn-light { + --#{$prefix}btn-active-color: var(--#{$prefix}dark); + --#{$prefix}btn-active-bg: var(--#{$prefix}border-color); + --#{$prefix}btn-active-border-color: var(--#{$prefix}border-color); + } + + .btn-dark { + --#{$prefix}btn-active-color: var(--#{$prefix}light); + --#{$prefix}btn-active-bg: var(--#{$prefix}tertiary-color); + --#{$prefix}btn-active-border-color: var(--#{$prefix}tertiary-color); + } +} diff --git a/apiferia/src/assets/scss/components/_card.scss b/apiferia/src/assets/scss/components/_card.scss new file mode 100644 index 00000000..325a2fd8 --- /dev/null +++ b/apiferia/src/assets/scss/components/_card.scss @@ -0,0 +1,106 @@ +// +// card.scss +// + +.card { + box-shadow: $card-box-shadow; + margin-bottom: $spacer; +} + +.card-link + .card-link { + margin-left: $card-spacer-x; + margin-right: 0; +} + +.card-drop { + font-size: $h4-font-size; + line-height: 0; + color: inherit; +} + +.card-height-100 { + height: calc(100% - #{$spacer}); +} + +.card-widgets { + float: right; + height: 16px; + + > a { + color: inherit; + font-size: $h4-font-size; + display: inline-block; + line-height: 1; + + &.collapsed { + i { + &::before { + content: '\ebc0'; + } + } + } + } +} + +// Card title / Card Header +.card-title, +.card-header { + margin-top: 0; +} + +// Card disable loading (Custom Cards) +.card-disabled { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + border-radius: $card-border-radius; + background: rgba(var(--#{$prefix}dark-rgb), 0.5); + cursor: progress; + + .card-portlets-loader { + background-color: var(--#{$prefix}dark); + animation: rotatebox 1.2s infinite ease-in-out; + height: 30px; + width: 30px; + position: absolute; + left: 50%; + top: 50%; + border-radius: 3px; + margin-left: -($spacer * 0.5); + margin-top: -($spacer * 0.5); + } +} + +@keyframes rotatebox { + 0% { + transform: perspective(120px) rotateX(0deg) rotateY(0deg); + } + + 50% { + transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg); + } + + 100% { + transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg); + } +} + +.card-title { + font-size: $font-size-lg; + font-weight: $font-weight-semibold; + margin: 0; +} + +.sub-header { + font-size: $font-size-base; + margin-bottom: $spacer; + color: $text-muted; +} + +.card-border { + .card { + border-color: var(--#{$prefix}card-border-color); + } +} diff --git a/apiferia/src/assets/scss/components/_docs.scss b/apiferia/src/assets/scss/components/_docs.scss new file mode 100644 index 00000000..cf78386c --- /dev/null +++ b/apiferia/src/assets/scss/components/_docs.scss @@ -0,0 +1,141 @@ +// +// docs.scss +// + +.docs-nav { + @extend .d-xl-flex; + @extend .d-none; + position: sticky; + right: 0; + z-index: 2; + overflow-y: auto; + padding: 8px 0; + + .nav-item { + .nav-link { + color: $text-muted; + font-weight: $font-weight-medium; + transition: all 0.1s ease-out; + + &:hover { + color: $primary; + } + } + + &.active .nav-link { + color: $primary; + text-underline-offset: 0.35rem; + text-decoration-line: underline; + } + } +} + +.anchor { + scroll-margin-top: 108px; + + .anchor-link { + padding: 0 0.175rem; + font-weight: 400; + color: $primary; + text-decoration: none; + opacity: 0; + transition: + color 0.15s ease-in-out, + opacity 0.15s ease-in-out; + } + + &:hover, + &:focus { + .anchor-link { + text-decoration: none; + opacity: 1; + } + } +} + +.docs-nav { + top: 5.5rem; +} + +.highlight { + overflow: hidden; + border-radius: $card-border-radius; + border: 1px solid $card-border-color; + + .highlight-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + background-color: rgba(var(--#{$prefix}light-rgb), 0.5); + padding: 6px 20px; + border-bottom: 1px solid $card-border-color; + + small { + font-weight: 600; + color: var(--#{$prefix}headings-color); + } + + .nav-pills { + padding: 0; + + .nav-link { + padding: 6px 12px; + } + } + } + + .tab-content { + padding: 0; + } +} + +.code { + padding: 3px; + + // Scrollbar + .language-html, + .language-javascript { + max-height: 220px; + overflow-y: auto; + + &::-webkit-scrollbar { + -webkit-appearance: none; + } + + &::-webkit-scrollbar-corner { + background: transparent; + } + + &::-webkit-scrollbar:vertical { + width: 5px; + margin-right: 5px; + } + + &::-webkit-scrollbar:horizontal { + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: transparent; + border-radius: 10px; + margin-right: 5px; + border: none; + transition: all 0.4s ease-out; + } + + &::-webkit-scrollbar-track { + border-radius: 10px; + background-color: transparent; + } + } + + &:hover { + .language-html, + .language-javascript { + &::-webkit-scrollbar-thumb { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.2); + transition: all 0.4s ease-out; + } + } + } +} diff --git a/apiferia/src/assets/scss/components/_dropdown.scss b/apiferia/src/assets/scss/components/_dropdown.scss new file mode 100644 index 00000000..caf7a17a --- /dev/null +++ b/apiferia/src/assets/scss/components/_dropdown.scss @@ -0,0 +1,131 @@ +// +// dropdown.scss +// + +.dropdown-toggle::after { + font-family: boxicons; + content: '\ea4a'; + position: relative; + display: inline-flex; + top: 3px; + margin-left: 0.255em; + font-size: 16px; + font-weight: 400; + line-height: 1; + text-rendering: auto; + text-transform: none; +} + +.btn-sm { + &.dropdown-toggle::after { + top: 1px; + } +} + +.arrow-none { + &:after { + display: none !important; + } + &:before { + display: none !important; + } +} + +.dropup { + .dropdown-toggle::after { + content: '\ea57'; + } +} + +.dropend { + .dropdown-toggle::after { + content: '\ea50'; + } +} + +.dropstart { + .dropdown-toggle::before { + content: '\ea4d'; + font-family: boxicons; + position: relative; + top: 2px; + margin-right: 0.255em; + } + + .dropdown-toggle::after { + display: none; + } +} + +.dropdown-toggle-split { + &::after, + .dropup &::after, + .dropend &::after { + margin-left: 0; + } + + .dropstart &::before { + margin-right: 0; + } +} + +.dropdown-menu { + box-shadow: $box-shadow-lg; + animation-name: DropDownSlide; + animation-duration: 0.3s; + animation-fill-mode: both; + font-size: $font-size-base; + top: 100%; + + &.show { + top: 100% !important; + margin-top: 2px !important; + } + + i { + display: inline-block; + } +} + +.dropdown-menu-end { + right: 0 !important; + left: auto !important; +} + +.dropdown-menu[data-popper-placement^='right'], +.dropdown-menu[data-popper-placement^='top'], +.dropdown-menu[data-popper-placement^='left'] { + top: auto !important; + animation: none !important; +} + +@keyframes DropDownSlide { + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); + } + + 0% { + -webkit-transform: translateY(-3px); + transform: translateY(-3px); + } +} + +// Dropdown Large (Custom) + +@media (min-width: 600px) { + .dropdown-lg { + width: 320px; + } +} + +// Dropdown size +@include media-breakpoint-up(lg) { + .dropdown-mega-menu-xl { + width: 40rem; + } + + .dropdown-mega-menu-lg { + width: 26rem; + } +} diff --git a/apiferia/src/assets/scss/components/_forms.scss b/apiferia/src/assets/scss/components/_forms.scss new file mode 100644 index 00000000..bfe8e01b --- /dev/null +++ b/apiferia/src/assets/scss/components/_forms.scss @@ -0,0 +1,68 @@ +// +// forms.scss +// + +// Forms +label { + font-weight: $font-weight-medium; +} + +.form-check { + .form-check-input, + label { + cursor: pointer; + } +} + +// Form elements (Color and Range) +input.form-control[type='color'], +input.form-control[type='range'] { + min-height: 39px; +} + +// Search box +.search-bar { + position: relative; + + .form-control { + padding-left: 40px; + padding-right: 20px; + } + + span { + position: absolute; + z-index: 10; + font-size: 16px; + top: 8px; + left: 13px; + color: $text-muted; + } +} + +// checkbox +.form-check-input { + margin-top: 0.125rem; + + &:focus { + box-shadow: none; + } +} + +// Color Checkbox and Radio +@each $color, $value in $theme-colors { + .form-checkbox-#{$color}, + .form-radio-#{$color} { + .form-check-input { + &:checked { + background-color: $value; + border-color: $value; + } + } + } +} + +.form-todo { + input[type='checkbox']:checked + label { + text-decoration: line-through; + } +} diff --git a/apiferia/src/assets/scss/components/_helper.scss b/apiferia/src/assets/scss/components/_helper.scss new file mode 100644 index 00000000..5f11bb3d --- /dev/null +++ b/apiferia/src/assets/scss/components/_helper.scss @@ -0,0 +1,57 @@ +// +// helper.scss +// + +// Minimum width + +.width-xs { + min-width: 80px; +} + +.width-sm { + min-width: 100px; +} + +.width-md { + min-width: 120px; +} + +.width-lg { + min-width: 140px; +} + +.width-xl { + min-width: 160px; +} + +// dashed line +@each $color, $value in $theme-colors { + .border-dashed-#{$color} { + border-bottom: 1px dashed ($value); + } +} + +// sticky bar +.sticky-bar { + position: sticky; + z-index: 99; + top: calc(#{$topbar-height} + #{$spacer}); +} + +// +.flex-box { + display: flex; + align-items: center; + justify-content: center; + height: auto; + width: auto; +} + +// cursor +.cursor-pointer { + cursor: pointer; +} + +.border-transparent { + --#{$prefix}border-color: transparent !important; +} diff --git a/apiferia/src/assets/scss/components/_list-group.scss b/apiferia/src/assets/scss/components/_list-group.scss new file mode 100644 index 00000000..4adbeaf0 --- /dev/null +++ b/apiferia/src/assets/scss/components/_list-group.scss @@ -0,0 +1,14 @@ +// +// _list-group.scss +// + +@each $color, $value in $theme-colors { + .list-group-item-#{$color} { + color: shade-color($value, 5%); + background-color: rgba($value, 0.15); + + .alert-link { + color: shade-color($value, 20%); + } + } +} diff --git a/apiferia/src/assets/scss/components/_modal.scss b/apiferia/src/assets/scss/components/_modal.scss new file mode 100644 index 00000000..ebef49fa --- /dev/null +++ b/apiferia/src/assets/scss/components/_modal.scss @@ -0,0 +1,53 @@ +// +// modal.scss +// + +// Title text within header +.modal-title { + margin-top: 0; +} + +// Modal full width +.modal-full-width { + width: 95%; + max-width: none; +} + +// Modal Positions +.modal-top { + margin: 0 auto; +} + +// Bottom modal +.modal-bottom { + display: flex; + flex-flow: column nowrap; + -ms-flex-pack: end; + justify-content: flex-end; + height: 100%; + margin: 0 auto; + align-content: center; +} + +// Colored modal header +.modal-colored-header { + color: $white; + border-radius: 0; + + .close { + color: $white !important; + } +} + +// Full filled modals +.modal-filled { + color: $white; + + .modal-header { + background-color: rgba($white, 0.07); + } + + .btn-close { + color: $white !important; + } +} diff --git a/apiferia/src/assets/scss/components/_nav.scss b/apiferia/src/assets/scss/components/_nav.scss new file mode 100644 index 00000000..fe271804 --- /dev/null +++ b/apiferia/src/assets/scss/components/_nav.scss @@ -0,0 +1,73 @@ +// +// nav.scss +// + +.nav-link { + &.active { + color: $primary; + } +} + +.nav-tabs { + .nav-item { + margin-bottom: -2px; + } + + li { + a { + border-color: transparent !important; + // padding: 0.375rem 1rem; + } + + a.active { + border-bottom: $border-width solid $primary !important; + margin-bottom: 1px; + } + } +} + +// pills +.nav-tabs, +.nav-pills { + > li { + > a { + font-weight: $font-weight-semibold; + } + } +} + +.nav-pills { + background: var(--#{$prefix}tertiary-bg); + border-radius: $border-radius-sm; + + .nav-link { + background-color: transparent; + color: var(--#{$prefix}link-color); + } + + .nav-link.active, + .show > .nav-link { + color: $white; + background-color: $primary; + box-shadow: $box-shadow-sm; + } +} + +.tab-content { + padding: 20px 0 0 0; +} + +.icon-wizard { + .nav-item { + .nav-link { + padding: 11px 14px !important; + box-shadow: none; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 3px; + border-radius: var(--#{$prefix}border-radius) !important; + } + } +} diff --git a/apiferia/src/assets/scss/components/_pagination.scss b/apiferia/src/assets/scss/components/_pagination.scss new file mode 100644 index 00000000..0606473d --- /dev/null +++ b/apiferia/src/assets/scss/components/_pagination.scss @@ -0,0 +1,18 @@ +// +// pagination.scss +// +.page-link { + i { + vertical-align: middle; + } +} + +// Pagination rounded (Custom) +.pagination-rounded { + .page-link { + border-radius: 30px !important; + margin: 0 3px; + border: none; + display: inline; + } +} diff --git a/apiferia/src/assets/scss/components/_popover.scss b/apiferia/src/assets/scss/components/_popover.scss new file mode 100644 index 00000000..edac6169 --- /dev/null +++ b/apiferia/src/assets/scss/components/_popover.scss @@ -0,0 +1,21 @@ +// +// popover.scss +// +.popover { + box-shadow: $box-shadow-lg; +} + +.popover-header { + margin-top: 0; +} + +@each $color, $value in $theme-colors { + .#{$color}-popover { + --#{$prefix}popover-max-width: 200px !important; + --#{$prefix}popover-border-color: var(--#{$prefix}#{$color}) !important; + --#{$prefix}popover-header-bg: var(--#{$prefix}#{$color}) !important; + --#{$prefix}popover-header-color: var(--#{$prefix}white) !important; + --#{$prefix}popover-body-padding-x: 1rem !important; + --#{$prefix}popover-body-padding-y: 0.5rem !important; + } +} diff --git a/apiferia/src/assets/scss/components/_print.scss b/apiferia/src/assets/scss/components/_print.scss new file mode 100644 index 00000000..f6376065 --- /dev/null +++ b/apiferia/src/assets/scss/components/_print.scss @@ -0,0 +1,23 @@ +// +// print.scss +// + +// Used invoice page +@media print { + .topbar, + .main-nav, + .footer, + .page-title-box { + display: none; + } + + .card, + .card-body, + .page-content, + body { + padding: 0; + border: none; + box-shadow: none; + margin: 0 !important; + } +} diff --git a/apiferia/src/assets/scss/components/_progress.scss b/apiferia/src/assets/scss/components/_progress.scss new file mode 100644 index 00000000..c21a5c51 --- /dev/null +++ b/apiferia/src/assets/scss/components/_progress.scss @@ -0,0 +1,29 @@ +// +// progress.scss +// + +// Custom height + +.progress-xs { + height: 1px; +} + +// Progress height small +.progress-sm { + height: 5px; +} + +// Progress height medium +.progress-md { + height: 8px; +} + +// Progress height large +.progress-lg { + height: 12px; +} + +// Progress height extra large +.progress-xl { + height: 15px; +} diff --git a/apiferia/src/assets/scss/components/_reboot.scss b/apiferia/src/assets/scss/components/_reboot.scss new file mode 100644 index 00000000..746e16b8 --- /dev/null +++ b/apiferia/src/assets/scss/components/_reboot.scss @@ -0,0 +1,22 @@ +// +// _reboot.scss +// + +body { + overflow-x: hidden; +} + +.row > * { + position: relative; +} + +.scroll-hidden { + &::-webkit-scrollbar { + -webkit-appearance: none; + appearance: none; + } + + &::-webkit-scrollbar:vertical { + width: 0px; + } +} diff --git a/apiferia/src/assets/scss/components/_switch.scss b/apiferia/src/assets/scss/components/_switch.scss new file mode 100644 index 00000000..693b84d2 --- /dev/null +++ b/apiferia/src/assets/scss/components/_switch.scss @@ -0,0 +1,97 @@ +// +// switch.scss +// + +input[data-switch] { + display: none; + + + label { + width: 56px; + height: 24px; + background-color: var(--#{$prefix}border-color); + background-image: none; + border-radius: 2rem; + cursor: pointer; + display: inline-block; + text-align: center; + position: relative; + transition: all 0.1s ease-in-out; + + &::before { + color: var(--#{$prefix}dark); + content: attr(data-off-label); + display: block; + font-family: inherit; + font-weight: $font-weight-semibold; + font-size: 0.75rem; + line-height: 24px; + position: absolute; + right: 3px; + margin: 0 0.21667rem; + top: 0; + text-align: center; + min-width: 1.66667rem; + overflow: hidden; + transition: all 0.1s ease-in-out; + } + + &::after { + content: ''; + position: absolute; + left: 4px; + background-color: var(--#{$prefix}link-color); + box-shadow: none; + border-radius: 2rem; + height: 18px; + width: 18px; + top: 3px; + transition: all 0.1s ease-in-out; + } + } + + &:checked { + + label { + background-color: $primary; + + &::before { + color: $white; + content: attr(data-on-label); + right: auto; + left: 4px; + } + + &::after { + left: 34px; + background-color: var(--#{$prefix}tertiary-bg); + } + } + } +} + +input[data-switch='bool'] { + + label { + background-color: $danger; + } +} + +input:disabled { + + label { + opacity: 0.5; + cursor: default; + } +} + +input[data-switch='bool'] + label:before, +input[data-switch='bool']:checked + label:before { + color: $white !important; +} + +input[data-switch='bool'] + label:after { + background-color: var(--#{$prefix}tertiary-bg); +} + +@each $color, $value in $theme-colors { + input[data-switch='#{$color}']:checked + label { + background-color: #{$value}; + } +} diff --git a/apiferia/src/assets/scss/components/_tables.scss b/apiferia/src/assets/scss/components/_tables.scss new file mode 100644 index 00000000..f20b2496 --- /dev/null +++ b/apiferia/src/assets/scss/components/_tables.scss @@ -0,0 +1,60 @@ +// +// tables.scss +// + +th { + font-weight: $font-weight-semibold; +} + +// Table centered +.table-centered { + td, + th { + vertical-align: middle !important; + } +} + +// Table +.table-nowrap { + th, + td { + white-space: nowrap; + } +} + +// Custom table components +.table { + tbody tr:last-child td { + border-bottom: 0px; + } + + &.table-dashed > :not(caption) > * > * { + border-style: dashed; + } + + .table-user { + img { + height: 30px; + width: 30px; + } + } + + .action-icon { + color: var(--#{$prefix}body-color); + font-size: 1.2rem; + display: inline-block; + padding: 0 3px; + + &:hover { + color: var(--#{$prefix}tertiary-color); + } + } +} + +html[data-bs-theme='dark'] { + .table-light { + --#{$prefix}table-color: var(--#{$prefix}body-color); + --#{$prefix}table-bg: var(--#{$prefix}light); + --#{$prefix}table-border-color: #{$table-group-separator-color}; + } +} diff --git a/apiferia/src/assets/scss/components/_tooltip.scss b/apiferia/src/assets/scss/components/_tooltip.scss new file mode 100644 index 00000000..ef3edb87 --- /dev/null +++ b/apiferia/src/assets/scss/components/_tooltip.scss @@ -0,0 +1,9 @@ +// +// tooltip.scss +// + +@each $color, $value in $theme-colors { + .#{$color}-tooltip { + --#{$prefix}tooltip-bg: var(--#{$prefix}#{$color}) !important; + } +} diff --git a/apiferia/src/assets/scss/components/_type.scss b/apiferia/src/assets/scss/components/_type.scss new file mode 100644 index 00000000..46a42c77 --- /dev/null +++ b/apiferia/src/assets/scss/components/_type.scss @@ -0,0 +1,28 @@ +// +// type.scss +// + +// Font sizes (Custom) + +$font-size-mixing: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 48, 60; + +@each $font-size-mixing in $font-size-mixing { + .fs-#{$font-size-mixing} { + font-size: #{$font-size-mixing}px !important; + } +} + +// Font Weight +.fw-medium { + font-weight: $font-weight-medium; +} + +// text utilities +.text-unline-dashed { + border-bottom: $border-width dashed $border-color !important; +} + +.text-dark { + color: var(--#{$prefix}headings-color) !important; +} diff --git a/apiferia/src/assets/scss/components/_widgets.scss b/apiferia/src/assets/scss/components/_widgets.scss new file mode 100644 index 00000000..2ba1cecb --- /dev/null +++ b/apiferia/src/assets/scss/components/_widgets.scss @@ -0,0 +1,211 @@ +// +// widgets.scss +// + +.widget-icon { + font-size: 5rem; + position: absolute; + right: -25px; + bottom: -15px; + opacity: 0.2; + animation: bounce 7s ease infinite; +} + +@keyframes bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + transform: translateY(0); + } + 40% { + transform: translateY(-10px); + } + 60% { + transform: translateY(-5px); + } +} + +// milestones + +.milestones { + position: relative; + padding-left: 25px; + + &::after { + width: 10px; + height: 10px; + border-radius: 50%; + background: $primary; + position: absolute; + top: 2px; + left: 0; + content: ''; + } + + &::before { + height: 75px; + width: 2px; + position: absolute; + top: 15px; + bottom: 5px; + left: 4px; + right: 0; + background: var(--#{$prefix}border-color); + content: ''; + } + + &:last-child { + &::before { + height: 28px; + } + } +} + +// chat + +.conversation-list { + list-style: none; + height: 332px; + padding: 0 7px; + + li { + margin-bottom: 24px; + } + + .chat-avatar { + float: left; + text-align: center; + width: 38px; + + img { + border-radius: 100%; + width: 100%; + } + + i { + font-size: 12px; + font-style: normal; + } + } + + .ctext-wrap { + background: var(--#{$prefix}light); + color: $primary; + border-radius: $border-radius-sm; + display: inline-block; + padding: 4px 12px; + position: relative; + // min-width: 160px; + + i { + display: block; + font-size: 12px; + font-style: normal; + font-weight: $font-weight-bold; + position: relative; + } + + p { + margin: 0; + padding-top: 3px; + } + } + + .conversation-text { + float: left; + font-size: 12px; + margin-left: 12px; + width: 70%; + } + + .odd { + .chat-avatar { + float: right !important; + } + + .conversation-text { + float: right !important; + margin-right: 12px; + text-align: right; + width: 70% !important; + } + + .ctext-wrap { + background-color: $primary; + color: $white; + } + } +} + +// project activity +.activity { + .activity-list { + display: flex; + position: relative; + + &::before { + position: absolute; + text-align: center; + content: '\F4FE'; + font-family: 'bootstrap-icons'; + font-size: 22px; + color: $white; + left: 56px; + top: -6px; + z-index: 1; + } + + &::after { + content: ''; + position: absolute; + left: 57px; + top: 0; + height: 20px; + width: 20px; + background: $primary; + border-radius: 50%; + } + } +} + +// project activity +.activity-widget { + .activity-list { + border-bottom: $border-width solid $border-color; + padding: 10px 0px; + + &:last-child { + border: none; + } + } +} + +// chart card +.chart-card { + .left-chart-card { + padding-right: $spacer; + border-right: $border-width solid $border-color; + } + + .right-chart-card { + padding-left: $spacer; + } +} + +@include media-breakpoint-down(lg) { + .chart-card { + .left-chart-card { + padding-right: $spacer * 0.5; + padding-bottom: $spacer; + border-right: 0; + border-bottom: $border-width solid $border-color; + } + + .right-chart-card { + padding-left: $spacer * 0.5; + padding-top: $spacer; + } + } +} diff --git a/apiferia/src/assets/scss/config/_custom_ng.scss b/apiferia/src/assets/scss/config/_custom_ng.scss new file mode 100644 index 00000000..a53241b8 --- /dev/null +++ b/apiferia/src/assets/scss/config/_custom_ng.scss @@ -0,0 +1,68 @@ +@import "nouislider/dist/nouislider.css"; +@import "quill/dist/quill.snow.css"; +@import "quill/dist/quill.bubble.css"; +@import "@ctrl/ngx-emoji-mart/picker"; + +.apex-charts { + div { + min-height: 0 !important; + } +} + +.modal { + --bs-modal-border-color: none !important; +} + +.emoji-mart { + position: absolute; + bottom: 30px; + left: 0; +} + +.toast-top-center { + left: 45% !important; +} + +.toast-bottom-center { + left: 45% !important; +} + +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 0.5rem; + overflow: auto; +} + +.noUi-connect { + background-color: #1c84ee; +} + +.noUi-target { + background-color: #eef2f7; + border: transparent; + box-shadow: none; +} + +.noUi-handle { + height: 20px !important; + width: 20px !important; + background: #1c84ee; + box-shadow: none; + border-color: #fff; +} + +.noUi-horizontal { + height: 8px; +} + +.standard { + .toast-body { + padding: 0px !important; + } +} + +.width-auto { + max-width: 450px !important; + width: 100% !important; +} \ No newline at end of file diff --git a/apiferia/src/assets/scss/config/_theme-mode.scss b/apiferia/src/assets/scss/config/_theme-mode.scss new file mode 100644 index 00000000..bd5670c7 --- /dev/null +++ b/apiferia/src/assets/scss/config/_theme-mode.scss @@ -0,0 +1,77 @@ +// +// _light-mode.scss +// + +/* Root Prefix Variable */ +:root { + --#{$prefix}logo-lg-height: 20px; + --#{$prefix}logo-sm-height: 30px; + + --#{$prefix}main-nav-width: 260px; + --#{$prefix}main-nav-width-sm: 75px; + --#{$prefix}main-nav-item-icon-size: 20px; + --#{$prefix}main-nav-item-font-size: 15px; + --#{$prefix}main-nav-item-padding-x: 20px; + --#{$prefix}main-nav-item-padding-y: 10px; + + --#{$prefix}topbar-height: 70px; + --#{$prefix}footer-height: 60px; + + // Heading Variable + --#{$prefix}headings-color: #313b5e; + + --#{$prefix}input-border-color: #d8dfe7; + --#{$prefix}input-focus-border-color: #b0b0bb; +} + +/* Color system - Dark Mode only */ +html[data-bs-theme='dark'], +[data-bs-theme='dark'] { + --#{$prefix}border-color: #2f3944; + + --#{$prefix}light: #{$body-tertiary-bg-dark}; + --#{$prefix}dark: #{$body-tertiary-color-dark}; + + --#{$prefix}light-rgb: #{to-rgb($body-tertiary-bg-dark)}; + --#{$prefix}dark-rgb: #{to-rgb($body-tertiary-color-dark)}; + + // Heading Variable + --#{$prefix}headings-color: #{$body-color-dark}; + + --#{$prefix}input-border-color: #3a4551; + --#{$prefix}input-focus-border-color: #4a5663; +} + +/* Main Menu Light */ +html[data-menu-color='light'] { + --#{$prefix}main-nav-bg: #ffffff; + --#{$prefix}main-nav-item-color: #8486a7; + --#{$prefix}main-nav-item-hover-bg: #f3f1fa; + --#{$prefix}main-nav-item-hover-color: #3d4756; + --#{$prefix}main-nav-border-color: #eaedf1; +} + +/* Main Menu Dark */ +html[data-menu-color='dark'], +html[data-bs-theme='dark'][data-menu-color='light'] { + --#{$prefix}main-nav-bg: #262d34; + --#{$prefix}main-nav-item-color: #9097a7; + --#{$prefix}main-nav-item-hover-bg: #{shade-color(#36404a, 8%)}; + --#{$prefix}main-nav-item-hover-color: #{$white}; + --#{$prefix}main-nav-border-color: #2f3944; +} + +/* Topbar Light */ +html[data-topbar-color='light'] { + --#{$prefix}topbar-bg: #{$white}; + --#{$prefix}topbar-item-color: #707793; + --#{$prefix}topbar-search-bg: #f3f3f9; +} + +/* Topbar Dark */ +html[data-topbar-color='dark'], +html[data-bs-theme='dark'][data-topbar-color='light'] { + --#{$prefix}topbar-bg: #22282e; + --#{$prefix}topbar-item-color: #dee2e6; + --#{$prefix}topbar-search-bg: #2c3238; +} diff --git a/apiferia/src/assets/scss/config/_variables-custom.scss b/apiferia/src/assets/scss/config/_variables-custom.scss new file mode 100644 index 00000000..4fc53616 --- /dev/null +++ b/apiferia/src/assets/scss/config/_variables-custom.scss @@ -0,0 +1,34 @@ +// +// _variable-custom.scss +// + +// Main Logo Height +$logo-lg-height: var(--#{$prefix}logo-lg-height); +$logo-sm-height: var(--#{$prefix}logo-sm-height); + +// Vertical Menu +$main-nav-width: var(--#{$prefix}main-nav-width); +$main-nav-width-sm: var(--#{$prefix}main-nav-width-sm); + +// Main Nav Menu +$main-nav-item-icon-size: var(--#{$prefix}main-nav-item-icon-size); +$main-nav-item-font-size: var(--#{$prefix}main-nav-item-font-size); +$main-nav-item-padding-x: var(--#{$prefix}main-nav-item-padding-x); +$main-nav-item-padding-y: var(--#{$prefix}main-nav-item-padding-y); + +// Main Nav Menu +$main-nav-bg: var(--#{$prefix}main-nav-bg); +$main-nav-item-color: var(--#{$prefix}main-nav-item-color); +$main-nav-item-hover-bg: var(--#{$prefix}main-nav-item-hover-bg); +$main-nav-item-hover-color: var(--#{$prefix}main-nav-item-hover-color); +$main-nav-border-color: var(--#{$prefix}main-nav-border-color); + +// Topbar +$topbar-height: var(--#{$prefix}topbar-height); +$topbar-bg: var(--#{$prefix}topbar-bg); +$topbar-item-color: var(--#{$prefix}topbar-item-color); +$topbar-search-bg: var(--#{$prefix}topbar-search-bg); + +// Footer +$footer-height: var(--#{$prefix}footer-height); +$footer-color: var(--#{$prefix}link-color); diff --git a/apiferia/src/assets/scss/config/_variables-dark.scss b/apiferia/src/assets/scss/config/_variables-dark.scss new file mode 100644 index 00000000..a1d4ca80 --- /dev/null +++ b/apiferia/src/assets/scss/config/_variables-dark.scss @@ -0,0 +1,89 @@ +// Dark color mode variables +// +// Custom variables for the `[data-bs-theme="dark"]` theme. Use this as a starting point for your own custom color modes by creating a new theme-specific file like `_variables-dark.scss` and adding the variables you need. + +// +// Global Colors +// + +// scss-docs-start sass-dark-mode-vars +$primary-text-emphasis-dark: tint-color($primary, 40%); +$secondary-text-emphasis-dark: tint-color($secondary, 40%); +$success-text-emphasis-dark: tint-color($success, 40%); +$info-text-emphasis-dark: tint-color($info, 40%); +$warning-text-emphasis-dark: tint-color($warning, 40%); +$danger-text-emphasis-dark: tint-color($danger, 40%); +$light-text-emphasis-dark: $gray-100; +$dark-text-emphasis-dark: $gray-300; +// scss-docs-end theme-text-dark-variables + +// scss-docs-start theme-bg-subtle-dark-variables +$primary-bg-subtle-dark: rgba($primary, 15%); +$secondary-bg-subtle-dark: rgba($gray-700, 15%); +$success-bg-subtle-dark: rgba($success, 15%); +$info-bg-subtle-dark: rgba($info, 15%); +$warning-bg-subtle-dark: rgba($warning, 15%); +$danger-bg-subtle-dark: rgba($danger, 15%); +$light-bg-subtle-dark: rgba(var(--#{$prefix}light-rgb), 0.15); +$dark-bg-subtle-dark: rgba(var(--#{$prefix}dark-rgb), 0.15); +// scss-docs-end theme-bg-subtle-dark-variables + +// scss-docs-start theme-border-subtle-dark-variables +$primary-border-subtle-dark: shade-color($primary, 40%); +$secondary-border-subtle-dark: $gray-700; +$success-border-subtle-dark: shade-color($success, 40%); +$info-border-subtle-dark: shade-color($info, 40%); +$warning-border-subtle-dark: shade-color($warning, 40%); +$danger-border-subtle-dark: shade-color($danger, 40%); +$light-border-subtle-dark: $gray-700; +$dark-border-subtle-dark: $gray-500; +// scss-docs-end theme-border-subtle-dark-variables + +$body-color-dark: #aab8c5; +$body-bg-dark: #22282e; + +$body-secondary-color-dark: #8391a2; +$body-secondary-bg-dark: #282f36; + +$body-tertiary-color-dark: #f1f1f1; +$body-tertiary-bg-dark: #2f3943; + +$body-emphasis-color-dark: #dee2e6; + +$border-color-dark: #2f3944; +$border-color-translucent-dark: #8391a2; + +$headings-color-dark: $body-color-dark; +$link-color-dark: tint-color($primary, 40%); +$link-hover-color-dark: shift-color($link-color-dark, -$link-shade-percentage); +$code-color-dark: tint-color($code-color, 40%); +$mark-color-dark: $body-color-dark; +$mark-bg-dark: $yellow-800; + +// +// Forms +// + +$form-select-indicator-color-dark: $body-color-dark; +$form-select-indicator-dark: url("data:image/svg+xml,"); + +$form-switch-color-dark: rgba($white, 0.25); +$form-switch-bg-image-dark: url("data:image/svg+xml,"); + +// scss-docs-start form-validation-colors-dark +$form-valid-color-dark: $green-300; +$form-valid-border-color-dark: $green-300; +$form-invalid-color-dark: $red-300; +$form-invalid-border-color-dark: $red-300; +// scss-docs-end form-validation-colors-dark + +// +// Accordion +// + +$accordion-icon-color-dark: $primary-text-emphasis-dark; +$accordion-icon-active-color-dark: $primary-text-emphasis-dark; + +$accordion-button-icon-dark: url("data:image/svg+xml,"); +$accordion-button-active-icon-dark: url("data:image/svg+xml,"); +// scss-docs-end sass-dark-mode-vars diff --git a/apiferia/src/assets/scss/config/_variables.scss b/apiferia/src/assets/scss/config/_variables.scss new file mode 100644 index 00000000..b2b4c08e --- /dev/null +++ b/apiferia/src/assets/scss/config/_variables.scss @@ -0,0 +1,1806 @@ +// +// _variable.scss +// + +// Prefix for :root CSS variables +$prefix: 'bs-'; + +// Google Font Family link +@import url('https://fonts.googleapis.com/css2?family=Wix+Madefor+Text:ital,wght@0,400..800;1,400..800&display=swap'); + +// Font Family +$font-family-primary: 'Wix Madefor Text', sans-serif; +$font-family-secondary: 'Wix Madefor Text', sans-serif; + +// +// Color system +// + +// scss-docs-start gray-color-variables +$white: #ffffff; +$gray-100: #f8f9fa; +$gray-200: #eef2f7; +$gray-300: #d8dfe7; +$gray-400: #b0b0bb; +$gray-500: #8486a7; +$gray-600: #5d7186; +$gray-700: #424e5a; +$gray-800: #36404a; +$gray-900: #323a46; +$black: #000000; +// scss-docs-end gray-color-variables + +// scss-docs-start color-variables +$blue: #1c84ee; +$indigo: #53389f; +$purple: #7f56da; +$pink: #ff86c8; +$red: #ef5f5f; +$orange: #ff6c2f; +$yellow: #f9b931; +$green: #22c55e; +$teal: #040505; +$cyan: #4ecac2; +// scss-docs-end color-variables + +// scss-docs-start theme-color-variables +$primary: $blue; +$secondary: $gray-600; +$blue: $blue; +$indigo: $indigo; +$purple: $purple; +$pink: $pink; +$danger: $red; +$orange: $orange; +$warning: $yellow; +$success: $green; +$info: $cyan; +$light: $gray-200; +$dark: $gray-900; +// scss-docs-end theme-color-variables + +// scss-docs-start gray-colors-map +$grays: ( + '100': $gray-100, + '200': $gray-200, + '300': $gray-300, + '400': $gray-400, + '500': $gray-500, + '600': $gray-600, + '700': $gray-700, + '800': $gray-800, + '900': $gray-900, +); +// scss-docs-end gray-colors-map + +// scss-docs-start theme-colors-map +$theme-colors: ( + 'primary': $primary, + 'secondary': $secondary, + 'success': $success, + 'warning': $warning, + 'info': $info, + 'danger': $danger, + 'purple': $purple, + 'pink': $pink, + 'blue': $blue, + 'orange': $orange, + 'indigo': $indigo, + 'red': $red, + 'yellow': $yellow, + 'green': $green, + 'teal': $teal, + 'cyan': $cyan, + 'light': $light, + 'dark': $dark, +); +// scss-docs-end theme-colors-map + +// scss-docs-start colors-map +$colors: ( + 'white': $white, + 'black': $black, + 'gray': $gray-600, + 'gray-dark': $gray-800, +); +// scss-docs-end colors-map + +// 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. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 1.5; + +// Customize the light and dark text colors for use in our color contrast function. +$color-contrast-dark: $gray-900; +$color-contrast-light: $white; + +// fusv-disable +$blue-100: tint-color($blue, 80%); +$blue-200: tint-color($blue, 60%); +$blue-300: tint-color($blue, 40%); +$blue-400: tint-color($blue, 20%); +$blue-500: $blue; +$blue-600: shade-color($blue, 20%); +$blue-700: shade-color($blue, 40%); +$blue-800: shade-color($blue, 60%); +$blue-900: shade-color($blue, 80%); + +$indigo-100: tint-color($indigo, 80%); +$indigo-200: tint-color($indigo, 60%); +$indigo-300: tint-color($indigo, 40%); +$indigo-400: tint-color($indigo, 20%); +$indigo-500: $indigo; +$indigo-600: shade-color($indigo, 20%); +$indigo-700: shade-color($indigo, 40%); +$indigo-800: shade-color($indigo, 60%); +$indigo-900: shade-color($indigo, 80%); + +$purple-100: tint-color($purple, 80%); +$purple-200: tint-color($purple, 60%); +$purple-300: tint-color($purple, 40%); +$purple-400: tint-color($purple, 20%); +$purple-500: $purple; +$purple-600: shade-color($purple, 20%); +$purple-700: shade-color($purple, 40%); +$purple-800: shade-color($purple, 60%); +$purple-900: shade-color($purple, 80%); + +$pink-100: tint-color($pink, 80%); +$pink-200: tint-color($pink, 60%); +$pink-300: tint-color($pink, 40%); +$pink-400: tint-color($pink, 20%); +$pink-500: $pink; +$pink-600: shade-color($pink, 20%); +$pink-700: shade-color($pink, 40%); +$pink-800: shade-color($pink, 60%); +$pink-900: shade-color($pink, 80%); + +$red-100: tint-color($red, 80%); +$red-200: tint-color($red, 60%); +$red-300: tint-color($red, 40%); +$red-400: tint-color($red, 20%); +$red-500: $red; +$red-600: shade-color($red, 20%); +$red-700: shade-color($red, 40%); +$red-800: shade-color($red, 60%); +$red-900: shade-color($red, 80%); + +$orange-100: tint-color($orange, 80%); +$orange-200: tint-color($orange, 60%); +$orange-300: tint-color($orange, 40%); +$orange-400: tint-color($orange, 20%); +$orange-500: $orange; +$orange-600: shade-color($orange, 20%); +$orange-700: shade-color($orange, 40%); +$orange-800: shade-color($orange, 60%); +$orange-900: shade-color($orange, 80%); + +$yellow-100: tint-color($yellow, 80%); +$yellow-200: tint-color($yellow, 60%); +$yellow-300: tint-color($yellow, 40%); +$yellow-400: tint-color($yellow, 20%); +$yellow-500: $yellow; +$yellow-600: shade-color($yellow, 20%); +$yellow-700: shade-color($yellow, 40%); +$yellow-800: shade-color($yellow, 60%); +$yellow-900: shade-color($yellow, 80%); + +$green-100: tint-color($green, 80%); +$green-200: tint-color($green, 60%); +$green-300: tint-color($green, 40%); +$green-400: tint-color($green, 20%); +$green-500: $green; +$green-600: shade-color($green, 20%); +$green-700: shade-color($green, 40%); +$green-800: shade-color($green, 60%); +$green-900: shade-color($green, 80%); + +$teal-100: tint-color($teal, 80%); +$teal-200: tint-color($teal, 60%); +$teal-300: tint-color($teal, 40%); +$teal-400: tint-color($teal, 20%); +$teal-500: $teal; +$teal-600: shade-color($teal, 20%); +$teal-700: shade-color($teal, 40%); +$teal-800: shade-color($teal, 60%); +$teal-900: shade-color($teal, 80%); + +$cyan-100: tint-color($cyan, 80%); +$cyan-200: tint-color($cyan, 60%); +$cyan-300: tint-color($cyan, 40%); +$cyan-400: tint-color($cyan, 20%); +$cyan-500: $cyan; +$cyan-600: shade-color($cyan, 20%); +$cyan-700: shade-color($cyan, 40%); +$cyan-800: shade-color($cyan, 60%); +$cyan-900: shade-color($cyan, 80%); + +$blues: ( + 'blue-100': $blue-100, + 'blue-200': $blue-200, + 'blue-300': $blue-300, + 'blue-400': $blue-400, + 'blue-500': $blue-500, + 'blue-600': $blue-600, + 'blue-700': $blue-700, + 'blue-800': $blue-800, + 'blue-900': $blue-900, +); + +$indigos: ( + 'indigo-100': $indigo-100, + 'indigo-200': $indigo-200, + 'indigo-300': $indigo-300, + 'indigo-400': $indigo-400, + 'indigo-500': $indigo-500, + 'indigo-600': $indigo-600, + 'indigo-700': $indigo-700, + 'indigo-800': $indigo-800, + 'indigo-900': $indigo-900, +); + +$purples: ( + 'purple-100': $purple-100, + 'purple-200': $purple-200, + 'purple-300': $purple-300, + 'purple-400': $purple-400, + 'purple-500': $purple-500, + 'purple-600': $purple-600, + 'purple-700': $purple-700, + 'purple-800': $purple-800, + 'purple-900': $purple-900, +); + +$pinks: ( + 'pink-100': $pink-100, + 'pink-200': $pink-200, + 'pink-300': $pink-300, + 'pink-400': $pink-400, + 'pink-500': $pink-500, + 'pink-600': $pink-600, + 'pink-700': $pink-700, + 'pink-800': $pink-800, + 'pink-900': $pink-900, +); + +$reds: ( + 'red-100': $red-100, + 'red-200': $red-200, + 'red-300': $red-300, + 'red-400': $red-400, + 'red-500': $red-500, + 'red-600': $red-600, + 'red-700': $red-700, + 'red-800': $red-800, + 'red-900': $red-900, +); + +$oranges: ( + 'orange-100': $orange-100, + 'orange-200': $orange-200, + 'orange-300': $orange-300, + 'orange-400': $orange-400, + 'orange-500': $orange-500, + 'orange-600': $orange-600, + 'orange-700': $orange-700, + 'orange-800': $orange-800, + 'orange-900': $orange-900, +); + +$yellows: ( + 'yellow-100': $yellow-100, + 'yellow-200': $yellow-200, + 'yellow-300': $yellow-300, + 'yellow-400': $yellow-400, + 'yellow-500': $yellow-500, + 'yellow-600': $yellow-600, + 'yellow-700': $yellow-700, + 'yellow-800': $yellow-800, + 'yellow-900': $yellow-900, +); + +$greens: ( + 'green-100': $green-100, + 'green-200': $green-200, + 'green-300': $green-300, + 'green-400': $green-400, + 'green-500': $green-500, + 'green-600': $green-600, + 'green-700': $green-700, + 'green-800': $green-800, + 'green-900': $green-900, +); + +$teals: ( + 'teal-100': $teal-100, + 'teal-200': $teal-200, + 'teal-300': $teal-300, + 'teal-400': $teal-400, + 'teal-500': $teal-500, + 'teal-600': $teal-600, + 'teal-700': $teal-700, + 'teal-800': $teal-800, + 'teal-900': $teal-900, +); + +$cyans: ( + 'cyan-100': $cyan-100, + 'cyan-200': $cyan-200, + 'cyan-300': $cyan-300, + 'cyan-400': $cyan-400, + 'cyan-500': $cyan-500, + 'cyan-600': $cyan-600, + 'cyan-700': $cyan-700, + 'cyan-800': $cyan-800, + 'cyan-900': $cyan-900, +); +// fusv-enable + +// scss-docs-start theme-text-variables +$primary-text-emphasis: shade-color($primary, 60%); +$secondary-text-emphasis: shade-color($secondary, 60%); +$success-text-emphasis: shade-color($success, 60%); +$info-text-emphasis: shade-color($info, 60%); +$warning-text-emphasis: shade-color($warning, 60%); +$danger-text-emphasis: shade-color($danger, 60%); +$light-text-emphasis: $gray-700; +$dark-text-emphasis: $gray-700; +// scss-docs-end theme-text-variables + +// scss-docs-start theme-bg-subtle-variables +$primary-bg-subtle: tint-color($primary, 80%); +$secondary-bg-subtle: tint-color($secondary, 80%); +$success-bg-subtle: tint-color($success, 80%); +$info-bg-subtle: tint-color($info, 80%); +$warning-bg-subtle: tint-color($warning, 80%); +$danger-bg-subtle: tint-color($danger, 80%); +$light-bg-subtle: mix($gray-100, $white); +$dark-bg-subtle: $gray-400; +// scss-docs-end theme-bg-subtle-variables + +// scss-docs-start theme-border-subtle-variables +$primary-border-subtle: tint-color($primary, 60%); +$secondary-border-subtle: tint-color($secondary, 60%); +$success-border-subtle: tint-color($success, 60%); +$info-border-subtle: tint-color($info, 60%); +$warning-border-subtle: tint-color($warning, 60%); +$danger-border-subtle: tint-color($danger, 60%); +$light-border-subtle: $gray-200; +$dark-border-subtle: $gray-500; +// scss-docs-end theme-border-subtle-variables + +// Characters which are escaped by the escape-svg function +$escaped-characters: ( + ('<', '%3c'), + ('>', '%3e'), + ('#', '%23'), + ('(', '%28'), + (')', '%29') +); + +// Options +// +// Quickly modify global styling by enabling or disabling optional features. + +$enable-caret: false; +$enable-rounded: true; +$enable-shadows: false; +$enable-gradients: false; +$enable-transitions: true; +$enable-reduced-motion: true; +$enable-smooth-scroll: true; +$enable-grid-classes: true; +$enable-container-classes: true; +$enable-cssgrid: true; +$enable-button-pointers: true; +$enable-rfs: true; +$enable-validation-icons: true; +$enable-negative-margins: true; +$enable-deprecation-messages: true; +$enable-important-utilities: true; + +$enable-dark-mode: true; +$color-mode-type: data; // `data` or `media-query` + +// Gradient +// +// The gradient which is added to components if `$enable-gradients` is `true` +// This gradient is also added to elements with `.bg-gradient` +// scss-docs-start variable-gradient +$gradient: linear-gradient(180deg, rgba($white, 0.15), rgba($white, 0)); +// scss-docs-end variable-gradient + +// Spacing +// +// Control the default styling of most Bootstrap elements by modifying these +// variables. Mostly focused on spacing. +// You can add more entries to the $spacers map, should you need more variation. + +// scss-docs-start spacer-variables-maps +$spacer: 1.25rem; +$spacers: ( + 0: 0, + 1: $spacer * 0.25, + 2: $spacer * 0.5, + 3: $spacer, + 4: $spacer * 1.5, + 5: $spacer * 3, +); + +// scss-docs-end spacer-variables-maps + +// Position +// +// Define the edge positioning anchors of the position utilities. + +// scss-docs-start position-map +$position-values: ( + 0: 0, + 50: 50%, + 100: 100%, +); +// scss-docs-end position-map + +// Body +// + +$body-bg: #f8f8fa; +$body-color: #5d7186; +$body-text-align: null; + +// Dark Mode +$body-dark-bg: #22282e; +$body-dark-color: #aab8c5; + +$body-secondary-color: $gray-600; +$body-secondary-bg: $white; + +$body-tertiary-color: $gray-700; +$body-tertiary-bg: $gray-100; + +$body-emphasis-color: rgba($body-color, 0.75); + +// Links +// +// Style anchor elements. + +$link-color: $gray-500; +$link-decoration: none; +$link-shade-percentage: 15%; +$link-hover-color: shade-color($primary, $link-shade-percentage); +$link-hover-decoration: none; + +$stretched-link-pseudo-element: after; +$stretched-link-z-index: 1; + +// Icon links +// scss-docs-start icon-link-variables +$icon-link-gap: 0.375rem; +$icon-link-underline-offset: 0.25em; +$icon-link-icon-size: 1em; +$icon-link-icon-transition: 0.2s ease-in-out transform; +$icon-link-icon-transform: translate3d(0.25em, 0, 0); +// scss-docs-end icon-link-variables + +// Paragraphs +// +// Style p element + +$paragraph-margin-bottom: 1rem; + +// Grid breakpoints +// +// Define the minimum dimensions at which your layout will change, +// adapting to different screen sizes, for use in media queries. + +// scss-docs-start grid-breakpoints +$grid-breakpoints: ( + xs: 0, + sm: 576px, + md: 768px, + lg: 992px, + xl: 1200px, + xxl: 1400px, +); +// scss-docs-end grid-breakpoints + +@include _assert-ascending($grid-breakpoints, '$grid-breakpoints'); +@include _assert-starts-at-zero($grid-breakpoints, '$grid-breakpoints'); + +// Grid containers +// +// Define the maximum width of `.container` for different screen sizes. + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1320px, +); +// scss-docs-end container-max-widths + +@include _assert-ascending($container-max-widths, '$container-max-widths'); + +// Grid columns +// +// Set the number of columns and specify the width of the gutters. + +$grid-columns: 12; +$grid-gutter-width: $spacer; +$grid-row-columns: 6; + +$gutters: $spacers; + +// Container padding + +$container-padding-x: $grid-gutter-width * 1; + +// Components +// +// Define common padding and border radius sizes and more. + +// scss-docs-start border-variables +$border-width: 1px; +$border-widths: ( + 1: 1px, + 2: 2px, + 3: 3px, + 4: 4px, + 5: 5px, +); + +$border-style: solid; +$border-color: #eaedf1; +$border-color-translucent: rgba($black, 0.175); +// scss-docs-end border-variables + +// scss-docs-start border-radius-variables +$border-radius: 0.3rem; +$border-radius-sm: 0.2rem; +$border-radius-lg: 0.5rem; +$border-radius-xl: 1rem; +$border-radius-xxl: 2rem; +$border-radius-pill: 50rem; +// scss-docs-end border-radius-variables +// fusv-disable +$border-radius-2xl: $border-radius-xxl; // Deprecated in v5.3.0 +// fusv-enable + +// scss-docs-start box-shadow-variables +$box-shadow: 0px 3px 4px 0px rgba(0, 0, 0, 0.03); +$box-shadow-sm: 0 0.125rem 0.25rem rgba($black, 0.075); +$box-shadow-lg: 0 5px 10px rgba(30, 32, 37, 0.12); +$box-shadow-inset: inset 0 1px 2px rgba($black, 0.075); +// scss-docs-end box-shadow-variables + +$component-active-color: $white; +$component-active-bg: $primary; + +// scss-docs-start focus-ring-variables +$focus-ring-width: 0.15rem; +$focus-ring-opacity: 0.25; +$focus-ring-color: rgba($primary, $focus-ring-opacity); +$focus-ring-blur: 0; +$focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color; +// scss-docs-end focus-ring-variables + +// scss-docs-start caret-variables +$caret-width: 0.3em; +$caret-vertical-align: $caret-width * 0.85; +$caret-spacing: $caret-width * 0.85; +// scss-docs-end caret-variables + +$transition-base: all 0.2s ease-in-out; +$transition-fade: opacity 0.15s linear; +// scss-docs-start collapse-transition +$transition-collapse: height 0.35s ease; +$transition-collapse-width: width 0.35s ease; +// scss-docs-end collapse-transition + +// stylelint-disable function-disallowed-list +// scss-docs-start aspect-ratios +$aspect-ratios: ( + '1x1': 100%, + '4x3': calc(3 / 4 * 100%), + '16x9': calc(9 / 16 * 100%), + '21x9': calc(9 / 21 * 100%), +); +// scss-docs-end aspect-ratios +// stylelint-enable function-disallowed-list + +// Typography +// +// Font, line-height, and color for body text, headings, and more. + +// scss-docs-start font-variables +// stylelint-disable value-keyword-case +$font-family-sans-serif: $font-family-primary; +$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, + 'Liberation Mono', 'Courier New', monospace; +// stylelint-enable value-keyword-case +$font-family-base: var(--#{$prefix}font-sans-serif); +$font-family-code: var(--#{$prefix}font-monospace); + +// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins +// $font-size-base effects the font size of the body text +$font-size-root: null; +$font-size-base: 0.875rem; // .875rem; // Assumes the browser default, typically `16px` +$font-size-sm: $font-size-base * 0.9; +$font-size-lg: 1rem; + +$font-weight-lighter: lighter; +$font-weight-light: 300; +$font-weight-normal: 400; +$font-weight-medium: 500; +$font-weight-semibold: 600; +$font-weight-bold: 700; +$font-weight-bolder: bolder; + +$font-weight-base: $font-weight-normal; + +$line-height-base: 1.5; +$line-height-sm: 1.25; +$line-height-lg: 2; + +$h1-font-size: 2.25rem; +$h2-font-size: 1.875rem; +$h3-font-size: 1.5rem; +$h4-font-size: 1.125rem; +$h5-font-size: 0.9375rem; +$h6-font-size: 0.75rem; +// scss-docs-end font-variables + +// scss-docs-start font-sizes +$font-sizes: ( + 1: $h1-font-size, + 2: $h2-font-size, + 3: $h3-font-size, + 4: $h4-font-size, + 5: $h5-font-size, + 6: $h6-font-size, +); +// scss-docs-end font-sizes + +// scss-docs-start headings-variables +$headings-margin-bottom: 10px; // $spacer +$headings-font-family: $font-family-secondary; +$headings-font-style: null; +$headings-font-weight: 500; +$headings-line-height: 1.1; +$headings-color: var(--#{$prefix}headings-color); +// scss-docs-end headings-variables + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 5rem, + 2: 4.5rem, + 3: 4rem, + 4: 3.5rem, + 5: 3rem, + 6: 2.5rem, +); + +$display-font-family: null; +$display-font-style: null; +$display-font-weight: 300; +$display-line-height: $headings-line-height; +// scss-docs-end display-headings + +// scss-docs-start type-variables +$lead-font-size: $font-size-base * 1.25; +$lead-font-weight: 300; + +$small-font-size: 0.75rem; + +$sub-sup-font-size: 0.75em; + +// fusv-disable +$text-muted: var(--#{$prefix}secondary-color); // Deprecated in 5.3.0 +// fusv-enable + +$initialism-font-size: $small-font-size; + +$blockquote-margin-y: $spacer; +$blockquote-font-size: $font-size-base * 1.25; +$blockquote-footer-color: var(--#{$prefix}tertiary-color); +$blockquote-footer-font-size: $small-font-size; + +$hr-margin-y: $spacer * 0.667; +$hr-color: inherit; + +// fusv-disable +$hr-bg-color: null; // Deprecated in v5.2.0 +$hr-height: null; // Deprecated in v5.2.0 +// fusv-enable + +$hr-border-color: var(--#{$prefix}border-color); // Allows for inherited colors +$hr-border-width: var(--#{$prefix}border-width); +$hr-opacity: 1; + +// scss-docs-start vr-variables +$vr-border-width: var(--#{$prefix}border-width); +// scss-docs-end vr-variables +$legend-margin-bottom: 0.5rem; +$legend-font-size: $spacer; +$legend-font-weight: null; + +$dt-font-weight: $font-weight-bold; + +$list-inline-padding: 0.5rem; + +$mark-padding: 0.1875em; +$mark-color: $body-color; +$mark-bg: $yellow-100; +// scss-docs-end type-variables + +// Tables +// +// Customizes the `.table` component with basic values, each used across all table variations. + +// scss-docs-start table-variables +$table-cell-padding-y: 0.85rem; +$table-cell-padding-x: 0.85rem; +$table-cell-padding-y-sm: 0.5rem; +$table-cell-padding-x-sm: 0.5rem; + +$table-cell-vertical-align: top; + +$table-color: var(--#{$prefix}body-color); +$table-bg: transparent; +$table-accent-bg: transparent; + +$table-th-font-weight: null; + +$table-striped-color: $table-color; +$table-striped-bg-factor: 0.02; +$table-striped-bg: rgba(var(--#{$prefix}black-rgb), $table-striped-bg-factor); + +$table-active-color: $table-color; +$table-active-bg-factor: 0.02; +$table-active-bg: rgba(var(--#{$prefix}black-rgb), $table-active-bg-factor); + +$table-hover-color: $table-color; +$table-hover-bg-factor: 0.02; +$table-hover-bg: rgba(var(--#{$prefix}black-rgb), $table-hover-bg-factor); + +$table-border-factor: 0.1; +$table-border-width: var(--#{$prefix}border-width); +$table-border-color: var(--#{$prefix}border-color); + +$table-striped-order: odd; +$table-striped-columns-order: even; + +$table-group-separator-color: currentcolor; + +$table-caption-color: var(--#{$prefix}secondary-color); + +$table-bg-scale: -80%; +// scss-docs-end table-variables + +// scss-docs-start table-loop +$table-variants: ( + 'primary': shift-color($primary, $table-bg-scale), + 'secondary': shift-color($secondary, $table-bg-scale), + 'success': shift-color($success, $table-bg-scale), + 'info': shift-color($info, $table-bg-scale), + 'warning': shift-color($warning, $table-bg-scale), + 'danger': shift-color($danger, $table-bg-scale), + 'light': $light, + 'dark': $dark, +); +// scss-docs-end table-loop + +// Buttons + Forms +// +// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. + +// scss-docs-start input-btn-variables +$input-btn-padding-y: 0.5rem; +$input-btn-padding-x: 1rem; +$input-btn-font-family: null; +$input-btn-font-size: $font-size-base; +$input-btn-line-height: $line-height-base; + +$input-btn-focus-width: $focus-ring-width; +$input-btn-focus-color-opacity: $focus-ring-opacity; +$input-btn-focus-color: $focus-ring-color; +$input-btn-focus-blur: $focus-ring-blur; +$input-btn-focus-box-shadow: $focus-ring-box-shadow; + +$input-btn-padding-y-sm: 0.348rem; +$input-btn-padding-x-sm: $spacer * 0.5; +$input-btn-font-size-sm: $font-size-sm; + +$input-btn-padding-y-lg: 0.625rem; +$input-btn-padding-x-lg: $spacer; +$input-btn-font-size-lg: $font-size-lg; + +$input-btn-border-width: var(--#{$prefix}border-width); +// scss-docs-end input-btn-variables + +// Buttons +// +// For each of Bootstrap's buttons, define text, background, and border color. + +// scss-docs-start btn-variables +$btn-color: var(--#{$prefix}body-color); +$btn-padding-y: $input-btn-padding-y; +$btn-padding-x: $input-btn-padding-x; +$btn-font-family: $input-btn-font-family; +$btn-font-size: $input-btn-font-size; +$btn-line-height: $input-btn-line-height; +$btn-white-space: null; // Set to `nowrap` to prevent text wrapping + +$btn-padding-y-sm: $input-btn-padding-y-sm; +$btn-padding-x-sm: $input-btn-padding-x-sm; +$btn-font-size-sm: $input-btn-font-size-sm; + +$btn-padding-y-lg: $input-btn-padding-y-lg; +$btn-padding-x-lg: $input-btn-padding-x-lg; +$btn-font-size-lg: $input-btn-font-size-lg; + +$btn-border-width: $input-btn-border-width; + +$btn-font-weight: $font-weight-normal; +$btn-box-shadow: 0px 2px 6px 0px; +$btn-focus-width: $input-btn-focus-width; +$btn-focus-box-shadow: $input-btn-focus-box-shadow; +$btn-disabled-opacity: 0.65; +$btn-active-box-shadow: inset 0 3px 5px #{rgba($black, 0.125)}; + +$btn-link-color: var(--#{$prefix}link-color); +$btn-link-hover-color: var(--#{$prefix}link-hover-color); +$btn-link-disabled-color: $gray-600; +$btn-link-focus-shadow-rgb: to-rgb( + mix(color-contrast($link-color), $link-color, 15%) +); + +// Allows for customizing button radius independently from global border radius +$btn-border-radius: $border-radius; +$btn-border-radius-sm: $border-radius-sm; +$btn-border-radius-lg: $border-radius-lg; + +$btn-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + +$btn-hover-bg-shade-amount: 10%; +$btn-hover-bg-tint-amount: 10%; +$btn-hover-border-shade-amount: 10%; +$btn-hover-border-tint-amount: 10%; +$btn-active-bg-shade-amount: 20%; +$btn-active-bg-tint-amount: 20%; +$btn-active-border-shade-amount: 25%; +$btn-active-border-tint-amount: 10%; +// scss-docs-end btn-variables + +// Forms + +// scss-docs-start form-text-variables +$form-text-margin-top: 0.25rem; +$form-text-font-size: $font-size-base; +$form-text-font-style: null; +$form-text-font-weight: null; +$form-text-color: $text-muted; +// scss-docs-end form-text-variables + +// scss-docs-start form-label-variables +$form-label-margin-bottom: 0.4rem; +$form-label-font-size: $font-size-base; +$form-label-font-style: null; +$form-label-font-weight: $font-weight-medium; +$form-label-color: var(--#{$prefix}body-color); +// scss-docs-end form-label-variables + +// scss-docs-start form-input-variables +$input-padding-y: $btn-padding-y; +$input-padding-x: $btn-padding-x; +$input-font-family: $input-btn-font-family; +$input-font-size: $input-btn-font-size; +$input-font-weight: $font-weight-base; +$input-line-height: $input-btn-line-height; + +$input-padding-y-sm: $input-btn-padding-y-sm; +$input-padding-x-sm: $input-btn-padding-x-sm; +$input-font-size-sm: $input-btn-font-size-sm; + +$input-padding-y-lg: $input-btn-padding-y-lg; +$input-padding-x-lg: $input-btn-padding-x-lg; +$input-font-size-lg: $input-btn-font-size-lg; + +$input-bg: var(--#{$prefix}secondary-bg); +$input-disabled-bg: var(--#{$prefix}body-bg); +$input-disabled-border-color: null; + +$input-color: var(--#{$prefix}body-color); +$input-border-color: var(--#{$prefix}input-border-color); +$input-border-width: $input-btn-border-width; +$input-box-shadow: $box-shadow-inset; + +$input-border-radius: $border-radius; +$input-border-radius-sm: $border-radius-sm; +$input-border-radius-lg: $border-radius-lg; + +$input-focus-bg: $input-bg; +$input-focus-border-color: var(--#{$prefix}input-focus-border-color); +$input-focus-color: $input-color; +$input-focus-width: $input-btn-focus-width; +$input-focus-box-shadow: none; + +$input-placeholder-color: var(--#{$prefix}secondary-color); +$input-plaintext-color: var(--#{$prefix}body-color); + +$input-height-border: calc( + $input-border-width * 2 +); // stylelint-disable-line function-disallowed-list + +$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2); +$input-height-inner-half: add($input-line-height * 0.5em, $input-padding-y); +$input-height-inner-quarter: add( + $input-line-height * 0.25em, + $input-padding-y * 0.5 +); + +$input-height: add( + $input-line-height * 1em, + add($input-padding-y * 2, $input-height-border, false) +); +$input-height-sm: add( + $input-line-height * 1em, + add($input-padding-y-sm * 2, $input-height-border, false) +); +$input-height-lg: add( + $input-line-height * 1em, + add($input-padding-y-lg * 2, $input-height-border, false) +); + +$input-transition: + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + +$form-color-width: 3rem; +// scss-docs-end form-input-variables + +// scss-docs-start form-check-variables +$form-check-input-width: 1.112em; +$form-check-min-height: $font-size-base * $line-height-base; +$form-check-padding-start: $form-check-input-width + 0.5em; +$form-check-margin-bottom: 0; +$form-check-label-color: null; +$form-check-label-cursor: null; +$form-check-transition: null; + +$form-check-input-active-filter: brightness(90%); + +$form-check-input-bg: var(--#{$prefix}secondary-bg); +$form-check-input-border: var(--#{$prefix}border-width) solid + var(--#{$prefix}border-color-translucent); +$form-check-input-border-radius: 0.25em; +$form-check-radio-border-radius: 50%; +$form-check-input-focus-border: $input-focus-border-color; +$form-check-input-focus-box-shadow: $input-btn-focus-box-shadow; + +$form-check-input-checked-color: $component-active-color; +$form-check-input-checked-bg-color: $component-active-bg; +$form-check-input-checked-border-color: $form-check-input-checked-bg-color; +$form-check-input-checked-bg-image: url("data:image/svg+xml,"); +$form-check-radio-checked-bg-image: url("data:image/svg+xml,"); + +$form-check-input-indeterminate-color: $component-active-color; +$form-check-input-indeterminate-bg-color: $component-active-bg; +$form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color; +$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,"); + +$form-check-input-disabled-opacity: 0.5; +$form-check-label-disabled-opacity: $form-check-input-disabled-opacity; +$form-check-btn-check-disabled-opacity: $btn-disabled-opacity; + +$form-check-inline-margin-end: 1rem; +// scss-docs-end form-check-variables + +// scss-docs-start form-switch-variables +$form-switch-color: rgba($black, 0.25); +$form-switch-width: 2em; +$form-switch-padding-start: $form-switch-width + 0.5em; +$form-switch-bg-image: url("data:image/svg+xml,"); +$form-switch-border-radius: $form-switch-width; +$form-switch-transition: background-position 0.15s ease-in-out; + +$form-switch-focus-color: $input-focus-border-color; +$form-switch-focus-bg-image: url("data:image/svg+xml,"); + +$form-switch-checked-color: $component-active-color; +$form-switch-checked-bg-image: url("data:image/svg+xml,"); +$form-switch-checked-bg-position: right center; +// scss-docs-end form-switch-variables + +// scss-docs-start input-group-variables +$input-group-addon-padding-y: $input-padding-y; +$input-group-addon-padding-x: $input-padding-x; +$input-group-addon-font-weight: $input-font-weight; +$input-group-addon-color: $input-color; +$input-group-addon-bg: var(--#{$prefix}tertiary-bg); +$input-group-addon-border-color: $input-border-color; +// scss-docs-end input-group-variables + +// scss-docs-start form-select-variables +$form-select-padding-y: $input-padding-y; +$form-select-padding-x: $input-padding-x; +$form-select-font-family: $input-font-family; +$form-select-font-size: $input-font-size; +$form-select-indicator-padding: $form-select-padding-x * 3; // Extra padding for background-image +$form-select-font-weight: $input-font-weight; +$form-select-line-height: $input-line-height; +$form-select-color: $input-color; +$form-select-bg: $input-bg; +$form-select-disabled-color: null; +$form-select-disabled-bg: $input-disabled-bg; +$form-select-disabled-border-color: $input-disabled-border-color; +$form-select-bg-position: right $form-select-padding-x center; +$form-select-bg-size: 14px 10px; // In pixels because image dimensions +$form-select-indicator-color: $gray-800; +$form-select-indicator: url("data:image/svg+xml,"); + +$form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + + $form-select-indicator-padding; +$form-select-feedback-icon-position: center right $form-select-indicator-padding; +$form-select-feedback-icon-size: $input-height-inner-half + $input-height-inner-half; + +$form-select-border-width: $input-border-width; +$form-select-border-color: $input-border-color; +$form-select-border-radius: $input-border-radius; +$form-select-box-shadow: $box-shadow-inset; + +$form-select-focus-border-color: $input-focus-border-color; +$form-select-focus-width: $input-focus-width; +$form-select-focus-box-shadow: none; + +$form-select-padding-y-sm: $input-padding-y-sm; +$form-select-padding-x-sm: $input-padding-x-sm; +$form-select-font-size-sm: $input-font-size-sm; +$form-select-border-radius-sm: $input-border-radius-sm; + +$form-select-padding-y-lg: $input-padding-y-lg; +$form-select-padding-x-lg: $input-padding-x-lg; +$form-select-font-size-lg: $input-font-size-lg; +$form-select-border-radius-lg: $input-border-radius-lg; + +$form-select-transition: $input-transition; +// scss-docs-end form-select-variables + +// scss-docs-start form-range-variables +$form-range-track-width: 100%; +$form-range-track-height: 0.5rem; +$form-range-track-cursor: pointer; +$form-range-track-bg: var(--#{$prefix}tertiary-bg); +$form-range-track-border-radius: 1rem; +$form-range-track-box-shadow: var(--#{$prefix}box-shadow-inset); + +$form-range-thumb-width: 1rem; +$form-range-thumb-height: $form-range-thumb-width; +$form-range-thumb-bg: $component-active-bg; +$form-range-thumb-border: 0; +$form-range-thumb-border-radius: $border-radius-lg; +$form-range-thumb-box-shadow: 0 0.1rem 0.25rem rgba($black, 0.1); +$form-range-thumb-focus-box-shadow: + 0 0 0 1px $body-bg, + $input-focus-box-shadow; +$form-range-thumb-focus-box-shadow-width: $input-focus-width; // For focus box shadow issue in Edge +$form-range-thumb-active-bg: tint-color($component-active-bg, 70%); +$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color); +$form-range-thumb-transition: + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; +// scss-docs-end form-range-variables + +// scss-docs-start form-file-variables +$form-file-button-color: $input-color; +$form-file-button-bg: var(--#{$prefix}tertiary-bg); +$form-file-button-hover-bg: var(--#{$prefix}secondary-bg); +// scss-docs-end form-file-variables + +// scss-docs-start form-floating-variables +$form-floating-height: add(3.5rem, $input-height-border); +$form-floating-line-height: 1.25; +$form-floating-padding-x: $input-padding-x; +$form-floating-padding-y: 1rem; +$form-floating-input-padding-t: 1.625rem; +$form-floating-input-padding-b: 0.625rem; +$form-floating-label-height: 1.875em; +$form-floating-label-opacity: 0.65; +$form-floating-label-transform: scale(0.85) translateY(-0.5rem) + translateX(0.15rem); +$form-floating-label-disabled-color: $gray-600; +$form-floating-transition: + opacity 0.1s ease-in-out, + transform 0.1s ease-in-out; +// scss-docs-end form-floating-variables + +// Form validation + +// scss-docs-start form-feedback-variables +$form-feedback-margin-top: $form-text-margin-top; +$form-feedback-font-size: $form-text-font-size; +$form-feedback-font-style: $form-text-font-style; +$form-feedback-valid-color: $success; +$form-feedback-invalid-color: $danger; + +$form-feedback-icon-valid-color: $form-feedback-valid-color; +$form-feedback-icon-valid: url("data:image/svg+xml,"); +$form-feedback-icon-invalid-color: $form-feedback-invalid-color; +$form-feedback-icon-invalid: url("data:image/svg+xml,"); +// scss-docs-end form-feedback-variables + +// scss-docs-start form-validation-colors +$form-valid-color: $form-feedback-valid-color; +$form-valid-border-color: $form-feedback-valid-color; +$form-invalid-color: $form-feedback-invalid-color; +$form-invalid-border-color: $form-feedback-invalid-color; +// scss-docs-end form-validation-colors + +// scss-docs-start form-validation-states +$form-validation-states: ( + 'valid': ( + 'color': var(--#{$prefix}form-valid-color), + 'icon': $form-feedback-icon-valid, + 'tooltip-color': #fff, + 'tooltip-bg-color': var(--#{$prefix}success), + 'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width + rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity), + 'border-color': var(--#{$prefix}form-valid-border-color), + ), + 'invalid': ( + 'color': var(--#{$prefix}form-invalid-color), + 'icon': $form-feedback-icon-invalid, + 'tooltip-color': #fff, + 'tooltip-bg-color': var(--#{$prefix}danger), + 'focus-box-shadow': 0 0 $input-btn-focus-blur $input-focus-width + rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity), + 'border-color': var(--#{$prefix}form-invalid-border-color), + ), +); +// scss-docs-end form-validation-states + +// Z-index master list +// +// Warning: Avoid customizing these values. They're used for a bird's eye view +// of components dependent on the z-axis and are designed to all work together. + +// scss-docs-start zindex-stack +$zindex-dropdown: 1000; +$zindex-sticky: 1020; +$zindex-fixed: 1030; +$zindex-offcanvas-backdrop: 1040; +$zindex-offcanvas: 1045; +$zindex-modal-backdrop: 1050; +$zindex-modal: 1055; +$zindex-popover: 1070; +$zindex-tooltip: 1080; +$zindex-toast: 1090; +// scss-docs-end zindex-stack + +// scss-docs-start zindex-levels-map +$zindex-levels: ( + n1: -1, + 0: 0, + 1: 1, + 2: 2, + 3: 3, +); +// scss-docs-end zindex-levels-map + +// Navs + +// scss-docs-start nav-variables +$nav-link-padding-y: 0.5rem; +$nav-link-padding-x: 1rem; +$nav-link-font-size: null; +$nav-link-font-weight: null; +$nav-link-color: var(--#{$prefix}link-color); +$nav-link-hover-color: var(--#{$prefix}link-hover-color); +$nav-link-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out; +$nav-link-disabled-color: var(--#{$prefix}secondary-color); +$nav-link-focus-box-shadow: $focus-ring-box-shadow; + +$nav-tabs-border-color: var(--#{$prefix}border-color); +$nav-tabs-border-width: var(--#{$prefix}border-width); +$nav-tabs-border-radius: var(--#{$prefix}border-radius); +$nav-tabs-link-hover-border-color: var(--#{$prefix}secondary-bg) + var(--#{$prefix}secondary-bg) $nav-tabs-border-color; +$nav-tabs-link-active-color: var(--#{$prefix}primary); +$nav-tabs-link-active-bg: var(--#{$prefix}secondary-bg); +$nav-tabs-link-active-border-color: var(--#{$prefix}border-color) + var(--#{$prefix}border-color) $nav-tabs-link-active-bg; + +$nav-pills-border-radius: $border-radius; +$nav-pills-link-active-color: $component-active-color; +$nav-pills-link-active-bg: $component-active-bg; + +$nav-underline-gap: 1rem; +$nav-underline-border-width: 0.125rem; +$nav-underline-link-active-color: var(--#{$prefix}emphasis-color); +// scss-docs-end nav-variables + +// Navbar + +// scss-docs-start navbar-variables +$navbar-padding-y: $spacer * 0.5; +$navbar-padding-x: null; + +$navbar-nav-link-padding-x: 0.5rem; + +$navbar-brand-font-size: $font-size-lg; +// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link +$nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2; +$navbar-brand-height: $navbar-brand-font-size * $line-height-base; +$navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * 0.5; +$navbar-brand-margin-end: 1rem; + +$navbar-toggler-padding-y: 0.25rem; +$navbar-toggler-padding-x: 0.75rem; +$navbar-toggler-font-size: $font-size-lg; +$navbar-toggler-border-radius: $btn-border-radius; +$navbar-toggler-focus-width: $btn-focus-width; +$navbar-toggler-transition: box-shadow 0.15s ease-in-out; + +$navbar-light-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.65); +$navbar-light-hover-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.8); +$navbar-light-active-color: rgba(var(--#{$prefix}emphasis-color-rgb), 1); +$navbar-light-disabled-color: rgba(var(--#{$prefix}emphasis-color-rgb), 0.3); +$navbar-light-icon-color: rgba($body-color, 0.75); +$navbar-light-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-light-toggler-border-color: rgba( + var(--#{$prefix}emphasis-color-rgb), + 0.15 +); +$navbar-light-brand-color: $navbar-light-active-color; +$navbar-light-brand-hover-color: $navbar-light-active-color; +// scss-docs-end navbar-variables + +// scss-docs-start navbar-dark-variables +$navbar-dark-color: rgba($white, 0.55); +$navbar-dark-hover-color: rgba($white, 0.75); +$navbar-dark-active-color: $white; +$navbar-dark-disabled-color: rgba($white, 0.25); +$navbar-dark-icon-color: $navbar-dark-color; +$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,"); +$navbar-dark-toggler-border-color: rgba($white, 0.1); +$navbar-dark-brand-color: $navbar-dark-active-color; +$navbar-dark-brand-hover-color: $navbar-dark-active-color; +// scss-docs-end navbar-dark-variables + +// Dropdowns +// +// Dropdown menu container and contents. + +// scss-docs-start dropdown-variables +$dropdown-min-width: 10rem; +$dropdown-padding-x: 0; +$dropdown-padding-y: 0.25rem; +$dropdown-spacer: 0.125rem; +$dropdown-font-size: $font-size-base; +$dropdown-color: var(--#{$prefix}body-color); +$dropdown-bg: var(--#{$prefix}secondary-bg); +$dropdown-border-color: var(--#{$prefix}border-color); +$dropdown-border-radius: $border-radius-sm; +$dropdown-border-width: var(--#{$prefix}border-width); +$dropdown-inner-border-radius: calc( + $dropdown-border-radius - $dropdown-border-width +); // stylelint-disable-line function-disallowed-list +$dropdown-divider-bg: $dropdown-border-color; +$dropdown-divider-margin-y: $spacer * 0.5; +$dropdown-box-shadow: var(--#{$prefix}box-shadow); + +$dropdown-link-color: var(--#{$prefix}body-color); +$dropdown-link-hover-color: var(--#{$prefix}body-color); +$dropdown-link-hover-bg: var(--#{$prefix}tertiary-bg); + +$dropdown-link-active-color: var(--#{$prefix}body-color); +$dropdown-link-active-bg: var(--#{$prefix}tertiary-bg); + +$dropdown-link-disabled-color: var(--#{$prefix}emphasis-color); + +$dropdown-item-padding-y: $spacer * 0.25; +$dropdown-item-padding-x: $spacer; + +$dropdown-header-color: inherit; +$dropdown-header-padding-x: $dropdown-item-padding-x * 0.75; +$dropdown-header-padding-y: $dropdown-padding-y * 2; +// fusv-disable +$dropdown-header-padding: $dropdown-header-padding-y $dropdown-header-padding-x; // Deprecated in v5.2.0 +// fusv-enable +// scss-docs-end dropdown-variables + +// scss-docs-start dropdown-dark-variables +$dropdown-dark-color: $gray-300; +$dropdown-dark-bg: $gray-800; +$dropdown-dark-border-color: $dropdown-border-color; +$dropdown-dark-divider-bg: $dropdown-divider-bg; +$dropdown-dark-box-shadow: null; +$dropdown-dark-link-color: $dropdown-dark-color; +$dropdown-dark-link-hover-color: $white; +$dropdown-dark-link-hover-bg: rgba($white, 0.15); +$dropdown-dark-link-active-color: $dropdown-link-active-color; +$dropdown-dark-link-active-bg: $dropdown-link-active-bg; +$dropdown-dark-link-disabled-color: $gray-500; +$dropdown-dark-header-color: $gray-500; +// scss-docs-end dropdown-dark-variables + +// Pagination + +// scss-docs-start pagination-variables +$pagination-padding-y: 0.375rem; +$pagination-padding-x: 0.75rem; +$pagination-padding-y-sm: 0.25rem; +$pagination-padding-x-sm: 0.5rem; +$pagination-padding-y-lg: 0.75rem; +$pagination-padding-x-lg: 1.5rem; + +$pagination-font-size: $font-size-base; + +$pagination-color: var(--#{$prefix}tertiary-color); +$pagination-bg: var(--#{$prefix}secondary-bg); +$pagination-border-radius: var(--#{$prefix}border-radius); +$pagination-border-width: var(--#{$prefix}border-width); +$pagination-margin-start: calc( + #{$pagination-border-width} * -1 +); // stylelint-disable-line function-disallowed-list +$pagination-border-color: var(--#{$prefix}border-color); + +$pagination-focus-color: var(--#{$prefix}link-hover-color); +$pagination-focus-bg: var(--#{$prefix}secondary-bg); +$pagination-focus-box-shadow: none; +$pagination-focus-outline: 0; + +$pagination-hover-color: var(--#{$prefix}link-hover-color); +$pagination-hover-bg: var(--#{$prefix}tertiary-bg); +$pagination-hover-border-color: var( + --#{$prefix}border-color +); // Todo in v6: remove this? + +$pagination-active-color: $component-active-color; +$pagination-active-bg: $component-active-bg; +$pagination-active-border-color: $component-active-bg; + +$pagination-disabled-color: var(--#{$prefix}secondary-color); +$pagination-disabled-bg: var(--#{$prefix}secondary-bg); +$pagination-disabled-border-color: var(--#{$prefix}border-color); + +$pagination-transition: + color 0.15s ease-in-out, + background-color 0.15s ease-in-out, + border-color 0.15s ease-in-out, + box-shadow 0.15s ease-in-out; + +$pagination-border-radius-sm: var(--#{$prefix}border-radius-sm); +$pagination-border-radius-lg: var(--#{$prefix}border-radius-lg); +// scss-docs-end pagination-variables + +// Placeholders + +// scss-docs-start placeholders +$placeholder-opacity-max: 0.5; +$placeholder-opacity-min: 0.2; +// scss-docs-end placeholders + +// Cards + +// scss-docs-start card-variables +$card-spacer-y: $spacer; +$card-spacer-x: $spacer; +$card-title-spacer-y: $spacer * 0.5; +$card-title-color: var(--#{$prefix}headings-color); +$card-subtitle-color: null; +$card-border-width: var(--#{$prefix}border-width); +$card-border-radius: $border-radius; +$card-border-color: var(--#{$prefix}border-color); +$card-border-radius: var(--#{$prefix}border-radius); +$card-box-shadow: var(--#{$prefix}box-shadow); +$card-inner-border-radius: subtract($card-border-radius, $card-border-width); +$card-cap-padding-y: $card-spacer-y * 0.75; +$card-cap-padding-x: $card-spacer-x; +$card-cap-bg: transparent; +$card-cap-color: null; +$card-height: null; +$card-color: null; +$card-bg: var(--#{$prefix}secondary-bg); +$card-img-overlay-padding: $spacer; +$card-group-margin: $grid-gutter-width * 0.5; + +// scss-docs-end card-variables + +// Accordion + +// scss-docs-start accordion-variables +$accordion-padding-y: 1rem; +$accordion-padding-x: 1.25rem; +$accordion-color: var(--#{$prefix}body-color); +$accordion-bg: var(--#{$prefix}secondary-bg); +$accordion-border-width: var(--#{$prefix}border-width); +$accordion-border-color: var(--#{$prefix}border-color); +$accordion-border-radius: var(--#{$prefix}border-radius); +$accordion-inner-border-radius: subtract( + $accordion-border-radius, + $accordion-border-width +); + +$accordion-body-padding-y: $accordion-padding-y; +$accordion-body-padding-x: $accordion-padding-x; + +$accordion-button-padding-y: $accordion-padding-y; +$accordion-button-padding-x: $accordion-padding-x; +$accordion-button-color: var(--#{$prefix}body-color); +$accordion-button-bg: var(--#{$prefix}accordion-bg); +$accordion-transition: + $btn-transition, + border-radius 0.15s ease; +$accordion-button-active-bg: var(--#{$prefix}tertiary-bg); +$accordion-button-active-color: var(--#{$prefix}primary); + +// fusv-disable +$accordion-button-focus-border-color: $input-focus-border-color; // Deprecated in v5.3.3 +// fusv-enable +$accordion-button-focus-box-shadow: none; + +$accordion-icon-width: 1rem; +$accordion-icon-color: $accordion-color; +$accordion-icon-active-color: $accordion-button-active-color; +$accordion-icon-transition: transform 0.2s ease-in-out; +$accordion-icon-transform: rotate(-180deg); + +$accordion-button-icon: url("data:image/svg+xml,"); +$accordion-button-active-icon: url("data:image/svg+xml,"); +// scss-docs-end accordion-variables + +// Tooltips + +// scss-docs-start tooltip-variables +$tooltip-font-size: $font-size-sm; +$tooltip-max-width: 200px; +$tooltip-color: var(--#{$prefix}body-bg); +$tooltip-bg: var(--#{$prefix}body-color); +$tooltip-border-radius: var(--#{$prefix}border-radius); +$tooltip-opacity: 1; +$tooltip-padding-y: $spacer * 0.25; +$tooltip-padding-x: $spacer * 0.5; +$tooltip-margin: null; // TODO: remove this in v6 + +$tooltip-arrow-width: 0.8rem; +$tooltip-arrow-height: 0.4rem; +// fusv-disable +$tooltip-arrow-color: null; // Deprecated in Bootstrap 5.2.0 for CSS variables +// fusv-enable +// scss-docs-end tooltip-variables + +// Form tooltips must come after regular tooltips +// scss-docs-start tooltip-feedback-variables +$form-feedback-tooltip-padding-y: $tooltip-padding-y; +$form-feedback-tooltip-padding-x: $tooltip-padding-x; +$form-feedback-tooltip-font-size: $tooltip-font-size; +$form-feedback-tooltip-line-height: $line-height-base; +$form-feedback-tooltip-opacity: $tooltip-opacity; +$form-feedback-tooltip-border-radius: $tooltip-border-radius; +// scss-docs-end tooltip-feedback-variables + +// Popovers + +// scss-docs-start popover-variables +$popover-font-size: $font-size-sm; +$popover-bg: var(--#{$prefix}secondary-bg); +$popover-max-width: 276px; +$popover-border-width: var(--#{$prefix}border-width); +$popover-border-color: var(--#{$prefix}border-color); +$popover-border-radius: var(--#{$prefix}border-radius-lg); +$popover-inner-border-radius: calc( + $popover-border-radius - $popover-border-width +); // stylelint-disable-line function-disallowed-list +$popover-box-shadow: $box-shadow; + +$popover-header-font-size: $font-size-base; +$popover-header-bg: var(--#{$prefix}tertiary-bg); +$popover-header-color: $headings-color; +$popover-header-padding-y: 0.7rem; +$popover-header-padding-x: 0.8rem; + +$popover-body-color: var(--#{$prefix}body-color); +$popover-body-padding-y: $popover-header-padding-y; +$popover-body-padding-x: $popover-header-padding-x; + +$popover-arrow-width: 1rem; +$popover-arrow-height: 0.5rem; +// scss-docs-end popover-variables + +// fusv-disable +// Deprecated in Bootstrap 5.2.0 for CSS variables +$popover-arrow-color: $popover-bg; +$popover-arrow-outer-color: var(--#{$prefix}border-color); +// fusv-enable + +// Toasts + +// scss-docs-start toast-variables +$toast-max-width: 350px; +$toast-padding-x: 0.75rem; +$toast-padding-y: 0.75rem; +$toast-font-size: 0.875rem; +$toast-color: null; +$toast-background-color: var(--#{$prefix}secondary-bg); +$toast-border-width: var(--#{$prefix}border-width); +$toast-border-color: var(--#{$prefix}border-color); +$toast-border-radius: var(--#{$prefix}border-radius); +$toast-box-shadow: var(--#{$prefix}box-shadow); +$toast-spacing: $container-padding-x; + +$toast-header-color: var(--#{$prefix}secondary-color); +$toast-header-background-color: rgba(var(--#{$prefix}body-bg-rgb), 0.85); +$toast-header-border-color: $toast-border-color; +// scss-docs-end toast-variables + +// Badges + +// scss-docs-start badge-variables +$badge-font-size: 0.75em; +$badge-font-weight: $font-weight-semibold; +$badge-color: $white; +$badge-padding-y: 3px; +$badge-padding-x: 6px; +$badge-border-radius: 4px; +// scss-docs-end badge-variables + +// Modals + +// scss-docs-start modal-variables +$modal-inner-padding: $spacer; + +$modal-footer-margin-between: 0.5rem; + +$modal-dialog-margin: 0.5rem; +$modal-dialog-margin-y-sm-up: 1.75rem; + +$modal-title-line-height: $line-height-base; + +$modal-content-color: null; +$modal-content-bg: var(--#{$prefix}secondary-bg); +$modal-content-border-color: transparent; +$modal-content-border-width: var(--#{$prefix}border-width); +$modal-content-border-radius: var(--#{$prefix}border-radius-lg); +$modal-content-inner-border-radius: subtract( + $modal-content-border-radius, + $modal-content-border-width +); +$modal-content-box-shadow-xs: $box-shadow-sm; +$modal-content-box-shadow-sm-up: var(--#{$prefix}box-shadow); + +$modal-backdrop-bg: $black; +$modal-backdrop-opacity: 0.5; +$modal-header-border-color: var(--#{$prefix}border-color); +$modal-header-border-width: $modal-content-border-width; +$modal-header-padding-y: $modal-inner-padding; +$modal-header-padding-x: $modal-inner-padding; +$modal-header-padding: $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility + +$modal-footer-bg: null; +$modal-footer-border-color: $modal-header-border-color; +$modal-footer-border-width: $modal-header-border-width; + +$modal-sm: 300px; +$modal-md: 500px; +$modal-lg: 800px; +$modal-xl: 1140px; + +$modal-fade-transform: translate(0, -50px); +$modal-show-transform: none; +$modal-transition: transform 0.3s ease-out; +$modal-scale-transform: scale(1.02); +// scss-docs-end modal-variables + +// Alerts +// +// Define alert colors, border radius, and padding. + +// scss-docs-start alert-variables +$alert-padding-y: 0.75rem; +$alert-padding-x: 1.25rem; +$alert-margin-bottom: 1.25rem; +$alert-border-radius: $border-radius; +$alert-link-font-weight: $font-weight-bold; +$alert-border-width: 0; +$alert-bg-scale: -80%; +$alert-border-scale: -72%; +$alert-color-scale: 40%; +$alert-dismissible-padding-r: $alert-padding-x * 3; // 3x covers width of x plus default padding on either side +// scss-docs-end alert-variables + +// fusv-disable +$alert-bg-scale: -80%; // Deprecated in v5.2.0, to be removed in v6 +$alert-border-scale: -70%; // Deprecated in v5.2.0, to be removed in v6 +$alert-color-scale: 40%; // Deprecated in v5.2.0, to be removed in v6 +// fusv-enable + +// Progress bars + +// scss-docs-start progress-variables +$progress-height: 0.75rem; +$progress-font-size: $font-size-base * 0.75; +$progress-bg: var(--#{$prefix}light); +$progress-border-radius: var(--#{$prefix}border-radius); +$progress-box-shadow: var(--#{$prefix}box-shadow-inset); +$progress-bar-color: $white; +$progress-bar-bg: $primary; +$progress-bar-animation-timing: 1s linear infinite; +$progress-bar-transition: width 0.6s ease; +// scss-docs-end progress-variables + +// List group + +// scss-docs-start list-group-variables +$list-group-color: var(--#{$prefix}tertiary-color); +$list-group-bg: var(--#{$prefix}secondary-bg); +$list-group-border-color: var(--#{$prefix}border-color); +$list-group-border-width: var(--#{$prefix}border-width); +$list-group-border-radius: var(--#{$prefix}border-radius); + +$list-group-item-padding-y: 0.75rem; +$list-group-item-padding-x: $spacer; +// fusv-disable +$list-group-item-bg-scale: -70%; // Deprecated in v5.3.0 +$list-group-item-color-scale: 40%; // Deprecated in v5.3.0 +// fusv-enable + +$list-group-hover-bg: var(--#{$prefix}tertiary-bg); +$list-group-active-color: $component-active-color; +$list-group-active-bg: $component-active-bg; +$list-group-active-border-color: $list-group-active-bg; + +$list-group-disabled-color: var(--#{$prefix}secondary-color); +$list-group-disabled-bg: var(--#{$prefix}tertiary-bg); + +$list-group-action-color: var(--#{$prefix}secondary-color); +$list-group-action-hover-color: var(--#{$prefix}tertiary-color); + +$list-group-action-active-color: var(--#{$prefix}body-color); +$list-group-action-active-bg: var(--#{$prefix}secondary-bg); +// scss-docs-end list-group-variables + +// Image thumbnails + +// scss-docs-start thumbnail-variables +$thumbnail-padding: 0.25rem; +$thumbnail-bg: transparent; +$thumbnail-border-width: var(--#{$prefix}border-width); +$thumbnail-border-color: var(--#{$prefix}border-color); +$thumbnail-border-radius: var(--#{$prefix}border-radius); +$thumbnail-box-shadow: var(--#{$prefix}box-shadow-sm); +// scss-docs-end thumbnail-variables + +// Figures + +// scss-docs-start figure-variables +$figure-caption-font-size: $small-font-size; +$figure-caption-color: var(--#{$prefix}secondary-color); +// scss-docs-end figure-variables + +// Breadcrumbs + +// scss-docs-start breadcrumb-variables +$breadcrumb-font-size: null; +$breadcrumb-padding-y: 0; +$breadcrumb-padding-x: 0; +$breadcrumb-item-padding-x: 0.5rem; +$breadcrumb-margin-bottom: 1rem; +$breadcrumb-bg: transparent; +$breadcrumb-divider-color: var(--#{$prefix}secondary-color); +$breadcrumb-active-color: var(--#{$prefix}secondary-color); +$breadcrumb-divider: quote('\ea50'); +$breadcrumb-divider-flipped: $breadcrumb-divider; +$breadcrumb-border-radius: $border-radius; +// scss-docs-end breadcrumb-variables + +// Carousel + +// scss-docs-start carousel-variables +$carousel-control-color: $white; +$carousel-control-width: 15%; +$carousel-control-opacity: 0.5; +$carousel-control-hover-opacity: 0.9; +$carousel-control-transition: opacity 0.15s ease; + +$carousel-indicator-width: 30px; +$carousel-indicator-height: 3px; +$carousel-indicator-hit-area-height: 10px; +$carousel-indicator-spacer: 3px; +$carousel-indicator-opacity: 0.5; +$carousel-indicator-active-bg: $white; +$carousel-indicator-active-opacity: 1; +$carousel-indicator-transition: opacity 0.6s ease; + +$carousel-caption-width: 70%; +$carousel-caption-color: $white; +$carousel-caption-padding-y: 1.25rem; +$carousel-caption-spacer: 1.25rem; + +$carousel-control-icon-width: 20px; + +$carousel-control-prev-icon-bg: url("data:image/svg+xml,"); +$carousel-control-next-icon-bg: url("data:image/svg+xml,"); + +$carousel-transition-duration: 0.6s; +$carousel-transition: transform $carousel-transition-duration ease-in-out; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) +// scss-docs-end carousel-variables + +// scss-docs-start carousel-dark-variables +$carousel-dark-indicator-active-bg: $black; +$carousel-dark-caption-color: $black; +$carousel-dark-control-icon-filter: invert(1) grayscale(100); +// scss-docs-end carousel-dark-variables + +// Spinners + +// scss-docs-start spinner-variables +$spinner-width: 2rem; +$spinner-height: $spinner-width; +$spinner-vertical-align: -0.125em; +$spinner-border-width: 0.25em; +$spinner-animation-speed: 0.75s; + +$spinner-width-sm: 1rem; +$spinner-height-sm: $spinner-width-sm; +$spinner-border-width-sm: 0.2em; +// scss-docs-end spinner-variables + +// Close + +// scss-docs-start close-variables +$btn-close-width: 0.8em; +$btn-close-height: $btn-close-width; +$btn-close-padding-x: 0.25em; +$btn-close-padding-y: $btn-close-padding-x; +$btn-close-color: var(--#{$prefix}secondary-color); +$btn-close-bg: url("data:image/svg+xml,"); +$btn-close-focus-shadow: $input-btn-focus-box-shadow; +$btn-close-opacity: 1; +$btn-close-hover-opacity: 0.75; +$btn-close-focus-opacity: 1; +$btn-close-disabled-opacity: 0.25; +$btn-close-white-filter: invert(1) grayscale(100%) brightness(200%); +// scss-docs-end close-variables + +// Offcanvas + +// scss-docs-start offcanvas-variables +$offcanvas-padding-y: $modal-inner-padding; +$offcanvas-padding-x: $modal-inner-padding; +$offcanvas-horizontal-width: 280px; +$offcanvas-vertical-height: 30vh; +$offcanvas-transition-duration: 0.3s; +$offcanvas-border-color: $modal-content-border-color; +$offcanvas-border-width: $modal-content-border-width; +$offcanvas-title-line-height: $modal-title-line-height; +$offcanvas-bg-color: var(--#{$prefix}secondary-bg); +$offcanvas-color: var(--#{$prefix}body-color); +$offcanvas-box-shadow: $modal-content-box-shadow-xs; +$offcanvas-backdrop-bg: $modal-backdrop-bg; +$offcanvas-backdrop-opacity: $modal-backdrop-opacity; +// scss-docs-end offcanvas-variables + +// Code + +$code-font-size: $small-font-size !default; +$code-color: $pink; + +$kbd-padding-y: 0.2rem; +$kbd-padding-x: 0.4rem; +$kbd-font-size: $code-font-size; +$kbd-color: var(--#{$prefix}body-bg); +$kbd-bg: var(--#{$prefix}body-color); +$nested-kbd-font-weight: null !default; // Deprecated in v5.2.0, removing in v6 + +$pre-color: var(--#{$prefix}body-color); diff --git a/apiferia/src/assets/scss/icons.scss b/apiferia/src/assets/scss/icons.scss new file mode 100644 index 00000000..1fd965b6 --- /dev/null +++ b/apiferia/src/assets/scss/icons.scss @@ -0,0 +1,6 @@ +// +// icons.scss +// + +// Icon files +@import 'icons/boxicons'; diff --git a/apiferia/src/assets/scss/icons/_boxicons.scss b/apiferia/src/assets/scss/icons/_boxicons.scss new file mode 100644 index 00000000..e91029f0 --- /dev/null +++ b/apiferia/src/assets/scss/icons/_boxicons.scss @@ -0,0 +1,7029 @@ +@font-face { + font-family: 'boxicons'; + font-weight: normal; + font-style: normal; + + src: url('../../fonts/boxicons.eot'); + src: + url('../../fonts/boxicons.eot') format('embedded-opentype'), + url('../../fonts/boxicons.woff2') format('woff2'), + url('../../fonts/boxicons.woff') format('woff'), + url('../../fonts/boxicons.ttf') format('truetype'), + url('../../fonts/boxicons.svg?#boxicons') format('svg'); +} + +.bx { + font-family: 'boxicons' !important; + font-weight: normal; + font-style: normal; + font-variant: normal; + line-height: 1; + text-rendering: auto; + display: inline-block; + + text-transform: none; + + speak: none; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bx-ul { + margin-left: 2em; + padding-left: 0; + + list-style: none; +} + +.bx-ul > li { + position: relative; +} + +.bx-ul .bx { + font-size: inherit; + line-height: inherit; + + position: absolute; + left: -2em; + + width: 2em; + + text-align: center; +} + +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +@-webkit-keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + + opacity: 1; + } + + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + + opacity: 0; + } +} + +@-webkit-keyframes flashing { + 0% { + opacity: 1; + } + + 45% { + opacity: 0; + } + + 90% { + opacity: 1; + } +} + +@keyframes flashing { + 0% { + opacity: 1; + } + + 45% { + opacity: 0; + } + + 90% { + opacity: 1; + } +} + +@-webkit-keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + + opacity: 0; + } +} + +@-webkit-keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + + opacity: 1; + } + + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + + opacity: 0; + } +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bx-spin { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-spin-hover:hover { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.bx-tada { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-tada-hover:hover { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.bx-flashing { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-flashing-hover:hover { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.bx-burst { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-burst-hover:hover { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.bx-fade-up { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-up-hover:hover { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.bx-fade-down { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-down-hover:hover { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.bx-fade-left { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-left-hover:hover { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.bx-fade-right { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.bx-fade-right-hover:hover { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.bx-xs { + font-size: 1rem !important; +} + +.bx-sm { + font-size: 1.55rem !important; +} + +.bx-md { + font-size: 2.25rem !important; +} + +.bx-lg { + font-size: 3rem !important; +} + +.bx-fw { + font-size: 1.2857142857em; + line-height: 0.8em; + + width: 1.2857142857em; + height: 0.8em; + margin-top: -0.2em !important; + + vertical-align: middle; +} + +.bx-pull-left { + float: left; + + margin-right: 0.3em !important; +} + +.bx-pull-right { + float: right; + + margin-left: 0.3em !important; +} + +.bx-rotate-90 { + transform: rotate(90deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; +} + +.bx-rotate-180 { + transform: rotate(180deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; +} + +.bx-rotate-270 { + transform: rotate(270deg); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; +} + +.bx-flip-horizontal { + transform: scaleX(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; +} + +.bx-flip-vertical { + transform: scaleY(-1); + + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; +} + +.bx-border { + padding: 0.25em; + + border: 0.07em solid rgba(0, 0, 0, 0.1); + border-radius: 0.25em; +} + +.bx-border-circle { + padding: 0.25em; + + border: 0.07em solid rgba(0, 0, 0, 0.1); + border-radius: 50%; +} + +.bxs-balloon:before { + content: '\eb60'; +} + +.bxs-castle:before { + content: '\eb79'; +} + +.bxs-coffee-bean:before { + content: '\eb92'; +} + +.bxs-objects-horizontal-center:before { + content: '\ebab'; +} + +.bxs-objects-horizontal-left:before { + content: '\ebc4'; +} + +.bxs-objects-horizontal-right:before { + content: '\ebdd'; +} + +.bxs-objects-vertical-bottom:before { + content: '\ebf6'; +} + +.bxs-objects-vertical-center:before { + content: '\ef40'; +} + +.bxs-objects-vertical-top:before { + content: '\ef41'; +} + +.bxs-pear:before { + content: '\ef42'; +} + +.bxs-shield-minus:before { + content: '\ef43'; +} + +.bxs-shield-plus:before { + content: '\ef44'; +} + +.bxs-shower:before { + content: '\ef45'; +} + +.bxs-sushi:before { + content: '\ef46'; +} + +.bxs-universal-access:before { + content: '\ef47'; +} + +.bx-child:before { + content: '\ef48'; +} + +.bx-horizontal-left:before { + content: '\ef49'; +} + +.bx-horizontal-right:before { + content: '\ef4a'; +} + +.bx-objects-horizontal-center:before { + content: '\ef4b'; +} + +.bx-objects-horizontal-left:before { + content: '\ef4c'; +} + +.bx-objects-horizontal-right:before { + content: '\ef4d'; +} + +.bx-objects-vertical-bottom:before { + content: '\ef4e'; +} + +.bx-objects-vertical-center:before { + content: '\ef4f'; +} + +.bx-objects-vertical-top:before { + content: '\ef50'; +} + +.bx-rfid:before { + content: '\ef51'; +} + +.bx-shield-minus:before { + content: '\ef52'; +} + +.bx-shield-plus:before { + content: '\ef53'; +} + +.bx-shower:before { + content: '\ef54'; +} + +.bx-sushi:before { + content: '\ef55'; +} + +.bx-universal-access:before { + content: '\ef56'; +} + +.bx-vertical-bottom:before { + content: '\ef57'; +} + +.bx-vertical-top:before { + content: '\ef58'; +} + +.bxl-graphql:before { + content: '\ef59'; +} + +.bxl-typescript:before { + content: '\ef5a'; +} + +.bxs-color:before { + content: '\ef39'; +} + +.bx-reflect-horizontal:before { + content: '\ef3a'; +} + +.bx-reflect-vertical:before { + content: '\ef3b'; +} + +.bx-color:before { + content: '\ef3c'; +} + +.bxl-mongodb:before { + content: '\ef3d'; +} + +.bxl-postgresql:before { + content: '\ef3e'; +} + +.bxl-deezer:before { + content: '\ef3f'; +} + +.bxs-hard-hat:before { + content: '\ef2a'; +} + +.bxs-home-alt-2:before { + content: '\ef2b'; +} + +.bxs-cheese:before { + content: '\ef2c'; +} + +.bx-home-alt-2:before { + content: '\ef2d'; +} + +.bx-hard-hat:before { + content: '\ef2e'; +} + +.bx-cheese:before { + content: '\ef2f'; +} + +.bx-cart-add:before { + content: '\ef30'; +} + +.bx-cart-download:before { + content: '\ef31'; +} + +.bx-no-signal:before { + content: '\ef32'; +} + +.bx-signal-1:before { + content: '\ef33'; +} + +.bx-signal-2:before { + content: '\ef34'; +} + +.bx-signal-3:before { + content: '\ef35'; +} + +.bx-signal-4:before { + content: '\ef36'; +} + +.bx-signal-5:before { + content: '\ef37'; +} + +.bxl-xing:before { + content: '\ef38'; +} + +.bxl-meta:before { + content: '\ef27'; +} + +.bx-lemon:before { + content: '\ef28'; +} + +.bxs-lemon:before { + content: '\ef29'; +} + +.bx-cricket-ball:before { + content: '\ef0c'; +} + +.bx-baguette:before { + content: '\ef0d'; +} + +.bx-bowl-hot:before { + content: '\ef0e'; +} + +.bx-bowl-rice:before { + content: '\ef0f'; +} + +.bx-cable-car:before { + content: '\ef10'; +} + +.bx-candles:before { + content: '\ef11'; +} + +.bx-circle-half:before { + content: '\ef12'; +} + +.bx-circle-quarter:before { + content: '\ef13'; +} + +.bx-circle-three-quarter:before { + content: '\ef14'; +} + +.bx-cross:before { + content: '\ef15'; +} + +.bx-fork:before { + content: '\ef16'; +} + +.bx-knife:before { + content: '\ef17'; +} + +.bx-money-withdraw:before { + content: '\ef18'; +} + +.bx-popsicle:before { + content: '\ef19'; +} + +.bx-scatter-chart:before { + content: '\ef1a'; +} + +.bxs-baguette:before { + content: '\ef1b'; +} + +.bxs-bowl-hot:before { + content: '\ef1c'; +} + +.bxs-bowl-rice:before { + content: '\ef1d'; +} + +.bxs-cable-car:before { + content: '\ef1e'; +} + +.bxs-circle-half:before { + content: '\ef1f'; +} + +.bxs-circle-quarter:before { + content: '\ef20'; +} + +.bxs-circle-three-quarter:before { + content: '\ef21'; +} + +.bxs-cricket-ball:before { + content: '\ef22'; +} + +.bxs-invader:before { + content: '\ef23'; +} + +.bx-male-female:before { + content: '\ef24'; +} + +.bxs-popsicle:before { + content: '\ef25'; +} + +.bxs-tree-alt:before { + content: '\ef26'; +} + +.bxl-venmo:before { + content: '\e900'; +} + +.bxl-upwork:before { + content: '\e901'; +} + +.bxl-netlify:before { + content: '\e902'; +} + +.bxl-java:before { + content: '\e903'; +} + +.bxl-heroku:before { + content: '\e904'; +} + +.bxl-go-lang:before { + content: '\e905'; +} + +.bxl-gmail:before { + content: '\e906'; +} + +.bxl-flask:before { + content: '\e907'; +} + +.bxl-99designs:before { + content: '\e908'; +} + +.bxl-500px:before { + content: '\e909'; +} + +.bxl-adobe:before { + content: '\e90a'; +} + +.bxl-airbnb:before { + content: '\e90b'; +} + +.bxl-algolia:before { + content: '\e90c'; +} + +.bxl-amazon:before { + content: '\e90d'; +} + +.bxl-android:before { + content: '\e90e'; +} + +.bxl-angular:before { + content: '\e90f'; +} + +.bxl-apple:before { + content: '\e910'; +} + +.bxl-audible:before { + content: '\e911'; +} + +.bxl-aws:before { + content: '\e912'; +} + +.bxl-baidu:before { + content: '\e913'; +} + +.bxl-behance:before { + content: '\e914'; +} + +.bxl-bing:before { + content: '\e915'; +} + +.bxl-bitcoin:before { + content: '\e916'; +} + +.bxl-blender:before { + content: '\e917'; +} + +.bxl-blogger:before { + content: '\e918'; +} + +.bxl-bootstrap:before { + content: '\e919'; +} + +.bxl-chrome:before { + content: '\e91a'; +} + +.bxl-codepen:before { + content: '\e91b'; +} + +.bxl-c-plus-plus:before { + content: '\e91c'; +} + +.bxl-creative-commons:before { + content: '\e91d'; +} + +.bxl-css3:before { + content: '\e91e'; +} + +.bxl-dailymotion:before { + content: '\e91f'; +} + +.bxl-deviantart:before { + content: '\e920'; +} + +.bxl-dev-to:before { + content: '\e921'; +} + +.bxl-digg:before { + content: '\e922'; +} + +.bxl-digitalocean:before { + content: '\e923'; +} + +.bxl-discord:before { + content: '\e924'; +} + +.bxl-discord-alt:before { + content: '\e925'; +} + +.bxl-discourse:before { + content: '\e926'; +} + +.bxl-django:before { + content: '\e927'; +} + +.bxl-docker:before { + content: '\e928'; +} + +.bxl-dribbble:before { + content: '\e929'; +} + +.bxl-dropbox:before { + content: '\e92a'; +} + +.bxl-drupal:before { + content: '\e92b'; +} + +.bxl-ebay:before { + content: '\e92c'; +} + +.bxl-edge:before { + content: '\e92d'; +} + +.bxl-etsy:before { + content: '\e92e'; +} + +.bxl-facebook:before { + content: '\e92f'; +} + +.bxl-facebook-circle:before { + content: '\e930'; +} + +.bxl-facebook-square:before { + content: '\e931'; +} + +.bxl-figma:before { + content: '\e932'; +} + +.bxl-firebase:before { + content: '\e933'; +} + +.bxl-firefox:before { + content: '\e934'; +} + +.bxl-flickr:before { + content: '\e935'; +} + +.bxl-flickr-square:before { + content: '\e936'; +} + +.bxl-flutter:before { + content: '\e937'; +} + +.bxl-foursquare:before { + content: '\e938'; +} + +.bxl-git:before { + content: '\e939'; +} + +.bxl-github:before { + content: '\e93a'; +} + +.bxl-gitlab:before { + content: '\e93b'; +} + +.bxl-google:before { + content: '\e93c'; +} + +.bxl-google-cloud:before { + content: '\e93d'; +} + +.bxl-google-plus:before { + content: '\e93e'; +} + +.bxl-google-plus-circle:before { + content: '\e93f'; +} + +.bxl-html5:before { + content: '\e940'; +} + +.bxl-imdb:before { + content: '\e941'; +} + +.bxl-instagram:before { + content: '\e942'; +} + +.bxl-instagram-alt:before { + content: '\e943'; +} + +.bxl-internet-explorer:before { + content: '\e944'; +} + +.bxl-invision:before { + content: '\e945'; +} + +.bxl-javascript:before { + content: '\e946'; +} + +.bxl-joomla:before { + content: '\e947'; +} + +.bxl-jquery:before { + content: '\e948'; +} + +.bxl-jsfiddle:before { + content: '\e949'; +} + +.bxl-kickstarter:before { + content: '\e94a'; +} + +.bxl-kubernetes:before { + content: '\e94b'; +} + +.bxl-less:before { + content: '\e94c'; +} + +.bxl-linkedin:before { + content: '\e94d'; +} + +.bxl-linkedin-square:before { + content: '\e94e'; +} + +.bxl-magento:before { + content: '\e94f'; +} + +.bxl-mailchimp:before { + content: '\e950'; +} + +.bxl-markdown:before { + content: '\e951'; +} + +.bxl-mastercard:before { + content: '\e952'; +} + +.bxl-mastodon:before { + content: '\e953'; +} + +.bxl-medium:before { + content: '\e954'; +} + +.bxl-medium-old:before { + content: '\e955'; +} + +.bxl-medium-square:before { + content: '\e956'; +} + +.bxl-messenger:before { + content: '\e957'; +} + +.bxl-microsoft:before { + content: '\e958'; +} + +.bxl-microsoft-teams:before { + content: '\e959'; +} + +.bxl-nodejs:before { + content: '\e95a'; +} + +.bxl-ok-ru:before { + content: '\e95b'; +} + +.bxl-opera:before { + content: '\e95c'; +} + +.bxl-patreon:before { + content: '\e95d'; +} + +.bxl-paypal:before { + content: '\e95e'; +} + +.bxl-periscope:before { + content: '\e95f'; +} + +.bxl-php:before { + content: '\e960'; +} + +.bxl-pinterest:before { + content: '\e961'; +} + +.bxl-pinterest-alt:before { + content: '\e962'; +} + +.bxl-play-store:before { + content: '\e963'; +} + +.bxl-pocket:before { + content: '\e964'; +} + +.bxl-product-hunt:before { + content: '\e965'; +} + +.bxl-python:before { + content: '\e966'; +} + +.bxl-quora:before { + content: '\e967'; +} + +.bxl-react:before { + content: '\e968'; +} + +.bxl-redbubble:before { + content: '\e969'; +} + +.bxl-reddit:before { + content: '\e96a'; +} + +.bxl-redux:before { + content: '\e96b'; +} + +.bxl-sass:before { + content: '\e96c'; +} + +.bxl-shopify:before { + content: '\e96d'; +} + +.bxl-sketch:before { + content: '\e96e'; +} + +.bxl-skype:before { + content: '\e96f'; +} + +.bxl-slack:before { + content: '\e970'; +} + +.bxl-slack-old:before { + content: '\e971'; +} + +.bxl-snapchat:before { + content: '\e972'; +} + +.bxl-soundcloud:before { + content: '\e973'; +} + +.bxl-spotify:before { + content: '\e974'; +} + +.bxl-spring-boot:before { + content: '\e975'; +} + +.bxl-squarespace:before { + content: '\e976'; +} + +.bxl-stack-overflow:before { + content: '\e977'; +} + +.bxl-steam:before { + content: '\e978'; +} + +.bxl-stripe:before { + content: '\e979'; +} + +.bxl-tailwind-css:before { + content: '\e97a'; +} + +.bxl-telegram:before { + content: '\e97b'; +} + +.bxl-tiktok:before { + content: '\e97c'; +} + +.bxl-trello:before { + content: '\e97d'; +} + +.bxl-trip-advisor:before { + content: '\e97e'; +} + +.bxl-tumblr:before { + content: '\e97f'; +} + +.bxl-tux:before { + content: '\e980'; +} + +.bxl-twitch:before { + content: '\e981'; +} + +.bxl-twitter:before { + content: '\e982'; +} + +.bxl-unity:before { + content: '\e983'; +} + +.bxl-unsplash:before { + content: '\e984'; +} + +.bxl-vimeo:before { + content: '\e985'; +} + +.bxl-visa:before { + content: '\e986'; +} + +.bxl-visual-studio:before { + content: '\e987'; +} + +.bxl-vk:before { + content: '\e988'; +} + +.bxl-vuejs:before { + content: '\e989'; +} + +.bxl-whatsapp:before { + content: '\e98a'; +} + +.bxl-whatsapp-square:before { + content: '\e98b'; +} + +.bxl-wikipedia:before { + content: '\e98c'; +} + +.bxl-windows:before { + content: '\e98d'; +} + +.bxl-wix:before { + content: '\e98e'; +} + +.bxl-wordpress:before { + content: '\e98f'; +} + +.bxl-yahoo:before { + content: '\e990'; +} + +.bxl-yelp:before { + content: '\e991'; +} + +.bxl-youtube:before { + content: '\e992'; +} + +.bxl-zoom:before { + content: '\e993'; +} + +.bx-collapse-alt:before { + content: '\e994'; +} + +.bx-collapse-horizontal:before { + content: '\e995'; +} + +.bx-collapse-vertical:before { + content: '\e996'; +} + +.bx-expand-horizontal:before { + content: '\e997'; +} + +.bx-expand-vertical:before { + content: '\e998'; +} + +.bx-injection:before { + content: '\e999'; +} + +.bx-leaf:before { + content: '\e99a'; +} + +.bx-math:before { + content: '\e99b'; +} + +.bx-party:before { + content: '\e99c'; +} + +.bx-abacus:before { + content: '\e99d'; +} + +.bx-accessibility:before { + content: '\e99e'; +} + +.bx-add-to-queue:before { + content: '\e99f'; +} + +.bx-adjust:before { + content: '\e9a0'; +} + +.bx-alarm:before { + content: '\e9a1'; +} + +.bx-alarm-add:before { + content: '\e9a2'; +} + +.bx-alarm-exclamation:before { + content: '\e9a3'; +} + +.bx-alarm-off:before { + content: '\e9a4'; +} + +.bx-alarm-snooze:before { + content: '\e9a5'; +} + +.bx-album:before { + content: '\e9a6'; +} + +.bx-align-justify:before { + content: '\e9a7'; +} + +.bx-align-left:before { + content: '\e9a8'; +} + +.bx-align-middle:before { + content: '\e9a9'; +} + +.bx-align-right:before { + content: '\e9aa'; +} + +.bx-analyse:before { + content: '\e9ab'; +} + +.bx-anchor:before { + content: '\e9ac'; +} + +.bx-angry:before { + content: '\e9ad'; +} + +.bx-aperture:before { + content: '\e9ae'; +} + +.bx-arch:before { + content: '\e9af'; +} + +.bx-archive:before { + content: '\e9b0'; +} + +.bx-archive-in:before { + content: '\e9b1'; +} + +.bx-archive-out:before { + content: '\e9b2'; +} + +.bx-area:before { + content: '\e9b3'; +} + +.bx-arrow-back:before { + content: '\e9b4'; +} + +.bx-arrow-from-bottom:before { + content: '\e9b5'; +} + +.bx-arrow-from-left:before { + content: '\e9b6'; +} + +.bx-arrow-from-right:before { + content: '\e9b7'; +} + +.bx-arrow-from-top:before { + content: '\e9b8'; +} + +.bx-arrow-to-bottom:before { + content: '\e9b9'; +} + +.bx-arrow-to-left:before { + content: '\e9ba'; +} + +.bx-arrow-to-right:before { + content: '\e9bb'; +} + +.bx-arrow-to-top:before { + content: '\e9bc'; +} + +.bx-at:before { + content: '\e9bd'; +} + +.bx-atom:before { + content: '\e9be'; +} + +.bx-award:before { + content: '\e9bf'; +} + +.bx-badge:before { + content: '\e9c0'; +} + +.bx-badge-check:before { + content: '\e9c1'; +} + +.bx-ball:before { + content: '\e9c2'; +} + +.bx-band-aid:before { + content: '\e9c3'; +} + +.bx-bar-chart:before { + content: '\e9c4'; +} + +.bx-bar-chart-alt:before { + content: '\e9c5'; +} + +.bx-bar-chart-alt-2:before { + content: '\e9c6'; +} + +.bx-bar-chart-square:before { + content: '\e9c7'; +} + +.bx-barcode:before { + content: '\e9c8'; +} + +.bx-barcode-reader:before { + content: '\e9c9'; +} + +.bx-baseball:before { + content: '\e9ca'; +} + +.bx-basket:before { + content: '\e9cb'; +} + +.bx-basketball:before { + content: '\e9cc'; +} + +.bx-bath:before { + content: '\e9cd'; +} + +.bx-battery:before { + content: '\e9ce'; +} + +.bx-bed:before { + content: '\e9cf'; +} + +.bx-been-here:before { + content: '\e9d0'; +} + +.bx-beer:before { + content: '\e9d1'; +} + +.bx-bell:before { + content: '\e9d2'; +} + +.bx-bell-minus:before { + content: '\e9d3'; +} + +.bx-bell-off:before { + content: '\e9d4'; +} + +.bx-bell-plus:before { + content: '\e9d5'; +} + +.bx-bible:before { + content: '\e9d6'; +} + +.bx-bitcoin:before { + content: '\e9d7'; +} + +.bx-blanket:before { + content: '\e9d8'; +} + +.bx-block:before { + content: '\e9d9'; +} + +.bx-bluetooth:before { + content: '\e9da'; +} + +.bx-body:before { + content: '\e9db'; +} + +.bx-bold:before { + content: '\e9dc'; +} + +.bx-bolt-circle:before { + content: '\e9dd'; +} + +.bx-bomb:before { + content: '\e9de'; +} + +.bx-bone:before { + content: '\e9df'; +} + +.bx-bong:before { + content: '\e9e0'; +} + +.bx-book:before { + content: '\e9e1'; +} + +.bx-book-add:before { + content: '\e9e2'; +} + +.bx-book-alt:before { + content: '\e9e3'; +} + +.bx-book-bookmark:before { + content: '\e9e4'; +} + +.bx-book-content:before { + content: '\e9e5'; +} + +.bx-book-heart:before { + content: '\e9e6'; +} + +.bx-bookmark:before { + content: '\e9e7'; +} + +.bx-bookmark-alt:before { + content: '\e9e8'; +} + +.bx-bookmark-alt-minus:before { + content: '\e9e9'; +} + +.bx-bookmark-alt-plus:before { + content: '\e9ea'; +} + +.bx-bookmark-heart:before { + content: '\e9eb'; +} + +.bx-bookmark-minus:before { + content: '\e9ec'; +} + +.bx-bookmark-plus:before { + content: '\e9ed'; +} + +.bx-bookmarks:before { + content: '\e9ee'; +} + +.bx-book-open:before { + content: '\e9ef'; +} + +.bx-book-reader:before { + content: '\e9f0'; +} + +.bx-border-all:before { + content: '\e9f1'; +} + +.bx-border-bottom:before { + content: '\e9f2'; +} + +.bx-border-inner:before { + content: '\e9f3'; +} + +.bx-border-left:before { + content: '\e9f4'; +} + +.bx-border-none:before { + content: '\e9f5'; +} + +.bx-border-outer:before { + content: '\e9f6'; +} + +.bx-border-radius:before { + content: '\e9f7'; +} + +.bx-border-right:before { + content: '\e9f8'; +} + +.bx-border-top:before { + content: '\e9f9'; +} + +.bx-bot:before { + content: '\e9fa'; +} + +.bx-bowling-ball:before { + content: '\e9fb'; +} + +.bx-box:before { + content: '\e9fc'; +} + +.bx-bracket:before { + content: '\e9fd'; +} + +.bx-braille:before { + content: '\e9fe'; +} + +.bx-brain:before { + content: '\e9ff'; +} + +.bx-briefcase:before { + content: '\ea00'; +} + +.bx-briefcase-alt:before { + content: '\ea01'; +} + +.bx-briefcase-alt-2:before { + content: '\ea02'; +} + +.bx-brightness:before { + content: '\ea03'; +} + +.bx-brightness-half:before { + content: '\ea04'; +} + +.bx-broadcast:before { + content: '\ea05'; +} + +.bx-brush:before { + content: '\ea06'; +} + +.bx-brush-alt:before { + content: '\ea07'; +} + +.bx-bug:before { + content: '\ea08'; +} + +.bx-bug-alt:before { + content: '\ea09'; +} + +.bx-building:before { + content: '\ea0a'; +} + +.bx-building-house:before { + content: '\ea0b'; +} + +.bx-buildings:before { + content: '\ea0c'; +} + +.bx-bulb:before { + content: '\ea0d'; +} + +.bx-bullseye:before { + content: '\ea0e'; +} + +.bx-buoy:before { + content: '\ea0f'; +} + +.bx-bus:before { + content: '\ea10'; +} + +.bx-bus-school:before { + content: '\ea11'; +} + +.bx-cabinet:before { + content: '\ea12'; +} + +.bx-cake:before { + content: '\ea13'; +} + +.bx-calculator:before { + content: '\ea14'; +} + +.bx-calendar:before { + content: '\ea15'; +} + +.bx-calendar-alt:before { + content: '\ea16'; +} + +.bx-calendar-check:before { + content: '\ea17'; +} + +.bx-calendar-edit:before { + content: '\ea18'; +} + +.bx-calendar-event:before { + content: '\ea19'; +} + +.bx-calendar-exclamation:before { + content: '\ea1a'; +} + +.bx-calendar-heart:before { + content: '\ea1b'; +} + +.bx-calendar-minus:before { + content: '\ea1c'; +} + +.bx-calendar-plus:before { + content: '\ea1d'; +} + +.bx-calendar-star:before { + content: '\ea1e'; +} + +.bx-calendar-week:before { + content: '\ea1f'; +} + +.bx-calendar-x:before { + content: '\ea20'; +} + +.bx-camera:before { + content: '\ea21'; +} + +.bx-camera-home:before { + content: '\ea22'; +} + +.bx-camera-movie:before { + content: '\ea23'; +} + +.bx-camera-off:before { + content: '\ea24'; +} + +.bx-capsule:before { + content: '\ea25'; +} + +.bx-captions:before { + content: '\ea26'; +} + +.bx-car:before { + content: '\ea27'; +} + +.bx-card:before { + content: '\ea28'; +} + +.bx-caret-down:before { + content: '\ea29'; +} + +.bx-caret-down-circle:before { + content: '\ea2a'; +} + +.bx-caret-down-square:before { + content: '\ea2b'; +} + +.bx-caret-left:before { + content: '\ea2c'; +} + +.bx-caret-left-circle:before { + content: '\ea2d'; +} + +.bx-caret-left-square:before { + content: '\ea2e'; +} + +.bx-caret-right:before { + content: '\ea2f'; +} + +.bx-caret-right-circle:before { + content: '\ea30'; +} + +.bx-caret-right-square:before { + content: '\ea31'; +} + +.bx-caret-up:before { + content: '\ea32'; +} + +.bx-caret-up-circle:before { + content: '\ea33'; +} + +.bx-caret-up-square:before { + content: '\ea34'; +} + +.bx-carousel:before { + content: '\ea35'; +} + +.bx-cart:before { + content: '\ea36'; +} + +.bx-cart-alt:before { + content: '\ea37'; +} + +.bx-cast:before { + content: '\ea38'; +} + +.bx-category:before { + content: '\ea39'; +} + +.bx-category-alt:before { + content: '\ea3a'; +} + +.bx-cctv:before { + content: '\ea3b'; +} + +.bx-certification:before { + content: '\ea3c'; +} + +.bx-chair:before { + content: '\ea3d'; +} + +.bx-chalkboard:before { + content: '\ea3e'; +} + +.bx-chart:before { + content: '\ea3f'; +} + +.bx-chat:before { + content: '\ea40'; +} + +.bx-check:before { + content: '\ea41'; +} + +.bx-checkbox:before { + content: '\ea42'; +} + +.bx-checkbox-checked:before { + content: '\ea43'; +} + +.bx-checkbox-minus:before { + content: '\ea44'; +} + +.bx-checkbox-square:before { + content: '\ea45'; +} + +.bx-check-circle:before { + content: '\ea46'; +} + +.bx-check-double:before { + content: '\ea47'; +} + +.bx-check-shield:before { + content: '\ea48'; +} + +.bx-check-square:before { + content: '\ea49'; +} + +.bx-chevron-down:before { + content: '\ea4a'; +} + +.bx-chevron-down-circle:before { + content: '\ea4b'; +} + +.bx-chevron-down-square:before { + content: '\ea4c'; +} + +.bx-chevron-left:before { + content: '\ea4d'; +} + +.bx-chevron-left-circle:before { + content: '\ea4e'; +} + +.bx-chevron-left-square:before { + content: '\ea4f'; +} + +.bx-chevron-right:before { + content: '\ea50'; +} + +.bx-chevron-right-circle:before { + content: '\ea51'; +} + +.bx-chevron-right-square:before { + content: '\ea52'; +} + +.bx-chevrons-down:before { + content: '\ea53'; +} + +.bx-chevrons-left:before { + content: '\ea54'; +} + +.bx-chevrons-right:before { + content: '\ea55'; +} + +.bx-chevrons-up:before { + content: '\ea56'; +} + +.bx-chevron-up:before { + content: '\ea57'; +} + +.bx-chevron-up-circle:before { + content: '\ea58'; +} + +.bx-chevron-up-square:before { + content: '\ea59'; +} + +.bx-chip:before { + content: '\ea5a'; +} + +.bx-church:before { + content: '\ea5b'; +} + +.bx-circle:before { + content: '\ea5c'; +} + +.bx-clinic:before { + content: '\ea5d'; +} + +.bx-clipboard:before { + content: '\ea5e'; +} + +.bx-closet:before { + content: '\ea5f'; +} + +.bx-cloud:before { + content: '\ea60'; +} + +.bx-cloud-download:before { + content: '\ea61'; +} + +.bx-cloud-drizzle:before { + content: '\ea62'; +} + +.bx-cloud-lightning:before { + content: '\ea63'; +} + +.bx-cloud-light-rain:before { + content: '\ea64'; +} + +.bx-cloud-rain:before { + content: '\ea65'; +} + +.bx-cloud-snow:before { + content: '\ea66'; +} + +.bx-cloud-upload:before { + content: '\ea67'; +} + +.bx-code:before { + content: '\ea68'; +} + +.bx-code-alt:before { + content: '\ea69'; +} + +.bx-code-block:before { + content: '\ea6a'; +} + +.bx-code-curly:before { + content: '\ea6b'; +} + +.bx-coffee:before { + content: '\ea6c'; +} + +.bx-coffee-togo:before { + content: '\ea6d'; +} + +.bx-cog:before { + content: '\ea6e'; +} + +.bx-coin:before { + content: '\ea6f'; +} + +.bx-coin-stack:before { + content: '\ea70'; +} + +.bx-collapse:before { + content: '\ea71'; +} + +.bx-collection:before { + content: '\ea72'; +} + +.bx-color-fill:before { + content: '\ea73'; +} + +.bx-columns:before { + content: '\ea74'; +} + +.bx-command:before { + content: '\ea75'; +} + +.bx-comment:before { + content: '\ea76'; +} + +.bx-comment-add:before { + content: '\ea77'; +} + +.bx-comment-check:before { + content: '\ea78'; +} + +.bx-comment-detail:before { + content: '\ea79'; +} + +.bx-comment-dots:before { + content: '\ea7a'; +} + +.bx-comment-edit:before { + content: '\ea7b'; +} + +.bx-comment-error:before { + content: '\ea7c'; +} + +.bx-comment-minus:before { + content: '\ea7d'; +} + +.bx-comment-x:before { + content: '\ea7e'; +} + +.bx-compass:before { + content: '\ea7f'; +} + +.bx-confused:before { + content: '\ea80'; +} + +.bx-conversation:before { + content: '\ea81'; +} + +.bx-cookie:before { + content: '\ea82'; +} + +.bx-cool:before { + content: '\ea83'; +} + +.bx-copy:before { + content: '\ea84'; +} + +.bx-copy-alt:before { + content: '\ea85'; +} + +.bx-copyright:before { + content: '\ea86'; +} + +.bx-credit-card:before { + content: '\ea87'; +} + +.bx-credit-card-alt:before { + content: '\ea88'; +} + +.bx-credit-card-front:before { + content: '\ea89'; +} + +.bx-crop:before { + content: '\ea8a'; +} + +.bx-crosshair:before { + content: '\ea8b'; +} + +.bx-crown:before { + content: '\ea8c'; +} + +.bx-cube:before { + content: '\ea8d'; +} + +.bx-cube-alt:before { + content: '\ea8e'; +} + +.bx-cuboid:before { + content: '\ea8f'; +} + +.bx-current-location:before { + content: '\ea90'; +} + +.bx-customize:before { + content: '\ea91'; +} + +.bx-cut:before { + content: '\ea92'; +} + +.bx-cycling:before { + content: '\ea93'; +} + +.bx-cylinder:before { + content: '\ea94'; +} + +.bx-data:before { + content: '\ea95'; +} + +.bx-desktop:before { + content: '\ea96'; +} + +.bx-detail:before { + content: '\ea97'; +} + +.bx-devices:before { + content: '\ea98'; +} + +.bx-dialpad:before { + content: '\ea99'; +} + +.bx-dialpad-alt:before { + content: '\ea9a'; +} + +.bx-diamond:before { + content: '\ea9b'; +} + +.bx-dice-1:before { + content: '\ea9c'; +} + +.bx-dice-2:before { + content: '\ea9d'; +} + +.bx-dice-3:before { + content: '\ea9e'; +} + +.bx-dice-4:before { + content: '\ea9f'; +} + +.bx-dice-5:before { + content: '\eaa0'; +} + +.bx-dice-6:before { + content: '\eaa1'; +} + +.bx-directions:before { + content: '\eaa2'; +} + +.bx-disc:before { + content: '\eaa3'; +} + +.bx-dish:before { + content: '\eaa4'; +} + +.bx-dislike:before { + content: '\eaa5'; +} + +.bx-dizzy:before { + content: '\eaa6'; +} + +.bx-dna:before { + content: '\eaa7'; +} + +.bx-dock-bottom:before { + content: '\eaa8'; +} + +.bx-dock-left:before { + content: '\eaa9'; +} + +.bx-dock-right:before { + content: '\eaaa'; +} + +.bx-dock-top:before { + content: '\eaab'; +} + +.bx-dollar:before { + content: '\eaac'; +} + +.bx-dollar-circle:before { + content: '\eaad'; +} + +.bx-donate-blood:before { + content: '\eaae'; +} + +.bx-donate-heart:before { + content: '\eaaf'; +} + +.bx-door-open:before { + content: '\eab0'; +} + +.bx-dots-horizontal:before { + content: '\eab1'; +} + +.bx-dots-horizontal-rounded:before { + content: '\eab2'; +} + +.bx-dots-vertical:before { + content: '\eab3'; +} + +.bx-dots-vertical-rounded:before { + content: '\eab4'; +} + +.bx-doughnut-chart:before { + content: '\eab5'; +} + +.bx-down-arrow:before { + content: '\eab6'; +} + +.bx-down-arrow-alt:before { + content: '\eab7'; +} + +.bx-down-arrow-circle:before { + content: '\eab8'; +} + +.bx-download:before { + content: '\eab9'; +} + +.bx-downvote:before { + content: '\eaba'; +} + +.bx-drink:before { + content: '\eabb'; +} + +.bx-droplet:before { + content: '\eabc'; +} + +.bx-dumbbell:before { + content: '\eabd'; +} + +.bx-duplicate:before { + content: '\eabe'; +} + +.bx-edit:before { + content: '\eabf'; +} + +.bx-edit-alt:before { + content: '\eac0'; +} + +.bx-envelope:before { + content: '\eac1'; +} + +.bx-envelope-open:before { + content: '\eac2'; +} + +.bx-equalizer:before { + content: '\eac3'; +} + +.bx-eraser:before { + content: '\eac4'; +} + +.bx-error:before { + content: '\eac5'; +} + +.bx-error-alt:before { + content: '\eac6'; +} + +.bx-error-circle:before { + content: '\eac7'; +} + +.bx-euro:before { + content: '\eac8'; +} + +.bx-exclude:before { + content: '\eac9'; +} + +.bx-exit:before { + content: '\eaca'; +} + +.bx-exit-fullscreen:before { + content: '\eacb'; +} + +.bx-expand:before { + content: '\eacc'; +} + +.bx-expand-alt:before { + content: '\eacd'; +} + +.bx-export:before { + content: '\eace'; +} + +.bx-extension:before { + content: '\eacf'; +} + +.bx-face:before { + content: '\ead0'; +} + +.bx-fast-forward:before { + content: '\ead1'; +} + +.bx-fast-forward-circle:before { + content: '\ead2'; +} + +.bx-female:before { + content: '\ead3'; +} + +.bx-female-sign:before { + content: '\ead4'; +} + +.bx-file:before { + content: '\ead5'; +} + +.bx-file-blank:before { + content: '\ead6'; +} + +.bx-file-find:before { + content: '\ead7'; +} + +.bx-film:before { + content: '\ead8'; +} + +.bx-filter:before { + content: '\ead9'; +} + +.bx-filter-alt:before { + content: '\eada'; +} + +.bx-fingerprint:before { + content: '\eadb'; +} + +.bx-first-aid:before { + content: '\eadc'; +} + +.bx-first-page:before { + content: '\eadd'; +} + +.bx-flag:before { + content: '\eade'; +} + +.bx-folder:before { + content: '\eadf'; +} + +.bx-folder-minus:before { + content: '\eae0'; +} + +.bx-folder-open:before { + content: '\eae1'; +} + +.bx-folder-plus:before { + content: '\eae2'; +} + +.bx-font:before { + content: '\eae3'; +} + +.bx-font-color:before { + content: '\eae4'; +} + +.bx-font-family:before { + content: '\eae5'; +} + +.bx-font-size:before { + content: '\eae6'; +} + +.bx-food-menu:before { + content: '\eae7'; +} + +.bx-food-tag:before { + content: '\eae8'; +} + +.bx-football:before { + content: '\eae9'; +} + +.bx-fridge:before { + content: '\eaea'; +} + +.bx-fullscreen:before { + content: '\eaeb'; +} + +.bx-game:before { + content: '\eaec'; +} + +.bx-gas-pump:before { + content: '\eaed'; +} + +.bx-ghost:before { + content: '\eaee'; +} + +.bx-gift:before { + content: '\eaef'; +} + +.bx-git-branch:before { + content: '\eaf0'; +} + +.bx-git-commit:before { + content: '\eaf1'; +} + +.bx-git-compare:before { + content: '\eaf2'; +} + +.bx-git-merge:before { + content: '\eaf3'; +} + +.bx-git-pull-request:before { + content: '\eaf4'; +} + +.bx-git-repo-forked:before { + content: '\eaf5'; +} + +.bx-glasses:before { + content: '\eaf6'; +} + +.bx-glasses-alt:before { + content: '\eaf7'; +} + +.bx-globe:before { + content: '\eaf8'; +} + +.bx-globe-alt:before { + content: '\eaf9'; +} + +.bx-grid:before { + content: '\eafa'; +} + +.bx-grid-alt:before { + content: '\eafb'; +} + +.bx-grid-horizontal:before { + content: '\eafc'; +} + +.bx-grid-small:before { + content: '\eafd'; +} + +.bx-grid-vertical:before { + content: '\eafe'; +} + +.bx-group:before { + content: '\eaff'; +} + +.bx-handicap:before { + content: '\eb00'; +} + +.bx-happy:before { + content: '\eb01'; +} + +.bx-happy-alt:before { + content: '\eb02'; +} + +.bx-happy-beaming:before { + content: '\eb03'; +} + +.bx-happy-heart-eyes:before { + content: '\eb04'; +} + +.bx-hash:before { + content: '\eb05'; +} + +.bx-hdd:before { + content: '\eb06'; +} + +.bx-heading:before { + content: '\eb07'; +} + +.bx-headphone:before { + content: '\eb08'; +} + +.bx-health:before { + content: '\eb09'; +} + +.bx-heart:before { + content: '\eb0a'; +} + +.bx-heart-circle:before { + content: '\eb0b'; +} + +.bx-heart-square:before { + content: '\eb0c'; +} + +.bx-help-circle:before { + content: '\eb0d'; +} + +.bx-hide:before { + content: '\eb0e'; +} + +.bx-highlight:before { + content: '\eb0f'; +} + +.bx-history:before { + content: '\eb10'; +} + +.bx-hive:before { + content: '\eb11'; +} + +.bx-home:before { + content: '\eb12'; +} + +.bx-home-alt:before { + content: '\eb13'; +} + +.bx-home-circle:before { + content: '\eb14'; +} + +.bx-home-heart:before { + content: '\eb15'; +} + +.bx-home-smile:before { + content: '\eb16'; +} + +.bx-horizontal-center:before { + content: '\eb17'; +} + +.bx-hotel:before { + content: '\eb18'; +} + +.bx-hourglass:before { + content: '\eb19'; +} + +.bx-id-card:before { + content: '\eb1a'; +} + +.bx-image:before { + content: '\eb1b'; +} + +.bx-image-add:before { + content: '\eb1c'; +} + +.bx-image-alt:before { + content: '\eb1d'; +} + +.bx-images:before { + content: '\eb1e'; +} + +.bx-import:before { + content: '\eb1f'; +} + +.bx-infinite:before { + content: '\eb20'; +} + +.bx-info-circle:before { + content: '\eb21'; +} + +.bx-info-square:before { + content: '\eb22'; +} + +.bx-intersect:before { + content: '\eb23'; +} + +.bx-italic:before { + content: '\eb24'; +} + +.bx-joystick:before { + content: '\eb25'; +} + +.bx-joystick-alt:before { + content: '\eb26'; +} + +.bx-joystick-button:before { + content: '\eb27'; +} + +.bx-key:before { + content: '\eb28'; +} + +.bx-label:before { + content: '\eb29'; +} + +.bx-landscape:before { + content: '\eb2a'; +} + +.bx-laptop:before { + content: '\eb2b'; +} + +.bx-last-page:before { + content: '\eb2c'; +} + +.bx-laugh:before { + content: '\eb2d'; +} + +.bx-layer:before { + content: '\eb2e'; +} + +.bx-layer-minus:before { + content: '\eb2f'; +} + +.bx-layer-plus:before { + content: '\eb30'; +} + +.bx-layout:before { + content: '\eb31'; +} + +.bx-left-arrow:before { + content: '\eb32'; +} + +.bx-left-arrow-alt:before { + content: '\eb33'; +} + +.bx-left-arrow-circle:before { + content: '\eb34'; +} + +.bx-left-down-arrow-circle:before { + content: '\eb35'; +} + +.bx-left-indent:before { + content: '\eb36'; +} + +.bx-left-top-arrow-circle:before { + content: '\eb37'; +} + +.bx-library:before { + content: '\eb38'; +} + +.bx-like:before { + content: '\eb39'; +} + +.bx-line-chart:before { + content: '\eb3a'; +} + +.bx-line-chart-down:before { + content: '\eb3b'; +} + +.bx-link:before { + content: '\eb3c'; +} + +.bx-link-alt:before { + content: '\eb3d'; +} + +.bx-link-external:before { + content: '\eb3e'; +} + +.bx-lira:before { + content: '\eb3f'; +} + +.bx-list-check:before { + content: '\eb40'; +} + +.bx-list-minus:before { + content: '\eb41'; +} + +.bx-list-ol:before { + content: '\eb42'; +} + +.bx-list-plus:before { + content: '\eb43'; +} + +.bx-list-ul:before { + content: '\eb44'; +} + +.bx-loader:before { + content: '\eb45'; +} + +.bx-loader-alt:before { + content: '\eb46'; +} + +.bx-loader-circle:before { + content: '\eb47'; +} + +.bx-location-plus:before { + content: '\eb48'; +} + +.bx-lock:before { + content: '\eb49'; +} + +.bx-lock-alt:before { + content: '\eb4a'; +} + +.bx-lock-open:before { + content: '\eb4b'; +} + +.bx-lock-open-alt:before { + content: '\eb4c'; +} + +.bx-log-in:before { + content: '\eb4d'; +} + +.bx-log-in-circle:before { + content: '\eb4e'; +} + +.bx-log-out:before { + content: '\eb4f'; +} + +.bx-log-out-circle:before { + content: '\eb50'; +} + +.bx-low-vision:before { + content: '\eb51'; +} + +.bx-magnet:before { + content: '\eb52'; +} + +.bx-mail-send:before { + content: '\eb53'; +} + +.bx-male:before { + content: '\eb54'; +} + +.bx-male-sign:before { + content: '\eb55'; +} + +.bx-map:before { + content: '\eb56'; +} + +.bx-map-alt:before { + content: '\eb57'; +} + +.bx-map-pin:before { + content: '\eb58'; +} + +.bx-mask:before { + content: '\eb59'; +} + +.bx-medal:before { + content: '\eb5a'; +} + +.bx-meh:before { + content: '\eb5b'; +} + +.bx-meh-alt:before { + content: '\eb5c'; +} + +.bx-meh-blank:before { + content: '\eb5d'; +} + +.bx-memory-card:before { + content: '\eb5e'; +} + +.bx-menu:before { + content: '\eb5f'; +} + +.bx-menu-alt-left:before { + content: '\ef5b'; +} + +.bx-menu-alt-right:before { + content: '\eb61'; +} + +.bx-merge:before { + content: '\eb62'; +} + +.bx-message:before { + content: '\eb63'; +} + +.bx-message-add:before { + content: '\eb64'; +} + +.bx-message-alt:before { + content: '\eb65'; +} + +.bx-message-alt-add:before { + content: '\eb66'; +} + +.bx-message-alt-check:before { + content: '\eb67'; +} + +.bx-message-alt-detail:before { + content: '\eb68'; +} + +.bx-message-alt-dots:before { + content: '\eb69'; +} + +.bx-message-alt-edit:before { + content: '\eb6a'; +} + +.bx-message-alt-error:before { + content: '\eb6b'; +} + +.bx-message-alt-minus:before { + content: '\eb6c'; +} + +.bx-message-alt-x:before { + content: '\eb6d'; +} + +.bx-message-check:before { + content: '\eb6e'; +} + +.bx-message-detail:before { + content: '\eb6f'; +} + +.bx-message-dots:before { + content: '\eb70'; +} + +.bx-message-edit:before { + content: '\eb71'; +} + +.bx-message-error:before { + content: '\eb72'; +} + +.bx-message-minus:before { + content: '\eb73'; +} + +.bx-message-rounded:before { + content: '\eb74'; +} + +.bx-message-rounded-add:before { + content: '\eb75'; +} + +.bx-message-rounded-check:before { + content: '\eb76'; +} + +.bx-message-rounded-detail:before { + content: '\eb77'; +} + +.bx-message-rounded-dots:before { + content: '\eb78'; +} + +.bx-message-rounded-edit:before { + content: '\ef5c'; +} + +.bx-message-rounded-error:before { + content: '\eb7a'; +} + +.bx-message-rounded-minus:before { + content: '\eb7b'; +} + +.bx-message-rounded-x:before { + content: '\eb7c'; +} + +.bx-message-square:before { + content: '\eb7d'; +} + +.bx-message-square-add:before { + content: '\eb7e'; +} + +.bx-message-square-check:before { + content: '\eb7f'; +} + +.bx-message-square-detail:before { + content: '\eb80'; +} + +.bx-message-square-dots:before { + content: '\eb81'; +} + +.bx-message-square-edit:before { + content: '\eb82'; +} + +.bx-message-square-error:before { + content: '\eb83'; +} + +.bx-message-square-minus:before { + content: '\eb84'; +} + +.bx-message-square-x:before { + content: '\eb85'; +} + +.bx-message-x:before { + content: '\eb86'; +} + +.bx-meteor:before { + content: '\eb87'; +} + +.bx-microchip:before { + content: '\eb88'; +} + +.bx-microphone:before { + content: '\eb89'; +} + +.bx-microphone-off:before { + content: '\eb8a'; +} + +.bx-minus:before { + content: '\eb8b'; +} + +.bx-minus-back:before { + content: '\eb8c'; +} + +.bx-minus-circle:before { + content: '\eb8d'; +} + +.bx-minus-front:before { + content: '\eb8e'; +} + +.bx-mobile:before { + content: '\eb8f'; +} + +.bx-mobile-alt:before { + content: '\eb90'; +} + +.bx-mobile-landscape:before { + content: '\eb91'; +} + +.bx-mobile-vibration:before { + content: '\ef5d'; +} + +.bx-money:before { + content: '\eb93'; +} + +.bx-moon:before { + content: '\eb94'; +} + +.bx-mouse:before { + content: '\eb95'; +} + +.bx-mouse-alt:before { + content: '\eb96'; +} + +.bx-move:before { + content: '\eb97'; +} + +.bx-move-horizontal:before { + content: '\eb98'; +} + +.bx-move-vertical:before { + content: '\eb99'; +} + +.bx-movie:before { + content: '\eb9a'; +} + +.bx-movie-play:before { + content: '\eb9b'; +} + +.bx-music:before { + content: '\eb9c'; +} + +.bx-navigation:before { + content: '\eb9d'; +} + +.bx-network-chart:before { + content: '\eb9e'; +} + +.bx-news:before { + content: '\eb9f'; +} + +.bx-no-entry:before { + content: '\eba0'; +} + +.bx-note:before { + content: '\eba1'; +} + +.bx-notepad:before { + content: '\eba2'; +} + +.bx-notification:before { + content: '\eba3'; +} + +.bx-notification-off:before { + content: '\eba4'; +} + +.bx-outline:before { + content: '\eba5'; +} + +.bx-package:before { + content: '\eba6'; +} + +.bx-paint:before { + content: '\eba7'; +} + +.bx-paint-roll:before { + content: '\eba8'; +} + +.bx-palette:before { + content: '\eba9'; +} + +.bx-paperclip:before { + content: '\ebaa'; +} + +.bx-paper-plane:before { + content: '\ef61'; +} + +.bx-paragraph:before { + content: '\ebac'; +} + +.bx-paste:before { + content: '\ebad'; +} + +.bx-pause:before { + content: '\ebae'; +} + +.bx-pause-circle:before { + content: '\ebaf'; +} + +.bx-pen:before { + content: '\ebb0'; +} + +.bx-pencil:before { + content: '\ebb1'; +} + +.bx-phone:before { + content: '\ebb2'; +} + +.bx-phone-call:before { + content: '\ebb3'; +} + +.bx-phone-incoming:before { + content: '\ebb4'; +} + +.bx-phone-off:before { + content: '\ebb5'; +} + +.bx-phone-outgoing:before { + content: '\ebb6'; +} + +.bx-photo-album:before { + content: '\ebb7'; +} + +.bx-pie-chart:before { + content: '\ebb8'; +} + +.bx-pie-chart-alt:before { + content: '\ebb9'; +} + +.bx-pie-chart-alt-2:before { + content: '\ebba'; +} + +.bx-pin:before { + content: '\ebbb'; +} + +.bx-planet:before { + content: '\ebbc'; +} + +.bx-play:before { + content: '\ebbd'; +} + +.bx-play-circle:before { + content: '\ebbe'; +} + +.bx-plug:before { + content: '\ebbf'; +} + +.bx-plus:before { + content: '\ebc0'; +} + +.bx-plus-circle:before { + content: '\ebc1'; +} + +.bx-plus-medical:before { + content: '\ebc2'; +} + +.bx-podcast:before { + content: '\ebc3'; +} + +.bx-pointer:before { + content: '\ef5e'; +} + +.bx-poll:before { + content: '\ebc5'; +} + +.bx-polygon:before { + content: '\ebc6'; +} + +.bx-pound:before { + content: '\ebc7'; +} + +.bx-power-off:before { + content: '\ebc8'; +} + +.bx-printer:before { + content: '\ebc9'; +} + +.bx-pulse:before { + content: '\ebca'; +} + +.bx-purchase-tag:before { + content: '\ebcb'; +} + +.bx-purchase-tag-alt:before { + content: '\ebcc'; +} + +.bx-pyramid:before { + content: '\ebcd'; +} + +.bx-qr:before { + content: '\ebce'; +} + +.bx-qr-scan:before { + content: '\ebcf'; +} + +.bx-question-mark:before { + content: '\ebd0'; +} + +.bx-radar:before { + content: '\ebd1'; +} + +.bx-radio:before { + content: '\ebd2'; +} + +.bx-radio-circle:before { + content: '\ebd3'; +} + +.bx-radio-circle-marked:before { + content: '\ebd4'; +} + +.bx-receipt:before { + content: '\ebd5'; +} + +.bx-rectangle:before { + content: '\ebd6'; +} + +.bx-recycle:before { + content: '\ebd7'; +} + +.bx-redo:before { + content: '\ebd8'; +} + +.bx-refresh:before { + content: '\ebd9'; +} + +.bx-registered:before { + content: '\ebda'; +} + +.bx-rename:before { + content: '\ebdb'; +} + +.bx-repeat:before { + content: '\ebdc'; +} + +.bx-reply:before { + content: '\ef5f'; +} + +.bx-reply-all:before { + content: '\ebde'; +} + +.bx-repost:before { + content: '\ebdf'; +} + +.bx-reset:before { + content: '\ebe0'; +} + +.bx-restaurant:before { + content: '\ebe1'; +} + +.bx-revision:before { + content: '\ebe2'; +} + +.bx-rewind:before { + content: '\ebe3'; +} + +.bx-rewind-circle:before { + content: '\ebe4'; +} + +.bx-right-arrow:before { + content: '\ebe5'; +} + +.bx-right-arrow-alt:before { + content: '\ebe6'; +} + +.bx-right-arrow-circle:before { + content: '\ebe7'; +} + +.bx-right-down-arrow-circle:before { + content: '\ebe8'; +} + +.bx-right-indent:before { + content: '\ebe9'; +} + +.bx-right-top-arrow-circle:before { + content: '\ebea'; +} + +.bx-rocket:before { + content: '\ebeb'; +} + +.bx-rotate-left:before { + content: '\ebec'; +} + +.bx-rotate-right:before { + content: '\ebed'; +} + +.bx-rss:before { + content: '\ebee'; +} + +.bx-ruble:before { + content: '\ebef'; +} + +.bx-ruler:before { + content: '\ebf0'; +} + +.bx-run:before { + content: '\ebf1'; +} + +.bx-rupee:before { + content: '\ebf2'; +} + +.bx-sad:before { + content: '\ebf3'; +} + +.bx-save:before { + content: '\ebf4'; +} + +.bx-scan:before { + content: '\ebf5'; +} + +.bx-screenshot:before { + content: '\ef60'; +} + +.bx-search:before { + content: '\ebf7'; +} + +.bx-search-alt:before { + content: '\ebf8'; +} + +.bx-search-alt-2:before { + content: '\ebf9'; +} + +.bx-selection:before { + content: '\ebfa'; +} + +.bx-select-multiple:before { + content: '\ebfb'; +} + +.bx-send:before { + content: '\ebfc'; +} + +.bx-server:before { + content: '\ebfd'; +} + +.bx-shape-circle:before { + content: '\ebfe'; +} + +.bx-shape-polygon:before { + content: '\ebff'; +} + +.bx-shape-square:before { + content: '\ec00'; +} + +.bx-shape-triangle:before { + content: '\ec01'; +} + +.bx-share:before { + content: '\ec02'; +} + +.bx-share-alt:before { + content: '\ec03'; +} + +.bx-shekel:before { + content: '\ec04'; +} + +.bx-shield:before { + content: '\ec05'; +} + +.bx-shield-alt:before { + content: '\ec06'; +} + +.bx-shield-alt-2:before { + content: '\ec07'; +} + +.bx-shield-quarter:before { + content: '\ec08'; +} + +.bx-shield-x:before { + content: '\ec09'; +} + +.bx-shocked:before { + content: '\ec0a'; +} + +.bx-shopping-bag:before { + content: '\ec0b'; +} + +.bx-show:before { + content: '\ec0c'; +} + +.bx-show-alt:before { + content: '\ec0d'; +} + +.bx-shuffle:before { + content: '\ec0e'; +} + +.bx-sidebar:before { + content: '\ec0f'; +} + +.bx-sitemap:before { + content: '\ec10'; +} + +.bx-skip-next:before { + content: '\ec11'; +} + +.bx-skip-next-circle:before { + content: '\ec12'; +} + +.bx-skip-previous:before { + content: '\ec13'; +} + +.bx-skip-previous-circle:before { + content: '\ec14'; +} + +.bx-sleepy:before { + content: '\ec15'; +} + +.bx-slider:before { + content: '\ec16'; +} + +.bx-slider-alt:before { + content: '\ec17'; +} + +.bx-slideshow:before { + content: '\ec18'; +} + +.bx-smile:before { + content: '\ec19'; +} + +.bx-sort:before { + content: '\ec1a'; +} + +.bx-sort-alt-2:before { + content: '\ec1b'; +} + +.bx-sort-a-z:before { + content: '\ec1c'; +} + +.bx-sort-down:before { + content: '\ec1d'; +} + +.bx-sort-up:before { + content: '\ec1e'; +} + +.bx-sort-z-a:before { + content: '\ec1f'; +} + +.bx-spa:before { + content: '\ec20'; +} + +.bx-space-bar:before { + content: '\ec21'; +} + +.bx-speaker:before { + content: '\ec22'; +} + +.bx-spray-can:before { + content: '\ec23'; +} + +.bx-spreadsheet:before { + content: '\ec24'; +} + +.bx-square:before { + content: '\ec25'; +} + +.bx-square-rounded:before { + content: '\ec26'; +} + +.bx-star:before { + content: '\ec27'; +} + +.bx-station:before { + content: '\ec28'; +} + +.bx-stats:before { + content: '\ec29'; +} + +.bx-sticker:before { + content: '\ec2a'; +} + +.bx-stop:before { + content: '\ec2b'; +} + +.bx-stop-circle:before { + content: '\ec2c'; +} + +.bx-stopwatch:before { + content: '\ec2d'; +} + +.bx-store:before { + content: '\ec2e'; +} + +.bx-store-alt:before { + content: '\ec2f'; +} + +.bx-street-view:before { + content: '\ec30'; +} + +.bx-strikethrough:before { + content: '\ec31'; +} + +.bx-subdirectory-left:before { + content: '\ec32'; +} + +.bx-subdirectory-right:before { + content: '\ec33'; +} + +.bx-sun:before { + content: '\ec34'; +} + +.bx-support:before { + content: '\ec35'; +} + +.bx-swim:before { + content: '\ec36'; +} + +.bx-sync:before { + content: '\ec37'; +} + +.bx-tab:before { + content: '\ec38'; +} + +.bx-table:before { + content: '\ec39'; +} + +.bx-tachometer:before { + content: '\ec3a'; +} + +.bx-tag:before { + content: '\ec3b'; +} + +.bx-tag-alt:before { + content: '\ec3c'; +} + +.bx-target-lock:before { + content: '\ec3d'; +} + +.bx-task:before { + content: '\ec3e'; +} + +.bx-task-x:before { + content: '\ec3f'; +} + +.bx-taxi:before { + content: '\ec40'; +} + +.bx-tennis-ball:before { + content: '\ec41'; +} + +.bx-terminal:before { + content: '\ec42'; +} + +.bx-test-tube:before { + content: '\ec43'; +} + +.bx-text:before { + content: '\ec44'; +} + +.bx-time:before { + content: '\ec45'; +} + +.bx-time-five:before { + content: '\ec46'; +} + +.bx-timer:before { + content: '\ec47'; +} + +.bx-tired:before { + content: '\ec48'; +} + +.bx-toggle-left:before { + content: '\ec49'; +} + +.bx-toggle-right:before { + content: '\ec4a'; +} + +.bx-tone:before { + content: '\ec4b'; +} + +.bx-traffic-cone:before { + content: '\ec4c'; +} + +.bx-train:before { + content: '\ec4d'; +} + +.bx-transfer:before { + content: '\ec4e'; +} + +.bx-transfer-alt:before { + content: '\ec4f'; +} + +.bx-trash:before { + content: '\ec50'; +} + +.bx-trash-alt:before { + content: '\ec51'; +} + +.bx-trending-down:before { + content: '\ec52'; +} + +.bx-trending-up:before { + content: '\ec53'; +} + +.bx-trim:before { + content: '\ec54'; +} + +.bx-trip:before { + content: '\ec55'; +} + +.bx-trophy:before { + content: '\ec56'; +} + +.bx-tv:before { + content: '\ec57'; +} + +.bx-underline:before { + content: '\ec58'; +} + +.bx-undo:before { + content: '\ec59'; +} + +.bx-unite:before { + content: '\ec5a'; +} + +.bx-unlink:before { + content: '\ec5b'; +} + +.bx-up-arrow:before { + content: '\ec5c'; +} + +.bx-up-arrow-alt:before { + content: '\ec5d'; +} + +.bx-up-arrow-circle:before { + content: '\ec5e'; +} + +.bx-upload:before { + content: '\ec5f'; +} + +.bx-upside-down:before { + content: '\ec60'; +} + +.bx-upvote:before { + content: '\ec61'; +} + +.bx-usb:before { + content: '\ec62'; +} + +.bx-user:before { + content: '\ec63'; +} + +.bx-user-check:before { + content: '\ec64'; +} + +.bx-user-circle:before { + content: '\ec65'; +} + +.bx-user-minus:before { + content: '\ec66'; +} + +.bx-user-pin:before { + content: '\ec67'; +} + +.bx-user-plus:before { + content: '\ec68'; +} + +.bx-user-voice:before { + content: '\ec69'; +} + +.bx-user-x:before { + content: '\ec6a'; +} + +.bx-vector:before { + content: '\ec6b'; +} + +.bx-vertical-center:before { + content: '\ec6c'; +} + +.bx-vial:before { + content: '\ec6d'; +} + +.bx-video:before { + content: '\ec6e'; +} + +.bx-video-off:before { + content: '\ec6f'; +} + +.bx-video-plus:before { + content: '\ec70'; +} + +.bx-video-recording:before { + content: '\ec71'; +} + +.bx-voicemail:before { + content: '\ec72'; +} + +.bx-volume:before { + content: '\ec73'; +} + +.bx-volume-full:before { + content: '\ec74'; +} + +.bx-volume-low:before { + content: '\ec75'; +} + +.bx-volume-mute:before { + content: '\ec76'; +} + +.bx-walk:before { + content: '\ec77'; +} + +.bx-wallet:before { + content: '\ec78'; +} + +.bx-wallet-alt:before { + content: '\ec79'; +} + +.bx-water:before { + content: '\ec7a'; +} + +.bx-webcam:before { + content: '\ec7b'; +} + +.bx-wifi:before { + content: '\ec7c'; +} + +.bx-wifi-0:before { + content: '\ec7d'; +} + +.bx-wifi-1:before { + content: '\ec7e'; +} + +.bx-wifi-2:before { + content: '\ec7f'; +} + +.bx-wifi-off:before { + content: '\ec80'; +} + +.bx-wind:before { + content: '\ec81'; +} + +.bx-window:before { + content: '\ec82'; +} + +.bx-window-alt:before { + content: '\ec83'; +} + +.bx-window-close:before { + content: '\ec84'; +} + +.bx-window-open:before { + content: '\ec85'; +} + +.bx-windows:before { + content: '\ec86'; +} + +.bx-wine:before { + content: '\ec87'; +} + +.bx-wink-smile:before { + content: '\ec88'; +} + +.bx-wink-tongue:before { + content: '\ec89'; +} + +.bx-won:before { + content: '\ec8a'; +} + +.bx-world:before { + content: '\ec8b'; +} + +.bx-wrench:before { + content: '\ec8c'; +} + +.bx-x:before { + content: '\ec8d'; +} + +.bx-x-circle:before { + content: '\ec8e'; +} + +.bx-yen:before { + content: '\ec8f'; +} + +.bx-zoom-in:before { + content: '\ec90'; +} + +.bx-zoom-out:before { + content: '\ec91'; +} + +.bxs-party:before { + content: '\ec92'; +} + +.bxs-hot:before { + content: '\ec93'; +} + +.bxs-droplet:before { + content: '\ec94'; +} + +.bxs-cat:before { + content: '\ec95'; +} + +.bxs-dog:before { + content: '\ec96'; +} + +.bxs-injection:before { + content: '\ec97'; +} + +.bxs-leaf:before { + content: '\ec98'; +} + +.bxs-add-to-queue:before { + content: '\ec99'; +} + +.bxs-adjust:before { + content: '\ec9a'; +} + +.bxs-adjust-alt:before { + content: '\ec9b'; +} + +.bxs-alarm:before { + content: '\ec9c'; +} + +.bxs-alarm-add:before { + content: '\ec9d'; +} + +.bxs-alarm-exclamation:before { + content: '\ec9e'; +} + +.bxs-alarm-off:before { + content: '\ec9f'; +} + +.bxs-alarm-snooze:before { + content: '\eca0'; +} + +.bxs-album:before { + content: '\eca1'; +} + +.bxs-ambulance:before { + content: '\eca2'; +} + +.bxs-analyse:before { + content: '\eca3'; +} + +.bxs-angry:before { + content: '\eca4'; +} + +.bxs-arch:before { + content: '\eca5'; +} + +.bxs-archive:before { + content: '\eca6'; +} + +.bxs-archive-in:before { + content: '\eca7'; +} + +.bxs-archive-out:before { + content: '\eca8'; +} + +.bxs-area:before { + content: '\eca9'; +} + +.bxs-arrow-from-bottom:before { + content: '\ecaa'; +} + +.bxs-arrow-from-left:before { + content: '\ecab'; +} + +.bxs-arrow-from-right:before { + content: '\ecac'; +} + +.bxs-arrow-from-top:before { + content: '\ecad'; +} + +.bxs-arrow-to-bottom:before { + content: '\ecae'; +} + +.bxs-arrow-to-left:before { + content: '\ecaf'; +} + +.bxs-arrow-to-right:before { + content: '\ecb0'; +} + +.bxs-arrow-to-top:before { + content: '\ecb1'; +} + +.bxs-award:before { + content: '\ecb2'; +} + +.bxs-baby-carriage:before { + content: '\ecb3'; +} + +.bxs-backpack:before { + content: '\ecb4'; +} + +.bxs-badge:before { + content: '\ecb5'; +} + +.bxs-badge-check:before { + content: '\ecb6'; +} + +.bxs-badge-dollar:before { + content: '\ecb7'; +} + +.bxs-ball:before { + content: '\ecb8'; +} + +.bxs-band-aid:before { + content: '\ecb9'; +} + +.bxs-bank:before { + content: '\ecba'; +} + +.bxs-bar-chart-alt-2:before { + content: '\ecbb'; +} + +.bxs-bar-chart-square:before { + content: '\ecbc'; +} + +.bxs-barcode:before { + content: '\ecbd'; +} + +.bxs-baseball:before { + content: '\ecbe'; +} + +.bxs-basket:before { + content: '\ecbf'; +} + +.bxs-basketball:before { + content: '\ecc0'; +} + +.bxs-bath:before { + content: '\ecc1'; +} + +.bxs-battery:before { + content: '\ecc2'; +} + +.bxs-battery-charging:before { + content: '\ecc3'; +} + +.bxs-battery-full:before { + content: '\ecc4'; +} + +.bxs-battery-low:before { + content: '\ecc5'; +} + +.bxs-bed:before { + content: '\ecc6'; +} + +.bxs-been-here:before { + content: '\ecc7'; +} + +.bxs-beer:before { + content: '\ecc8'; +} + +.bxs-bell:before { + content: '\ecc9'; +} + +.bxs-bell-minus:before { + content: '\ecca'; +} + +.bxs-bell-off:before { + content: '\eccb'; +} + +.bxs-bell-plus:before { + content: '\eccc'; +} + +.bxs-bell-ring:before { + content: '\eccd'; +} + +.bxs-bible:before { + content: '\ecce'; +} + +.bxs-binoculars:before { + content: '\eccf'; +} + +.bxs-blanket:before { + content: '\ecd0'; +} + +.bxs-bolt:before { + content: '\ecd1'; +} + +.bxs-bolt-circle:before { + content: '\ecd2'; +} + +.bxs-bomb:before { + content: '\ecd3'; +} + +.bxs-bone:before { + content: '\ecd4'; +} + +.bxs-bong:before { + content: '\ecd5'; +} + +.bxs-book:before { + content: '\ecd6'; +} + +.bxs-book-add:before { + content: '\ecd7'; +} + +.bxs-book-alt:before { + content: '\ecd8'; +} + +.bxs-book-bookmark:before { + content: '\ecd9'; +} + +.bxs-book-content:before { + content: '\ecda'; +} + +.bxs-book-heart:before { + content: '\ecdb'; +} + +.bxs-bookmark:before { + content: '\ecdc'; +} + +.bxs-bookmark-alt:before { + content: '\ecdd'; +} + +.bxs-bookmark-alt-minus:before { + content: '\ecde'; +} + +.bxs-bookmark-alt-plus:before { + content: '\ecdf'; +} + +.bxs-bookmark-heart:before { + content: '\ece0'; +} + +.bxs-bookmark-minus:before { + content: '\ece1'; +} + +.bxs-bookmark-plus:before { + content: '\ece2'; +} + +.bxs-bookmarks:before { + content: '\ece3'; +} + +.bxs-bookmark-star:before { + content: '\ece4'; +} + +.bxs-book-open:before { + content: '\ece5'; +} + +.bxs-book-reader:before { + content: '\ece6'; +} + +.bxs-bot:before { + content: '\ece7'; +} + +.bxs-bowling-ball:before { + content: '\ece8'; +} + +.bxs-box:before { + content: '\ece9'; +} + +.bxs-brain:before { + content: '\ecea'; +} + +.bxs-briefcase:before { + content: '\eceb'; +} + +.bxs-briefcase-alt:before { + content: '\ecec'; +} + +.bxs-briefcase-alt-2:before { + content: '\eced'; +} + +.bxs-brightness:before { + content: '\ecee'; +} + +.bxs-brightness-half:before { + content: '\ecef'; +} + +.bxs-brush:before { + content: '\ecf0'; +} + +.bxs-brush-alt:before { + content: '\ecf1'; +} + +.bxs-bug:before { + content: '\ecf2'; +} + +.bxs-bug-alt:before { + content: '\ecf3'; +} + +.bxs-building:before { + content: '\ecf4'; +} + +.bxs-building-house:before { + content: '\ecf5'; +} + +.bxs-buildings:before { + content: '\ecf6'; +} + +.bxs-bulb:before { + content: '\ecf7'; +} + +.bxs-bullseye:before { + content: '\ecf8'; +} + +.bxs-buoy:before { + content: '\ecf9'; +} + +.bxs-bus:before { + content: '\ecfa'; +} + +.bxs-business:before { + content: '\ecfb'; +} + +.bxs-bus-school:before { + content: '\ecfc'; +} + +.bxs-cabinet:before { + content: '\ecfd'; +} + +.bxs-cake:before { + content: '\ecfe'; +} + +.bxs-calculator:before { + content: '\ecff'; +} + +.bxs-calendar:before { + content: '\ed00'; +} + +.bxs-calendar-alt:before { + content: '\ed01'; +} + +.bxs-calendar-check:before { + content: '\ed02'; +} + +.bxs-calendar-edit:before { + content: '\ed03'; +} + +.bxs-calendar-event:before { + content: '\ed04'; +} + +.bxs-calendar-exclamation:before { + content: '\ed05'; +} + +.bxs-calendar-heart:before { + content: '\ed06'; +} + +.bxs-calendar-minus:before { + content: '\ed07'; +} + +.bxs-calendar-plus:before { + content: '\ed08'; +} + +.bxs-calendar-star:before { + content: '\ed09'; +} + +.bxs-calendar-week:before { + content: '\ed0a'; +} + +.bxs-calendar-x:before { + content: '\ed0b'; +} + +.bxs-camera:before { + content: '\ed0c'; +} + +.bxs-camera-home:before { + content: '\ed0d'; +} + +.bxs-camera-movie:before { + content: '\ed0e'; +} + +.bxs-camera-off:before { + content: '\ed0f'; +} + +.bxs-camera-plus:before { + content: '\ed10'; +} + +.bxs-capsule:before { + content: '\ed11'; +} + +.bxs-captions:before { + content: '\ed12'; +} + +.bxs-car:before { + content: '\ed13'; +} + +.bxs-car-battery:before { + content: '\ed14'; +} + +.bxs-car-crash:before { + content: '\ed15'; +} + +.bxs-card:before { + content: '\ed16'; +} + +.bxs-caret-down-circle:before { + content: '\ed17'; +} + +.bxs-caret-down-square:before { + content: '\ed18'; +} + +.bxs-caret-left-circle:before { + content: '\ed19'; +} + +.bxs-caret-left-square:before { + content: '\ed1a'; +} + +.bxs-caret-right-circle:before { + content: '\ed1b'; +} + +.bxs-caret-right-square:before { + content: '\ed1c'; +} + +.bxs-caret-up-circle:before { + content: '\ed1d'; +} + +.bxs-caret-up-square:before { + content: '\ed1e'; +} + +.bxs-car-garage:before { + content: '\ed1f'; +} + +.bxs-car-mechanic:before { + content: '\ed20'; +} + +.bxs-carousel:before { + content: '\ed21'; +} + +.bxs-cart:before { + content: '\ed22'; +} + +.bxs-cart-add:before { + content: '\ed23'; +} + +.bxs-cart-alt:before { + content: '\ed24'; +} + +.bxs-cart-download:before { + content: '\ed25'; +} + +.bxs-car-wash:before { + content: '\ed26'; +} + +.bxs-category:before { + content: '\ed27'; +} + +.bxs-category-alt:before { + content: '\ed28'; +} + +.bxs-cctv:before { + content: '\ed29'; +} + +.bxs-certification:before { + content: '\ed2a'; +} + +.bxs-chalkboard:before { + content: '\ed2b'; +} + +.bxs-chart:before { + content: '\ed2c'; +} + +.bxs-chat:before { + content: '\ed2d'; +} + +.bxs-checkbox:before { + content: '\ed2e'; +} + +.bxs-checkbox-checked:before { + content: '\ed2f'; +} + +.bxs-checkbox-minus:before { + content: '\ed30'; +} + +.bxs-check-circle:before { + content: '\ed31'; +} + +.bxs-check-shield:before { + content: '\ed32'; +} + +.bxs-check-square:before { + content: '\ed33'; +} + +.bxs-chess:before { + content: '\ed34'; +} + +.bxs-chevron-down:before { + content: '\ed35'; +} + +.bxs-chevron-down-circle:before { + content: '\ed36'; +} + +.bxs-chevron-down-square:before { + content: '\ed37'; +} + +.bxs-chevron-left:before { + content: '\ed38'; +} + +.bxs-chevron-left-circle:before { + content: '\ed39'; +} + +.bxs-chevron-left-square:before { + content: '\ed3a'; +} + +.bxs-chevron-right:before { + content: '\ed3b'; +} + +.bxs-chevron-right-circle:before { + content: '\ed3c'; +} + +.bxs-chevron-right-square:before { + content: '\ed3d'; +} + +.bxs-chevrons-down:before { + content: '\ed3e'; +} + +.bxs-chevrons-left:before { + content: '\ed3f'; +} + +.bxs-chevrons-right:before { + content: '\ed40'; +} + +.bxs-chevrons-up:before { + content: '\ed41'; +} + +.bxs-chevron-up:before { + content: '\ed42'; +} + +.bxs-chevron-up-circle:before { + content: '\ed43'; +} + +.bxs-chevron-up-square:before { + content: '\ed44'; +} + +.bxs-chip:before { + content: '\ed45'; +} + +.bxs-church:before { + content: '\ed46'; +} + +.bxs-circle:before { + content: '\ed47'; +} + +.bxs-city:before { + content: '\ed48'; +} + +.bxs-clinic:before { + content: '\ed49'; +} + +.bxs-cloud:before { + content: '\ed4a'; +} + +.bxs-cloud-download:before { + content: '\ed4b'; +} + +.bxs-cloud-lightning:before { + content: '\ed4c'; +} + +.bxs-cloud-rain:before { + content: '\ed4d'; +} + +.bxs-cloud-upload:before { + content: '\ed4e'; +} + +.bxs-coffee:before { + content: '\ed4f'; +} + +.bxs-coffee-alt:before { + content: '\ed50'; +} + +.bxs-coffee-togo:before { + content: '\ed51'; +} + +.bxs-cog:before { + content: '\ed52'; +} + +.bxs-coin:before { + content: '\ed53'; +} + +.bxs-coin-stack:before { + content: '\ed54'; +} + +.bxs-collection:before { + content: '\ed55'; +} + +.bxs-color-fill:before { + content: '\ed56'; +} + +.bxs-comment:before { + content: '\ed57'; +} + +.bxs-comment-add:before { + content: '\ed58'; +} + +.bxs-comment-check:before { + content: '\ed59'; +} + +.bxs-comment-detail:before { + content: '\ed5a'; +} + +.bxs-comment-dots:before { + content: '\ed5b'; +} + +.bxs-comment-edit:before { + content: '\ed5c'; +} + +.bxs-comment-error:before { + content: '\ed5d'; +} + +.bxs-comment-minus:before { + content: '\ed5e'; +} + +.bxs-comment-x:before { + content: '\ed5f'; +} + +.bxs-compass:before { + content: '\ed60'; +} + +.bxs-component:before { + content: '\ed61'; +} + +.bxs-confused:before { + content: '\ed62'; +} + +.bxs-contact:before { + content: '\ed63'; +} + +.bxs-conversation:before { + content: '\ed64'; +} + +.bxs-cookie:before { + content: '\ed65'; +} + +.bxs-cool:before { + content: '\ed66'; +} + +.bxs-copy:before { + content: '\ed67'; +} + +.bxs-copy-alt:before { + content: '\ed68'; +} + +.bxs-copyright:before { + content: '\ed69'; +} + +.bxs-coupon:before { + content: '\ed6a'; +} + +.bxs-credit-card:before { + content: '\ed6b'; +} + +.bxs-credit-card-alt:before { + content: '\ed6c'; +} + +.bxs-credit-card-front:before { + content: '\ed6d'; +} + +.bxs-crop:before { + content: '\ed6e'; +} + +.bxs-crown:before { + content: '\ed6f'; +} + +.bxs-cube:before { + content: '\ed70'; +} + +.bxs-cube-alt:before { + content: '\ed71'; +} + +.bxs-cuboid:before { + content: '\ed72'; +} + +.bxs-customize:before { + content: '\ed73'; +} + +.bxs-cylinder:before { + content: '\ed74'; +} + +.bxs-dashboard:before { + content: '\ed75'; +} + +.bxs-data:before { + content: '\ed76'; +} + +.bxs-detail:before { + content: '\ed77'; +} + +.bxs-devices:before { + content: '\ed78'; +} + +.bxs-diamond:before { + content: '\ed79'; +} + +.bxs-dice-1:before { + content: '\ed7a'; +} + +.bxs-dice-2:before { + content: '\ed7b'; +} + +.bxs-dice-3:before { + content: '\ed7c'; +} + +.bxs-dice-4:before { + content: '\ed7d'; +} + +.bxs-dice-5:before { + content: '\ed7e'; +} + +.bxs-dice-6:before { + content: '\ed7f'; +} + +.bxs-direction-left:before { + content: '\ed80'; +} + +.bxs-direction-right:before { + content: '\ed81'; +} + +.bxs-directions:before { + content: '\ed82'; +} + +.bxs-disc:before { + content: '\ed83'; +} + +.bxs-discount:before { + content: '\ed84'; +} + +.bxs-dish:before { + content: '\ed85'; +} + +.bxs-dislike:before { + content: '\ed86'; +} + +.bxs-dizzy:before { + content: '\ed87'; +} + +.bxs-dock-bottom:before { + content: '\ed88'; +} + +.bxs-dock-left:before { + content: '\ed89'; +} + +.bxs-dock-right:before { + content: '\ed8a'; +} + +.bxs-dock-top:before { + content: '\ed8b'; +} + +.bxs-dollar-circle:before { + content: '\ed8c'; +} + +.bxs-donate-blood:before { + content: '\ed8d'; +} + +.bxs-donate-heart:before { + content: '\ed8e'; +} + +.bxs-door-open:before { + content: '\ed8f'; +} + +.bxs-doughnut-chart:before { + content: '\ed90'; +} + +.bxs-down-arrow:before { + content: '\ed91'; +} + +.bxs-down-arrow-alt:before { + content: '\ed92'; +} + +.bxs-down-arrow-circle:before { + content: '\ed93'; +} + +.bxs-down-arrow-square:before { + content: '\ed94'; +} + +.bxs-download:before { + content: '\ed95'; +} + +.bxs-downvote:before { + content: '\ed96'; +} + +.bxs-drink:before { + content: '\ed97'; +} + +.bxs-droplet-half:before { + content: '\ed98'; +} + +.bxs-dryer:before { + content: '\ed99'; +} + +.bxs-duplicate:before { + content: '\ed9a'; +} + +.bxs-edit:before { + content: '\ed9b'; +} + +.bxs-edit-alt:before { + content: '\ed9c'; +} + +.bxs-edit-location:before { + content: '\ed9d'; +} + +.bxs-eject:before { + content: '\ed9e'; +} + +.bxs-envelope:before { + content: '\ed9f'; +} + +.bxs-envelope-open:before { + content: '\eda0'; +} + +.bxs-eraser:before { + content: '\eda1'; +} + +.bxs-error:before { + content: '\eda2'; +} + +.bxs-error-alt:before { + content: '\eda3'; +} + +.bxs-error-circle:before { + content: '\eda4'; +} + +.bxs-ev-station:before { + content: '\eda5'; +} + +.bxs-exit:before { + content: '\eda6'; +} + +.bxs-extension:before { + content: '\eda7'; +} + +.bxs-eyedropper:before { + content: '\eda8'; +} + +.bxs-face:before { + content: '\eda9'; +} + +.bxs-face-mask:before { + content: '\edaa'; +} + +.bxs-factory:before { + content: '\edab'; +} + +.bxs-fast-forward-circle:before { + content: '\edac'; +} + +.bxs-file:before { + content: '\edad'; +} + +.bxs-file-archive:before { + content: '\edae'; +} + +.bxs-file-blank:before { + content: '\edaf'; +} + +.bxs-file-css:before { + content: '\edb0'; +} + +.bxs-file-doc:before { + content: '\edb1'; +} + +.bxs-file-export:before { + content: '\edb2'; +} + +.bxs-file-find:before { + content: '\edb3'; +} + +.bxs-file-gif:before { + content: '\edb4'; +} + +.bxs-file-html:before { + content: '\edb5'; +} + +.bxs-file-image:before { + content: '\edb6'; +} + +.bxs-file-import:before { + content: '\edb7'; +} + +.bxs-file-jpg:before { + content: '\edb8'; +} + +.bxs-file-js:before { + content: '\edb9'; +} + +.bxs-file-json:before { + content: '\edba'; +} + +.bxs-file-md:before { + content: '\edbb'; +} + +.bxs-file-pdf:before { + content: '\edbc'; +} + +.bxs-file-plus:before { + content: '\edbd'; +} + +.bxs-file-png:before { + content: '\edbe'; +} + +.bxs-file-txt:before { + content: '\edbf'; +} + +.bxs-film:before { + content: '\edc0'; +} + +.bxs-filter-alt:before { + content: '\edc1'; +} + +.bxs-first-aid:before { + content: '\edc2'; +} + +.bxs-flag:before { + content: '\edc3'; +} + +.bxs-flag-alt:before { + content: '\edc4'; +} + +.bxs-flag-checkered:before { + content: '\edc5'; +} + +.bxs-flame:before { + content: '\edc6'; +} + +.bxs-flask:before { + content: '\edc7'; +} + +.bxs-florist:before { + content: '\edc8'; +} + +.bxs-folder:before { + content: '\edc9'; +} + +.bxs-folder-minus:before { + content: '\edca'; +} + +.bxs-folder-open:before { + content: '\edcb'; +} + +.bxs-folder-plus:before { + content: '\edcc'; +} + +.bxs-food-menu:before { + content: '\edcd'; +} + +.bxs-fridge:before { + content: '\edce'; +} + +.bxs-game:before { + content: '\edcf'; +} + +.bxs-gas-pump:before { + content: '\edd0'; +} + +.bxs-ghost:before { + content: '\edd1'; +} + +.bxs-gift:before { + content: '\edd2'; +} + +.bxs-graduation:before { + content: '\edd3'; +} + +.bxs-grid:before { + content: '\edd4'; +} + +.bxs-grid-alt:before { + content: '\edd5'; +} + +.bxs-group:before { + content: '\edd6'; +} + +.bxs-guitar-amp:before { + content: '\edd7'; +} + +.bxs-hand:before { + content: '\edd8'; +} + +.bxs-hand-down:before { + content: '\edd9'; +} + +.bxs-hand-left:before { + content: '\edda'; +} + +.bxs-hand-right:before { + content: '\eddb'; +} + +.bxs-hand-up:before { + content: '\eddc'; +} + +.bxs-happy:before { + content: '\eddd'; +} + +.bxs-happy-alt:before { + content: '\edde'; +} + +.bxs-happy-beaming:before { + content: '\eddf'; +} + +.bxs-happy-heart-eyes:before { + content: '\ede0'; +} + +.bxs-hdd:before { + content: '\ede1'; +} + +.bxs-heart:before { + content: '\ede2'; +} + +.bxs-heart-circle:before { + content: '\ede3'; +} + +.bxs-heart-square:before { + content: '\ede4'; +} + +.bxs-help-circle:before { + content: '\ede5'; +} + +.bxs-hide:before { + content: '\ede6'; +} + +.bxs-home:before { + content: '\ede7'; +} + +.bxs-home-circle:before { + content: '\ede8'; +} + +.bxs-home-heart:before { + content: '\ede9'; +} + +.bxs-home-smile:before { + content: '\edea'; +} + +.bxs-hotel:before { + content: '\edeb'; +} + +.bxs-hourglass:before { + content: '\edec'; +} + +.bxs-hourglass-bottom:before { + content: '\eded'; +} + +.bxs-hourglass-top:before { + content: '\edee'; +} + +.bxs-id-card:before { + content: '\edef'; +} + +.bxs-image:before { + content: '\edf0'; +} + +.bxs-image-add:before { + content: '\edf1'; +} + +.bxs-image-alt:before { + content: '\edf2'; +} + +.bxs-inbox:before { + content: '\edf3'; +} + +.bxs-info-circle:before { + content: '\edf4'; +} + +.bxs-info-square:before { + content: '\edf5'; +} + +.bxs-institution:before { + content: '\edf6'; +} + +.bxs-joystick:before { + content: '\edf7'; +} + +.bxs-joystick-alt:before { + content: '\edf8'; +} + +.bxs-joystick-button:before { + content: '\edf9'; +} + +.bxs-key:before { + content: '\edfa'; +} + +.bxs-keyboard:before { + content: '\edfb'; +} + +.bxs-label:before { + content: '\edfc'; +} + +.bxs-landmark:before { + content: '\edfd'; +} + +.bxs-landscape:before { + content: '\edfe'; +} + +.bxs-laugh:before { + content: '\edff'; +} + +.bxs-layer:before { + content: '\ee00'; +} + +.bxs-layer-minus:before { + content: '\ee01'; +} + +.bxs-layer-plus:before { + content: '\ee02'; +} + +.bxs-layout:before { + content: '\ee03'; +} + +.bxs-left-arrow:before { + content: '\ee04'; +} + +.bxs-left-arrow-alt:before { + content: '\ee05'; +} + +.bxs-left-arrow-circle:before { + content: '\ee06'; +} + +.bxs-left-arrow-square:before { + content: '\ee07'; +} + +.bxs-left-down-arrow-circle:before { + content: '\ee08'; +} + +.bxs-left-top-arrow-circle:before { + content: '\ee09'; +} + +.bxs-like:before { + content: '\ee0a'; +} + +.bxs-location-plus:before { + content: '\ee0b'; +} + +.bxs-lock:before { + content: '\ee0c'; +} + +.bxs-lock-alt:before { + content: '\ee0d'; +} + +.bxs-lock-open:before { + content: '\ee0e'; +} + +.bxs-lock-open-alt:before { + content: '\ee0f'; +} + +.bxs-log-in:before { + content: '\ee10'; +} + +.bxs-log-in-circle:before { + content: '\ee11'; +} + +.bxs-log-out:before { + content: '\ee12'; +} + +.bxs-log-out-circle:before { + content: '\ee13'; +} + +.bxs-low-vision:before { + content: '\ee14'; +} + +.bxs-magic-wand:before { + content: '\ee15'; +} + +.bxs-magnet:before { + content: '\ee16'; +} + +.bxs-map:before { + content: '\ee17'; +} + +.bxs-map-alt:before { + content: '\ee18'; +} + +.bxs-map-pin:before { + content: '\ee19'; +} + +.bxs-mask:before { + content: '\ee1a'; +} + +.bxs-medal:before { + content: '\ee1b'; +} + +.bxs-megaphone:before { + content: '\ee1c'; +} + +.bxs-meh:before { + content: '\ee1d'; +} + +.bxs-meh-alt:before { + content: '\ee1e'; +} + +.bxs-meh-blank:before { + content: '\ee1f'; +} + +.bxs-memory-card:before { + content: '\ee20'; +} + +.bxs-message:before { + content: '\ee21'; +} + +.bxs-message-add:before { + content: '\ee22'; +} + +.bxs-message-alt:before { + content: '\ee23'; +} + +.bxs-message-alt-add:before { + content: '\ee24'; +} + +.bxs-message-alt-check:before { + content: '\ee25'; +} + +.bxs-message-alt-detail:before { + content: '\ee26'; +} + +.bxs-message-alt-dots:before { + content: '\ee27'; +} + +.bxs-message-alt-edit:before { + content: '\ee28'; +} + +.bxs-message-alt-error:before { + content: '\ee29'; +} + +.bxs-message-alt-minus:before { + content: '\ee2a'; +} + +.bxs-message-alt-x:before { + content: '\ee2b'; +} + +.bxs-message-check:before { + content: '\ee2c'; +} + +.bxs-message-detail:before { + content: '\ee2d'; +} + +.bxs-message-dots:before { + content: '\ee2e'; +} + +.bxs-message-edit:before { + content: '\ee2f'; +} + +.bxs-message-error:before { + content: '\ee30'; +} + +.bxs-message-minus:before { + content: '\ee31'; +} + +.bxs-message-rounded:before { + content: '\ee32'; +} + +.bxs-message-rounded-add:before { + content: '\ee33'; +} + +.bxs-message-rounded-check:before { + content: '\ee34'; +} + +.bxs-message-rounded-detail:before { + content: '\ee35'; +} + +.bxs-message-rounded-dots:before { + content: '\ee36'; +} + +.bxs-message-rounded-edit:before { + content: '\ee37'; +} + +.bxs-message-rounded-error:before { + content: '\ee38'; +} + +.bxs-message-rounded-minus:before { + content: '\ee39'; +} + +.bxs-message-rounded-x:before { + content: '\ee3a'; +} + +.bxs-message-square:before { + content: '\ee3b'; +} + +.bxs-message-square-add:before { + content: '\ee3c'; +} + +.bxs-message-square-check:before { + content: '\ee3d'; +} + +.bxs-message-square-detail:before { + content: '\ee3e'; +} + +.bxs-message-square-dots:before { + content: '\ee3f'; +} + +.bxs-message-square-edit:before { + content: '\ee40'; +} + +.bxs-message-square-error:before { + content: '\ee41'; +} + +.bxs-message-square-minus:before { + content: '\ee42'; +} + +.bxs-message-square-x:before { + content: '\ee43'; +} + +.bxs-message-x:before { + content: '\ee44'; +} + +.bxs-meteor:before { + content: '\ee45'; +} + +.bxs-microchip:before { + content: '\ee46'; +} + +.bxs-microphone:before { + content: '\ee47'; +} + +.bxs-microphone-alt:before { + content: '\ee48'; +} + +.bxs-microphone-off:before { + content: '\ee49'; +} + +.bxs-minus-circle:before { + content: '\ee4a'; +} + +.bxs-minus-square:before { + content: '\ee4b'; +} + +.bxs-mobile:before { + content: '\ee4c'; +} + +.bxs-mobile-vibration:before { + content: '\ee4d'; +} + +.bxs-moon:before { + content: '\ee4e'; +} + +.bxs-mouse:before { + content: '\ee4f'; +} + +.bxs-mouse-alt:before { + content: '\ee50'; +} + +.bxs-movie:before { + content: '\ee51'; +} + +.bxs-movie-play:before { + content: '\ee52'; +} + +.bxs-music:before { + content: '\ee53'; +} + +.bxs-navigation:before { + content: '\ee54'; +} + +.bxs-network-chart:before { + content: '\ee55'; +} + +.bxs-news:before { + content: '\ee56'; +} + +.bxs-no-entry:before { + content: '\ee57'; +} + +.bxs-note:before { + content: '\ee58'; +} + +.bxs-notepad:before { + content: '\ee59'; +} + +.bxs-notification:before { + content: '\ee5a'; +} + +.bxs-notification-off:before { + content: '\ee5b'; +} + +.bxs-offer:before { + content: '\ee5c'; +} + +.bxs-package:before { + content: '\ee5d'; +} + +.bxs-paint:before { + content: '\ee5e'; +} + +.bxs-paint-roll:before { + content: '\ee5f'; +} + +.bxs-palette:before { + content: '\ee60'; +} + +.bxs-paper-plane:before { + content: '\ee61'; +} + +.bxs-parking:before { + content: '\ee62'; +} + +.bxs-paste:before { + content: '\ee63'; +} + +.bxs-pen:before { + content: '\ee64'; +} + +.bxs-pencil:before { + content: '\ee65'; +} + +.bxs-phone:before { + content: '\ee66'; +} + +.bxs-phone-call:before { + content: '\ee67'; +} + +.bxs-phone-incoming:before { + content: '\ee68'; +} + +.bxs-phone-off:before { + content: '\ee69'; +} + +.bxs-phone-outgoing:before { + content: '\ee6a'; +} + +.bxs-photo-album:before { + content: '\ee6b'; +} + +.bxs-piano:before { + content: '\ee6c'; +} + +.bxs-pie-chart:before { + content: '\ee6d'; +} + +.bxs-pie-chart-alt:before { + content: '\ee6e'; +} + +.bxs-pie-chart-alt-2:before { + content: '\ee6f'; +} + +.bxs-pin:before { + content: '\ee70'; +} + +.bxs-pizza:before { + content: '\ee71'; +} + +.bxs-plane:before { + content: '\ee72'; +} + +.bxs-plane-alt:before { + content: '\ee73'; +} + +.bxs-plane-land:before { + content: '\ee74'; +} + +.bxs-planet:before { + content: '\ee75'; +} + +.bxs-plane-take-off:before { + content: '\ee76'; +} + +.bxs-playlist:before { + content: '\ee77'; +} + +.bxs-plug:before { + content: '\ee78'; +} + +.bxs-plus-circle:before { + content: '\ee79'; +} + +.bxs-plus-square:before { + content: '\ee7a'; +} + +.bxs-pointer:before { + content: '\ee7b'; +} + +.bxs-polygon:before { + content: '\ee7c'; +} + +.bxs-printer:before { + content: '\ee7d'; +} + +.bxs-purchase-tag:before { + content: '\ee7e'; +} + +.bxs-purchase-tag-alt:before { + content: '\ee7f'; +} + +.bxs-pyramid:before { + content: '\ee80'; +} + +.bxs-quote-alt-left:before { + content: '\ee81'; +} + +.bxs-quote-alt-right:before { + content: '\ee82'; +} + +.bxs-quote-left:before { + content: '\ee83'; +} + +.bxs-quote-right:before { + content: '\ee84'; +} + +.bxs-quote-single-left:before { + content: '\ee85'; +} + +.bxs-quote-single-right:before { + content: '\ee86'; +} + +.bxs-radiation:before { + content: '\ee87'; +} + +.bxs-radio:before { + content: '\ee88'; +} + +.bxs-receipt:before { + content: '\ee89'; +} + +.bxs-rectangle:before { + content: '\ee8a'; +} + +.bxs-registered:before { + content: '\ee8b'; +} + +.bxs-rename:before { + content: '\ee8c'; +} + +.bxs-report:before { + content: '\ee8d'; +} + +.bxs-rewind-circle:before { + content: '\ee8e'; +} + +.bxs-right-arrow:before { + content: '\ee8f'; +} + +.bxs-right-arrow-alt:before { + content: '\ee90'; +} + +.bxs-right-arrow-circle:before { + content: '\ee91'; +} + +.bxs-right-arrow-square:before { + content: '\ee92'; +} + +.bxs-right-down-arrow-circle:before { + content: '\ee93'; +} + +.bxs-right-top-arrow-circle:before { + content: '\ee94'; +} + +.bxs-rocket:before { + content: '\ee95'; +} + +.bxs-ruler:before { + content: '\ee96'; +} + +.bxs-sad:before { + content: '\ee97'; +} + +.bxs-save:before { + content: '\ee98'; +} + +.bxs-school:before { + content: '\ee99'; +} + +.bxs-search:before { + content: '\ee9a'; +} + +.bxs-search-alt-2:before { + content: '\ee9b'; +} + +.bxs-select-multiple:before { + content: '\ee9c'; +} + +.bxs-send:before { + content: '\ee9d'; +} + +.bxs-server:before { + content: '\ee9e'; +} + +.bxs-shapes:before { + content: '\ee9f'; +} + +.bxs-share:before { + content: '\eea0'; +} + +.bxs-share-alt:before { + content: '\eea1'; +} + +.bxs-shield:before { + content: '\eea2'; +} + +.bxs-shield-alt-2:before { + content: '\eea3'; +} + +.bxs-shield-x:before { + content: '\eea4'; +} + +.bxs-ship:before { + content: '\eea5'; +} + +.bxs-shocked:before { + content: '\eea6'; +} + +.bxs-shopping-bag:before { + content: '\eea7'; +} + +.bxs-shopping-bag-alt:before { + content: '\eea8'; +} + +.bxs-shopping-bags:before { + content: '\eea9'; +} + +.bxs-show:before { + content: '\eeaa'; +} + +.bxs-skip-next-circle:before { + content: '\eeab'; +} + +.bxs-skip-previous-circle:before { + content: '\eeac'; +} + +.bxs-skull:before { + content: '\eead'; +} + +.bxs-sleepy:before { + content: '\eeae'; +} + +.bxs-slideshow:before { + content: '\eeaf'; +} + +.bxs-smile:before { + content: '\eeb0'; +} + +.bxs-sort-alt:before { + content: '\eeb1'; +} + +.bxs-spa:before { + content: '\eeb2'; +} + +.bxs-speaker:before { + content: '\eeb3'; +} + +.bxs-spray-can:before { + content: '\eeb4'; +} + +.bxs-spreadsheet:before { + content: '\eeb5'; +} + +.bxs-square:before { + content: '\eeb6'; +} + +.bxs-square-rounded:before { + content: '\eeb7'; +} + +.bxs-star:before { + content: '\eeb8'; +} + +.bxs-star-half:before { + content: '\eeb9'; +} + +.bxs-sticker:before { + content: '\eeba'; +} + +.bxs-stopwatch:before { + content: '\eebb'; +} + +.bxs-store:before { + content: '\eebc'; +} + +.bxs-store-alt:before { + content: '\eebd'; +} + +.bxs-sun:before { + content: '\eebe'; +} + +.bxs-tachometer:before { + content: '\eebf'; +} + +.bxs-tag:before { + content: '\eec0'; +} + +.bxs-tag-alt:before { + content: '\eec1'; +} + +.bxs-tag-x:before { + content: '\eec2'; +} + +.bxs-taxi:before { + content: '\eec3'; +} + +.bxs-tennis-ball:before { + content: '\eec4'; +} + +.bxs-terminal:before { + content: '\eec5'; +} + +.bxs-thermometer:before { + content: '\eec6'; +} + +.bxs-time:before { + content: '\eec7'; +} + +.bxs-time-five:before { + content: '\eec8'; +} + +.bxs-timer:before { + content: '\eec9'; +} + +.bxs-tired:before { + content: '\eeca'; +} + +.bxs-toggle-left:before { + content: '\eecb'; +} + +.bxs-toggle-right:before { + content: '\eecc'; +} + +.bxs-tone:before { + content: '\eecd'; +} + +.bxs-torch:before { + content: '\eece'; +} + +.bxs-to-top:before { + content: '\eecf'; +} + +.bxs-traffic:before { + content: '\eed0'; +} + +.bxs-traffic-barrier:before { + content: '\eed1'; +} + +.bxs-traffic-cone:before { + content: '\eed2'; +} + +.bxs-train:before { + content: '\eed3'; +} + +.bxs-trash:before { + content: '\eed4'; +} + +.bxs-trash-alt:before { + content: '\eed5'; +} + +.bxs-tree:before { + content: '\eed6'; +} + +.bxs-trophy:before { + content: '\eed7'; +} + +.bxs-truck:before { + content: '\eed8'; +} + +.bxs-t-shirt:before { + content: '\eed9'; +} + +.bxs-tv:before { + content: '\eeda'; +} + +.bxs-up-arrow:before { + content: '\eedb'; +} + +.bxs-up-arrow-alt:before { + content: '\eedc'; +} + +.bxs-up-arrow-circle:before { + content: '\eedd'; +} + +.bxs-up-arrow-square:before { + content: '\eede'; +} + +.bxs-upside-down:before { + content: '\eedf'; +} + +.bxs-upvote:before { + content: '\eee0'; +} + +.bxs-user:before { + content: '\eee1'; +} + +.bxs-user-account:before { + content: '\eee2'; +} + +.bxs-user-badge:before { + content: '\eee3'; +} + +.bxs-user-check:before { + content: '\eee4'; +} + +.bxs-user-circle:before { + content: '\eee5'; +} + +.bxs-user-detail:before { + content: '\eee6'; +} + +.bxs-user-minus:before { + content: '\eee7'; +} + +.bxs-user-pin:before { + content: '\eee8'; +} + +.bxs-user-plus:before { + content: '\eee9'; +} + +.bxs-user-rectangle:before { + content: '\eeea'; +} + +.bxs-user-voice:before { + content: '\eeeb'; +} + +.bxs-user-x:before { + content: '\eeec'; +} + +.bxs-vector:before { + content: '\eeed'; +} + +.bxs-vial:before { + content: '\eeee'; +} + +.bxs-video:before { + content: '\eeef'; +} + +.bxs-video-off:before { + content: '\eef0'; +} + +.bxs-video-plus:before { + content: '\eef1'; +} + +.bxs-video-recording:before { + content: '\eef2'; +} + +.bxs-videos:before { + content: '\eef3'; +} + +.bxs-virus:before { + content: '\eef4'; +} + +.bxs-virus-block:before { + content: '\eef5'; +} + +.bxs-volume:before { + content: '\eef6'; +} + +.bxs-volume-full:before { + content: '\eef7'; +} + +.bxs-volume-low:before { + content: '\eef8'; +} + +.bxs-volume-mute:before { + content: '\eef9'; +} + +.bxs-wallet:before { + content: '\eefa'; +} + +.bxs-wallet-alt:before { + content: '\eefb'; +} + +.bxs-washer:before { + content: '\eefc'; +} + +.bxs-watch:before { + content: '\eefd'; +} + +.bxs-watch-alt:before { + content: '\eefe'; +} + +.bxs-webcam:before { + content: '\eeff'; +} + +.bxs-widget:before { + content: '\ef00'; +} + +.bxs-window-alt:before { + content: '\ef01'; +} + +.bxs-wine:before { + content: '\ef02'; +} + +.bxs-wink-smile:before { + content: '\ef03'; +} + +.bxs-wink-tongue:before { + content: '\ef04'; +} + +.bxs-wrench:before { + content: '\ef05'; +} + +.bxs-x-circle:before { + content: '\ef06'; +} + +.bxs-x-square:before { + content: '\ef07'; +} + +.bxs-yin-yang:before { + content: '\ef08'; +} + +.bxs-zap:before { + content: '\ef09'; +} + +.bxs-zoom-in:before { + content: '\ef0a'; +} + +.bxs-zoom-out:before { + content: '\ef0b'; +} diff --git a/apiferia/src/assets/scss/pages/_app-chat.scss b/apiferia/src/assets/scss/pages/_app-chat.scss new file mode 100644 index 00000000..151491ae --- /dev/null +++ b/apiferia/src/assets/scss/pages/_app-chat.scss @@ -0,0 +1,213 @@ +// +// app-chat.scss +// + +// chat +.chat-search { + display: table; + width: 100%; + padding-bottom: $spacer; + + .chat-search-box { + display: table-cell; + vertical-align: middle; + position: relative; + + .search-icon { + position: absolute; + top: 50%; + right: 12px; + transform: translateY(-50%); + } + } + + .form-control { + padding-right: 2rem; + } +} + +.chat-item { + background: transparent; + transition: all 0.2s ease-in-out; + + &.active, + &:hover { + background-color: rgba(var(--#{$prefix}light-rgb), 0.5) !important; + } +} + +.chat-conversation-list { + list-style: none; + + li { + margin-bottom: 20px; + position: relative; + + .chat-conversation-text { + margin-bottom: $spacer * 0.25; + + &:first-child { + &::before { + content: ''; + position: absolute; + left: 0; + top: 0; + border: solid transparent; + height: 0; + width: 0; + border-top-color: var(--#{$prefix}tertiary-bg); + border-width: 6px; + margin-right: -1px; + border-right-color: var(--#{$prefix}tertiary-bg); + } + } + + &:hover { + .chat-conversation-actions { + opacity: 1; + align-items: top; + } + } + } + + .chat-conversation-actions { + opacity: 0; + float: right; + } + + &:last-child { + margin-bottom: 0; + } + } + + .chat-ctext-wrap { + background: var(--#{$prefix}tertiary-bg); + border-radius: 0 $border-radius-sm $border-radius-sm; + display: inline-block; + padding: $input-padding-y $input-padding-x; + position: relative; + max-width: 750px; + margin-left: 10px; + + i { + display: block; + font-size: $h6-font-size; + font-style: normal; + font-weight: bold; + position: relative; + } + + p { + margin: 0; + padding: 0; + } + } + + .odd { + .chat-conversation-text { + float: right !important; + text-align: right !important; + margin-right: 10px; + + &:first-child { + &::before { + border-color: transparent; + border-left-color: $primary; + border-top-color: $primary; + right: 3px; + left: auto; + } + } + } + + .chat-ctext-wrap { + background-color: $primary; + color: $white; + border-radius: $border-radius-sm 0 $border-radius-sm + $border-radius-sm; + } + } +} + +.chat-user-status-box { + position: relative; + display: flex; + justify-content: center; + + span { + position: relative; + + &::before { + content: ''; + position: absolute; + bottom: 0; + right: 2px; + height: 11px; + width: 11px; + background-color: $success; + border: 2px solid $border-color; + border-radius: 50%; + } + } +} + +// video call +.video-call { + background-image: url('../../images/users/chat.jpg'); + background-repeat: no-repeat; + background-size: cover; + height: 450px; + position: relative; + + .video-call-head { + img { + height: 4rem; + width: 4rem; + } + } + + .video-call-action { + position: absolute; + bottom: 0px; + left: 0; + right: 0; + padding: 60px 0 16px; + background: linear-gradient(to top, $black 0, rgba($black, 0) 90%); + } +} + +// voice call +.voice-call { + height: 450px; + position: relative; + + .voice-call-head { + img { + width: 6rem; + height: 6rem; + } + } + + .voice-call-action { + position: absolute; + bottom: 0px; + left: 0; + right: 0; + } +} + +// setting +.app-chat-setting { + .accordion-button, + .accordion-body { + background-color: $card-bg !important; + } +} + +.chatbox-height { + max-height: calc(100vh - 299px); +} + +.chat-setting-height { + max-height: calc(100vh - 428px); +} diff --git a/apiferia/src/assets/scss/pages/_app-ecommerce.scss b/apiferia/src/assets/scss/pages/_app-ecommerce.scss new file mode 100644 index 00000000..b424c1c0 --- /dev/null +++ b/apiferia/src/assets/scss/pages/_app-ecommerce.scss @@ -0,0 +1,103 @@ +// +// app-ecommerce.scss +// + +// horizontal progress +.progressbar { + counter-reset: step; + + li { + list-style-type: none; + width: 25%; + float: left; + font-size: 12px; + position: relative; + font-weight: $font-weight-semibold; + text-align: center; + text-transform: uppercase; + color: var(--#{$prefix}body-color); + + &::before { + width: 30px; + height: 30px; + content: counter(step); + counter-increment: step; + line-height: 25px; + border: 2px solid var(--#{$prefix}border-color); + display: block; + text-align: center; + margin: 0 auto 10px auto; + border-radius: 50%; + background-color: $card-bg; + color: var(--#{$prefix}body-color); + } + + &::after { + width: 100%; + height: 2px; + content: ''; + position: absolute; + background-color: var(--#{$prefix}border-color); + top: 15px; + left: -50%; + z-index: -1; + } + + &:first-child::after { + content: none; + } + + &.active { + color: $primary; + + &::before { + border-color: $primary; + background-color: $primary; + color: $white; + } + + + { + li { + &::after { + background-color: $primary; + } + + // &::before { + // border-color: $primary; + // background-color: $primary; + // color: $white; + // // animation-name: animation-steps-current; + // // animation-duration: 2s; + // // animation-iteration-count: infinite; + // // animation-timing-function: ease-out; + // } + // &::cue() { + // content: ""; + // position: absolute; + // top: 0; + // left: 0; + // border: $border-width solid $primary; + // height: 20px; + // width: 20px; + // animation-name: animation-steps-current; + // animation-duration: 2s; + // animation-iteration-count: infinite; + // animation-timing-function: ease-out; + // } + } + } + } + } +} + +@keyframes animation-steps-current { + from { + transform: translate(-50%, -50%) scale(0); + opacity: 1; + } + + to { + transform: translate(-50%, -50%) scale(1); + opacity: 0.7; + } +} diff --git a/apiferia/src/assets/scss/pages/_app-email.scss b/apiferia/src/assets/scss/pages/_app-email.scss new file mode 100644 index 00000000..86629544 --- /dev/null +++ b/apiferia/src/assets/scss/pages/_app-email.scss @@ -0,0 +1,251 @@ +// +// app-email.scss +// + +.email-container { + background-color: $card-bg; + + .inbox-leftbar { + width: $main-nav-width; + padding-right: $card-spacer-x; + float: left; + } + + .inbox-rightbar { + margin-left: $main-nav-width; + border-left: $border-width solid $border-color; + padding: 0 0 $spacer $spacer; + } +} + +.message-list { + display: block; + padding-left: 0; + + li { + position: relative; + display: block; + height: 48px; + line-height: 48px; + cursor: default; + transition-duration: 0.3s; + background: $card-bg; + margin-bottom: 1px; + box-shadow: $box-shadow-sm; + + a { + color: $link-color; + } + + &:hover { + background-color: var(--#{$prefix}light); + transition-duration: 0.05s; + } + + .col-mail { + float: left; + position: relative; + } + + .col-mail-1 { + width: 320px; + display: flex; + align-items: flex-end; + + .trash-toggle, + .important-toggle, + .star-toggle, + .checkbox-wrapper-mail, + .dot { + display: block; + float: left; + } + + .dot { + border: 4px solid transparent; + border-radius: 100px; + margin: 22px 26px 0; + height: 0; + width: 0; + line-height: 0; + font-size: 0; + } + + .checkbox-wrapper-mail { + margin: 15px 10px 0 20px; + } + + .star-toggle, + .important-toggle, + .trash-toggle { + color: var(--#{$prefix}link-color); + font-size: 20px; + margin: 0 10px 0 10px; + cursor: pointer; + } + + .title { + position: absolute; + top: 0; + left: 140px; + right: 0; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + margin-bottom: 0; + line-height: 50px; + } + } + + .col-mail-2 { + position: absolute; + top: 0; + left: 320px; + right: 0; + bottom: 0; + + .subject, + .date { + position: absolute; + top: 0; + } + + .subject { + left: 0; + right: 110px; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + } + + .date { + right: 0; + width: 100px; + padding-left: 10px; + } + } + } + + li.active, + li.mail-selected { + background: var(--#{$prefix}tertiary-bg); + transition-duration: 0.05s; + } + + li.active, + li.active:hover { + box-shadow: inset 3px 0 0 $cyan; + } + + li.unread a { + font-weight: $font-weight-semibold; + color: var(--#{$prefix}tertiary-color); + } + + .checkbox-wrapper-mail { + cursor: pointer; + height: 20px; + width: 20px; + position: relative; + display: inline-block; + box-shadow: inset 0 0 0 2px var(--#{$prefix}link-color); + border-radius: 3px; + + input { + opacity: 0; + cursor: pointer; + } + + input:checked ~ label { + opacity: 1; + } + + label { + position: absolute; + top: 3px; + left: 3px; + right: 3px; + bottom: 3px; + cursor: pointer; + background: var(--#{$prefix}body-color); + opacity: 0; + margin-bottom: 0 !important; + transition-duration: 0.05s; + } + + label:active { + background: var(--#{$prefix}border-color); + } + } +} + +.mail-list { + a { + color: $gray-700; + padding: 7px 10px; + display: block; + } +} + +.reply-box { + border: 2px solid var(--#{$prefix}light); +} + +@media (max-width: 648px) { + .email-container { + .inbox-leftbar { + width: 100%; + float: none; + margin-bottom: 21px; + padding-bottom: 1.25rem; + } + + .inbox-rightbar { + margin-left: 0; + border: 0; + padding-left: 0; + } + } +} + +@media (max-width: 520px) { + .inbox-rightbar { + > .btn-group { + margin-bottom: 10px; + } + } + + .message-list li { + .col-mail-1 { + width: 150px; + + .title { + left: 130px; + } + } + + .col-mail-2 { + left: 160px; + + .date { + text-align: right; + padding-right: 10px; + padding-left: 20px; + } + } + } +} + +// compose + +.compose-mail { + .modal-dialog { + width: 600px !important; + } +} + +.mail-read { + width: 100% !important; + max-width: 100% !important; + z-index: 990 !important; +} diff --git a/apiferia/src/assets/scss/pages/_app-file-manager.scss b/apiferia/src/assets/scss/pages/_app-file-manager.scss new file mode 100644 index 00000000..1dd79347 --- /dev/null +++ b/apiferia/src/assets/scss/pages/_app-file-manager.scss @@ -0,0 +1,61 @@ +// +// app-file-manager.scss +// + +.file-container { + background-color: $card-bg; + .file-leftbar { + width: $main-nav-width; + float: left; + padding-bottom: 184px; + margin-bottom: -184px; + } + + .file-rightbar { + margin-left: $main-nav-width; + border-left: 5px solid $body-bg; + padding: 0 0 1.5rem 25px; + } +} + +.file-search { + .search-input { + background-color: $gray-100; + // padding-left: 40px; + padding: $input-btn-padding-y $input-btn-padding-x + 1; + border: $border-width solid $gray-100 !important; + border-radius: $border-radius-sm !important; + } + .icon-search { + z-index: 4; + position: absolute; + top: 50%; + right: 10px; + transform: translateY(-50%); + } +} + +@media (max-width: 648px) { + .file-container { + .file-leftbar { + width: 100%; + float: none; + margin-bottom: 21px; + padding-bottom: 1.25rem; + } + + .file-rightbar { + margin-left: 0; + border: 0; + padding-left: 0; + } + } +} + +@media (max-width: 520px) { + .file-rightbar { + > .btn-group { + margin-bottom: 10px; + } + } +} diff --git a/apiferia/src/assets/scss/pages/_app-social.scss b/apiferia/src/assets/scss/pages/_app-social.scss new file mode 100644 index 00000000..c5da5573 --- /dev/null +++ b/apiferia/src/assets/scss/pages/_app-social.scss @@ -0,0 +1,69 @@ +// +// social.scss +// + +.wallpaper { + background-image: url('../../images/app-social/wallpaper.jpg'); + background-repeat: no-repeat; + background-size: cover; + height: 450px; + position: relative; + + .profile { + position: absolute; + bottom: 20px; + left: 20px; + padding: 5px; + border: $border-width solid $white; + } +} + +.acc-wallpaper { + background-image: url('../../images/app-social/acc-wallpaper.jpg'); + background-repeat: no-repeat; + background-size: cover; + height: 500px; + position: relative; + + .profile { + position: absolute; + bottom: 20px; + left: 20px; + padding: 5px; + border: $border-width solid $white; + } +} + +.group { + position: relative; + cursor: pointer; + + .group-action { + display: none; + } + + &:hover { + .group-action { + display: block; + position: absolute; + top: $spacer * 0.5; + right: $spacer * 0.5; + } + } +} + +.spin-icon { + animation-name: spin; + animation-duration: 1000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} diff --git a/apiferia/src/assets/scss/pages/_authentication.scss b/apiferia/src/assets/scss/pages/_authentication.scss new file mode 100644 index 00000000..aff8c60c --- /dev/null +++ b/apiferia/src/assets/scss/pages/_authentication.scss @@ -0,0 +1,112 @@ +// +// authentication.scss +// + +body { + &.authentication-bg { + background: url(../../images/bg-overlay.svg) $primary; + padding-bottom: 0; + + .account-pages { + align-items: center; + display: flex; + min-height: 100vh; + } + } +} + +.auth-logo { + .logo-dark { + display: block; + } + + .logo-light { + display: none; + } +} + +html[data-bs-theme='dark'] { + .auth-logo { + .logo-dark { + display: none; + } + + .logo-light { + display: block; + } + } +} + +.account-pages { + .auth-card { + position: relative; + border: 0; + box-shadow: none; + + &::after { + content: ''; + position: absolute; + top: -40px; + left: 0; + right: 0; + background: $card-bg; + opacity: 0.25; + height: 20px; + width: 80%; + margin: 0 auto; + border-top-left-radius: $border-radius-sm; + border-top-right-radius: $border-radius-sm; + z-index: -1; + } + + &::before { + content: ''; + position: absolute; + top: -20px; + left: 0; + right: 0; + background: $card-bg; + opacity: 0.6; + height: 20px; + width: 90%; + margin: 0 auto; + border-top-left-radius: $border-radius-sm; + border-top-right-radius: $border-radius-sm; + z-index: -1; + } + } +} + +.auth-page-sidebar { + padding: 4rem; + background-color: $card-bg; + border-radius: $border-radius-sm; + height: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +p.no-span { + display: table; + white-space: nowrap; + padding: 10px 0; + + &::before, + &::after { + border-top: 1px solid #{$card-border-color}; + content: ''; + display: table-cell; + position: relative; + top: 0.7em; + width: 50%; + } + + &::before { + right: 1.5%; + } + + &::after { + left: 1.5%; + } +} diff --git a/apiferia/src/assets/scss/pages/_icon-demo.scss b/apiferia/src/assets/scss/pages/_icon-demo.scss new file mode 100644 index 00000000..948ef256 --- /dev/null +++ b/apiferia/src/assets/scss/pages/_icon-demo.scss @@ -0,0 +1,5 @@ +.icon-box { + // height: 100px; + width: 142px; + margin-bottom: 0 !important; +} diff --git a/apiferia/src/assets/scss/pages/_pricing.scss b/apiferia/src/assets/scss/pages/_pricing.scss new file mode 100644 index 00000000..c522529e --- /dev/null +++ b/apiferia/src/assets/scss/pages/_pricing.scss @@ -0,0 +1,91 @@ +// +// pricing.scss +// + +.card-pricing { + position: relative; + + .card-pricing-plan-name { + padding-bottom: 20px; + } + + .card-pricing-icon { + font-size: $font-size-base; + background-color: rgba($primary, 0.1); + height: 60px; + display: inline-block; + width: 60px; + line-height: 62px; + border-radius: 50%; + } + + .card-pricing-price { + padding: 30px 0 0; + + span { + font-size: 40%; + color: $text-muted; + letter-spacing: 2px; + text-transform: uppercase; + } + } + .card-pricing-features { + color: $text-muted; + list-style: none; + margin: 0; + padding: 20px 0 0 0; + + li { + padding: 10px; + } + } + + .pricing-ribbon.float-end { + margin-right: -34px; + border-radius: $border-radius-sm 0 0 $border-radius-sm; + &::before { + right: 0; + } + } + .pricing-ribbon { + position: relative; + background-color: $primary; + clear: both; + padding: 5px 12px; + margin-bottom: 15px; + box-shadow: 2px 5px 10px rgba($primary, 0.3); + color: $white; + font-size: $font-size-sm; + font-weight: $font-weight-semibold; + &::before { + content: ' '; + border-style: solid; + border-width: 10px; + display: block; + position: absolute; + bottom: -10px; + left: 0; + margin-bottom: -10px; + z-index: -1; + } + } + .pricing-ribbon-primary { + background: $primary; + &::before { + border-color: shade-color($primary, 15%) transparent transparent; + } + } +} + +.card-pricing-recommended { + background-color: $primary; + color: $white; + + .card-pricing-icon { + background-color: rgba($white, 0.1); + } + .card-pricing-features, + .card-pricing-price span { + color: rgba($white, 0.7); + } +} diff --git a/apiferia/src/assets/scss/pages/_timeline.scss b/apiferia/src/assets/scss/pages/_timeline.scss new file mode 100644 index 00000000..0dec38ff --- /dev/null +++ b/apiferia/src/assets/scss/pages/_timeline.scss @@ -0,0 +1,195 @@ +// +// timeline.scss +// + +// left timeline +.left-timeline { + border-left: 2px dashed var(--#{$prefix}border-color); + padding-left: 34px; + margin-left: 8px; + + .left-timeline-list { + position: relative; + + &::after { + content: ''; + position: absolute; + left: -44px; + top: 0; + background: $primary; + clip-path: polygon( + 30% 0%, + 70% 0%, + 100% 30%, + 100% 70%, + 70% 100%, + 30% 100%, + 0% 70%, + 0% 30% + ); + height: 18px; + width: 18px; + } + } +} + +// center timeline + +.timeline { + margin-bottom: 50px; + position: relative; + + &::before { + content: ''; + position: absolute; + border: 1px dashed var(--#{$prefix}border-color); + bottom: 0; + left: 50%; + top: 30px; + width: 0; + z-index: 0; + } + + .timeline-time { + .time-show { + background-color: var(--#{$prefix}body-bg); + padding: 20px 0; + position: relative; + } + } + + .timeline-box { + display: block; + position: relative; + padding: 20px; + } + + .timeline-album { + margin-top: 12px; + + a { + display: inline-block; + margin-right: 5px; + } + + img { + height: 36px; + width: auto; + border-radius: 3px; + } + } +} + +@include media-breakpoint-up(md) { + .timeline { + .timeline-time { + .time-show { + justify-content: center; + } + } + + .timeline-box { + margin-left: 15px; + } + + .timeline-icon { + position: relative; + + &::before { + content: ''; + position: absolute; + left: -42px; + top: 0; + background: $primary; + clip-path: polygon( + 30% 0%, + 70% 0%, + 100% 30%, + 100% 70%, + 70% 100%, + 30% 100%, + 0% 70%, + 0% 30% + ); + height: 18px; + width: 18px; + } + } + + .timeline-desk { + display: table-cell; + vertical-align: top; + width: 50%; + } + } + + .timeline-item { + display: flex; + + &::before { + content: ''; + display: block; + width: 50%; + } + + &.timeline-item-left { + &::after { + content: ''; + display: block; + width: 50%; + } + + .timeline-desk { + .album { + float: right; + margin-top: 20px; + + a { + float: right; + margin-left: 5px; + } + } + } + + .timeline-icon { + left: auto; + right: -25px; + + &::before { + left: auto; + right: -20px; + } + } + + &::before { + display: none; + } + + .timeline-box { + margin-right: 15px; + margin-left: 0; + text-align: right; + } + } + } +} + +@include media-breakpoint-down(sm) { + .timeline { + .timeline-time { + .time-show { + justify-content: center; + } + } + + .event-date { + float: left !important; + margin-right: 1.5rem; + margin-left: 0 !important; + } + + .timeline-icon { + display: none; + } + } +} diff --git a/apiferia/src/assets/scss/plugins/_apexcharts.scss b/apiferia/src/assets/scss/plugins/_apexcharts.scss new file mode 100644 index 00000000..3c6da5f1 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_apexcharts.scss @@ -0,0 +1,193 @@ +// +// apexcharts.scss +// + +.apex-charts { + min-height: 10px !important; + + text { + font-family: $font-family-base !important; + font-weight: $font-weight-medium; + fill: $headings-color; + } + + .apexcharts-canvas { + margin: 0 auto; + } + + .apexcharts-title-text { + fill: $headings-color; + } +} + +.apexcharts-bar-series { + path { + stroke: $border-color; + } +} + +.apexcharts-gridline { + pointer-events: none; + stroke: var(--#{$prefix}light); +} + +.apexcharts-legend-text { + color: $text-muted !important; +} + +.apexcharts-grid-row { + fill: $input-bg; +} + +.apexcharts-pie-area { + stroke: $border-color; +} + +.apexcharts-tracks { + .apexcharts-radialbar-track { + path { + stroke: var(--#{$prefix}light); + } + } +} + +.apexcharts-tooltip-title, +.apexcharts-tooltip-text { + font-family: $font-family-base !important; +} + +.apexcharts-tooltip { + border: 1px solid $border-color !important; + background-color: $card-bg !important; + box-shadow: $box-shadow !important; + + * { + font-family: $font-family-base !important; + color: var(--#{$prefix}body-color) !important; + } + + .apexcharts-tooltip-title { + background-color: rgba(var(--#{$prefix}light-rgb), 0.75) !important; + border-bottom: 1px solid $border-color !important; + } +} + +.apexcharts-tooltip.apexcharts-theme-dark { + * { + color: $white !important; + } +} + +.apexcharts-legend-series { + font-weight: $font-weight-medium; +} + +.apexcharts-gridline { + pointer-events: none; + stroke: rgba(var(--#{$prefix}light-rgb), 0.75); +} + +.apexcharts-legend-text { + color: var(--#{$prefix}body-color) !important; + font-family: $font-family-base !important; + font-size: 13px !important; +} + +.apexcharts-pie-label { + fill: $white !important; +} + +.apexcharts-title-text, +.apexcharts-subtitle-text { + fill: var(--#{$prefix}link-color); +} + +.apexcharts-yaxis, +.apexcharts-xaxis { + text { + font-family: $font-family-base !important; + fill: var(--#{$prefix}link-color); + } +} + +.apexcharts-yaxis-title { + font-weight: 500; +} + +// column dynamic loaded chart + +#dynamicloadedchart-wrap { + margin: 0px auto; + max-width: 800px; + position: relative; +} + +.chart-box { + padding-left: 0; +} + +#chart-year, +#chart-quarter { + width: 96%; + max-width: 48%; + box-shadow: none; + padding-left: 0; + padding-top: 20px; + background: $card-bg; + border: 1px solid $border-color; +} + +#chart-year { + float: left; + position: relative; + transition: 1s ease transform; + z-index: 3; + + &.chart-quarter-activated { + transform: translateX(0); + transition: 1s ease transform; + } +} + +#chart-quarter { + float: left; + position: relative; + z-index: -2; + transition: 1s ease transform; + + &.active { + transition: 1.1s ease-in-out transform; + transform: translateX(0); + z-index: 1; + } +} + +@media screen and (min-width: 480px) { + #chart-year { + transform: translateX(50%); + } + + #chart-quarter { + transform: translateX(-50%); + } +} + +// radar chart + +.apexcharts-radar-series { + polygon, + line { + stroke: $border-color; + } +} + +.apexcharts-pie { + circle, + line { + stroke: $border-color; + } + + text { + fill: var(--#{$prefix}body-color); + } +} diff --git a/apiferia/src/assets/scss/plugins/_calendar.scss b/apiferia/src/assets/scss/plugins/_calendar.scss new file mode 100644 index 00000000..f3c78511 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_calendar.scss @@ -0,0 +1,412 @@ +// +// calendar.scss +// + +.calendar { + float: left; + margin-bottom: 0; +} + +.none-border { + .modal-footer { + border-top: none; + } +} + +.fc-day-grid-event { + .fc-time { + font-weight: $font-weight-semibold; + } +} + +th.fc-day-header { + padding: 0.5rem 0; +} + +.fc-day { + background: transparent; +} + +.fc-toolbar { + .fc-state-active, + .ui-state-active, + button:focus, + button:hover, + .ui-state-hover { + z-index: 0; + } +} + +.fc { + th.fc-widget-header { + background: var(--#{$prefix}border-color); + font-size: 13px; + line-height: 20px; + padding: 10px 0; + text-transform: uppercase; + font-weight: $font-weight-semibold; + } + + .fc-daygrid-body, + .fc-scrollgrid-section-body table, + .fc-scrollgrid-section-footer table { + width: 100% !important; + } +} + +.fc-unthemed { + th, + td, + thead, + tbody, + .fc-divider, + .fc-row, + .fc-popover { + border-color: var(--#{$prefix}border-color); + } + + td.fc-today, + .fc-divider { + background: var(--#{$prefix}border-color); + } +} + +.fc-button { + background: var(--#{$prefix}border-color); + border: none; + color: var(--#{$prefix}tertiary-color); + text-transform: capitalize; + box-shadow: none; + border-radius: 3px; + margin: 0 3px; + padding: 6px 12px; + height: auto; +} + +.fc-text-arrow { + font-family: inherit; + font-size: 1rem; +} + +.fc-state-hover, +.fc-state-highlight, +.fc-cell-overlay { + background: var(--#{$prefix}border-color); +} + +.fc-state-down, +.fc-state-active, +.fc-state-disabled { + background-color: $primary; + color: $white; + text-shadow: none; +} + +.fc-unthemed { + .fc-today { + background: $white; + } +} + +.fc-event { + border-radius: 2px; + border: none; + cursor: pointer; + font-size: 0.8125rem; + margin: 5px 7px; + padding: 5px 5px; + text-align: center; + color: $white; + + &.bg-dark { + .fc-event-time, + .fc-event-title { + color: var(--#{$prefix}tertiary-bg); + } + + .fc-daygrid-event-dot { + border-color: var(--#{$prefix}tertiary-bg); + } + } +} + +.external-event { + cursor: move; + margin: 10px 0; + padding: 8px 10px; + color: $white; + border-radius: 4px; +} + +.fc-basic-view { + td.fc-week-number { + span { + padding-right: 8px; + } + } + + td.fc-day-number { + padding-right: 8px; + } + + .fc-content { + color: $white; + } +} + +.fc-time-grid-event { + .fc-content { + color: $white; + } +} + +.fc-daygrid-day-number { + float: right; + height: 20px; + width: 20px; + text-align: center; + line-height: 20px; + background-color: var(--#{$prefix}tertiary-bg); + border-radius: 50%; + margin: 5px; + font-size: 11px; + padding: 0 !important; +} + +.fc-daygrid-event-dot { + border-color: $white; +} + +.fc-event-time, +.fc-event-title { + color: $white; +} + +.table-active, +.table-active > td, +.table-active > th, +.fc .fc-list-sticky .fc-list-day > * { + background-color: transparent; +} + +.fc .fc-list-event:hover td { + background-color: inherit; +} + +@include media-breakpoint-down(md) { + .fc-toolbar { + display: block !important; + + .fc-toolbar-chunk { + margin: 6px 0; + } + + .fc-left, + .fc-right, + .fc-center { + float: none; + display: block; + clear: both; + margin: 10px 0; + } + } + + .fc { + .fc-toolbar { + > * { + > * { + float: none; + } + } + } + } + + .fc-today-button { + display: none; + } +} + +// overriding button sizes +.fc-toolbar { + .btn { + @include button-size( + $btn-padding-y-sm, + $btn-padding-x-sm, + $btn-font-size-sm, + $btn-border-radius-sm + ); + } +} + +.fc { + .fc-toolbar { + display: flex; + justify-content: space-between; + align-items: center; + + &.fc-header-toolbar { + margin-bottom: $spacer; + } + + &.fc-footer-toolbar { + margin-top: $spacer; + } + } + + .fc-toolbar-title { + font-size: $font-size-sm; + margin: 0; + } +} + +.fc-direction-ltr .fc-toolbar > * > :not(:first-child) { + margin-left: $spacer * 0.5; +} + +.fc-direction-rtl { + .fc-toolbar > * > :not(:first-child) { + margin-right: $spacer * 0.5; + } + + .fc-toolbar-ltr { + flex-direction: row-reverse; + } +} + +.fc-list-item-title, +.fc-list-item-time { + color: $white; +} + +#calendar { + .table-bordered { + td, + th { + border: var(--#{$prefix}border-width) solid + var(--#{$prefix}border-color); + } + } +} + +[dir='rtl'] .fc-toolbar-chunk { + .btn-group { + .btn { + &:first-child { + border-top-left-radius: 0px !important; + border-bottom-left-radius: 0px !important; + border-radius: $btn-border-radius-sm; + } + + &:last-child { + border-top-right-radius: 0px !important; + border-bottom-right-radius: 0px !important; + border-radius: $btn-border-radius-sm; + } + } + } +} + +.fc { + .fc-button { + overflow: visible; + text-transform: none; + margin: 0; + font-family: inherit; + user-select: none; + background-color: transparent; + border: $btn-border-width solid transparent; + padding: $btn-padding-y $btn-padding-x; + font-size: $btn-font-size; + line-height: 1.5; + border-radius: $btn-border-radius; + + &::-moz-focus-inner { + padding: 0; + border-style: none; + } + + &:focus { + outline: 0; + box-shadow: $btn-focus-box-shadow; + } + } + + .fc-button-primary { + &:focus { + box-shadow: $btn-focus-box-shadow; + } + + &:not(:disabled) { + &.fc-button-active:focus, + &:active:focus { + box-shadow: $btn-focus-box-shadow; + } + } + } + + .fc-button:disabled { + opacity: 0.65; + } + + .fc-button-primary { + color: $white; + background-color: $primary; + border-color: $primary; + + &:hover { + color: $white; + background-color: shade-color($primary, $btn-hover-bg-shade-amount); + border-color: $primary; + } + + &:disabled { + color: $white; + background-color: $secondary; + border-color: $secondary; + } + + &:not(:disabled) { + &.fc-button-active, + &:active { + color: $white; + background-color: shade-color( + $primary, + $btn-hover-bg-shade-amount + ); + border-color: $primary; + } + } + } + + .fc-button .fc-icon { + font-size: $btn-font-size; + top: -1px; + position: relative; + } + + .fc-button-group { + position: relative; + display: inline-flex; + + > .fc-button { + position: relative; + flex: 1 1 auto; + + &.fc-button-active, + &:active, + &:focus, + &:hover { + z-index: 1; + } + } + } +} + +.fc-theme-standard, +.fc-theme-standard { + .fc-list, + td, + th { + border-color: $border-color; + } +} diff --git a/apiferia/src/assets/scss/plugins/_choice.scss b/apiferia/src/assets/scss/plugins/_choice.scss new file mode 100644 index 00000000..869cd55f --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_choice.scss @@ -0,0 +1,259 @@ +// +// _choices.scss +// +@import 'choices.js/src/styles/choices.scss'; + +.choices { + // data-type = select-one + &[data-type*='select-one'] { + cursor: pointer; + + .choices__input { + padding: $input-padding-y $input-padding-x !important; + background-color: $input-bg; + border: 1px solid $input-border-color; + font-size: $input-font-size; + border-radius: $input-border-radius; + color: $input-color; + margin-bottom: 10px; + + &:focus { + border-color: $input-focus-border-color; + } + } + + &:after { + content: '\ea4a'; + position: absolute; + border: 0; + top: 18px; + right: 12px; + left: auto; + font-size: 20px; + font-family: 'boxicons'; + width: auto; + height: auto; + margin-top: 0; + transform: translateY(-50%); + transition: transform 0.2s ease-in-out; + pointer-events: none; + } + + &.is-open:after { + margin-top: 0; + transform: translateY(-50%) rotate(-180deg); + } + + .choices__button { + right: 20px; + } + } + + // data-type = select- multiple & text + &[data-type*='select-multiple'], + &[data-type*='text'] { + .choices__inner { + cursor: text; + padding: $input-padding-y * 0.5 $input-padding-x * 0.5 !important; + } + + .choices__button { + border-left: 1px solid rgba($white, 0.5); + border-right: 0; + } + + .choices__list--dropdown { + padding-bottom: 10px; + + .choices__list { + margin-bottom: 0; + } + } + } + + &[data-type*='select-multiple'] { + .choices__input { + padding-top: 3px; + } + } +} + +// Select Light +.input-light { + .choices__inner { + background-color: var(--#{$prefix}light); + border: none; + } +} + +.choices__inner { + padding: $input-padding-y $input-padding-x !important; + vertical-align: middle; + background-color: $form-select-bg; + border: $form-select-border-width solid $form-select-border-color; + border-radius: $form-select-border-radius !important; + font-size: $input-font-size; + min-height: auto; + + .choices__list--single { + padding: 0 !important; + } +} + +.is-focused, +.is-open { + .choices__inner { + border-color: $input-focus-border-color; + } +} + +.choices__list--multiple { + .choices__item { + vertical-align: initial; + border-radius: 7px; + padding: 2px 7px; + font-size: 11px; + font-weight: $font-weight-normal; + margin: 2px 5px 2px 0; + background-color: $primary; + border: 1px solid $primary; + color: $white; + box-shadow: $box-shadow-lg; + + &.is-highlighted { + background-color: $primary; + border: 1px solid $primary; + } + } +} + +.is-disabled { + .choices__list--multiple { + .choices__item { + background-color: $secondary; + border: 1px solid $secondary; + } + } +} + +.choices.is-disabled .choices__inner, +.choices.is-disabled .choices__input { + background-color: var(--#{$prefix}light); +} + +.choices__list--dropdown { + padding: 10px 10px 20px 10px; + background-color: $card-bg !important; + border: 1px solid $dropdown-border-color !important; + box-shadow: $box-shadow-lg; + margin-top: 0 !important; + border-radius: $dropdown-border-radius; + animation-duration: 0.3s; + animation-fill-mode: both; + transform: translateY(1px); + + &.is-active { + animation-name: DropDownSlide; + } + + .choices__item--selectable.is-highlighted { + background-color: $dropdown-link-hover-bg !important; + } + + .choices__list { + margin: 0 -10px -16px; + + &::-webkit-scrollbar { + -webkit-appearance: none; + } + + &::-webkit-scrollbar:vertical { + width: 12px; + margin-right: 15px; + } + + &::-webkit-scrollbar:horizontal { + height: 12px; + } + + &::-webkit-scrollbar-thumb { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.1); + border-radius: 10px; + border: 2px solid $card-bg; + } + + &::-webkit-scrollbar-track { + border-radius: 10px; + background-color: $card-bg; + } + } + + .has-no-results { + font-style: italic; + font-weight: $font-weight-medium; + } + + .choices__item--selectable:after { + display: none; + } +} + +.is-open { + .choices__list--dropdown { + border-color: transparent; + } +} + +.is-flipped { + .choices__list--dropdown { + &.is-active { + border-radius: $dropdown-border-radius; + animation-name: DropDownSlideDown; + transform: translateY(-1px); + } + } +} + +.choices__list--dropdown { + .choices__list { + max-height: 300px; + } + + .choices__item { + font-size: $dropdown-font-size; + padding: $dropdown-item-padding-y $dropdown-item-padding-x + $dropdown-item-padding-y 16px; + } +} + +.choices__heading { + font-weight: $font-weight-semibold; + padding: 10px 16px; + border-bottom: 1px solid $border-color; + color: $text-muted; +} + +.choices__input { + background-color: $input-bg; + color: $input-color; + font-size: $input-font-size; + margin-bottom: 0; + padding: 2px 0 2px 2px; + + &::placeholder { + color: $input-placeholder-color; + } +} + +.choices__placeholder { + color: $input-placeholder-color; + opacity: 1; +} + +[data-bs-theme='dark'] { + .choices[data-type*='select-one'] { + .choices__button { + filter: $btn-close-white-filter; + } + } +} diff --git a/apiferia/src/assets/scss/plugins/_dragula.scss b/apiferia/src/assets/scss/plugins/_dragula.scss new file mode 100644 index 00000000..36a1007d --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_dragula.scss @@ -0,0 +1,84 @@ +// +// dragula.scss +// + +.gu-mirror { + position: fixed !important; + margin: 0 !important; + z-index: 9999 !important; + opacity: 0.8; +} + +.gu-hide { + display: none !important; +} + +.gu-unselectable { + user-select: none !important; +} + +.gu-transit { + opacity: 0.2; +} + +.dragula-handle { + position: relative; + width: 36px; + height: 36px; + font-size: 24px; + text-align: center; + cursor: move; + + &:before { + content: '\e945'; + font-family: 'Material Symbols Rounded'; + position: absolute; + } +} + +// +.board { + display: block; + white-space: nowrap; + overflow-x: auto; +} + +.tasks { + display: inline-block; + width: 23rem; + padding: 0 $card-spacer-x $card-spacer-y $card-spacer-x; + border: $border-width solid $border-color; + vertical-align: top; + margin-bottom: $spacer; + @include border-radius($card-border-radius); + + &.tasks:not(:last-child) { + margin-right: $spacer; + } + + .card { + white-space: normal; + margin-top: $spacer; + } + + .task-header { + background-color: $primary; + color: $white; + padding: 1rem; + margin: 0 -1.5rem; + } +} + +.task-list-items { + min-height: 100px; + position: relative; + + &::before { + content: 'No Tasks'; + position: absolute; + line-height: 110px; + width: 100%; + text-align: center; + font-weight: $font-weight-semibold; + } +} diff --git a/apiferia/src/assets/scss/plugins/_dropzone.scss b/apiferia/src/assets/scss/plugins/_dropzone.scss new file mode 100644 index 00000000..2511a72d --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_dropzone.scss @@ -0,0 +1,45 @@ +// +// dropzone.scss +// + +.dropzone { + border: 0 !important; + padding: 0 !important; + + .dropzone.dz-wrapper { + border: 2px dashed $input-border-color !important; + background: $input-bg; + border-radius: 6px; + cursor: pointer; + min-height: 200px !important; + padding: 20px !important; + + .dz-message { + text-align: center; + margin: 2rem 0; + height: 115px; + background-color: transparent !important; + border: 0; + overflow: hidden; + scrollbar-width: none; + scroll-behavior: unset; + .dz-text { + font-size: 22px !important; + font-weight: 500; + } + } + &.dz-started { + .dz-message { + display: none; + } + } + } +} +[data-bs-theme] { + .dropzone.dz-wrapper { + border-radius: 0px !important; + } + .dz-message { + color: #313b5e; + } +} diff --git a/apiferia/src/assets/scss/plugins/_editors.scss b/apiferia/src/assets/scss/plugins/_editors.scss new file mode 100644 index 00000000..c8b06b1a --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_editors.scss @@ -0,0 +1,107 @@ +// +// editors.scss +// + +.ql-editor { + text-align: left; + + ol, + ul { + padding-left: 1.5em; + padding-right: 0; + } + + li:not(.ql-direction-rtl)::before { + margin-left: -1.5em; + margin-right: 0.3em; + text-align: right; + } +} + +.ql-container { + font-family: $font-family-base; + + &.ql-snow { + border-color: $input-border-color; + border-radius: 0 0 $input-border-radius $input-border-radius; + } +} + +.ql-bubble { + border: $input-border-width solid $input-border-color; + border-radius: $input-border-radius; +} + +.ql-toolbar { + font-family: $font-family-base !important; + + span { + outline: none !important; + color: $dropdown-link-color; + + &:hover { + color: $primary !important; + } + } + + // button { + // outline: none !important; + // color: $dropdown-link-color; + + // &:hover { + // color: $primary !important; + // } + // } + + &.ql-snow { + border-radius: $input-border-radius $input-border-radius 0 0; + border-color: $input-border-color; + + .ql-picker.ql-expanded { + .ql-picker-label { + border-color: transparent; + } + } + + .ql-picker-options { + box-shadow: $dropdown-box-shadow; + border-radius: $dropdown-border-radius; + } + } +} + +.ql-snow { + .ql-stroke, + .ql-script, + .ql-strike svg { + stroke: $dropdown-link-color; + } + + .ql-fill { + fill: $dropdown-link-color; + } + + .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) { + svg { + right: 0; + left: auto; + } + } + + .ql-picker { + &.ql-expanded .ql-picker-label { + color: $dropdown-link-color; + } + } +} + +.ql-snow { + .ql-picker-options { + background-color: $card-bg; + border-color: $dropdown-border-color !important; + } +} + +.ql-snow .ql-stroke { + stroke: #5d7186 !important; +} diff --git a/apiferia/src/assets/scss/plugins/_flatpicker.scss b/apiferia/src/assets/scss/plugins/_flatpicker.scss new file mode 100644 index 00000000..0f60c0fe --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_flatpicker.scss @@ -0,0 +1,148 @@ +// +// flatpickr.scss +// + +.flatpickr-calendar { + background: $card-bg; + box-shadow: $box-shadow; + border: 1px solid $dropdown-border-color; + + &.arrowTop { + &:before { + border-bottom-color: $card-bg; + } + + &:after { + border-bottom-color: $card-bg; + } + } + + &.arrowBottom { + &:before, + &:after { + border-top-color: $card-bg; + } + } +} + +.flatpickr-current-month { + font-size: 110%; +} + +.flatpickr-day { + &.selected, + &.startRange, + &.endRange, + &.selected.inRange, + &.startRange.inRange, + &.endRange.inRange, + &.selected:focus, + &.startRange:focus, + &.endRange:focus, + &.selected:hover, + &.startRange:hover, + &.endRange:hover, + &.selected.prevMonthDay, + &.startRange.prevMonthDay, + &.endRange.prevMonthDay, + &.selected.nextMonthDay, + &.startRange.nextMonthDay, + &.endRange.nextMonthDay { + background: $primary; + border-color: $primary; + } + + &.selected.startRange + .endRange:not(:nth-child(7n + 1)), + &.startRange.startRange + .endRange:not(:nth-child(7n + 1)), + &.endRange.startRange + .endRange:not(:nth-child(7n + 1)) { + box-shadow: -10px 0 0 $primary; + } +} + +.flatpickr-time { + input:hover, + .flatpickr-am-pm:hover, + input:focus, + .flatpickr-am-pm:focus { + background: $input-bg; + color: $dropdown-link-active-color; + } +} + +.flatpickr-months { + .flatpickr-month { + height: 36px; + } + + .flatpickr-prev-month, + .flatpickr-next-month, + .flatpickr-month { + color: var(--#{$prefix}link-color); + fill: var(--#{$prefix}link-color); + } +} + +.flatpickr-weekdays { + background-color: $dropdown-link-active-bg; +} + +span.flatpickr-weekday, +.flatpickr-day, +.flatpickr-current-month input.cur-year[disabled], +.flatpickr-current-month input.cur-year[disabled]:hover, +.flatpickr-time input, +.flatpickr-time .flatpickr-time-separator, +.flatpickr-time .flatpickr-am-pm { + color: $dropdown-link-color; + fill: $dropdown-link-color; +} + +.flatpickr-day { + &.disabled, + &.disabled:hover, + &.prevMonthDay, + &.nextMonthDay, + &.notAllowed, + &.notAllowed.prevMonthDay, + &.notAllowed.nextMonthDay { + color: $dropdown-link-disabled-color; + } + + &.inRange, + &.prevMonthDay.inRange, + &.nextMonthDay.inRange, + &.today.inRange, + &.prevMonthDay.today.inRange, + &.nextMonthDay.today.inRange, + &:hover, + &.prevMonthDay:hover, + &.nextMonthDay:hover, + &:focus, + &.prevMonthDay:focus, + &.nextMonthDay:focus { + background: $dropdown-link-hover-bg; + border-color: $dropdown-link-hover-bg; + } +} + +.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time, +.flatpickr-calendar.hasTime .flatpickr-time { + border-top: 1px solid $card-bg; +} + +.numInputWrapper:hover, +.flatpickr-current-month .flatpickr-monthDropdown-months:hover { + background-color: transparent; + color: $dropdown-link-active-color; +} + +.flatpickr-day.inRange { + box-shadow: + -5px 0 0 $dropdown-link-hover-bg, + 5px 0 0 $dropdown-link-hover-bg; +} + +.flatpickr-day.flatpickr-disabled, +.flatpickr-day.flatpickr-disabled:hover { + color: $dropdown-link-disabled-color; +} diff --git a/apiferia/src/assets/scss/plugins/_google-map.scss b/apiferia/src/assets/scss/plugins/_google-map.scss new file mode 100644 index 00000000..cc573330 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_google-map.scss @@ -0,0 +1,28 @@ +// +// google-map.scss +// + +.gmaps, +.gmaps-panaroma { + height: 300px; + background: $gray-100; + border-radius: 3px; +} + +.mapouter { + position: relative; + text-align: right; + width: 100%; + height: 400px; +} + +.gmap_canvas { + overflow: hidden; + background: none !important; + width: 100%; + height: 400px; +} + +.gmap_iframe { + height: 400px !important; +} diff --git a/apiferia/src/assets/scss/plugins/_gridjs.scss b/apiferia/src/assets/scss/plugins/_gridjs.scss new file mode 100644 index 00000000..6a87e6b6 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_gridjs.scss @@ -0,0 +1,268 @@ +// +// _gridjs.scss +// + +.gridjs-container { + color: var(--#{$prefix}body-color); + padding: 0; + display: block; +} + +.gridjs-wrapper { + box-shadow: none; + border: 1px solid var(--#{$prefix}border-color); + border-radius: 0px; + + &::-webkit-scrollbar { + -webkit-appearance: none; + } + + &::-webkit-scrollbar:vertical { + width: 5px; + padding: 5px; + } + + &::-webkit-scrollbar:horizontal { + height: 5px; + } + + &::-webkit-scrollbar-thumb { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.075); + border-radius: 10px; + padding: 5px; + border: none; + } + + &::-webkit-scrollbar-track { + border-radius: 10px; + background-color: transparent; + } +} + +.gridjs-footer { + border: none !important; + padding: 12px 0 0; +} + +.gridjs-table { + width: 100%; + table-layout: auto !important; +} + +.gridjs-tbody, +td.gridjs-td { + background-color: $table-bg; +} + +th.gridjs-th { + border: 1px solid var(--#{$prefix}border-color); + padding: $table-cell-padding-y * 0.5 $table-cell-padding-x; +} + +td.gridjs-td { + border: 1px solid var(--#{$prefix}border-color); + padding: $table-cell-padding-y $table-cell-padding-x; +} + +th { + &.gridjs-th { + border-top: 0; + color: var(--#{$prefix}body-color); + background-color: rgba(var(--#{$prefix}light-rgb), 0.75); + } + + &.gridjs-th-sort { + &:focus, + &:hover { + background-color: rgba(var(--#{$prefix}light-rgb), 0.85); + } + } +} + +.gridjs-head { + padding-top: 0; +} + +.gridjs-footer { + box-shadow: none; + border: 1px solid var(--#{$prefix}border-color); + border-top: 0; + background-color: $table-bg; +} + +.gridjs-summary { + color: $text-muted; + margin-top: 8px !important; +} + +.gridjs-pagination { + .gridjs-pages button { + background-color: transparent; + color: var(--#{$prefix}link-color); + border: $border-width solid var(--#{$prefix}border-color); + border-right: none; + outline: none; + padding: $pagination-padding-y $pagination-padding-x; + user-select: none; + + &:last-child { + border-right: 1px solid var(--#{$prefix}border-color); + } + + &:disabled, + &:hover:disabled, + &[disabled] { + color: var(--#{$prefix}body-color); + background-color: $card-bg; + } + + &:hover { + background-color: $card-bg; + color: var(--#{$prefix}link-hover-color); + } + + &:focus { + box-shadow: none; + } + + &:last-child, + &:first-child { + &:hover { + background-color: transparent; + } + } + + &.gridjs-currentPage { + background-color: $component-active-bg; + color: $component-active-color; + border-color: $component-active-bg; + font-weight: $font-weight-medium; + } + } +} + +.gridjs-search { + position: relative; + float: left; + + &::before { + content: '\ebf7'; + font-family: 'boxicons'; + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 10px; + font-size: 18px; + color: $text-muted; + } +} + +input.gridjs-input { + border-color: $input-border-color; + background-color: $input-bg; + color: $input-color; + line-height: $input-line-height; + padding: $input-padding-y $input-padding-x $input-padding-y $input-padding-x * + 2.5; + border-radius: $input-border-radius; + @include font-size($input-font-size); + + &:focus { + box-shadow: none; + border-color: $input-focus-border-color; + background-color: $input-focus-bg; + } + + &::placeholder { + color: $input-placeholder-color; + } +} + +th.gridjs-th { + .gridjs-th-content { + float: none; + display: inline-block; + vertical-align: middle; + font-weight: $font-weight-semibold; + } +} + +button.gridjs-sort { + float: none; + display: inline-block; + vertical-align: middle; + width: 10px; + height: 20px; +} + +th.gridjs-th-sort .gridjs-th-content { + width: calc(100% - 10px); +} + +button { + &.gridjs-sort-asc, + &.gridjs-sort-desc { + background-size: 7px; + } +} + +// gridjs selection +.gridjs-tr-selected { + td { + background-color: $table-active-bg; + } + + .gridjs-td .gridjs-checkbox[type='checkbox'] { + background-color: $form-check-input-checked-bg-color; + border-color: $form-check-input-checked-border-color; + + @if $enable-gradients { + background-image: escape-svg($form-check-input-checked-bg-image), + var(--#{$prefix}gradient); + } @else { + background-image: escape-svg($form-check-input-checked-bg-image); + } + } +} + +.gridjs-td { + .gridjs-checkbox { + width: $form-check-input-width; + height: $form-check-input-width; + vertical-align: top; + background-color: $form-check-input-bg; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + border: $form-check-input-border; + appearance: none; + // color-adjust: exact; // Keep themed appearance for print + @include transition($form-check-transition); + + &[type='checkbox'] { + @include border-radius($form-check-input-border-radius); + } + } +} + +.gridjs-border-none { + td.gridjs-td, + th.gridjs-th { + border-right-width: 0; + border-left-width: 0; + } +} + +.gridjs-loading-bar { + background-color: $card-bg; +} + +[data-bs-theme='dark'] { + button { + &.gridjs-sort-neutral, + &.gridjs-sort-asc, + &.gridjs-sort-desc { + filter: $btn-close-white-filter; + } + } +} diff --git a/apiferia/src/assets/scss/plugins/_prismjs.scss b/apiferia/src/assets/scss/plugins/_prismjs.scss new file mode 100644 index 00000000..05cc07ce --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_prismjs.scss @@ -0,0 +1,134 @@ +// +// _prismjs.scss +// + +:not(pre) > code[class*='language-'], +pre[class*='language-'] { + background: transparent; +} + +code[class*='language-'], +pre[class*='language-'] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 14px; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; +} + +pre[class*='language-']::selection, +pre[class*='language-'] ::selection, +code[class*='language-']::selection, +code[class*='language-'] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*='language-'], + pre[class*='language-'] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*='language-'] { + padding: 1em; + margin: 0; + overflow: auto; +} + +/* Inline code */ +:not(pre) > code[class*='language-'] { + padding: 0.1em; + border-radius: 0.3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: $primary; +} + +.token.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: $primary; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: $success; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: transparent; +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: $danger; +} + +.token.function, +.token.class-name { + color: #dd4a68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} + +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +code[class*='language-'], +pre[class*='language-'] { + color: var(--#{$prefix}body-color); + text-shadow: none; +} diff --git a/apiferia/src/assets/scss/plugins/_range-slider.scss b/apiferia/src/assets/scss/plugins/_range-slider.scss new file mode 100644 index 00000000..45504a02 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_range-slider.scss @@ -0,0 +1,307 @@ +// +// _range-slider.scss +// + +.noUi-connect { + background: $primary; +} + +.noUi-handle { + background: $primary; + border: 2px solid $card-bg; + box-shadow: none; +} + +.noUi-horizontal { + height: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + border-radius: 50%; + right: -10px !important; + top: -7px; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } +} + +.noUi-pips-horizontal { + height: 50px; +} + +// tooltip + +.noUi-tooltip { + padding: $tooltip-padding-y $tooltip-padding-x; + border-color: $border-color; + border-radius: $tooltip-border-radius; + background-color: $card-bg; + color: var(--#{$prefix}body-color); +} + +// Vertical Slider + +.noUi-vertical { + width: 8px; + + .noUi-handle { + height: 20px; + width: 20px; + right: -8px; + top: -12px; + left: auto; + border-radius: 50%; + + &::before, + &::after { + display: none; + } + + &:focus { + outline: 0; + } + } + + .noUi-origin { + top: 0; + } +} + +.noUi-value { + font-size: 12px; +} + +.noUi-marker-horizontal { + &.noUi-marker-large { + height: 12px; + } +} + +.noUi-value-horizontal { + padding-top: 4px; +} + +.noUi-target { + box-shadow: none; + background-color: var(--#{$prefix}light); + border-color: var(--#{$prefix}light); +} + +.noUi-touch-area { + &:focus { + outline: 0; + } +} + +// Colorpicker + +#red, +#green, +#blue { + margin: 10px; + display: inline-block; + height: 200px; +} + +#colorpicker { + height: 240px; + width: 310px; + margin: 0 auto; + padding: 10px; + border: 1px solid $border-color; +} + +#result { + margin: 60px 26px; + height: 100px; + width: 100px; + display: inline-block; + vertical-align: top; + border: 1px solid $border-color; + box-shadow: 0 0 3px; + border-radius: 7px; +} + +#red { + .noUi-connect { + background: $danger; + } +} + +#green { + .noUi-connect { + background: $success; + } +} + +#blue { + .noUi-connect { + background: $primary; + } +} + +// Adding keyboard support + +.form-control { + &.keyboard { + max-width: 340px !important; + } +} + +// Non linear slider + +.example-val { + font-size: 12px; + color: $text-muted; + display: block; + margin: 15px 0; + + &:before { + content: 'Value: '; + font-size: 12px; + font-weight: 600; + } +} + +// showing tooltips + +.noUi-tooltip { + display: none; +} + +.noUi-active .noUi-tooltip { + display: block; +} + +// Colored Connect Elements + +.c-1-color { + background: $danger; +} + +.c-2-color { + background: $warning; +} + +.c-3-color { + background: $success; +} + +.c-4-color { + background: $primary; +} + +.c-5-color { + background: $purple; +} + +// slider togle + +#slider-toggle { + height: 50px; + + &.off { + .noUi-handle { + border-color: $danger; + } + } +} + +// rangeslider color + +@each $color, $value in $theme-colors { + [data-slider-color='#{$color}'] { + .noUi-connect { + background: $value; + } + + .noUi-handle { + background: $value; + } + + &[data-slider-style='border'], + &[data-slider-style='square'] { + .noUi-handle { + border-color: $value; + } + } + } +} + +// rangeslider sizes + +[data-slider-size='lg'] { + &.noUi-horizontal { + height: 12px; + + .noUi-handle { + width: 24px; + height: 24px; + } + } +} + +[data-slider-size='md'] { + &.noUi-horizontal { + height: 8px; + + .noUi-handle { + width: 20px; + height: 20px; + } + } +} + +[data-slider-size='sm'] { + &.noUi-horizontal { + height: 4px; + + .noUi-handle { + width: 16px; + height: 16px; + } + } +} + +// rangeslider style + +[data-slider-style='line'] { + &.noUi-horizontal .noUi-handle { + width: 8px; + border-radius: 4px; + right: -8px; + } + + &.noUi-vertical .noUi-handle { + height: 8px; + border-radius: 4px; + top: -3px; + } +} + +[data-slider-style='border'] { + .noUi-handle { + border-color: $primary; + background-color: $card-bg; + } +} + +[data-slider-style='square'] { + .noUi-handle { + border-radius: 0px; + transform: rotate(45deg); + height: 10px; + width: 10px; + top: -4px; + border-color: $primary; + background-color: $card-bg; + } +} diff --git a/apiferia/src/assets/scss/plugins/_simplebar.scss b/apiferia/src/assets/scss/plugins/_simplebar.scss new file mode 100644 index 00000000..9f19cda1 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_simplebar.scss @@ -0,0 +1,240 @@ +// +// simplebar.scss +// + +[data-simplebar] { + position: relative !important; + flex-direction: column !important; + flex-wrap: wrap !important; + justify-content: flex-start !important; + align-content: flex-start !important; + align-items: flex-start !important; +} + +.simplebar-wrapper { + overflow: hidden !important; + width: inherit !important; + height: inherit !important; + max-width: inherit !important; + max-height: inherit !important; +} + +.simplebar-mask { + direction: inherit !important; + position: absolute !important; + overflow: hidden !important; + padding: 0 !important; + margin: 0 !important; + left: 0 !important; + top: 0 !important; + bottom: 0 !important; + right: 0 !important; + width: auto !important; + height: auto !important ; + z-index: 0 !important; +} + +.simplebar-offset { + direction: inherit !important; + box-sizing: inherit !important; + resize: none !important; + position: absolute !important; + top: 0 !important; + left: 0 !important; + bottom: 0 !important; + right: 0 !important; + padding: 0 !important; + margin: 0 !important; + -webkit-overflow-scrolling: touch !important; +} + +.simplebar-content-wrapper { + direction: inherit !important; + box-sizing: border-box !important; + position: relative !important; + display: block !important; + height: 100% !important; + /* Required for horizontal native scrollbar to not appear if parent is taller than natural height */ + width: auto !important; + visibility: visible !important; + overflow: auto !important; + /* Scroll on this element otherwise element can't have a padding applied properly */ + max-width: 100% !important; + /* Not required for horizontal scroll to trigger */ + max-height: 100% !important; + /* Needed for vertical scroll to trigger */ + scrollbar-width: none !important; +} + +.simplebar-content-wrapper::-webkit-scrollbar, +.simplebar-hide-scrollbar::-webkit-scrollbar { + display: none !important; +} + +.simplebar-content:before, +.simplebar-content:after { + content: ' ' !important; + display: table !important; +} + +.simplebar-placeholder { + max-height: 100% !important; + max-width: 100% !important; + width: 100% !important; + pointer-events: none !important; +} + +.simplebar-height-auto-observer-wrapper { + box-sizing: inherit !important; + height: 100% !important; + width: 100% !important; + max-width: 1px !important; + position: relative !important; + float: left !important; + max-height: 1px !important; + overflow: hidden !important; + z-index: -1 !important; + padding: 0 !important; + margin: 0 !important; + pointer-events: none !important; + flex-grow: inherit !important; + flex-shrink: 0 !important; + flex-basis: 0 !important; +} + +.simplebar-height-auto-observer { + box-sizing: inherit !important; + display: block !important; + opacity: 0 !important; + position: absolute !important; + top: 0 !important; + left: 0 !important; + height: 1000% !important; + width: 1000% !important; + min-height: 1px !important; + min-width: 1px !important; + overflow: hidden !important; + pointer-events: none !important; + z-index: -1 !important; +} + +.simplebar-track { + z-index: 1 !important; + position: absolute !important; + right: 0 !important; + bottom: 0 !important; + pointer-events: none !important; + overflow: hidden !important; +} + +[data-simplebar].simplebar-dragging .simplebar-content { + pointer-events: none !important; + user-select: none !important; + -webkit-user-select: none !important; +} + +[data-simplebar].simplebar-dragging .simplebar-track { + pointer-events: all !important; +} + +.simplebar-scrollbar { + position: absolute !important; + right: 2px !important; + width: 5px !important; + min-height: 10px !important; +} + +.simplebar-scrollbar:before { + position: absolute !important; + content: '' !important; + background: #a2adb7 !important; + border-radius: 7px !important; + left: 0 !important; + right: 0 !important; + opacity: 0 !important; + transition: opacity 0.2s linear !important; +} + +.simplebar-scrollbar.simplebar-visible:before { + /* When hovered, remove all transitions from drag handle */ + opacity: 0.5 !important; + transition: opacity 0s linear !important; +} + +.simplebar-track.simplebar-vertical { + top: 0 !important; + width: 11px !important; +} + +.simplebar-track.simplebar-vertical .simplebar-scrollbar:before { + top: 2px !important; + bottom: 2px !important; +} + +.simplebar-track.simplebar-horizontal { + left: 0 !important; + height: 11px !important; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar:before { + height: 100% !important; + left: 2px !important; + right: 2px !important; +} + +.simplebar-track.simplebar-horizontal .simplebar-scrollbar { + right: auto !important; + left: 0 !important; + top: 2px !important; + height: 7px !important; + min-height: 0 !important; + min-width: 10px !important; + width: auto !important; +} + +/* Rtl support */ +[data-simplebar-direction='rtl'] .simplebar-track.simplebar-vertical { + right: auto !important; + left: 0 !important; +} + +.hs-dummy-scrollbar-size { + direction: rtl !important; + position: fixed !important; + opacity: 0 !important; + visibility: hidden !important; + height: 500px !important; + width: 500px !important; + overflow-y: hidden !important; + overflow-x: scroll !important; +} + +.simplebar-hide-scrollbar { + position: fixed !important; + left: 0 !important; + visibility: hidden !important; + overflow-y: scroll !important; + scrollbar-width: none !important; +} + +.custom-scroll { + height: 100% !important; +} + +// Scroll Size +[data-simplebar-lg] { + .simplebar-scrollbar { + right: 1px !important; + width: 10px !important; + } +} + +@each $color, $value in $theme-colors { + [data-simplebar-#{$color}] { + .simplebar-scrollbar { + &:before { + background: $value !important; + } + } + } +} diff --git a/apiferia/src/assets/scss/plugins/_sweetalert.scss b/apiferia/src/assets/scss/plugins/_sweetalert.scss new file mode 100644 index 00000000..b476b62f --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_sweetalert.scss @@ -0,0 +1,100 @@ +// +// SweetAlert2.scss +// + +// Popup +.swal2-popup { + background-color: $card-bg; + @include border-radius($border-radius); + + .swal2-title { + font-weight: 500; + font-size: 1.3rem; + color: var(--#{$prefix}dark); + } + + .swal2-html-container, + .swal2-content { + font-weight: normal; + font-size: 1.1rem; + margin-top: 1.5rem; + color: var(--#{$prefix}tertiary-color); + } + + .swal2-footer { + border-top-color: var(--#{$prefix}border-color) !important; + } + + .btn { + margin: 15px 5px 0; + } + + .swal2-styled { + &:focus { + box-shadow: none; + } + } + + .swal2-actions { + margin: 1.5rem auto 1rem auto; + } +} + +// Container +.swal2-container { + &.swal2-shown { + background-color: var(--#{$prefix}tertiary-color); + opacity: 0.5; + } + + // Content + .swal2-html-container { + max-height: 200px; + overflow: auto; + } +} + +// State Colors +.swal2-icon { + // Warning + &.swal2-warning { + border-color: $warning; + color: $warning; + } + + // Error + &.swal2-error { + border-color: $danger; + color: $danger; + + [class^='swal2-x-mark-line'] { + background-color: rgba($danger, 0.75); + } + } + + // Success + &.swal2-success { + border-color: $success; + color: $success; + + [class^='swal2-success-line'] { + background-color: $success; + } + + .swal2-success-ring { + border-color: rgba($success, 0.3); + } + } + + // Info + &.swal2-info { + border-color: $info; + color: $info; + } + + // Question + &.swal2-question { + border-color: $primary; + color: $primary; + } +} diff --git a/apiferia/src/assets/scss/plugins/_swiper.scss b/apiferia/src/assets/scss/plugins/_swiper.scss new file mode 100644 index 00000000..01440a53 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_swiper.scss @@ -0,0 +1,127 @@ +// +// swiper.scss +// + +.swiper-button-next, +.swiper-button-prev { + height: 32px; + width: 32px; + background-color: rgba($primary, 0.2); + backdrop-filter: blur(2px); + border-radius: 8px; + + &::after { + font-family: 'boxicons'; + font-size: 28px; + color: rgba($primary, 1); + transition: all 0.3s ease; + } +} + +.swiper-button-prev { + &::after { + content: '\ea4d' !important; + } +} + +.swiper-button-next { + &::after { + content: '\ea50' !important; + } +} + +.swiper-pagination-bullet { + width: 22px; + height: 5px; + background-color: $white; + border-radius: 50px; + + .swiper-pagination-bullet-active { + opacity: 1; + } +} + +.dynamic-pagination { + .swiper-pagination-bullet { + width: 8px; + height: 8px; + background-color: $white; + opacity: 0.5; + transition: all 0.5s ease; + + &.swiper-pagination-bullet-active { + opacity: 1; + width: 20px; + } + } +} + +.swiper-pagination-fraction { + color: $white; + font-size: 16px; + background-color: rgba($black, 0.3); + backdrop-filter: blur(2px); +} + +.pagination-custom { + .swiper-pagination-bullet { + height: 25px; + width: 25px; + line-height: 25px; + border-radius: 8px; + background-color: $white; + opacity: 0.5; + transition: all 0.5s ease; + + &.swiper-pagination-bullet-active { + color: $secondary; + opacity: 1; + } + } +} + +.swiper-pagination-progressbar { + height: 6px !important; + background-color: rgba($success, 0.25); + + .swiper-pagination-progressbar-fill { + background-color: $success; + } +} + +.swiper-scrollbar { + background-color: rgba($white, 0.35); + backdrop-filter: blur(2px); + padding: 1.2px; + height: 6px !important; + + .swiper-scrollbar-drag { + background-color: $white; + } +} + +.swiper-pagination-dark { + .swiper-pagination-bullet { + background-color: $secondary; + } + + .dynamic-pagination { + .swiper-pagination-bullet { + background-color: $secondary; + } + } + + &.pagination-custom { + .swiper-pagination-bullet { + color: $white; + + &.swiper-pagination-bullet-active { + opacity: 1; + } + } + } + + &.swiper-scrollbar { + background-color: rgba(var(--#{$prefix}dark-rgb), 0.35); + } +} diff --git a/apiferia/src/assets/scss/plugins/_toastify.scss b/apiferia/src/assets/scss/plugins/_toastify.scss new file mode 100644 index 00000000..0f2325d3 --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_toastify.scss @@ -0,0 +1,83 @@ +// +// _toastify.scss (https://github.com/apvarun/toastify-js) +// + +.toastify { + padding: 12px 20px; + color: #ffffff; + display: inline-block; + box-shadow: + 0 3px 6px -1px rgba(0, 0, 0, 0.12), + 0 10px 36px -4px rgba(77, 96, 232, 0.3); + background: $success; + position: fixed; + opacity: 0; + transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1); + border-radius: 2px; + cursor: pointer; + text-decoration: none; + max-width: calc(50% - 20px); + z-index: 2147483647; +} + +.toastify.on { + opacity: 1; +} + +.toast-close { + background: transparent; + border: 0; + color: white; + cursor: pointer; + font-family: inherit; + font-size: 1em; + opacity: 0.4; + padding: 0 5px; +} + +.toastify-right { + right: 15px; +} + +.toastify-left { + left: 15px; +} + +.toastify-top { + top: -150px; +} + +.toastify-bottom { + bottom: -150px; +} + +.toastify-rounded { + border-radius: 25px; +} + +.toastify-avatar { + width: 1.5em; + height: 1.5em; + margin: -7px 5px; + border-radius: 2px; +} + +.toastify-center { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + max-width: -moz-fit-content; +} + +@media only screen and (max-width: 360px) { + .toastify-right, + .toastify-left { + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + max-width: fit-content; + } +} diff --git a/apiferia/src/assets/scss/plugins/_vector-map.scss b/apiferia/src/assets/scss/plugins/_vector-map.scss new file mode 100644 index 00000000..8048a2af --- /dev/null +++ b/apiferia/src/assets/scss/plugins/_vector-map.scss @@ -0,0 +1,142 @@ +// +// vector-map.scss +// + +svg { + touch-action: none; +} + +.jvm-marker { + font-family: $font-family-base; + font-size: $font-size-base; + fill: var(--#{$prefix}body-color); +} + +image, +text, +.jvm-zoomin, +.jvm-zoomout { + user-select: none; +} + +.jvm-container { + touch-action: none; + position: relative; + overflow: hidden; + height: 100%; + width: 100%; +} + +.jvm-tooltip { + border-radius: $tooltip-border-radius; + background-color: $tooltip-bg; + font-family: $font-family-sans-serif; + font-size: $tooltip-font-size; + box-shadow: none; + padding: $tooltip-padding-y $tooltip-padding-x; + white-space: nowrap; + position: absolute; + display: none; + color: $tooltip-color; +} + +.jvm-zoom-btn { + border-radius: $btn-border-radius; + background-color: $secondary; + border-color: $black; + color: $white; + font-size: $font-size-base; + font-weight: $btn-font-weight; + padding: $btn-padding-y-sm $btn-padding-x-sm; + box-sizing: border-box; + position: absolute; + line-height: $btn-line-height; + cursor: pointer; + left: 0; + + &.jvm-zoomout { + top: 55px; + } + + &.jvm-zoomin { + top: 10px; + } +} + +.jvm-series-container { + right: 15px; + position: absolute; + + &.jvm-series-h { + bottom: 15px; + } + + &.jvm-series-v { + top: 15px; + } + + .jvm-legend { + background-color: #fff; + border: $border-width solid $border-color; + margin-left: 0.75rem; + border-radius: $border-radius; + border-color: $border-color; + padding: 0.6rem; + box-shadow: none; + float: left; + + .jvm-legend-title { + line-height: 1; + border-bottom: $border-width solid $border-color; + padding-bottom: 0.5rem; + margin-bottom: 0.575rem; + text-align: left; + } + + .jvm-legend-inner { + overflow: hidden; + + .jvm-legend-tick { + overflow: hidden; + min-width: 40px; + + &:not(:first-child) { + margin-top: 0.575rem; + } + + .jvm-legend-tick-sample { + border-radius: 4px; + margin-right: 0.65rem; + height: 16px; + width: 16px; + float: left; + } + + .jvm-legend-tick-text { + font-size: 12px; + text-align: center; + float: left; + } + } + } + } +} + +.jvectormap-label { + border: none; + background: var(--#{$prefix}dark); + color: var(--#{$prefix}dark); + font-family: $font-family-sans-serif; + font-size: $font-size-base; + padding: 5px 8px; +} + +.jvm-line[animation='true'] { + animation: jvm-line-animation 10s linear forwards infinite; +} + +@keyframes jvm-line-animation { + from { + stroke-dashoffset: 250; + } +} diff --git a/apiferia/src/assets/scss/structure/_footer.scss b/apiferia/src/assets/scss/structure/_footer.scss new file mode 100644 index 00000000..4a06566d --- /dev/null +++ b/apiferia/src/assets/scss/structure/_footer.scss @@ -0,0 +1,41 @@ +// +// _footer.scss +// + +.footer { + bottom: 0; + right: 0; + left: 0; + position: absolute; + display: flex; + align-items: center; + padding: 0 calc(#{$spacer} * 0.5); + color: $footer-color; + height: $footer-height; + background-color: $card-bg; + box-shadow: $box-shadow; +} + +.footer-text { + background: linear-gradient( + to right, + $primary 10%, + $warning 50%, + $success 60% + ); + background-size: auto auto; + background-clip: border-box; + background-size: 200% auto; + background-clip: text; + text-fill-color: transparent; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + animation: textclip 2.5s linear infinite; + display: inline-block; +} + +@keyframes textclip { + to { + background-position: 200% center; + } +} diff --git a/apiferia/src/assets/scss/structure/_page-title.scss b/apiferia/src/assets/scss/structure/_page-title.scss new file mode 100644 index 00000000..691edc84 --- /dev/null +++ b/apiferia/src/assets/scss/structure/_page-title.scss @@ -0,0 +1,13 @@ +// +// Page-title +// + +.page-title-box { + padding-bottom: $spacer; + background-color: transparent; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + gap: $spacer * 0.5; +} diff --git a/apiferia/src/assets/scss/structure/_topbar.scss b/apiferia/src/assets/scss/structure/_topbar.scss new file mode 100644 index 00000000..1bd7c05a --- /dev/null +++ b/apiferia/src/assets/scss/structure/_topbar.scss @@ -0,0 +1,141 @@ +// +// topbar.scss +// + +.topbar { + top: 0; + z-index: 1005; + position: sticky; + transition: all 0.3s ease-in-out; + height: $topbar-height; + background-color: $topbar-bg; + box-shadow: $box-shadow; + padding-left: $main-nav-width; + border-bottom: #{$card-border-width} solid #{$card-border-color}; + + .navbar-header { + display: flex; + margin: 0 auto; + align-items: center; + justify-content: space-between; + } + + // Search + .app-search { + .form-control { + border: none; + padding-left: 40px; + padding-right: 15px; + background-color: $topbar-search-bg; + box-shadow: none; + height: 38px; + } + + .search-widget-icon { + position: absolute; + z-index: 10; + font-size: 18px; + left: 11px; + top: 50%; + color: $gray-500; + transform: translateY(-50%); + cursor: pointer; + } + + .search-widget-icon-close { + right: 7px; + left: auto !important; + } + } + + .topbar-item { + display: flex; + align-items: center; + justify-content: center; + height: $topbar-height; + + .button-toggle-menu { + border: none; + border-radius: 0; + color: $topbar-item-color; + background-color: transparent; + + &.active, + &:active, + &:hover, + &:focus { + color: $topbar-item-color; + background-color: transparent; + } + } + + .topbar-button { + border: none; + border-radius: 50%; + background: transparent; + transition: all 0.3s ease-in-out; + color: $topbar-item-color; + padding: $btn-padding-y $btn-padding-y; + position: relative; + + &.show, + &.active, + &:active, + &:hover { + color: $primary; + } + } + } + + .topbar-badge { + right: -7px; + top: 7px !important; + } +} + +// fullscreen exit icon +.fullscreen-enable { + .bx-fullscreen::before { + transition: all 0.3s ease-in-out; + content: '\eacb'; + } +} + +// Dark Mode Icon +html[data-bs-theme='dark'] { + .topbar { + #light-dark-mode { + i { + &::before { + transition: all 0.3s ease-in-out; + content: '\eebe'; + } + } + } + } +} + +html[data-menu-size='hidden'] { + .topbar { + padding: 0 $spacer; + } +} + +// @include media-breakpoint-down(md) { +@media (max-width: 375px) { + .topbar { + padding: 0 0.5 * $spacer !important; + } +} + +@media (max-width: 600px) { + .topbar { + .dropdown { + position: static; + + .dropdown-menu { + width: 100%; + } + } + } +} diff --git a/apiferia/src/assets/scss/structure/_vertical.scss b/apiferia/src/assets/scss/structure/_vertical.scss new file mode 100644 index 00000000..91f4bf8c --- /dev/null +++ b/apiferia/src/assets/scss/structure/_vertical.scss @@ -0,0 +1,595 @@ +// +// _vertical.scss +// + +// Logo +.logo-box { + position: sticky; + overflow: hidden; + text-align: center; + white-space: nowrap; + transition: all 0.3s ease-in-out; + line-height: $topbar-height; + padding: 0 calc($main-nav-width-sm * 0.5 - $logo-sm-height * 0.5); + + .logo-sm { + display: inline-block; + height: $logo-sm-height; + } + + .logo-lg { + margin-left: 6px; + height: $logo-lg-height; + } + + .logo-light { + display: none; + } + + .logo-dark { + display: block; + } +} + +.wrapper { + width: 100%; + height: 100%; + position: relative; + + // Main Nav + .main-nav { + top: 0; + bottom: 0; + z-index: 1010; + margin-left: 0; + position: fixed; + transition: all 0.3s ease-in-out; + width: $main-nav-width; + background: $main-nav-bg; + min-width: $main-nav-width; + padding-bottom: $spacer; + box-shadow: $box-shadow; + border-right: $card-border-width solid $main-nav-border-color; + + .scrollbar { + height: calc(100% - $topbar-height); + } + + .menu-arrow { + &::after { + right: calc($main-nav-item-padding-x * 1); + display: block; + content: '\ea4a'; + font-family: boxicons; + margin-left: auto; + position: absolute; + transition: transform 0.2s; + color: $main-nav-item-color; + font-size: calc($main-nav-item-font-size * 1.25); + opacity: 0.6; + } + + &[aria-expanded='true'] { + &::after { + transform: rotate(-180deg); + color: $main-nav-item-hover-color; + } + + &::before { + opacity: 1; + color: $main-nav-item-hover-color; + } + } + } + + .menu-title { + cursor: default; + font-size: 11px; + letter-spacing: 0.05em; + text-transform: uppercase; + color: $main-nav-item-color; + opacity: 0.6; + font-weight: $font-weight-semibold; + padding: $main-nav-item-padding-y + calc($main-nav-item-padding-x * 1.25); + transition: all 0.3s ease-in-out; + height: 36px; + } + + .navbar-nav { + .nav-item { + padding: calc($main-nav-item-padding-y * 0.1) 0; + + .nav-link { + display: flex; + gap: 12px; + line-height: 1; + font-weight: 400; + align-items: center; + white-space: nowrap; + transition: all 0.3s ease-in-out; + color: $main-nav-item-color; + font-size: $main-nav-item-font-size; + padding: $main-nav-item-padding-y $main-nav-item-padding-x; + border-left: 3px solid transparent; + + &.active { + font-weight: $font-weight-medium; + border-left-color: var(--#{$prefix}primary); + + .nav-icon { + color: var(--#{$prefix}primary); + } + } + + &.show, + &.active, + &:active, + &:hover, + &:focus { + color: $main-nav-item-hover-color; + background-color: $main-nav-item-hover-bg; + background-image: linear-gradient( + 90deg, + rgba(255, 255, 255, 0.1) 0%, + rgba(246, 246, 246, 0.1) 35%, + $main-nav-bg 100% + ); + + &::after { + color: $main-nav-item-hover-color; + } + } + + .nav-icon { + display: flex; + align-items: center; + justify-content: center; + font-size: $main-nav-item-icon-size; + } + + .badge { + margin-left: auto; + } + } + } + + .sub-navbar-nav { + flex-direction: column; + padding-left: 15px; + + .menu-arrow { + &::after { + right: 0; + } + } + + .sub-nav-item { + cursor: pointer; + padding: calc($main-nav-item-padding-y * 0.5) + $main-nav-item-padding-x; + + .sub-nav-link { + display: flex; + position: relative; + white-space: nowrap; + transition: all 0.3s ease-in-out; + color: $main-nav-item-color; + font-size: calc($main-nav-item-font-size * 0.95); + padding: calc($main-nav-item-padding-y * 0.25) + $main-nav-item-padding-x; + + &.active { + font-weight: $font-weight-medium; + } + + &.active, + &:active, + &:hover, + &:focus { + color: $main-nav-item-hover-color; + + &::before { + background-color: $main-nav-item-hover-color; + opacity: 1; + } + } + + &:hover { + transform: translateX(5px); + } + } + } + + .sub-navbar-nav { + padding-left: calc( + $main-nav-width-sm - $main-nav-item-padding-x * 5.25 + ); + } + } + } + } + + // Main Content + .page-content { + position: relative; + transition: all 0.3s ease-in-out; + min-height: calc(100vh - $topbar-height); + padding: calc($spacer * 1) calc($spacer * 0.5) $footer-height + calc($spacer * 0.5); + margin-left: $main-nav-width; + } +} + +// Sidenav Condensed +html[data-menu-size='condensed'] { + .main-nav { + position: absolute; + width: $main-nav-width-sm; + min-width: $main-nav-width-sm; + + .logo-box { + top: 0; + z-index: 1020 !important; + background: $main-nav-bg; + + .logo-lg { + display: none; + } + } + + .menu-title { + height: 0; + opacity: 0; + padding: 0; + } + + .badge { + display: none; + } + + .scrollbar { + height: auto !important; + } + + .simplebar-mask, + .simplebar-content-wrapper { + overflow: visible !important; + } + + .simplebar-scrollbar { + display: none !important; + } + + .simplebar-offset { + bottom: 0 !important; + } + + // Sidenav Menu + .navbar-nav { + padding: 10px 0; + + .nav-link { + justify-content: center; + + .nav-text, + &.menu-arrow::after { + display: none; + } + } + + .collapse, + .collapsing { + display: none; + height: auto !important; + } + + .sub-nav-item, + .nav-item { + position: relative; + white-space: nowrap; + + &:hover { + > .collapse, + > .collapsing { + display: block; + left: 100%; + margin-top: -1px; + position: absolute; + height: inherit !important; + transition: none !important; + + > .sub-navbar-nav { + padding-left: 0; + background: $dropdown-bg; + box-shadow: var(--#{$prefix}box-shadow); + width: calc($main-nav-width - $main-nav-width-sm); + border: $card-border-width solid $card-border-color; + + > .sub-nav-item { + padding: 0; + + > .sub-nav-link { + padding: calc( + $main-nav-item-padding-y * 0.75 + ) + $main-nav-item-padding-x; + z-index: 5; + + > .nav-text { + display: block; + } + } + + > .collapse, + > .collapsing { + top: 0; + } + } + + .sub-nav-item { + .sub-nav-link { + color: $dropdown-color; + + &[aria-expanded='true'], + &.show, + &:focus, + &:hover { + color: var(--#{$prefix}primary); + } + } + + .collapse, + .collapsing { + top: 0; + } + } + } + } + } + } + + > .nav-item { + &:hover { + > .nav-link { + &::before { + content: ''; + inset: 0px; + position: absolute; + width: $main-nav-width; + } + + > .nav-text { + display: flex; + align-items: center; + position: absolute; + left: calc($main-nav-width-sm - 1px); + background: $dropdown-bg; + color: $dropdown-color; + line-height: $main-nav-item-icon-size; + width: calc($main-nav-width - $main-nav-width-sm); + padding: $main-nav-item-padding-y + $main-nav-item-padding-x; + border: $card-border-width solid $card-border-color; + box-shadow: var(--#{$prefix}box-shadow); + } + } + } + + .nav-text, + .sub-navbar-nav { + margin-left: 10px; + } + } + + .sub-nav-item { + .menu-arrow { + &::after { + right: 10px; + transform: rotate(-90deg); + } + } + } + } + } + + .topbar { + padding-left: $main-nav-width-sm; + } + + .page-content { + margin-left: $main-nav-width-sm; + min-height: 1300px; + } +} + +// Sidebar sm hover Toggle Menu Button +.button-sm-hover { + border: 0; + top: 17px; + z-index: 1; + right: 10px; + display: none; + text-align: end; + position: absolute; + border-radius: 50%; + background: transparent; + transition: all 0.2s ease-in-out; + color: $main-nav-item-color; + padding: 0; + + .button-sm-hover-icon { + width: 35px; + height: 35px; + display: flex; + font-size: 22px; + border-radius: 50%; + align-items: center; + justify-content: center; + } + + &.show, + &.active, + &:active, + &:hover, + &:focus { + color: $main-nav-item-hover-color; + background-color: $main-nav-item-hover-bg; + } +} + +// Small Hover +html[data-menu-size='sm-hover'] { + .topbar { + padding-left: $main-nav-width-sm; + } + + .page-content { + margin-left: $main-nav-width-sm; + position: relative; + } + + .button-toggle-menu { + display: none; + } + + .main-nav:not(:hover) { + width: $main-nav-width-sm; + min-width: $main-nav-width-sm; + + .logo-box { + .logo-lg { + display: none; + } + } + + .nav-item { + .nav-link { + justify-content: center; + + .nav-text, + .badge { + display: none; + } + + &.menu-arrow { + &::after { + display: none; + } + } + } + + .collapse, + .collapsing { + display: none; + } + } + + .menu-title { + transition: all 0.3s ease-in-out; + height: 0; + opacity: 0; + padding: 0; + } + + .simplebar-track.simplebar-vertical { + visibility: hidden !important; + } + } + + .main-nav { + width: $main-nav-width; + min-width: $main-nav-width; + + .logo-box { + text-align: left; + } + + &:hover { + .button-sm-hover { + display: block; + + .button-sm-hover-icon { + transform: rotateY(180deg); + transition: all 0.3s ease-in-out; + } + } + } + + .simplebar-track.simplebar-horizontal { + visibility: hidden !important; + } + } +} + +// Small Hover Active +html[data-menu-size='sm-hover-active'] { + .button-toggle-menu { + display: none; + } + + .main-nav { + .logo-box { + text-align: left; + } + + .button-sm-hover { + display: block; + + .button-sm-hover-icon { + transform-style: preserve-3d; + transition: all 0.3s ease-in-out; + } + } + } +} + +// SideNav Hidden (Mobile View) +html[data-menu-size='hidden'] { + .main-nav { + margin-left: calc($main-nav-width * -1); + } + + .page-content { + margin-left: 0; + } + + &.sidebar-enable { + .main-nav { + margin-left: 0; + z-index: 1055; + } + } +} + +// Sidenav Dark and Brand +html[data-bs-theme='dark'], +html[data-menu-color='dark'], +html[data-menu-color='brand'] { + .main-nav { + .logo-box { + .logo-light { + display: block; + } + + .logo-dark { + display: none; + } + } + } +} + +// RTL +[dir='rtl'] { + .menu-arrow { + &::after { + transform: rotate(180deg); + } + + &[aria-expanded='true'] { + &::after { + transform: rotate(270deg); + } + } + } +} diff --git a/apiferia/src/environments/environment.prod.ts b/apiferia/src/environments/environment.prod.ts new file mode 100644 index 00000000..f7a3199a --- /dev/null +++ b/apiferia/src/environments/environment.prod.ts @@ -0,0 +1,5 @@ +export const environment = { + production: true, + apiUrl: 'https://api.feriavehiculos.com', + appName: 'Feria de Vehículos' +}; diff --git a/apiferia/src/environments/environment.ts b/apiferia/src/environments/environment.ts new file mode 100644 index 00000000..059c3363 --- /dev/null +++ b/apiferia/src/environments/environment.ts @@ -0,0 +1,5 @@ +export const environment = { + production: false, + apiUrl: 'http://10.1.21.12:3000', + appName: 'Feria de Vehículos' +}; diff --git a/apiferia/src/favicon.ico b/apiferia/src/favicon.ico new file mode 100644 index 00000000..44231b62 Binary files /dev/null and b/apiferia/src/favicon.ico differ diff --git a/apiferia/src/globals.d.ts b/apiferia/src/globals.d.ts new file mode 100644 index 00000000..5d5b15a8 --- /dev/null +++ b/apiferia/src/globals.d.ts @@ -0,0 +1 @@ +declare module 'gumshoejs' diff --git a/apiferia/src/index.html b/apiferia/src/index.html new file mode 100644 index 00000000..a3a23146 --- /dev/null +++ b/apiferia/src/index.html @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + +
      + Logo +
      + + + + + diff --git a/apiferia/src/main.ts b/apiferia/src/main.ts new file mode 100644 index 00000000..8dff8ab6 --- /dev/null +++ b/apiferia/src/main.ts @@ -0,0 +1,8 @@ +/// + +import { bootstrapApplication } from '@angular/platform-browser' +import { appConfig } from './app/app.config' +import { AppComponent } from './app/app.component' +import 'iconify-icon' + +bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)) diff --git a/apiferia/src/polyfills.ts b/apiferia/src/polyfills.ts new file mode 100644 index 00000000..1965938a --- /dev/null +++ b/apiferia/src/polyfills.ts @@ -0,0 +1,57 @@ +/*************************************************************************************************** + * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates. + */ +import '@angular/localize/init' +/** + * 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 + */ +;(window as any).global = window diff --git a/apiferia/src/styles.scss b/apiferia/src/styles.scss new file mode 100644 index 00000000..dd3e7eb0 --- /dev/null +++ b/apiferia/src/styles.scss @@ -0,0 +1,2 @@ +/* You can add global styles to this file, and also import other style files */ + diff --git a/apiferia/temp_menu_section.txt b/apiferia/temp_menu_section.txt new file mode 100644 index 00000000..672a798c --- /dev/null +++ b/apiferia/temp_menu_section.txt @@ -0,0 +1,103 @@ + { + key: 'feria', + label: 'FERIA DE VEHÍCULOS', + isTitle: true, + }, + { + key: 'vehicles', + icon: 'iconamoon:car-duotone', + label: 'Vehículos', + collapsed: true, + subMenu: [ + { + key: 'vehicles-list', + label: 'Lista de Vehículos', + link: '/vehicles', + parentKey: 'vehicles', + }, + { + key: 'vehicles-create', + label: 'Nuevo Vehículo', + link: '/vehicles/create', + parentKey: 'vehicles', + }, + { + key: 'vehicles-import', + label: 'Importar Vehículos', + link: '/vehicles/import', + parentKey: 'vehicles', + }, + ], + }, + { + key: 'finance', + icon: 'iconamoon:certificate-badge-duotone', + label: 'Financiamiento', + collapsed: true, + subMenu: [ + { + key: 'finance-applications', + label: 'Aplicaciones', + link: '/finance/applications', + parentKey: 'finance', + }, + { + key: 'finance-companies', + label: 'Financieras', + link: '/finance/companies', + parentKey: 'finance', + }, + { + key: 'finance-calculator', + label: 'Calculadora', + link: '/finance/calculator', + parentKey: 'finance', + }, + ], + }, + { + key: 'insurance', + icon: 'iconamoon:shield-yes-duotone', + label: 'Seguros', + collapsed: true, + subMenu: [ + { + key: 'insurance-quotes', + label: 'Cotizaciones', + link: '/insurance/quotes', + parentKey: 'insurance', + }, + { + key: 'insurance-companies', + label: 'Aseguradoras', + link: '/insurance/companies', + parentKey: 'insurance', + }, + ], + }, + { + key: 'sales', + icon: 'iconamoon:shopping-cart-duotone', + label: 'Ventas', + collapsed: true, + subMenu: [ + { + key: 'sales-list', + label: 'Lista de Ventas', + link: '/sales', + parentKey: 'sales', + }, + { + key: 'sales-reports', + label: 'Reportes', + link: '/sales/reports', + parentKey: 'sales', + }, + { + key: 'sales-commissions', + label: 'Comisiones', + link: '/sales/commissions', + parentKey: 'sales', + }, + ], + }, diff --git a/apiferia/tsconfig.app.json b/apiferia/tsconfig.app.json new file mode 100644 index 00000000..30e449e4 --- /dev/null +++ b/apiferia/tsconfig.app.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [ + "@angular/localize" + ] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts", + "src/polyfills.ts" + ] +} diff --git a/apiferia/tsconfig.json b/apiferia/tsconfig.json new file mode 100644 index 00000000..494143f5 --- /dev/null +++ b/apiferia/tsconfig.json @@ -0,0 +1,47 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "allowJs": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ], + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"], + "@lib/*": ["./src/lib/*"], + "@environment/*": ["./src/environments/*"], + "@auth/*": ["./src/app/account/*"], + "@views/*": ["./src/app/views/*"], + "@component/*": ["./src/app/components/*"], + "@common/*": ["./src/app/common/*"], + "@helper/*": ["./src/app/helper/*"], + "@store/*": ["./src/app/store/*"], + "@core/*": ["./src/app/core/*"], + "@shared/*": ["./src/app/shared/*"] + }, + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/apiferia/tsconfig.spec.json b/apiferia/tsconfig.spec.json new file mode 100644 index 00000000..d9533409 --- /dev/null +++ b/apiferia/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine", + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/apiferia/yarn.lock b/apiferia/yarn.lock new file mode 100644 index 00000000..ba154e53 --- /dev/null +++ b/apiferia/yarn.lock @@ -0,0 +1,8315 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0", "@ampproject/remapping@2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@angular-devkit/architect@0.1902.6": + version "0.1902.6" + resolved "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.6.tgz" + integrity sha512-Dx6yPxpaE5AhP6UtrVRDCc9Ihq9B65LAbmIh3dNOyeehratuaQS0TYNKjbpaevevJojW840DTg80N+CrlfYp9g== + dependencies: + "@angular-devkit/core" "19.2.6" + rxjs "7.8.1" + +"@angular-devkit/build-angular@^19.0.7": + version "19.2.6" + resolved "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.6.tgz" + integrity sha512-alYn3PSsiQML9PzU1VKbmYnIP2ULK/AqfjdeJFh8r6m8ZjUvX1zDy9TdAfC6fykQ2mGHyChteRckbx9uVOyhwQ== + dependencies: + "@ampproject/remapping" "2.3.0" + "@angular-devkit/architect" "0.1902.6" + "@angular-devkit/build-webpack" "0.1902.6" + "@angular-devkit/core" "19.2.6" + "@angular/build" "19.2.6" + "@babel/core" "7.26.10" + "@babel/generator" "7.26.10" + "@babel/helper-annotate-as-pure" "7.25.9" + "@babel/helper-split-export-declaration" "7.24.7" + "@babel/plugin-transform-async-generator-functions" "7.26.8" + "@babel/plugin-transform-async-to-generator" "7.25.9" + "@babel/plugin-transform-runtime" "7.26.10" + "@babel/preset-env" "7.26.9" + "@babel/runtime" "7.26.10" + "@discoveryjs/json-ext" "0.6.3" + "@ngtools/webpack" "19.2.6" + "@vitejs/plugin-basic-ssl" "1.2.0" + ansi-colors "4.1.3" + autoprefixer "10.4.20" + babel-loader "9.2.1" + browserslist "^4.21.5" + copy-webpack-plugin "12.0.2" + css-loader "7.1.2" + esbuild-wasm "0.25.1" + fast-glob "3.3.3" + http-proxy-middleware "3.0.3" + istanbul-lib-instrument "6.0.3" + jsonc-parser "3.3.1" + karma-source-map-support "1.4.0" + less "4.2.2" + less-loader "12.2.0" + license-webpack-plugin "4.0.2" + loader-utils "3.3.1" + mini-css-extract-plugin "2.9.2" + open "10.1.0" + ora "5.4.1" + picomatch "4.0.2" + piscina "4.8.0" + postcss "8.5.2" + postcss-loader "8.1.1" + resolve-url-loader "5.0.0" + rxjs "7.8.1" + sass "1.85.0" + sass-loader "16.0.5" + semver "7.7.1" + source-map-loader "5.0.0" + source-map-support "0.5.21" + terser "5.39.0" + tree-kill "1.2.2" + tslib "2.8.1" + webpack "5.98.0" + webpack-dev-middleware "7.4.2" + webpack-dev-server "5.2.0" + webpack-merge "6.0.1" + webpack-subresource-integrity "5.1.0" + optionalDependencies: + esbuild "0.25.1" + +"@angular-devkit/build-webpack@0.1902.6": + version "0.1902.6" + resolved "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1902.6.tgz" + integrity sha512-SZe2Nk39lJIJmtXWU+zhKaFy0xoU8N7387bvjhO0AoNQeRBaaJ5SrRLXX2jUzGUuVgGVF+plaVooKrmEOeM6ug== + dependencies: + "@angular-devkit/architect" "0.1902.6" + rxjs "7.8.1" + +"@angular-devkit/core@19.2.6": + version "19.2.6" + resolved "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.6.tgz" + integrity sha512-WFgiYhrDMq83UNaGRAneIM7CYYdBozD+yYA9BjoU8AgBLKtrvn6S8ZcjKAk5heoHtY/u8pEb0mwDTz9gxFmJZQ== + dependencies: + ajv "8.17.1" + ajv-formats "3.0.1" + jsonc-parser "3.3.1" + picomatch "4.0.2" + rxjs "7.8.1" + source-map "0.7.4" + +"@angular-devkit/schematics@19.2.6": + version "19.2.6" + resolved "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.6.tgz" + integrity sha512-YTAxNnT++5eflx19OUHmOWu597/TbTel+QARiZCv1xQw99+X8DCKKOUXtqBRd53CAHlREDI33Rn/JLY3NYgMLQ== + dependencies: + "@angular-devkit/core" "19.2.6" + jsonc-parser "3.3.1" + magic-string "0.30.17" + ora "5.4.1" + rxjs "7.8.1" + +"@angular/animations@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/animations/-/animations-19.2.5.tgz" + integrity sha512-m4RtY3z1JuHFCh6OrOHxo25oKEigBDdR/XmdCfXIwfTiObZzNA7VQhysgdrb9IISO99kXbjZUYKDtLzgWT8Klg== + dependencies: + tslib "^2.3.0" + +"@angular/build@19.2.6": + version "19.2.6" + resolved "https://registry.npmjs.org/@angular/build/-/build-19.2.6.tgz" + integrity sha512-+VBLb4ZPLswwJmgfsTFzGex+Sq/WveNc+uaIWyHYjwnuI17NXe1qAAg1rlp72CqGn0cirisfOyAUwPc/xZAgTg== + dependencies: + "@ampproject/remapping" "2.3.0" + "@angular-devkit/architect" "0.1902.6" + "@babel/core" "7.26.10" + "@babel/helper-annotate-as-pure" "7.25.9" + "@babel/helper-split-export-declaration" "7.24.7" + "@babel/plugin-syntax-import-attributes" "7.26.0" + "@inquirer/confirm" "5.1.6" + "@vitejs/plugin-basic-ssl" "1.2.0" + beasties "0.2.0" + browserslist "^4.23.0" + esbuild "0.25.1" + fast-glob "3.3.3" + https-proxy-agent "7.0.6" + istanbul-lib-instrument "6.0.3" + listr2 "8.2.5" + magic-string "0.30.17" + mrmime "2.0.1" + parse5-html-rewriting-stream "7.0.0" + picomatch "4.0.2" + piscina "4.8.0" + rollup "4.34.8" + sass "1.85.0" + semver "7.7.1" + source-map-support "0.5.21" + vite "6.2.4" + watchpack "2.4.2" + optionalDependencies: + lmdb "3.2.6" + +"@angular/cdk@^19.0.5": + version "19.2.8" + resolved "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.8.tgz" + integrity sha512-ZZqWVYFF80TdjWkk2sc9Pn2luhiYeC78VH3Yjeln4wXMsTGDsvKPBcuOxSxxpJ31saaVBehDjBUuXMqGRj8KuA== + dependencies: + parse5 "^7.1.2" + tslib "^2.3.0" + +"@angular/cli@^19.0.7": + version "19.2.6" + resolved "https://registry.npmjs.org/@angular/cli/-/cli-19.2.6.tgz" + integrity sha512-eZhFOSsDUHKaciwcWdU5C54ViAvPPdZJf42So93G2vZWDtEq6Uk47huocn1FY9cMhDvURfYLNrrLMpUDtUSsSA== + dependencies: + "@angular-devkit/architect" "0.1902.6" + "@angular-devkit/core" "19.2.6" + "@angular-devkit/schematics" "19.2.6" + "@inquirer/prompts" "7.3.2" + "@listr2/prompt-adapter-inquirer" "2.0.18" + "@schematics/angular" "19.2.6" + "@yarnpkg/lockfile" "1.1.0" + ini "5.0.0" + jsonc-parser "3.3.1" + listr2 "8.2.5" + npm-package-arg "12.0.2" + npm-pick-manifest "10.0.0" + pacote "20.0.0" + resolve "1.22.10" + semver "7.7.1" + symbol-observable "4.0.0" + yargs "17.7.2" + +"@angular/common@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/common/-/common-19.2.5.tgz" + integrity sha512-vFCBdas4C5PxP6ts/4TlRddWD3DUmI3aaO0QZdZvqyLHy428t84ruYdsJXKaeD8ie2U4/9F3a1tsklclRG/BBA== + dependencies: + tslib "^2.3.0" + +"@angular/compiler-cli@^19.0.0": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.5.tgz" + integrity sha512-b2cG41r6lilApXLlvja1Ra2D00dM3BxmQhoElKC1tOnpD6S3/krlH1DOnBB2I55RBn9iv4zdmPz1l8zPUSh7DQ== + dependencies: + "@babel/core" "7.26.9" + "@jridgewell/sourcemap-codec" "^1.4.14" + chokidar "^4.0.0" + convert-source-map "^1.5.1" + reflect-metadata "^0.2.0" + semver "^7.0.0" + tslib "^2.3.0" + yargs "^17.2.1" + +"@angular/compiler@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.5.tgz" + integrity sha512-34J+HubQjwkbZ0AUtU5sa4Zouws9XtP/fKaysMQecoYJTZ3jewzLSRu3aAEZX1Y4gIrcVVKKIxM6oWoXKwYMOA== + dependencies: + tslib "^2.3.0" + +"@angular/core@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/core/-/core-19.2.5.tgz" + integrity sha512-NNEz1sEZz1mBpgf6Tz3aJ9b8KjqpTiMYhHfCYA9h9Ipe4D8gUmOsvPHPK2M755OX7p7PmUmzp1XCUHYrZMVHRw== + dependencies: + tslib "^2.3.0" + +"@angular/forms@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/forms/-/forms-19.2.5.tgz" + integrity sha512-2Zvy3qK1kOxiAX9fdSaeG48q7oyO/4RlMYlg1w+ra9qX1SrgwF3OQ2P2Vs+ojg1AxN3z9xFp4aYaaID/G2LZAw== + dependencies: + tslib "^2.3.0" + +"@angular/google-maps@^19.0.2": + version "19.2.8" + resolved "https://registry.npmjs.org/@angular/google-maps/-/google-maps-19.2.8.tgz" + integrity sha512-kCTezzgmilDsQD+kIqQovTPC0v9mMEKsg0L6+x9rFqh4anwvB50c2s56mIf7t6p0Ox3Lwf4ZAK9K1UVwAXRRYw== + dependencies: + "@types/google.maps" "^3.54.10" + tslib "^2.3.0" + +"@angular/localize@^19.0.0": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/localize/-/localize-19.2.5.tgz" + integrity sha512-oAc19bubk6Z/2Vv6OkV0MsjdgC8cUaUwBmwdc6blFVe1NCX1KjdaqDyC2EQAO3nWfcdV4uvOOuu8myxB64bamw== + dependencies: + "@babel/core" "7.26.9" + "@types/babel__core" "7.20.5" + fast-glob "3.3.3" + yargs "^17.2.1" + +"@angular/platform-browser-dynamic@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.5.tgz" + integrity sha512-15in8u4552EcdWNTXY2h0MKuJbk3AuXwWr0zVTum4CfB/Ss2tNTrDEdWhgAbhnUI0e9jZQee/fhBbA1rleMYrA== + dependencies: + tslib "^2.3.0" + +"@angular/platform-browser@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.5.tgz" + integrity sha512-Lshy++X16cvl6OPvfzMySpsqEaCPKEJmDjz7q7oSt96oxlh6LvOeOUVLjsNyrNaIt9NadpWoqjlu/I9RTPJkpw== + dependencies: + tslib "^2.3.0" + +"@angular/router@^19.0.6": + version "19.2.5" + resolved "https://registry.npmjs.org/@angular/router/-/router-19.2.5.tgz" + integrity sha512-9pSfmdNXLjaOKj0kd4UxBC7sFdCFOnRGbftp397G3KWqsLsGSKmNFzqhXNeA5QHkaVxnpmpm8HzXU+zYV5JwSg== + dependencies: + tslib "^2.3.0" + +"@antfu/install-pkg@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz" + integrity sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw== + dependencies: + package-manager-detector "^0.2.8" + tinyexec "^0.3.2" + +"@antfu/utils@^8.1.0": + version "8.1.1" + resolved "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz" + integrity sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.8.tgz" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== + +"@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@7.26.10": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.10.tgz" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/core@7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.9.tgz" + integrity sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.9" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.9" + "@babel/parser" "^7.26.9" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.9" + "@babel/types" "^7.26.9" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.26.10", "@babel/generator@^7.26.9", "@babel/generator@7.26.10": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.10.tgz" + integrity sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang== + dependencies: + "@babel/parser" "^7.26.10" + "@babel/types" "^7.26.10" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/generator@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.27.0.tgz" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== + dependencies: + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.25.9", "@babel/helper-annotate-as-pure@7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz" + integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.27.0" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz" + integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": + version "0.6.4" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz" + integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5": + version "7.26.5" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-split-export-declaration@7.24.7": + version "7.24.7" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz" + integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== + dependencies: + "@babel/types" "^7.24.7" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.10", "@babel/helpers@^7.26.9": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.0.tgz" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== + dependencies: + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.10", "@babel/parser@^7.26.9", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.27.0.tgz" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== + dependencies: + "@babel/types" "^7.27.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + 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.25.9.tgz" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-import-attributes@^7.26.0", "@babel/plugin-syntax-import-attributes@7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-async-generator-functions@^7.26.8", "@babel/plugin-transform-async-generator-functions@7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" + +"@babel/plugin-transform-async-to-generator@^7.25.9", "@babel/plugin-transform-async-to-generator@7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz" + integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" + +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-for-of@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz" + integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== + dependencies: + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== + dependencies: + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== + dependencies: + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz" + integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + regenerator-transform "^0.15.2" + +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-runtime@7.26.10": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.26.10.tgz" + integrity sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.26.5" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz" + integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== + dependencies: + "@babel/helper-plugin-utils" "^7.26.5" + +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/preset-env@7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.9.tgz" + integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.26.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.40.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4", "@babel/runtime@7.26.10": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz" + integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== + dependencies: + regenerator-runtime "^0.14.0" + +"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.0.tgz" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.26.9", "@babel/traverse@^7.27.0": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.0.tgz" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.27.0", "@babel/types@^7.4.4": + version "7.27.0" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.27.0.tgz" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + +"@ckeditor/ckeditor5-adapter-ckfinder@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-44.3.0.tgz" + integrity sha512-+LYQi4DJmK87Mx3FU7q8Ei3Jv/BrXScR7P1rJVw9bYSySLISw1lPPGEuzNaDm+aI/IMwxAw6Laf7kp+bBfZg1A== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-upload" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-alignment@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-44.3.0.tgz" + integrity sha512-PJLPQPJTaEs/TxmXovb5gZWHFk04VdyFxwpy+LFiVKTewV4T5Mz2jinXwL6+DYmlHh0oDu66O2joSdYeL6F9xw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-angular@^9.1.0": + version "9.1.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-angular/-/ckeditor5-angular-9.1.0.tgz" + integrity sha512-KJYdlH62CLd6EyaeMbFOfc4hsD+uRy9vsBAEEVY4jyTROROmODje4ZnfBtkz4KthuOVaDd+2ykwDQgAQ3gBIYA== + dependencies: + "@ckeditor/ckeditor5-integrations-common" "^2.2.2" + tslib "^2.3.0" + +"@ckeditor/ckeditor5-autoformat@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-44.3.0.tgz" + integrity sha512-cKRN73eWaci0px4RL/pu+uFx+/joJyicXjDogqRCqsrHtFnNziAoDxg1aU9F7eReMp+RJc5dqn9R94fZqxdaKQ== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-heading" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-autosave@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-44.3.0.tgz" + integrity sha512-vZS8lMUNwtpUplx1WtiywEmgqy2rXSTrwbCqkENZZ6vIOpYZg9sW0XxWAdCMslBiNZRhAF2et3jT+Es01/aEyg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-basic-styles@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-44.3.0.tgz" + integrity sha512-QxwJqzIMYD8Nq7I8utEm2N1wFYve3jR9W1RoxrP005V7F9hXubcG4VFkk1QspVjiPBBtWjYJh7Iq6LjeMnDXgg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-block-quote@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-44.3.0.tgz" + integrity sha512-J+t36widj2/f1DCZqZjCssOu4hdKCpX/mDWOAJwp4BNIei0NATmtHoblH4Lb98P0mF5UeneoLqR4XZlwMYD7tw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-bookmark@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-bookmark/-/ckeditor5-bookmark-44.3.0.tgz" + integrity sha512-e3p6hUYC4LavTSVTDaz9VfpMaXpi35HNXqqCpIGJGtMKq7mYPaGf1ZZqIPEWuZz3UH/h/E445Mrm4KOgRo9hfg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-build-classic@^44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-44.3.0.tgz" + integrity sha512-tvOwT1dAZlY4v1vZItqR0VFfTzr+OLoEmnOW/Lchl2Y0BUWT99GCfABCvAdakBBYvKdsMLsH0jqZFvnLxJCUmg== + dependencies: + "@ckeditor/ckeditor5-adapter-ckfinder" "44.3.0" + "@ckeditor/ckeditor5-autoformat" "44.3.0" + "@ckeditor/ckeditor5-basic-styles" "44.3.0" + "@ckeditor/ckeditor5-block-quote" "44.3.0" + "@ckeditor/ckeditor5-ckbox" "44.3.0" + "@ckeditor/ckeditor5-ckfinder" "44.3.0" + "@ckeditor/ckeditor5-cloud-services" "44.3.0" + "@ckeditor/ckeditor5-easy-image" "44.3.0" + "@ckeditor/ckeditor5-editor-classic" "44.3.0" + "@ckeditor/ckeditor5-essentials" "44.3.0" + "@ckeditor/ckeditor5-heading" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-indent" "44.3.0" + "@ckeditor/ckeditor5-link" "44.3.0" + "@ckeditor/ckeditor5-list" "44.3.0" + "@ckeditor/ckeditor5-media-embed" "44.3.0" + "@ckeditor/ckeditor5-paragraph" "44.3.0" + "@ckeditor/ckeditor5-paste-from-office" "44.3.0" + "@ckeditor/ckeditor5-table" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + +"@ckeditor/ckeditor5-ckbox@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-44.3.0.tgz" + integrity sha512-R0cHl7aafBU1dvfpFu/dMq+7SMTKa7dAi1wQyu5RqmdN0glCAGXoyffe5h2gujcHGlUqzjGE9oX3207rrPi12A== + dependencies: + "@ckeditor/ckeditor5-cloud-services" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-upload" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + blurhash "2.0.5" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-ckfinder@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-44.3.0.tgz" + integrity sha512-h/kQy9nUG2VmxAL28b56xZnVQDrr/N12cu2QE+ODfHIiumMNPPTx2Q+g7s8/eVhKAmNQuZJPXygokjXrirC8TA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-clipboard@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-44.3.0.tgz" + integrity sha512-oCQfsHX0Z7RySzszvkpnsFi/p3pqEjpQs4FVpPXXWasK+3F00kWReYNNQFe+0z0eIw7alo/ZzqYTQG/FQHaQUw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-cloud-services@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-44.3.0.tgz" + integrity sha512-c/jLU3lhoqPmwfwEXcU9fGw0ab6dQUcUjQUjamBH1x92p6NnEJTtXJD97trwgKJryZWZ6bk7vJG5nOC4i0XDZA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-code-block@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-44.3.0.tgz" + integrity sha512-LNFRr7OIdvyZTfkmyNW/m48EXTsYdrQyDS/9hp4fpHrv9cC3rHhnP4/rS3vkmPh9FOv5I2JvXS36nn75BjWRRQ== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-core@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-44.3.0.tgz" + integrity sha512-QYyk00JI2wgE2Lr8/A3roRsms3rSOfwMAF88I6Ff2Qf+c8hT6O11gSX18jdd/bGLhfZ0c4IjWc8v67ohgUdMFg== + dependencies: + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-watchdog" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-easy-image@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-44.3.0.tgz" + integrity sha512-s1Qpf45/31J4rW4RC0ArKLb5QqD0VKTn9LCB83qhyCLfGluk18MOZ2Fc7gfYoxZClzhCwdMQE6mhWOC9bQUmPw== + dependencies: + "@ckeditor/ckeditor5-cloud-services" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-upload" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-editor-balloon@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-44.3.0.tgz" + integrity sha512-Lw6GIIUW37Pi/ErFqx+ozsqRmbBbvhrJhDJ1zIhILEYcwzADHGP32O2pKGLHDf5Z4QTfwunAyG73jvww/ks3kg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-editor-classic@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-44.3.0.tgz" + integrity sha512-Vi1tNQdKUCw6X66X2RPhtJPjXJHw/UqHw1Y0J4Vpmi5rf5UHerEj5Sjn+KrjUwDNbmeHtVO/egibLhwRMjKn8A== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-editor-decoupled@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-44.3.0.tgz" + integrity sha512-sG4KO0pPhfwQpiegtncDyL9G7nlCsjcWqDieZvRfwy2Uig7EaChny3BoIQhacjO4xKV8ZhXw+dTBJgZRtfePdQ== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-editor-inline@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-44.3.0.tgz" + integrity sha512-asa9uWhdTGA6BDda7leJEj57UT3lkDmFAHPFL7fWsvQpL2mszbdf7P6L/rOedGcj2/7a9F8CZfb5aVmENrM3Zw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-editor-multi-root@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-44.3.0.tgz" + integrity sha512-2k13l0m9+UGMDOzz2uGkj706iMFsayvn+wp6D4niGUOoDGtKOZSX6gNUwq+WcHJ2+54fsXAAJ2xVZB9juXSuhg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-emoji@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-emoji/-/ckeditor5-emoji-44.3.0.tgz" + integrity sha512-NevoSyV8f9F44oTYFJ8DVaOGmqS1XzCisg/lSW5iwfu2R0+6WXCfU6zlGwp9wVedolznUu5OiYpHK0Emz3dmBw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-mention" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + fuzzysort "3.1.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-engine@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-44.3.0.tgz" + integrity sha512-76nq2oHwQocaGQfRKlaDaYYFSps3yVNfbC4204i4/S0moKtB9fSy9IBKwYm5D9iB+0qjqCYGnsn17wWNuKjCYQ== + dependencies: + "@ckeditor/ckeditor5-utils" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-enter@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-44.3.0.tgz" + integrity sha512-M5pv6XC5SIqwa9ZiQQsmmvCAot/uiBN/8ax3KvLz8S78eXDHyHKE6mZMWUd0MJCfZ/0b+CnrFVY/kvZkS+h/7g== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + +"@ckeditor/ckeditor5-essentials@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-44.3.0.tgz" + integrity sha512-DkE6u0pD3gcFLkyZRNA4IZVvjLQUpgoEeTCaB/QaCQRljSSj9300AtkIFpCdRiWo9RAGw7rs9XmVRoCsTPY4tQ== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-select-all" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-undo" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-find-and-replace@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-44.3.0.tgz" + integrity sha512-d4fLo5IWyxPmfuoIqoaWaekoodgtFurKALc2ZyNvto7H9m+ul+uWwhF4A9buovbETv0N0mertDruGENygiuOCg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-font@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-44.3.0.tgz" + integrity sha512-F1cdHNbtXkM/1nvqbCO4XeSCHahNiMnwkQqCm36njxuBRXbAei/qTwxqrwPAukE6Yb2q9boX1prUbvEBbPAqhw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-heading@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-44.3.0.tgz" + integrity sha512-7uCSHN2UMTzn/nZpoACOiUyx2dX4ZlC8bfLbpdgMhDPM9vEaa0Tr/lgSFD5C1ugLFFSEJL3pAPGWStvZ4wD6YA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-paragraph" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-highlight@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-44.3.0.tgz" + integrity sha512-BwdMrcAbS0J/3q3dmtY0F6sVARVR9oSrWj4/850EfXp0hw9gkpQyEjrds17sIrIchCG+/8/0LM4Z9sADYzmo9w== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-horizontal-line@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-44.3.0.tgz" + integrity sha512-k8YuWptng4IKUbXVE+ZjVyNm8JpGU50aFWckYunimlpajNOKC52L8pneIEqIHr/BjA+2P/vtAIf8HDZs+AoNjw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-html-embed@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-44.3.0.tgz" + integrity sha512-rJV3ikojykVPw9CrtzInh8DsgGuk/2UOi8KUr3b6DEtuYOqJkG5cfpqRy5QVoSRbtpLhVOWNpEKhYGgiv+HUgw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-html-support@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-44.3.0.tgz" + integrity sha512-KFBHMzBNU9/YBj3Eil03qYBLNk7wAuholdZ3YijohgCt2YRw1cRu9krjGaOyhF9E5MEu0cqTJvTjPGBhGE8mVQ== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-heading" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-list" "44.3.0" + "@ckeditor/ckeditor5-table" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-image@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-44.3.0.tgz" + integrity sha512-3mRgGSOXQ4e/TJZcB7N8SPSnN+pdUzA72kwiN6FrjjdV0CNqehNoSUCFrwra4ctHaFjLBBqFVV+hEvwFlgmlxA== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-undo" "44.3.0" + "@ckeditor/ckeditor5-upload" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-indent@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-44.3.0.tgz" + integrity sha512-Gju3Lt2/OQB2mzhk/TTtonHTEcmFua4Ag4keB75EbPxthpLZZnMQm3Gl7MvrecjUv4+3nRlEBv/Bon00OIXcqA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-heading" "44.3.0" + "@ckeditor/ckeditor5-list" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-integrations-common@^2.2.2": + version "2.2.3" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-integrations-common/-/ckeditor5-integrations-common-2.2.3.tgz" + integrity sha512-92kQWQj1wiABF7bY1+J79Ze+WHr7pwVBufn1eeJLWcTXbPQq4sAolfKv8Y8Ka9g69mdyE9+GPWmGFYDeQJVPDg== + +"@ckeditor/ckeditor5-language@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-44.3.0.tgz" + integrity sha512-lnhnnsSwMnnyFpUktrvAxuj6tlwn2zjSm7+ZDxMiQpsZuRsmABnSapeKqjlfs8B1rQwrcZIhp1FsHVvnaVOzug== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-link@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-44.3.0.tgz" + integrity sha512-OmOWje1i7tuEBNHoIi/n6M69xE1K97P2xmbSJ9HB5nFFvelfCCMnuLa+7QmT1+/Sxg0VYM175dtTclinEeWJhQ== + dependencies: + "@ckeditor/ckeditor5-bookmark" "44.3.0" + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-list@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-44.3.0.tgz" + integrity sha512-66f3n8ASdhA7wxPoGt/sI+Eg/IhDFutSkCEcqL2tsJFVRB0MuhhQIklxdGRVfPrjbpMSUPSRJPMddAFhRCzfUQ== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-markdown-gfm@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-44.3.0.tgz" + integrity sha512-q+vblaqjjwQQkcrFfsOCD7ejWl1ltqV982jfFK9LTx7DiJIuR2UwByNrRC00Xeol2rDeC8lYoIH77AZHavFIbw== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@types/marked" "4.3.2" + "@types/turndown" "5.0.5" + ckeditor5 "44.3.0" + marked "4.0.12" + turndown "7.2.0" + turndown-plugin-gfm "1.0.2" + +"@ckeditor/ckeditor5-media-embed@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-44.3.0.tgz" + integrity sha512-wlAITZKeNEZfB164hwODXfhg63pYaWynCuIvVCtaeVUmoBqnSkK8gxuZ2ehxUdi4SPlVJwt84afDsD4RU8UYDQ== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-undo" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-mention@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-44.3.0.tgz" + integrity sha512-pmf7prEvIJgP4rbyeTtY6Ynl2i5jo52G+DlFwJbWUzZDyOZIR41mh4hBimK50QHR0szaXMBGbM+alFu924vZCA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-minimap@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-44.3.0.tgz" + integrity sha512-iRO1t1lyeyiFZg4il5JGRVwyoqRYqsRcj9uSh90xNJJAxH5yiPlWAGIvCMzWDwlINFJe/hfaNd0RDzlbNHytgA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-page-break@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-44.3.0.tgz" + integrity sha512-PzvOsEDNBPWCtN9S6nhJPWYwF/5BoE0klXkNzTgoA28EwsoSA4evU8gztcoxxGkVOskdI2OzZfz1QUaPFczLDQ== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-paragraph@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-44.3.0.tgz" + integrity sha512-kxZBn/xmz+woXB0fIKWA/ZrFZXqyubX5BhcOYpM2j3CtjsJUJsL6ekwBq/y9HNSkkKfNKHaTzK7IDiPBKblcrw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + +"@ckeditor/ckeditor5-paste-from-office@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-44.3.0.tgz" + integrity sha512-IHl3YVE6ONGXTxHf+uHvvBMFR90nxTz7nB9eA8DzuWskF+fOo+wtVdfZaafLUs0kJJXBTRebsv2Sa5onLLL6tA== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-remove-format@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-44.3.0.tgz" + integrity sha512-ZlbJNaX+IGui9C3NDC/W/4M308RzD3+jnk5iDGXENjBstNB99AnwpfDXel+Tc0t5rTd7D1fSr9eaxScnPLdgwA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-restricted-editing@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-44.3.0.tgz" + integrity sha512-0V/can4jw70DMBPwex1MRiUHRsvFdbjZp/RaHagazen6gOZZOAo3R7vJjp+qBQrHmXP6T6aTGn89Y9NxYI9OIw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-select-all@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-44.3.0.tgz" + integrity sha512-GDNl6Iex1cyHAQgjR6cqIklH8QPO1x1Z87gwi93lX3mgm47DW6Q12jvwfRc36+d1zGf5W7+eH0xaP7jQPWYUPg== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + +"@ckeditor/ckeditor5-show-blocks@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-44.3.0.tgz" + integrity sha512-4Qp992YWOby7+MiyX0PwD8bg/+PgsRFNXd9DLyhCvmmiFmkwUzbYmA8t3lp+V3uefg5SrcylzWn4QHlUNVg1iw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-source-editing@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-44.3.0.tgz" + integrity sha512-OCv2oO6ok0UrZJHOoJRnywFpv3+UntOs7TuvEw35zDYJCgcmICfzqqTZ++ZcZaq1oOERbwk2L4E4uy2H8KXWQA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-theme-lark" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-special-characters@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-44.3.0.tgz" + integrity sha512-K3cOw/aMUmkXofUVFpUXTHLNYlwvcT3KUyfvTO3oT8ae3ecQlG4btTjgnzgVD2zIXFSEpguSBYywVUhMAZWNMA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + +"@ckeditor/ckeditor5-style@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-44.3.0.tgz" + integrity sha512-IUd5yRea8uh/VyAJ6p1NdXL9wWywQYfIOubzNgiP1b58q0psfWYxwsREekE6Epd+sMHC1H4wc+dZsIxfi+stKw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-html-support" "44.3.0" + "@ckeditor/ckeditor5-list" "44.3.0" + "@ckeditor/ckeditor5-table" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-table@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-44.3.0.tgz" + integrity sha512-kFPvQWe/7Iq9tPzq788HLax7Ss8SJaS5+bkhbUmH+k4RM4NABl1ABRa+EzyMIrdqz9KLYr0B57jUoCU8Y2HLsg== + dependencies: + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-theme-lark@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-44.3.0.tgz" + integrity sha512-Druy7S1e3bjwMVLkld7ZPGIU6tdI9E6bn/AS+OrQF3mDck14mFP+K4qnMbYNCeYngMqv8Se0eSHtAmQhU7It0A== + dependencies: + "@ckeditor/ckeditor5-ui" "44.3.0" + +"@ckeditor/ckeditor5-typing@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-44.3.0.tgz" + integrity sha512-ojAuhhd/PfO5Oko94ObgEmuvQzqApARb2H0R5YEySSRj9oek4Nm1NGMhHMvIC0sMP2hSVxhfSbHcHY3vDjGwiA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-ui@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-44.3.0.tgz" + integrity sha512-Sotme1g/xwhmDYes+bXEU/9hbGXcaKC952Yck6UiYgZyhei28lErlNwtSOAKfpQ2gHbPjWRt7rigSH22EN+iqw== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-editor-multi-root" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@types/color-convert" "2.0.4" + color-convert "2.0.1" + color-parse "1.4.2" + lodash-es "4.17.21" + vanilla-colorful "0.7.2" + +"@ckeditor/ckeditor5-undo@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-44.3.0.tgz" + integrity sha512-cogFPl7QoDrmoUPKTZI0/LiUYoFboqm0lqBK168nh5VRgy53RuGgbXJ4+hCOHNuzdUnVUlWvl/2u0vR4/R07+A== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + +"@ckeditor/ckeditor5-upload@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-44.3.0.tgz" + integrity sha512-oJgsw374nHeVKx1qvnlQzEyDhfFvC/su84f00nOdDGWfsHabU3hE0hZE+yoBtreRViORwwe6Ftg5qbhl5OVyuA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + +"@ckeditor/ckeditor5-utils@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-44.3.0.tgz" + integrity sha512-Z/ttfLhu9QnuMc9BBdQfH9Do6JD01ijUkUmUB41BPByYfOjZbGYGfZmhywH9OjXmHnSDQSUqwRnxqqM3nceR1g== + dependencies: + "@ckeditor/ckeditor5-ui" "44.3.0" + "@types/lodash-es" "4.17.12" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-watchdog@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-44.3.0.tgz" + integrity sha512-7Y4FOWB021CLEUDsIf61tZzd9ZrZ8JkD8lQeRZOmv+bBLTxgjyz2/7MCjIDR7NN0xdASXTFwRS6XO32HbdrN0Q== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-editor-multi-root" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-widget@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-44.3.0.tgz" + integrity sha512-nFEKBE33RnZ2bOeD9L9jfyKYaFw/xKY543ZNQWxWHcmI70AX3U2KJ8wUnuMjMknHafyMuH6bSlWjKtn5vz3w+g== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + lodash-es "4.17.21" + +"@ckeditor/ckeditor5-word-count@44.3.0": + version "44.3.0" + resolved "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-44.3.0.tgz" + integrity sha512-9iNiF1wq1f9npT/KhBAgDfM6kFbJ0GyUdlXt3V6zyLY2K3SILQ6q5B23jhtABZny8zxA+f528ClxDSTFh9bXDA== + dependencies: + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + ckeditor5 "44.3.0" + lodash-es "4.17.21" + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@ctrl/ngx-emoji-mart@^9.2.0": + version "9.2.0" + resolved "https://registry.npmjs.org/@ctrl/ngx-emoji-mart/-/ngx-emoji-mart-9.2.0.tgz" + integrity sha512-q8B7DiXPfyTe+VOGO6Ix7eh5gKCuADxAsud2xXRTlECTfchoKGTmirSczyjaxIKE/xmB+/ZsnkpthZqUM7SAJQ== + dependencies: + tslib "^2.3.0" + +"@discoveryjs/json-ext@0.6.3": + version "0.6.3" + resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz" + integrity sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ== + +"@esbuild/win32-x64@0.25.1": + version "0.25.1" + resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.1.tgz" + integrity sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg== + +"@fullcalendar/angular@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/angular/-/angular-6.1.17.tgz" + integrity sha512-1XSiT62/KItFZCtecuqcxd0mxctQQcJuJbXfLFPjGG9Ycz6+af+bC0Ch89W+uYSPkGrmk7tczELouckJLSJm2Q== + dependencies: + tslib "^2.3.0" + +"@fullcalendar/bootstrap@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/bootstrap/-/bootstrap-6.1.17.tgz" + integrity sha512-8oGlepD17TEx+D7HqCKCoH1P19yDDbMaLBjuV3fW3XsYCqVZ3uGHcXSVHr7Jw/GzWB05vKiU/+CVXFmApltrsQ== + +"@fullcalendar/core@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/core/-/core-6.1.17.tgz" + integrity sha512-0W7lnIrv18ruJ5zeWBeNZXO8qCWlzxDdp9COFEsZnyNjiEhUVnrW/dPbjRKYpL0edGG0/Lhs0ghp1z/5ekt8ZA== + dependencies: + preact "~10.12.1" + +"@fullcalendar/daygrid@^6.1.17", "@fullcalendar/daygrid@~6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/daygrid/-/daygrid-6.1.17.tgz" + integrity sha512-K7m+pd7oVJ9fW4h7CLDdDGJbc9szJ1xDU1DZ2ag+7oOo1aCNLv44CehzkkknM6r8EYlOOhgaelxQpKAI4glj7A== + +"@fullcalendar/interaction@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/interaction/-/interaction-6.1.17.tgz" + integrity sha512-AudvQvgmJP2FU89wpSulUUjeWv24SuyCx8FzH2WIPVaYg+vDGGYarI7K6PcM3TH7B/CyaBjm5Rqw9lXgnwt5YA== + +"@fullcalendar/list@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/list/-/list-6.1.17.tgz" + integrity sha512-fkyK49F9IxwlGUBVhJGsFpd/LTi/vRVERLIAe1HmBaGkjwpxnynm8TMLb9mZip97wvDk3CmZWduMe6PxscAlow== + +"@fullcalendar/timegrid@^6.1.17": + version "6.1.17" + resolved "https://registry.npmjs.org/@fullcalendar/timegrid/-/timegrid-6.1.17.tgz" + integrity sha512-K4PlA3L3lclLOs3IX8cvddeiJI9ZVMD7RA9IqaWwbvac771971foc9tFze9YY+Pqesf6S+vhS2dWtEVlERaGlQ== + dependencies: + "@fullcalendar/daygrid" "~6.1.17" + +"@iconify-json/iconamoon@^1.2.2": + version "1.2.2" + resolved "https://registry.npmjs.org/@iconify-json/iconamoon/-/iconamoon-1.2.2.tgz" + integrity sha512-Xn7YeSDniPgutPr0qil/iQwQelq975OYQ/i2twGjcK4DjGOXBrBC+6q45WtVuQbFfXzM7bgijv4yVnxy0OqUdQ== + dependencies: + "@iconify/types" "*" + +"@iconify/types@*", "@iconify/types@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz" + integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== + +"@iconify/utils@^2.3.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz" + integrity sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA== + dependencies: + "@antfu/install-pkg" "^1.0.0" + "@antfu/utils" "^8.1.0" + "@iconify/types" "^2.0.0" + debug "^4.4.0" + globals "^15.14.0" + kolorist "^1.8.0" + local-pkg "^1.0.0" + mlly "^1.7.4" + +"@inquirer/checkbox@^4.1.2": + version "4.1.5" + resolved "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.5.tgz" + integrity sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^5.1.6", "@inquirer/confirm@5.1.6": + version "5.1.6" + resolved "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.6.tgz" + integrity sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw== + dependencies: + "@inquirer/core" "^10.1.7" + "@inquirer/type" "^3.0.4" + +"@inquirer/core@^10.1.10", "@inquirer/core@^10.1.7": + version "10.1.10" + resolved "https://registry.npmjs.org/@inquirer/core/-/core-10.1.10.tgz" + integrity sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw== + dependencies: + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^2.0.0" + signal-exit "^4.1.0" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^4.2.7": + version "4.2.10" + resolved "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.10.tgz" + integrity sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + external-editor "^3.1.0" + +"@inquirer/expand@^4.0.9": + version "4.0.12" + resolved "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.12.tgz" + integrity sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.11": + version "1.0.11" + resolved "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== + +"@inquirer/input@^4.1.6": + version "4.1.9" + resolved "https://registry.npmjs.org/@inquirer/input/-/input-4.1.9.tgz" + integrity sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + +"@inquirer/number@^3.0.9": + version "3.0.12" + resolved "https://registry.npmjs.org/@inquirer/number/-/number-3.0.12.tgz" + integrity sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + +"@inquirer/password@^4.0.9": + version "4.0.12" + resolved "https://registry.npmjs.org/@inquirer/password/-/password-4.0.12.tgz" + integrity sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@7.3.2": + version "7.3.2" + resolved "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.3.2.tgz" + integrity sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ== + dependencies: + "@inquirer/checkbox" "^4.1.2" + "@inquirer/confirm" "^5.1.6" + "@inquirer/editor" "^4.2.7" + "@inquirer/expand" "^4.0.9" + "@inquirer/input" "^4.1.6" + "@inquirer/number" "^3.0.9" + "@inquirer/password" "^4.0.9" + "@inquirer/rawlist" "^4.0.9" + "@inquirer/search" "^3.0.9" + "@inquirer/select" "^4.0.9" + +"@inquirer/rawlist@^4.0.9": + version "4.0.12" + resolved "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.12.tgz" + integrity sha512-wNPJZy8Oc7RyGISPxp9/MpTOqX8lr0r+lCCWm7hQra+MDtYRgINv1hxw7R+vKP71Bu/3LszabxOodfV/uTfsaA== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^3.0.9": + version "3.0.12" + resolved "https://registry.npmjs.org/@inquirer/search/-/search-3.0.12.tgz" + integrity sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^4.0.9": + version "4.1.1" + resolved "https://registry.npmjs.org/@inquirer/select/-/select-4.1.1.tgz" + integrity sha512-IUXzzTKVdiVNMA+2yUvPxWsSgOG4kfX93jOM4Zb5FgujeInotv5SPIJVeXQ+fO4xu7tW8VowFhdG5JRmmCyQ1Q== + dependencies: + "@inquirer/core" "^10.1.10" + "@inquirer/figures" "^1.0.11" + "@inquirer/type" "^3.0.6" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^1.5.5": + version "1.5.5" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz" + integrity sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA== + dependencies: + mute-stream "^1.0.0" + +"@inquirer/type@^3.0.4", "@inquirer/type@^3.0.6": + version "3.0.6" + resolved "https://registry.npmjs.org/@inquirer/type/-/type-3.0.6.tgz" + integrity sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + 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" + +"@isaacs/fs-minipass@^4.0.0": + version "4.0.1" + resolved "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz" + integrity sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w== + dependencies: + minipass "^7.0.4" + +"@isaacs/string-locale-compare@^1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz" + integrity sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ== + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/source-map@^0.3.3": + version "0.3.6" + resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz" + integrity sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@jsonjoy.com/base64@^1.1.1": + version "1.1.2" + resolved "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz" + integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== + +"@jsonjoy.com/json-pack@^1.0.3": + version "1.2.0" + resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.2.0.tgz" + integrity sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA== + dependencies: + "@jsonjoy.com/base64" "^1.1.1" + "@jsonjoy.com/util" "^1.1.2" + hyperdyperid "^1.2.0" + thingies "^1.20.0" + +"@jsonjoy.com/util@^1.1.2", "@jsonjoy.com/util@^1.3.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz" + integrity sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA== + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@listr2/prompt-adapter-inquirer@2.0.18": + version "2.0.18" + resolved "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.18.tgz" + integrity sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q== + dependencies: + "@inquirer/type" "^1.5.5" + +"@lmdb/lmdb-win32-x64@3.2.6": + version "3.2.6" + resolved "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.6.tgz" + integrity sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg== + +"@mixmark-io/domino@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz" + integrity sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw== + +"@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3": + version "3.0.3" + resolved "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz" + integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== + +"@napi-rs/nice-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz" + integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== + +"@napi-rs/nice@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz" + integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.0.1" + "@napi-rs/nice-android-arm64" "1.0.1" + "@napi-rs/nice-darwin-arm64" "1.0.1" + "@napi-rs/nice-darwin-x64" "1.0.1" + "@napi-rs/nice-freebsd-x64" "1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" + "@napi-rs/nice-linux-arm64-gnu" "1.0.1" + "@napi-rs/nice-linux-arm64-musl" "1.0.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" + "@napi-rs/nice-linux-s390x-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-musl" "1.0.1" + "@napi-rs/nice-win32-arm64-msvc" "1.0.1" + "@napi-rs/nice-win32-ia32-msvc" "1.0.1" + "@napi-rs/nice-win32-x64-msvc" "1.0.1" + +"@ng-bootstrap/ng-bootstrap@^18.0.0": + version "18.0.0" + resolved "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-18.0.0.tgz" + integrity sha512-GeSAz4yiGq49psdte8kcf+Y562wB3jK/qKRAkh6iA32lcXmy2sfQXVAmlHdjZ3AyP+E8lf3yMwuPdSKiYcDgSg== + dependencies: + tslib "^2.3.0" + +"@ngrx/effects@^19.1.0": + version "19.1.0" + resolved "https://registry.npmjs.org/@ngrx/effects/-/effects-19.1.0.tgz" + integrity sha512-rGRN0ZnzAPmQdUPvmoqZsK7Da/AoCfQcfody+h6PfHTwXNm+M2MRc8tXO6C+fznMRww8ZgNror2dfFmoOSOvNg== + dependencies: + tslib "^2.0.0" + +"@ngrx/store-devtools@^19.1.0": + version "19.1.0" + resolved "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-19.1.0.tgz" + integrity sha512-c8sV5FQofqm7lF6HTJ4Bb7L/69TaIYHAwEFMbgqbsNoWDx+pilw/It6X9J3LnU8bXjQK4xg6qsgJ7fJIH5X2NA== + dependencies: + tslib "^2.0.0" + +"@ngrx/store@^19.1.0": + version "19.1.0" + resolved "https://registry.npmjs.org/@ngrx/store/-/store-19.1.0.tgz" + integrity sha512-8kKCSFahTpRTx3f/wwcDjItdFnk2IMoorWRjTI2U/MGWuEi4flqLNWcX99s759e7TI6PctiGsaS8jnJXIUS8Jg== + dependencies: + tslib "^2.0.0" + +"@ngtools/webpack@19.2.6": + version "19.2.6" + resolved "https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.6.tgz" + integrity sha512-/jWpZUoMru3YbRJAPZ2KroUSzE6Ak5Hav219raYQaBXVtyLAvFE5VC1/CiH0wTYnb/dyjxzWq38ftOr/vv0+tg== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/agent@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz" + integrity sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q== + dependencies: + agent-base "^7.1.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.1" + lru-cache "^10.0.1" + socks-proxy-agent "^8.0.3" + +"@npmcli/arborist@^9.0.1": + version "9.0.1" + resolved "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.0.1.tgz" + integrity sha512-m00iV8hgbmli0IMf4Os+UmEq5JRTgqOHR+x5h07O7mO/60q5hLaYwZUMamJ73wlMG68c3WB8ZloOxON/knF5vg== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/fs" "^4.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/map-workspaces" "^4.0.1" + "@npmcli/metavuln-calculator" "^9.0.0" + "@npmcli/name-from-folder" "^3.0.0" + "@npmcli/node-gyp" "^4.0.0" + "@npmcli/package-json" "^6.0.1" + "@npmcli/query" "^4.0.0" + "@npmcli/redact" "^3.0.0" + "@npmcli/run-script" "^9.0.1" + bin-links "^5.0.0" + cacache "^19.0.1" + common-ancestor-path "^1.0.1" + hosted-git-info "^8.0.0" + json-stringify-nice "^1.1.4" + lru-cache "^10.2.2" + minimatch "^9.0.4" + nopt "^8.0.0" + npm-install-checks "^7.1.0" + npm-package-arg "^12.0.0" + npm-pick-manifest "^10.0.0" + npm-registry-fetch "^18.0.1" + pacote "^21.0.0" + parse-conflict-json "^4.0.0" + proc-log "^5.0.0" + proggy "^3.0.0" + promise-all-reject-late "^1.0.0" + promise-call-limit "^3.0.1" + read-package-json-fast "^4.0.0" + semver "^7.3.7" + ssri "^12.0.0" + treeverse "^3.0.0" + walk-up-path "^4.0.0" + +"@npmcli/config@^10.1.0": + version "10.1.0" + resolved "https://registry.npmjs.org/@npmcli/config/-/config-10.1.0.tgz" + integrity sha512-ygyCJATTr+xmuQHiX28adNT3tbDcWIfHQggNtLL2ykSyH4VCF5YeG4SilZaYIxf+72GZA6CJpESaDyhq9Boozg== + dependencies: + "@npmcli/map-workspaces" "^4.0.1" + "@npmcli/package-json" "^6.0.1" + ci-info "^4.0.0" + ini "^5.0.0" + nopt "^8.1.0" + proc-log "^5.0.0" + semver "^7.3.5" + walk-up-path "^4.0.0" + +"@npmcli/fs@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz" + integrity sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q== + dependencies: + semver "^7.3.5" + +"@npmcli/git@^6.0.0", "@npmcli/git@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz" + integrity sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ== + dependencies: + "@npmcli/promise-spawn" "^8.0.0" + ini "^5.0.0" + lru-cache "^10.0.1" + npm-pick-manifest "^10.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + semver "^7.3.5" + which "^5.0.0" + +"@npmcli/installed-package-contents@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz" + integrity sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q== + dependencies: + npm-bundled "^4.0.0" + npm-normalize-package-bin "^4.0.0" + +"@npmcli/map-workspaces@^4.0.1", "@npmcli/map-workspaces@^4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-4.0.2.tgz" + integrity sha512-mnuMuibEbkaBTYj9HQ3dMe6L0ylYW+s/gfz7tBDMFY/la0w9Kf44P9aLn4/+/t3aTR3YUHKoT6XQL9rlicIe3Q== + dependencies: + "@npmcli/name-from-folder" "^3.0.0" + "@npmcli/package-json" "^6.0.0" + glob "^10.2.2" + minimatch "^9.0.0" + +"@npmcli/metavuln-calculator@^9.0.0": + version "9.0.0" + resolved "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.0.tgz" + integrity sha512-znLKqdy1ZEGNK3VB9j/RzGyb/P0BJb3fGpvEbHIAyBAXsps2l1ce8SVHfsGAFLl9s8072PxafqTn7RC8wSnQPg== + dependencies: + cacache "^19.0.0" + json-parse-even-better-errors "^4.0.0" + pacote "^21.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + +"@npmcli/name-from-folder@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz" + integrity sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA== + +"@npmcli/node-gyp@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz" + integrity sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA== + +"@npmcli/package-json@^6.0.0", "@npmcli/package-json@^6.0.1", "@npmcli/package-json@^6.1.0", "@npmcli/package-json@^6.1.1": + version "6.1.1" + resolved "https://registry.npmjs.org/@npmcli/package-json/-/package-json-6.1.1.tgz" + integrity sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw== + dependencies: + "@npmcli/git" "^6.0.0" + glob "^10.2.2" + hosted-git-info "^8.0.0" + json-parse-even-better-errors "^4.0.0" + proc-log "^5.0.0" + semver "^7.5.3" + validate-npm-package-license "^3.0.4" + +"@npmcli/promise-spawn@^8.0.0", "@npmcli/promise-spawn@^8.0.2": + version "8.0.2" + resolved "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.2.tgz" + integrity sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ== + dependencies: + which "^5.0.0" + +"@npmcli/query@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@npmcli/query/-/query-4.0.0.tgz" + integrity sha512-3pPbese0fbCiFJ/7/X1GBgxAKYFE8sxBddA7GtuRmOgNseH4YbGsXJ807Ig3AEwNITjDUISHglvy89cyDJnAwA== + dependencies: + postcss-selector-parser "^6.1.2" + +"@npmcli/redact@^3.0.0", "@npmcli/redact@^3.1.1": + version "3.1.1" + resolved "https://registry.npmjs.org/@npmcli/redact/-/redact-3.1.1.tgz" + integrity sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA== + +"@npmcli/run-script@^9.0.0": + version "9.1.0" + resolved "https://registry.npmjs.org/@npmcli/run-script/-/run-script-9.1.0.tgz" + integrity sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg== + dependencies: + "@npmcli/node-gyp" "^4.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + node-gyp "^11.0.0" + proc-log "^5.0.0" + which "^5.0.0" + +"@npmcli/run-script@^9.0.1": + version "9.0.2" + dependencies: + "@npmcli/node-gyp" "^4.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + node-gyp "^11.0.0" + proc-log "^5.0.0" + which "^5.0.0" + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== + +"@parcel/watcher@^2.4.1": + version "2.5.1" + resolved "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@popperjs/core@^2.11.8": + version "2.11.8" + resolved "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@rollup/rollup-win32-x64-msvc@4.34.8": + version "4.34.8" + resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz" + integrity sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g== + +"@schematics/angular@19.2.6": + version "19.2.6" + resolved "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.6.tgz" + integrity sha512-fmbF9ONmEZqxHocCwOSWG2mHp4a22d1uW+DZUBUgZSBUFIrnFw42deOxDq8mkZOZ1Tc73UpLN2GKI7iJeUqS2A== + dependencies: + "@angular-devkit/core" "19.2.6" + "@angular-devkit/schematics" "19.2.6" + jsonc-parser "3.3.1" + +"@sigstore/bundle@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@sigstore/bundle/-/bundle-3.1.0.tgz" + integrity sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag== + dependencies: + "@sigstore/protobuf-specs" "^0.4.0" + +"@sigstore/core@^2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@sigstore/core/-/core-2.0.0.tgz" + integrity sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg== + +"@sigstore/protobuf-specs@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.4.0.tgz" + integrity sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A== + +"@sigstore/sign@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@sigstore/sign/-/sign-3.1.0.tgz" + integrity sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.0" + make-fetch-happen "^14.0.2" + proc-log "^5.0.0" + promise-retry "^2.0.1" + +"@sigstore/tuf@^3.0.0", "@sigstore/tuf@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@sigstore/tuf/-/tuf-3.1.0.tgz" + integrity sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA== + dependencies: + "@sigstore/protobuf-specs" "^0.4.0" + tuf-js "^3.0.1" + +"@sigstore/verify@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@sigstore/verify/-/verify-2.1.0.tgz" + integrity sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.0" + +"@sindresorhus/merge-streams@^2.1.0": + version "2.3.0" + resolved "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz" + integrity sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg== + +"@socket.io/component-emitter@~3.1.0": + version "3.1.2" + resolved "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz" + integrity sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA== + +"@svgdotjs/svg.draggable.js@^3.0.4": + version "3.0.6" + resolved "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz" + integrity sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA== + +"@svgdotjs/svg.filter.js@^3.0.8": + version "3.0.9" + resolved "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz" + integrity sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw== + dependencies: + "@svgdotjs/svg.js" "^3.2.4" + +"@svgdotjs/svg.js@^3.2.4": + version "3.2.4" + resolved "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.4.tgz" + integrity sha512-BjJ/7vWNowlX3Z8O4ywT58DqbNRyYlkk6Yz/D13aB7hGmfQTvGX4Tkgtm/ApYlu9M7lCQi15xUEidqMUmdMYwg== + +"@svgdotjs/svg.resize.js@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz" + integrity sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA== + +"@svgdotjs/svg.select.js@^4.0.1": + version "4.0.2" + resolved "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.2.tgz" + integrity sha512-5gWdrvoQX3keo03SCmgaBbD+kFftq0F/f2bzCbNnpkkvW6tk4rl4MakORzFuNjvXPWwB4az9GwuvVxQVnjaK2g== + +"@tufjs/canonical-json@2.0.0": + version "2.0.0" + resolved "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz" + integrity sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA== + +"@tufjs/models@3.0.1": + version "3.0.1" + resolved "https://registry.npmjs.org/@tufjs/models/-/models-3.0.1.tgz" + integrity sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA== + dependencies: + "@tufjs/canonical-json" "2.0.0" + minimatch "^9.0.5" + +"@types/babel__core@7.20.5": + version "7.20.5" + resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*": + version "7.20.7" + resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== + dependencies: + "@babel/types" "^7.20.7" + +"@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== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.13": + version "3.5.13" + resolved "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz" + integrity sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ== + dependencies: + "@types/node" "*" + +"@types/color-convert@2.0.4": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/color-convert/-/color-convert-2.0.4.tgz" + integrity sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ== + dependencies: + "@types/color-name" "^1.1.0" + +"@types/color-name@^1.1.0": + version "1.1.5" + resolved "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.5.tgz" + integrity sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg== + +"@types/connect-history-api-fallback@^1.5.4": + 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== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.12": + version "2.8.17" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.7": + 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== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "9.6.1" + resolved "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz" + integrity sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.6", "@types/estree@1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== + +"@types/express-serve-static-core@*": + version "5.0.6" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz" + integrity sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/google.maps@^3.54.10": + version "3.58.1" + resolved "https://registry.npmjs.org/@types/google.maps/-/google.maps-3.58.1.tgz" + integrity sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ== + +"@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== + +"@types/http-proxy@^1.17.15", "@types/http-proxy@^1.17.8": + version "1.17.16" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz" + integrity sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w== + dependencies: + "@types/node" "*" + +"@types/jasmine@~5.1.0": + version "5.1.7" + resolved "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.7.tgz" + integrity sha512-DVOfk9FaClQfNFpSfaML15jjB5cjffDMvjtph525sroR5BEAW2uKnTOYUTqTFuZFjNvH0T5XMIydvIctnUKufw== + +"@types/json-schema@*", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/lodash-es@4.17.12": + version "4.17.12" + resolved "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.16" + resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.16.tgz" + integrity sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g== + +"@types/marked@4.3.2": + version "4.3.2" + resolved "https://registry.npmjs.org/@types/marked/-/marked-4.3.2.tgz" + integrity sha512-a79Yc3TOk6dGdituy8hmTTJXjOkZ7zsFYV10L337ttq/rec8lRMDBpV7fL3uLx6TgbFCa5DU/h8FmIBQPSbU0w== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node-forge@^1.3.0": + version "1.3.11" + resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@>=10.0.0": + version "22.14.0" + resolved "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz" + integrity sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA== + dependencies: + undici-types "~6.21.0" + +"@types/qs@*": + version "6.9.18" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.18.tgz" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + +"@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== + +"@types/retry@0.12.2": + version "0.12.2" + resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz" + integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-index@^1.9.4": + 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== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.15.5": + version "1.15.7" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + +"@types/sockjs@^0.3.36": + 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== + dependencies: + "@types/node" "*" + +"@types/turndown@5.0.5": + version "5.0.5" + resolved "https://registry.npmjs.org/@types/turndown/-/turndown-5.0.5.tgz" + integrity sha512-TL2IgGgc7B5j78rIccBtlYAnkuv8nUQqhQc+DSYV5j9Be9XOcm/SKOVRuA47xAVI3680Tk9B1d8flK2GWT2+4w== + +"@types/ws@^8.5.10": + version "8.18.1" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== + dependencies: + "@types/node" "*" + +"@vitejs/plugin-basic-ssl@1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.2.0.tgz" + integrity sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q== + +"@webassemblyjs/ast@^1.14.1", "@webassemblyjs/ast@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz" + integrity sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ== + dependencies: + "@webassemblyjs/helper-numbers" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + +"@webassemblyjs/floating-point-hex-parser@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz" + integrity sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA== + +"@webassemblyjs/helper-api-error@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz" + integrity sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ== + +"@webassemblyjs/helper-buffer@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz" + integrity sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA== + +"@webassemblyjs/helper-numbers@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz" + integrity sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.13.2" + "@webassemblyjs/helper-api-error" "1.13.2" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz" + integrity sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA== + +"@webassemblyjs/helper-wasm-section@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz" + integrity sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/wasm-gen" "1.14.1" + +"@webassemblyjs/ieee754@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz" + integrity sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz" + integrity sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.13.2": + version "1.13.2" + resolved "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz" + integrity sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ== + +"@webassemblyjs/wasm-edit@^1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz" + integrity sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/helper-wasm-section" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-opt" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + "@webassemblyjs/wast-printer" "1.14.1" + +"@webassemblyjs/wasm-gen@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz" + integrity sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wasm-opt@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz" + integrity sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-buffer" "1.14.1" + "@webassemblyjs/wasm-gen" "1.14.1" + "@webassemblyjs/wasm-parser" "1.14.1" + +"@webassemblyjs/wasm-parser@^1.14.1", "@webassemblyjs/wasm-parser@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz" + integrity sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@webassemblyjs/helper-api-error" "1.13.2" + "@webassemblyjs/helper-wasm-bytecode" "1.13.2" + "@webassemblyjs/ieee754" "1.13.2" + "@webassemblyjs/leb128" "1.13.2" + "@webassemblyjs/utf8" "1.13.2" + +"@webassemblyjs/wast-printer@1.14.1": + version "1.14.1" + resolved "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz" + integrity sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw== + dependencies: + "@webassemblyjs/ast" "1.14.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yr/monotone-cubic-spline@^1.0.3": + version "1.0.3" + resolved "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz" + integrity sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA== + +abbrev@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-3.0.0.tgz" + integrity sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA== + +accepts@~1.3.4, accepts@~1.3.8: + 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== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn@^8.14.0, acorn@^8.8.2: + version "8.14.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + +adjust-sourcemap-loader@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz" + integrity sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A== + dependencies: + loader-utils "^2.0.0" + regex-parser "^2.2.11" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-formats@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^8.0.0, ajv@^8.9.0, ajv@8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +angularx-flatpickr@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/angularx-flatpickr/-/angularx-flatpickr-8.1.0.tgz" + integrity sha512-U+WXMUXGEiQbdMGSPk7T+HehmAFdVWKu3XlCXFM8mYCCB/fWHW8sbHstxxZgOymD5Q1kfLaHNob1MxhWUgv1hg== + dependencies: + tslib "^2.3.0" + +ansi-colors@4.1.3: + 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== + +ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-escapes@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz" + integrity sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw== + dependencies: + environment "^1.0.0" + +ansi-html-community@^0.0.8: + 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== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz" + integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + 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" + +ansi-styles@^6.0.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +ansi-styles@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apexcharts@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/apexcharts/-/apexcharts-4.5.0.tgz" + integrity sha512-E7ZkrVqPNBUWy/Rmg8DEIqHNBmElzICE/oxOX5Ekvs2ICQUOK/VkEkMH09JGJu+O/EA0NL31hxlmF+wrwrSLaQ== + dependencies: + "@svgdotjs/svg.draggable.js" "^3.0.4" + "@svgdotjs/svg.filter.js" "^3.0.8" + "@svgdotjs/svg.js" "^3.2.4" + "@svgdotjs/svg.resize.js" "^2.0.2" + "@svgdotjs/svg.select.js" "^4.0.1" + "@yr/monotone-cubic-spline" "^1.0.3" + +aproba@^2.0.0: + 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== + +archy@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +autoprefixer@10.4.20: + version "10.4.20" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz" + integrity sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g== + dependencies: + browserslist "^4.23.3" + caniuse-lite "^1.0.30001646" + fraction.js "^4.3.7" + normalize-range "^0.1.2" + picocolors "^1.0.1" + postcss-value-parser "^4.2.0" + +babel-loader@9.2.1: + version "9.2.1" + resolved "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== + dependencies: + find-cache-dir "^4.0.0" + schema-utils "^4.0.0" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.13" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz" + integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.4" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.4" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz" + integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.4" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64id@~2.0.0, base64id@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +batch@0.6.1: + 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== + +beasties@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/beasties/-/beasties-0.2.0.tgz" + integrity sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow== + dependencies: + css-select "^5.1.0" + css-what "^6.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + htmlparser2 "^9.1.0" + picocolors "^1.1.1" + postcss "^8.4.49" + postcss-media-query-parser "^0.2.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +bin-links@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/bin-links/-/bin-links-5.0.0.tgz" + integrity sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA== + dependencies: + cmd-shim "^7.0.0" + npm-normalize-package-bin "^4.0.0" + proc-log "^5.0.0" + read-cmd-shim "^5.0.0" + write-file-atomic "^6.0.0" + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +binary-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-3.0.0.tgz" + integrity sha512-X0RfwMgXPEesg6PCXzytQZt9Unh9gtc4SfeTNJvKifUL//Oegcc/Yf31z6hThNZ8dnD3Ir3wkHVN0eWrTvP5ww== + +bl@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +blurhash@2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz" + integrity sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w== + +body-parser@^1.19.0, body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.2.1: + version "1.3.0" + resolved "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz" + integrity sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA== + dependencies: + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +bootstrap@^5.3.5: + version "5.3.5" + resolved "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.5.tgz" + integrity sha512-ct1CHKtiobRimyGzmsSldEtM03E8fcEX4Tb3dGXz1V8faRwM50+vfHwTzOxB3IlKO7m+9vTH3s/3C6T2EAPeTA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserslist@^4.21.5, browserslist@^4.23.0, browserslist@^4.23.3, browserslist@^4.24.0, browserslist@^4.24.4: + version "4.24.4" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== + dependencies: + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^19.0.0, cacache@^19.0.1: + version "19.0.1" + resolved "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz" + integrity sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ== + dependencies: + "@npmcli/fs" "^4.0.0" + fs-minipass "^3.0.0" + glob "^10.2.2" + lru-cache "^10.0.1" + minipass "^7.0.3" + minipass-collect "^2.0.1" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + p-map "^7.0.2" + ssri "^12.0.0" + tar "^7.4.3" + unique-filename "^4.0.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2, call-bound@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +caniuse-lite@^1.0.30001646, caniuse-lite@^1.0.30001688: + version "1.0.30001712" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz" + integrity sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig== + +chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +choices.js@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/choices.js/-/choices.js-11.1.0.tgz" + integrity sha512-mIt0uLhedHg2ea/K2PACrVpt391vRGHuOoctPAiHcyemezwzNMxj7jOzNEk8e7EbjLh0S0sspDkSCADOKz9kcw== + dependencies: + fuse.js "^7.0.0" + +chokidar@^3.5.1: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + 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" + +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chownr@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz" + integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== + +chrome-trace-event@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz" + integrity sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ== + +ci-info@^4.0.0, ci-info@^4.1.0: + version "4.1.0" + +cidr-regex@^4.1.1: + version "4.1.3" + resolved "https://registry.npmjs.org/cidr-regex/-/cidr-regex-4.1.3.tgz" + integrity sha512-86M1y3ZeQvpZkZejQCcS+IaSWjlDUC+ORP0peScQ4uEUFCZ8bEQVz7NlJHqysoUb6w3zCjx4Mq/8/2RHhMwHYw== + dependencies: + ip-regex "^5.0.0" + +ckeditor5@^44.3.0, ckeditor5@44.3.0: + version "44.3.0" + resolved "https://registry.npmjs.org/ckeditor5/-/ckeditor5-44.3.0.tgz" + integrity sha512-g2arr/fejYAiOkdMeYvz1ficRPJ42OvO+pYROhre08YjIbAtJBr8wO9DPk9nCV3msnyYE+B02bs+TppazhYNtw== + dependencies: + "@ckeditor/ckeditor5-adapter-ckfinder" "44.3.0" + "@ckeditor/ckeditor5-alignment" "44.3.0" + "@ckeditor/ckeditor5-autoformat" "44.3.0" + "@ckeditor/ckeditor5-autosave" "44.3.0" + "@ckeditor/ckeditor5-basic-styles" "44.3.0" + "@ckeditor/ckeditor5-block-quote" "44.3.0" + "@ckeditor/ckeditor5-bookmark" "44.3.0" + "@ckeditor/ckeditor5-ckbox" "44.3.0" + "@ckeditor/ckeditor5-ckfinder" "44.3.0" + "@ckeditor/ckeditor5-clipboard" "44.3.0" + "@ckeditor/ckeditor5-cloud-services" "44.3.0" + "@ckeditor/ckeditor5-code-block" "44.3.0" + "@ckeditor/ckeditor5-core" "44.3.0" + "@ckeditor/ckeditor5-easy-image" "44.3.0" + "@ckeditor/ckeditor5-editor-balloon" "44.3.0" + "@ckeditor/ckeditor5-editor-classic" "44.3.0" + "@ckeditor/ckeditor5-editor-decoupled" "44.3.0" + "@ckeditor/ckeditor5-editor-inline" "44.3.0" + "@ckeditor/ckeditor5-editor-multi-root" "44.3.0" + "@ckeditor/ckeditor5-emoji" "44.3.0" + "@ckeditor/ckeditor5-engine" "44.3.0" + "@ckeditor/ckeditor5-enter" "44.3.0" + "@ckeditor/ckeditor5-essentials" "44.3.0" + "@ckeditor/ckeditor5-find-and-replace" "44.3.0" + "@ckeditor/ckeditor5-font" "44.3.0" + "@ckeditor/ckeditor5-heading" "44.3.0" + "@ckeditor/ckeditor5-highlight" "44.3.0" + "@ckeditor/ckeditor5-horizontal-line" "44.3.0" + "@ckeditor/ckeditor5-html-embed" "44.3.0" + "@ckeditor/ckeditor5-html-support" "44.3.0" + "@ckeditor/ckeditor5-image" "44.3.0" + "@ckeditor/ckeditor5-indent" "44.3.0" + "@ckeditor/ckeditor5-language" "44.3.0" + "@ckeditor/ckeditor5-link" "44.3.0" + "@ckeditor/ckeditor5-list" "44.3.0" + "@ckeditor/ckeditor5-markdown-gfm" "44.3.0" + "@ckeditor/ckeditor5-media-embed" "44.3.0" + "@ckeditor/ckeditor5-mention" "44.3.0" + "@ckeditor/ckeditor5-minimap" "44.3.0" + "@ckeditor/ckeditor5-page-break" "44.3.0" + "@ckeditor/ckeditor5-paragraph" "44.3.0" + "@ckeditor/ckeditor5-paste-from-office" "44.3.0" + "@ckeditor/ckeditor5-remove-format" "44.3.0" + "@ckeditor/ckeditor5-restricted-editing" "44.3.0" + "@ckeditor/ckeditor5-select-all" "44.3.0" + "@ckeditor/ckeditor5-show-blocks" "44.3.0" + "@ckeditor/ckeditor5-source-editing" "44.3.0" + "@ckeditor/ckeditor5-special-characters" "44.3.0" + "@ckeditor/ckeditor5-style" "44.3.0" + "@ckeditor/ckeditor5-table" "44.3.0" + "@ckeditor/ckeditor5-theme-lark" "44.3.0" + "@ckeditor/ckeditor5-typing" "44.3.0" + "@ckeditor/ckeditor5-ui" "44.3.0" + "@ckeditor/ckeditor5-undo" "44.3.0" + "@ckeditor/ckeditor5-upload" "44.3.0" + "@ckeditor/ckeditor5-utils" "44.3.0" + "@ckeditor/ckeditor5-watchdog" "44.3.0" + "@ckeditor/ckeditor5-widget" "44.3.0" + "@ckeditor/ckeditor5-word-count" "44.3.0" + +cli-columns@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cli-columns/-/cli-columns-4.0.0.tgz" + integrity sha512-XW2Vg+w+L9on9wtwKpyzluIPCWXjaBahI7mTcYjx+BVIYD9c3yqcv/yKC7CmdCZat4rq2yiE1UMSJC5ivKfMtQ== + dependencies: + string-width "^4.2.3" + strip-ansi "^6.0.1" + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== + dependencies: + restore-cursor "^5.0.0" + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-truncate@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz" + integrity sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA== + dependencies: + slice-ansi "^5.0.0" + string-width "^7.0.0" + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +cliui@^8.0.1: + 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== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +cmd-shim@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/cmd-shim/-/cmd-shim-7.0.0.tgz" + integrity sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw== + +color-convert@^2.0.1, color-convert@2.0.1: + 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" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-parse@1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz" + integrity sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA== + dependencies: + color-name "^1.0.0" + +colorette@^2.0.10, colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +commander@^2.20.0: + 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== + +common-ancestor-path@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz" + integrity sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +compressible@~2.0.18: + version "2.0.18" + resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.8.0" + resolved "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz" + integrity sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.0.2" + safe-buffer "5.2.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +confbox@^0.2.1: + version "0.2.2" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + +connect-history-api-fallback@^2.0.0: + 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== + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.5.1, convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@~0.7.2: + version "0.7.2" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +copy-anything@^2.0.1: + version "2.0.6" + resolved "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz" + integrity sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw== + dependencies: + is-what "^3.14.1" + +copy-webpack-plugin@12.0.2: + version "12.0.2" + resolved "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz" + integrity sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA== + dependencies: + fast-glob "^3.3.2" + glob-parent "^6.0.1" + globby "^14.0.0" + normalize-path "^3.0.0" + schema-utils "^4.2.0" + serialize-javascript "^6.0.2" + +core-js-compat@^3.40.0: + version "3.41.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.41.0.tgz" + integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== + dependencies: + browserslist "^4.24.4" + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz" + integrity sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg== + dependencies: + env-paths "^2.2.1" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +css-loader@7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz" + integrity sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.33" + postcss-modules-extract-imports "^3.1.0" + postcss-modules-local-by-default "^4.0.5" + postcss-modules-scope "^3.2.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.5.4" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz" + integrity sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg== + +date-format@^4.0.14: + version "4.0.14" + resolved "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz" + integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== + +dayjs@^1.11.13: + version "1.11.13" + resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.3.6, debug@^4.4.0, debug@4: + version "4.4.0" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@~4.3.1: + version "4.3.7" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +debug@~4.3.2: + version "4.3.7" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +debug@~4.3.4: + version "4.3.7" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== + +detect-libc@^2.0.1: + version "2.0.3" + resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz" + integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/di/-/di-0.0.1.tgz" + integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== + +diff@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz" + integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== + +dns-packet@^5.2.2: + version "5.6.1" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz" + integrity sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ== + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1, domutils@^3.1.0: + version "3.2.2" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dropzone@^5.9.0: + version "5.9.3" + resolved "https://registry.npmjs.org/dropzone/-/dropzone-5.9.3.tgz" + integrity sha512-Azk8kD/2/nJIuVPK+zQ9sjKMRIpRvNyqn9XwbBHNq+iNuSccbJS6hwm1Woy0pMST0erSo0u4j+KJaodndDk4vA== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.5.73: + version "1.5.132" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.132.tgz" + integrity sha512-QgX9EBvWGmvSRa74zqfnG7+Eno0Ak0vftBll0Pt2/z5b3bEGYL6OUXLgKPtvx73dn3dvwrlyVkjPKRRlhLYTEg== + +emoji-regex@^10.3.0: + version "10.4.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz" + integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +engine.io-parser@~5.2.1: + version "5.2.3" + resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz" + integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== + +engine.io@~6.6.0: + version "6.6.4" + resolved "https://registry.npmjs.org/engine.io/-/engine.io-6.6.4.tgz" + integrity sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g== + dependencies: + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.7.2" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.17.1" + +enhanced-resolve@^5.17.1: + version "5.18.1" + resolved "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz" + integrity sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +ent@~2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/ent/-/ent-2.2.2.tgz" + integrity sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + punycode "^1.4.1" + safe-regex-test "^1.1.0" + +entities@^4.2.0, entities@^4.3.0, entities@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.0, env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +environment@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz" + integrity sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q== + +err-code@^2.0.2: + 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== + +errno@^0.1.1: + version "0.1.8" + resolved "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-module-lexer@^1.2.1: + version "1.6.0" + resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz" + integrity sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +esbuild-wasm@0.25.1: + version "0.25.1" + resolved "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.25.1.tgz" + integrity sha512-dZxPeDHcDIQ6ilml/NzYxnPbNkoVsHSFH3JGLSobttc5qYYgExMo8lh2XcB+w+AfiqykVDGK5PWanGB0gWaAWw== + +esbuild@^0.25.0, esbuild@0.25.1: + version "0.25.1" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.1.tgz" + integrity sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ== + optionalDependencies: + "@esbuild/aix-ppc64" "0.25.1" + "@esbuild/android-arm" "0.25.1" + "@esbuild/android-arm64" "0.25.1" + "@esbuild/android-x64" "0.25.1" + "@esbuild/darwin-arm64" "0.25.1" + "@esbuild/darwin-x64" "0.25.1" + "@esbuild/freebsd-arm64" "0.25.1" + "@esbuild/freebsd-x64" "0.25.1" + "@esbuild/linux-arm" "0.25.1" + "@esbuild/linux-arm64" "0.25.1" + "@esbuild/linux-ia32" "0.25.1" + "@esbuild/linux-loong64" "0.25.1" + "@esbuild/linux-mips64el" "0.25.1" + "@esbuild/linux-ppc64" "0.25.1" + "@esbuild/linux-riscv64" "0.25.1" + "@esbuild/linux-s390x" "0.25.1" + "@esbuild/linux-x64" "0.25.1" + "@esbuild/netbsd-arm64" "0.25.1" + "@esbuild/netbsd-x64" "0.25.1" + "@esbuild/openbsd-arm64" "0.25.1" + "@esbuild/openbsd-x64" "0.25.1" + "@esbuild/sunos-x64" "0.25.1" + "@esbuild/win32-arm64" "0.25.1" + "@esbuild/win32-ia32" "0.25.1" + "@esbuild/win32-x64" "0.25.1" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +eventemitter3@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" + integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +exponential-backoff@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz" + integrity sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA== + +express@^4.21.2: + version "4.21.2" + resolved "https://registry.npmjs.org/express/-/express-4.21.2.tgz" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.12" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +exsolve@^1.0.1: + version "1.0.4" + resolved "https://registry.npmjs.org/exsolve/-/exsolve-1.0.4.tgz" + integrity sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw== + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +fast-deep-equal@^3.1.3: + 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== + +fast-diff@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-glob@^3.3.2, fast-glob@^3.3.3, fast-glob@3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fastest-levenshtein@^1.0.16: + version "1.0.16" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" + integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fdir@^6.4.3: + version "6.4.3" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz" + integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg== + dependencies: + common-path-prefix "^3.0.0" + pkg-dir "^7.0.0" + +find-up@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatpickr@^4.6.13: + version "4.6.13" + resolved "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.13.tgz" + integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw== + +flatted@^3.2.7: + version "3.3.3" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.0.0: + version "1.15.9" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +foreground-child@^3.1.0: + version "3.3.1" + resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== + dependencies: + cross-spawn "^7.0.6" + signal-exit "^4.0.1" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0, fs-minipass@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +fuse.js@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz" + integrity sha512-trLf4SzuuUxfusZADLINj+dE8clK1frKdmqiJNb1Es75fmI5oY6X2mxLVUciLLjxqw/xr72Dhy+lER6dGd02FQ== + +fuzzysort@3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz" + integrity sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ== + +gensync@^1.0.0-beta.2: + 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== + +get-caller-file@^2.0.5: + 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-east-asian-width@^1.0.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz" + integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== + +get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + 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== + +glob@^10.2.2, glob@^10.3.10, glob@^10.3.7, glob@^10.4.5: + version "10.4.5" + resolved "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== + dependencies: + foreground-child "^3.1.0" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" + +glob@^7.1.3, glob@^7.1.7: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^15.14.0: + version "15.15.0" + resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +globby@^14.0.0: + version "14.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz" + integrity sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA== + dependencies: + "@sindresorhus/merge-streams" "^2.1.0" + fast-glob "^3.3.3" + ignore "^7.0.3" + path-type "^6.0.0" + slash "^5.1.0" + unicorn-magic "^0.3.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.11, graceful-fs@^4.2.4, graceful-fs@^4.2.6: + 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== + +gumshoejs@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/gumshoejs/-/gumshoejs-5.1.2.tgz" + integrity sha512-wIRdZGTNkWMP8dY3po8mtNYmCfiSva41LxXIEek2yEHceETpxRmO7DfW7aUbHsuucC9z2oDPu3alN3+00FUqlw== + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hosted-git-info@^8.0.0, hosted-git-info@^8.0.2: + version "8.0.2" + resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.0.2.tgz" + integrity sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg== + dependencies: + lru-cache "^10.0.1" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.1.0" + entities "^4.5.0" + +http-cache-semantics@^4.1.1: + 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== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + 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: + version "0.5.9" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.9.tgz" + integrity sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw== + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-proxy-middleware@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz" + integrity sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA== + 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-middleware@3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz" + integrity sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg== + dependencies: + "@types/http-proxy" "^1.17.15" + debug "^4.3.6" + http-proxy "^1.18.1" + is-glob "^4.0.3" + is-plain-object "^5.0.0" + micromatch "^4.0.8" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +https-proxy-agent@^7.0.1, https-proxy-agent@7.0.6: + version "7.0.6" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +hyperdyperid@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz" + integrity sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A== + +iconify-icon@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/iconify-icon/-/iconify-icon-2.3.0.tgz" + integrity sha512-C0beI9oTDxQz6voI5CKl7MiJf0Lw4UU8K4G4t6pcUDClLmCvuMOpcvd8MAztQ2SfoH0iv7WHdxBFjekKPFKH2Q== + dependencies: + "@iconify/types" "^2.0.0" + +iconv-lite@^0.4.24, iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + 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" + +iconv-lite@^0.6.3: + 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" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-walk@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/ignore-walk/-/ignore-walk-7.0.0.tgz" + integrity sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ== + dependencies: + minimatch "^9.0.0" + +ignore@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz" + integrity sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA== + +image-size@~0.5.0: + 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== + +immutable@^5.0.2: + version "5.1.1" + resolved "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz" + integrity sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg== + +import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + 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: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@^5.0.0, ini@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz" + integrity sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw== + +init-package-json@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/init-package-json/-/init-package-json-8.0.0.tgz" + integrity sha512-zKgxfaGt6Zzi8VBSInOK0CYDigA9gzDCWPnSzGIoUlTU/5w7qIyi+6MyJYX96mMlxDGrIR85FhQszVyodYfB9g== + dependencies: + "@npmcli/package-json" "^6.1.0" + npm-package-arg "^12.0.0" + promzard "^2.0.0" + read "^4.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + validate-npm-package-name "^6.0.0" + +ip-address@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz" + integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g== + dependencies: + jsbn "1.1.0" + sprintf-js "^1.1.3" + +ip-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz" + integrity sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw== + +ipaddr.js@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz" + integrity sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA== + +ipaddr.js@1.9.1: + 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== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-cidr@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/is-cidr/-/is-cidr-5.1.1.tgz" + integrity sha512-AwzRMjtJNTPOgm7xuYZ71715z99t+4yRnSnSzgK5err5+heYi4zMuvmpUadaJ28+KCXCQo8CjUrKQZRWSPmqTQ== + dependencies: + cidr-regex "^4.1.1" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + 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-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-fullwidth-code-point@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz" + integrity sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA== + dependencies: + get-east-asian-width "^1.0.0" + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + +is-interactive@^1.0.0: + 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== + +is-network-error@^1.0.0: + version "1.1.0" + resolved "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz" + integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + 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== + dependencies: + isobject "^3.0.1" + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-what@^3.14.1: + version "3.14.1" + resolved "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isbinaryfile@^4.0.8: + version "4.0.10" + resolved "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz" + integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + 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== + +istanbul-lib-instrument@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + 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" + +istanbul-lib-instrument@6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.5: + version "3.1.7" + resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jasmine-core@^4.1.0: + version "4.6.1" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz" + integrity sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ== + +jasmine-core@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.1.2.tgz" + integrity sha512-2oIUMGn00FdUiqz6epiiJr7xcFyNYj3rDcfmnzfkBnHyBQ3cBQUs4mmyGsOb7TTLb9kxk7dBcmEmqhDKkBoDyA== + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jiti@^1.20.0: + version "1.21.7" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" + integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz" + integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-parse-even-better-errors@^2.3.0: + 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== + +json-parse-even-better-errors@^2.3.1: + 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== + +json-parse-even-better-errors@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz" + integrity sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stringify-nice@^1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz" + integrity sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw== + +json5@^2.1.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-parser@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz" + integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsvectormap@1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/jsvectormap/-/jsvectormap-1.3.3.tgz" + integrity sha512-cx0TgSxlFGzoX//4lW5ahP1rGUUiyiYc1p1eGPoF1vGVfEHF3M0+bgith4Fl8s3J1UPYvXpcpOWR9r0He8TpBg== + +just-diff-apply@^5.2.0: + version "5.5.0" + resolved "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz" + integrity sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw== + +just-diff@^6.0.0: + version "6.0.2" + resolved "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz" + integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== + +karma-chrome-launcher@~3.2.0: + version "3.2.0" + resolved "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz" + integrity sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q== + dependencies: + which "^1.2.1" + +karma-coverage@~2.2.0: + version "2.2.1" + resolved "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz" + integrity sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A== + dependencies: + istanbul-lib-coverage "^3.2.0" + istanbul-lib-instrument "^5.1.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.1" + istanbul-reports "^3.0.5" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz" + integrity sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ== + +karma-jasmine@~5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz" + integrity sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ== + dependencies: + jasmine-core "^4.1.0" + +karma-source-map-support@1.4.0: + 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== + dependencies: + source-map-support "^0.5.5" + +karma@~6.4.0: + version "6.4.4" + resolved "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz" + integrity sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w== + dependencies: + "@colors/colors" "1.5.0" + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.5.1" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.7" + graceful-fs "^4.2.6" + http-proxy "^1.18.1" + isbinaryfile "^4.0.8" + lodash "^4.17.21" + log4js "^6.4.1" + mime "^2.5.2" + minimatch "^3.0.4" + mkdirp "^0.5.5" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^4.7.2" + source-map "^0.6.1" + tmp "^0.2.1" + ua-parser-js "^0.7.30" + yargs "^16.1.1" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kolorist@^1.8.0: + version "1.8.0" + resolved "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz" + integrity sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ== + +launch-editor@^2.6.1: + version "2.10.0" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.10.0.tgz" + integrity sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.8.1" + +less-loader@12.2.0: + version "12.2.0" + resolved "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz" + integrity sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg== + +less@4.2.2: + version "4.2.2" + resolved "https://registry.npmjs.org/less/-/less-4.2.2.tgz" + integrity sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg== + 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" + +libnpmaccess@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-10.0.0.tgz" + integrity sha512-Nz9Lolajvh6nPA5ixdKNfN2BJS0N7LvqTXPqy3+F37i3T4mcped24JCjwnp5KCPCB0ewX3ccopwUnhaTS1/yXg== + dependencies: + npm-package-arg "^12.0.0" + npm-registry-fetch "^18.0.1" + +libnpmdiff@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/libnpmdiff/-/libnpmdiff-8.0.1.tgz" + integrity sha512-3HoZq96FtqpEq1miPKQVj49T+KAKF4bP1UflWBBQ1YZDwm77tgNnYttuSRj6N41R5B2bxL5wK8a0zFbFGIN7tw== + dependencies: + "@npmcli/arborist" "^9.0.1" + "@npmcli/installed-package-contents" "^3.0.0" + binary-extensions "^3.0.0" + diff "^7.0.0" + minimatch "^9.0.4" + npm-package-arg "^12.0.0" + pacote "^21.0.0" + tar "^6.2.1" + +libnpmexec@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/libnpmexec/-/libnpmexec-10.1.0.tgz" + integrity sha512-ojQgfhwlC4PCzHUSVRaTUg3aKxrJbArtc/9KwC3mED1Wc1FSW11pHo0Ufs5DJLDbRK5LhjjEQ8AxzwRIUQVY+A== + dependencies: + "@npmcli/arborist" "^9.0.1" + "@npmcli/package-json" "^6.1.1" + "@npmcli/run-script" "^9.0.1" + ci-info "^4.0.0" + npm-package-arg "^12.0.0" + pacote "^21.0.0" + proc-log "^5.0.0" + read "^4.0.0" + read-package-json-fast "^4.0.0" + semver "^7.3.7" + walk-up-path "^4.0.0" + +libnpmfund@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/libnpmfund/-/libnpmfund-7.0.1.tgz" + integrity sha512-bkam0l6uKTTwBZ5LhG05tdTnMt75g/jrL5tzPaWIpSMDWlcqFqLy+aqT+FkQCi4fCp8XDEOCZ2POqCyAFUiJuA== + dependencies: + "@npmcli/arborist" "^9.0.1" + +libnpmorg@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/libnpmorg/-/libnpmorg-8.0.0.tgz" + integrity sha512-VO/mxds3Qu67S7/3TsFbykN+7kzpes14P/RiO3ECtLtUYQdlE5ddXGArRgU2tP4hUHZRvyBhc4sSiAXEzTA4eQ== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^18.0.1" + +libnpmpack@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/libnpmpack/-/libnpmpack-9.0.1.tgz" + integrity sha512-0b9x8h0xAiu99ZewqZqZInf82dCxVx2AWB6jqwooIHzey4i2XYcIi0Tcik9GhkayU5nJ5WLD/W9PVyZcIWcm2w== + dependencies: + "@npmcli/arborist" "^9.0.1" + "@npmcli/run-script" "^9.0.1" + npm-package-arg "^12.0.0" + pacote "^21.0.0" + +libnpmpublish@^11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-11.0.0.tgz" + integrity sha512-c+cBWLWXafHzmSEQwRVKjHP6KkWntvqvAAT83agwmWrOwRpEXWDtiIlkopwzPcLRau6BcS6BwOttTlAWboH3BQ== + dependencies: + ci-info "^4.0.0" + normalize-package-data "^7.0.0" + npm-package-arg "^12.0.0" + npm-registry-fetch "^18.0.1" + proc-log "^5.0.0" + semver "^7.3.7" + sigstore "^3.0.0" + ssri "^12.0.0" + +libnpmsearch@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/libnpmsearch/-/libnpmsearch-9.0.0.tgz" + integrity sha512-uMUbX5ynU/imuXlijCPathemyi1EZVtka9PEbaIqghdrjdHmMJITbyTsmSB+muzBWm1NUUFwRRKdpwktEmvipg== + dependencies: + npm-registry-fetch "^18.0.1" + +libnpmteam@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/libnpmteam/-/libnpmteam-8.0.0.tgz" + integrity sha512-GfbxITlY4rVe3PKUU6wBjfNNc4Xho9Jv03N0sdzqho9H+9hynFjiwJpfWGwfVBdtimH+kPQW58qRUMott/Bkyg== + dependencies: + aproba "^2.0.0" + npm-registry-fetch "^18.0.1" + +libnpmversion@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/libnpmversion/-/libnpmversion-8.0.0.tgz" + integrity sha512-nqHD/YQtC/xLRquvFj2W2hvTNAIWSssJdz5ULCV0jAGBxjlQaPS9s8FNIiJ3w+iina+pCJo5AmlBjA7oWew0JQ== + dependencies: + "@npmcli/git" "^6.0.1" + "@npmcli/run-script" "^9.0.1" + json-parse-even-better-errors "^4.0.0" + proc-log "^5.0.0" + semver "^7.3.7" + +license-webpack-plugin@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz" + integrity sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw== + dependencies: + webpack-sources "^3.0.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +listr2@8.2.5: + version "8.2.5" + resolved "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz" + integrity sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ== + dependencies: + cli-truncate "^4.0.0" + colorette "^2.0.20" + eventemitter3 "^5.0.1" + log-update "^6.1.0" + rfdc "^1.4.1" + wrap-ansi "^9.0.0" + +lmdb@3.2.6: + version "3.2.6" + resolved "https://registry.npmjs.org/lmdb/-/lmdb-3.2.6.tgz" + integrity sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ== + dependencies: + msgpackr "^1.11.2" + node-addon-api "^6.1.0" + node-gyp-build-optional-packages "5.2.2" + ordered-binary "^1.5.3" + weak-lru-cache "^1.2.2" + optionalDependencies: + "@lmdb/lmdb-darwin-arm64" "3.2.6" + "@lmdb/lmdb-darwin-x64" "3.2.6" + "@lmdb/lmdb-linux-arm" "3.2.6" + "@lmdb/lmdb-linux-arm64" "3.2.6" + "@lmdb/lmdb-linux-x64" "3.2.6" + "@lmdb/lmdb-win32-x64" "3.2.6" + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@3.3.1: + version "3.3.1" + resolved "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz" + integrity sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg== + +local-pkg@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz" + integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg== + dependencies: + mlly "^1.7.4" + pkg-types "^2.0.1" + quansync "^0.2.8" + +locate-path@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz" + integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA== + dependencies: + p-locate "^6.0.0" + +lodash-es@^4.17.21, lodash-es@4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +log-update@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz" + integrity sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w== + dependencies: + ansi-escapes "^7.0.0" + cli-cursor "^5.0.0" + slice-ansi "^7.1.0" + strip-ansi "^7.1.0" + wrap-ansi "^9.0.0" + +log4js@^6.4.1: + version "6.9.1" + resolved "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz" + integrity sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + flatted "^3.2.7" + rfdc "^1.3.0" + streamroller "^3.1.5" + +lru-cache@^10.0.1, lru-cache@^10.2.0, lru-cache@^10.2.2: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-string@0.30.17: + version "0.30.17" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-fetch-happen@^14.0.0, make-fetch-happen@^14.0.1, make-fetch-happen@^14.0.2, make-fetch-happen@^14.0.3: + version "14.0.3" + resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz" + integrity sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ== + dependencies: + "@npmcli/agent" "^3.0.0" + cacache "^19.0.1" + http-cache-semantics "^4.1.1" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.4" + negotiator "^1.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + ssri "^12.0.0" + +marked@4.0.12: + version "4.0.12" + resolved "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz" + integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^4.6.0: + version "4.17.0" + resolved "https://registry.npmjs.org/memfs/-/memfs-4.17.0.tgz" + integrity sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg== + dependencies: + "@jsonjoy.com/json-pack" "^1.0.3" + "@jsonjoy.com/util" "^1.3.0" + tree-dump "^1.0.1" + tslib "^2.0.0" + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +"mime-db@>= 1.43.0 < 2", mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +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: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.5.2: + version "2.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + +mini-css-extract-plugin@2.9.2: + version "2.9.2" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz" + integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== + dependencies: + schema-utils "^4.0.0" + tapable "^2.2.1" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^9.0.0, minimatch@^9.0.4, minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz" + integrity sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^3.0.1" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0: + version "3.3.6" + resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3, minipass@^7.0.4, minipass@^7.1.1, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +minizlib@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz" + integrity sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA== + dependencies: + minipass "^7.1.2" + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mlly@^1.7.4: + version "1.7.4" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz" + integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== + dependencies: + acorn "^8.14.0" + pathe "^2.0.1" + pkg-types "^1.3.0" + ufo "^1.5.4" + +moment@^2.30.1: + version "2.30.1" + resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +mrmime@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz" + integrity sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ== + +ms@^2.1.2, ms@^2.1.3, ms@2.1.3: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +msgpackr-extract@^3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz" + integrity sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA== + dependencies: + node-gyp-build-optional-packages "5.2.2" + optionalDependencies: + "@msgpackr-extract/msgpackr-extract-darwin-arm64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-darwin-x64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-arm64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-linux-x64" "3.0.3" + "@msgpackr-extract/msgpackr-extract-win32-x64" "3.0.3" + +msgpackr@^1.11.2: + version "1.11.2" + resolved "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz" + integrity sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g== + optionalDependencies: + msgpackr-extract "^3.0.2" + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mute-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz" + integrity sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA== + +nanoid@^3.3.8: + version "3.3.11" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" + integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== + +needle@^3.1.0: + version "3.3.1" + resolved "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz" + integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q== + dependencies: + iconv-lite "^0.6.3" + sax "^1.2.4" + +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +ng-apexcharts@^1.15.0: + version "1.15.0" + resolved "https://registry.npmjs.org/ng-apexcharts/-/ng-apexcharts-1.15.0.tgz" + integrity sha512-CNJMStzS+NxLvxRLrybPCy67n1z53WqsGvD9qdepWMo3xgZRDzpX8NiNOvwWDsZGSi7Y/nS5qaUmiM84gi3x7Q== + dependencies: + tslib "^2.0.0" + +ng2-nouislider@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ng2-nouislider/-/ng2-nouislider-2.0.0.tgz" + integrity sha512-NGbF/0w0+bZqclpSPFOlWIeVJaVwRRYFJzD1x8PClbw9GIeo7fCHoBzZ81y7K7FTJg6to+cgjSTFETPZG/Dizg== + dependencies: + tslib "^2.3.0" + +ngrx-store-localstorage@^19.0.0: + version "19.0.0" + resolved "https://registry.npmjs.org/ngrx-store-localstorage/-/ngrx-store-localstorage-19.0.0.tgz" + integrity sha512-aONkwb2oW8BI9p6Hqyc6UvB8N51LgPSPg6ogg/ypYCQqRP/p8CDgDuYfkXyQktO1WS+2wKV4lPvGdjfb8dJwEw== + dependencies: + deepmerge "^4.2.2" + tslib "^2.3.0" + +ngx-clipboard@^16.0.0: + version "16.0.0" + resolved "https://registry.npmjs.org/ngx-clipboard/-/ngx-clipboard-16.0.0.tgz" + integrity sha512-rZ/Eo1PqiKMiyF8tdjhmUkoUu68f7OzBJ7YH1YFeh2RAaNrerTaW8XfFOzppSckjFQqA1fwGSYuTTJlDhDag5w== + dependencies: + ngx-window-token ">=7.0.0" + tslib "^2.0.0" + +ngx-cookie-service@^19.1.2: + version "19.1.2" + resolved "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-19.1.2.tgz" + integrity sha512-4BFbc5BA7/ryuQVZUfDMHcjdgkHeW8obqfCCknoOEaplefjzlVvMQUx9Hywfjbc8POzZeZD2csS43Hs7rscJcA== + dependencies: + tslib "^2.8.0" + +ngx-dropzone-wrapper@^17.0.0: + version "17.0.0" + resolved "https://registry.npmjs.org/ngx-dropzone-wrapper/-/ngx-dropzone-wrapper-17.0.0.tgz" + integrity sha512-ln8vrHrqCSDGG5EPGxDowCX5Xur0GRagI4Yai8Uq7XiLjPYDU3BE8p3Lnkk2ERDMHMUK9dF7AIXNyTLoVk5rcw== + dependencies: + dropzone "^5.9.0" + tslib "^2.3.0" + +ngx-mask@^19.0.6: + version "19.0.6" + resolved "https://registry.npmjs.org/ngx-mask/-/ngx-mask-19.0.6.tgz" + integrity sha512-lJa3+gIg0XMwjRv71pqW7uYrzFPZXl7VUbdbafJ9uo7QydfHIhUe8ByPgWt5VxvSC2mp5ndE3O7jWMOtv7Kthw== + dependencies: + tslib "^2.3.0" + +ngx-progressbar@^14.0.0: + version "14.0.0" + resolved "https://registry.npmjs.org/ngx-progressbar/-/ngx-progressbar-14.0.0.tgz" + integrity sha512-tDj7h5F2aSI4/XaJjs50FnELVe6qFqyz3vVq22acacd3oDW2EyJB4c+IYaxMf5972OdTw0WL4n6UwQ3dqC+gCA== + dependencies: + tslib "^2.3.0" + +ngx-quill@^27.0.1: + version "27.0.1" + resolved "https://registry.npmjs.org/ngx-quill/-/ngx-quill-27.0.1.tgz" + integrity sha512-gVv5qNM35Azb/ARk22CJ2NVUnVhU+Ds6Z5eCv7GjISCZr+ELTPVEx1S7EL2R+VUfPxy4fwVA8X6agq6k1BvOiQ== + dependencies: + tslib "^2.3.0" + +ngx-toastr@^19.0.0: + version "19.0.0" + resolved "https://registry.npmjs.org/ngx-toastr/-/ngx-toastr-19.0.0.tgz" + integrity sha512-6pTnktwwWD+kx342wuMOWB4+bkyX9221pAgGz3SHOJH0/MI9erLucS8PeeJDFwbUYyh75nQ6AzVtolgHxi52dQ== + dependencies: + tslib "^2.3.0" + +ngx-window-token@>=7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/ngx-window-token/-/ngx-window-token-7.0.0.tgz" + integrity sha512-5+XfRVSY7Dciu8xyCNMkOlH2UfwR9W2P1Pirz7caaZgOZDjFbL8aEO2stjfJJm2FFf1D6dlVHNzhLWGk9HGkqA== + dependencies: + tslib "^2.0.0" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +node-addon-api@^7.0.0: + version "7.1.1" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" + integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== + +node-forge@^1: + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-gyp-build-optional-packages@5.2.2: + version "5.2.2" + resolved "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz" + integrity sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw== + dependencies: + detect-libc "^2.0.1" + +node-gyp@^11.0.0: + version "11.2.0" + resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-11.2.0.tgz" + integrity sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + graceful-fs "^4.2.6" + make-fetch-happen "^14.0.3" + nopt "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + tar "^7.4.3" + tinyglobby "^0.2.12" + which "^5.0.0" + +node-gyp@^11.1.0: + version "11.1.0" + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^10.3.10" + graceful-fs "^4.2.6" + make-fetch-happen "^14.0.3" + nopt "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + tar "^7.4.3" + which "^5.0.0" + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +nopt@^8.0.0, nopt@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz" + integrity sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A== + dependencies: + abbrev "^3.0.0" + +normalize-package-data@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-7.0.0.tgz" + integrity sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA== + dependencies: + hosted-git-info "^8.0.0" + semver "^7.3.5" + validate-npm-package-license "^3.0.4" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +nouislider@^15.8.1: + version "15.8.1" + resolved "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz" + integrity sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw== + +npm-audit-report@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/npm-audit-report/-/npm-audit-report-6.0.0.tgz" + integrity sha512-Ag6Y1irw/+CdSLqEEAn69T8JBgBThj5mw0vuFIKeP7hATYuQuS5jkMjK6xmVB8pr7U4g5Audbun0lHhBDMIBRA== + +npm-bundled@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz" + integrity sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA== + dependencies: + npm-normalize-package-bin "^4.0.0" + +npm-install-checks@^7.1.0, npm-install-checks@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.1.tgz" + integrity sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz" + integrity sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w== + +npm-package-arg@^12.0.0, npm-package-arg@^12.0.2, npm-package-arg@12.0.2: + version "12.0.2" + resolved "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz" + integrity sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA== + dependencies: + hosted-git-info "^8.0.0" + proc-log "^5.0.0" + semver "^7.3.5" + validate-npm-package-name "^6.0.0" + +npm-packlist@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.0.tgz" + integrity sha512-rht9U6nS8WOBDc53eipZNPo5qkAV4X2rhKE2Oj1DYUQ3DieXfj0mKkVmjnf3iuNdtMd8WfLdi2L6ASkD/8a+Kg== + dependencies: + ignore-walk "^7.0.0" + +npm-packlist@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/npm-packlist/-/npm-packlist-9.0.0.tgz" + integrity sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ== + dependencies: + ignore-walk "^7.0.0" + +npm-pick-manifest@^10.0.0, npm-pick-manifest@10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz" + integrity sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ== + dependencies: + npm-install-checks "^7.1.0" + npm-normalize-package-bin "^4.0.0" + npm-package-arg "^12.0.0" + semver "^7.3.5" + +npm-profile@^11.0.1: + version "11.0.1" + resolved "https://registry.npmjs.org/npm-profile/-/npm-profile-11.0.1.tgz" + integrity sha512-HP5Cw9WHwFS9vb4fxVlkNAQBUhVL5BmW6rAR+/JWkpwqcFJid7TihKUdYDWqHl0NDfLd0mpucheGySqo8ysyfw== + dependencies: + npm-registry-fetch "^18.0.0" + proc-log "^5.0.0" + +npm-registry-fetch@^18.0.0, npm-registry-fetch@^18.0.1, npm-registry-fetch@^18.0.2: + version "18.0.2" + resolved "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-18.0.2.tgz" + integrity sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ== + dependencies: + "@npmcli/redact" "^3.0.0" + jsonparse "^1.3.1" + make-fetch-happen "^14.0.0" + minipass "^7.0.2" + minipass-fetch "^4.0.0" + minizlib "^3.0.1" + npm-package-arg "^12.0.0" + proc-log "^5.0.0" + +npm-user-validate@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/npm-user-validate/-/npm-user-validate-3.0.0.tgz" + integrity sha512-9xi0RdSmJ4mPYTC393VJPz1Sp8LyCx9cUnm/L9Qcb3cFO8gjT4mN20P9FAsea8qDHdQ7LtcN8VLh2UT47SdKCw== + +npm@^11.2.0: + version "11.2.0" + resolved "https://registry.npmjs.org/npm/-/npm-11.2.0.tgz" + integrity sha512-PcnFC6gTo9VDkxVaQ1/mZAS3JoWrDjAI+a6e2NgfYQSGDwftJlbdV0jBMi2V8xQPqbGcWaa7p3UP0SKF+Bhm2g== + dependencies: + "@isaacs/string-locale-compare" "^1.1.0" + "@npmcli/arborist" "^9.0.1" + "@npmcli/config" "^10.1.0" + "@npmcli/fs" "^4.0.0" + "@npmcli/map-workspaces" "^4.0.2" + "@npmcli/package-json" "^6.1.1" + "@npmcli/promise-spawn" "^8.0.2" + "@npmcli/redact" "^3.1.1" + "@npmcli/run-script" "^9.0.1" + "@sigstore/tuf" "^3.0.0" + abbrev "^3.0.0" + archy "~1.0.0" + cacache "^19.0.1" + chalk "^5.4.1" + ci-info "^4.1.0" + cli-columns "^4.0.0" + fastest-levenshtein "^1.0.16" + fs-minipass "^3.0.3" + glob "^10.4.5" + graceful-fs "^4.2.11" + hosted-git-info "^8.0.2" + ini "^5.0.0" + init-package-json "^8.0.0" + is-cidr "^5.1.1" + json-parse-even-better-errors "^4.0.0" + libnpmaccess "^10.0.0" + libnpmdiff "^8.0.1" + libnpmexec "^10.1.0" + libnpmfund "^7.0.1" + libnpmorg "^8.0.0" + libnpmpack "^9.0.1" + libnpmpublish "^11.0.0" + libnpmsearch "^9.0.0" + libnpmteam "^8.0.0" + libnpmversion "^8.0.0" + make-fetch-happen "^14.0.3" + minimatch "^9.0.5" + minipass "^7.1.1" + minipass-pipeline "^1.2.4" + ms "^2.1.2" + node-gyp "^11.1.0" + nopt "^8.1.0" + normalize-package-data "^7.0.0" + npm-audit-report "^6.0.0" + npm-install-checks "^7.1.1" + npm-package-arg "^12.0.2" + npm-pick-manifest "^10.0.0" + npm-profile "^11.0.1" + npm-registry-fetch "^18.0.2" + npm-user-validate "^3.0.0" + p-map "^7.0.3" + pacote "^21.0.0" + parse-conflict-json "^4.0.0" + proc-log "^5.0.0" + qrcode-terminal "^0.12.0" + read "^4.1.0" + semver "^7.7.1" + spdx-expression-parse "^4.0.0" + ssri "^12.0.0" + supports-color "^10.0.0" + tar "^6.2.1" + text-table "~0.2.0" + tiny-relative-date "^1.3.0" + treeverse "^3.0.0" + validate-npm-package-name "^6.0.0" + which "^5.0.0" + +nth-check@^2.0.1: + 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== + dependencies: + boolbase "^1.0.0" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@^2.4.1, on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + 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== + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== + dependencies: + mimic-function "^5.0.0" + +open@^10.0.3, open@10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/open/-/open-10.1.0.tgz" + integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" + +ora@5.4.1: + version "5.4.1" + resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== + 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" + +ordered-binary@^1.5.3: + version "1.5.3" + resolved "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz" + integrity sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-map@^7.0.2, p-map@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/p-map/-/p-map-7.0.3.tgz" + integrity sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA== + +p-retry@^6.2.0: + version "6.2.1" + resolved "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz" + integrity sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ== + dependencies: + "@types/retry" "0.12.2" + is-network-error "^1.0.0" + retry "^0.13.1" + +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + +package-manager-detector@^0.2.8: + version "0.2.11" + resolved "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz" + integrity sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ== + dependencies: + quansync "^0.2.7" + +pacote@^21.0.0: + version "21.0.0" + resolved "https://registry.npmjs.org/pacote/-/pacote-21.0.0.tgz" + integrity sha512-lcqexq73AMv6QNLo7SOpz0JJoaGdS3rBFgF122NZVl1bApo2mfu+XzUBU/X/XsiJu+iUmKpekRayqQYAs+PhkA== + dependencies: + "@npmcli/git" "^6.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + "@npmcli/run-script" "^9.0.0" + cacache "^19.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^12.0.0" + npm-packlist "^10.0.0" + npm-pick-manifest "^10.0.0" + npm-registry-fetch "^18.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + sigstore "^3.0.0" + ssri "^12.0.0" + tar "^6.1.11" + +pacote@20.0.0: + version "20.0.0" + resolved "https://registry.npmjs.org/pacote/-/pacote-20.0.0.tgz" + integrity sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A== + dependencies: + "@npmcli/git" "^6.0.0" + "@npmcli/installed-package-contents" "^3.0.0" + "@npmcli/package-json" "^6.0.0" + "@npmcli/promise-spawn" "^8.0.0" + "@npmcli/run-script" "^9.0.0" + cacache "^19.0.0" + fs-minipass "^3.0.0" + minipass "^7.0.2" + npm-package-arg "^12.0.0" + npm-packlist "^9.0.0" + npm-pick-manifest "^10.0.0" + npm-registry-fetch "^18.0.0" + proc-log "^5.0.0" + promise-retry "^2.0.1" + sigstore "^3.0.0" + ssri "^12.0.0" + tar "^6.1.11" + +parchment@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz" + integrity sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A== + +parent-module@^1.0.0: + 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== + dependencies: + callsites "^3.0.0" + +parse-conflict-json@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz" + integrity sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ== + dependencies: + json-parse-even-better-errors "^4.0.0" + just-diff "^6.0.0" + just-diff-apply "^5.2.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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: + version "1.0.1" + resolved "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz" + integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA== + +parse5-html-rewriting-stream@7.0.0: + 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== + dependencies: + entities "^4.3.0" + parse5 "^7.0.0" + parse5-sax-parser "^7.0.0" + +parse5-sax-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz" + integrity sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg== + dependencies: + parse5 "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.2.1" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + 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@^1.11.1: + version "1.11.1" + resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== + dependencies: + lru-cache "^10.2.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + +path-type@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz" + integrity sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ== + +pathe@^2.0.1, pathe@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== + +picocolors@^1.0.0, picocolors@^1.0.1, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2, picomatch@4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +piscina@4.8.0: + version "4.8.0" + resolved "https://registry.npmjs.org/piscina/-/piscina-4.8.0.tgz" + integrity sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA== + optionalDependencies: + "@napi-rs/nice" "^1.0.1" + +pkg-dir@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz" + integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA== + dependencies: + find-up "^6.3.0" + +pkg-types@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +pkg-types@^2.0.1: + version "2.1.0" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz" + integrity sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A== + dependencies: + confbox "^0.2.1" + exsolve "^1.0.1" + pathe "^2.0.3" + +postcss-loader@8.1.1: + version "8.1.1" + resolved "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz" + integrity sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ== + dependencies: + cosmiconfig "^9.0.0" + jiti "^1.20.0" + semver "^7.5.4" + +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz" + integrity sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig== + +postcss-modules-extract-imports@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz" + integrity sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q== + +postcss-modules-local-by-default@^4.0.5: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz" + integrity sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^7.0.0" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.2.0: + version "3.2.1" + resolved "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz" + integrity sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA== + dependencies: + postcss-selector-parser "^7.0.0" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-selector-parser@^6.1.2: + version "6.1.2" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" + integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-selector-parser@^7.0.0: + version "7.1.0" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz" + integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss@^8.2.14, postcss@^8.4.33, postcss@^8.4.49, postcss@8.5.2: + version "8.5.2" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.2.tgz" + integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +postcss@^8.5.3: + version "8.5.3" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz" + integrity sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A== + dependencies: + nanoid "^3.3.8" + picocolors "^1.1.1" + source-map-js "^1.2.1" + +preact@~10.12.1: + version "10.12.1" + resolved "https://registry.npmjs.org/preact/-/preact-10.12.1.tgz" + integrity sha512-l8386ixSsBdbreOAkqtrwqHwdvR35ID8c3rKPa8lCWuO86dBi32QWHV4vfsZK1utLLFMvw+Z5Ad4XLkZzchscg== + +prettier@^3.5.3: + version "3.5.3" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz" + integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== + +proc-log@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz" + integrity sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ== + +process-nextick-args@~2.0.0: + 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== + +proggy@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz" + integrity sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q== + +promise-all-reject-late@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz" + integrity sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw== + +promise-call-limit@^3.0.1: + version "3.0.2" + resolved "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz" + integrity sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +promzard@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/promzard/-/promzard-2.0.0.tgz" + integrity sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg== + dependencies: + read "^4.0.0" + +proxy-addr@~2.0.7: + 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== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qrcode-terminal@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz" + integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +quansync@^0.2.7, quansync@^0.2.8: + version "0.2.10" + resolved "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz" + integrity sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quill-delta@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz" + integrity sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA== + dependencies: + fast-diff "^1.3.0" + lodash.clonedeep "^4.5.0" + lodash.isequal "^4.5.0" + +quill@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz" + integrity sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw== + dependencies: + eventemitter3 "^5.0.1" + lodash-es "^4.17.21" + parchment "^3.0.0" + quill-delta "^5.1.0" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +read-cmd-shim@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz" + integrity sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw== + +read-package-json-fast@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz" + integrity sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg== + dependencies: + json-parse-even-better-errors "^4.0.0" + npm-normalize-package-bin "^4.0.0" + +read@^4.0.0, read@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/read/-/read-4.1.0.tgz" + integrity sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA== + dependencies: + mute-stream "^2.0.0" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reflect-metadata@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz" + integrity sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q== + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-parser@^2.2.11: + version "2.3.1" + resolved "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.1.tgz" + integrity sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ== + +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + 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== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url-loader@5.0.0: + 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== + 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.14.2, resolve@1.22.10: + version "1.22.10" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== + dependencies: + onetime "^7.0.0" + signal-exit "^4.1.0" + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rfdc@^1.3.0, rfdc@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^5.0.5: + version "5.0.10" + dependencies: + glob "^10.3.7" + +rollup@^4.30.1, rollup@4.34.8: + version "4.34.8" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.34.8.tgz" + integrity sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ== + dependencies: + "@types/estree" "1.0.6" + optionalDependencies: + "@rollup/rollup-android-arm-eabi" "4.34.8" + "@rollup/rollup-android-arm64" "4.34.8" + "@rollup/rollup-darwin-arm64" "4.34.8" + "@rollup/rollup-darwin-x64" "4.34.8" + "@rollup/rollup-freebsd-arm64" "4.34.8" + "@rollup/rollup-freebsd-x64" "4.34.8" + "@rollup/rollup-linux-arm-gnueabihf" "4.34.8" + "@rollup/rollup-linux-arm-musleabihf" "4.34.8" + "@rollup/rollup-linux-arm64-gnu" "4.34.8" + "@rollup/rollup-linux-arm64-musl" "4.34.8" + "@rollup/rollup-linux-loongarch64-gnu" "4.34.8" + "@rollup/rollup-linux-powerpc64le-gnu" "4.34.8" + "@rollup/rollup-linux-riscv64-gnu" "4.34.8" + "@rollup/rollup-linux-s390x-gnu" "4.34.8" + "@rollup/rollup-linux-x64-gnu" "4.34.8" + "@rollup/rollup-linux-x64-musl" "4.34.8" + "@rollup/rollup-win32-arm64-msvc" "4.34.8" + "@rollup/rollup-win32-ia32-msvc" "4.34.8" + "@rollup/rollup-win32-x64-msvc" "4.34.8" + fsevents "~2.3.2" + +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rxjs@~7.8.2: + version "7.8.2" + resolved "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz" + integrity sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA== + dependencies: + tslib "^2.1.0" + +rxjs@7.8.1: + 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" + +safe-buffer@^5.1.0, safe-buffer@>=5.1.0, safe-buffer@~5.2.0, safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass-loader@16.0.5: + version "16.0.5" + resolved "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.5.tgz" + integrity sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw== + dependencies: + neo-async "^2.6.2" + +sass@1.85.0: + version "1.85.0" + resolved "https://registry.npmjs.org/sass/-/sass-1.85.0.tgz" + integrity sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww== + dependencies: + chokidar "^4.0.0" + immutable "^5.0.2" + source-map-js ">=0.6.2 <2.0.0" + optionalDependencies: + "@parcel/watcher" "^2.4.1" + +sax@^1.2.4: + version "1.4.1" + resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz" + integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== + +schema-utils@^4.0.0, schema-utils@^4.2.0, schema-utils@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz" + integrity sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.9.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.1.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.4.1: + version "2.4.1" + resolved "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz" + integrity sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q== + dependencies: + "@types/node-forge" "^1.3.0" + node-forge "^1" + +semver@^5.6.0: + version "5.7.2" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.1.1, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4, semver@^7.7.1, semver@7.7.1: + version "7.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + 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.2: + version "6.0.2" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + 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.16.2: + version "1.16.2" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.8.1: + version "1.8.2" + resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6: + version "1.1.0" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1, signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sigstore@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/sigstore/-/sigstore-3.1.0.tgz" + integrity sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q== + dependencies: + "@sigstore/bundle" "^3.1.0" + "@sigstore/core" "^2.0.0" + "@sigstore/protobuf-specs" "^0.4.0" + "@sigstore/sign" "^3.1.0" + "@sigstore/tuf" "^3.1.0" + "@sigstore/verify" "^2.1.0" + +simplebar-angular@3.2.4: + version "3.2.4" + resolved "https://registry.npmjs.org/simplebar-angular/-/simplebar-angular-3.2.4.tgz" + integrity sha512-cBjr+GD2c4RaO85Yyo0Y1PsKeRdIgu5tgXp3FiNqyUwlisQUKZVweDiVuCtlec4nJTIwNJSoPV6yW8S1ek1B/A== + dependencies: + simplebar-core "^1.2.4" + tslib "^2.3.0" + +simplebar-core@^1.2.4: + version "1.3.0" + resolved "https://registry.npmjs.org/simplebar-core/-/simplebar-core-1.3.0.tgz" + integrity sha512-LpWl3w0caz0bl322E68qsrRPpIn+rWBGAaEJ0lUJA7Xpr2sw92AkIhg6VWj988IefLXYh50ILatfAnbNoCFrlA== + dependencies: + lodash "^4.17.21" + +slash@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz" + integrity sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg== + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +slice-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz" + integrity sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg== + dependencies: + ansi-styles "^6.2.1" + is-fullwidth-code-point "^5.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socket.io-adapter@~2.5.2: + version "2.5.5" + resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz" + integrity sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg== + dependencies: + debug "~4.3.4" + ws "~8.17.1" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.7.2: + version "4.8.1" + resolved "https://registry.npmjs.org/socket.io/-/socket.io-4.8.1.tgz" + integrity sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.6.0" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +socks-proxy-agent@^8.0.3: + version "8.0.5" + resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz" + integrity sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw== + dependencies: + agent-base "^7.1.2" + debug "^4.3.4" + socks "^2.8.3" + +socks@^2.8.3: + version "2.8.4" + resolved "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz" + integrity sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ== + dependencies: + ip-address "^9.0.5" + smart-buffer "^4.2.0" + +source-map-js@^1.0.2, source-map-js@^1.2.1, "source-map-js@>=0.6.2 <2.0.0": + version "1.2.1" + resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz" + integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== + +source-map-loader@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz" + integrity sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA== + dependencies: + iconv-lite "^0.6.3" + source-map-js "^1.0.2" + +source-map-support@^0.5.5, source-map-support@~0.5.20, source-map-support@0.5.21: + 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== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@0.7.4: + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-parse@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz" + integrity sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.21" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + 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: + version "4.0.2" + resolved "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + 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.3: + version "1.1.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +ssri@^12.0.0: + version "12.0.0" + resolved "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz" + integrity sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ== + dependencies: + minipass "^7.0.3" + +"statuses@>= 1.4.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +streamroller@^3.1.5: + version "3.1.5" + resolved "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz" + integrity sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw== + dependencies: + date-format "^4.0.14" + debug "^4.3.4" + fs-extra "^8.1.0" + +string_decoder@^1.1.1: + 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== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + 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" + +"string-width-cjs@npm:string-width@^4.2.0": + 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" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + 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" + +string-width@^4.2.3: + 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" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string-width@^7.0.0: + version "7.2.0" + resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== + dependencies: + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + 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" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + 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" + +strip-ansi@^7.0.1, strip-ansi@^7.1.0: + version "7.1.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +supports-color@^10.0.0: + version "10.0.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz" + integrity sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ== + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + 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== + +sweetalert2@^11.17.2: + version "11.17.2" + resolved "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.17.2.tgz" + integrity sha512-HKxDr1IyV3Lxr3W6sb61qm/p2epFIEdr5EKwteRFHnIg6f8nHFl2kX++DBVz16Mac+fFiU3hMpjq1L6yE2Ge5w== + +swiper@^11.2.6: + version "11.2.6" + resolved "https://registry.npmjs.org/swiper/-/swiper-11.2.6.tgz" + integrity sha512-8aXpYKtjy3DjcbzZfz+/OX/GhcU5h+looA6PbAzHMZT6ESSycSp9nAjPCenczgJyslV+rUGse64LMGpWE3PX9Q== + +symbol-observable@4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz" + integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== + +tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: + version "2.2.1" + resolved "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^6.1.11, tar@^6.2.1: + version "6.2.1" + resolved "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz" + integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== + 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" + +tar@^7.4.3: + version "7.4.3" + resolved "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz" + integrity sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw== + dependencies: + "@isaacs/fs-minipass" "^4.0.0" + chownr "^3.0.0" + minipass "^7.1.2" + minizlib "^3.0.1" + mkdirp "^3.0.1" + yallist "^5.0.0" + +terser-webpack-plugin@^5.3.11: + version "5.3.14" + resolved "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz" + integrity sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.25" + jest-worker "^27.4.5" + schema-utils "^4.3.0" + serialize-javascript "^6.0.2" + terser "^5.31.1" + +terser@^5.31.1, terser@5.39.0: + version "5.39.0" + resolved "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz" + integrity sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw== + dependencies: + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@~0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thingies@^1.20.0: + version "1.21.0" + resolved "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz" + integrity sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-relative-date@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/tiny-relative-date/-/tiny-relative-date-1.3.0.tgz" + integrity sha512-MOQHpzllWxDCHHaDno30hhLfbouoYlOI8YlMNtvKe1zXbjEVhbcEovQxvZrPvtiYW630GQDoMMarCnjfyfHA+A== + +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinyglobby@^0.2.12: + version "0.2.12" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@^0.2.1: + version "0.2.3" + resolved "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +to-regex-range@^5.0.1: + 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== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tree-dump@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz" + integrity sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ== + +tree-kill@1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== + +treeverse@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz" + integrity sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ== + +tslib@^2.0.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.8.0, tslib@^2.8.1, tslib@2.8.1: + version "2.8.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tuf-js@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/tuf-js/-/tuf-js-3.0.1.tgz" + integrity sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA== + dependencies: + "@tufjs/models" "3.0.1" + debug "^4.3.6" + make-fetch-happen "^14.0.1" + +turndown-plugin-gfm@1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz" + integrity sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg== + +turndown@7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz" + integrity sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A== + dependencies: + "@mixmark-io/domino" "^2.2.0" + +type-fest@^0.21.3: + 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== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-assert@^1.0.8: + version "1.0.9" + resolved "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz" + integrity sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg== + +typescript@~5.8.3: + version "5.8.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +ua-parser-js@^0.7.30: + version "0.7.40" + resolved "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.40.tgz" + integrity sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ== + +ufo@^1.5.4: + version "1.5.4" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + 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== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-property-aliases-ecmascript@^2.0.0: + 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== + +unicorn-magic@^0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz" + integrity sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA== + +unique-filename@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz" + integrity sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ== + dependencies: + unique-slug "^5.0.0" + +unique-slug@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz" + integrity sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg== + dependencies: + imurmurhash "^0.1.4" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@~1.0.0, unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +validate-npm-package-license@^3.0.4: + 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== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.0.tgz" + integrity sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg== + +vanilla-colorful@0.7.2: + version "0.7.2" + resolved "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz" + integrity sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vite@^6.2.5: + version "6.2.5" + resolved "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz" + integrity sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA== + dependencies: + esbuild "^0.25.0" + postcss "^8.5.3" + rollup "^4.30.1" + optionalDependencies: + fsevents "~2.3.3" + +vite@6.2.4: + version "6.2.4" + resolved "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz" + integrity sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw== + dependencies: + esbuild "^0.25.0" + postcss "^8.5.3" + rollup "^4.30.1" + optionalDependencies: + fsevents "~2.3.3" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz" + integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== + +walk-up-path@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz" + integrity sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A== + +watchpack@^2.4.1, watchpack@2.4.2: + version "2.4.2" + resolved "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz" + integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +weak-lru-cache@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz" + integrity sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw== + +webpack-dev-middleware@^7.4.2, webpack-dev-middleware@7.4.2: + version "7.4.2" + resolved "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz" + integrity sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA== + dependencies: + colorette "^2.0.10" + memfs "^4.6.0" + mime-types "^2.1.31" + on-finished "^2.4.1" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz" + integrity sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA== + dependencies: + "@types/bonjour" "^3.5.13" + "@types/connect-history-api-fallback" "^1.5.4" + "@types/express" "^4.17.21" + "@types/serve-index" "^1.9.4" + "@types/serve-static" "^1.15.5" + "@types/sockjs" "^0.3.36" + "@types/ws" "^8.5.10" + ansi-html-community "^0.0.8" + bonjour-service "^1.2.1" + chokidar "^3.6.0" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + express "^4.21.2" + graceful-fs "^4.2.6" + http-proxy-middleware "^2.0.7" + ipaddr.js "^2.1.0" + launch-editor "^2.6.1" + open "^10.0.3" + p-retry "^6.2.0" + schema-utils "^4.2.0" + selfsigned "^2.4.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^7.4.2" + ws "^8.18.0" + +webpack-merge@6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz" + integrity sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg== + dependencies: + clone-deep "^4.0.1" + flat "^5.0.2" + wildcard "^2.0.1" + +webpack-sources@^3.0.0, webpack-sources@^3.2.3: + 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== + +webpack-subresource-integrity@5.1.0: + 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== + dependencies: + typed-assert "^1.0.8" + +webpack@5.98.0: + version "5.98.0" + resolved "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz" + integrity sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA== + dependencies: + "@types/eslint-scope" "^3.7.7" + "@types/estree" "^1.0.6" + "@webassemblyjs/ast" "^1.14.1" + "@webassemblyjs/wasm-edit" "^1.14.1" + "@webassemblyjs/wasm-parser" "^1.14.1" + acorn "^8.14.0" + browserslist "^4.24.0" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.17.1" + es-module-lexer "^1.2.1" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.11" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^4.3.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.3.11" + watchpack "^2.4.1" + webpack-sources "^3.2.3" + +websocket-driver@^0.7.4, websocket-driver@>=0.5.1: + version "0.7.4" + resolved "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/which/-/which-5.0.0.tgz" + integrity sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ== + dependencies: + isexe "^3.1.1" + +wildcard@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^6.2.0: + 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" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrap-ansi@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz" + integrity sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q== + dependencies: + ansi-styles "^6.2.1" + string-width "^7.0.0" + strip-ansi "^7.1.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz" + integrity sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^4.0.1" + +ws@^8.18.0: + version "8.18.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz" + integrity sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w== + +ws@~8.17.1: + version "8.17.1" + resolved "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yallist@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz" + integrity sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^16.1.1: + version "16.2.0" + resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^17.2.1, yargs@17.7.2: + version "17.7.2" + resolved "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" + +yocto-queue@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.1.tgz" + integrity sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg== + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA== + +zone.js@~0.15.0: + version "0.15.0" + resolved "https://registry.npmjs.org/zone.js/-/zone.js-0.15.0.tgz" + integrity sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==