Properly handle pseudo-elements with group-hover variant

This commit is contained in:
Adam Wathan 2019-06-13 07:52:37 -04:00
parent 737f1ecde0
commit eeb2947204
2 changed files with 9 additions and 3 deletions

View File

@ -220,7 +220,7 @@ test('variants are generated in the order specified', () => {
test('the built-in variant pseudo-selectors are appended before any pseudo-elements', () => {
const input = `
@variants hover, focus-within, focus, active {
@variants hover, focus-within, focus, active, group-hover {
.placeholder-yellow::placeholder { color: yellow; }
}
`
@ -231,6 +231,7 @@ test('the built-in variant pseudo-selectors are appended before any pseudo-eleme
.focus-within\\:placeholder-yellow:focus-within::placeholder { color: yellow; }
.focus\\:placeholder-yellow:focus::placeholder { color: yellow; }
.active\\:placeholder-yellow:active::placeholder { color: yellow; }
.group:hover .group-hover\\:placeholder-yellow::placeholder { color: yellow; }
`
return run(input).then(result => {

View File

@ -24,8 +24,13 @@ function ensureIncludesDefault(variants) {
const defaultVariantGenerators = {
default: generateVariantFunction(() => {}),
'group-hover': generateVariantFunction(({ modifySelectors, separator }) => {
return modifySelectors(({ className }) => {
return `.group:hover .${e(`group-hover${separator}${className}`)}`
return modifySelectors(({ selector }) => {
return selectorParser(selectors => {
selectors.walkClasses(sel => {
sel.value = `group-hover${separator}${sel.value}`
sel.parent.insertBefore(sel, selectorParser().astSync('.group:hover '))
})
}).processSync(selector)
})
}),
hover: generatePseudoClassVariant('hover'),