From 5ab4df366337b86bc711c3d284872931317c1d1b Mon Sep 17 00:00:00 2001 From: "S. Hattry" Date: Thu, 8 Sep 2022 11:36:15 +0200 Subject: [PATCH] Init compilation, linters, cookies --- .eslintrc.json | 41 + .gitlab-ci.yml | 78 +- .stylelintrc.json | 27 + .vscode/settings.json | 22 + app/Http/Controllers/HomeController.php | 16 + app/Providers/AppServiceProvider.php | 2 + config/google.php | 5 + jsconfig.json | 3 + package-lock.json | 3635 ++++++++++++++++- package.json | 25 +- public/favicon.png | Bin 0 -> 877 bytes public/mix-manifest.json | 10 +- resources/assets/images/home_logo.png | Bin 0 -> 47712 bytes resources/js/back.js | 1 - resources/js/components/carousel.js | 227 - resources/js/front.js | 5 - resources/js/libs/bootstrap.js | 28 - resources/js/libs/ldcweb-cookies.js | 401 -- resources/sass/{libs => }/_bootstrap.scss | 0 resources/sass/back.scss | 8 + resources/sass/base/_reset.scss | 129 - resources/sass/base/{ => bo}/_base.scss | 0 .../_bootstrap.scss => base/fo/_base.scss} | 0 resources/sass/base/{ => fo}/_fonts.scss | 4 +- resources/sass/front.scss | 22 + resources/sass/main.scss | 25 - resources/sass/vendor/_ldcweb-cookies.scss | 628 +++ resources/ts/back.ts | 2 + resources/ts/front.ts | 9 + resources/ts/libs/bootstrap.ts | 1 + resources/ts/libs/index.d.ts | 71 + resources/ts/libs/ldcweb-cookies.ts | 589 +++ resources/views/fo/frontend.blade.php | 26 + .../views/fo/libs/ldcweb-cookies.blade.php | 199 + resources/views/fo/pages/home.blade.php | 13 + resources/views/fo/partials/footer.blade.php | 6 + resources/views/fo/partials/head.blade.php | 23 + resources/views/fo/partials/header.blade.php | 3 + resources/views/fo/welcome.blade.php | 132 - routes/web-fo.php | 4 + tsconfig.json | 14 + webpack.mix.js | 120 +- 42 files changed, 5560 insertions(+), 994 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .stylelintrc.json create mode 100644 .vscode/settings.json create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 config/google.php create mode 100644 jsconfig.json create mode 100644 public/favicon.png create mode 100644 resources/assets/images/home_logo.png delete mode 100644 resources/js/back.js delete mode 100644 resources/js/components/carousel.js delete mode 100644 resources/js/front.js delete mode 100644 resources/js/libs/bootstrap.js delete mode 100644 resources/js/libs/ldcweb-cookies.js rename resources/sass/{libs => }/_bootstrap.scss (100%) create mode 100644 resources/sass/back.scss delete mode 100644 resources/sass/base/_reset.scss rename resources/sass/base/{ => bo}/_base.scss (100%) rename resources/sass/{libs-extensions/_bootstrap.scss => base/fo/_base.scss} (100%) rename resources/sass/base/{ => fo}/_fonts.scss (100%) create mode 100644 resources/sass/front.scss delete mode 100644 resources/sass/main.scss create mode 100644 resources/sass/vendor/_ldcweb-cookies.scss create mode 100644 resources/ts/back.ts create mode 100644 resources/ts/front.ts create mode 100644 resources/ts/libs/bootstrap.ts create mode 100644 resources/ts/libs/index.d.ts create mode 100644 resources/ts/libs/ldcweb-cookies.ts create mode 100644 resources/views/fo/frontend.blade.php create mode 100644 resources/views/fo/libs/ldcweb-cookies.blade.php create mode 100644 resources/views/fo/pages/home.blade.php create mode 100644 resources/views/fo/partials/footer.blade.php create mode 100644 resources/views/fo/partials/head.blade.php create mode 100644 resources/views/fo/partials/header.blade.php delete mode 100644 resources/views/fo/welcome.blade.php create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..cf467d1 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,41 @@ +{ + "env": { + "browser": true, + "es2021": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/vue3-strongly-recommended", + "@vue/eslint-config-typescript" + ], + "overrides": [ + { + "files": ["*.ts", "*.vue"], + "rules": { + "no-undef": "off" + } + }, + { + "files": ["*.vue"], + "rules": { + "indent": "off" + } + } + ], + "parser": "vue-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser", + "ecmaVersion": "latest", + "sourceType": "module" + }, + "plugins": ["vue", "@typescript-eslint"], + "ignorePatterns": ["webpack.mix.js", "**/vendor/*.js", "**/vendor/**/*.js"], + "rules": { + "indent": ["error", 4, { "SwitchCase": 1 }], + "linebreak-style": ["error", "unix"], + "quotes": ["error", "double"], + "semi": ["error", "always"], + "vue/script-indent": ["error", 2, { "baseIndent": 0 }], + "vue/one-component-per-file": "off" + } +} diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb2dd3f..5a0c16d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,11 +1,10 @@ -image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php7.3-1.0 - stages: - Security - CodingStandards - + - Builds composer-security: stage: Security + image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php7.3-1.0 script: - local-php-security-checker --format=json --path=./composer.lock > composer-security-checker-report.json artifacts: @@ -14,9 +13,12 @@ composer-security: paths: - composer-security-checker-report.json allow_failure: true - + needs: [] npm-security: stage: Security + image: node:17.9.0 + before_script: + - npm install --location=global audit-ci@^6 script: - audit-ci -p npm -o json > npm-security-checker-report.json artifacts: @@ -25,9 +27,10 @@ npm-security: paths: - npm-security-checker-report.json allow_failure: true - + needs: [] phpcs: stage: CodingStandards + image: $CI_REGISTRY/service-web-lab/ldc-web-images-docker/ldcweb-qa:php7.3-1.0 before_script: - composer config gitlab-token.gitlab.com $CI_DEPLOY_USER $CI_DEPLOY_PASSWORD - composer install @@ -43,4 +46,67 @@ phpcs: - phpcs-report.xml reports: junit: phpcs-report.xml - allow_failure: false \ No newline at end of file + allow_failure: false + needs: + - composer-security + - npm-security +eslint: + stage: CodingStandards + image: node:17.9.1 + before_script: + - npm install + cache: + paths: + - node_modules/ + script: + - npm run eslint-ci --silent > eslint-report.xml + artifacts: + when: on_failure + expose_as: 'eslint' + paths: + - eslint-report.xml + reports: + junit: eslint-report.xml + allow_failure: false + needs: + - composer-security + - npm-security +stylelint: + stage: CodingStandards + image: node:17.9.1 + before_script: + - npm install + cache: + paths: + - node_modules/ + script: + - npm run stylelint-ci --silent > stylelint-report.json + artifacts: + when: on_failure + expose_as: 'stylelint' + paths: + - stylelint-report.json + allow_failure: false + needs: + - composer-security + - npm-security +front-build: + stage: Builds + image: node:17.9.1 + before_script: + - npm install + cache: + paths: + - node_modules/ + script: + - npm run prod > front-build-report.json + artifacts: + when: on_failure + expose_as: 'front-build-report' + paths: + - front-build-report.json + allow_failure: false + needs: + - phpcs + - eslint + - stylelint diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..1e51fc3 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,27 @@ +{ + "extends": [ + "stylelint-config-sass-guidelines", + "stylelint-config-idiomatic-order" + ], + "ignoreFiles": [ + "**/vendor/*.css", + "**/vendor/**/*.css", + "**/vendor/*.scss", + "**/vendor/**/*.scss", + "**/vendor/*.sass", + "**/vendor/**/*.sass", + "**/vendor/*.less", + "**/vendor/**/*.less" + ], + "customSyntax": "postcss-scss", + "rules": { + "indentation": 4, + "string-quotes": "double", + "selector-max-id": null, + "color-no-invalid-hex": true, + "selector-no-qualifying-type": null, + "order/properties-alphabetical-order": null, + "max-nesting-depth": 10, + "selector-max-compound-selectors": 10 + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3319cba --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,22 @@ +{ + "peacock.remoteColor": "#161719", + "workbench.colorCustomizations": { + "activityBar.activeBackground": "#2e3034", + "activityBar.background": "#2e3034", + "activityBar.foreground": "#e7e7e7", + "activityBar.inactiveForeground": "#e7e7e799", + "activityBarBadge.background": "#a7385d", + "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#e7e7e799", + "sash.hoverBorder": "#2e3034", + "statusBar.background": "#161719", + "statusBar.foreground": "#e7e7e7", + "statusBarItem.hoverBackground": "#2e3034", + "statusBarItem.remoteBackground": "#161719", + "statusBarItem.remoteForeground": "#e7e7e7", + "titleBar.activeBackground": "#161719", + "titleBar.activeForeground": "#e7e7e7", + "titleBar.inactiveBackground": "#16171999", + "titleBar.inactiveForeground": "#e7e7e799" + } +} diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..fcafe73 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,16 @@ + env('ANALYTICS_GOOGLE_ID') +]; diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..d05f5a8 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,3 @@ +{ + "include": ["./resources/js/**/*"] +} diff --git a/package-lock.json b/package-lock.json index a96d5bb..67564a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,16 +5,35 @@ "packages": { "": { "devDependencies": { + "@rushstack/eslint-patch": "^1.1.4", + "@types/bootstrap": "^5.2.3", + "@types/webpack-env": "^1.18.0", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "@vue/eslint-config-typescript": "^11.0.0", "axios": "^0.21", "bootstrap": "^5.2.0", "clean-webpack-plugin": "^4.0.0", + "eslint": "^8.23.0", + "eslint-plugin-vue": "^9.4.0", + "eslint-webpack-plugin": "^3.2.0", "laravel-mix": "^6.0.6", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-eslint": "^0.2.0", "laravel-mix-polyfill": "^3.0.1", + "laravel-mix-stylelint": "^1.0.0", "lodash": "^4.17.19", "postcss": "^8.1.14", + "prettier": "^2.7.1", "resolve-url-loader": "^5.0.0", "sass": "^1.54.8", "sass-loader": "^12.6.0", + "stylelint": "^14.11.0", + "stylelint-config-idiomatic-order": "^8.1.0", + "stylelint-config-sass-guidelines": "^9.0.1", + "stylelint-webpack-plugin": "^3.3.0", + "ts-loader": "^9.3.1", + "typescript": "^4.8.2", "vue": "^3.2.38", "vue-loader": "^16.8.3" } @@ -1755,6 +1774,23 @@ "node": ">=0.1.90" } }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -1764,6 +1800,87 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -1881,12 +1998,17 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", "dev": true, - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", + "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "dev": true + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -1956,6 +2078,15 @@ "@types/node": "*" } }, + "node_modules/@types/bootstrap": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.3.tgz", + "integrity": "sha512-r2SE9NYaaI7B/jJk8gqRtXzlhgFL6dlXBResJkCbQa8ept619WeiOIO4zBQxdmUFzkKNWLK5ZOyYGI3QZoaqbQ==", + "dev": true, + "dependencies": { + "@popperjs/core": "^2.9.2" + } + }, "node_modules/@types/clean-css": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", @@ -2117,12 +2248,24 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "node_modules/@types/node": { "version": "18.7.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", "dev": true }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -2181,6 +2324,12 @@ "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", "dev": true }, + "node_modules/@types/webpack-env": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", + "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -2190,6 +2339,211 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz", + "integrity": "sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/type-utils": "5.36.2", + "@typescript-eslint/utils": "5.36.2", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", + "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", + "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz", + "integrity": "sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/utils": "5.36.2", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", + "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", + "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", + "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", + "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.36.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@vue/compiler-core": { "version": "3.2.38", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.38.tgz", @@ -2240,6 +2594,30 @@ "@vue/shared": "3.2.38" } }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.0.tgz", + "integrity": "sha512-txuRzxnQVmtUvvy9UyWUy9sHWXNeRPGmSPqP53hRtaiUeCTAondI9Ho9GQYI/8/eWljYOST7iA4Aa8sANBkWaA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@vue/reactivity": { "version": "3.2.38", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.38.tgz", @@ -2530,6 +2908,15 @@ "acorn": "^8" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -2656,6 +3043,12 @@ "node": ">= 8" } }, + "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": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -2680,6 +3073,15 @@ "node": ">=0.10.0" } }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -2723,6 +3125,15 @@ "inherits": "2.0.1" } }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/autoprefixer": { "version": "10.4.8", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", @@ -3215,6 +3626,32 @@ "tslib": "^2.0.3" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -3752,6 +4189,15 @@ "postcss": "^8.0.9" } }, + "node_modules/css-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, "node_modules/css-loader": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", @@ -3977,6 +4423,43 @@ } } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -4163,6 +4646,18 @@ "node": ">=6" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -4413,6 +4908,83 @@ "node": ">=0.8.0" } }, + "node_modules/eslint": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", + "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.1", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.4.0.tgz", + "integrity": "sha512-Nzz2QIJ8FG+rtJaqT/7/ru5ie2XgT9KCudkbN0y3uFYhQ41nuHEaboLAiqwMcK006hZPQv/rVMRhUIwEGhIvfQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -4426,6 +4998,328 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "dependencies": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/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/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/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/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/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/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/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/eslint/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/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/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -4639,6 +5533,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -4669,6 +5569,18 @@ "node": ">=0.8.0" } }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -4791,6 +5703,25 @@ "node": ">=8" } }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -4888,6 +5819,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4970,6 +5907,44 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -4998,12 +5973,24 @@ "node": ">=8" } }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -5016,6 +6003,15 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -5145,6 +6141,18 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -5268,6 +6276,18 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/htmlparser2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", @@ -5495,6 +6515,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -5514,6 +6543,24 @@ "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==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -5530,6 +6577,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -5775,6 +6828,18 @@ "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/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -5799,6 +6864,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -5850,6 +6921,12 @@ "node": ">= 8" } }, + "node_modules/known-css-properties": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", + "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "dev": true + }, "node_modules/laravel-mix": { "version": "6.0.49", "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", @@ -5925,6 +7002,21 @@ "webpack-cli": "^4.9.1" } }, + "node_modules/laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", + "dev": true + }, + "node_modules/laravel-mix-eslint": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", + "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", + "dev": true, + "peerDependencies": { + "laravel-mix": ">=2.1.7" + } + }, "node_modules/laravel-mix-polyfill": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", @@ -5938,6 +7030,25 @@ "laravel-mix": "^6.0.0" } }, + "node_modules/laravel-mix-stylelint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", + "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -6006,6 +7117,18 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -6066,6 +7189,28 @@ "semver": "bin/semver.js" } }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -6115,6 +7260,53 @@ "node": ">= 4.0.0" } }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/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/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -6219,6 +7411,15 @@ "node": ">=6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/mini-css-extract-plugin": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", @@ -6288,6 +7489,29 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -6319,6 +7543,12 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6404,6 +7634,21 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6571,6 +7816,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -7031,6 +8293,12 @@ "webpack": "^5.0.0" } }, + "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-merge-longhand": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", @@ -7369,6 +8637,44 @@ "postcss": "^8.2.15" } }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz", + "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -7382,6 +8688,15 @@ "node": ">=4" } }, + "node_modules/postcss-sorting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", + "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", + "dev": true, + "peerDependencies": { + "postcss": "^8.3.9" + } + }, "node_modules/postcss-svgo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", @@ -7419,6 +8734,30 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", @@ -7545,6 +8884,15 @@ } ] }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7597,6 +8945,83 @@ "node": ">= 0.8" } }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -7645,6 +9070,19 @@ "node": ">= 0.10" } }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -7684,6 +9122,18 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, "node_modules/regexpu-core": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", @@ -8258,6 +9708,23 @@ "node": ">=8" } }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -8309,6 +9776,38 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -8462,6 +9961,30 @@ "node": ">=6" } }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -8500,6 +10023,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, "node_modules/stylehacks": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", @@ -8516,6 +10045,344 @@ "postcss": "^8.2.15" } }, + "node_modules/stylelint": { + "version": "14.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.11.0.tgz", + "integrity": "sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.16", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-idiomatic-order": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-8.1.0.tgz", + "integrity": "sha512-iTPY6JjbkIdzy+21x3a1xi/tG33zKhLJb6lZl1xg6jZrXjgIYelnRZ5xVtbcEP9rElxZq/Zu1eGthfvI+ri+YQ==", + "dev": true, + "dependencies": { + "stylelint-order": "^3.1.1" + }, + "peerDependencies": { + "stylelint": ">=11" + } + }, + "node_modules/stylelint-config-idiomatic-order/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/stylelint-config-idiomatic-order/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/stylelint-config-idiomatic-order/node_modules/postcss-sorting": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", + "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14", + "postcss": "^7.0.17" + }, + "engines": { + "node": ">=8.7.0" + } + }, + "node_modules/stylelint-config-idiomatic-order/node_modules/stylelint-order": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-3.1.1.tgz", + "integrity": "sha512-4gP/r8j/6JGZ/LL41b2sYtQqfwZl4VSqTp7WeIwI67v/OXNQ08dnn64BGXNwAUSgb2+YIvIOxQaMzqMyQMzoyQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15", + "postcss": "^7.0.17", + "postcss-sorting": "^5.0.1" + }, + "engines": { + "node": ">=8.7.0" + }, + "peerDependencies": { + "stylelint": ">=10.0.1" + } + }, + "node_modules/stylelint-config-sass-guidelines": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz", + "integrity": "sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA==", + "dev": true, + "dependencies": { + "postcss-scss": "^4.0.2", + "stylelint-order": "^5.0.0", + "stylelint-scss": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^14.0.1" + } + }, + "node_modules/stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "dependencies": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + }, + "peerDependencies": { + "stylelint": "^14.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.3.0.tgz", + "integrity": "sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==", + "dev": true, + "dependencies": { + "lodash": "^4.17.21", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1" + } + }, + "node_modules/stylelint-webpack-plugin": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-3.3.0.tgz", + "integrity": "sha512-F53bapIZ9zI16ero8IWm6TrUE6SSibZBphJE9b5rR2FxtvmGmm1YmS+a5xjQzn63+cv71GVSCu4byX66fBLpEw==", + "dev": true, + "dependencies": { + "globby": "^11.1.0", + "jest-worker": "^28.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylelint": "^13.0.0 || ^14.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/stylelint-webpack-plugin/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/stylelint-webpack-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/stylelint-webpack-plugin/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/stylelint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/stylelint-webpack-plugin/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/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/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/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8528,6 +10395,19 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.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", @@ -8540,6 +10420,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, "node_modules/svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -8561,6 +10447,44 @@ "node": ">=10.13.0" } }, + "node_modules/table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/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/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -8646,6 +10570,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "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==", + "dev": true + }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -8700,18 +10630,91 @@ "node": ">=0.6" } }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", + "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, "node_modules/tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "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", @@ -8725,6 +10728,19 @@ "node": ">= 0.6" } }, + "node_modules/typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -8882,6 +10898,22 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -8910,6 +10942,52 @@ "@vue/shared": "3.2.38" } }, + "node_modules/vue-eslint-parser": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", + "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/vue-eslint-parser/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/vue-loader": { "version": "16.8.3", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", @@ -9396,6 +11474,15 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -9419,6 +11506,19 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", @@ -9440,6 +11540,15 @@ } } }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -9499,6 +11608,18 @@ "engines": { "node": ">=12" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } }, "dependencies": { @@ -10726,12 +12847,76 @@ "dev": true, "optional": true }, + "@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "requires": {} + }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, + "@eslint/eslintrc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, "@jridgewell/gen-mapping": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", @@ -10829,8 +13014,13 @@ "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", - "dev": true, - "peer": true + "dev": true + }, + "@rushstack/eslint-patch": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz", + "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==", + "dev": true }, "@trysound/sax": { "version": "0.2.0", @@ -10898,6 +13088,15 @@ "@types/node": "*" } }, + "@types/bootstrap": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.3.tgz", + "integrity": "sha512-r2SE9NYaaI7B/jJk8gqRtXzlhgFL6dlXBResJkCbQa8ept619WeiOIO4zBQxdmUFzkKNWLK5ZOyYGI3QZoaqbQ==", + "dev": true, + "requires": { + "@popperjs/core": "^2.9.2" + } + }, "@types/clean-css": { "version": "4.2.5", "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", @@ -11059,12 +13258,24 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, "@types/node": { "version": "18.7.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.15.tgz", "integrity": "sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==", "dev": true }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", @@ -11123,6 +13334,12 @@ "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", "dev": true }, + "@types/webpack-env": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz", + "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==", + "dev": true + }, "@types/ws": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", @@ -11132,6 +13349,118 @@ "@types/node": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.2.tgz", + "integrity": "sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/type-utils": "5.36.2", + "@typescript-eslint/utils": "5.36.2", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/parser": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.36.2.tgz", + "integrity": "sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.36.2.tgz", + "integrity": "sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.36.2.tgz", + "integrity": "sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==", + "dev": true, + "requires": { + "@typescript-eslint/typescript-estree": "5.36.2", + "@typescript-eslint/utils": "5.36.2", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.2.tgz", + "integrity": "sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.2.tgz", + "integrity": "sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/visitor-keys": "5.36.2", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.36.2.tgz", + "integrity": "sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.36.2", + "@typescript-eslint/types": "5.36.2", + "@typescript-eslint/typescript-estree": "5.36.2", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.36.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.2.tgz", + "integrity": "sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.36.2", + "eslint-visitor-keys": "^3.3.0" + } + }, "@vue/compiler-core": { "version": "3.2.38", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.38.tgz", @@ -11182,6 +13511,17 @@ "@vue/shared": "3.2.38" } }, + "@vue/eslint-config-typescript": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.0.tgz", + "integrity": "sha512-txuRzxnQVmtUvvy9UyWUy9sHWXNeRPGmSPqP53hRtaiUeCTAondI9Ho9GQYI/8/eWljYOST7iA4Aa8sANBkWaA==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "^5.0.0", + "@typescript-eslint/parser": "^5.0.0", + "vue-eslint-parser": "^9.0.0" + } + }, "@vue/reactivity": { "version": "3.2.38", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.38.tgz", @@ -11445,6 +13785,13 @@ "dev": true, "requires": {} }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, "adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -11534,6 +13881,12 @@ "picomatch": "^2.0.4" } }, + "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 + }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -11552,6 +13905,12 @@ "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, "asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", @@ -11599,6 +13958,12 @@ } } }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "autoprefixer": { "version": "10.4.8", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", @@ -11975,6 +14340,23 @@ "tslib": "^2.0.3" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -12399,6 +14781,12 @@ "dev": true, "requires": {} }, + "css-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "dev": true + }, "css-loader": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", @@ -12555,6 +14943,36 @@ "ms": "2.1.2" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -12707,6 +15125,15 @@ "@leichtgewicht/ip-codec": "^2.0.1" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -12902,6 +15329,161 @@ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, + "eslint": { + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", + "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.1", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "eslint-plugin-vue": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.4.0.tgz", + "integrity": "sha512-Nzz2QIJ8FG+rtJaqT/7/ru5ie2XgT9KCudkbN0y3uFYhQ41nuHEaboLAiqwMcK006hZPQv/rVMRhUIwEGhIvfQ==", + "dev": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + } + }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -12912,6 +15494,131 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "requires": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "espree": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -13085,6 +15792,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -13109,6 +15822,15 @@ "websocket-driver": ">=0.5.1" } }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -13200,6 +15922,22 @@ "path-exists": "^4.0.0" } }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, "follow-redirects": { "version": "1.15.1", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", @@ -13260,6 +15998,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -13318,6 +16062,37 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -13340,12 +16115,24 @@ "slash": "^3.0.0" } }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "growly": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", @@ -13358,6 +16145,12 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -13451,6 +16244,15 @@ "minimalistic-crypto-utils": "^1.0.1" } }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -13545,6 +16347,12 @@ } } }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, "htmlparser2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", @@ -13708,6 +16516,12 @@ "resolve-from": "^4.0.0" } }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -13718,6 +16532,18 @@ "resolve-cwd": "^3.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -13734,6 +16560,12 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -13909,6 +16741,15 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "dev": true }, + "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, + "requires": { + "argparse": "^2.0.1" + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13927,6 +16768,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -13961,6 +16808,12 @@ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, + "known-css-properties": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.25.0.tgz", + "integrity": "sha512-b0/9J1O9Jcyik1GC6KC42hJ41jKwdO/Mq8Mdo5sYN+IuRTXs2YFHZC3kZSx6ueusqa95x3wLYe/ytKjbAfGixA==", + "dev": true + }, "laravel-mix": { "version": "6.0.49", "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.49.tgz", @@ -14019,6 +16872,19 @@ "yargs": "^17.2.1" } }, + "laravel-mix-clean": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/laravel-mix-clean/-/laravel-mix-clean-0.1.0.tgz", + "integrity": "sha512-iOgVELzL0zJ2SNEVEmzCoduZ7tBQNWa/ViWXSTg9Z2QVK05Sld2efzTybR82Lu6ohZaA4btr+KsBBw7kt8aqTQ==", + "dev": true + }, + "laravel-mix-eslint": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/laravel-mix-eslint/-/laravel-mix-eslint-0.2.0.tgz", + "integrity": "sha512-UwnaCTNaA4jRNTs8wmlXrf7QgTxdi2ZQBgKTB83bEiFCi5wqcR6svSdlfsWIXmUaySPe2Lv07SfYq9YvLXc1tA==", + "dev": true, + "requires": {} + }, "laravel-mix-polyfill": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/laravel-mix-polyfill/-/laravel-mix-polyfill-3.0.1.tgz", @@ -14029,6 +16895,22 @@ "regenerator-runtime": "^0.13.2" } }, + "laravel-mix-stylelint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/laravel-mix-stylelint/-/laravel-mix-stylelint-1.0.0.tgz", + "integrity": "sha512-0FZD/Q0MG4tcu8w3MQrAnnRtOKVdPvGKOgYU9PsDuDIOe+PcWFGQEqjej24TgL7pMrqijfFw+J9vSDJIcA0j7A==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", @@ -14085,6 +16967,18 @@ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", @@ -14135,6 +17029,18 @@ } } }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -14178,6 +17084,40 @@ "fs-monkey": "^1.0.3" } }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "dependencies": { + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "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 + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -14257,6 +17197,12 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, "mini-css-extract-plugin": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", @@ -14308,6 +17254,25 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + } + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -14330,6 +17295,12 @@ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", "dev": true }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -14409,6 +17380,18 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -14525,6 +17508,20 @@ "is-wsl": "^2.2.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -14838,6 +17835,12 @@ "semver": "^7.3.5" } }, + "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 + }, "postcss-merge-longhand": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", @@ -15046,6 +18049,26 @@ "postcss-value-parser": "^4.2.0" } }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} + }, + "postcss-scss": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.4.tgz", + "integrity": "sha512-aBBbVyzA8b3hUL0MGrpydxxXKXFZc5Eqva0Q3V9qsBOLEMsjb6w49WfpsoWzpEgcqJGW4t7Rio8WXVU9Gd8vWg==", + "dev": true, + "requires": {} + }, "postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", @@ -15056,6 +18079,13 @@ "util-deprecate": "^1.0.2" } }, + "postcss-sorting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-7.0.1.tgz", + "integrity": "sha512-iLBFYz6VRYyLJEJsBJ8M3TCqNcckVzz4wFounSc5Oez35ogE/X+aoC5fFu103Ot7NyvjU3/xqIXn93Gp3kJk4g==", + "dev": true, + "requires": {} + }, "postcss-svgo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", @@ -15081,6 +18111,18 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, "pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", @@ -15172,6 +18214,12 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15217,6 +18265,69 @@ } } }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, "readable-stream": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", @@ -15261,6 +18372,16 @@ "resolve": "^1.9.0" } }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -15297,6 +18418,12 @@ "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "regexpu-core": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", @@ -15729,6 +18856,17 @@ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", @@ -15774,6 +18912,38 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -15898,6 +19068,21 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, "style-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", @@ -15921,6 +19106,12 @@ } } }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, "stylehacks": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", @@ -15931,6 +19122,256 @@ "postcss-selector-parser": "^6.0.4" } }, + "stylelint": { + "version": "14.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.11.0.tgz", + "integrity": "sha512-OTLjLPxpvGtojEfpESWM8Ir64Z01E89xsisaBMUP/ngOx1+4VG2DPRcUyCCiin9Rd3kPXPsh/uwHd9eqnvhsYA==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.11", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.25.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.16", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.2.0", + "svg-tags": "^1.0.0", + "table": "^6.8.0", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "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 + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "stylelint-config-idiomatic-order": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-8.1.0.tgz", + "integrity": "sha512-iTPY6JjbkIdzy+21x3a1xi/tG33zKhLJb6lZl1xg6jZrXjgIYelnRZ5xVtbcEP9rElxZq/Zu1eGthfvI+ri+YQ==", + "dev": true, + "requires": { + "stylelint-order": "^3.1.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-sorting": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-5.0.1.tgz", + "integrity": "sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA==", + "dev": true, + "requires": { + "lodash": "^4.17.14", + "postcss": "^7.0.17" + } + }, + "stylelint-order": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-3.1.1.tgz", + "integrity": "sha512-4gP/r8j/6JGZ/LL41b2sYtQqfwZl4VSqTp7WeIwI67v/OXNQ08dnn64BGXNwAUSgb2+YIvIOxQaMzqMyQMzoyQ==", + "dev": true, + "requires": { + "lodash": "^4.17.15", + "postcss": "^7.0.17", + "postcss-sorting": "^5.0.1" + } + } + } + }, + "stylelint-config-sass-guidelines": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-9.0.1.tgz", + "integrity": "sha512-N06PsVsrgKijQ3YT5hqKA7x3NUkgELTRI1cbWMqcYiCGG6MjzvNk6Cb5YYA1PrvrksBV76BvY9P9bAswojVMqA==", + "dev": true, + "requires": { + "postcss-scss": "^4.0.2", + "stylelint-order": "^5.0.0", + "stylelint-scss": "^4.0.0" + } + }, + "stylelint-order": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-5.0.0.tgz", + "integrity": "sha512-OWQ7pmicXufDw5BlRqzdz3fkGKJPgLyDwD1rFY3AIEfIH/LQY38Vu/85v8/up0I+VPiuGRwbc2Hg3zLAsJaiyw==", + "dev": true, + "requires": { + "postcss": "^8.3.11", + "postcss-sorting": "^7.0.1" + } + }, + "stylelint-scss": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.3.0.tgz", + "integrity": "sha512-GvSaKCA3tipzZHoz+nNO7S02ZqOsdBzMiCx9poSmLlb3tdJlGddEX/8QzCOD8O7GQan9bjsvLMsO5xiw6IhhIQ==", + "dev": true, + "requires": { + "lodash": "^4.17.21", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.6", + "postcss-value-parser": "^4.1.0" + } + }, + "stylelint-webpack-plugin": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stylelint-webpack-plugin/-/stylelint-webpack-plugin-3.3.0.tgz", + "integrity": "sha512-F53bapIZ9zI16ero8IWm6TrUE6SSibZBphJE9b5rR2FxtvmGmm1YmS+a5xjQzn63+cv71GVSCu4byX66fBLpEw==", + "dev": true, + "requires": { + "globby": "^11.1.0", + "jest-worker": "^28.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -15940,12 +19381,28 @@ "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, "svgo": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", @@ -15961,6 +19418,39 @@ "stable": "^0.1.8" } }, + "table": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + } + } + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -16013,6 +19503,12 @@ } } }, + "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==", + "dev": true + }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -16055,18 +19551,68 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "ts-loader": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.3.1.tgz", + "integrity": "sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + } + }, "tslib": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", "dev": true }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -16077,6 +19623,12 @@ "mime-types": "~2.1.24" } }, + "typescript": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "dev": true + }, "unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -16197,6 +19749,22 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -16222,6 +19790,39 @@ "@vue/shared": "3.2.38" } }, + "vue-eslint-parser": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", + "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, "vue-loader": { "version": "16.8.3", "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.8.3.tgz", @@ -16569,6 +20170,12 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -16586,6 +20193,16 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, "ws": { "version": "8.8.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", @@ -16593,6 +20210,12 @@ "dev": true, "requires": {} }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -16637,6 +20260,12 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index c1d8ba8..c5e3a2c 100644 --- a/package.json +++ b/package.json @@ -7,19 +7,42 @@ "watch-poll": "mix watch -- --watch-options-poll=1000", "hot": "mix watch --hot", "prod": "npm run production", - "production": "mix --production" + "production": "mix --production", + "eslint": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources", + "eslint-ci": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources -f junit", + "stylelint": "npx stylelint '**/*.scss'", + "stylelint-ci": "npx stylelint '**/*.scss' -f json" }, "devDependencies": { + "@rushstack/eslint-patch": "^1.1.4", + "@types/bootstrap": "^5.2.3", + "@types/webpack-env": "^1.18.0", + "@typescript-eslint/eslint-plugin": "^5.36.2", + "@typescript-eslint/parser": "^5.36.2", + "@vue/eslint-config-typescript": "^11.0.0", "axios": "^0.21", "bootstrap": "^5.2.0", "clean-webpack-plugin": "^4.0.0", + "eslint": "^8.23.0", + "eslint-plugin-vue": "^9.4.0", + "eslint-webpack-plugin": "^3.2.0", "laravel-mix": "^6.0.6", + "laravel-mix-clean": "^0.1.0", + "laravel-mix-eslint": "^0.2.0", "laravel-mix-polyfill": "^3.0.1", + "laravel-mix-stylelint": "^1.0.0", "lodash": "^4.17.19", "postcss": "^8.1.14", + "prettier": "^2.7.1", "resolve-url-loader": "^5.0.0", "sass": "^1.54.8", "sass-loader": "^12.6.0", + "stylelint": "^14.11.0", + "stylelint-config-idiomatic-order": "^8.1.0", + "stylelint-config-sass-guidelines": "^9.0.1", + "stylelint-webpack-plugin": "^3.3.0", + "ts-loader": "^9.3.1", + "typescript": "^4.8.2", "vue": "^3.2.38", "vue-loader": "^16.8.3" } diff --git a/public/favicon.png b/public/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..704c480f1175861efbcbd4b0aec7783e7ebe6b2b GIT binary patch literal 877 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 { - let item = this.createDivWithClass('carrousel__item') - - item.appendChild(child) - this.container.appendChild(item) - return item - }) - this.setStyle() - if (this.options.navigation) { - this.createNavigation() - } - if (this.options.pagination) { - this.createPagination() - } - - //Evenements - this.moveCallbacks.forEach(cb => cb(0)) - this.onWindowResize() - window.addEventListener('resize', this.onWindowResize.bind(this)) - this.root.addEventListener('keyup', e => { - if (e.key === 'ArrowRight' || e.key === 'Right') { - this.next() - } else if (e.key === 'ArrowLeft' || e.key === 'Left') { - this.prev() - } - }) - - // Interval - if (this.options.play) { - let playpause = setInterval(() => this.next(), this.options.interval); - } - } - - /** - * Applique les bonnes dimensions aux éléments du carrousel - */ - setStyle() { - let ratio = this.items.length / this.slidesVisible - this.container.style.width = (ratio * 100) + "%" - this.items.forEach(item => item.style.width = ((100 / this.slidesVisible) / ratio) + "%") - } - - /** - * Créer les flêches de navigation dans le DOM - */ - createNavigation() { - let nextButton = this.createDivWithClass('carrousel__next') - let prevButton = this.createDivWithClass('carrousel__prev') - this.root.appendChild(nextButton) - this.root.appendChild(prevButton) - nextButton.addEventListener('click', this.next.bind(this)) - prevButton.addEventListener('click', this.prev.bind(this)) - - if (this.options.loop === true) { - return - } - this.onMove(index => { - if (index === 0) { - prevButton.classList.add('carrousel__prev--hidden') - } else { - prevButton.classList.remove('carrousel__prev--hidden') - } - if (this.items[this.currentItem + this.slidesVisible] === undefined) { - nextButton.classList.add('carrousel__next--hidden') - } else { - nextButton.classList.remove('carrousel__next--hidden') - } - }) - } - - /** - * Créer la pagination dans le DOM - */ - createPagination() { - let pagination = this.createDivWithClass('carrousel__pagination') - let buttons = [] - this.root.appendChild(pagination) - for (let i = 0; i < this.items.length; i = i + this.options.slidesToScroll) { - let button = this.createDivWithClass('carrousel__pagination__button') - button.addEventListener('click', () => this.gotoItem(i)) - pagination.appendChild(button) - buttons.push(button) - } - this.onMove(index => { - let activeButton = buttons[Math.floor(index / this.options.slidesToScroll)] - if (activeButton) { - buttons.forEach(button => button.classList.remove('carrousel__pagination__button--active')) - activeButton.classList.add('carrousel__pagination__button--active') - } - }) - } - - next() { - this.gotoItem(this.currentItem + this.slidesToScroll) - } - - prev() { - this.gotoItem(this.currentItem - this.slidesToScroll) - } - - /** - * Déplace le carrousel vers l'élément ciblé - * @param {number} index - */ - gotoItem(index) { - if (index < 0) { - if (this.options.loop) { - index = this.items.length - this.slidesVisible - } else { - return - } - } else if (index >= this.items.length || (this.items[this.currentItem + this.slidesVisible] === undefined && index > this.currentItem)) { - if (this.options.loop) { - index = 0 - } else { - return - } - } - let translateX = index * -100 / this.items.length - this.container.style.transform = 'translate3d(' + translateX + '%, 0, 0)' - this.currentItem = index - this.moveCallbacks.forEach(cb => cb(index)) - } - - /** - * - * @param {moveCallback} cb - */ - onMove(cb) { - this.moveCallbacks.push(cb) - } - - onWindowResize() { - let mobile = window.innerWidth < 800 - if (mobile !== this.isMobile) { - this.isMobile = mobile - this.setStyle() - this.moveCallbacks.forEach(cb => cb(this.currentItem)) - } - } - - /** - * - * @param {string} className - * @returns {HTMLElement} - */ - createDivWithClass(className) { - let div = document.createElement('div') - div.setAttribute('class', className) - return div - } - - /** - * @returns {number} - */ - get slidesToScroll() { - return this.isMobile ? 1 : this.options.slidesToScroll - } - - /** - * @returns {number} - */ - get slidesVisible() { - return this.isMobile ? 1 : this.options.slidesVisible - } - -} - -document.addEventListener('DOMContentLoaded', function () { - - if (document.querySelector('#carrousel1')) { - new Carrousel(document.querySelector('#carrousel1'), { - pagination: true, - navigation: false, - }) - } - - if (document.querySelector('#carrousel2')) { - new Carrousel(document.querySelector('#carrousel2'), {}) - } - -}) \ No newline at end of file diff --git a/resources/js/front.js b/resources/js/front.js deleted file mode 100644 index 2b69be3..0000000 --- a/resources/js/front.js +++ /dev/null @@ -1,5 +0,0 @@ -import { LdcwebCn } from "./libs/ldcweb-cookies"; -window.LdcwebCn = LdcwebCn; - -import { Carrousel } from "./components/carousel" -window.Carrousel = Carrousel; diff --git a/resources/js/libs/bootstrap.js b/resources/js/libs/bootstrap.js deleted file mode 100644 index 6922577..0000000 --- a/resources/js/libs/bootstrap.js +++ /dev/null @@ -1,28 +0,0 @@ -window._ = require('lodash'); - -/** - * We'll load the axios HTTP library which allows us to easily issue requests - * to our Laravel back-end. This library automatically handles sending the - * CSRF token as a header based on the value of the "XSRF" token cookie. - */ - -window.axios = require('axios'); - -window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; - -/** - * Echo exposes an expressive API for subscribing to channels and listening - * for events that are broadcast by Laravel. Echo and event broadcasting - * allows your team to easily build robust real-time web applications. - */ - -// import Echo from 'laravel-echo'; - -// window.Pusher = require('pusher-js'); - -// window.Echo = new Echo({ -// broadcaster: 'pusher', -// key: process.env.MIX_PUSHER_APP_KEY, -// cluster: process.env.MIX_PUSHER_APP_CLUSTER, -// forceTLS: true -// }); diff --git a/resources/js/libs/ldcweb-cookies.js b/resources/js/libs/ldcweb-cookies.js deleted file mode 100644 index 86f75ff..0000000 --- a/resources/js/libs/ldcweb-cookies.js +++ /dev/null @@ -1,401 +0,0 @@ -/* - LDC Service Web Cookies - Version 2.0.1 -*/ - -export class LdcwebCn { - constructor(config) { - this.config = config; - this.cookieContainer = document.getElementById("ldcweb-cn"); - this.bannerContainer = document.querySelector(".ldcweb-cn-banner"); - this.bannerBtn = document.querySelector(".ldcweb-banner-btnDetails-p"); - this.ldcwebBtn = document.querySelector(".ldcweb-btn"); - this.ldcwebBannerParaP = document.querySelector(".ldcweb-banner-para-p"); - this.ldcwebBannerContent = document.querySelector(".ldcweb-banner-content"); - this.ldcwebBannerDetails = document.querySelector(".ldcweb-banner-details"); - this.ldcwebBannerBtnDetails = document.querySelector( - ".ldcweb-banner-btnDetails" - ); - this.modalContainer = document.getElementById("ldcweb-cn-modal"); - this.acceptAllBtnBanner = document.getElementById( - "ldcweb-cn-accept-banner" - ); - this.denyAllBtnBanner = document.getElementById("ldcweb-cn-deny-banner"); - this.personalizeBtn = document.getElementsByClassName( - "ldcweb-cn-personalize" - ); - this.personalizeBtnBanner = document.querySelector( - ".ldcweb-cn-personalize" - ); - this.changeBtn = document.getElementsByClassName("ldcweb-cn-change"); - this.cookiesList = document.getElementById("ldcweb-cn-list"); - this.cookieLink = document.querySelector(".ldcweb-cn-cookie-link"); - this.modalDetails = document.querySelector(".modal-details"); - this.template = document.getElementById("template").cloneNode(true); - this.modalBtnBoolean = 0; - this.bannerBtnTextBoolean = 0; - document.getElementById("template").remove(); - - let cookies = this.getLDCWebCookie("ldcwebcn-init"); - if (cookies === undefined) { - let newCookie = []; - - for (const [key] of Object.entries(this.config)) { - newCookie.push(key + "=wait"); - } - - this.bannerContainer.classList.add("ldcweb-cn-banner-open"); - - this.saveLDCWebCookie(newCookie); - } else { - let test = cookies.split(","); - test.forEach((elm) => { - let test = elm.split("="); - if (test[1] === "wait") { - this.bannerContainer.classList.add("ldcweb-cn-banner-open"); - } - }); - } - let accept = function (e) { - e.preventDefault(); - for (const [key, value] of Object.entries(this.config)) { - this.addCookie(key, value); - } - for (let acceptLabel of this.cookieContainer.querySelectorAll( - ".accept > label" - )) { - acceptLabel.classList.add("active"); - } - for (let denyLabel of this.cookieContainer.querySelectorAll( - ".deny > label" - )) { - denyLabel.classList.remove("active"); - } - this.updateAllCookiesButtonsActiveStatus(); - this.bannerContainer.classList.remove("ldcweb-cn-banner-open"); - }.bind(this); - this.acceptAllBtnBanner.addEventListener("click", accept); - - let deny = function (e) { - e.preventDefault(); - for (const [key, value] of Object.entries(this.config)) { - this.removeCookie(key, value); - } - for (let acceptLabel of this.cookieContainer.querySelectorAll( - ".accept > label" - )) { - acceptLabel.classList.remove("active"); - } - for (let denyLabel of this.cookieContainer.querySelectorAll( - ".deny > label" - )) { - denyLabel.classList.add("active"); - } - this.updateAllCookiesButtonsActiveStatus(); - this.bannerContainer.classList.remove("ldcweb-cn-banner-open"); - }.bind(this); - this.denyAllBtnBanner.addEventListener("click", deny); - - let openLdcwebCookies = function (e) { - e.preventDefault(); - this.openModal(); - }.bind(this); - this.cookieLink.addEventListener("click", openLdcwebCookies); - - let hideModal = function (e) { - e.preventDefault(); - this.ldcwebBannerContent.classList.toggle("visibility"); - this.ldcwebBannerDetails.classList.toggle("visibility"); - this.ldcwebBannerBtnDetails.classList.toggle("visibility"); - this.modalContainer.classList.toggle("visibility"); - this.setCookieList(); - }.bind(this); - this.personalizeBtnBanner.addEventListener("click", hideModal); - - let changeBtnPersonalize = function (e) { - e.preventDefault(); - this.modalDetails.scrollTop = 0; - if (this.modalBtnBoolean === 0) { - this.personalizeBtnBanner.innerHTML = - this.personalizeBtnBanner.getAttribute("data-open-modal"); - this.modalBtnBoolean = 1; - } else { - this.personalizeBtnBanner.innerHTML = - this.personalizeBtnBanner.getAttribute("data-close-modal"); - this.modalBtnBoolean = 0; - } - }.bind(this); - this.personalizeBtnBanner.addEventListener("click", changeBtnPersonalize); - - this.setListenerOnChange(); - - let cookie = this.getLDCWebCookie("ldcwebcn-init"); - let test = cookie.split(","); - test.forEach((elm) => { - let test = elm.split("="); - if (test[1] === "true") { - this.config[test[0]].script(); - } else { - if (this.config[test[0]].fallback) { - this.config[test[0]].fallback(); - } - } - }); - - this.updateAllCookiesButtonsActiveStatus(); - - let changePara = function (e) { - e.preventDefault(); - this.ldcwebBannerDetails.classList.toggle("ldcweb-banner-details-open"); - this.bannerBtn.classList.toggle("ldcweb-banner-btnDetails-p-open"); - if (this.bannerBtnTextBoolean === 0) { - e.target.innerHTML = e.target.getAttribute("data-open"); - this.ldcwebBannerParaP.innerHTML = - this.ldcwebBannerParaP.getAttribute("data-open"); - this.ldcwebBannerDetails.style.height = - this.ldcwebBannerDetails.children[0].clientHeight + "px"; - this.bannerBtnTextBoolean = 1; - } else { - e.target.innerHTML = e.target.getAttribute("data-close"); - this.ldcwebBannerParaP.innerHTML = - this.ldcwebBannerParaP.getAttribute("data-close"); - this.ldcwebBannerDetails.style.height = "0px"; - this.bannerBtnTextBoolean = 0; - } - }.bind(this); - this.bannerBtn.addEventListener("click", changePara); - - let resetVue = function (e) { - e.preventDefault(); - this.bannerContainer.classList.toggle("ldcweb-cn-banner-open"); - if (this.bannerContainer.classList.contains("ldcweb-cn-banner-open")) { - this.ldcwebBannerContent.classList.remove("visibility"), - this.ldcwebBannerDetails.classList.remove("visibility"), - this.ldcwebBannerBtnDetails.classList.remove("visibility"), - this.modalContainer.classList.add("visibility"); - this.personalizeBtnBanner.innerHTML = - this.personalizeBtnBanner.getAttribute("data-close-modal"); - this.modalBtnBoolean = 0; - } - }.bind(this); - this.ldcwebBtn.addEventListener("click", resetVue); - } - - setCookieList() { - this.cookiesList.innerHTML = ""; - let cookiesSite = this.getLDCWebCookie("ldcwebcn-init"); - let acceptInputEvent = function (acceptLabel, denyLabel, key, value) { - return function () { - acceptLabel.classList.add("active"); - denyLabel.classList.remove("active"); - this.updateAllCookiesButtonsActiveStatus(); - this.addCookie(key, value); - }.bind(this, [acceptLabel, denyLabel, key, value]); - }; - let denyInputEvent = function (acceptLabel, denyLabel, key, value) { - return function () { - acceptLabel.classList.remove("active"); - denyLabel.classList.add("active"); - this.updateAllCookiesButtonsActiveStatus(); - this.removeCookie(key, value); - }.bind(this, [acceptLabel, denyLabel, key, value]); - }; - - for (const [key, value] of Object.entries(this.config)) { - let cookie = document.createElement("li"); - cookie.append(this.template.children.item(0).cloneNode(true)); - let name = cookie.querySelector("span.ldcweb-cn-name"); - let description = cookie.querySelector("span.ldcweb-cn-description"); - let link = cookie.querySelector("a.ldcweb-cn-link"); - let acceptInput = cookie.querySelector(".accept > input"); - let denyInput = cookie.querySelector(".deny > input"); - let acceptLabel = cookie.querySelector(".accept > label"); - let denyLabel = cookie.querySelector(".deny > label"); - - name.textContent = value.name; - description.textContent = value.description; - link.textContent = value.labelLink; - link.setAttribute("href", value.link); - acceptInput.id = key + "1"; - acceptInput.name = key; - acceptInput.dataset.name = key; - acceptLabel.htmlFor = key + "1"; - denyInput.id = key + "2"; - denyInput.name = key; - denyInput.dataset.name = key; - denyLabel.htmlFor = key + "2"; - - acceptInput.addEventListener( - "click", - acceptInputEvent.apply(this, [acceptLabel, denyLabel, key, value]) - ); - denyInput.addEventListener( - "click", - denyInputEvent.apply(this, [acceptLabel, denyLabel, key, value]) - ); - - this.cookiesList.append(cookie); - - let cookiesArray = cookiesSite.split(","); - for (const cookieEl of cookiesArray) { - let name = cookieEl.slice(0, cookieEl.indexOf("=")); - let status = cookieEl.slice(cookieEl.indexOf("=") + 1); - if (name === key) { - acceptLabel.classList.remove("active"); - denyLabel.classList.remove("active"); - switch (status) { - case "true": - acceptLabel.classList.add("active"); - break; - case "false": - denyLabel.classList.add("active"); - break; - } - } - } - } - this.setListenerOnChange(); - } - - updateAllCookiesButtonsActiveStatus() { - let acceptsButtons = - this.cookieContainer.querySelectorAll("div.accept > label"); - let deniesButtons = - this.cookieContainer.querySelectorAll("div.deny > label"); - let activeAcceptsButtons = this.cookieContainer.querySelectorAll( - "div.accept > label.active" - ); - let activeDeniesButtons = this.cookieContainer.querySelectorAll( - "div.deny > label.active" - ); - - if ( - acceptsButtons.length && - acceptsButtons.length === activeAcceptsButtons.length - ) { - } - if ( - deniesButtons.length && - deniesButtons.length === activeDeniesButtons.length - ) { - } - } - - addCookie(key, value) { - if (value.script) { - value.script(); - } - this.changeStatus(key, "true"); - } - - removeCookie(key, value) { - for (let cookieName of value.cookies) { - this.deleteBrowserCookie(cookieName, "/", "." + location.host); - } - if (document.getElementById(key)) { - document.getElementById(key).remove(); - } - if (value.fallback) { - value.fallback(); - } - this.changeStatus(key, "false"); - } - setListenerOnChange() { - this.changeBtn = document.getElementsByClassName("ldcweb-cn-change"); - let itemClick = function (item) { - return function () { - this.changeStatus( - item.getAttribute("data-name"), - item.getAttribute("data-status") - ); - }.bind(this); - }; - for (let item of this.changeBtn) { - this.addEvent(item, "click", itemClick.bind(this, [item])); - } - } - - changeStatus(name, status) { - let newCookie = []; - - let cookie = this.getLDCWebCookie("ldcwebcn-init"); - let test = cookie.split(","); - test.forEach((elm) => { - let test = elm.split("="); - if (test[0] === name) { - newCookie.push(name + "=" + status); - if (status === "false") { - this.config[test[0]].cookies.forEach((elm) => { - let cookies = this.getLDCWebCookie(elm); - if (cookies !== undefined) { - document.cookie = - elm + - "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=" + - document.domain + - "; path=/"; - document.cookie = - elm + - "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=." + - document.domain + - "; path=/"; - } - }); - } - } else { - newCookie.push(elm); - } - }); - - this.saveLDCWebCookie(newCookie); - } - - deleteBrowserCookie(name, path, domain) { - if (this.getLDCWebCookie(name)) { - document.cookie = - name + - "=" + - (path ? ";path=" + path : "") + - (domain ? ";domain=" + domain : "") + - ";expires=Thu, 01 Jan 1970 00:00:01 GMT"; - } - } - - getLDCWebCookie(name) { - let matches = document.cookie.match( - new RegExp( - "(?:^|; )" + name.replace(/([.$?*|{}()[\]\\/+^])/g, "\\$1") + "=([^;]*)" - ) - ); - return matches ? decodeURIComponent(matches[1]) : undefined; - } - - addEvent(element, evnt, funct) { - if (element.attachEvent) return element.attachEvent("on" + evnt, funct); - else return element.addEventListener(evnt, funct, false); - } - - saveLDCWebCookie(content) { - let date = new Date(); - let newDate = new Date(date.setMonth(date.getMonth() + 13)); - document.cookie = - "ldcwebcn-init=" + - content + - "; expires=" + - newDate.toUTCString() + - "; path=/;"; - } - - openModal() { - this.bannerContainer.classList.add("ldcweb-cn-banner-open"); - this.ldcwebBannerContent.classList.add("visibility"); - this.ldcwebBannerDetails.classList.add("visibility"); - this.ldcwebBannerBtnDetails.classList.add("visibility"); - this.modalContainer.classList.remove("visibility"); - this.personalizeBtnBanner.innerHTML = - this.personalizeBtnBanner.getAttribute("data-open-modal"); - this.modalBtnBoolean = 1; - this.modalDetails.scrollTop = 0; - this.setCookieList(); - this.updateAllCookiesButtonsActiveStatus(); - } -} diff --git a/resources/sass/libs/_bootstrap.scss b/resources/sass/_bootstrap.scss similarity index 100% rename from resources/sass/libs/_bootstrap.scss rename to resources/sass/_bootstrap.scss diff --git a/resources/sass/back.scss b/resources/sass/back.scss new file mode 100644 index 0000000..7f799a2 --- /dev/null +++ b/resources/sass/back.scss @@ -0,0 +1,8 @@ +@import "bootstrap"; + +@import "base/bo/base"; + +@import "partials/bo/header"; +@import "partials/bo/footer"; + +@import "pages/bo/home"; diff --git a/resources/sass/base/_reset.scss b/resources/sass/base/_reset.scss deleted file mode 100644 index 2df6143..0000000 --- a/resources/sass/base/_reset.scss +++ /dev/null @@ -1,129 +0,0 @@ -/* http://meyerweb.com/eric/tools/css/reset/ - v2.0 | 20110126 - License: none (public domain) -*/ - -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; - font-size: 100%; - font: inherit; - vertical-align: baseline; -} -/* HTML5 display-role reset for older browsers */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -menu, -nav, -section { - display: block; -} -body { - line-height: 1; -} -ol, -ul { - list-style: none; -} -blockquote, -q { - quotes: none; -} -blockquote:before, -blockquote:after, -q:before, -q:after { - content: ""; - content: none; -} -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/resources/sass/base/_base.scss b/resources/sass/base/bo/_base.scss similarity index 100% rename from resources/sass/base/_base.scss rename to resources/sass/base/bo/_base.scss diff --git a/resources/sass/libs-extensions/_bootstrap.scss b/resources/sass/base/fo/_base.scss similarity index 100% rename from resources/sass/libs-extensions/_bootstrap.scss rename to resources/sass/base/fo/_base.scss diff --git a/resources/sass/base/_fonts.scss b/resources/sass/base/fo/_fonts.scss similarity index 100% rename from resources/sass/base/_fonts.scss rename to resources/sass/base/fo/_fonts.scss index be48127..469f114 100644 --- a/resources/sass/base/_fonts.scss +++ b/resources/sass/base/fo/_fonts.scss @@ -1,9 +1,9 @@ $font-path: "~@/fonts"; //CreamyScript Regular @font-face { + font-display: swap; font-family: "Poppins"; - src: url("#{$font-path}/Poppins/Poppins-Regular.ttf") format("truetype"); font-style: 400; font-weight: normal; - font-display: swap; + src: url("#{$font-path}/Poppins/Poppins-Regular.ttf") format("truetype"); } diff --git a/resources/sass/front.scss b/resources/sass/front.scss new file mode 100644 index 0000000..85c3db8 --- /dev/null +++ b/resources/sass/front.scss @@ -0,0 +1,22 @@ +@import "utilities/variables"; +@import "utilities/functions"; +@import "utilities/mixins"; + +@import "bootstrap"; + +// ADDITIONAL BOOTSTRAP IMPORTS + + +@import "vendor/ldcweb-cookies"; + +@import "base/fo/fonts"; +@import "base/fo/base"; + +@import "partials/fo/header"; +@import "partials/fo/footer"; + +@import "components/buttons"; +@import "components/carousel"; +@import "components/dropdown"; + +@import "pages/fo/home"; diff --git a/resources/sass/main.scss b/resources/sass/main.scss deleted file mode 100644 index 81a9109..0000000 --- a/resources/sass/main.scss +++ /dev/null @@ -1,25 +0,0 @@ -@import "utilities/variables.scss"; -@import "utilities/functions.scss"; -@import "utilities/mixins.scss"; - -@import "libs/bootstrap"; - -@import "libs-extensions/bootstrap"; - -@import "base/reset"; -@import "base/fonts"; -@import "base/base"; - -@import "partials/bo/header"; -@import "partials/bo/footer"; - -@import "partials/fo/header"; -@import "partials/fo/footer"; - -@import "components/buttons"; -@import "components/carousel"; -@import "components/dropdown"; - -@import "pages/bo/home"; - -@import "pages/fo/home"; diff --git a/resources/sass/vendor/_ldcweb-cookies.scss b/resources/sass/vendor/_ldcweb-cookies.scss new file mode 100644 index 0000000..5531936 --- /dev/null +++ b/resources/sass/vendor/_ldcweb-cookies.scss @@ -0,0 +1,628 @@ +/** + * LDC Service Web Cookies + * Version 2.1.0 + */ + +/* stylelint-disable selector-max-compound-selectors */ +/* stylelint-disable max-nesting-depth */ + +/* DEBUT DU PARAMETRAGE */ +/* - Choix des FONTS */ +/* - Changement des couleurs et des polices */ + +/* PARTIE A RENSEIGNER */ +$primary-color: rgb(185, 185, 185); +$secondary-color: #0090D7; +$background-color: #282828; +$shadow-color: 0 0.1rem 1rem rgb(0 0 0 / 35%); +$title-font: "Poppins", serif; +$line-height-title: 1; +$title-size: 25px; +$text-font: "Barlow", sans-serif; +$text-size: 14px; +$accept-color: #3a3; +$deny-color: #a33; + +/* Position et animation des cookies */ +$ldcweb-cn-position-left: 20px; /* Distance par rapport à la gauche de la fenêtre */ +$ldcweb-cn-position-right: auto; /* Distance par rapport à la droite de la fenêtre */ +$ldcweb-cn-animation-left: 0; /* Position gauche de base des cookies */ +$ldcweb-cn-animation-right: auto; /* Position droite de base des cookies */ +$ldcweb-cn-position-bottom: 20px; /* Distance par rapport au bas de la fenêtre */ +$ldcweb-cn-z-index: 200; + +/* PARTIE A RENSEIGNER FACULTATIF */ +/* FENETRE D'ACCUEIL */ +$ck-bg-color: #161719; + +/* Title settings */ +$ck-w1-bgcolor-title: $background-color; +$ck-w1-font-family-title: $title-font; +$ck-w1-font-size-title: $title-size; +$ck-w1-color-title: $secondary-color; + +/* Text settings */ +$ck-w1-font-family-txt: $text-font; +$ck-w1-font-size-txt: $text-size; +$ck-w1-color-txt: $primary-color; +$ck-w1-color-href-hover: $secondary-color; + +/* Button settings */ +$ck-w1-color-btn: $secondary-color; +$ck-w1-color-btn-hover: $secondary-color; +$ck-w1-font-family-btn-txt: $text-font; +$ck-w1-font-size-btn-txt: $text-size; +$ck-w1-color-btn-txt: #fff; +$ck-w1-color-btn-txt-hover: #fff; +$ck-w1-color-btn-border: transparent; +$ck-w1-color-btn-border-hover: transparent; + +/* FENETRE DE PERSONNALISATION */ +$ck-bg-color-modal-wrapper: #fff; +/* Title settings */ +$ck-w2-bgcolor-title: $background-color; +$ck-w2-font-family-title: $title-font; +$ck-w2-font-size-title: $title-size; +$ck-w2-color-title: $secondary-color; + +/* Text settings */ +$ck-w2-font-family-txt: $text-font; +$ck-w2-font-size-txt: $text-size; +$ck-w2-color-txt: $primary-color; +$ck-w2-color-href-hover: #000; + +/* Accept/Deny btn settings */ +$ck-color-accept: #808080; +$ck-color-accept-hover: $accept-color; +$ck-color-deny: #808080; +$ck-color-deny-hover: $deny-color; +$ck-color-txt: #fff; +$ck-color-txt-hover: #fff; + +/* Cookies list settings */ +$ck-bgcolor-list: #e4e4e4; +$ck-font-family-list: $text-font; +$ck-font-size-list: $text-size; +$ck-color-list: #000; +$ck-color-title: $secondary-color; + +/* Scroll bar */ +$ck-scroll-bgcolor: $primary-color; +$ck-scroll-barcolor: $secondary-color; +/* FIN DU PARAMETRAGE */ + +/* MOBILE FIRST */ +#template { + display: none; +} + +* { + box-sizing: border-box; + + &::before { + display: none; + } +} + +button { + border: 0; + background-color: transparent; +} + +#ldcweb-cn { + &.open-banner { + display: flex; + + .ldcweb-cn-banner { + display: flex; + } + } + + &.open-modal { + display: flex; + } + + p { + color: $ck-w1-color-txt; + font-family: $ck-w1-font-family-txt; + font-size: $ck-w1-font-size-txt; + } + + a { + color: $ck-w1-color-txt; + font-family: $ck-w1-font-family-txt; + font-size: $ck-w1-font-size-txt; + text-decoration: underline; + transition: 0s; + } + + .ldcweb-cn-banner { + position: fixed; + z-index: $ldcweb-cn-z-index; + right: $ldcweb-cn-animation-right; + bottom: calc($ldcweb-cn-position-bottom + 60px); + left: $ldcweb-cn-animation-left; + display: flex; + overflow: auto; + overflow: hidden; + width: 475px; + height: auto; + max-height: 80vh; + flex-direction: column; + flex-direction: column; + align-items: center; + justify-content: flex-end; + padding: 0; + padding-top: 20px; + margin: 0; + background-color: $ck-bg-color; + border-radius: 10px; + box-shadow: $shadow-color; + line-height: initial; + opacity: 0; + transition: 0.3s; + user-select: none; + visibility: hidden; + + &-open { + right: $ldcweb-cn-position-right; + left: $ldcweb-cn-position-left; + opacity: 1; + visibility: visible; + } + } + + .ldcweb-banner { + &-img { + display: flex; + width: 150px; + height: auto; + flex-direction: column; + align-items: center; + justify-content: center; + padding-right: 20px; + + img { + width: 100%; + } + } + + &-text { + flex: 2; + } + + &-title { + p { + color: $ck-w1-color-title; + font-family: $ck-w1-font-family-title; + font-size: $ck-w1-font-size-title; + font-weight: bold; + line-height: $line-height-title; + text-align: left; + } + } + + &-para-p { + margin: 6px 0; + text-align: justify; + } + + &-btn-details { + width: 100%; + margin: 0 0 20px; + } + + &-btn-details-p { + width: 100%; + margin: 0 auto; + color: $secondary-color; + cursor: pointer; + font-size: 14px; + text-align: center; + } + + &-btns { + display: flex; + width: 100%; + flex: 1; + flex-direction: row; + cursor: pointer; + + .ldcweb-banner-btn { + &-flex { + display: flex; + width: 66.5%; + flex-direction: row; + align-items: center; + justify-content: center; + border-top: 1px solid #808080; + text-align: center; + + div { + width: 50%; + } + + .ldcweb-cn-accept { + color: $secondary-color; + font-weight: bolder; + } + } + + &s-btn { + display: flex; + width: 100%; + height: 50px; + flex-direction: column; + align-items: center; + justify-content: center; + background-color: $background-color; + color: $primary-color; + font-family: $ck-w1-font-family-btn-txt; + font-size: $ck-w1-font-size-btn-txt; + text-align: center; + text-decoration: none; + + &:hover { + background-color: $ck-w1-color-btn-hover; + color: $ck-w1-color-btn-txt-hover; + } + } + } + } + + &-content { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + padding: 0 20px; + } + + &-details { + display: flex; + overflow: hidden; + height: 0; + flex-direction: row; + align-items: center; + align-items: flex-start; + justify-content: center; + padding: 0 20px; + text-align: justify; + transition: 0.3s; + } + + &-details-open { + margin-bottom: 6px; + } + + &-btn-personalize { + width: 33.5%; + border-top: 1px solid #808080; + } + + &-btn-accept { + border-right: 1px solid #808080; + border-left: 1px solid #808080; + } + } + + &-modal .modal { + z-index: 200; + display: flex; + width: 100%; + height: 100%; + align-items: center; + justify-content: center; + opacity: 1; + + &-wrapper { + position: relative; + display: flex; + overflow: auto; + max-height: 100vh; + flex-direction: column; + align-items: center; + + > div { + &:not(:first-of-type) { + width: 100%; + align-items: flex-end; + } + } + } + + &-title { + padding: 0 20px; + + * { + margin: 0; + text-align: justify; + } + + .title { + color: $ck-w2-color-title; + font-family: $ck-w2-font-family-title; + font-size: $ck-w2-font-size-title; + font-weight: bold; + text-align: center; + } + + .subtitle { + margin-bottom: 6px; + color: $ck-w2-color-txt; + color: $ck-w2-color-title; + font-family: $ck-w2-font-family-txt; + font-size: $ck-w2-font-size-txt; + text-align: center; + } + + .description { + display: flex; + flex-direction: column; + align-items: center; + color: $ck-w2-color-txt; + font-family: $ck-w2-font-family-txt; + font-size: $ck-w2-font-size-txt; + font-weight: normal; + line-height: initial; + } + } + + &-btns { + display: flex; + flex-direction: column; + align-items: center; + font-weight: normal; + line-height: initial; + + p { + color: $ck-w2-color-txt; + font-family: $ck-w2-font-family-txt; + font-size: $ck-w2-font-size-txt; + } + + a { + color: $ck-w2-color-txt; + font-family: $ck-w2-font-family-txt; + font-size: $ck-w2-font-size-txt; + } + } + + &-details { + width: 100%; + height: 153px; + margin: 6px 0; + overflow-y: auto; + + ul { + display: flex; + flex-direction: column; + padding: 0 20px; + list-style: none; + } + + li { + > div { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 20px; + border: 1px solid $ck-bgcolor-list; + margin: 10px 0; + border-radius: 20px; + } + + span { + color: $ck-color-list; + font-family: $ck-font-family-list; + font-size: $ck-font-size-list; + } + + a { + color: $ck-color-list; + font-family: $ck-font-family-list; + font-size: $ck-font-size-list; + } + + label { + color: $ck-color-list; + font-family: $ck-font-family-list; + font-size: $ck-font-size-list; + } + } + + .ldcweb-cn { + &-name { + color: $ck-color-title; + } + + &-infos { + display: flex; + width: 100%; + flex: 1; + flex-direction: column; + + span { + &:first-of-type { + font-size: calc($ck-font-size-list * 1.25); + font-weight: bold; + } + } + + .ldcweb-cn-description { + color: $ck-w2-color-txt; + } + + a { + width: fit-content; + } + } + + &-buttons { + display: flex; + width: 200px; + justify-content: space-around; + margin-top: 6px; + + div { + display: table; + margin: 0.5em; + text-align: center; + + &:first-of-type { + background: $ck-color-accept; + transition: all 0.3s; + + input { + &:checked { + ~ { + label { + background-color: $ck-color-deny-hover; + } + } + } + + ~ label.active { + background-color: $ck-color-deny-hover; + } + } + } + + &:last-of-type { + background: $ck-color-deny; + transition: all 0.3s; + + input { + &:checked { + ~ { + label { + background-color: $ck-color-accept-hover; + } + } + } + + ~ { + label.active { + background-color: $ck-color-accept-hover; + } + } + } + } + } + + input { + display: none; + } + + label { + display: block; + width: 100px; + padding: 6px 20px; + color: $ck-color-txt; + cursor: pointer; + transition: color 0.3s; + } + } + } + } + } +} + +.ldcweb-btn { + position: fixed; + z-index: $ldcweb-cn-z-index; + right: $ldcweb-cn-position-right; + bottom: $ldcweb-cn-position-bottom; + left: $ldcweb-cn-position-left; + width: 50px; + height: 50px; + padding: 8px; + background-color: #fff; + border-radius: 100%; + box-shadow: $shadow-color; + cursor: pointer; + + &-icon { + path { + fill: $secondary-color; + } + + circle { + fill: $secondary-color; + } + } +} + +.visibility { + display: none !important; +} + +.btn-autorize { + cursor: pointer; + fill: $secondary-color; +} + +.ldcweb-cn-cookie-link { + cursor: pointer; +} + +@media (max-width: 535px) { + #ldcweb-cn { + .ldcweb-banner { + &-btns { + flex-direction: column; + + .ldcweb-banner-btn-flex { + width: 100%; + + .ldcweb-banner-btn-deny { + width: 50%; + } + + .ldcweb-banner-btn-accept { + width: 50%; + } + } + + .ldcweb-banner-btn-personalize { + width: 100%; + } + } + + &-title { + p { + text-align: center; + } + } + + &-img { + padding: 0 0 20px; + } + + &-btn-accept { + border-right: 0; + border-left: 1px solid #808080; + } + + &-details-open { + height: 0; + } + } + + .ldcweb-cn-banner { + bottom: 0; + left: 0; + width: 100%; + max-height: 100vh; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + + &-content { + flex-direction: column; + } + } + } +} diff --git a/resources/ts/back.ts b/resources/ts/back.ts new file mode 100644 index 0000000..fb861c9 --- /dev/null +++ b/resources/ts/back.ts @@ -0,0 +1,2 @@ +// Bootstrap +import "./libs/bootstrap"; diff --git a/resources/ts/front.ts b/resources/ts/front.ts new file mode 100644 index 0000000..23d0a7f --- /dev/null +++ b/resources/ts/front.ts @@ -0,0 +1,9 @@ +// Bootstrap +import "./libs/bootstrap"; + +// LDCWEB Cookies +import { LdcwebCn } from "./libs/ldcweb-cookies"; +window.LdcwebCn = LdcwebCn; + +//window.addEventListener("DOMContentLoaded", function () { +//}); diff --git a/resources/ts/libs/bootstrap.ts b/resources/ts/libs/bootstrap.ts new file mode 100644 index 0000000..01dfd79 --- /dev/null +++ b/resources/ts/libs/bootstrap.ts @@ -0,0 +1 @@ +import "bootstrap"; diff --git a/resources/ts/libs/index.d.ts b/resources/ts/libs/index.d.ts new file mode 100644 index 0000000..9d59b68 --- /dev/null +++ b/resources/ts/libs/index.d.ts @@ -0,0 +1,71 @@ +export {}; +import type { LdcwebCn } from "./ldcweb-cookies"; +import { AxiosStatic } from "axios"; + +// * CustomLabel +type SelectModelType = { + color: string; + label: string; + value: string; +}; + +type EnumType = { + label: string; + value: number | string; +}; + +// * Recursive List +type StringList = Record; +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface NestedStringListInterface + extends Record {} + +// * Recursive List +type NumberList = Record; +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface NestedNumberListInterface + extends Record {} + +// * Recursive List +type Model = Record< + string, + | string + | boolean + | number + | object + | NestedStringList + | NestedNumberList + | NestedModelInterface +>; +// eslint-disable-next-line @typescript-eslint/no-empty-interface +interface NestedModelInterface extends Model {} + +type NestedStringList = NestedStringListInterface | StringList | string; +type NestedNumberList = NestedNumberListInterface | NumberList | number; +type ModelList = Array; + +declare global { + type CustomTag = LaravelModel; + type LaravelModel = Model; + type LaravelModelList = ModelList; + + type SelectModel = SelectModelType; + type Enum = EnumType; + + interface Window { + $displayMenu: (show: boolean) => void; + $toggleBasketMenu: () => void; + LdcwebCn: LdcwebCn | {}; + axios: AxiosStatic; + __SESSION_WATCH: Record; + __SYSTEM: { + _asset: string; + _locale: string; + _routes: Record; + _translations: { + json: NestedStringList; + php: NestedStringList; + }; + }; + } +} diff --git a/resources/ts/libs/ldcweb-cookies.ts b/resources/ts/libs/ldcweb-cookies.ts new file mode 100644 index 0000000..20f763e --- /dev/null +++ b/resources/ts/libs/ldcweb-cookies.ts @@ -0,0 +1,589 @@ +/** + * LDC Service Web Cookies + * Version 2.1.0 + */ + +enum LdcwebCookieStatus { + true = "true", + false = "false", + wait = "wait", +} + +type LdcwebCookieStatusString = keyof typeof LdcwebCookieStatus; + +type LdcwebCnOptions = { + name: string; + description: string; + link: string; + labelLink: string; + cookies: string[]; + /** + * Fonction qui sert à initialiser la fonctionnalité + * conduisant à la génération du cookie + * @return void + */ + script: () => void; + /** + * Fonction qui sert à informer l'utilisateur + * sur chaque élèment que le cookie + * associé à la fonctionnalité + * est désactivé et propose un lien sur + * cookie notice pour l'activer + * @return void + */ + fallback: () => void | null; +}; + +export class LdcwebCn { + config: Record; + cookieContainer: HTMLDivElement; + bannerContainer: HTMLDivElement; + bannerBtn: HTMLButtonElement; + ldcwebBtn: HTMLButtonElement; + ldcwebBannerParaP: HTMLParagraphElement; + ldcwebBannerContent: HTMLDivElement; + ldcwebBannerDetails: HTMLDivElement; + ldcwebBannerBtnDetails: HTMLDivElement; + modalContainer: HTMLDivElement; + acceptAllBtnBanner: HTMLButtonElement; + denyAllBtnBanner: HTMLButtonElement; + personalizeBtnBanner: HTMLButtonElement; + changeBtn: HTMLCollectionOf; + cookiesList: HTMLUListElement; + cookieLink: HTMLElement; + modalDetails: HTMLDivElement; + template: HTMLDivElement; + modalBtnBoolean: boolean; + bannerBtnTextBoolean: boolean; + + constructor(config: Record) { + // * INITIALIZE VARS + + this.config = config; + let cookieContainer: HTMLDivElement | null = null; + if (!(cookieContainer = document.querySelector("#ldcweb-cn"))) { + throw new Error("Cannot find #ldcweb-cn"); + } + this.cookieContainer = cookieContainer; + this.bannerContainer = document.querySelector( + ".ldcweb-cn-banner" + ) as HTMLDivElement; + this.bannerBtn = document.querySelector( + "button.ldcweb-banner-btn-details-p" + ) as HTMLButtonElement; + this.ldcwebBtn = document.querySelector( + "button.ldcweb-btn" + ) as HTMLButtonElement; + this.ldcwebBannerParaP = document.querySelector( + ".ldcweb-banner-para-p" + ) as HTMLParagraphElement; + this.ldcwebBannerContent = document.querySelector( + ".ldcweb-banner-content" + ) as HTMLDivElement; + this.ldcwebBannerDetails = document.querySelector( + ".ldcweb-banner-details" + ) as HTMLDivElement; + this.ldcwebBannerBtnDetails = document.querySelector( + ".ldcweb-banner-btn-details" + ) as HTMLDivElement; + this.modalContainer = document.getElementById( + "ldcweb-cn-modal" + ) as HTMLDivElement; + this.acceptAllBtnBanner = document.getElementById( + "ldcweb-cn-accept-banner" + ) as HTMLButtonElement; + this.denyAllBtnBanner = document.getElementById( + "ldcweb-cn-deny-banner" + ) as HTMLButtonElement; + this.personalizeBtnBanner = document.querySelector( + ".ldcweb-cn-personalize" + ) as HTMLButtonElement; + this.changeBtn = document.getElementsByClassName( + "ldcweb-cn-change" + ) as HTMLCollectionOf; + this.cookiesList = document.getElementById( + "ldcweb-cn-list" + ) as HTMLUListElement; + this.cookieLink = document.querySelector( + ".ldcweb-cn-cookie-link" + ) as HTMLAnchorElement; + this.modalDetails = document.querySelector( + ".modal-details" + ) as HTMLDivElement; + this.modalBtnBoolean = false; + this.bannerBtnTextBoolean = false; + + let template: HTMLDivElement | null = null; + if (!(template = document.querySelector("#template"))) { + throw new Error("Cannot find 'template' element"); + } + this.template = template; + const memoryTemplate = this.template.cloneNode(true) as HTMLDivElement; + this.template.remove(); + this.template = memoryTemplate; + + // * LOGIC + + const self = this; + const cookies = this.getLDCWebCookie("ldcwebcn-init"); + if (cookies === undefined) { + const newCookie: string[] = []; + + for (const [key] of Object.entries(this.config)) { + newCookie.push(key + "=wait"); + } + + this.bannerContainer.classList.add("ldcweb-cn-banner-open"); + + this.saveLDCWebCookie(newCookie.join(",")); + } else { + const test = cookies.split(","); + test.forEach((elm) => { + const test = elm.split("="); + if (test[1] === "wait") { + this.bannerContainer.classList.add("ldcweb-cn-banner-open"); + } + }); + } + + /** + * Accept a specific cookie + */ + const accept = function (e: { preventDefault: () => void }) { + e.preventDefault(); + for (const [key, value] of Object.entries(self.config)) { + self.addCookie(key, value); + } + for (const acceptLabel of self.cookieContainer.querySelectorAll( + ".accept > label" + )) { + acceptLabel.classList.add("active"); + } + for (const denyLabel of self.cookieContainer.querySelectorAll( + ".deny > label" + )) { + denyLabel.classList.remove("active"); + } + self.bannerContainer.classList.remove("ldcweb-cn-banner-open"); + }.bind(this); + this.acceptAllBtnBanner.addEventListener("click", accept); + + /** + * Deny a specific cookie + */ + const deny = function (e: { preventDefault: () => void }) { + e.preventDefault(); + for (const [key, value] of Object.entries(self.config)) { + self.removeCookie(key, value); + } + for (const acceptLabel of self.cookieContainer.querySelectorAll( + ".accept > label" + )) { + acceptLabel.classList.remove("active"); + } + for (const denyLabel of self.cookieContainer.querySelectorAll( + ".deny > label" + )) { + denyLabel.classList.add("active"); + } + self.bannerContainer.classList.remove("ldcweb-cn-banner-open"); + }.bind(this); + this.denyAllBtnBanner.addEventListener("click", deny); + + const openLdcwebCookies = function (e: { preventDefault: () => void }) { + e.preventDefault(); + self.openModal(); + }.bind(this); + this.cookieLink.addEventListener("click", openLdcwebCookies); + + /** + * Show the modal with the list of all cookies + */ + const hideModal = function (e: { preventDefault: () => void }) { + e.preventDefault(); + self.ldcwebBannerContent.classList.toggle("visibility"); + self.ldcwebBannerDetails.classList.toggle("visibility"); + self.ldcwebBannerBtnDetails.classList.toggle("visibility"); + self.modalContainer.classList.toggle("visibility"); + self.setCookieList(); + }.bind(this); + this.personalizeBtnBanner.addEventListener("click", hideModal); + + this.personalizeBtnBanner.addEventListener("click", (e) => { + e.preventDefault(); + self.modalDetails.scrollTop = 0; + if (!self.modalBtnBoolean) { + if (!self.personalizeBtnBanner.dataset.openModal) { + throw new Error("Cannot find attribute data-open-modal"); + } + self.personalizeBtnBanner.innerHTML = + self.personalizeBtnBanner.dataset.openModal; + self.modalBtnBoolean = true; + } else { + if (!self.personalizeBtnBanner.dataset.closeModal) { + throw new Error("Cannot find attribute data-close-modal"); + } + self.personalizeBtnBanner.innerHTML = + self.personalizeBtnBanner.dataset.closeModal; + self.modalBtnBoolean = false; + } + }); + + this.setListenerOnChange(); + + const cookie = this.getLDCWebCookie("ldcwebcn-init"); + if (cookie === undefined) { + throw Error("Ldcweb cookie is not set"); + } + const test = cookie.split(","); + test.forEach((elm) => { + const test = elm.split("="); + if (test[1] === "true") { + this.config[test[0]].script(); + } else { + if (this.config[test[0]].fallback != null) { + this.config[test[0]].fallback(); + } + } + }); + + this.bannerBtn.addEventListener("click", (e: MouseEvent) => { + self.ldcwebBannerDetails.classList.toggle( + "ldcweb-banner-details-open" + ); + self.bannerBtn.classList.toggle("ldcweb-banner-btn-details-p-open"); + if (!self.bannerBtn.dataset.open || !self.bannerBtn.dataset.close) { + throw new Error( + "Cannot find attribute data-open or data-close" + ); + } + if ( + !self.ldcwebBannerParaP.dataset.open || + !self.ldcwebBannerParaP.dataset.close + ) { + throw new Error( + "Cannot find attribute data-open or data-close" + ); + } + if (self.bannerBtnTextBoolean) { + self.bannerBtn.innerHTML = self.bannerBtn.dataset.close; + self.ldcwebBannerParaP.innerHTML = + self.ldcwebBannerParaP.dataset.close; + self.ldcwebBannerDetails.style.height = "0px"; + self.bannerBtnTextBoolean = false; + } else { + self.bannerBtn.innerHTML = self.bannerBtn.dataset.open; + self.ldcwebBannerParaP.innerHTML = + self.ldcwebBannerParaP.dataset.open; + self.ldcwebBannerDetails.style.height = + self.ldcwebBannerDetails.children[0].clientHeight + "px"; + self.bannerBtnTextBoolean = true; + } + }); + + /** + * Show the default vue of the cookies modal + */ + const resetVue = function (e: { preventDefault: () => void }) { + e.preventDefault(); + self.bannerContainer.classList.toggle("ldcweb-cn-banner-open"); + if ( + self.bannerContainer.classList.contains("ldcweb-cn-banner-open") + ) { + self.ldcwebBannerContent.classList.remove("visibility"); + self.ldcwebBannerDetails.classList.remove("visibility"); + self.ldcwebBannerBtnDetails.classList.remove("visibility"); + self.modalContainer.classList.add("visibility"); + if (!self.personalizeBtnBanner.dataset.closeModal) { + throw new Error("Cannot find attribut data-close-modal"); + } + self.personalizeBtnBanner.innerHTML = + self.personalizeBtnBanner.dataset.closeModal; + self.modalBtnBoolean = false; + } + }.bind(this); + this.ldcwebBtn.addEventListener("click", resetVue); + } + + /** + * Set the cookies list in the modal + */ + setCookieList() { + const self = this; + + this.cookiesList.innerHTML = ""; + for (const [key, value] of Object.entries(this.config)) { + const cookie = document.createElement("li"); + const childItem = this.template.children.item( + 0 + ) as HTMLDivElement | null; + if (childItem === null) { + throw new Error("Cannot find child item"); + } + cookie.append(childItem.cloneNode(true)); + const name = cookie.querySelector( + "span.ldcweb-cn-name" + ) as HTMLSpanElement; + const description = cookie.querySelector( + "span.ldcweb-cn-description" + ) as HTMLSpanElement; + const link = cookie.querySelector( + "a.ldcweb-cn-link" + ) as HTMLButtonElement; + const acceptInput = cookie.querySelector( + ".accept > input" + ) as HTMLInputElement; + const denyInput = cookie.querySelector( + ".deny > input" + ) as HTMLInputElement; + const acceptLabel = cookie.querySelector( + ".accept > label" + ) as HTMLLabelElement; + const denyLabel = cookie.querySelector( + ".deny > label" + ) as HTMLLabelElement; + + name.textContent = value.name; + description.textContent = value.description; + link.textContent = value.labelLink; + link.setAttribute("href", value.link); + acceptInput.id = key + "1"; + acceptInput.name = key; + acceptInput.dataset.name = key; + acceptLabel.htmlFor = key + "1"; + denyInput.id = key + "2"; + denyInput.name = key; + denyInput.dataset.name = key; + denyLabel.htmlFor = key + "2"; + + acceptInput.addEventListener("click", () => { + acceptLabel.classList.add("active"); + denyLabel.classList.remove("active"); + self.addCookie(key, value); + }); + denyInput.addEventListener("click", () => { + acceptLabel.classList.remove("active"); + denyLabel.classList.add("active"); + self.removeCookie(key, value); + }); + + this.cookiesList.append(cookie); + + const cookiesSite = this.getLDCWebCookie("ldcwebcn-init"); + if (cookiesSite === undefined) { + throw Error("Ldcweb cookie is not set"); + } + const cookiesArray = cookiesSite.split(","); + for (const cookieEl of cookiesArray) { + const name = cookieEl.slice(0, cookieEl.indexOf("=")); + const status = cookieEl.slice(cookieEl.indexOf("=") + 1); + if (name === key) { + acceptLabel.classList.remove("active"); + denyLabel.classList.remove("active"); + switch (status) { + case "true": + acceptLabel.classList.add("active"); + break; + case "false": + denyLabel.classList.add("active"); + break; + } + } + } + } + this.setListenerOnChange(); + } + + /** + * Add a specific cookie and + * change his status to true + * + * @param key + * @param value + */ + addCookie(key: string, value: LdcwebCnOptions) { + if (value.script) { + value.script(); + } + this.changeStatus(key, "true"); + } + + /** + * Remove a specific cookie and + * change his status to false + * + * @param key + * @param value + */ + removeCookie(key: string, value: LdcwebCnOptions) { + for (const cookieName of value.cookies) { + this.deleteBrowserCookie(cookieName, "/", "." + location.host); + } + const cookieName = document.getElementById(key); + if (cookieName) { + cookieName.remove(); + } + if (value.fallback) { + value.fallback(); + } + this.changeStatus(key, "false"); + } + + /** + * Add events for each cookie buttons + * Activate or Deactivate a specific cookie + */ + setListenerOnChange() { + const self = this; + this.changeBtn = document.getElementsByClassName( + "ldcweb-cn-change" + ) as HTMLCollectionOf; + for (const item of this.changeBtn) { + this.addEvent(item, "click", () => { + if (!item.dataset.name) { + throw new Error("Dataset is missing required elements"); + } + const status = item.dataset.status as + | LdcwebCookieStatus + | undefined; + if (!status || !(status in LdcwebCookieStatus)) { + throw new Error("Dataset is missing required elements"); + } + self.changeStatus(item.dataset.name, status); + }); + } + } + + /** + * Change the status of a cookie + * + * @param name + * @param status + */ + changeStatus(name: string, status: LdcwebCookieStatusString) { + /** Contains array of string like youtube=true etc */ + const newCookie: string[] = []; + const cookie = this.getLDCWebCookie("ldcwebcn-init"); + if (cookie === undefined) { + throw Error("Ldcweb cookie is not set"); + } + + /** specificCookieString contains youtube=true like */ + cookie.split(",").forEach((specificCookieString) => { + /** Contanins cookie name 0 and cookie value 1 */ + const test = specificCookieString.split("="); + // Check this cookie is the one to update + if (test[0] === name) { + newCookie.push(name + "=" + status); + + if (status === "false") { + // * Iterer sur chque cookie possible de la config + this.config[test[0]].cookies.forEach( + (cookieNametoRemove) => { + const cookies = + this.getLDCWebCookie(cookieNametoRemove); + // * Si le navigateur possede le cookie + if (cookies !== undefined) { + // * Suppression du cookie et de sa version precedé dun point + document.cookie = + cookieNametoRemove + + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=" + + document.domain + + "; path=/"; + document.cookie = + cookieNametoRemove + + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; domain=." + + document.domain + + "; path=/"; + } + } + ); + } + } else { + newCookie.push(specificCookieString); + } + }); + + this.saveLDCWebCookie(newCookie.join(",")); + } + + /** + * Set an older expire parameter to a specific cookie + * + * @param name + * @param path + * @param domain + */ + deleteBrowserCookie(name: string, path: string, domain: string) { + if (this.getLDCWebCookie(name)) { + document.cookie = + name + + "=" + + (path ? ";path=" + path : "") + + (domain ? ";domain=" + domain : "") + + ";expires=Thu, 01 Jan 1970 00:00:01 GMT"; + } + } + + /** + * Get the Ldcweb cookie + * + * @param name + * @returns A string like analytics=true,youtube=true or undefined + */ + getLDCWebCookie(name: string) { + const matches = document.cookie.match( + new RegExp( + "(?:^|; )" + + name.replace(/([.$?*|{}()[\]\\/+^])/g, "\\$1") + + "=([^;]*)" + ) + ); + return matches ? decodeURIComponent(matches[1]) : undefined; + } + + /** + * Add event on a specific element + * + * @param element + * @param evnt + * @param funct + * @returns + */ + addEvent(element: HTMLElement, evnt: string, funct: () => void) { + return element.addEventListener(evnt, funct, false); + } + + /** + * Save cookie content on web browser + * + * @param content + */ + saveLDCWebCookie(content: string) { + const date = new Date(); + const newDate = new Date(date.setMonth(date.getMonth() + 13)); + document.cookie = + "ldcwebcn-init=" + + content + + "; expires=" + + newDate.toUTCString() + + "; path=/;"; + } + + /** + * Open the cookies modal + */ + openModal() { + this.bannerContainer.classList.add("ldcweb-cn-banner-open"); + this.ldcwebBannerContent.classList.add("visibility"); + this.ldcwebBannerDetails.classList.add("visibility"); + this.ldcwebBannerBtnDetails.classList.add("visibility"); + this.modalContainer.classList.remove("visibility"); + this.personalizeBtnBanner.innerHTML = + this.personalizeBtnBanner.dataset?.closeModal ?? "PERSONNALISER"; + this.modalBtnBoolean = true; + // Scroll to the top of the cookies list + this.modalDetails.scrollTop = 0; + this.setCookieList(); + } +} diff --git a/resources/views/fo/frontend.blade.php b/resources/views/fo/frontend.blade.php new file mode 100644 index 0000000..0327290 --- /dev/null +++ b/resources/views/fo/frontend.blade.php @@ -0,0 +1,26 @@ + + + + + @include('fo.partials.head') + @stack('styles') + + + +

+ @include('fo.partials.header') +
+ @yield('content') +
+ @include('fo.partials.footer') +
+ + @include('fo.libs.ldcweb-cookies') + + + + + + @stack('scripts') + + diff --git a/resources/views/fo/libs/ldcweb-cookies.blade.php b/resources/views/fo/libs/ldcweb-cookies.blade.php new file mode 100644 index 0000000..5006604 --- /dev/null +++ b/resources/views/fo/libs/ldcweb-cookies.blade.php @@ -0,0 +1,199 @@ + + +
+ +
+
+
+ Logo +
+
+
+

Le site internet Le Gaulois Professionnel utilise des cookies !

+
+

Nous utilisons des cookies pour nous assurer du bon fonctionnement de notre site et à des + fins analytiques. + En poursuivant votre navigation sur ce site ou en fermant ce bandeau, vous consentez à l’utilisation + de ces + cookies.

+
+
+
+

Si vous refusez l'utilisation des cookies, vos informations ne seront pas suivies lors de votre visite + sur ce site. Un cookie sera utilisé + dans votre navigateur afin de se souvenir de ne pas suivre vos préférences. Certaines fonctionnalités ne + seront pas accessibles. + Vous pouvez changer d’avis et modifier votre consentement à tout moment en revenant sur ce site. + Pour en savoir plus sur les cookies que nous utilisons, consultez notre charte de + confidentialité.

+
+
+ +
+
+ +
+ +
+
+ +@push('scripts') + +@endpush diff --git a/resources/views/fo/pages/home.blade.php b/resources/views/fo/pages/home.blade.php new file mode 100644 index 0000000..df2ba55 --- /dev/null +++ b/resources/views/fo/pages/home.blade.php @@ -0,0 +1,13 @@ +@section('title', "titre de la homepage") +@section('description', "description de la homepage") +@section('keywords', "Mots clé de la homepage") + +@extends('../fo.frontend') + +@section('content') + +
+

main content

+
+ +@endsection diff --git a/resources/views/fo/partials/footer.blade.php b/resources/views/fo/partials/footer.blade.php new file mode 100644 index 0000000..e192edc --- /dev/null +++ b/resources/views/fo/partials/footer.blade.php @@ -0,0 +1,6 @@ + diff --git a/resources/views/fo/partials/head.blade.php b/resources/views/fo/partials/head.blade.php new file mode 100644 index 0000000..59d72ad --- /dev/null +++ b/resources/views/fo/partials/head.blade.php @@ -0,0 +1,23 @@ + + + + + + + +@hasSection('title')@yield('title')@else{{ config('app.name') }}@endif +@hasSection('description')@endif +@hasSection('keywords')@endif + +@hasSection('canonical') + +@else + +@endif + + +@hasSection('metaIndex') + +@else + +@endif diff --git a/resources/views/fo/partials/header.blade.php b/resources/views/fo/partials/header.blade.php new file mode 100644 index 0000000..36e695a --- /dev/null +++ b/resources/views/fo/partials/header.blade.php @@ -0,0 +1,3 @@ +
+

header content

+
diff --git a/resources/views/fo/welcome.blade.php b/resources/views/fo/welcome.blade.php deleted file mode 100644 index dd6a45d..0000000 --- a/resources/views/fo/welcome.blade.php +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - - Laravel - - - - - - - - - - -
- @if (Route::has('login')) - - @endif - -
-
- - - - - -
- -
-
-
- - -
-
- Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. -
-
-
- -
-
- - -
- -
-
- Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. -
-
-
- -
-
- - -
- -
-
- Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. -
-
-
- -
-
- -
Vibrant Ecosystem
-
- -
-
- Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. -
-
-
-
-
- -
-
-
- - - - - - Shop - - - - - - - - Sponsor - -
-
- -
- Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) -
-
-
-
- - diff --git a/routes/web-fo.php b/routes/web-fo.php index 644dd5b..e568bc8 100644 --- a/routes/web-fo.php +++ b/routes/web-fo.php @@ -1,6 +1,7 @@ name('home'); +Route::get('/', [ControllersHomeController::class, 'index'])->name('home'); + +Route::view('/charte-de-confidentialite', 'fo.pages.charte')->name('policies'); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e8c5a14 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "esnext", + "lib": ["es5", "es6", "dom", "dom.iterable"], + "module": "esnext", + "strict": true, + "jsx": "preserve", + "moduleResolution": "node", + "typeRoots": ["resources/ts/@types", "node_modules/@types"] + }, + "include": ["resources/**/*.js", "resources/**/*.ts", "resources/**/*.vue"], + "exclude": ["node_modules"], + "compileOnSave": false +} diff --git a/webpack.mix.js b/webpack.mix.js index ec0062a..113826a 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,50 +1,110 @@ const path = require('path'); const mix = require('laravel-mix'); -const { CleanWebpackPlugin } = require('clean-webpack-plugin'); -require('laravel-mix-polyfill'); + +require("laravel-mix-polyfill"); +require("laravel-mix-clean"); +require("laravel-mix-eslint"); +require("laravel-mix-stylelint"); + +const assetDir = "assets"; +const polyfill = { + enabled: true, + bugfixes: true, + useBuiltIns: "usage", + targets: "last 3 version, not dead, >0.3%", +}; mix.webpackConfig({ resolve: { + extensions: ["*", ".js", ".vue", ".ts"], alias: { - '@': path.resolve('resources/assets') - } + "@": path.resolve("resources/assets"), + }, + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { + appendTsSuffixTo: [/\.vue$/], + }, + }, + { + test: /\.vue$/, + loader: "vue-loader", + options: { + esModule: true, + }, + }, + ], }, - plugins: [ - new CleanWebpackPlugin({ - cleanOnceBeforeBuildPatterns: [ - 'css/*', - 'js/*', - 'images/*', - 'fonts/*', - '~/assets/*' - ] - }) - ], }); -let assetDir = 'assets'; mix.options({ fileLoaderDirs: { images: `${assetDir}/images`, - fonts: `${assetDir}/fonts` + fonts: `${assetDir}/fonts`, }, postCss: [ - require('postcss-discard-comments')({ - removeAll: true - }) - ] + require("postcss-discard-comments")({ + removeAll: true, + }), + ], }); -mix.js("resources/js/back.js", "public/js/preload-back.js") - .js("resources/js/front.js", "public/js/preload-front.js") - .sass("resources/sass/main.scss", "public/css/preload-main.css") - .vue() - .polyfill({ - enabled: true, - useBuiltIns: "usage", - targets: { "firefox": "50", "ie": 11 } +mix.clean({ + cleanOnceBeforeBuildPatterns: [ + "css/*", + "js/*", + "images/*", + "fonts/*", + "assets/*", + ], +}); + +// BACKEND +mix.ts("resources/ts/back.ts", "public/js/back.js", { + transpileOnly: true, +}) + .vue({ + runtimeOnly: true, + extractStyles: true, + globalStyles: false, }) + .eslint({ + fix: true, + extensions: ["js", "ts"], + }) + .stylelint({ + configFile: ".stylelintrc.json", + files: ["**/*.scss"], + }) + .sass("resources/sass/back.scss", "public/css/back.css") + .polyfill(polyfill) + .version(); + +// FRONTEND +mix.ts("resources/ts/front.ts", "public/js/front.js", { + transpileOnly: true, +}) + .vue({ + runtimeOnly: true, + extractStyles: true, + globalStyles: false, + }) + .eslint({ + fix: true, + extensions: ["js", "ts"], + }) + .stylelint({ + configFile: ".stylelintrc.json", + files: ["**/*.scss"], + }) + .sass("resources/sass/front.scss", "public/css/front.css") + .polyfill(polyfill) .version(); // Copy Blade Images Assets -mix.copyDirectory('resources/assets', 'public/assets'); +mix.copyDirectory("resources/assets", "public/assets"); +