@klass/core
Version:
Class variant utility
50 lines (49 loc) • 2.04 kB
JavaScript
import { clsx as l } from "clsx";
const y = (n, t) => `${n ?? t}`, h = (n) => n, g = "prefix", p = (n, t) => `${n}${t}`, O = (n, t) => `${t}${n}`, x = (n) => {
const t = {};
let e;
for (e in n)
t[e] = l(n[e]);
return t;
}, j = (n) => {
const t = x(n.variant), e = (f) => {
let a;
return `${a = y(f, n.defaultVariant)}` in n.variant ? t[a] : void 0;
};
return e.o = n, e;
}, A = ({ class: n, ...t }) => t, M = (n) => Object.keys(n), G = ({ class: n }) => l(n), I = (n, t = {}) => {
const { it: e = h } = t, f = l(n.base), a = [], d = Object.entries(n.variants).reduce((v, [V, u]) => (a.push(V), v[V] = j({ variant: u, defaultVariant: n.defaultVariants?.[V] }), v), {}), s = n.compoundVariants ?? [], i = s.length > 0, r = s.map(A), c = r.map(M), F = s.map(G), m = (v, V) => {
let u = "", o, C;
for (o = 0; o < a.length; o++)
(C = d[a[o]](v?.[a[o]])) && (u && (u += " "), u += C);
if (i)
for (o = 0; o < r.length; o++) {
let b = r[o], $;
c[o].every((k) => typeof ($ = b[k]) < "u" && (v?.[k] ?? n.defaultVariants?.[k]) === $) && (C = F[o]) && (u && (u += " "), u += C);
}
return e(l(f, u, V));
};
return m.o = n, m.v = d, m.vk = a, m;
}, P = (n, t = {}) => {
const { as: e = g } = t, f = Object.keys(n.conditions), a = x(n.variant), d = e === "suffix" ? O : p, s = (i) => {
let r;
return typeof i != "object" ? `${r = y(i)}` in n.variant ? d(n.conditions[n.defaultCondition], a[r]) : void 0 : l(
f.map((c) => c in i && `${r = y(i[c])}` in n.variant && d(n.conditions[c], a[r]))
);
};
return s.o = n, s;
}, K = (n, t = {}) => {
const { as: e, it: f = h } = t, a = [], d = Object.entries(n.variants).reduce((i, [r, c]) => (a.push(r), i[r] = P({ conditions: n.conditions, defaultCondition: n.defaultCondition, variant: c }, { as: e }), i), {}), s = (i, r) => f(
l(
a.map((c) => d[c](i?.[c])),
r
)
);
return s.o = n, s.rv = d, s.rvk = a, s;
};
export {
I as klass,
K as reklass,
P as revariant,
j as variant
};