diff --git a/CHANGELOG.md b/CHANGELOG.md index 5cd35ec99b4b..c30c0166b271 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Escape special characters in resolved content base paths ([#9650](https://github.com/tailwindlabs/tailwindcss/pull/9650)) +- Don't reuse container for array returning variant functions ([#9644](https://github.com/tailwindlabs/tailwindcss/pull/9644)) ## [3.2.1] - 2022-10-21 diff --git a/src/lib/generateRules.js b/src/lib/generateRules.js index 3695876140b0..f9fa374c186d 100644 --- a/src/lib/generateRules.js +++ b/src/lib/generateRules.js @@ -210,7 +210,7 @@ function applyVariant(variant, matches, context) { let container = postcss.root({ nodes: [rule.clone()] }) for (let [variantSort, variantFunction, containerFromArray] of variantFunctionTuples) { - let clone = containerFromArray ?? container.clone() + let clone = (containerFromArray ?? container).clone() let collectedFormats = [] function prepareBackup() { diff --git a/tests/variants.test.js b/tests/variants.test.js index 45584fc3614a..e05c826fdfc2 100644 --- a/tests/variants.test.js +++ b/tests/variants.test.js @@ -1029,3 +1029,40 @@ test('class inside pseudo-class function :has', () => { `) }) }) + +test('variant functions returning arrays should output correct results when nesting', async () => { + let config = { + content: [{ raw: html`
` }], + corePlugins: { preflight: false }, + plugins: [ + function ({ addUtilities, addVariant }) { + addVariant('test', () => ['@media (test)']) + addUtilities({ + '.foo': { + display: 'grid', + '> *': { + 'grid-column': 'span 2', + }, + }, + }) + }, + ], + } + + let input = css` + @tailwind utilities; + ` + + let result = await run(input, config) + + expect(result.css).toMatchFormattedCss(css` + @media (test) { + .test\:foo { + display: grid; + } + .test\:foo > * { + grid-column: span 2; + } + } + `) +})