From d0b186291f5630e19af634ee033e27c9a4a9b280 Mon Sep 17 00:00:00 2001 From: Levi Wilkerson Date: Thu, 20 Nov 2025 11:12:04 -0500 Subject: [PATCH 1/3] build: add postcss-html as dep --- package-lock.json | 112 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- 2 files changed, 114 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 5617b89..4482ada 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "conventional-recommended-bump": "6.1.0", "git-semver-tags": "4.1.1", "markdownlint-cli2": "0.18.1", + "postcss-html": "1.8.0", "postcss-scss": "4.0.9", "semver": "7.3.5", "stylelint": "16.20.0", @@ -2043,6 +2044,61 @@ "node": ">=6.0.0" } }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/dot-prop": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", @@ -2842,6 +2898,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4579,6 +4654,43 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-html": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz", + "integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==", + "license": "MIT", + "dependencies": { + "htmlparser2": "^8.0.0", + "js-tokens": "^9.0.0", + "postcss": "^8.5.0", + "postcss-safe-parser": "^6.0.0" + }, + "engines": { + "node": "^12 || >=14" + } + }, + "node_modules/postcss-html/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "license": "MIT" + }, + "node_modules/postcss-html/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==", + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "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", diff --git a/package.json b/package.json index 76db4de..2c05019 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,8 @@ "stylelint": "16.20.0", "stylelint-config-standard": "38.0.0", "stylelint-config-standard-scss": "15.0.1", - "stylelint-scss": "6.12.1" + "stylelint-scss": "6.12.1", + "postcss-html": "1.8.0" }, "devDependencies": { "@silvermine/eslint-config": "3.0.1", From 3153d8f5df11844d124809f2588d1b93aae7b9c6 Mon Sep 17 00:00:00 2001 From: Levi Wilkerson Date: Thu, 20 Nov 2025 11:13:08 -0500 Subject: [PATCH 2/3] feat: add stylelint duplicate properties rule --- .stylelintrc.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.stylelintrc.yml b/.stylelintrc.yml index 64ecb5f..862a6ac 100644 --- a/.stylelintrc.yml +++ b/.stylelintrc.yml @@ -48,7 +48,11 @@ rules: - slotted selector-pseudo-element-no-unknown: true selector-type-no-unknown: true - declaration-block-no-duplicate-properties: true + declaration-block-no-duplicate-properties: + - true + - ignore: + # Allow intentional duplicate properties for progressive enhancement (e.g., vh/dvh fallbacks) + - consecutive-duplicates-with-different-values declaration-block-no-shorthand-property-overrides: true '@stylistic/declaration-colon-space-after': always '@stylistic/declaration-colon-space-before': never @@ -97,6 +101,7 @@ rules: function-url-quotes: null number-max-precision: null + # SCSS files require postcss-scss as customSyntax # See: https://github.com/stylelint/stylelint/blob/a57d512dd5f79815a43e996a182b5e2a8154e363/docs/user-guide/configure.md#overrides overrides: @@ -131,3 +136,4 @@ overrides: scss/at-mixin-parentheses-space-before: never - files: [ "**/*.vue" ] customSyntax: postcss-html + From 2787c28364bc55a7579da09c8cc61f315b256c3e Mon Sep 17 00:00:00 2001 From: Levi Wilkerson Date: Mon, 24 Nov 2025 11:55:10 -0500 Subject: [PATCH 3/3] feat: add scss at no unknown rule to vue files --- .stylelintrc.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.stylelintrc.yml b/.stylelintrc.yml index 862a6ac..02378b4 100644 --- a/.stylelintrc.yml +++ b/.stylelintrc.yml @@ -136,4 +136,7 @@ overrides: scss/at-mixin-parentheses-space-before: never - files: [ "**/*.vue" ] customSyntax: postcss-html - + rules: + # Turn off config-standard rule in favor of the scss/at-rule-no-unknown rule + at-rule-no-unknown: null + scss/at-rule-no-unknown: true