From a8899746099a1d4cc315ac605b9fdb67a82a06d7 Mon Sep 17 00:00:00 2001 From: Marc G Date: Mon, 22 Jan 2024 15:44:05 +0100 Subject: [PATCH] Fix `selector-pseudo-class-no-unknown` false positives for `:seeking`, the media loading state and sound state pseudo-classes (#7490) --- .changeset/friendly-poems-taste.md | 5 +++++ lib/reference/selectors.cjs | 14 ++++++++++++-- lib/reference/selectors.mjs | 14 ++++++++++++-- .../__tests__/index.mjs | 3 +++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 .changeset/friendly-poems-taste.md diff --git a/.changeset/friendly-poems-taste.md b/.changeset/friendly-poems-taste.md new file mode 100644 index 0000000000..62cf909b90 --- /dev/null +++ b/.changeset/friendly-poems-taste.md @@ -0,0 +1,5 @@ +--- +"stylelint": patch +--- + +Fixed: `selector-pseudo-class-no-unknown` false positives for `:seeking`, the media loading state and sound state pseudo-classes diff --git a/lib/reference/selectors.cjs b/lib/reference/selectors.cjs index 51d5b95384..c956f7a5b3 100644 --- a/lib/reference/selectors.cjs +++ b/lib/reference/selectors.cjs @@ -254,11 +254,23 @@ const webkitScrollbarPseudoClasses = new Set([ 'window-inactive', ]); +// https://www.w3.org/TR/selectors-4/#resource-pseudos +const resourceStatePseudoClasses = new Set([ + 'buffering', + 'muted', + 'paused', + 'playing', + 'seeking', + 'stalled', + 'volume-locked', +]); + const pseudoClasses = uniteSets( aNPlusBNotationPseudoClasses, linguisticPseudoClasses, logicalCombinationsPseudoClasses, aNPlusBOfSNotationPseudoClasses, + resourceStatePseudoClasses, vendorSpecificPseudoClasses, [ 'active', @@ -295,9 +307,7 @@ const pseudoClasses = uniteSets( 'optional', 'out-of-range', 'past', - 'paused', 'placeholder-shown', - 'playing', 'picture-in-picture', 'popover-open', 'read-only', diff --git a/lib/reference/selectors.mjs b/lib/reference/selectors.mjs index 83362f8d52..345f9de9b8 100644 --- a/lib/reference/selectors.mjs +++ b/lib/reference/selectors.mjs @@ -251,11 +251,23 @@ export const webkitScrollbarPseudoClasses = new Set([ 'window-inactive', ]); +// https://www.w3.org/TR/selectors-4/#resource-pseudos +const resourceStatePseudoClasses = new Set([ + 'buffering', + 'muted', + 'paused', + 'playing', + 'seeking', + 'stalled', + 'volume-locked', +]); + export const pseudoClasses = uniteSets( aNPlusBNotationPseudoClasses, linguisticPseudoClasses, logicalCombinationsPseudoClasses, aNPlusBOfSNotationPseudoClasses, + resourceStatePseudoClasses, vendorSpecificPseudoClasses, [ 'active', @@ -292,9 +304,7 @@ export const pseudoClasses = uniteSets( 'optional', 'out-of-range', 'past', - 'paused', 'placeholder-shown', - 'playing', 'picture-in-picture', 'popover-open', 'read-only', diff --git a/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.mjs b/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.mjs index 84fde7d3d6..1ea1838200 100644 --- a/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.mjs +++ b/lib/rules/selector-pseudo-class-no-unknown/__tests__/index.mjs @@ -122,6 +122,9 @@ testRule({ code: ':popover-open {}', description: 'explicit :popover-open test; see #7424', }, + { + code: ':seeking, :stalled, :buffering, :volume-locked, :muted {}', + }, ], reject: [