import plugin from 'tailwindcss/plugin.js'
interface Options {
/**
* The prefix used for the variants. This defaults to `ui`.
*
* Usage example:
* ```html
*
* ```
**/
prefix?: string
}
export default plugin.withOptions(({ prefix = 'ui' } = {}) => {
return ({ addVariant }) => {
for (let state of ['open', 'checked', 'selected', 'active', 'disabled']) {
// TODO: Once `:has()` is properly supported, then we can switch to this version:
// addVariant(`${prefix}-${state}`, [
// `&[data-headlessui-state~="${state}"]`,
// `:where([data-headlessui-state~="${state}"]):not(:has([data-headlessui-state])) &`,
// ])
// But for now, this will do:
addVariant(`${prefix}-${state}`, [
`&[data-headlessui-state~="${state}"]`,
`:where([data-headlessui-state~="${state}"]) &`,
])
addVariant(`${prefix}-not-${state}`, [
`&[data-headlessui-state]:not([data-headlessui-state~="${state}"])`,
`:where([data-headlessui-state]:not([data-headlessui-state~="${state}"])) &:not([data-headlessui-state])`,
])
}
addVariant(`${prefix}-focus-visible`, ':where([data-headlessui-focus-visible]) &:focus')
addVariant(
`${prefix}-not-focus-visible`,
'&:focus:where(:not([data-headlessui-focus-visible] &))'
)
}
})