Some checks failed
Build and deploy updated apps / Build & deploy (push) Failing after 50s
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
export function mergeTailwindVariants(
|
|
preset: any,
|
|
override: any,
|
|
level: number = 0,
|
|
merge: boolean = true,
|
|
compound: boolean = false
|
|
): any {
|
|
let objects = typeof preset === 'object' ? 1 : 0
|
|
objects += typeof override === 'object' ? 1 : 0
|
|
|
|
if (!objects) {
|
|
if (merge && typeof preset === 'string' && typeof override === 'string') {
|
|
return `${preset} ${override}` // tailwind-variants uses tailwind-merge anyway if installed
|
|
}
|
|
|
|
return override == null ? preset : override
|
|
}
|
|
|
|
if (objects === 1) {
|
|
return preset
|
|
}
|
|
|
|
const merged = { ...preset }
|
|
|
|
for (const key in override) {
|
|
if (key in preset) {
|
|
merge = merge && (level > 0 || key !== 'defaultVariants')
|
|
compound = compound || (level === 0 && key === 'compoundVariants')
|
|
|
|
merged[key] = mergeTailwindVariants(
|
|
preset[key],
|
|
override[key],
|
|
level + 1,
|
|
compound ? key !== 'class' : merge,
|
|
compound
|
|
)
|
|
}
|
|
}
|
|
|
|
if (level === 0 && 'base' in merged) {
|
|
if (merged.base) {
|
|
const slots = merged.slots ?? {}
|
|
slots.base = `${slots.base ?? ''} ${merged.base}`
|
|
merged.slots = slots
|
|
}
|
|
|
|
delete merged.base
|
|
}
|
|
|
|
return merged
|
|
}
|