import transformThemeValue from './transformThemeValue' | |
export default function createUtilityPlugin( | |
themeKey, | |
utilityVariations = [[themeKey, [themeKey]]], | |
{ filterDefault = false, ...options } = {} | |
) { | |
let transformValue = transformThemeValue(themeKey) | |
return function ({ matchUtilities, theme }) { | |
for (let utilityVariation of utilityVariations) { | |
let group = Array.isArray(utilityVariation[0]) ? utilityVariation : [utilityVariation] | |
matchUtilities( | |
group.reduce((obj, [classPrefix, properties]) => { | |
return Object.assign(obj, { | |
[classPrefix]: (value) => { | |
return properties.reduce((obj, name) => { | |
if (Array.isArray(name)) { | |
return Object.assign(obj, { [name[0]]: name[1] }) | |
} | |
return Object.assign(obj, { [name]: transformValue(value) }) | |
}, {}) | |
}, | |
}) | |
}, {}), | |
{ | |
...options, | |
values: filterDefault | |
? Object.fromEntries( | |
Object.entries(theme(themeKey) ?? {}).filter(([modifier]) => modifier !== 'DEFAULT') | |
) | |
: theme(themeKey), | |
} | |
) | |
} | |
} | |
} | |