diff --git a/CHANGELOG.md b/CHANGELOG.md index bee7ca749dad..7dcc94e3518e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Support derived spacing scales based on a single `--spacing` theme value ([#14857](https://github.com/tailwindlabs/tailwindcss/pull/14857)) - Add `svh`, `dvh`, `svw`, `dvw`, and `auto` values to all width/height/size utilities ([#14857](https://github.com/tailwindlabs/tailwindcss/pull/14857)) +- Add new `**` variant ([#14903](https://github.com/tailwindlabs/tailwindcss/pull/14903)) - _Upgrade (experimental)_: Migrate `grid-cols-[subgrid]` and `grid-rows-[subgrid]` to `grid-cols-subgrid` and `grid-rows-subgrid` ([#14840](https://github.com/tailwindlabs/tailwindcss/pull/14840)) - _Upgrade (experimental)_: Support migrating projects with multiple config files ([#14863](https://github.com/tailwindlabs/tailwindcss/pull/14863)) - _Upgrade (experimental)_: Rename `shadow` to `shadow-sm`, `shadow-sm` to `shadow-xs`, and `shadow-xs` to `shadow-2xs` ([#14875](https://github.com/tailwindlabs/tailwindcss/pull/14875)) diff --git a/integrations/cli/index.test.ts b/integrations/cli/index.test.ts index e5027a295804..db4a895bb42d 100644 --- a/integrations/cli/index.test.ts +++ b/integrations/cli/index.test.ts @@ -44,7 +44,7 @@ describe.each([ `, 'project-a/index.html': html`
`, 'project-a/plugin.js': js` @@ -89,6 +89,8 @@ describe.each([ candidate`content-['project-b/src/index.js']`, candidate`inverted:flex`, candidate`hocus:underline`, + candidate`*:flex`, + candidate`**:flex`, ]) }, ) diff --git a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap index 4a54ff5ee412..0b4723c64b7c 100644 --- a/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap +++ b/packages/tailwindcss/src/__snapshots__/intellisense.test.ts.snap @@ -6950,6 +6950,13 @@ exports[`getVariants 1`] = ` "selectors": [Function], "values": [], }, + { + "hasDash": true, + "isArbitrary": false, + "name": "**", + "selectors": [Function], + "values": [], + }, { "hasDash": true, "isArbitrary": true, diff --git a/packages/tailwindcss/src/variants.test.ts b/packages/tailwindcss/src/variants.test.ts index c195a18e0582..fc0c9856f546 100644 --- a/packages/tailwindcss/src/variants.test.ts +++ b/packages/tailwindcss/src/variants.test.ts @@ -24,6 +24,15 @@ test('*', async () => { expect(await run(['*/foo:flex'])).toEqual('') }) +test('**', async () => { + expect(await run(['**:flex'])).toMatchInlineSnapshot(` + ":where(.\\*\\*\\:flex *) { + display: flex; + }" + `) + expect(await run(['**/foo:flex'])).toEqual('') +}) + test('first-letter', async () => { expect(await run(['first-letter:flex'])).toMatchInlineSnapshot(` ".first-letter\\:flex:first-letter { diff --git a/packages/tailwindcss/src/variants.ts b/packages/tailwindcss/src/variants.ts index ac08efc4250a..81be83326141 100644 --- a/packages/tailwindcss/src/variants.ts +++ b/packages/tailwindcss/src/variants.ts @@ -364,6 +364,7 @@ export function createVariants(theme: Theme): Variants { variants.static('force', () => {}, { compounds: Compounds.Never }) staticVariant('*', [':where(& > *)'], { compounds: Compounds.Never }) + staticVariant('**', [':where(& *)'], { compounds: Compounds.Never }) function negateConditions(ruleName: string, conditions: string[]) { return conditions.map((condition) => {