tailwindcss/src/lib/substituteVariantsAtRules.js
Adam Wathan 021ce94b7d Unwrap config in inner function
Unwrapping in the outer function causes it to get cached during watching.
2017-11-27 19:28:35 -05:00

49 lines
1.2 KiB
JavaScript

import _ from 'lodash'
import postcss from 'postcss'
const variantGenerators = {
hover: (separator, container) => {
const cloned = container.clone()
cloned.walkRules(rule => {
rule.selector = `.hover${separator}${rule.selector.slice(1)}:hover`
})
return cloned.nodes
},
focus: (separator, container) => {
const cloned = container.clone()
cloned.walkRules(rule => {
rule.selector = `.focus${separator}${rule.selector.slice(1)}:focus`
})
return cloned.nodes
},
}
export default function(config) {
return function(css) {
const separator = config().options.separator
css.walkAtRules('variants', atRule => {
const variants = postcss.list.comma(atRule.params)
if (variants.includes('responsive')) {
const responsiveParent = postcss.atRule({ name: 'responsive' })
atRule.before(responsiveParent)
responsiveParent.append(atRule)
}
atRule.before(atRule.clone().nodes)
_.forEach(['focus', 'hover'], variant => {
if (variants.includes(variant)) {
atRule.before(variantGenerators[variant](separator, atRule))
}
})
atRule.remove()
})
}
}