Skip to content

Commit e376f94

Browse files
authored
Merge pull request #1216 from tailwindcss/prefix-group
Apply configured prefix to the `.group` class for group-hover variants
2 parents 109a435 + 86ef02e commit e376f94

File tree

2 files changed

+32
-4
lines changed

2 files changed

+32
-4
lines changed

__tests__/variantsAtRule.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,30 @@ test('it can generate group-hover variants', () => {
240240
})
241241
})
242242

243+
test('group-hover variants respect any configured prefix', () => {
244+
const input = `
245+
@variants group-hover {
246+
.tw-banana { color: yellow; }
247+
.tw-chocolate { color: brown; }
248+
}
249+
`
250+
251+
const output = `
252+
.tw-banana { color: yellow; }
253+
.tw-chocolate { color: brown; }
254+
.tw-group:hover .group-hover\\:tw-banana { color: yellow; }
255+
.tw-group:hover .group-hover\\:tw-chocolate { color: brown; }
256+
`
257+
258+
return run(input, {
259+
...config,
260+
prefix: 'tw-',
261+
}).then(result => {
262+
expect(result.css).toMatchCss(output)
263+
expect(result.warnings().length).toBe(0)
264+
})
265+
})
266+
243267
test('it can generate hover, active and focus variants', () => {
244268
const input = `
245269
@variants group-hover, hover, focus, active {

src/lib/substituteVariantsAtRules.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import _ from 'lodash'
22
import postcss from 'postcss'
33
import selectorParser from 'postcss-selector-parser'
44
import generateVariantFunction from '../util/generateVariantFunction'
5+
import prefixSelector from '../util/prefixSelector'
56

67
function generatePseudoClassVariant(pseudoClass, selectorPrefix = pseudoClass) {
78
return generateVariantFunction(({ modifySelectors, separator }) => {
@@ -20,14 +21,17 @@ function ensureIncludesDefault(variants) {
2021
return variants.includes('default') ? variants : ['default', ...variants]
2122
}
2223

23-
const defaultVariantGenerators = {
24+
const defaultVariantGenerators = config => ({
2425
default: generateVariantFunction(() => {}),
2526
'group-hover': generateVariantFunction(({ modifySelectors, separator }) => {
2627
return modifySelectors(({ selector }) => {
2728
return selectorParser(selectors => {
2829
selectors.walkClasses(sel => {
2930
sel.value = `group-hover${separator}${sel.value}`
30-
sel.parent.insertBefore(sel, selectorParser().astSync('.group:hover '))
31+
sel.parent.insertBefore(
32+
sel,
33+
selectorParser().astSync(prefixSelector(config.prefix, '.group:hover '))
34+
)
3135
})
3236
}).processSync(selector)
3337
})
@@ -42,12 +46,12 @@ const defaultVariantGenerators = {
4246
last: generatePseudoClassVariant('last-child', 'last'),
4347
odd: generatePseudoClassVariant('nth-child(odd)', 'odd'),
4448
even: generatePseudoClassVariant('nth-child(even)', 'even'),
45-
}
49+
})
4650

4751
export default function(config, { variantGenerators: pluginVariantGenerators }) {
4852
return function(css) {
4953
const variantGenerators = {
50-
...defaultVariantGenerators,
54+
...defaultVariantGenerators(config),
5155
...pluginVariantGenerators,
5256
}
5357

0 commit comments

Comments
 (0)