From 9f2a8d8431ca3c836e0d1d7eb8bf84ac6dcdab2c Mon Sep 17 00:00:00 2001 From: Ivan <8611739+IRBorisov@users.noreply.github.com> Date: Wed, 19 Mar 2025 15:12:02 +0300 Subject: [PATCH] F: Add StyleLint tooling and fix some CSS issues --- .vscode/settings.json | 1 + README.md | 4 + rsconcept/frontend/.stylelintrc.json | 22 + rsconcept/frontend/package-lock.json | 858 ++++++++++++++++++ rsconcept/frontend/package.json | 6 +- rsconcept/frontend/src/index.css | 4 +- rsconcept/frontend/src/styling/components.css | 12 +- rsconcept/frontend/src/styling/constants.css | 136 +-- rsconcept/frontend/src/styling/overrides.css | 18 +- rsconcept/frontend/src/styling/setup.css | 14 +- rsconcept/frontend/src/styling/utilities.css | 48 +- 11 files changed, 999 insertions(+), 124 deletions(-) create mode 100644 rsconcept/frontend/.stylelintrc.json diff --git a/.vscode/settings.json b/.vscode/settings.json index da3aaabd..2f1b2b94 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,6 +21,7 @@ "changeProcessCWD": true } ], + "stylelint.enable": true, "autopep8.args": [ "--max-line-length", "120", diff --git a/README.md b/README.md index 1487e40d..c7e47e04 100644 --- a/README.md +++ b/README.md @@ -71,6 +71,10 @@ This readme file is used mostly to document project dependencies and conventions - vite - jest - ts-jest + - stylelint + - stylelint-config-recommended + - stylelint-config-standard + - stylelint-config-tailwindcss - @vitejs/plugin-react - @types/jest - @lezer/generator diff --git a/rsconcept/frontend/.stylelintrc.json b/rsconcept/frontend/.stylelintrc.json new file mode 100644 index 00000000..b62567a7 --- /dev/null +++ b/rsconcept/frontend/.stylelintrc.json @@ -0,0 +1,22 @@ +{ + "extends": ["stylelint-config-recommended", "stylelint-config-standard", "stylelint-config-tailwindcss"], + "rules": { + "color-no-invalid-hex": true, + "font-family-no-missing-generic-family-keyword": true, + "unit-no-unknown": true, + "block-no-empty": true, + "selector-pseudo-element-no-unknown": true, + "property-no-unknown": true, + "declaration-block-no-duplicate-properties": true, + "no-duplicate-selectors": true, + "no-empty-source": true, + + "import-notation": null, + "at-rule-empty-line-before": null, + "declaration-empty-line-before": null, + "at-rule-no-unknown": null, + "comment-no-empty": null, + "comment-empty-line-before": null, + "custom-property-empty-line-before": null + } +} diff --git a/rsconcept/frontend/package-lock.json b/rsconcept/frontend/package-lock.json index 353a7df3..359cb158 100644 --- a/rsconcept/frontend/package-lock.json +++ b/rsconcept/frontend/package-lock.json @@ -60,6 +60,10 @@ "eslint-plugin-simple-import-sort": "^12.1.1", "globals": "^16.0.0", "jest": "^29.7.0", + "stylelint": "^16.16.0", + "stylelint-config-recommended": "^15.0.0", + "stylelint-config-standard": "^37.0.0", + "stylelint-config-tailwindcss": "^1.0.0", "tailwindcss": "^4.0.7", "ts-jest": "^29.2.6", "typescript": "^5.8.2", @@ -857,6 +861,96 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, "node_modules/@dagrejs/dagre": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@dagrejs/dagre/-/dagre-1.1.4.tgz", @@ -875,6 +969,17 @@ "node": ">17.0.0" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.13.5", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", @@ -2222,6 +2327,16 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@keyv/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3" + } + }, "node_modules/@lezer/common": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", @@ -4187,6 +4302,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", @@ -4307,6 +4432,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", @@ -4515,6 +4650,27 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/bippy": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/bippy/-/bippy-0.3.8.tgz", @@ -4605,6 +4761,31 @@ "node-int64": "^0.4.0" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -4612,6 +4793,27 @@ "dev": true, "license": "MIT" }, + "node_modules/cacheable": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.9.tgz", + "integrity": "sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.7.1", + "keyv": "^5.3.1" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.2.tgz", + "integrity": "sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.0.3" + } + }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -4839,6 +5041,13 @@ "dev": true, "license": "MIT" }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -4941,6 +5150,43 @@ "node": ">= 8" } }, + "node_modules/css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", @@ -5236,6 +5482,19 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -5334,6 +5593,16 @@ "node": ">=10.13.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6208,6 +6477,33 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", @@ -6611,6 +6907,47 @@ "process": "^0.11.10" } }, + "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, + "license": "MIT", + "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, + "license": "MIT", + "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, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/globals": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/globals/-/globals-16.0.0.tgz", @@ -6641,6 +6978,34 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "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/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -6790,6 +7155,13 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, + "node_modules/hookified": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.8.1.tgz", + "integrity": "sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==", + "dev": true, + "license": "MIT" + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -6797,6 +7169,19 @@ "dev": true, "license": "MIT" }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6807,6 +7192,27 @@ "node": ">=10.17.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -6882,6 +7288,13 @@ "dev": true, "license": "ISC" }, + "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, + "license": "ISC" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -7167,6 +7580,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -8166,6 +8589,16 @@ "json-buffer": "3.0.1" } }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -8176,6 +8609,13 @@ "node": ">=6" } }, + "node_modules/known-css-properties": { + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz", + "integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==", + "dev": true, + "license": "MIT" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -8475,6 +8915,13 @@ "dev": true, "license": "MIT" }, + "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, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -8538,12 +8985,43 @@ "node": ">= 0.4" } }, + "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, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "license": "MIT" }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -9199,6 +9677,61 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, "node_modules/preact": { "version": "10.26.4", "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.4.tgz", @@ -9720,6 +10253,16 @@ "node": ">=0.10.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -10116,6 +10659,24 @@ "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, + "license": "MIT", + "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/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10356,6 +10917,232 @@ "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", "license": "MIT" }, + "node_modules/stylelint": { + "version": "16.16.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.16.0.tgz", + "integrity": "sha512-40X5UOb/0CEFnZVEHyN260HlSSUxPES+arrUphOumGWgXERHfwCD0kNBVILgQSij8iliYVwlc0V7M5bcLP9vPg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.0.7", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.3", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.35.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-15.0.0.tgz", + "integrity": "sha512-9LejMFsat7L+NXttdHdTq94byn25TD+82bzGRiV1Pgasl99pWnwipXS5DguTpp3nP1XjvLXVnEJIuYBfsRjRkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.13.0" + } + }, + "node_modules/stylelint-config-standard": { + "version": "37.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-37.0.0.tgz", + "integrity": "sha512-+6eBlbSTrOn/il2RlV0zYGQwRTkr+WtzuVSs1reaWGObxnxLpbcspCUYajVQHonVfxVw2U+h42azGhrBvcg8OA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^15.0.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.13.0" + } + }, + "node_modules/stylelint-config-tailwindcss": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-tailwindcss/-/stylelint-config-tailwindcss-1.0.0.tgz", + "integrity": "sha512-e6WUBJeLdOZ0sy8FZ1jk5Zy9iNGqqJbrMwnnV0Hpaw/yin6QO3gVv/zvyqSty8Yg6nEB5gqcyJbN387TPhEa7Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "stylelint": ">=13.13.1", + "tailwindcss": ">=2.2.16" + } + }, + "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, + "license": "MIT" + }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.0.7.tgz", + "integrity": "sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^6.1.7" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.7.tgz", + "integrity": "sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==", + "dev": true, + "license": "MIT", + "dependencies": { + "cacheable": "^1.8.9", + "flatted": "^3.3.3", + "hookified": "^1.7.1" + } + }, + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", + "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/stylelint/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylelint/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", @@ -10375,6 +11162,23 @@ "node": ">=8" } }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, "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", @@ -10387,6 +11191,53 @@ "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/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "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.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/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, + "license": "MIT" + }, "node_modules/tailwindcss": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.14.tgz", @@ -11298,6 +12149,13 @@ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, "node_modules/v8-to-istanbul": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", diff --git a/rsconcept/frontend/package.json b/rsconcept/frontend/package.json index a9de90ed..c5d74108 100644 --- a/rsconcept/frontend/package.json +++ b/rsconcept/frontend/package.json @@ -9,7 +9,7 @@ "test:e2e": "playwright test", "dev": "vite --host", "build": "tsc && vite build", - "lint": "eslint . --report-unused-disable-directives --max-warnings 0", + "lint": "stylelint \"src/**/*.css\" && eslint . --report-unused-disable-directives --max-warnings 0", "lintFix": "eslint . --report-unused-disable-directives --max-warnings 0 --fix", "preview": "vite preview --port 3000" }, @@ -66,6 +66,10 @@ "eslint-plugin-simple-import-sort": "^12.1.1", "globals": "^16.0.0", "jest": "^29.7.0", + "stylelint": "^16.16.0", + "stylelint-config-recommended": "^15.0.0", + "stylelint-config-standard": "^37.0.0", + "stylelint-config-tailwindcss": "^1.0.0", "tailwindcss": "^4.0.7", "ts-jest": "^29.2.6", "typescript": "^5.8.2", diff --git a/rsconcept/frontend/src/index.css b/rsconcept/frontend/src/index.css index b3e57d44..0ef1fb9d 100644 --- a/rsconcept/frontend/src/index.css +++ b/rsconcept/frontend/src/index.css @@ -8,9 +8,9 @@ @custom-variant dark (&:is(.dark *)); @theme { + /* stylelint-disable-next-line custom-property-pattern */ --color-*: initial; --color-transparent: transparent; - --color-current: currentColor; --color-inherit: inherit; --color-prim-0: var(--clr-prim-0); @@ -35,6 +35,7 @@ --color-ok-600: var(--clr-ok-600); + /* stylelint-disable-next-line custom-property-pattern */ --z-index-*: initial; --z-index-bottom: 0; --z-index-topmost: 99; @@ -44,6 +45,7 @@ --z-index-navigation: 50; --z-index-modal: 60; + /* stylelint-disable-next-line custom-property-pattern */ --breakpoint-*: initial; --breakpoint-xs: 475px; --breakpoint-sm: 640px; diff --git a/rsconcept/frontend/src/styling/components.css b/rsconcept/frontend/src/styling/components.css index ded04daf..f5837865 100644 --- a/rsconcept/frontend/src/styling/components.css +++ b/rsconcept/frontend/src/styling/components.css @@ -49,11 +49,12 @@ padding: 0.5rem; font-size: var(--text-xs); + + /* stylelint-disable-next-line custom-property-pattern */ line-height: var(--tw-leading, var(--text-xs--line-height)); font-weight: 500; white-space: nowrap; - -webkit-user-select: none; user-select: none; } @@ -140,14 +141,13 @@ } @utility cc-view-hidden-item { - outline-width: 0px; + outline-width: 0; outline-color: transparent; &.selected { - outline-width: 2px; - outline-color: var(--clr-prim-999); - outline-style: solid; + outline: 2px solid var(--clr-prim-999); } + &.inherited { outline-style: dashed; } @@ -184,7 +184,7 @@ clip-path: inset(0% 0% 0% 0%); height: 4.5rem; margin-top: 0.75rem; - padding: 0.25rem 0.5rem 0.25rem 0.5rem; + padding: 0.25rem 0.5rem; } } diff --git a/rsconcept/frontend/src/styling/constants.css b/rsconcept/frontend/src/styling/constants.css index 20f79b4a..d01b44a5 100644 --- a/rsconcept/frontend/src/styling/constants.css +++ b/rsconcept/frontend/src/styling/constants.css @@ -20,93 +20,93 @@ /* Light Theme */ /* prettier-ignore */ :not(.dark):root { - --clr-prim-0: hsl(000, 000%, 100%); - --clr-prim-100: hsl(000, 000%, 098%); - --clr-prim-200: hsl(000, 000%, 094%); - --clr-prim-300: hsl(000, 000%, 091%); - --clr-prim-400: hsl(000, 000%, 080%); - --clr-prim-600: hsl(000, 000%, 065%); - --clr-prim-800: hsl(000, 000%, 047%); - --clr-prim-999: hsl(000, 000%, 000%); + --clr-prim-0: hsl(000deg 000% 100%); + --clr-prim-100: hsl(000deg 000% 098%); + --clr-prim-200: hsl(000deg 000% 094%); + --clr-prim-300: hsl(000deg 000% 091%); + --clr-prim-400: hsl(000deg 000% 080%); + --clr-prim-600: hsl(000deg 000% 065%); + --clr-prim-800: hsl(000deg 000% 047%); + --clr-prim-999: hsl(000deg 000% 000%); - --clr-sec-0: hsl(000, 000%, 100%); - --clr-sec-100: hsl(190, 080%, 094%); - --clr-sec-200: hsl(220, 080%, 092%); - --clr-sec-300: hsl(220, 100%, 080%); - --clr-sec-400: hsl(220, 100%, 070%); - --clr-sec-600: hsl(220, 100%, 060%); - --clr-sec-800: hsl(220, 100%, 050%); + --clr-sec-0: hsl(000deg 000% 100%); + --clr-sec-100: hsl(190deg 080% 094%); + --clr-sec-200: hsl(220deg 080% 092%); + --clr-sec-300: hsl(220deg 100%080%); + --clr-sec-400: hsl(220deg 100% 070%); + --clr-sec-600: hsl(220deg 100% 060%); + --clr-sec-800: hsl(220deg 100% 050%); - --clr-warn-100: hsl(000, 100%, 095%); - --clr-warn-600: hsl(000, 072%, 051%); + --clr-warn-100: hsl(000deg 100% 095%); + --clr-warn-600: hsl(000deg 072% 051%); - --clr-ok-600: hsl(120, 080%, 37%); + --clr-ok-600: hsl(120deg 080% 37%); - --clr-select-node: hsl(162, 082%, 051%); + --clr-select-node: hsl(162deg 082% 051%); /* Highlight accents */ - --acc-bg-red: hsl(000, 100%, 089%); - --acc-bg-green: hsl(100, 100%, 075%); - --acc-bg-blue: hsl(235, 080%, 087%); - --acc-bg-purple: hsl(274, 089%, 081%); - --acc-bg-teal: hsl(192, 089%, 081%); - --acc-bg-orange: hsl(028, 100%, 075%); + --acc-bg-red: hsl(000deg 100% 089%); + --acc-bg-green: hsl(100deg 100% 075%); + --acc-bg-blue: hsl(235deg 080% 087%); + --acc-bg-purple: hsl(274deg 089% 081%); + --acc-bg-teal: hsl(192deg 089% 081%); + --acc-bg-orange: hsl(028deg 100% 075%); - --acc-bg-green25: hsl(100, 100%, 096%); - --acc-bg-green50: hsl(100, 100%, 090%); - --acc-bg-orange50: hsl(028, 100%, 090%); + --acc-bg-green25: hsl(100deg 100% 096%); + --acc-bg-green50: hsl(100deg 100% 090%); + --acc-bg-orange50: hsl(028deg 100% 090%); - --acc-fg-red: hsl(000, 090%, 045%); - --acc-fg-green: hsl(100, 090%, 035%); - --acc-fg-blue: hsl(235, 100%, 050%); - --acc-fg-purple: hsl(270, 100%, 055%); - --acc-fg-teal: hsl(200, 080%, 050%); - --acc-fg-orange: hsl(028, 100%, 050%); + --acc-fg-red: hsl(000deg 090% 045%); + --acc-fg-green: hsl(100deg 090% 035%); + --acc-fg-blue: hsl(235deg 100% 050%); + --acc-fg-purple: hsl(270deg 100% 055%); + --acc-fg-teal: hsl(200deg 080% 050%); + --acc-fg-orange: hsl(028deg 100% 050%); } /* Dark Theme */ /* prettier-ignore */ .dark:root { - --clr-prim-0: hsl(000, 000%, 005%); - --clr-prim-100: hsl(000, 000%, 009%); - --clr-prim-200: hsl(000, 000%, 015%); - --clr-prim-300: hsl(000, 000%, 022%); - --clr-prim-400: hsl(000, 000%, 035%); - --clr-prim-600: hsl(000, 000%, 055%); - --clr-prim-800: hsl(000, 000%, 080%); - --clr-prim-999: hsl(000, 000%, 093%); + --clr-prim-0: hsl(000deg 000% 005%); + --clr-prim-100: hsl(000deg 000% 009%); + --clr-prim-200: hsl(000deg 000% 015%); + --clr-prim-300: hsl(000deg 000% 022%); + --clr-prim-400: hsl(000deg 000% 035%); + --clr-prim-600: hsl(000deg 000% 055%); + --clr-prim-800: hsl(000deg 000% 080%); + --clr-prim-999: hsl(000deg 000% 093%); - --clr-sec-800: hsl(267, 070%, 070%); - --clr-sec-600: hsl(267, 050%, 060%); - --clr-sec-400: hsl(267, 050%, 050%); - --clr-sec-300: hsl(267, 050%, 040%); - --clr-sec-200: hsl(267, 050%, 032%); - --clr-sec-100: hsl(269, 030%, 028%); - --clr-sec-0: hsl(000, 000%, 100%); + --clr-sec-800: hsl(267deg 070% 070%); + --clr-sec-600: hsl(267deg 050% 060%); + --clr-sec-400: hsl(267deg 050% 050%); + --clr-sec-300: hsl(267deg 050% 040%); + --clr-sec-200: hsl(267deg 050% 032%); + --clr-sec-100: hsl(269deg 030% 028%); + --clr-sec-0: hsl(000deg 000% 100%); - --clr-warn-100: hsl(000, 100%, 015%); - --clr-warn-600: hsl(000, 080%, 055%); + --clr-warn-100: hsl(000deg 100% 015%); + --clr-warn-600: hsl(000deg 080% 055%); - --clr-ok-600: hsl(120, 080%, 042%); + --clr-ok-600: hsl(120deg 080% 042%); - --clr-select-node: hsl(162, 082%, 041%); + --clr-select-node: hsl(162deg 082% 041%); /* Highlight accents */ - --acc-bg-red: hsl(000, 080%, 037%); - --acc-bg-green: hsl(100, 080%, 025%); - --acc-bg-blue: hsl(235, 054%, 049%); - --acc-bg-purple: hsl(270, 080%, 050%); - --acc-bg-teal: hsl(192, 080%, 030%); - --acc-bg-orange: hsl(035, 100%, 035%); + --acc-bg-red: hsl(000deg 080% 037%); + --acc-bg-green: hsl(100deg 080% 025%); + --acc-bg-blue: hsl(235deg 054% 049%); + --acc-bg-purple: hsl(270deg 080% 050%); + --acc-bg-teal: hsl(192deg 080% 030%); + --acc-bg-orange: hsl(035deg 100% 035%); - --acc-bg-green25: hsl(100, 080%, 009%); - --acc-bg-green50: hsl(100, 080%, 017%); - --acc-bg-orange50: hsl(035, 100%, 016%); + --acc-bg-green25: hsl(100deg 080% 009%); + --acc-bg-green50: hsl(100deg 080% 017%); + --acc-bg-orange50: hsl(035deg 100% 016%); - --acc-fg-red: hsl(000, 080%, 045%); - --acc-fg-green: hsl(100, 080%, 035%); - --acc-fg-blue: hsl(235, 100%, 080%); - --acc-fg-purple: hsl(270, 100%, 080%); - --acc-fg-teal: hsl(192, 100%, 045%); - --acc-fg-orange: hsl(035, 100%, 050%); + --acc-fg-red: hsl(000deg 080% 045%); + --acc-fg-green: hsl(100deg 080% 035%); + --acc-fg-blue: hsl(235deg 100% 080%); + --acc-fg-purple: hsl(270deg 100% 080%); + --acc-fg-teal: hsl(192deg 100% 045%); + --acc-fg-orange: hsl(035deg 100% 050%); } diff --git a/rsconcept/frontend/src/styling/overrides.css b/rsconcept/frontend/src/styling/overrides.css index d0e89663..cb64dcc1 100644 --- a/rsconcept/frontend/src/styling/overrides.css +++ b/rsconcept/frontend/src/styling/overrides.css @@ -1,9 +1,11 @@ /** - * Module: Override imported components CSS styling. - */ +* Module: Override imported components CSS styling. +*/ @import './constants.css'; @import './imports.css'; +/* stylelint-disable selector-class-pattern */ + :root { /* Import overrides */ --toastify-color-dark: var(--clr-prim-300); @@ -37,23 +39,18 @@ border-width: 1px; border-radius: 0.25rem; - padding-left: 0.375rem; - padding-right: 0.375rem; - padding-top: 0.15rem; - padding-bottom: 0.15rem; + padding: 0.15rem 0.375rem; } + .cm-editor.cm-focused { border-color: var(--clr-prim-400); - outline-color: var(--clr-sec-600); - outline-style: solid; - outline-width: 2px; + outline: 2px solid var(--clr-sec-600); } .cm-editor .cm-placeholder { font-family: var(--font-main); color: var(--clr-prim-600); user-select: none; - -webkit-user-select: none; } .react-flow__handle { @@ -89,7 +86,6 @@ font-size: 14px; border: 1px solid; - background-color: var(--clr-prim-0); color: var(--clr-prim-999); border-color: var(--clr-prim-400); background-color: var(--clr-prim-0); diff --git a/rsconcept/frontend/src/styling/setup.css b/rsconcept/frontend/src/styling/setup.css index 95262111..5d58b854 100644 --- a/rsconcept/frontend/src/styling/setup.css +++ b/rsconcept/frontend/src/styling/setup.css @@ -33,11 +33,10 @@ ::backdrop, ::file-selector-button { border-color: var(--clr-prim-400); + accent-color: var(--clr-sec-600); } html { - -webkit-text-size-adjust: none; - -moz-text-size-adjust: none; text-size-adjust: none; hanging-punctuation: first last; @@ -47,8 +46,8 @@ } body { - margin: 0px; - padding: 0px; + margin: 0; + padding: 0; overflow-x: hidden; } @@ -80,7 +79,7 @@ background-color: var(--clr-prim-100); } - @media only screen and (max-width: 639px) { + @media only screen and (width <= 639px) { :root { font-size: var(--font-size-sm); } @@ -89,9 +88,7 @@ :focus, :focus-visible, :focus-within { - outline-width: 2px; - outline-style: solid; - outline-color: transparent; + outline: 2px solid transparent; } ::placeholder { @@ -135,6 +132,7 @@ :not([role='manuals']) & { margin-top: 0.5rem; } + [role='manuals'] & { margin-top: 0.75rem; margin-bottom: 0.5rem; diff --git a/rsconcept/frontend/src/styling/utilities.css b/rsconcept/frontend/src/styling/utilities.css index d13e2d73..1ef2eaae 100644 --- a/rsconcept/frontend/src/styling/utilities.css +++ b/rsconcept/frontend/src/styling/utilities.css @@ -1,5 +1,5 @@ /** - * Module: Utility classes for stlye features. + * Module: Utility classes for style features. */ @utility font-main { @@ -17,6 +17,7 @@ @utility clr-input { background-color: var(--clr-prim-0); + &:disabled { background-color: var(--clr-prim-100); } @@ -51,30 +52,28 @@ background-color: var(--clr-prim-200); } - &:hover:not(:disabled), - &:focus-visible { - color: var(--clr-sec-0); - background-color: var(--clr-sec-600); + &:focus-visible, + .focus-frame:has(:focus-visible) { + outline: 2px solid var(--clr-sec-600); } &:focus-visible, - .focus-frame:has(:focus-visible) { - outline-width: 2px; - outline-style: solid; - outline-color: var(--clr-sec-600); + &:hover:not(:disabled) { + color: var(--clr-sec-0); + background-color: var(--clr-sec-600); } } @utility clr-btn-nav { color: var(--clr-prim-800); - &:hover:not(:disabled) { - background-color: var(--clr-sec-100); - } - &:disabled { color: var(--clr-prim-600); } + + &:hover:not(:disabled) { + background-color: var(--clr-sec-100); + } } @utility clr-hover { @@ -86,23 +85,17 @@ @utility clr-outline { :is(&, .focus-frame):focus-visible { - outline-width: 2px; - outline-style: solid; - outline-color: var(--clr-sec-600); + outline: 2px solid var(--clr-sec-600); } } @utility focus-frame { :is(.clr-outline, &):focus-visible { - outline-width: 2px; - outline-style: solid; - outline-color: var(--clr-sec-600); + outline: 2px solid var(--clr-sec-600); } &:has(:focus-visible) { - outline-width: 2px; - outline-style: solid; - outline-color: var(--clr-sec-600); + outline: 2px solid var(--clr-sec-600); } } @@ -115,6 +108,7 @@ @utility clr-text-controls { color: var(--clr-prim-800); background-color: transparent; + &:disabled { color: var(--clr-prim-600); } @@ -140,10 +134,12 @@ @utility inline-icon { display: inline-block; - font-size: 1.25rem; + margin-left: 0.1rem; margin-right: 0.1rem; transform: translate(0, -0.2rem); + + font-size: 1.25rem; color: var(--clr-sec-800); } @@ -219,11 +215,5 @@ linear-gradient(to left, transparent, black calc(var(--mask-border-size))), linear-gradient(to right, transparent, black calc(var(--mask-border-size))); - -webkit-mask-image: linear-gradient(to top, transparent, black calc(var(--mask-border-size))), - linear-gradient(to bottom, transparent, black calc(var(--mask-border-size))), - linear-gradient(to left, transparent, black calc(var(--mask-border-size))), - linear-gradient(to right, transparent, black calc(var(--mask-border-size))); - mask-composite: intersect; - -webkit-mask-composite: destination-in; }