diff --git a/CHANGELOG.md b/CHANGELOG.md index 3641da5e1..554bad8dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -- Nothing yet! +### Fixed + +- Ensure classes are extracted when a variant precedes an arbitrary variant containing a quoted attribute selector (e.g. `focus-visible:[&:not([aria-selected="true"])]:bg-red-500`) ([#20374](https://github.com/tailwindlabs/tailwindcss/pull/20374)) ## [3.4.19] - 2025-12-10 diff --git a/src/lib/defaultExtractor.js b/src/lib/defaultExtractor.js index 34407794f..f9e9783e2 100644 --- a/src/lib/defaultExtractor.js +++ b/src/lib/defaultExtractor.js @@ -133,7 +133,7 @@ function* buildRegExps(context) { regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]\/[\w_-]+/, separator]), regex.pattern([/([^\s"'`\[\\]+-)?\[[^\s`]+\]/, separator]), - regex.pattern([/[^\s`\[\\]+/, separator]), + regex.pattern([/[^\s"'`\[\\]+/, separator]), ]), ] diff --git a/tests/default-extractor.test.js b/tests/default-extractor.test.js index a0b6384ef..9d319bbc7 100644 --- a/tests/default-extractor.test.js +++ b/tests/default-extractor.test.js @@ -576,3 +576,14 @@ it.each([ expect(extractions).toContain(value) } }) + +// https://github.com/tailwindlabs/tailwindcss/issues/18387 +test('arbitrary not selector with preceding variants', () => { + let extractions = defaultExtractor(` +
+
+ `) + + expect(extractions).toContain("focus-visible:[&:not([aria-selected='true'])]:bg-red-500") + expect(extractions).toContain('hover:[&:not([aria-selected="true"])]:bg-red-500') +})