@vctrl/viewer
Version:
vctrl/viewer is a React component library for rendering and interacting with 3D models. It's part of the vectreal ecosystem and is designed to work seamlessly with the vctrl/hooks package for model loading and management.
1,696 lines • 462 kB
JavaScript
import { jsx as h, Fragment as sn, jsxs as j } from "react/jsx-runtime";
import * as f from "react";
import Z, { forwardRef as Nt, createElement as xe, createContext as Dt, useContext as re, useId as uh, useEffect as Le, useCallback as Kr, Component as dh, useLayoutEffect as dc, useRef as Jt, useInsertionEffect as fh, useMemo as co, Fragment as fc, useState as lo, Suspense as ph } from "react";
import { useThree as pc, Canvas as hh } from "@react-three/fiber";
import * as hc from "react-dom";
import mc from "react-dom";
import { Object3D as gc, Vector3 as en, Box3 as gi, Mesh as mh } from "three";
import { Environment as gh, Stage as vh, OrbitControls as yh, Grid as bh } from "@react-three/drei";
function wh(e, t) {
const n = f.createContext(t), o = (s) => {
const { children: i, ...a } = s, c = f.useMemo(() => a, Object.values(a));
return /* @__PURE__ */ h(n.Provider, { value: c, children: i });
};
o.displayName = e + "Provider";
function r(s) {
const i = f.useContext(n);
if (i) return i;
if (t !== void 0) return t;
throw new Error(`\`${s}\` must be used within \`${e}\``);
}
return [o, r];
}
function ie(e, t = []) {
let n = [];
function o(s, i) {
const a = f.createContext(i), c = n.length;
n = [...n, i];
const l = (d) => {
var b;
const { scope: p, children: m, ...v } = d, g = ((b = p == null ? void 0 : p[e]) == null ? void 0 : b[c]) || a, y = f.useMemo(() => v, Object.values(v));
return /* @__PURE__ */ h(g.Provider, { value: y, children: m });
};
l.displayName = s + "Provider";
function u(d, p) {
var g;
const m = ((g = p == null ? void 0 : p[e]) == null ? void 0 : g[c]) || a, v = f.useContext(m);
if (v) return v;
if (i !== void 0) return i;
throw new Error(`\`${d}\` must be used within \`${s}\``);
}
return [l, u];
}
const r = () => {
const s = n.map((i) => f.createContext(i));
return function(a) {
const c = (a == null ? void 0 : a[e]) || s;
return f.useMemo(
() => ({ [`__scope${e}`]: { ...a, [e]: c } }),
[a, c]
);
};
};
return r.scopeName = e, [o, xh(r, ...t)];
}
function xh(...e) {
const t = e[0];
if (e.length === 1) return t;
const n = () => {
const o = e.map((r) => ({
useScope: r(),
scopeName: r.scopeName
}));
return function(s) {
const i = o.reduce((a, { useScope: c, scopeName: l }) => {
const d = c(s)[`__scope${l}`];
return { ...a, ...d };
}, {});
return f.useMemo(() => ({ [`__scope${t.scopeName}`]: i }), [i]);
};
};
return n.scopeName = t.scopeName, n;
}
function vi(e, t) {
if (typeof e == "function")
return e(t);
e != null && (e.current = t);
}
function gn(...e) {
return (t) => {
let n = !1;
const o = e.map((r) => {
const s = vi(r, t);
return !n && typeof s == "function" && (n = !0), s;
});
if (n)
return () => {
for (let r = 0; r < o.length; r++) {
const s = o[r];
typeof s == "function" ? s() : vi(e[r], null);
}
};
};
}
function U(...e) {
return f.useCallback(gn(...e), e);
}
var Ke = f.forwardRef((e, t) => {
const { children: n, ...o } = e, r = f.Children.toArray(n), s = r.find(Ch);
if (s) {
const i = s.props.children, a = r.map((c) => c === s ? f.Children.count(i) > 1 ? f.Children.only(null) : f.isValidElement(i) ? i.props.children : null : c);
return /* @__PURE__ */ h(ur, { ...o, ref: t, children: f.isValidElement(i) ? f.cloneElement(i, void 0, a) : null });
}
return /* @__PURE__ */ h(ur, { ...o, ref: t, children: n });
});
Ke.displayName = "Slot";
var ur = f.forwardRef((e, t) => {
const { children: n, ...o } = e;
if (f.isValidElement(n)) {
const r = Ph(n), s = Mh(o, n.props);
return n.type !== f.Fragment && (s.ref = t ? gn(t, r) : r), f.cloneElement(n, s);
}
return f.Children.count(n) > 1 ? f.Children.only(null) : null;
});
ur.displayName = "SlotClone";
var vc = ({ children: e }) => /* @__PURE__ */ h(sn, { children: e });
function Ch(e) {
return f.isValidElement(e) && e.type === vc;
}
function Mh(e, t) {
const n = { ...t };
for (const o in t) {
const r = e[o], s = t[o];
/^on[A-Z]/.test(o) ? r && s ? n[o] = (...a) => {
s(...a), r(...a);
} : r && (n[o] = r) : o === "style" ? n[o] = { ...r, ...s } : o === "className" && (n[o] = [r, s].filter(Boolean).join(" "));
}
return { ...e, ...n };
}
function Ph(e) {
var o, r;
let t = (o = Object.getOwnPropertyDescriptor(e.props, "ref")) == null ? void 0 : o.get, n = t && "isReactWarning" in t && t.isReactWarning;
return n ? e.ref : (t = (r = Object.getOwnPropertyDescriptor(e, "ref")) == null ? void 0 : r.get, n = t && "isReactWarning" in t && t.isReactWarning, n ? e.props.ref : e.props.ref || e.ref);
}
function It(e) {
const t = e + "CollectionProvider", [n, o] = ie(t), [r, s] = n(
t,
{ collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }
), i = (m) => {
const { scope: v, children: g } = m, y = Z.useRef(null), b = Z.useRef(/* @__PURE__ */ new Map()).current;
return /* @__PURE__ */ h(r, { scope: v, itemMap: b, collectionRef: y, children: g });
};
i.displayName = t;
const a = e + "CollectionSlot", c = Z.forwardRef(
(m, v) => {
const { scope: g, children: y } = m, b = s(a, g), w = U(v, b.collectionRef);
return /* @__PURE__ */ h(Ke, { ref: w, children: y });
}
);
c.displayName = a;
const l = e + "CollectionItemSlot", u = "data-radix-collection-item", d = Z.forwardRef(
(m, v) => {
const { scope: g, children: y, ...b } = m, w = Z.useRef(null), x = U(v, w), M = s(l, g);
return Z.useEffect(() => (M.itemMap.set(w, { ref: w, ...b }), () => void M.itemMap.delete(w))), /* @__PURE__ */ h(Ke, { [u]: "", ref: x, children: y });
}
);
d.displayName = l;
function p(m) {
const v = s(e + "CollectionConsumer", m);
return Z.useCallback(() => {
const y = v.collectionRef.current;
if (!y) return [];
const b = Array.from(y.querySelectorAll(`[${u}]`));
return Array.from(v.itemMap.values()).sort(
(M, C) => b.indexOf(M.ref.current) - b.indexOf(C.ref.current)
);
}, [v.collectionRef, v.itemMap]);
}
return [
{ Provider: i, Slot: c, ItemSlot: d },
p,
o
];
}
function S(e, t, { checkForDefaultPrevented: n = !0 } = {}) {
return function(r) {
if (e == null || e(r), n === !1 || !r.defaultPrevented)
return t == null ? void 0 : t(r);
};
}
function J(e) {
const t = f.useRef(e);
return f.useEffect(() => {
t.current = e;
}), f.useMemo(() => (...n) => {
var o;
return (o = t.current) == null ? void 0 : o.call(t, ...n);
}, []);
}
function ct({
prop: e,
defaultProp: t,
onChange: n = () => {
}
}) {
const [o, r] = Ah({ defaultProp: t, onChange: n }), s = e !== void 0, i = s ? e : o, a = J(n), c = f.useCallback(
(l) => {
if (s) {
const d = typeof l == "function" ? l(e) : l;
d !== e && a(d);
} else
r(l);
},
[s, e, r, a]
);
return [i, c];
}
function Ah({
defaultProp: e,
onChange: t
}) {
const n = f.useState(e), [o] = n, r = f.useRef(o), s = J(t);
return f.useEffect(() => {
r.current !== o && (s(o), r.current = o);
}, [o, r, s]), n;
}
var Rh = [
"a",
"button",
"div",
"form",
"h2",
"h3",
"img",
"input",
"label",
"li",
"nav",
"ol",
"p",
"span",
"svg",
"ul"
], k = Rh.reduce((e, t) => {
const n = f.forwardRef((o, r) => {
const { asChild: s, ...i } = o, a = s ? Ke : t;
return typeof window < "u" && (window[Symbol.for("radix-ui")] = !0), /* @__PURE__ */ h(a, { ...i, ref: r });
});
return n.displayName = `Primitive.${t}`, { ...e, [t]: n };
}, {});
function Un(e, t) {
e && hc.flushSync(() => e.dispatchEvent(t));
}
var de = globalThis != null && globalThis.document ? f.useLayoutEffect : () => {
};
function Sh(e, t) {
return f.useReducer((n, o) => t[n][o] ?? n, e);
}
var oe = (e) => {
const { present: t, children: n } = e, o = Th(t), r = typeof n == "function" ? n({ present: o.isPresent }) : f.Children.only(n), s = U(o.ref, Eh(r));
return typeof n == "function" || o.isPresent ? f.cloneElement(r, { ref: s }) : null;
};
oe.displayName = "Presence";
function Th(e) {
const [t, n] = f.useState(), o = f.useRef({}), r = f.useRef(e), s = f.useRef("none"), i = e ? "mounted" : "unmounted", [a, c] = Sh(i, {
mounted: {
UNMOUNT: "unmounted",
ANIMATION_OUT: "unmountSuspended"
},
unmountSuspended: {
MOUNT: "mounted",
ANIMATION_END: "unmounted"
},
unmounted: {
MOUNT: "mounted"
}
});
return f.useEffect(() => {
const l = Tn(o.current);
s.current = a === "mounted" ? l : "none";
}, [a]), de(() => {
const l = o.current, u = r.current;
if (u !== e) {
const p = s.current, m = Tn(l);
e ? c("MOUNT") : m === "none" || (l == null ? void 0 : l.display) === "none" ? c("UNMOUNT") : c(u && p !== m ? "ANIMATION_OUT" : "UNMOUNT"), r.current = e;
}
}, [e, c]), de(() => {
if (t) {
let l;
const u = t.ownerDocument.defaultView ?? window, d = (m) => {
const g = Tn(o.current).includes(m.animationName);
if (m.target === t && g && (c("ANIMATION_END"), !r.current)) {
const y = t.style.animationFillMode;
t.style.animationFillMode = "forwards", l = u.setTimeout(() => {
t.style.animationFillMode === "forwards" && (t.style.animationFillMode = y);
});
}
}, p = (m) => {
m.target === t && (s.current = Tn(o.current));
};
return t.addEventListener("animationstart", p), t.addEventListener("animationcancel", d), t.addEventListener("animationend", d), () => {
u.clearTimeout(l), t.removeEventListener("animationstart", p), t.removeEventListener("animationcancel", d), t.removeEventListener("animationend", d);
};
} else
c("ANIMATION_END");
}, [t, c]), {
isPresent: ["mounted", "unmountSuspended"].includes(a),
ref: f.useCallback((l) => {
l && (o.current = getComputedStyle(l)), n(l);
}, [])
};
}
function Tn(e) {
return (e == null ? void 0 : e.animationName) || "none";
}
function Eh(e) {
var o, r;
let t = (o = Object.getOwnPropertyDescriptor(e.props, "ref")) == null ? void 0 : o.get, n = t && "isReactWarning" in t && t.isReactWarning;
return n ? e.ref : (t = (r = Object.getOwnPropertyDescriptor(e, "ref")) == null ? void 0 : r.get, n = t && "isReactWarning" in t && t.isReactWarning, n ? e.props.ref : e.props.ref || e.ref);
}
var Nh = f.useId || (() => {
}), Dh = 0;
function vn(e) {
const [t, n] = f.useState(Nh());
return de(() => {
n((o) => o ?? String(Dh++));
}, [e]), t ? `radix-${t}` : "";
}
var Wr = "Collapsible", [Ih, yc] = ie(Wr), [_h, Hr] = Ih(Wr), bc = f.forwardRef(
(e, t) => {
const {
__scopeCollapsible: n,
open: o,
defaultOpen: r,
disabled: s,
onOpenChange: i,
...a
} = e, [c = !1, l] = ct({
prop: o,
defaultProp: r,
onChange: i
});
return /* @__PURE__ */ h(
_h,
{
scope: n,
disabled: s,
contentId: vn(),
open: c,
onOpenToggle: f.useCallback(() => l((u) => !u), [l]),
children: /* @__PURE__ */ h(
k.div,
{
"data-state": Xr(c),
"data-disabled": s ? "" : void 0,
...a,
ref: t
}
)
}
);
}
);
bc.displayName = Wr;
var wc = "CollapsibleTrigger", xc = f.forwardRef(
(e, t) => {
const { __scopeCollapsible: n, ...o } = e, r = Hr(wc, n);
return /* @__PURE__ */ h(
k.button,
{
type: "button",
"aria-controls": r.contentId,
"aria-expanded": r.open || !1,
"data-state": Xr(r.open),
"data-disabled": r.disabled ? "" : void 0,
disabled: r.disabled,
...o,
ref: t,
onClick: S(e.onClick, r.onOpenToggle)
}
);
}
);
xc.displayName = wc;
var Yr = "CollapsibleContent", Cc = f.forwardRef(
(e, t) => {
const { forceMount: n, ...o } = e, r = Hr(Yr, e.__scopeCollapsible);
return /* @__PURE__ */ h(oe, { present: n || r.open, children: ({ present: s }) => /* @__PURE__ */ h(Oh, { ...o, ref: t, present: s }) });
}
);
Cc.displayName = Yr;
var Oh = f.forwardRef((e, t) => {
const { __scopeCollapsible: n, present: o, children: r, ...s } = e, i = Hr(Yr, n), [a, c] = f.useState(o), l = f.useRef(null), u = U(t, l), d = f.useRef(0), p = d.current, m = f.useRef(0), v = m.current, g = i.open || a, y = f.useRef(g), b = f.useRef(void 0);
return f.useEffect(() => {
const w = requestAnimationFrame(() => y.current = !1);
return () => cancelAnimationFrame(w);
}, []), de(() => {
const w = l.current;
if (w) {
b.current = b.current || {
transitionDuration: w.style.transitionDuration,
animationName: w.style.animationName
}, w.style.transitionDuration = "0s", w.style.animationName = "none";
const x = w.getBoundingClientRect();
d.current = x.height, m.current = x.width, y.current || (w.style.transitionDuration = b.current.transitionDuration, w.style.animationName = b.current.animationName), c(o);
}
}, [i.open, o]), /* @__PURE__ */ h(
k.div,
{
"data-state": Xr(i.open),
"data-disabled": i.disabled ? "" : void 0,
id: i.contentId,
hidden: !g,
...s,
ref: u,
style: {
"--radix-collapsible-content-height": p ? `${p}px` : void 0,
"--radix-collapsible-content-width": v ? `${v}px` : void 0,
...e.style
},
children: g && r
}
);
});
function Xr(e) {
return e ? "open" : "closed";
}
var kh = bc, Lh = xc, Vh = Cc, Fh = f.createContext(void 0);
function uo(e) {
const t = f.useContext(Fh);
return e || t || "ltr";
}
var Be = "Accordion", $h = ["Home", "End", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight"], [qr, Bh, jh] = It(Be), [fo, w2] = ie(Be, [
jh,
yc
]), Zr = yc(), zh = Z.forwardRef(
(e, t) => {
const { type: n, ...o } = e, r = o, s = o;
return /* @__PURE__ */ h(qr.Provider, { scope: e.__scopeAccordion, children: n === "multiple" ? /* @__PURE__ */ h(Wh, { ...s, ref: t }) : /* @__PURE__ */ h(Kh, { ...r, ref: t }) });
}
);
zh.displayName = Be;
var [Mc, Gh] = fo(Be), [Pc, Uh] = fo(
Be,
{ collapsible: !1 }
), Kh = Z.forwardRef(
(e, t) => {
const {
value: n,
defaultValue: o,
onValueChange: r = () => {
},
collapsible: s = !1,
...i
} = e, [a, c] = ct({
prop: n,
defaultProp: o,
onChange: r
});
return /* @__PURE__ */ h(
Mc,
{
scope: e.__scopeAccordion,
value: a ? [a] : [],
onItemOpen: c,
onItemClose: Z.useCallback(() => s && c(""), [s, c]),
children: /* @__PURE__ */ h(Pc, { scope: e.__scopeAccordion, collapsible: s, children: /* @__PURE__ */ h(Ac, { ...i, ref: t }) })
}
);
}
), Wh = Z.forwardRef((e, t) => {
const {
value: n,
defaultValue: o,
onValueChange: r = () => {
},
...s
} = e, [i = [], a] = ct({
prop: n,
defaultProp: o,
onChange: r
}), c = Z.useCallback(
(u) => a((d = []) => [...d, u]),
[a]
), l = Z.useCallback(
(u) => a((d = []) => d.filter((p) => p !== u)),
[a]
);
return /* @__PURE__ */ h(
Mc,
{
scope: e.__scopeAccordion,
value: i,
onItemOpen: c,
onItemClose: l,
children: /* @__PURE__ */ h(Pc, { scope: e.__scopeAccordion, collapsible: !0, children: /* @__PURE__ */ h(Ac, { ...s, ref: t }) })
}
);
}), [Hh, po] = fo(Be), Ac = Z.forwardRef(
(e, t) => {
const { __scopeAccordion: n, disabled: o, dir: r, orientation: s = "vertical", ...i } = e, a = Z.useRef(null), c = U(a, t), l = Bh(n), d = uo(r) === "ltr", p = S(e.onKeyDown, (m) => {
var A;
if (!$h.includes(m.key)) return;
const v = m.target, g = l().filter((T) => {
var D;
return !((D = T.ref.current) != null && D.disabled);
}), y = g.findIndex((T) => T.ref.current === v), b = g.length;
if (y === -1) return;
m.preventDefault();
let w = y;
const x = 0, M = b - 1, C = () => {
w = y + 1, w > M && (w = x);
}, P = () => {
w = y - 1, w < x && (w = M);
};
switch (m.key) {
case "Home":
w = x;
break;
case "End":
w = M;
break;
case "ArrowRight":
s === "horizontal" && (d ? C() : P());
break;
case "ArrowDown":
s === "vertical" && C();
break;
case "ArrowLeft":
s === "horizontal" && (d ? P() : C());
break;
case "ArrowUp":
s === "vertical" && P();
break;
}
const R = w % b;
(A = g[R].ref.current) == null || A.focus();
});
return /* @__PURE__ */ h(
Hh,
{
scope: n,
disabled: o,
direction: r,
orientation: s,
children: /* @__PURE__ */ h(qr.Slot, { scope: n, children: /* @__PURE__ */ h(
k.div,
{
...i,
"data-orientation": s,
ref: c,
onKeyDown: o ? void 0 : p
}
) })
}
);
}
), Kn = "AccordionItem", [Yh, Qr] = fo(Kn), Rc = Z.forwardRef(
(e, t) => {
const { __scopeAccordion: n, value: o, ...r } = e, s = po(Kn, n), i = Gh(Kn, n), a = Zr(n), c = vn(), l = o && i.value.includes(o) || !1, u = s.disabled || e.disabled;
return /* @__PURE__ */ h(
Yh,
{
scope: n,
open: l,
disabled: u,
triggerId: c,
children: /* @__PURE__ */ h(
kh,
{
"data-orientation": s.orientation,
"data-state": Ic(l),
...a,
...r,
ref: t,
disabled: u,
open: l,
onOpenChange: (d) => {
d ? i.onItemOpen(o) : i.onItemClose(o);
}
}
)
}
);
}
);
Rc.displayName = Kn;
var Sc = "AccordionHeader", Tc = Z.forwardRef(
(e, t) => {
const { __scopeAccordion: n, ...o } = e, r = po(Be, n), s = Qr(Sc, n);
return /* @__PURE__ */ h(
k.h3,
{
"data-orientation": r.orientation,
"data-state": Ic(s.open),
"data-disabled": s.disabled ? "" : void 0,
...o,
ref: t
}
);
}
);
Tc.displayName = Sc;
var dr = "AccordionTrigger", Ec = Z.forwardRef(
(e, t) => {
const { __scopeAccordion: n, ...o } = e, r = po(Be, n), s = Qr(dr, n), i = Uh(dr, n), a = Zr(n);
return /* @__PURE__ */ h(qr.ItemSlot, { scope: n, children: /* @__PURE__ */ h(
Lh,
{
"aria-disabled": s.open && !i.collapsible || void 0,
"data-orientation": r.orientation,
id: s.triggerId,
...a,
...o,
ref: t
}
) });
}
);
Ec.displayName = dr;
var Nc = "AccordionContent", Dc = Z.forwardRef(
(e, t) => {
const { __scopeAccordion: n, ...o } = e, r = po(Be, n), s = Qr(Nc, n), i = Zr(n);
return /* @__PURE__ */ h(
Vh,
{
role: "region",
"aria-labelledby": s.triggerId,
"data-orientation": r.orientation,
...i,
...o,
ref: t,
style: {
"--radix-accordion-content-height": "var(--radix-collapsible-content-height)",
"--radix-accordion-content-width": "var(--radix-collapsible-content-width)",
...e.style
}
}
);
}
);
Dc.displayName = Nc;
function Ic(e) {
return e ? "open" : "closed";
}
var Xh = Rc, qh = Tc, _c = Ec, Oc = Dc;
function yn(e, t) {
if (e == null) return {};
var n = {}, o = Object.keys(e), r, s;
for (s = 0; s < o.length; s++)
r = o[s], !(t.indexOf(r) >= 0) && (n[r] = e[r]);
return n;
}
var Zh = ["color"], kc = /* @__PURE__ */ Nt(function(e, t) {
var n = e.color, o = n === void 0 ? "currentColor" : n, r = yn(e, Zh);
return xe("svg", Object.assign({
width: "15",
height: "15",
viewBox: "0 0 15 15",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, r, {
ref: t
}), xe("path", {
d: "M11.4669 3.72684C11.7558 3.91574 11.8369 4.30308 11.648 4.59198L7.39799 11.092C7.29783 11.2452 7.13556 11.3467 6.95402 11.3699C6.77247 11.3931 6.58989 11.3355 6.45446 11.2124L3.70446 8.71241C3.44905 8.48022 3.43023 8.08494 3.66242 7.82953C3.89461 7.57412 4.28989 7.55529 4.5453 7.78749L6.75292 9.79441L10.6018 3.90792C10.7907 3.61902 11.178 3.53795 11.4669 3.72684Z",
fill: o,
fillRule: "evenodd",
clipRule: "evenodd"
}));
}), Qh = ["color"], Lc = /* @__PURE__ */ Nt(function(e, t) {
var n = e.color, o = n === void 0 ? "currentColor" : n, r = yn(e, Qh);
return xe("svg", Object.assign({
width: "15",
height: "15",
viewBox: "0 0 15 15",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, r, {
ref: t
}), xe("path", {
d: "M3.13523 6.15803C3.3241 5.95657 3.64052 5.94637 3.84197 6.13523L7.5 9.56464L11.158 6.13523C11.3595 5.94637 11.6759 5.95657 11.8648 6.15803C12.0536 6.35949 12.0434 6.67591 11.842 6.86477L7.84197 10.6148C7.64964 10.7951 7.35036 10.7951 7.15803 10.6148L3.15803 6.86477C2.95657 6.67591 2.94637 6.35949 3.13523 6.15803Z",
fill: o,
fillRule: "evenodd",
clipRule: "evenodd"
}));
}), Jh = ["color"], Vc = /* @__PURE__ */ Nt(function(e, t) {
var n = e.color, o = n === void 0 ? "currentColor" : n, r = yn(e, Jh);
return xe("svg", Object.assign({
width: "15",
height: "15",
viewBox: "0 0 15 15",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, r, {
ref: t
}), xe("path", {
d: "M6.1584 3.13508C6.35985 2.94621 6.67627 2.95642 6.86514 3.15788L10.6151 7.15788C10.7954 7.3502 10.7954 7.64949 10.6151 7.84182L6.86514 11.8418C6.67627 12.0433 6.35985 12.0535 6.1584 11.8646C5.95694 11.6757 5.94673 11.3593 6.1356 11.1579L9.565 7.49985L6.1356 3.84182C5.94673 3.64036 5.95694 3.32394 6.1584 3.13508Z",
fill: o,
fillRule: "evenodd",
clipRule: "evenodd"
}));
}), em = ["color"], Fc = /* @__PURE__ */ Nt(function(e, t) {
var n = e.color, o = n === void 0 ? "currentColor" : n, r = yn(e, em);
return xe("svg", Object.assign({
width: "15",
height: "15",
viewBox: "0 0 15 15",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, r, {
ref: t
}), xe("path", {
d: "M11.7816 4.03157C12.0062 3.80702 12.0062 3.44295 11.7816 3.2184C11.5571 2.99385 11.193 2.99385 10.9685 3.2184L7.50005 6.68682L4.03164 3.2184C3.80708 2.99385 3.44301 2.99385 3.21846 3.2184C2.99391 3.44295 2.99391 3.80702 3.21846 4.03157L6.68688 7.49999L3.21846 10.9684C2.99391 11.193 2.99391 11.557 3.21846 11.7816C3.44301 12.0061 3.80708 12.0061 4.03164 11.7816L7.50005 8.31316L10.9685 11.7816C11.193 12.0061 11.5571 12.0061 11.7816 11.7816C12.0062 11.557 12.0062 11.193 11.7816 10.9684L8.31322 7.49999L11.7816 4.03157Z",
fill: o,
fillRule: "evenodd",
clipRule: "evenodd"
}));
}), tm = ["color"], $c = /* @__PURE__ */ Nt(function(e, t) {
var n = e.color, o = n === void 0 ? "currentColor" : n, r = yn(e, tm);
return xe("svg", Object.assign({
width: "15",
height: "15",
viewBox: "0 0 15 15",
fill: "none",
xmlns: "http://www.w3.org/2000/svg"
}, r, {
ref: t
}), xe("path", {
d: "M9.875 7.5C9.875 8.81168 8.81168 9.875 7.5 9.875C6.18832 9.875 5.125 8.81168 5.125 7.5C5.125 6.18832 6.18832 5.125 7.5 5.125C8.81168 5.125 9.875 6.18832 9.875 7.5Z",
fill: o
}));
});
function Bc(e) {
var t, n, o = "";
if (typeof e == "string" || typeof e == "number") o += e;
else if (typeof e == "object") if (Array.isArray(e)) {
var r = e.length;
for (t = 0; t < r; t++) e[t] && (n = Bc(e[t])) && (o && (o += " "), o += n);
} else for (n in e) e[n] && (o && (o += " "), o += n);
return o;
}
function nm() {
for (var e, t, n = 0, o = "", r = arguments.length; n < r; n++) (e = arguments[n]) && (t = Bc(e)) && (o && (o += " "), o += t);
return o;
}
const Jr = "-", om = (e) => {
const t = sm(e), {
conflictingClassGroups: n,
conflictingClassGroupModifiers: o
} = e;
return {
getClassGroupId: (i) => {
const a = i.split(Jr);
return a[0] === "" && a.length !== 1 && a.shift(), jc(a, t) || rm(i);
},
getConflictingClassGroupIds: (i, a) => {
const c = n[i] || [];
return a && o[i] ? [...c, ...o[i]] : c;
}
};
}, jc = (e, t) => {
var i;
if (e.length === 0)
return t.classGroupId;
const n = e[0], o = t.nextPart.get(n), r = o ? jc(e.slice(1), o) : void 0;
if (r)
return r;
if (t.validators.length === 0)
return;
const s = e.join(Jr);
return (i = t.validators.find(({
validator: a
}) => a(s))) == null ? void 0 : i.classGroupId;
}, yi = /^\[(.+)\]$/, rm = (e) => {
if (yi.test(e)) {
const t = yi.exec(e)[1], n = t == null ? void 0 : t.substring(0, t.indexOf(":"));
if (n)
return "arbitrary.." + n;
}
}, sm = (e) => {
const {
theme: t,
prefix: n
} = e, o = {
nextPart: /* @__PURE__ */ new Map(),
validators: []
};
return am(Object.entries(e.classGroups), n).forEach(([s, i]) => {
fr(i, o, s, t);
}), o;
}, fr = (e, t, n, o) => {
e.forEach((r) => {
if (typeof r == "string") {
const s = r === "" ? t : bi(t, r);
s.classGroupId = n;
return;
}
if (typeof r == "function") {
if (im(r)) {
fr(r(o), t, n, o);
return;
}
t.validators.push({
validator: r,
classGroupId: n
});
return;
}
Object.entries(r).forEach(([s, i]) => {
fr(i, bi(t, s), n, o);
});
});
}, bi = (e, t) => {
let n = e;
return t.split(Jr).forEach((o) => {
n.nextPart.has(o) || n.nextPart.set(o, {
nextPart: /* @__PURE__ */ new Map(),
validators: []
}), n = n.nextPart.get(o);
}), n;
}, im = (e) => e.isThemeGetter, am = (e, t) => t ? e.map(([n, o]) => {
const r = o.map((s) => typeof s == "string" ? t + s : typeof s == "object" ? Object.fromEntries(Object.entries(s).map(([i, a]) => [t + i, a])) : s);
return [n, r];
}) : e, cm = (e) => {
if (e < 1)
return {
get: () => {
},
set: () => {
}
};
let t = 0, n = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map();
const r = (s, i) => {
n.set(s, i), t++, t > e && (t = 0, o = n, n = /* @__PURE__ */ new Map());
};
return {
get(s) {
let i = n.get(s);
if (i !== void 0)
return i;
if ((i = o.get(s)) !== void 0)
return r(s, i), i;
},
set(s, i) {
n.has(s) ? n.set(s, i) : r(s, i);
}
};
}, zc = "!", lm = (e) => {
const {
separator: t,
experimentalParseClassName: n
} = e, o = t.length === 1, r = t[0], s = t.length, i = (a) => {
const c = [];
let l = 0, u = 0, d;
for (let y = 0; y < a.length; y++) {
let b = a[y];
if (l === 0) {
if (b === r && (o || a.slice(y, y + s) === t)) {
c.push(a.slice(u, y)), u = y + s;
continue;
}
if (b === "/") {
d = y;
continue;
}
}
b === "[" ? l++ : b === "]" && l--;
}
const p = c.length === 0 ? a : a.substring(u), m = p.startsWith(zc), v = m ? p.substring(1) : p, g = d && d > u ? d - u : void 0;
return {
modifiers: c,
hasImportantModifier: m,
baseClassName: v,
maybePostfixModifierPosition: g
};
};
return n ? (a) => n({
className: a,
parseClassName: i
}) : i;
}, um = (e) => {
if (e.length <= 1)
return e;
const t = [];
let n = [];
return e.forEach((o) => {
o[0] === "[" ? (t.push(...n.sort(), o), n = []) : n.push(o);
}), t.push(...n.sort()), t;
}, dm = (e) => ({
cache: cm(e.cacheSize),
parseClassName: lm(e),
...om(e)
}), fm = /\s+/, pm = (e, t) => {
const {
parseClassName: n,
getClassGroupId: o,
getConflictingClassGroupIds: r
} = t, s = [], i = e.trim().split(fm);
let a = "";
for (let c = i.length - 1; c >= 0; c -= 1) {
const l = i[c], {
modifiers: u,
hasImportantModifier: d,
baseClassName: p,
maybePostfixModifierPosition: m
} = n(l);
let v = !!m, g = o(v ? p.substring(0, m) : p);
if (!g) {
if (!v) {
a = l + (a.length > 0 ? " " + a : a);
continue;
}
if (g = o(p), !g) {
a = l + (a.length > 0 ? " " + a : a);
continue;
}
v = !1;
}
const y = um(u).join(":"), b = d ? y + zc : y, w = b + g;
if (s.includes(w))
continue;
s.push(w);
const x = r(g, v);
for (let M = 0; M < x.length; ++M) {
const C = x[M];
s.push(b + C);
}
a = l + (a.length > 0 ? " " + a : a);
}
return a;
};
function hm() {
let e = 0, t, n, o = "";
for (; e < arguments.length; )
(t = arguments[e++]) && (n = Gc(t)) && (o && (o += " "), o += n);
return o;
}
const Gc = (e) => {
if (typeof e == "string")
return e;
let t, n = "";
for (let o = 0; o < e.length; o++)
e[o] && (t = Gc(e[o])) && (n && (n += " "), n += t);
return n;
};
function mm(e, ...t) {
let n, o, r, s = i;
function i(c) {
const l = t.reduce((u, d) => d(u), e());
return n = dm(l), o = n.cache.get, r = n.cache.set, s = a, a(c);
}
function a(c) {
const l = o(c);
if (l)
return l;
const u = pm(c, n);
return r(c, u), u;
}
return function() {
return s(hm.apply(null, arguments));
};
}
const W = (e) => {
const t = (n) => n[e] || [];
return t.isThemeGetter = !0, t;
}, Uc = /^\[(?:([a-z-]+):)?(.+)\]$/i, gm = /^\d+\/\d+$/, vm = /* @__PURE__ */ new Set(["px", "full", "screen"]), ym = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/, bm = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/, wm = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/, xm = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/, Cm = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/, Oe = (e) => wt(e) || vm.has(e) || gm.test(e), je = (e) => _t(e, "length", Nm), wt = (e) => !!e && !Number.isNaN(Number(e)), jo = (e) => _t(e, "number", wt), Wt = (e) => !!e && Number.isInteger(Number(e)), Mm = (e) => e.endsWith("%") && wt(e.slice(0, -1)), L = (e) => Uc.test(e), ze = (e) => ym.test(e), Pm = /* @__PURE__ */ new Set(["length", "size", "percentage"]), Am = (e) => _t(e, Pm, Kc), Rm = (e) => _t(e, "position", Kc), Sm = /* @__PURE__ */ new Set(["image", "url"]), Tm = (e) => _t(e, Sm, Im), Em = (e) => _t(e, "", Dm), Ht = () => !0, _t = (e, t, n) => {
const o = Uc.exec(e);
return o ? o[1] ? typeof t == "string" ? o[1] === t : t.has(o[1]) : n(o[2]) : !1;
}, Nm = (e) => (
// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
// For example, `hsl(0 0% 0%)` would be classified as a length without this check.
// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
bm.test(e) && !wm.test(e)
), Kc = () => !1, Dm = (e) => xm.test(e), Im = (e) => Cm.test(e), _m = () => {
const e = W("colors"), t = W("spacing"), n = W("blur"), o = W("brightness"), r = W("borderColor"), s = W("borderRadius"), i = W("borderSpacing"), a = W("borderWidth"), c = W("contrast"), l = W("grayscale"), u = W("hueRotate"), d = W("invert"), p = W("gap"), m = W("gradientColorStops"), v = W("gradientColorStopPositions"), g = W("inset"), y = W("margin"), b = W("opacity"), w = W("padding"), x = W("saturate"), M = W("scale"), C = W("sepia"), P = W("skew"), R = W("space"), A = W("translate"), T = () => ["auto", "contain", "none"], D = () => ["auto", "hidden", "clip", "visible", "scroll"], F = () => ["auto", L, t], _ = () => [L, t], G = () => ["", Oe, je], B = () => ["auto", wt, L], Q = () => ["bottom", "center", "left", "left-bottom", "left-top", "right", "right-bottom", "right-top", "top"], $ = () => ["solid", "dashed", "dotted", "double", "none"], V = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"], I = () => ["start", "end", "center", "between", "around", "evenly", "stretch"], E = () => ["", "0", L], z = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"], K = () => [wt, L];
return {
cacheSize: 500,
separator: ":",
theme: {
colors: [Ht],
spacing: [Oe, je],
blur: ["none", "", ze, L],
brightness: K(),
borderColor: [e],
borderRadius: ["none", "", "full", ze, L],
borderSpacing: _(),
borderWidth: G(),
contrast: K(),
grayscale: E(),
hueRotate: K(),
invert: E(),
gap: _(),
gradientColorStops: [e],
gradientColorStopPositions: [Mm, je],
inset: F(),
margin: F(),
opacity: K(),
padding: _(),
saturate: K(),
scale: K(),
sepia: E(),
skew: K(),
space: _(),
translate: _()
},
classGroups: {
// Layout
/**
* Aspect Ratio
* @see https://tailwindcss.com/docs/aspect-ratio
*/
aspect: [{
aspect: ["auto", "square", "video", L]
}],
/**
* Container
* @see https://tailwindcss.com/docs/container
*/
container: ["container"],
/**
* Columns
* @see https://tailwindcss.com/docs/columns
*/
columns: [{
columns: [ze]
}],
/**
* Break After
* @see https://tailwindcss.com/docs/break-after
*/
"break-after": [{
"break-after": z()
}],
/**
* Break Before
* @see https://tailwindcss.com/docs/break-before
*/
"break-before": [{
"break-before": z()
}],
/**
* Break Inside
* @see https://tailwindcss.com/docs/break-inside
*/
"break-inside": [{
"break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
}],
/**
* Box Decoration Break
* @see https://tailwindcss.com/docs/box-decoration-break
*/
"box-decoration": [{
"box-decoration": ["slice", "clone"]
}],
/**
* Box Sizing
* @see https://tailwindcss.com/docs/box-sizing
*/
box: [{
box: ["border", "content"]
}],
/**
* Display
* @see https://tailwindcss.com/docs/display
*/
display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
/**
* Floats
* @see https://tailwindcss.com/docs/float
*/
float: [{
float: ["right", "left", "none", "start", "end"]
}],
/**
* Clear
* @see https://tailwindcss.com/docs/clear
*/
clear: [{
clear: ["left", "right", "both", "none", "start", "end"]
}],
/**
* Isolation
* @see https://tailwindcss.com/docs/isolation
*/
isolation: ["isolate", "isolation-auto"],
/**
* Object Fit
* @see https://tailwindcss.com/docs/object-fit
*/
"object-fit": [{
object: ["contain", "cover", "fill", "none", "scale-down"]
}],
/**
* Object Position
* @see https://tailwindcss.com/docs/object-position
*/
"object-position": [{
object: [...Q(), L]
}],
/**
* Overflow
* @see https://tailwindcss.com/docs/overflow
*/
overflow: [{
overflow: D()
}],
/**
* Overflow X
* @see https://tailwindcss.com/docs/overflow
*/
"overflow-x": [{
"overflow-x": D()
}],
/**
* Overflow Y
* @see https://tailwindcss.com/docs/overflow
*/
"overflow-y": [{
"overflow-y": D()
}],
/**
* Overscroll Behavior
* @see https://tailwindcss.com/docs/overscroll-behavior
*/
overscroll: [{
overscroll: T()
}],
/**
* Overscroll Behavior X
* @see https://tailwindcss.com/docs/overscroll-behavior
*/
"overscroll-x": [{
"overscroll-x": T()
}],
/**
* Overscroll Behavior Y
* @see https://tailwindcss.com/docs/overscroll-behavior
*/
"overscroll-y": [{
"overscroll-y": T()
}],
/**
* Position
* @see https://tailwindcss.com/docs/position
*/
position: ["static", "fixed", "absolute", "relative", "sticky"],
/**
* Top / Right / Bottom / Left
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
inset: [{
inset: [g]
}],
/**
* Right / Left
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
"inset-x": [{
"inset-x": [g]
}],
/**
* Top / Bottom
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
"inset-y": [{
"inset-y": [g]
}],
/**
* Start
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
start: [{
start: [g]
}],
/**
* End
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
end: [{
end: [g]
}],
/**
* Top
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
top: [{
top: [g]
}],
/**
* Right
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
right: [{
right: [g]
}],
/**
* Bottom
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
bottom: [{
bottom: [g]
}],
/**
* Left
* @see https://tailwindcss.com/docs/top-right-bottom-left
*/
left: [{
left: [g]
}],
/**
* Visibility
* @see https://tailwindcss.com/docs/visibility
*/
visibility: ["visible", "invisible", "collapse"],
/**
* Z-Index
* @see https://tailwindcss.com/docs/z-index
*/
z: [{
z: ["auto", Wt, L]
}],
// Flexbox and Grid
/**
* Flex Basis
* @see https://tailwindcss.com/docs/flex-basis
*/
basis: [{
basis: F()
}],
/**
* Flex Direction
* @see https://tailwindcss.com/docs/flex-direction
*/
"flex-direction": [{
flex: ["row", "row-reverse", "col", "col-reverse"]
}],
/**
* Flex Wrap
* @see https://tailwindcss.com/docs/flex-wrap
*/
"flex-wrap": [{
flex: ["wrap", "wrap-reverse", "nowrap"]
}],
/**
* Flex
* @see https://tailwindcss.com/docs/flex
*/
flex: [{
flex: ["1", "auto", "initial", "none", L]
}],
/**
* Flex Grow
* @see https://tailwindcss.com/docs/flex-grow
*/
grow: [{
grow: E()
}],
/**
* Flex Shrink
* @see https://tailwindcss.com/docs/flex-shrink
*/
shrink: [{
shrink: E()
}],
/**
* Order
* @see https://tailwindcss.com/docs/order
*/
order: [{
order: ["first", "last", "none", Wt, L]
}],
/**
* Grid Template Columns
* @see https://tailwindcss.com/docs/grid-template-columns
*/
"grid-cols": [{
"grid-cols": [Ht]
}],
/**
* Grid Column Start / End
* @see https://tailwindcss.com/docs/grid-column
*/
"col-start-end": [{
col: ["auto", {
span: ["full", Wt, L]
}, L]
}],
/**
* Grid Column Start
* @see https://tailwindcss.com/docs/grid-column
*/
"col-start": [{
"col-start": B()
}],
/**
* Grid Column End
* @see https://tailwindcss.com/docs/grid-column
*/
"col-end": [{
"col-end": B()
}],
/**
* Grid Template Rows
* @see https://tailwindcss.com/docs/grid-template-rows
*/
"grid-rows": [{
"grid-rows": [Ht]
}],
/**
* Grid Row Start / End
* @see https://tailwindcss.com/docs/grid-row
*/
"row-start-end": [{
row: ["auto", {
span: [Wt, L]
}, L]
}],
/**
* Grid Row Start
* @see https://tailwindcss.com/docs/grid-row
*/
"row-start": [{
"row-start": B()
}],
/**
* Grid Row End
* @see https://tailwindcss.com/docs/grid-row
*/
"row-end": [{
"row-end": B()
}],
/**
* Grid Auto Flow
* @see https://tailwindcss.com/docs/grid-auto-flow
*/
"grid-flow": [{
"grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
}],
/**
* Grid Auto Columns
* @see https://tailwindcss.com/docs/grid-auto-columns
*/
"auto-cols": [{
"auto-cols": ["auto", "min", "max", "fr", L]
}],
/**
* Grid Auto Rows
* @see https://tailwindcss.com/docs/grid-auto-rows
*/
"auto-rows": [{
"auto-rows": ["auto", "min", "max", "fr", L]
}],
/**
* Gap
* @see https://tailwindcss.com/docs/gap
*/
gap: [{
gap: [p]
}],
/**
* Gap X
* @see https://tailwindcss.com/docs/gap
*/
"gap-x": [{
"gap-x": [p]
}],
/**
* Gap Y
* @see https://tailwindcss.com/docs/gap
*/
"gap-y": [{
"gap-y": [p]
}],
/**
* Justify Content
* @see https://tailwindcss.com/docs/justify-content
*/
"justify-content": [{
justify: ["normal", ...I()]
}],
/**
* Justify Items
* @see https://tailwindcss.com/docs/justify-items
*/
"justify-items": [{
"justify-items": ["start", "end", "center", "stretch"]
}],
/**
* Justify Self
* @see https://tailwindcss.com/docs/justify-self
*/
"justify-self": [{
"justify-self": ["auto", "start", "end", "center", "stretch"]
}],
/**
* Align Content
* @see https://tailwindcss.com/docs/align-content
*/
"align-content": [{
content: ["normal", ...I(), "baseline"]
}],
/**
* Align Items
* @see https://tailwindcss.com/docs/align-items
*/
"align-items": [{
items: ["start", "end", "center", "baseline", "stretch"]
}],
/**
* Align Self
* @see https://tailwindcss.com/docs/align-self
*/
"align-self": [{
self: ["auto", "start", "end", "center", "stretch", "baseline"]
}],
/**
* Place Content
* @see https://tailwindcss.com/docs/place-content
*/
"place-content": [{
"place-content": [...I(), "baseline"]
}],
/**
* Place Items
* @see https://tailwindcss.com/docs/place-items
*/
"place-items": [{
"place-items": ["start", "end", "center", "baseline", "stretch"]
}],
/**
* Place Self
* @see https://tailwindcss.com/docs/place-self
*/
"place-self": [{
"place-self": ["auto", "start", "end", "center", "stretch"]
}],
// Spacing
/**
* Padding
* @see https://tailwindcss.com/docs/padding
*/
p: [{
p: [w]
}],
/**
* Padding X
* @see https://tailwindcss.com/docs/padding
*/
px: [{
px: [w]
}],
/**
* Padding Y
* @see https://tailwindcss.com/docs/padding
*/
py: [{
py: [w]
}],
/**
* Padding Start
* @see https://tailwindcss.com/docs/padding
*/
ps: [{
ps: [w]
}],
/**
* Padding End
* @see https://tailwindcss.com/docs/padding
*/
pe: [{
pe: [w]
}],
/**
* Padding Top
* @see https://tailwindcss.com/docs/padding
*/
pt: [{
pt: [w]
}],
/**
* Padding Right
* @see https://tailwindcss.com/docs/padding
*/
pr: [{
pr: [w]
}],
/**
* Padding Bottom
* @see https://tailwindcss.com/docs/padding
*/
pb: [{
pb: [w]
}],
/**
* Padding Left
* @see https://tailwindcss.com/docs/padding
*/
pl: [{
pl: [w]
}],
/**
* Margin
* @see https://tailwindcss.com/docs/margin
*/
m: [{
m: [y]
}],
/**
* Margin X
* @see https://tailwindcss.com/docs/margin
*/
mx: [{
mx: [y]
}],
/**
* Margin Y
* @see https://tailwindcss.com/docs/margin
*/
my: [{
my: [y]
}],
/**
* Margin Start
* @see https://tailwindcss.com/docs/margin
*/
ms: [{
ms: [y]
}],
/**
* Margin End
* @see https://tailwindcss.com/docs/margin
*/
me: [{
me: [y]
}],
/**
* Margin Top
* @see https://tailwindcss.com/docs/margin
*/
mt: [{
mt: [y]
}],
/**
* Margin Right
* @see https://tailwindcss.com/docs/margin
*/
mr: [{
mr: [y]
}],
/**
* Margin Bottom
* @see https://tailwindcss.com/docs/margin
*/
mb: [{
mb: [y]
}],
/**
* Margin Left
* @see https://tailwindcss.com/docs/margin
*/
ml: [{
ml: [y]
}],
/**
* Space Between X
* @see https://tailwindcss.com/docs/space
*/
"space-x": [{
"space-x": [R]
}],
/**
* Space Between X Reverse
* @see https://tailwindcss.com/docs/space
*/
"space-x-reverse": ["space-x-reverse"],
/**
* Space Between Y
* @see https://tailwindcss.com/docs/space
*/
"space-y": [{
"space-y": [R]
}],
/**
* Space Between Y Reverse
* @see https://tailwindcss.com/docs/space
*/
"space-y-reverse": ["space-y-reverse"],
// Sizing
/**
* Width
* @see https://tailwindcss.com/docs/width
*/
w: [{
w: ["auto", "min", "max", "fit", "svw", "lvw", "dvw", L, t]
}],
/**
* Min-Width
* @see https://tailwindcss.com/docs/min-width
*/
"min-w": [{
"min-w": [L, t, "min", "max", "fit"]
}],
/**
* Max-Width
* @see https://tailwindcss.com/docs/max-width
*/
"max-w": [{
"max-w": [L, t, "none", "full", "min", "max", "fit", "prose", {
screen: [ze]
}, ze]
}],
/**
* Height
* @see https://tailwindcss.com/docs/height
*/
h: [{
h: [L, t, "auto", "min", "max", "fit", "svh", "lvh", "dvh"]
}],
/**
* Min-Height
* @see https://tailwindcss.com/docs/min-height
*/
"min-h": [{
"min-h": [L, t, "min", "max", "fit", "svh", "lvh", "dvh"]
}],
/**
* Max-Height
* @see https://tailwindcss.com/docs/max-height
*/
"max-h": [{
"max-h": [L, t, "min", "max", "fit", "svh", "lvh", "dvh"]
}],
/**
* Size
* @see https://tailwindcss.com/docs/size
*/
size: [{
size: [L, t, "auto", "min", "max", "fit"]
}],
// Typography
/**
* Font Size
* @see https://tailwindcss.com/docs/font-size
*/
"font-size": [{
text: ["base", ze, je]
}],
/**
* Font Smoothing
* @see https://tailwindcss.com/docs/font-smoothing
*/
"font-smoothing": ["antialiased", "subpixel-antialiased"],
/**
* Font Style
* @see https://tailwindcss.com/docs/font-style
*/
"font-style": ["italic", "not-italic"],
/**
* Font Weight
* @see https://tailwindcss.com/docs/font-weight
*/
"font-weight": [{
font: ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black", jo]
}],
/**
* Font Family
* @see https://tailwindcss.com/docs/font-family
*/
"font-family": [{
font: [Ht]
}],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-normal": ["normal-nums"],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-ordinal": ["ordinal"],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-slashed-zero": ["slashed-zero"],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-figure": ["lining-nums", "oldstyle-nums"],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-spacing": ["proportional-nums", "tabular-nums"],
/**
* Font Variant Numeric
* @see https://tailwindcss.com/docs/font-variant-numeric
*/
"fvn-fraction": ["diagonal-fractions", "stacked-fractons"],
/**
* Letter Spacing
* @see https://tailwindcss.com/docs/letter-spacing
*/
tracking: [{
tracking: ["tighter", "tight", "normal", "wide", "wider", "