Skip to content

Commit 2d0ac89

Browse files
committed
JIT: Replace @tailwind screens with @tailwind variants
1 parent 353ffae commit 2d0ac89

5 files changed

+111
-14
lines changed

src/jit/index.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import postcss from 'postcss'
33
import evaluateTailwindFunctions from '../lib/evaluateTailwindFunctions'
44
import substituteScreenAtRules from '../lib/substituteScreenAtRules'
55

6-
import rewriteTailwindImports from './lib/rewriteTailwindImports'
6+
import normalizeTailwindDirectives from './lib/normalizeTailwindDirectives'
77
import setupContext from './lib/setupContext'
88
import removeLayerAtRules from './lib/removeLayerAtRules'
99
import expandTailwindAtRules from './lib/expandTailwindAtRules'
@@ -30,7 +30,7 @@ export default function (configOrPath = {}) {
3030
})
3131
}
3232

33-
let tailwindDirectives = rewriteTailwindImports(root)
33+
let tailwindDirectives = normalizeTailwindDirectives(root)
3434

3535
let context = setupContext(configOrPath, tailwindDirectives)(result, root)
3636

src/jit/lib/expandTailwindAtRules.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,12 @@ function buildStylesheet(rules, context) {
8383
base: new Set(),
8484
components: new Set(),
8585
utilities: new Set(),
86-
screens: new Set(),
86+
variants: new Set(),
8787
}
8888

8989
for (let [sort, rule] of sortedRules) {
9090
if (sort >= context.minimumScreen) {
91-
returnValue.screens.add(rule)
91+
returnValue.variants.add(rule)
9292
continue
9393
}
9494

@@ -121,7 +121,7 @@ export default function expandTailwindAtRules(context, registerDependency, tailw
121121
base: null,
122122
components: null,
123123
utilities: null,
124-
screens: null,
124+
variants: null,
125125
}
126126

127127
// Make sure this file contains Tailwind directives. If not, we can save
@@ -141,8 +141,8 @@ export default function expandTailwindAtRules(context, registerDependency, tailw
141141
layerNodes.utilities = rule
142142
}
143143

144-
if (rule.params === 'screens') {
145-
layerNodes.screens = rule
144+
if (rule.params === 'variants') {
145+
layerNodes.variants = rule
146146
}
147147
})
148148

@@ -242,7 +242,7 @@ export default function expandTailwindAtRules(context, registerDependency, tailw
242242
base: baseNodes,
243243
components: componentNodes,
244244
utilities: utilityNodes,
245-
screens: screenNodes,
245+
variants: screenNodes,
246246
} = context.stylesheetCache
247247

248248
// ---
@@ -264,9 +264,9 @@ export default function expandTailwindAtRules(context, registerDependency, tailw
264264
layerNodes.utilities.remove()
265265
}
266266

267-
if (layerNodes.screens) {
268-
layerNodes.screens.before(cloneNodes([...screenNodes]))
269-
layerNodes.screens.remove()
267+
if (layerNodes.variants) {
268+
layerNodes.variants.before(cloneNodes([...screenNodes]))
269+
layerNodes.variants.remove()
270270
} else {
271271
root.append(cloneNodes([...screenNodes]))
272272
}

src/jit/lib/rewriteTailwindImports.js src/jit/lib/normalizeTailwindDirectives.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export default function rewriteTailwindImports(root) {
1+
export default function normalizeTailwindDirectives(root) {
22
root.walkAtRules('import', (atRule) => {
33
if (atRule.params === '"tailwindcss/base"' || atRule.params === "'tailwindcss/base'") {
44
atRule.name = 'tailwind'
@@ -17,16 +17,21 @@ export default function rewriteTailwindImports(root) {
1717
atRule.params = 'utilities'
1818
} else if (
1919
atRule.params === '"tailwindcss/screens"' ||
20-
atRule.params === "'tailwindcss/screens'"
20+
atRule.params === "'tailwindcss/screens'" ||
21+
atRule.params === '"tailwindcss/variants"' ||
22+
atRule.params === "'tailwindcss/variants'"
2123
) {
2224
atRule.name = 'tailwind'
23-
atRule.params = 'screens'
25+
atRule.params = 'variants'
2426
}
2527
})
2628

2729
let tailwindDirectives = new Set()
2830

2931
root.walkAtRules('tailwind', (rule) => {
32+
if (rule.params === 'screens') {
33+
rule.params = 'variants'
34+
}
3035
tailwindDirectives.add(rule.params)
3136
})
3237

tests/jit/tailwind-screens.test.js

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import postcss from 'postcss'
2+
import path from 'path'
3+
import tailwind from '../../src/jit/index.js'
4+
5+
function run(input, config = {}) {
6+
const { currentTestName } = expect.getState()
7+
8+
return postcss(tailwind(config)).process(input, {
9+
from: `${path.resolve(__filename)}?test=${currentTestName}`,
10+
})
11+
}
12+
13+
test('class variants are inserted at `@tailwind variants`', async () => {
14+
let config = {
15+
mode: 'jit',
16+
purge: [
17+
{
18+
raw: `font-bold hover:font-bold md:font-bold`,
19+
},
20+
],
21+
theme: {},
22+
plugins: [],
23+
}
24+
25+
let css = `
26+
@tailwind utilities;
27+
@tailwind variants;
28+
.foo {
29+
color: black;
30+
}
31+
`
32+
33+
return run(css, config).then((result) => {
34+
expect(result.css).toMatchFormattedCss(`
35+
.font-bold {
36+
font-weight: 700;
37+
}
38+
.hover\\:font-bold:hover {
39+
font-weight: 700;
40+
}
41+
@media (min-width: 768px) {
42+
.md\\:font-bold {
43+
font-weight: 700;
44+
}
45+
}
46+
.foo {
47+
color: black;
48+
}
49+
`)
50+
})
51+
})
52+
53+
test('`@tailwind screens` works as an alias for `@tailwind variants`', async () => {
54+
let config = {
55+
mode: 'jit',
56+
purge: [
57+
{
58+
raw: `font-bold hover:font-bold md:font-bold`,
59+
},
60+
],
61+
theme: {},
62+
plugins: [],
63+
}
64+
65+
let css = `
66+
@tailwind utilities;
67+
@tailwind screens;
68+
.foo {
69+
color: black;
70+
}
71+
`
72+
73+
return run(css, config).then((result) => {
74+
expect(result.css).toMatchFormattedCss(`
75+
.font-bold {
76+
font-weight: 700;
77+
}
78+
.hover\\:font-bold:hover {
79+
font-weight: 700;
80+
}
81+
@media (min-width: 768px) {
82+
.md\\:font-bold {
83+
font-weight: 700;
84+
}
85+
}
86+
.foo {
87+
color: black;
88+
}
89+
`)
90+
})
91+
})

variants.css

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@tailwind variants;

0 commit comments

Comments
 (0)