diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..6406383 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,20 @@ +{ + "extends": "stylelint-config-sass-guidelines", + "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 + } +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 7aadaba..32e834d 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,12 +1,13 @@ { "workbench.colorCustomizations": { - "activityBar.activeBackground": "#3371a9", "activityBar.activeBorder": "#621e41", + "activityBar.activeBackground": "#3371a9", "activityBar.background": "#3371a9", "activityBar.foreground": "#e7e7e7", "activityBar.inactiveForeground": "#e7e7e799", "activityBarBadge.background": "#621e41", "activityBarBadge.foreground": "#e7e7e7", + "commandCenter.border": "#e7e7e799", "sash.hoverBorder": "#3371a9", "statusBar.background": "#275782", "statusBar.foreground": "#e7e7e7", @@ -16,8 +17,7 @@ "titleBar.activeBackground": "#275782", "titleBar.activeForeground": "#e7e7e7", "titleBar.inactiveBackground": "#27578299", - "titleBar.inactiveForeground": "#e7e7e799", - "commandCenter.border": "#e7e7e799" + "titleBar.inactiveForeground": "#e7e7e799" }, "peacock.remoteColor": "#275782", } diff --git a/package-lock.json b/package-lock.json index 76cfa7c..cecbb39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "@types/webpack-env": "^1.17.0", "@typescript-eslint/eslint-plugin": "^5.35.1", "@typescript-eslint/parser": "^5.35.1", + "@vue/eslint-config-typescript": "^11.0.0", "axios": "^0.21.1", "bootstrap": "^5.1.3", "clean-webpack-plugin": "^4.0.0", @@ -32,12 +33,16 @@ "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", "moment": "^2.29.3", "prettier": "^2.7.1", "resolve-url-loader": "^5.0.0", "sass": "^1.52.1", "sass-loader": "^12.6.0", + "stylelint": "^14.11.0", + "stylelint-config-sass-guidelines": "^9.0.1", + "stylelint-webpack-plugin": "^3.3.0", "sweetalert2": "^11.4.16", "toastify-js": "^1.11.2", "ts-loader": "^9.3.0", @@ -1782,6 +1787,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", @@ -2697,6 +2719,30 @@ "@vue/shared": "3.2.37" } }, + "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.37", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", @@ -3229,6 +3275,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", @@ -4315,6 +4370,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": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -6119,6 +6183,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", @@ -6153,6 +6255,12 @@ "node": ">=0.10.0" } }, + "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", @@ -6450,6 +6558,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", @@ -6717,6 +6837,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", @@ -6773,6 +6902,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", @@ -7108,6 +7243,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", @@ -7211,6 +7352,12 @@ "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/laravel-mix/node_modules/css-loader": { "version": "5.2.7", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", @@ -7344,6 +7491,12 @@ "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", @@ -7416,6 +7569,16 @@ "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", @@ -8477,6 +8640,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", @@ -8815,6 +8984,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", @@ -8828,6 +9035,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", @@ -9861,6 +10077,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", @@ -10162,6 +10395,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", @@ -10178,6 +10417,499 @@ "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-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/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/stylelint/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/stylelint/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/stylelint/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/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/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/stylelint/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/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/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/stylelint/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/stylelint/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/stylelint/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/stylelint/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/stylelint/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/stylelint/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/stylelint/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/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/stylelint/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/stylelint/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/stylelint/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/stylelint/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/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10190,6 +10922,19 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "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", @@ -10202,6 +10947,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", @@ -10233,6 +10984,44 @@ "url": "https://sweetalert2.github.io/#donations" } }, + "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", @@ -11288,6 +12077,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", @@ -12624,6 +13426,13 @@ "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", @@ -13396,6 +14205,17 @@ "@vue/shared": "3.2.37" } }, + "@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.37", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", @@ -13853,6 +14673,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", @@ -14686,6 +15512,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": "6.7.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", @@ -16012,6 +16844,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", @@ -16039,6 +16902,12 @@ } } }, + "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", @@ -16265,6 +17134,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", @@ -16460,6 +17335,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", @@ -16498,6 +17379,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", @@ -16740,6 +17627,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", @@ -16852,6 +17745,12 @@ "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", @@ -16924,6 +17823,12 @@ "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", @@ -16980,6 +17885,12 @@ "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", @@ -17758,6 +18669,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", @@ -17966,6 +18883,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", @@ -17976,6 +18913,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", @@ -18745,6 +19689,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", @@ -18984,6 +19939,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", @@ -18994,6 +19955,369 @@ "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": { + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "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 + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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" + } + }, + "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 + }, + "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": { + "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" + } + }, + "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 + } + } + }, + "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" + } + }, + "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 + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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" + } + }, + "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 + }, + "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 + } + } + }, + "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" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "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", @@ -19003,12 +20327,28 @@ "has-flag": "^4.0.0" } }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "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", @@ -19030,6 +20370,39 @@ "integrity": "sha512-YqH/C6IPudeWVK9R0x3pCOqP7m90Ae50tl98SQBpAwL3+UBl1WYD2+5OaKy0ybiVTKbYe76wwJ3PV+bITLjl+A==", "dev": true }, + "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", @@ -19793,6 +21166,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", diff --git a/package.json b/package.json index 485e4fe..180f7d5 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "production": "npm run clear-manifest && mix --production", "prod": "npm run production", "eslint": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources", - "eslint-ci": "node ./node_modules/.bin/eslint -c .eslintrc.json ./resources -f junit" + "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": { "@fortawesome/fontawesome-svg-core": "^6.1.2", @@ -25,6 +27,7 @@ "@types/webpack-env": "^1.17.0", "@typescript-eslint/eslint-plugin": "^5.35.1", "@typescript-eslint/parser": "^5.35.1", + "@vue/eslint-config-typescript": "^11.0.0", "axios": "^0.21.1", "bootstrap": "^5.1.3", "clean-webpack-plugin": "^4.0.0", @@ -39,12 +42,16 @@ "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", "moment": "^2.29.3", "prettier": "^2.7.1", "resolve-url-loader": "^5.0.0", "sass": "^1.52.1", "sass-loader": "^12.6.0", + "stylelint": "^14.11.0", + "stylelint-config-sass-guidelines": "^9.0.1", + "stylelint-webpack-plugin": "^3.3.0", "sweetalert2": "^11.4.16", "toastify-js": "^1.11.2", "ts-loader": "^9.3.0", diff --git a/resources/sass/_bootswatch.scss b/resources/sass/_bootswatch.scss deleted file mode 100644 index 16c2a52..0000000 --- a/resources/sass/_bootswatch.scss +++ /dev/null @@ -1,324 +0,0 @@ -// Lumen 5.1.3 -// Bootswatch - -// Variables -@import "variables"; - -$web-font-path: "https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap" !default; -@if $web-font-path { - @import url($web-font-path); -} - -// Mixins - -@mixin shadow($width: 4px) { - border-style: solid; - border-width: 0 1px $width 1px; -} - -// Navbar - -.navbar { - @include shadow(); - - @each $color, $value in $theme-colors { - &.bg-#{$color} { - border-color: shade-color($value, 10%); - } - } -} - -// Buttons - -.btn { - @include shadow(); - text-transform: uppercase; - - &:not(.disabled):hover { - margin-top: 1px; - border-bottom-width: 3px; - } - - &:not(.disabled):active { - margin-top: 2px; - border-bottom-width: 2px; - @include box-shadow(none); - } - - @each $color, $value in $theme-colors { - &-#{$color} { - &:hover, - &:active, - &:focus { - background-color: $value; - } - - &, - &:not(.disabled):hover, - &:not(.disabled):active, - &:focus { - border-color: shade-color($value, 10%); - } - } - } -} - -[class*="btn-outline"] { - border-top-width: 1px; -} - -.btn-group-vertical { - .btn + .btn { - &:hover { - margin-top: -1px; - border-top-width: 1px; - } - - &:active { - margin-top: -1px; - border-top-width: 2px; - } - } -} - -// Typography - -.text-secondary { - color: $gray-700 !important; -} - -.blockquote-footer { - color: $gray-600; -} - -// Forms - -.form-control { - box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075); -} - -// Navs - -.nav { - .open > a, - .open > a:hover, - .open > a:focus { - border-color: transparent; - } -} - -.nav-tabs { - .nav-link { - color: $body-color; - - &, - &.disabled, - &.disabled:hover, - &.disabled:focus { - margin-top: 6px; - border-color: $nav-tabs-border-color; - transition: padding-bottom 0.2s ease-in-out, - margin-top 0.2s ease-in-out, border-bottom 0.2s ease-in-out; - } - - &:not(.disabled):hover, - &:not(.disabled):focus, - &.active { - padding-bottom: add(0.5rem, 6px); - border-bottom-color: transparent; - margin-top: 0; - } - } - - &.nav-justified > li { - vertical-align: bottom; - } -} - -.dropdown-menu { - margin-top: 0; - @include shadow(); - border-top-width: 1px; - @include box-shadow(none); -} - -.breadcrumb { - border-color: shade-color($breadcrumb-bg, 10%); - @include shadow(); -} - -.pagination { - > li > a, - > li > span { - position: relative; - top: 0; - @include shadow(); - color: $pagination-color; - font-weight: 700; - text-transform: uppercase; - - &:hover, - &:focus { - top: 1px; - border-bottom-width: 3px; - text-decoration: none; - } - - &:active { - top: 2px; - border-bottom-width: 2px; - } - } - - > .disabled > a, - > .disabled > span { - &:hover { - top: 0; - @include shadow(); - } - - &:active { - top: 0; - @include shadow(); - } - } -} - -.pager { - > li > a, - > li > span, - > .disabled > a, - > .disabled > span { - &, - &:hover, - &:active { - border-left-width: 2px; - border-right-width: 2px; - } - } -} - -// Indicators - -.btn-close { - text-decoration: none; - opacity: 0.4; - - &:hover, - &:focus { - opacity: 1; - } -} - -.alert { - color: $white; - @include shadow(); - - &-primary { - background-color: $primary; - border-color: shade-color($primary, 10%); - } - - &-secondary { - background-color: $secondary; - border-color: shade-color($secondary, 10%); - } - - &-success { - background-color: $success; - border-color: shade-color($success, 10%); - } - - &-info { - background-color: $info; - border-color: shade-color($info, 10%); - } - - &-danger { - background-color: $danger; - border-color: shade-color($danger, 10%); - } - - &-warning { - background-color: $warning; - border-color: shade-color($warning, 10%); - } - - &-dark { - background-color: $dark; - border-color: shade-color($dark, 10%); - } - - &-light { - background-color: $light; - border-color: shade-color($light, 10%); - } - - .alert-link { - font-weight: 400; - color: $white; - text-decoration: underline; - } - - &-secondary, - &-light { - &, - a, - .alert-link { - color: $body-color; - } - } -} - -.badge { - &.bg-secondary, - &.bg-light { - color: $dark; - } -} - -// Containers - -a.list-group-item { - &-success { - &.active { - background-color: $success; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($success, 10%); - } - } - - &-warning { - &.active { - background-color: $warning; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($warning, 10%); - } - } - - &-danger { - &.active { - background-color: $danger; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($danger, 10%); - } - } -} - -.modal{ - color: #1e2125; - & .toast { - .btn-close { - background-image: url("data:image/svg+xml,"); - } - } -} diff --git a/resources/sass/_complement.scss b/resources/sass/_complement.scss deleted file mode 100644 index 79f22e0..0000000 --- a/resources/sass/_complement.scss +++ /dev/null @@ -1,244 +0,0 @@ -// @function strip-unit($value) -// @param {number with unit} $value -@function strip-unit($value) { - @return ($value / ($value * 0 + 1)); -} - -// @function pow($base, $exponents) -// Helper: Raise a number the power of another number -// Adapted from: https://gist.github.com/hail2u/1964056 -// -// @param {number} $base — The base number -// @param {number} $exponents — The exponent to which to raise $base -@function pow($base, $exponents) { - $raised: 1; - @for $i from 1 through $exponents { - $raised: $raised * $base; - } - @return $raised; -} - -// @function luminance($color) -// Helper: Calculate Luminance of a single color -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// White luminance is 1, Black luminance is 0 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { luminance: luminance(#c00); } -// Output: -// .sample { luminance: 0.1283736922; } -// -@function luminance($color) { - // Thanks voxpelli for a very concise implementation of luminance measure in sass - // Adapted from: https://gist.github.com/voxpelli/6304812 - $rgba: red($color), green($color), blue($color); - $rgba2: (); - @for $i from 1 through 3 { - $rgb: nth($rgba, $i); - $rgb: calc($rgb / 255); - $rgb: if($rgb < .03928, calc($rgb / 12.92), pow(calc(($rgb + .055) / 1.055), 2)); - $rgba2: append($rgba2, $rgb); - } - @return (.2126 * nth($rgba2, 1) + .7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3))*100; -} - -// @function contrast-ratio($fg, $bg) -// Helper: Calculate "readability" as defined by WCAG 2.1 -// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js -// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { color-contrast: contrast-ratio(#c00, #fff); } -// Output: -// .sample { color-contrast: 5.89; } -// -@function contrast-ratio($fg, $bg) { - $luminance1: luminance($fg) + 0.05; - $luminance2: luminance($bg) + 0.05; - $ratio: calc($luminance1 / $luminance2); - @if $luminance2 > $luminance1 { - $ratio: calc(1 / $ratio); - } - // Round to a hundreth because 6.96 should not pass a ratio of 7.0 - $ratio: calc(round($ratio * 100) / 100); - @return $ratio; -} - -// @function validate-font-size($size) -// Helper: Depending on the unit recalculate a font size value into pixels if possible -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { validate-font-size: validate-font-size(1em); } -// Output: -// .sample { validate-font-size: 16; } -// -@function validate-font-size($size) { - @if unit($size) == 'em' or unit($size) == 'rem' or unit($size) == 'px' or unit($size) == '' { - // Check if a flexible unit - @if unit($size) == 'em' or unit($size) == 'rem' { - // Need to convert to a pixel value. Let's not overcomplicate it with possible EM inheritence scale factors - @return strip-unit($size * 16) - } - @if unit($size) == 'px' { - // We expect PX, so strip the value and return it - @return strip-unit($size); - } - @if unit($size) == '' { - @return $size; - } - } @else { - @error 'validate-font-size(): An unexpected font size unit was supplied.'; - } -} - -// @function get-ratio($level: 'AA', $size: 16, $bold: false) -// Helper: Determine the correct ratio value to use based on font-size and WCAG Level -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { get-ratio: get-ratio('AAA', 19, true); } -// Output: -// .sample { get-ratio: 4.5; } -// -@function get-ratio($level: 'AA', $size: 16, $bold: false) { - // Default ratio - $ratio: 4.5; - @if $level == 'AAA' { - $ratio: 7; - } - - // Make sure the size is valid. If the value is not EM, REM, or PX (preferred), we can't help - $size: validate-font-size($size); - - // Check font size - @if $size < 24 { - // Small text, use defaults - // But: - @if $size >= 19 and $bold == true { - // Special case: Small text but also bold - @if $level == 'AAA' { - $ratio: 4.5; - } @else { - $ratio: 3; - } - } - } @else { - // Larger than 24 - $ratio: 3; - @if $level == 'AAA' { - $ratio: 4.5; - } - } - @return $ratio; -} - -// @function light-or-dark($color) -// Helper: Use contrast against white or black to determine if a color is "light" or "dark" -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { light-or-dark: light-or-dark(#c00); } -// Output: -// .sample { light-or-dark: "light"; } -// -@function light-or-dark($color) { - $light-contrast: contrast-ratio($color, $white); - $dark-contrast: contrast-ratio($color, $black); - - @if $light-contrast > $dark-contrast { - // Contrast against white is higher than against black, so, this is a dark color - @return "dark"; - } @else { - @return "light"; - } -} - -// @function color-contrast($color) -// Helper: Returns black or white compared to a color, whichever produces the highest contrast -// Usage: -// .sample { -// background-color: #c00; -// color: color-contrast(#c00); -// } -// Output: -// .sample { -// background-color: #c00; -// color: #fff; -// } -// -// Named for the forthcoming CSS Module 5 spec function color-contrast(); -// See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-contrast() -// -@function color-contrast($color) { - $color-lod: light-or-dark($color); - - @if ($color-lod == "dark") { - @return $white; - } @else { - @return $black; - } -} - -// @function a11y-color($fg, $bg, $level: 'AA', $size: 16, $bold: false) -// Goal: Return a color that passes for the chosen WCAG level without changing the Hue of the color -// Usage: -// .sample { -// background-color: #000; -// color: a11y-color(#c0c, #000); -// } -// Output: -// .sample { -// background-color: #000; -// color: #d200d2; -// } -// -@function a11y-color($fg, $bg, $level: 'AA', $size: 16, $bold: false) { - // Helper: make sure the font size value is acceptable - $font-size: validate-font-size($size); - // Helper: With the level, font size, and bold boolean, return the proper target ratio. 3.0, 4.5, or 7.0 expected - $ratio: get-ratio($level, $font-size, $bold); - // Calculate the first contrast ratio of the given pair - $original-contrast: contrast-ratio($fg, $bg); - - @if $original-contrast >= $ratio { - // If we pass the ratio already, return the original color - @return $fg; - } @else { - // Doesn't pass. Time to get to work - // Should the color be lightened or darkened? - $fg-lod: light-or-dark($fg); - $bg-lod: light-or-dark($bg); - - // Set a "step" value to lighten or darken a color - // Note: Higher percentage steps means faster compile time, but we might overstep the required threshold too far with something higher than 4% - $step: 1%; - - // Run through some cases where we want to darken, or use a negative step value - @if $fg-lod == 'light' and $bg-lod == 'light' { - // Both are light colors, darken the fg - $step: - $step; - } @else if $fg-lod == 'dark' and $bg-lod == 'light' { - // bg is light, fg is dark but does not pass, darken more - $step: - $step; - } - // Keeping the rest of the logic here, but our default values do not change, so this logic is not needed - //@else if $fg-lod == 'light' and $bg-lod == 'dark' { - // // bg is dark, fg is light but does not pass, lighten further - // $step: $step; - //} @else if $fg-lod == 'dark' and $bg-lod == 'dark' { - // // Both are dark, so lighten the fg - // $step: $step; - //} - - // The magic happens here - // Loop through with a @while statement until the color combination passes our required ratio. Scale the color by our step value until the expression is false - // This might loop 100 times or more depending on the colors - @while contrast-ratio($fg, $bg) < $ratio { - $sat-step: 0%; - @if saturation($fg) > 10 { - $sat-step: $step; - } - $fg: scale-color($fg, $lightness: $step, $saturation:$sat-step); - } - @return $fg; - } -} diff --git a/resources/sass/_variables.scss b/resources/sass/_variables.scss index abc38ae..24b9d55 100644 --- a/resources/sass/_variables.scss +++ b/resources/sass/_variables.scss @@ -11,117 +11,116 @@ $theme: "lumen" !default; $lightness: -20%; $saturation: -5%; -@function lowerColor($color) { +@function lower-color($color) { @return color.scale($color, $lightness: $lightness, $saturation: $saturation); } -@function lowerBrightness($color) { +@function lower-brightness($color) { @return color.scale($color, $lightness: $lightness + 10%); } +$white: #fffcf5 !default; +$gray-100: lower-brightness(#f8f9fa) !default; +$gray-200: lower-brightness(#e9ecef) !default; +$gray-300: lower-brightness(#dee2e6) !default; +$gray-400: lower-brightness(#ced4da) !default; +$gray-500: lower-brightness(#adb5bd) !default; +$gray-600: lower-brightness(#6c757d) !default; +$gray-700: lower-brightness(#495057) !default; +$gray-800: lower-brightness(#343a40) !default; +$gray-900: lower-brightness(#212529) !default; +$black: #000 !default; -$white: #fffcf5 !default; -$gray-100: lowerBrightness(#f8f9fa) !default; -$gray-200: lowerBrightness(#e9ecef) !default; -$gray-300: lowerBrightness(#dee2e6) !default; -$gray-400: lowerBrightness(#ced4da) !default; -$gray-500: lowerBrightness(#adb5bd) !default; -$gray-600: lowerBrightness(#6c757d) !default; -$gray-700: lowerBrightness(#495057) !default; -$gray-800: lowerBrightness(#343a40) !default; -$gray-900: lowerBrightness(#212529) !default; -$black: #000 !default; +$blue: lower-color(#337ab7) !default; +$indigo: lower-color(#6610f2) !default; +$purple: lower-color(#6f42c1) !default; +$pink: lower-color(#b7337a) !default; +$red: lower-color(#d9534f) !default; +$orange: lower-color(#fd7e14) !default; +$yellow: lower-color(#f0ad4e) !default; +$green: lower-color(#5cb85c) !default; +$teal: lower-color(#20c997) !default; +$cyan: lower-color(#5bc0de) !default; -$blue: lowerColor(#337ab7) !default; -$indigo: lowerColor(#6610f2) !default; -$purple: lowerColor(#6f42c1) !default; -$pink: lowerColor(#B7337A) !default; -$red: lowerColor(#d9534f) !default; -$orange: lowerColor(#fd7e14) !default; -$yellow: lowerColor(#f0ad4e) !default; -$green: lowerColor(#5cb85c) !default; -$teal: lowerColor(#20c997) !default; -$cyan: lowerColor(#5bc0de) !default; - -$primary: $blue !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $teal !default; -$warning: $yellow !default; -$danger: $red !default; -$light: $gray-100 !default; -$dark: $gray-900 !default; +$primary: $blue !default; +$secondary: $gray-600 !default; +$success: $green !default; +$info: $teal !default; +$warning: $yellow !default; +$danger: $red !default; +$light: $gray-100 !default; +$dark: $gray-900 !default; $body-bg: $white; -$min-contrast-ratio: 1.95 !default; +$min-contrast-ratio: 1.95 !default; // Fonts // stylelint-disable-next-line value-keyword-case -$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; +$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", + Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; // Tables -$table-bg-scale: 0 !default; +$table-bg-scale: 0 !default; // Buttons -$btn-font-weight: 700 !default; +$btn-font-weight: 700 !default; // Dropdowns -$dropdown-link-color: rgba(0, 0, 0, .5) !default; +$dropdown-link-color: rgba(0, 0, 0, 0.5) !default; // Navs -$nav-tabs-border-color: $gray-200 !default; -$nav-tabs-link-hover-border-color: $nav-tabs-border-color !default; -$nav-tabs-link-active-color: $gray-900 !default; +$nav-tabs-border-color: $gray-200 !default; +$nav-tabs-link-hover-border-color: $nav-tabs-border-color !default; +$nav-tabs-link-active-color: $gray-900 !default; $nav-tabs-link-active-border-color: $nav-tabs-border-color !default; // Pagination -$pagination-color: $gray-700 !default; -$pagination-bg: $white !default; -$pagination-hover-color: $pagination-color !default; -$pagination-hover-bg: $pagination-bg !default; -$pagination-active-border-color: darken($primary, 5%) !default; -$pagination-disabled-color: $gray-600 !default; -$pagination-disabled-bg: $pagination-bg !default; +$pagination-color: $gray-700 !default; +$pagination-bg: $white !default; +$pagination-hover-color: $pagination-color !default; +$pagination-hover-bg: $pagination-bg !default; +$pagination-active-border-color: darken($primary, 5%) !default; +$pagination-disabled-color: $gray-600 !default; +$pagination-disabled-bg: $pagination-bg !default; // Breadcrumbs -$breadcrumb-padding-y: .375rem !default; -$breadcrumb-padding-x: .75rem !default; -$breadcrumb-bg: $pagination-bg !default; -$breadcrumb-border-radius: .25rem !default; +$breadcrumb-padding-y: 0.375rem !default; +$breadcrumb-padding-x: 0.75rem !default; +$breadcrumb-bg: $pagination-bg !default; +$breadcrumb-border-radius: 0.25rem !default; // Modals -$modal-content-border-color: rgba($black, .1) !default; +$modal-content-border-color: rgba($black, 0.1) !default; // Close -$btn-close-color: $white !default; -$btn-close-opacity: .4 !default; -$btn-close-hover-opacity: 1 !default; - +$btn-close-color: $white !default; +$btn-close-opacity: 0.4 !default; +$btn-close-hover-opacity: 1 !default; // Variables $enum-activities: ( "0": #fff2cc, "1": #be8e00, "2": #a9d08e, - "3": #ff0000, + "3": #f00, "4": #9bc2e6, ); $enum-project-status: ( "0": #950952, - "1": #5E0035, - "2": #30011C, + "1": #5e0035, + "2": #30011c, "3": #020202, "4": #023618, "5": #014941, - "6": #005C69, + "6": #005c69, ); diff --git a/resources/sass/app.scss b/resources/sass/app.scss index 7ea48f7..3ac3244 100644 --- a/resources/sass/app.scss +++ b/resources/sass/app.scss @@ -3,20 +3,12 @@ // Variables @import "variables"; -@import "complement"; -@import "ckEditorContent"; +@import "vendor/complement"; +@import "vendor/ckEditorContent"; +@import "vendor/overloadCrudPolicies"; @import "bootstrap"; -a.col_sort { - &:link, - :visited, - :hover, - :active { - text-decoration: none; - } -} - .container-xxl { max-width: 1340px !important; } @@ -26,23 +18,23 @@ body { background-color: $body-bg; } -#planning { - .sticky-top { - z-index: 1 !important; - } +#planning .sticky-top { + z-index: 1 !important; } // FOOTER body { - position: relative; min-height: calc(100vh); + position: relative; } + #app { padding-bottom: 8.5rem; } + #footer { - position: absolute; bottom: 0; height: 4.5rem; + position: absolute; width: 100%; } diff --git a/resources/sass/bootstrap.scss b/resources/sass/bootstrap.scss index 65aeefa..7310c2f 100644 --- a/resources/sass/bootstrap.scss +++ b/resources/sass/bootstrap.scss @@ -1,23 +1,23 @@ -@import 'variables'; -@import '~bootstrap/scss/bootstrap'; -@import '~sweetalert2/dist/sweetalert2.css'; -@import '~@fortawesome/fontawesome-svg-core/styles.css'; -@import '~glightbox/dist/css/glightbox.css'; -@import 'bootswatch'; +@import "variables"; +@import "~bootstrap/scss/bootstrap"; +@import "~sweetalert2/dist/sweetalert2.css"; +@import "~@fortawesome/fontawesome-svg-core/styles.css"; +@import "~glightbox/dist/css/glightbox.css"; +@import "vendor/bootswatch"; // OVERLOAD BOOTSTRAP -.btn-xs, .btn-group-xs > .btn { - padding: 0.1rem 0.4rem; - font-size: 0.8rem; +.btn-xs, +.btn-group-xs > .btn { border-radius: 0.3rem; + font-size: 0.8rem; + padding: 0.1rem 0.4rem; } - // Tickets Labels -.ticketIndexLabels { - display: -webkit-box; - max-width: 15rem; - -webkit-line-clamp: 2; +.ticket-index-labels { -webkit-box-orient: vertical; + display: box; + -webkit-line-clamp: 2; + max-width: 15rem; overflow: hidden; } diff --git a/resources/sass/vendor/_bootswatch.scss b/resources/sass/vendor/_bootswatch.scss new file mode 100644 index 0000000..760f9a0 --- /dev/null +++ b/resources/sass/vendor/_bootswatch.scss @@ -0,0 +1,324 @@ +// Lumen 5.1.3 +// Bootswatch + +// Variables +@import '../variables'; + +$web-font-path: 'https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap' !default; +@if $web-font-path { + @import url($web-font-path); +} + +// Mixins + +@mixin shadow($width: 4px) { + border-style: solid; + border-width: 0 1px $width 1px; +} + +// Navbar + +.navbar { + @include shadow(); + + @each $color, $value in $theme-colors { + &.bg-#{$color} { + border-color: shade-color($value, 10%); + } + } +} + +// Buttons + +.btn { + @include shadow(); + text-transform: uppercase; + + &:not(.disabled):hover { + border-bottom-width: 3px; + margin-top: 1px; + } + + &:not(.disabled):active { + @include box-shadow(none); + border-bottom-width: 2px; + margin-top: 2px; + } + + @each $color, $value in $theme-colors { + &-#{$color} { + &:hover, + &:active, + &:focus { + background-color: $value; + } + + &, + &:not(.disabled):hover, + &:not(.disabled):active, + &:focus { + border-color: shade-color($value, 10%); + } + } + } +} + +[class*='btn-outline'] { + border-top-width: 1px; +} + +.btn-group-vertical { + .btn + .btn { + &:hover { + border-top-width: 1px; + margin-top: -1px; + } + + &:active { + border-top-width: 2px; + margin-top: -1px; + } + } +} + +// Typography + +.text-secondary { + color: $gray-700 !important; +} + +.blockquote-footer { + color: $gray-600; +} + +// Forms + +.form-control { + box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075); +} + +// Navs + +.nav { + .open > a, + .open > a:hover, + .open > a:focus { + border-color: transparent; + } +} + +.nav-tabs { + .nav-link { + color: $body-color; + + &, + &.disabled, + &.disabled:hover, + &.disabled:focus { + border-color: $nav-tabs-border-color; + margin-top: 6px; + transition: padding-bottom 0.2s ease-in-out, margin-top 0.2s ease-in-out, border-bottom 0.2s ease-in-out; + } + + &:not(.disabled):hover, + &:not(.disabled):focus, + &.active { + border-bottom-color: transparent; + margin-top: 0; + padding-bottom: add(0.5rem, 6px); + } + } + + &.nav-justified > li { + vertical-align: bottom; + } +} + +.dropdown-menu { + @include shadow(); + @include box-shadow(none); + border-top-width: 1px; + margin-top: 0; +} + +.breadcrumb { + @include shadow(); + border-color: shade-color($breadcrumb-bg, 10%); +} + +.pagination { + > li > a, + > li > span { + @include shadow(); + color: $pagination-color; + font-weight: 700; + position: relative; + text-transform: uppercase; + top: 0; + + &:hover, + &:focus { + border-bottom-width: 3px; + text-decoration: none; + top: 1px; + } + + &:active { + border-bottom-width: 2px; + top: 2px; + } + } + + > .disabled > a, + > .disabled > span { + &:hover { + @include shadow(); + top: 0; + } + + &:active { + @include shadow(); + top: 0; + } + } +} + +.pager { + > li > a, + > li > span, + > .disabled > a, + > .disabled > span { + &, + &:hover, + &:active { + border-left-width: 2px; + border-right-width: 2px; + } + } +} + +// Indicators + +.btn-close { + opacity: 0.4; + text-decoration: none; + + &:hover, + &:focus { + opacity: 1; + } +} + +.alert { + @include shadow(); + color: $white; + + &-primary { + background-color: $primary; + border-color: shade-color($primary, 10%); + } + + &-secondary { + background-color: $secondary; + border-color: shade-color($secondary, 10%); + } + + &-success { + background-color: $success; + border-color: shade-color($success, 10%); + } + + &-info { + background-color: $info; + border-color: shade-color($info, 10%); + } + + &-danger { + background-color: $danger; + border-color: shade-color($danger, 10%); + } + + &-warning { + background-color: $warning; + border-color: shade-color($warning, 10%); + } + + &-dark { + background-color: $dark; + border-color: shade-color($dark, 10%); + } + + &-light { + background-color: $light; + border-color: shade-color($light, 10%); + } + + .alert-link { + color: $white; + font-weight: 400; + text-decoration: underline; + } + + &-secondary, + &-light { + &, + a, + .alert-link { + color: $body-color; + } + } +} + +.badge { + &.bg-secondary, + &.bg-light { + color: $dark; + } +} + +// Containers + +a.list-group-item { + &-success { + &.active { + background-color: $success; + } + + &.active:hover, + &.active:focus { + background-color: shade-color($success, 10%); + } + } + + &-warning { + &.active { + background-color: $warning; + } + + &.active:hover, + &.active:focus { + background-color: shade-color($warning, 10%); + } + } + + &-danger { + &.active { + background-color: $danger; + } + + &.active:hover, + &.active:focus { + background-color: shade-color($danger, 10%); + } + } +} + +.modal { + color: #1e2125; + + & .toast { + .btn-close { + background-image: url("data:image/svg+xml,"); + } + } +} diff --git a/resources/sass/_ckEditorContent.scss b/resources/sass/vendor/_ckEditorContent.scss similarity index 94% rename from resources/sass/_ckEditorContent.scss rename to resources/sass/vendor/_ckEditorContent.scss index ad53fee..d9ebd78 100644 --- a/resources/sass/_ckEditorContent.scss +++ b/resources/sass/vendor/_ckEditorContent.scss @@ -30,13 +30,13 @@ /* ckeditor5-block-quote/theme/blockquote.css */ .ck-content blockquote { - overflow: hidden; - padding-right: 1.5em; - padding-left: 1.5em; + border-left: solid 5px hsl(0, 0%, 80%); + font-style: italic; margin-left: 0; margin-right: 0; - font-style: italic; - border-left: solid 5px hsl(0, 0%, 80%); + overflow: hidden; + padding-left: 1.5em; + padding-right: 1.5em; } /* ckeditor5-block-quote/theme/blockquote.css */ .ck-content[dir="rtl"] blockquote { @@ -61,21 +61,21 @@ } /* ckeditor5-highlight/theme/highlight.css */ .ck-content .pen-red { - color: var(--ck-highlight-pen-red); background-color: transparent; + color: var(--ck-highlight-pen-red); } /* ckeditor5-highlight/theme/highlight.css */ .ck-content .pen-green { - color: var(--ck-highlight-pen-green); background-color: transparent; + color: var(--ck-highlight-pen-green); } /* ckeditor5-font/theme/fontsize.css */ .ck-content .text-tiny { - font-size: .7em; + font-size: 0.7em; } /* ckeditor5-font/theme/fontsize.css */ .ck-content .text-small { - font-size: .85em; + font-size: 0.85em; } /* ckeditor5-font/theme/fontsize.css */ .ck-content .text-big { @@ -88,16 +88,16 @@ /* ckeditor5-basic-styles/theme/code.css */ .ck-content code { background-color: hsla(0, 0%, 78%, 0.3); - padding: .15em; border-radius: 2px; + padding: 0.15em; } /* ckeditor5-image/theme/image.css */ .ck-content .image { - display: table; clear: both; - text-align: center; + display: table; margin: 0.9em auto; min-width: 50px; + text-align: center; } /* ckeditor5-image/theme/image.css */ .ck-content .image img { @@ -108,6 +108,7 @@ } /* ckeditor5-image/theme/image.css */ .ck-content .image-inline { + align-items: flex-start; /* * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. @@ -115,7 +116,6 @@ */ display: inline-flex; max-width: 100%; - align-items: flex-start; } /* ckeditor5-image/theme/image.css */ .ck-content .image-inline picture { @@ -130,9 +130,9 @@ } /* ckeditor5-image/theme/imageresize.css */ .ck-content .image.image_resized { - max-width: 100%; - display: block; box-sizing: border-box; + display: block; + max-width: 100%; } /* ckeditor5-image/theme/imageresize.css */ .ck-content .image.image_resized img { @@ -175,8 +175,8 @@ } /* ckeditor5-image/theme/imagestyle.css */ .ck-content .image-style-block-align-right { - margin-right: 0; margin-left: auto; + margin-right: 0; } /* ckeditor5-image/theme/imagestyle.css */ .ck-content .image-style-block-align-left { @@ -192,8 +192,8 @@ /* ckeditor5-image/theme/imagestyle.css */ .ck-content .image-inline.image-style-align-left, .ck-content .image-inline.image-style-align-right { - margin-top: var(--ck-inline-image-style-spacing); margin-bottom: var(--ck-inline-image-style-spacing); + margin-top: var(--ck-inline-image-style-spacing); } /* ckeditor5-image/theme/imagestyle.css */ .ck-content .image-inline.image-style-align-left { @@ -205,14 +205,14 @@ } /* ckeditor5-image/theme/imagecaption.css */ .ck-content .image > figcaption { - display: table-caption; - caption-side: bottom; - word-break: break-word; - color: var(--ck-color-image-caption-text); background-color: var(--ck-color-image-caption-background); - padding: .6em; - font-size: .75em; + caption-side: bottom; + color: var(--ck-color-image-caption-text); + display: table-caption; + font-size: 0.75em; outline-offset: -1px; + padding: 0.6em; + word-break: break-word; } /* ckeditor5-language/theme/language.css */ .ck-content span[lang] { @@ -232,45 +232,45 @@ } /* ckeditor5-list/theme/todolist.css */ .ck-content .todo-list .todo-list__label > input { - -webkit-appearance: none; - display: inline-block; - position: relative; - width: var(--ck-todo-list-checkmark-size); - height: var(--ck-todo-list-checkmark-size); - vertical-align: middle; + appearance: none; border: 0; + display: inline-block; + height: var(--ck-todo-list-checkmark-size); left: -25px; - margin-right: -15px; - right: 0; margin-left: 0; + margin-right: -15px; + position: relative; + right: 0; + vertical-align: middle; + width: var(--ck-todo-list-checkmark-size); } /* ckeditor5-list/theme/todolist.css */ .ck-content .todo-list .todo-list__label > input::before { - display: block; - position: absolute; - box-sizing: border-box; - content: ''; - width: 100%; - height: 100%; border: 1px solid hsl(0, 0%, 20%); border-radius: 2px; + box-sizing: border-box; + content: ""; + display: block; + height: 100%; + position: absolute; transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border; + width: 100%; } /* ckeditor5-list/theme/todolist.css */ .ck-content .todo-list .todo-list__label > input::after { - display: block; - position: absolute; - box-sizing: content-box; - pointer-events: none; - content: ''; - left: calc( var(--ck-todo-list-checkmark-size) / 3 ); - top: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - width: calc( var(--ck-todo-list-checkmark-size) / 5.3 ); - height: calc( var(--ck-todo-list-checkmark-size) / 2.6 ); - border-style: solid; border-color: transparent; - border-width: 0 calc( var(--ck-todo-list-checkmark-size) / 8 ) calc( var(--ck-todo-list-checkmark-size) / 8 ) 0; + border-style: solid; + border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0; + box-sizing: content-box; + content: ""; + display: block; + height: calc(var(--ck-todo-list-checkmark-size) / 2.6); + left: calc(var(--ck-todo-list-checkmark-size) / 3); + pointer-events: none; + position: absolute; + top: calc(var(--ck-todo-list-checkmark-size) / 5.3); transform: rotate(45deg); + width: calc(var(--ck-todo-list-checkmark-size) / 5.3); } /* ckeditor5-list/theme/todolist.css */ .ck-content .todo-list .todo-list__label > input[checked]::before { @@ -287,83 +287,83 @@ } /* ckeditor5-page-break/theme/pagebreak.css */ .ck-content .page-break { - position: relative; - clear: both; - padding: 5px 0; - display: flex; align-items: center; + clear: both; + display: flex; justify-content: center; + padding: 5px 0; + position: relative; } /* ckeditor5-page-break/theme/pagebreak.css */ .ck-content .page-break::after { - content: ''; - position: absolute; border-bottom: 2px dashed hsl(0, 0%, 77%); + content: ""; + position: absolute; width: 100%; } /* ckeditor5-page-break/theme/pagebreak.css */ .ck-content .page-break__label { - position: relative; - z-index: 1; - padding: .3em .6em; - display: block; - text-transform: uppercase; + background: hsl(0, 0%, 100%); border: 1px solid hsl(0, 0%, 77%); border-radius: 2px; + box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); + color: hsl(0, 0%, 20%); + display: block; font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; font-size: 0.75em; font-weight: bold; - color: hsl(0, 0%, 20%); - background: hsl(0, 0%, 100%); - box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; + padding: 0.3em 0.6em; + position: relative; + text-transform: uppercase; user-select: none; + user-select: none; + user-select: none; + user-select: none; + z-index: 1; } /* ckeditor5-table/theme/tablecaption.css */ .ck-content .table > figcaption { - display: table-caption; - caption-side: top; - word-break: break-word; - text-align: center; - color: var(--ck-color-table-caption-text); background-color: var(--ck-color-table-caption-background); - padding: .6em; - font-size: .75em; + caption-side: top; + color: var(--ck-color-table-caption-text); + display: table-caption; + font-size: 0.75em; outline-offset: -1px; + padding: 0.6em; + text-align: center; + word-break: break-word; } /* ckeditor5-media-embed/theme/mediaembed.css */ .ck-content .media { clear: both; - margin: 0.9em 0; display: block; + margin: 0.9em 0; min-width: 15em; } /* ckeditor5-table/theme/table.css */ .ck-content .table { - margin: 0.9em auto; display: table; + margin: 0.9em auto; } /* ckeditor5-table/theme/table.css */ .ck-content .table table { + border: 1px double hsl(0, 0%, 70%); border-collapse: collapse; border-spacing: 0; - width: 100%; height: 100%; - border: 1px double hsl(0, 0%, 70%); + width: 100%; } /* ckeditor5-table/theme/table.css */ .ck-content .table table td, .ck-content .table table th { - min-width: 2em; - padding: .4em; border: 1px solid hsl(0, 0%, 75%); + min-width: 2em; + padding: 0.4em; } /* ckeditor5-table/theme/table.css */ .ck-content .table table th { - font-weight: bold; background: hsla(0, 0%, 0%, 5%); + font-weight: bold; } /* ckeditor5-table/theme/table.css */ .ck-content[dir="rtl"] .table th { @@ -375,30 +375,30 @@ } /* ckeditor5-horizontal-line/theme/horizontalline.css */ .ck-content hr { - margin: 15px 0; - height: 4px; background: hsl(0, 0%, 87%); border: 0; + height: 4px; + margin: 15px 0; } /* ckeditor5-code-block/theme/codeblock.css */ .ck-content pre { - padding: 1em; - color: hsl(0, 0%, 20.8%); background: hsla(0, 0%, 78%, 0.3); border: 1px solid hsl(0, 0%, 77%); border-radius: 2px; - text-align: left; + color: hsl(0, 0%, 20.8%); direction: ltr; - tab-size: 4; - white-space: pre-wrap; font-style: normal; min-width: 200px; + padding: 1em; + tab-size: 4; + text-align: left; + white-space: pre-wrap; } /* ckeditor5-code-block/theme/codeblock.css */ .ck-content pre code { background: unset; - padding: 0; border-radius: 0; + padding: 0; } /* ckeditor5-mention/theme/mention.css */ .ck-content .mention { @@ -415,4 +415,3 @@ display: none; } } - diff --git a/resources/sass/vendor/_complement.scss b/resources/sass/vendor/_complement.scss new file mode 100644 index 0000000..17bc6cb --- /dev/null +++ b/resources/sass/vendor/_complement.scss @@ -0,0 +1,244 @@ +// @function strip-unit($value) +// @param {number with unit} $value +@function strip-unit($value) { + @return ($value / ($value * 0 + 1)); +} + +// @function pow($base, $exponents) +// Helper: Raise a number the power of another number +// Adapted from: https://gist.github.com/hail2u/1964056 +// +// @param {number} $base — The base number +// @param {number} $exponents — The exponent to which to raise $base +@function pow($base, $exponents) { + $raised: 1; + @for $i from 1 through $exponents { + $raised: $raised * $base; + } + @return $raised; +} + +// @function luminance($color) +// Helper: Calculate Luminance of a single color +// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 +// White luminance is 1, Black luminance is 0 +// To be used in other functions or mixins — creates non-standard CSS output: +// Usage: +// .sample { luminance: luminance(#c00); } +// Output: +// .sample { luminance: 0.1283736922; } +// +@function luminance($color) { + // Thanks voxpelli for a very concise implementation of luminance measure in sass + // Adapted from: https://gist.github.com/voxpelli/6304812 + $rgba: red($color), green($color), blue($color); + $rgba2: (); + @for $i from 1 through 3 { + $rgb: nth($rgba, $i); + $rgb: calc($rgb / 255); + $rgb: if($rgb < 0.03928, calc($rgb / 12.92), pow(calc(($rgb + 0.055) / 1.055), 2)); + $rgba2: append($rgba2, $rgb); + } + @return (0.2126 * nth($rgba2, 1) + 0.7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3)) * 100; +} + +// @function contrast-ratio($fg, $bg) +// Helper: Calculate "readability" as defined by WCAG 2.1 +// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js +// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef +// To be used in other functions or mixins — creates non-standard CSS output: +// Usage: +// .sample { color-contrast: contrast-ratio(#c00, #fff); } +// Output: +// .sample { color-contrast: 5.89; } +// +@function contrast-ratio($fg, $bg) { + $luminance1: luminance($fg) + 0.05; + $luminance2: luminance($bg) + 0.05; + $ratio: calc($luminance1 / $luminance2); + @if $luminance2 > $luminance1 { + $ratio: calc(1 / $ratio); + } + // Round to a hundreth because 6.96 should not pass a ratio of 7.0 + $ratio: calc(round($ratio * 100) / 100); + @return $ratio; +} + +// @function validate-font-size($size) +// Helper: Depending on the unit recalculate a font size value into pixels if possible +// To be used in other functions or mixins — creates non-standard CSS output: +// Usage: +// .sample { validate-font-size: validate-font-size(1em); } +// Output: +// .sample { validate-font-size: 16; } +// +@function validate-font-size($size) { + @if unit($size) == "em" or unit($size) == "rem" or unit($size) == "px" or unit($size) == "" { + // Check if a flexible unit + @if unit($size) == "em" or unit($size) == "rem" { + // Need to convert to a pixel value. Let's not overcomplicate it with possible EM inheritence scale factors + @return strip-unit($size * 16); + } + @if unit($size) == "px" { + // We expect PX, so strip the value and return it + @return strip-unit($size); + } + @if unit($size) == "" { + @return $size; + } + } @else { + @error "validate-font-size(): An unexpected font size unit was supplied."; + } +} + +// @function get-ratio($level: 'AA', $size: 16, $bold: false) +// Helper: Determine the correct ratio value to use based on font-size and WCAG Level +// To be used in other functions or mixins — creates non-standard CSS output: +// Usage: +// .sample { get-ratio: get-ratio('AAA', 19, true); } +// Output: +// .sample { get-ratio: 4.5; } +// +@function get-ratio($level: "AA", $size: 16, $bold: false) { + // Default ratio + $ratio: 4.5; + @if $level == "AAA" { + $ratio: 7; + } + + // Make sure the size is valid. If the value is not EM, REM, or PX (preferred), we can't help + $size: validate-font-size($size); + + // Check font size + @if $size < 24 { + // Small text, use defaults + // But: + @if $size >= 19 and $bold == true { + // Special case: Small text but also bold + @if $level == "AAA" { + $ratio: 4.5; + } @else { + $ratio: 3; + } + } + } @else { + // Larger than 24 + $ratio: 3; + @if $level == "AAA" { + $ratio: 4.5; + } + } + @return $ratio; +} + +// @function light-or-dark($color) +// Helper: Use contrast against white or black to determine if a color is "light" or "dark" +// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 +// To be used in other functions or mixins — creates non-standard CSS output: +// Usage: +// .sample { light-or-dark: light-or-dark(#c00); } +// Output: +// .sample { light-or-dark: "light"; } +// +@function light-or-dark($color) { + $light-contrast: contrast-ratio($color, $white); + $dark-contrast: contrast-ratio($color, $black); + + @if $light-contrast > $dark-contrast { + // Contrast against white is higher than against black, so, this is a dark color + @return "dark"; + } @else { + @return "light"; + } +} + +// @function color-contrast($color) +// Helper: Returns black or white compared to a color, whichever produces the highest contrast +// Usage: +// .sample { +// background-color: #c00; +// color: color-contrast(#c00); +// } +// Output: +// .sample { +// background-color: #c00; +// color: #fff; +// } +// +// Named for the forthcoming CSS Module 5 spec function color-contrast(); +// See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-contrast() +// +@function color-contrast($color) { + $color-lod: light-or-dark($color); + + @if ($color-lod == "dark") { + @return $white; + } @else { + @return $black; + } +} + +// @function a11y-color($fg, $bg, $level: 'AA', $size: 16, $bold: false) +// Goal: Return a color that passes for the chosen WCAG level without changing the Hue of the color +// Usage: +// .sample { +// background-color: #000; +// color: a11y-color(#c0c, #000); +// } +// Output: +// .sample { +// background-color: #000; +// color: #d200d2; +// } +// +@function a11y-color($fg, $bg, $level: "AA", $size: 16, $bold: false) { + // Helper: make sure the font size value is acceptable + $font-size: validate-font-size($size); + // Helper: With the level, font size, and bold boolean, return the proper target ratio. 3.0, 4.5, or 7.0 expected + $ratio: get-ratio($level, $font-size, $bold); + // Calculate the first contrast ratio of the given pair + $original-contrast: contrast-ratio($fg, $bg); + + @if $original-contrast >= $ratio { + // If we pass the ratio already, return the original color + @return $fg; + } @else { + // Doesn't pass. Time to get to work + // Should the color be lightened or darkened? + $fg-lod: light-or-dark($fg); + $bg-lod: light-or-dark($bg); + + // Set a "step" value to lighten or darken a color + // Note: Higher percentage steps means faster compile time, but we might overstep the required threshold too far with something higher than 4% + $step: 1%; + + // Run through some cases where we want to darken, or use a negative step value + @if $fg-lod == "light" and $bg-lod == "light" { + // Both are light colors, darken the fg + $step: -$step; + } @else if $fg-lod == "dark" and $bg-lod == "light" { + // bg is light, fg is dark but does not pass, darken more + $step: -$step; + } + // Keeping the rest of the logic here, but our default values do not change, so this logic is not needed + //@else if $fg-lod == 'light' and $bg-lod == 'dark' { + // // bg is dark, fg is light but does not pass, lighten further + // $step: $step; + //} @else if $fg-lod == 'dark' and $bg-lod == 'dark' { + // // Both are dark, so lighten the fg + // $step: $step; + //} + + // The magic happens here + // Loop through with a @while statement until the color combination passes our required ratio. Scale the color by our step value until the expression is false + // This might loop 100 times or more depending on the colors + @while contrast-ratio($fg, $bg) < $ratio { + $sat-step: 0%; + @if saturation($fg) > 10 { + $sat-step: $step; + } + $fg: scale-color($fg, $lightness: $step, $saturation: $sat-step); + } + @return $fg; + } +} diff --git a/resources/sass/vendor/_overloadCrudPolicies.scss b/resources/sass/vendor/_overloadCrudPolicies.scss new file mode 100644 index 0000000..593365f --- /dev/null +++ b/resources/sass/vendor/_overloadCrudPolicies.scss @@ -0,0 +1,8 @@ +a.col_sort { + &:link, + :visited, + :hover, + :active { + text-decoration: none; + } +} diff --git a/resources/ts/components/MacroPlanningComponent.vue b/resources/ts/components/MacroPlanningComponent.vue index 28d7a90..3595bf6 100644 --- a/resources/ts/components/MacroPlanningComponent.vue +++ b/resources/ts/components/MacroPlanningComponent.vue @@ -1068,7 +1068,7 @@ export default defineComponent({