twind
Version:
compiles tailwind like shorthand syntax into css at runtime
1,551 lines (1,539 loc) • 64.8 kB
JavaScript
// src/internal/util.ts
var includes = (value, search) => !!~value.indexOf(search);
var join = (parts, separator = "-") => parts.join(separator);
var joinTruthy = (parts, separator) => join(parts.filter(Boolean), separator);
var tail = (array, startIndex = 1) => array.slice(startIndex);
var identity = (value) => value;
var noop = () => {
};
var capitalize = (value) => value[0].toUpperCase() + tail(value);
var hyphenate = (value) => value.replace(/[A-Z]/g, "-$&").toLowerCase();
var evalThunk = (value, context) => {
while (typeof value == "function") {
value = value(context);
}
return value;
};
var ensureMaxSize = (map, max) => {
if (map.size > max) {
map.delete(map.keys().next().value);
}
};
var isCSSProperty = (key, value) => !includes("@:&", key[0]) && (includes("rg", (typeof value)[5]) || Array.isArray(value));
var merge = (target, source, context) => source ? Object.keys(source).reduce((target2, key) => {
const value = evalThunk(source[key], context);
if (isCSSProperty(key, value)) {
target2[hyphenate(key)] = value;
} else {
target2[key] = key[0] == "@" && includes("figa", key[1]) ? (target2[key] || []).concat(value) : merge(target2[key] || {}, value, context);
}
return target2;
}, target) : target;
var escape = typeof CSS !== "undefined" && CSS.escape || ((className) => className.replace(/[!"'`*+.,;:\\/<=>?@#$%&^|~()[\]{}]/g, "\\$&").replace(/^\d/, "\\3$& "));
var buildMediaQuery = (screen) => {
if (!Array.isArray(screen)) {
screen = [screen];
}
return "@media " + join(screen.map((screen2) => {
if (typeof screen2 == "string") {
screen2 = {min: screen2};
}
return screen2.raw || join(Object.keys(screen2).map((feature) => `(${feature}-width:${screen2[feature]})`), " and ");
}), ",");
};
var cyrb32 = (value) => {
for (var h = 9, index = value.length; index--; ) {
h = Math.imul(h ^ value.charCodeAt(index), 1597334677);
}
return "tw-" + ((h ^ h >>> 9) >>> 0).toString(36);
};
var sortedInsertionIndex = (array, element) => {
for (var low = 0, high = array.length; low < high; ) {
const pivot = high + low >> 1;
if (array[pivot] <= element) {
low = pivot + 1;
} else {
high = pivot;
}
}
return high;
};
// src/twind/parse.ts
var groupings;
var rules;
var startGrouping = (value = "") => {
groupings.push(value);
return "";
};
var endGrouping = (isWhitespace) => {
groupings.length = Math.max(groupings.lastIndexOf("") + ~~isWhitespace, 0);
};
var onlyPrefixes = (s) => s && !includes("!:", s[0]);
var onlyVariants = (s) => s[0] == ":";
var addRule = (directive2, negate) => {
rules.push({
v: groupings.filter(onlyVariants),
d: directive2,
n: negate,
i: includes(groupings, "!"),
$: ""
});
};
var saveRule = (buffer) => {
const negate = buffer[0] == "-";
if (negate) {
buffer = tail(buffer);
}
const prefix = join(groupings.filter(onlyPrefixes));
addRule(buffer == "&" ? prefix : (prefix && prefix + "-") + buffer, negate);
return "";
};
var parseString = (token, isVariant) => {
let buffer = "";
for (let char, dynamic = false, position2 = 0; char = token[position2++]; ) {
if (dynamic || char == "[") {
buffer += char;
dynamic = char != "]";
continue;
}
switch (char) {
case ":":
buffer = buffer && startGrouping(":" + (token[position2] == char ? token[position2++] : "") + buffer);
break;
case "(":
buffer = buffer && startGrouping(buffer);
startGrouping();
break;
case "!":
startGrouping(char);
break;
case ")":
case " ":
case " ":
case "\n":
case "\r":
buffer = buffer && saveRule(buffer);
endGrouping(char !== ")");
break;
default:
buffer += char;
}
}
if (buffer) {
if (isVariant) {
startGrouping(":" + buffer);
} else if (buffer.slice(-1) == "-") {
startGrouping(buffer.slice(0, -1));
} else {
saveRule(buffer);
}
}
};
var parseGroupedToken = (token) => {
startGrouping();
parseToken(token);
endGrouping();
};
var parseGroup = (key, token) => {
if (token) {
startGrouping();
const isVariant = includes("tbu", (typeof token)[1]);
parseString(key, isVariant);
if (isVariant) {
parseGroupedToken(token);
}
endGrouping();
}
};
var parseToken = (token) => {
switch (typeof token) {
case "string":
parseString(token);
break;
case "function":
addRule(token);
break;
case "object":
if (Array.isArray(token)) {
token.forEach(parseGroupedToken);
} else if (token) {
Object.keys(token).forEach((key) => {
parseGroup(key, token[key]);
});
}
}
};
var staticsCaches = new WeakMap();
var buildStatics = (strings) => {
let statics = staticsCaches.get(strings);
if (!statics) {
let slowModeIndex = NaN;
let buffer = "";
statics = strings.map((token, index) => {
if (slowModeIndex !== slowModeIndex && (token.slice(-1) == "[" || includes(":-(", (strings[index + 1] || "")[0]))) {
slowModeIndex = index;
}
if (index >= slowModeIndex) {
return (interpolation) => {
if (index == slowModeIndex) {
buffer = "";
}
buffer += token;
if (includes("rg", (typeof interpolation)[5])) {
buffer += interpolation;
} else if (interpolation) {
parseString(buffer);
buffer = "";
parseToken(interpolation);
}
if (index == strings.length - 1) {
parseString(buffer);
}
};
}
const staticRules = rules = [];
parseString(token);
const activeGroupings = [...groupings];
rules = [];
return (interpolation) => {
rules.push(...staticRules);
groupings = [...activeGroupings];
if (interpolation) {
parseToken(interpolation);
}
};
});
staticsCaches.set(strings, statics);
}
return statics;
};
var parse = (tokens) => {
groupings = [];
rules = [];
if (Array.isArray(tokens[0]) && Array.isArray(tokens[0].raw)) {
buildStatics(tokens[0]).forEach((apply2, index) => apply2(tokens[index + 1]));
} else {
parseToken(tokens);
}
return rules;
};
// src/twind/directive.ts
var isFunctionFree;
var detectFunction = (key, value) => {
if (typeof value == "function") {
isFunctionFree = false;
}
return value;
};
var stringify = (data) => {
isFunctionFree = true;
const key = JSON.stringify(data, detectFunction);
return isFunctionFree && key;
};
var cacheByFactory = new WeakMap();
var directive = (factory, data) => {
const key = stringify(data);
let directive2;
if (key) {
var cache = cacheByFactory.get(factory);
if (!cache) {
cacheByFactory.set(factory, cache = new Map());
}
directive2 = cache.get(key);
}
if (!directive2) {
directive2 = Object.defineProperty((params, context) => {
context = Array.isArray(params) ? context : params;
return evalThunk(factory(data, context), context);
}, "toJSON", {
value: () => key || data
});
if (cache) {
cache.set(key, directive2);
ensureMaxSize(cache, 1e4);
}
}
return directive2;
};
// src/twind/apply.ts
var applyFactory = (tokens, {css}) => css(parse(tokens));
var apply = (...tokens) => directive(applyFactory, tokens);
// src/twind/helpers.ts
var positions = (resolve) => (value, position2, prefix, suffix) => {
if (value) {
const properties = position2 && resolve(position2);
if (properties && properties.length > 0) {
return properties.reduce((declarations, property2) => {
declarations[joinTruthy([prefix, property2, suffix])] = value;
return declarations;
}, {});
}
}
};
var corners = /* @__PURE__ */ positions((key) => ({
t: ["top-left", "top-right"],
r: ["top-right", "bottom-right"],
b: ["bottom-left", "bottom-right"],
l: ["bottom-left", "top-left"],
tl: ["top-left"],
tr: ["top-right"],
bl: ["bottom-left"],
br: ["bottom-right"]
})[key]);
var expandEdges = (key) => {
const parts = ({x: "lr", y: "tb"}[key] || key || "").split("").sort();
for (let index = parts.length; index--; ) {
if (!(parts[index] = {
t: "top",
r: "right",
b: "bottom",
l: "left"
}[parts[index]]))
return;
}
if (parts.length)
return parts;
};
var edges = /* @__PURE__ */ positions(expandEdges);
var stringifyVariant = (selector, variant) => selector + (variant[1] == ":" ? tail(variant, 2) + ":" : tail(variant)) + ":";
var stringifyRule = (rule, directive2 = rule.d) => typeof directive2 == "function" ? "" : rule.v.reduce(stringifyVariant, "") + (rule.i ? "!" : "") + (rule.n ? "-" : "") + directive2;
// src/twind/plugins.ts
var _;
var __;
var $;
var toColumnsOrRows = (x) => x == "cols" ? "columns" : "rows";
var property = (property2) => (params, context, id) => ({
[property2]: id + ((_ = join(params)) && "-" + _)
});
var propertyValue = (property2, separator) => (params, context, id) => (_ = join(params, separator)) && {
[property2 || id]: _
};
var themeProperty = (section) => (params, {theme: theme2}, id) => (_ = theme2(section || id, params)) && {
[section || id]: _
};
var themePropertyFallback = (section, separator) => (params, {theme: theme2}, id) => (_ = theme2(section || id, params, join(params, separator))) && {
[section || id]: _
};
var alias = (handler, name) => (params, context) => handler(params, context, name);
var display = property("display");
var position = property("position");
var textTransform = property("textTransform");
var textDecoration = property("textDecoration");
var fontStyle = property("fontStyle");
var fontVariantNumeric = (key) => (params, context, id) => ({
["--tw-" + key]: id,
fontVariantNumeric: "var(--tw-ordinal,/*!*/ /*!*/) var(--tw-slashed-zero,/*!*/ /*!*/) var(--tw-numeric-figure,/*!*/ /*!*/) var(--tw-numeric-spacing,/*!*/ /*!*/) var(--tw-numeric-fraction,/*!*/ /*!*/)"
});
var inset = (params, {theme: theme2}, id) => (_ = theme2("inset", params)) && {[id]: _};
var opacityProperty = (params, theme2, id, section = id) => (_ = theme2(section + "Opacity", tail(params))) && {
[`--tw-${id}-opacity`]: _
};
var parseColorComponent = (chars, factor) => Math.round(parseInt(chars, 16) * factor);
var asRGBA = (color, opacityProperty2, opacityDefault) => {
if (color && color[0] == "#" && (_ = (color.length - 1) / 3) && ($ = [17, 1, 0.062272][_ - 1])) {
return `rgba(${parseColorComponent(color.substr(1, _), $)},${parseColorComponent(color.substr(1 + _, _), $)},${parseColorComponent(color.substr(1 + 2 * _, _), $)},${opacityProperty2 ? `var(--tw-${opacityProperty2}${opacityDefault ? "," + opacityDefault : ""})` : opacityDefault || 1})`;
}
return color;
};
var withOpacityFallback = (property2, kind, color) => color && typeof color == "string" ? (_ = asRGBA(color, kind + "-opacity")) && _ !== color ? {
[`--tw-${kind}-opacity`]: "1",
[property2]: [color, _]
} : {[property2]: color} : void 0;
var transparentTo = (color) => ($ = asRGBA(color, "", "0")) == _ ? "transparent" : $;
var reversableEdge = (params, {theme: theme2}, id, section, prefix, suffix) => (_ = {x: ["right", "left"], y: ["bottom", "top"]}[params[0]]) && ($ = `--tw-${id}-${params[0]}-reverse`) ? params[1] == "reverse" ? {
[$]: "1"
} : {
[$]: "0",
[joinTruthy([prefix, _[0], suffix])]: (__ = theme2(section, tail(params))) && `calc(${__} * var(${$}))`,
[joinTruthy([prefix, _[1], suffix])]: __ && [__, `calc(${__} * calc(1 - var(${$})))`]
} : void 0;
var placeHelper = (property2, params) => params[0] && {
[property2]: (includes("wun", (params[0] || "")[3]) ? "space-" : "") + params[0]
};
var contentPluginFor = (property2) => (params) => includes(["start", "end"], params[0]) ? {[property2]: "flex-" + params[0]} : placeHelper(property2, params);
var gridPlugin = (kind) => (params, {theme: theme2}) => {
if (_ = theme2("grid" + capitalize(kind), params, "")) {
return {["grid-" + kind]: _};
}
switch (params[0]) {
case "span":
return params[1] && {
["grid-" + kind]: `span ${params[1]} / span ${params[1]}`
};
case "start":
case "end":
return (_ = theme2("grid" + capitalize(kind) + capitalize(params[0]), tail(params), join(tail(params)))) && {
[`grid-${kind}-${params[0]}`]: _
};
}
};
var border = (params, {theme: theme2}, id) => {
switch (params[0]) {
case "solid":
case "dashed":
case "dotted":
case "double":
case "none":
return propertyValue("borderStyle")(params);
case "collapse":
case "separate":
return propertyValue("borderCollapse")(params);
case "opacity":
return opacityProperty(params, theme2, id);
}
return (_ = theme2(id + "Width", params, "")) ? {borderWidth: _} : withOpacityFallback("borderColor", id, theme2(id + "Color", params));
};
var borderEdges = (params, context, id) => {
var _a;
const edges2 = (_a = expandEdges(params[0])) == null ? void 0 : _a.map(capitalize);
if (edges2) {
params = tail(params);
}
let rules2 = border(params, context, id);
if (edges2 && rules2 && typeof rules2 === "object") {
rules2 = Object.entries(rules2).reduce((newRules, [key, value]) => {
if (key.startsWith("border")) {
for (const edge of edges2) {
newRules[key.slice(0, 6) + edge + key.slice(6)] = value;
}
} else {
newRules[key] = value;
}
return newRules;
}, {});
}
return rules2;
};
var transform = (gpu) => (gpu ? "translate3d(var(--tw-translate-x,0),var(--tw-translate-y,0),0)" : "translateX(var(--tw-translate-x,0)) translateY(var(--tw-translate-y,0))") + " rotate(var(--tw-rotate,0)) skewX(var(--tw-skew-x,0)) skewY(var(--tw-skew-y,0)) scaleX(var(--tw-scale-x,1)) scaleY(var(--tw-scale-y,1))";
var transformXYFunction = (params, context, id) => params[0] && (_ = context.theme(id, params[1] || params[0])) && {
[`--tw-${id}-x`]: params[0] !== "y" && _,
[`--tw-${id}-y`]: params[0] !== "x" && _,
transform: [`${id}${params[1] ? params[0].toUpperCase() : ""}(${_})`, transform()]
};
var edgesPluginFor = (key) => (params, context, id) => id[1] ? edges(context.theme(key, params), id[1], key) : themeProperty(key)(params, context, id);
var padding = edgesPluginFor("padding");
var margin = edgesPluginFor("margin");
var minMax = (params, {theme: theme2}, id) => (_ = {w: "width", h: "height"}[params[0]]) && {
[_ = `${id}${capitalize(_)}`]: theme2(_, tail(params))
};
var filter = (params, {theme: theme2}, id) => {
const parts = id.split("-");
const prefix = parts[0] == "backdrop" ? parts[0] + "-" : "";
if (!prefix) {
params.unshift(...parts);
}
if (params[0] == "filter") {
const filters = [
"blur",
"brightness",
"contrast",
"grayscale",
"hue-rotate",
"invert",
prefix && "opacity",
"saturate",
"sepia",
!prefix && "drop-shadow"
].filter(Boolean);
return params[1] == "none" ? {[prefix + "filter"]: "none"} : filters.reduce((css, key) => {
css["--tw-" + prefix + key] = "var(--tw-empty,/*!*/ /*!*/)";
return css;
}, {
[prefix + "filter"]: filters.map((key) => `var(--tw-${prefix}${key})`).join(" ")
});
}
$ = params.shift();
if (includes(["hue", "drop"], $))
$ += capitalize(params.shift());
return (_ = theme2(prefix ? "backdrop" + capitalize($) : $, params)) && {
["--tw-" + prefix + $]: (Array.isArray(_) ? _ : [_]).map((_4) => `${hyphenate($)}(${_4})`).join(" ")
};
};
var corePlugins = {
group: (params, {tag}, id) => tag(join([id, ...params])),
hidden: alias(display, "none"),
inline: display,
block: display,
contents: display,
flow: display,
table: (params, context, id) => includes(["auto", "fixed"], params[0]) ? {tableLayout: params[0]} : display(params, context, id),
flex(params, context, id) {
switch (params[0]) {
case "row":
case "col":
return {
flexDirection: join(params[0] == "col" ? ["column", ...tail(params)] : params)
};
case "nowrap":
case "wrap":
return {flexWrap: join(params)};
case "grow":
case "shrink":
_ = context.theme("flex" + capitalize(params[0]), tail(params), params[1] || 1);
return _ != null && {
["flex-" + params[0]]: "" + _
};
}
return (_ = context.theme("flex", params, "")) ? {flex: _} : display(params, context, id);
},
grid(params, context, id) {
switch (params[0]) {
case "cols":
case "rows":
return (_ = context.theme("gridTemplate" + capitalize(toColumnsOrRows(params[0])), tail(params), params.length == 2 && Number(params[1]) ? `repeat(${params[1]},minmax(0,1fr))` : join(tail(params)))) && {
["gridTemplate-" + toColumnsOrRows(params[0])]: _
};
case "flow":
return params.length > 1 && {
gridAutoFlow: join(params[1] == "col" ? ["column", ...tail(params, 2)] : tail(params), " ")
};
}
return display(params, context, id);
},
auto: (params, {theme: theme2}) => includes(["cols", "rows"], params[0]) && (_ = theme2("gridAuto" + capitalize(toColumnsOrRows(params[0])), tail(params), join(tail(params)))) && {
["gridAuto-" + toColumnsOrRows(params[0])]: _
},
static: position,
fixed: position,
absolute: position,
relative: position,
sticky: position,
visible: {visibility: "visible"},
invisible: {visibility: "hidden"},
antialiased: {
WebkitFontSmoothing: "antialiased",
MozOsxFontSmoothing: "grayscale"
},
"subpixel-antialiased": {
WebkitFontSmoothing: "auto",
MozOsxFontSmoothing: "auto"
},
truncate: {
overflow: "hidden",
whiteSpace: "nowrap",
textOverflow: "ellipsis"
},
"sr-only": {
position: "absolute",
width: "1px",
height: "1px",
padding: "0",
margin: "-1px",
overflow: "hidden",
whiteSpace: "nowrap",
clip: "rect(0,0,0,0)",
borderWidth: "0"
},
"not-sr-only": {
position: "static",
width: "auto",
height: "auto",
padding: "0",
margin: "0",
overflow: "visible",
whiteSpace: "normal",
clip: "auto"
},
resize: (params) => ({
resize: {x: "horizontal", y: "vertical"}[params[0]] || params[0] || "both"
}),
box: (params) => params[0] && {boxSizing: params[0] + "-box"},
appearance: propertyValue(),
cursor: themePropertyFallback(),
float: propertyValue(),
clear: propertyValue(),
decoration: propertyValue("boxDecorationBreak"),
isolate: {isolation: "isolate"},
isolation: propertyValue(),
"mix-blend": propertyValue("mixBlendMode"),
top: inset,
right: inset,
bottom: inset,
left: inset,
inset: (params, {theme: theme2}) => (_ = expandEdges(params[0])) ? edges(theme2("inset", tail(params)), params[0]) : (_ = theme2("inset", params)) && {
top: _,
right: _,
bottom: _,
left: _
},
underline: textDecoration,
"line-through": textDecoration,
"no-underline": alias(textDecoration, "none"),
"text-underline": alias(textDecoration, "underline"),
"text-no-underline": alias(textDecoration, "none"),
"text-line-through": alias(textDecoration, "line-through"),
uppercase: textTransform,
lowercase: textTransform,
capitalize: textTransform,
"normal-case": alias(textTransform, "none"),
"text-normal-case": alias(textTransform, "none"),
italic: fontStyle,
"not-italic": alias(fontStyle, "normal"),
"font-italic": alias(fontStyle, "italic"),
"font-not-italic": alias(fontStyle, "normal"),
font: (params, context, id) => (_ = context.theme("fontFamily", params, "")) ? {fontFamily: _} : themeProperty("fontWeight")(params, context, id),
items: (params) => params[0] && {
alignItems: includes(["start", "end"], params[0]) ? "flex-" + params[0] : join(params)
},
"justify-self": propertyValue(),
"justify-items": propertyValue(),
justify: contentPluginFor("justifyContent"),
content: contentPluginFor("alignContent"),
self: contentPluginFor("alignSelf"),
place: (params) => params[0] && placeHelper("place-" + params[0], tail(params)),
overscroll: (params) => params[0] && {
["overscrollBehavior" + (params[1] ? "-" + params[0] : "")]: params[1] || params[0]
},
col: gridPlugin("column"),
row: gridPlugin("row"),
duration: themeProperty("transitionDuration"),
delay: themeProperty("transitionDelay"),
tracking: themeProperty("letterSpacing"),
leading: themeProperty("lineHeight"),
z: themeProperty("zIndex"),
opacity: themeProperty(),
ease: themeProperty("transitionTimingFunction"),
p: padding,
py: padding,
px: padding,
pt: padding,
pr: padding,
pb: padding,
pl: padding,
m: margin,
my: margin,
mx: margin,
mt: margin,
mr: margin,
mb: margin,
ml: margin,
w: themeProperty("width"),
h: themeProperty("height"),
min: minMax,
max: minMax,
fill: themeProperty(),
order: themeProperty(),
origin: themePropertyFallback("transformOrigin", " "),
select: propertyValue("userSelect"),
"pointer-events": propertyValue(),
align: propertyValue("verticalAlign"),
whitespace: propertyValue("whiteSpace"),
"normal-nums": {fontVariantNumeric: "normal"},
ordinal: fontVariantNumeric("ordinal"),
"slashed-zero": fontVariantNumeric("slashed-zero"),
"lining-nums": fontVariantNumeric("numeric-figure"),
"oldstyle-nums": fontVariantNumeric("numeric-figure"),
"proportional-nums": fontVariantNumeric("numeric-spacing"),
"tabular-nums": fontVariantNumeric("numeric-spacing"),
"diagonal-fractions": fontVariantNumeric("numeric-fraction"),
"stacked-fractions": fontVariantNumeric("numeric-fraction"),
overflow: (params, context, id) => includes(["ellipsis", "clip"], params[0]) ? propertyValue("textOverflow")(params) : params[1] ? {["overflow-" + params[0]]: params[1]} : propertyValue()(params, context, id),
transform: (params) => params[0] == "none" ? {transform: "none"} : {
"--tw-translate-x": "0",
"--tw-translate-y": "0",
"--tw-rotate": "0",
"--tw-skew-x": "0",
"--tw-skew-y": "0",
"--tw-scale-x": "1",
"--tw-scale-y": "1",
transform: transform(params[0] == "gpu")
},
rotate: (params, {theme: theme2}) => (_ = theme2("rotate", params)) && {
"--tw-rotate": _,
transform: [`rotate(${_})`, transform()]
},
scale: transformXYFunction,
translate: transformXYFunction,
skew: transformXYFunction,
gap: (params, context, id) => (_ = {x: "column", y: "row"}[params[0]]) ? {[_ + "Gap"]: context.theme("gap", tail(params))} : themeProperty("gap")(params, context, id),
stroke: (params, context, id) => (_ = context.theme("stroke", params, "")) ? {stroke: _} : themeProperty("strokeWidth")(params, context, id),
outline: (params, {theme: theme2}) => (_ = theme2("outline", params)) && {
outline: _[0],
outlineOffset: _[1]
},
"break-normal": {
wordBreak: "normal",
overflowWrap: "normal"
},
"break-words": {overflowWrap: "break-word"},
"break-all": {wordBreak: "break-all"},
text(params, {theme: theme2}, id) {
switch (params[0]) {
case "left":
case "center":
case "right":
case "justify":
return {textAlign: params[0]};
case "uppercase":
case "lowercase":
case "capitalize":
return textTransform([], _, params[0]);
case "opacity":
return opacityProperty(params, theme2, id);
}
const fontSize = theme2("fontSize", params, "");
if (fontSize) {
return typeof fontSize == "string" ? {fontSize} : {
fontSize: fontSize[0],
...typeof fontSize[1] == "string" ? {lineHeight: fontSize[1]} : fontSize[1]
};
}
return withOpacityFallback("color", "text", theme2("textColor", params));
},
bg(params, {theme: theme2}, id) {
switch (params[0]) {
case "fixed":
case "local":
case "scroll":
return propertyValue("backgroundAttachment", ",")(params);
case "bottom":
case "center":
case "left":
case "right":
case "top":
return propertyValue("backgroundPosition", " ")(params);
case "no":
return params[1] == "repeat" && propertyValue("backgroundRepeat")(params);
case "repeat":
return includes("xy", params[1]) ? propertyValue("backgroundRepeat")(params) : {backgroundRepeat: params[1] || params[0]};
case "opacity":
return opacityProperty(params, theme2, id, "background");
case "clip":
case "origin":
return params[1] && {
["background-" + params[0]]: params[1] + (params[1] == "text" ? "" : "-box")
};
case "blend":
return propertyValue("background-blend-mode")(tail(params));
case "gradient":
if (params[1] == "to" && (_ = expandEdges(params[2]))) {
return {
backgroundImage: `linear-gradient(to ${join(_, " ")},var(--tw-gradient-stops))`
};
}
}
return (_ = theme2("backgroundPosition", params, "")) ? {backgroundPosition: _} : (_ = theme2("backgroundSize", params, "")) ? {backgroundSize: _} : (_ = theme2("backgroundImage", params, "")) ? {backgroundImage: _} : withOpacityFallback("backgroundColor", "bg", theme2("backgroundColor", params));
},
from: (params, {theme: theme2}) => (_ = theme2("gradientColorStops", params)) && {
"--tw-gradient-from": _,
"--tw-gradient-stops": `var(--tw-gradient-from),var(--tw-gradient-to,${transparentTo(_)})`
},
via: (params, {theme: theme2}) => (_ = theme2("gradientColorStops", params)) && {
"--tw-gradient-stops": `var(--tw-gradient-from),${_},var(--tw-gradient-to,${transparentTo(_)})`
},
to: (params, {theme: theme2}) => (_ = theme2("gradientColorStops", params)) && {
"--tw-gradient-to": _
},
border: borderEdges,
divide: (params, context, id) => (_ = reversableEdge(params, context, id, "divideWidth", "border", "width") || border(params, context, id)) && {
"&>:not([hidden])~:not([hidden])": _
},
space: (params, context, id) => (_ = reversableEdge(params, context, id, "space", "margin")) && {
"&>:not([hidden])~:not([hidden])": _
},
placeholder: (params, {theme: theme2}, id) => (_ = params[0] == "opacity" ? opacityProperty(params, theme2, id) : withOpacityFallback("color", "placeholder", theme2("placeholderColor", params))) && {
"&::placeholder": _
},
shadow: (params, {theme: theme2}) => (_ = theme2("boxShadow", params)) && {
":global": {
"*": {
"--tw-shadow": "0 0 transparent"
}
},
"--tw-shadow": _ == "none" ? "0 0 transparent" : _,
boxShadow: [
_,
`var(--tw-ring-offset-shadow,0 0 transparent),var(--tw-ring-shadow,0 0 transparent),var(--tw-shadow)`
]
},
animate: (params, {theme: theme2, tag}) => {
if ($ = theme2("animation", params)) {
const parts = $.split(" ");
if ((_ = theme2("keyframes", parts[0], __ = {})) !== __) {
return ($ = tag(parts[0])) && {
animation: $ + " " + join(tail(parts), " "),
["@keyframes " + $]: _
};
}
return {animation: $};
}
},
ring(params, {theme: theme2}, id) {
switch (params[0]) {
case "inset":
return {"--tw-ring-inset": "inset"};
case "opacity":
return opacityProperty(params, theme2, id);
case "offset":
return (_ = theme2("ringOffsetWidth", tail(params), "")) ? {
"--tw-ring-offset-width": _
} : {
"--tw-ring-offset-color": theme2("ringOffsetColor", tail(params))
};
}
return (_ = theme2("ringWidth", params, "")) ? {
"--tw-ring-offset-shadow": `var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)`,
"--tw-ring-shadow": `var(--tw-ring-inset) 0 0 0 calc(${_} + var(--tw-ring-offset-width)) var(--tw-ring-color)`,
boxShadow: `var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 transparent)`,
":global": {
"*": {
"--tw-ring-inset": "var(--tw-empty,/*!*/ /*!*/)",
"--tw-ring-offset-width": theme2("ringOffsetWidth", "", "0px"),
"--tw-ring-offset-color": theme2("ringOffsetColor", "", "#fff"),
"--tw-ring-color": asRGBA(theme2("ringColor", "", "#93c5fd"), "ring-opacity", theme2("ringOpacity", "", "0.5")),
"--tw-ring-offset-shadow": "0 0 transparent",
"--tw-ring-shadow": "0 0 transparent"
}
}
} : {
"--tw-ring-opacity": "1",
"--tw-ring-color": asRGBA(theme2("ringColor", params), "ring-opacity")
};
},
object: (params, context, id) => includes(["contain", "cover", "fill", "none", "scale-down"], join(params)) ? {objectFit: join(params)} : themePropertyFallback("objectPosition", " ")(params, context, id),
list: (params, context, id) => join(params) == "item" ? display(params, context, id) : includes(["inside", "outside"], join(params)) ? {listStylePosition: params[0]} : themePropertyFallback("listStyleType")(params, context, id),
rounded: (params, context, id) => corners(context.theme("borderRadius", tail(params), ""), params[0], "border", "radius") || themeProperty("borderRadius")(params, context, id),
"transition-none": {transitionProperty: "none"},
transition: (params, {theme: theme2}) => ({
transitionProperty: theme2("transitionProperty", params),
transitionTimingFunction: theme2("transitionTimingFunction", ""),
transitionDuration: theme2("transitionDuration", "")
}),
container: (params, {theme: theme2}) => {
const {screens = theme2("screens"), center, padding: padding2} = theme2("container");
const paddingFor = (screen) => (_ = padding2 && (typeof padding2 == "string" ? padding2 : padding2[screen] || padding2.DEFAULT)) ? {
paddingRight: _,
paddingLeft: _
} : {};
return Object.keys(screens).reduce((rules2, screen) => {
if (($ = screens[screen]) && typeof $ == "string") {
rules2[buildMediaQuery($)] = {
"&": {
"max-width": $,
...paddingFor(screen)
}
};
}
return rules2;
}, {
width: "100%",
...center ? {marginRight: "auto", marginLeft: "auto"} : {},
...paddingFor("xs")
});
},
filter,
blur: filter,
brightness: filter,
contrast: filter,
grayscale: filter,
"hue-rotate": filter,
invert: filter,
saturate: filter,
sepia: filter,
"drop-shadow": filter,
backdrop: filter
};
// src/twind/preflight.ts
var createPreflight = (theme2) => ({
":root": {tabSize: 4},
"body,blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre,fieldset,ol,ul": {margin: "0"},
button: {backgroundColor: "transparent", backgroundImage: "none"},
'button,[type="button"],[type="reset"],[type="submit"]': {WebkitAppearance: "button"},
"button:focus": {outline: ["1px dotted", "5px auto -webkit-focus-ring-color"]},
"fieldset,ol,ul,legend": {padding: "0"},
"ol,ul": {listStyle: "none"},
html: {
lineHeight: "1.5",
WebkitTextSizeAdjust: "100%",
fontFamily: theme2("fontFamily.sans", "ui-sans-serif,system-ui,sans-serif")
},
body: {fontFamily: "inherit", lineHeight: "inherit"},
"*,::before,::after": {
boxSizing: "border-box",
border: `0 solid ${theme2("borderColor.DEFAULT", "currentColor")}`
},
hr: {height: "0", color: "inherit", borderTopWidth: "1px"},
img: {borderStyle: "solid"},
textarea: {resize: "vertical"},
"input::placeholder,textarea::placeholder": {
opacity: "1",
color: theme2("placeholderColor.DEFAULT", theme2("colors.gray.400", "#a1a1aa"))
},
'button,[role="button"]': {cursor: "pointer"},
table: {textIndent: "0", borderColor: "inherit", borderCollapse: "collapse"},
"h1,h2,h3,h4,h5,h6": {fontSize: "inherit", fontWeight: "inherit"},
a: {color: "inherit", textDecoration: "inherit"},
"button,input,optgroup,select,textarea": {
fontFamily: "inherit",
fontSize: "100%",
margin: "0",
padding: "0",
lineHeight: "inherit",
color: "inherit"
},
"button,select": {textTransform: "none"},
"::-moz-focus-inner": {borderStyle: "none", padding: "0"},
":-moz-focusring": {outline: "1px dotted ButtonText"},
":-moz-ui-invalid": {boxShadow: "none"},
progress: {verticalAlign: "baseline"},
"::-webkit-inner-spin-button,::-webkit-outer-spin-button": {height: "auto"},
'[type="search"]': {WebkitAppearance: "textfield", outlineOffset: "-2px"},
"::-webkit-search-decoration": {WebkitAppearance: "none"},
"::-webkit-file-upload-button": {WebkitAppearance: "button", font: "inherit"},
summary: {display: "list-item"},
"abbr[title]": {textDecoration: "underline dotted"},
"b,strong": {fontWeight: "bolder"},
"pre,code,kbd,samp": {
fontFamily: theme2("fontFamily", "mono", "ui-monospace,monospace"),
fontSize: "1em"
},
"sub,sup": {fontSize: "75%", lineHeight: "0", position: "relative", verticalAlign: "baseline"},
sub: {bottom: "-0.25em"},
sup: {top: "-0.5em"},
"img,svg,video,canvas,audio,iframe,embed,object": {display: "block", verticalAlign: "middle"},
"img,video": {maxWidth: "100%", height: "auto"}
});
// src/twind/variants.ts
var coreVariants = {
dark: "@media (prefers-color-scheme:dark)",
sticky: "@supports ((position: -webkit-sticky) or (position:sticky))",
"motion-reduce": "@media (prefers-reduced-motion:reduce)",
"motion-safe": "@media (prefers-reduced-motion:no-preference)",
first: "&:first-child",
last: "&:last-child",
even: "&:nth-child(2n)",
odd: "&:nth-child(odd)",
children: "&>*",
siblings: "&~*",
sibling: "&+*",
override: "&&"
};
// src/internal/dom.ts
var STYLE_ELEMENT_ID = "__twind";
var getStyleElement = (nonce) => {
let element = self[STYLE_ELEMENT_ID];
if (!element) {
element = document.head.appendChild(document.createElement("style"));
element.id = STYLE_ELEMENT_ID;
nonce && (element.nonce = nonce);
element.appendChild(document.createTextNode(""));
}
return element;
};
// src/twind/sheets.ts
var cssomSheet = ({
nonce,
target = getStyleElement(nonce).sheet
} = {}) => {
const offset = target.cssRules.length;
return {
target,
insert: (rule, index) => target.insertRule(rule, offset + index)
};
};
var voidSheet = () => ({
target: null,
insert: noop
});
// src/twind/modes.ts
var mode = (report) => ({
unknown(section, key = [], optional, context) {
if (!optional) {
this.report({id: "UNKNOWN_THEME_VALUE", key: section + "." + join(key)}, context);
}
},
report({id, ...info}) {
return report(`[${id}] ${JSON.stringify(info)}`);
}
});
var warn = /* @__PURE__ */ mode((message) => console.warn(message));
var strict = /* @__PURE__ */ mode((message) => {
throw new Error(message);
});
var silent = /* @__PURE__ */ mode(noop);
// src/twind/prefix.ts
import {cssPropertyAlias, cssPropertyPrefixFlags, cssValuePrefixFlags} from "style-vendorizer";
var noprefix = (property2, value, important) => `${property2}:${value}${important ? " !important" : ""}`;
var autoprefix = (property2, value, important) => {
let cssText = "";
const propertyAlias = cssPropertyAlias(property2);
if (propertyAlias)
cssText += `${noprefix(propertyAlias, value, important)};`;
let flags = cssPropertyPrefixFlags(property2);
if (flags & 1)
cssText += `-webkit-${noprefix(property2, value, important)};`;
if (flags & 2)
cssText += `-moz-${noprefix(property2, value, important)};`;
if (flags & 4)
cssText += `-ms-${noprefix(property2, value, important)};`;
flags = cssValuePrefixFlags(property2, value);
if (flags & 1)
cssText += `${noprefix(property2, `-webkit-${value}`, important)};`;
if (flags & 2)
cssText += `${noprefix(property2, `-moz-${value}`, important)};`;
if (flags & 4)
cssText += `${noprefix(property2, `-ms-${value}`, important)};`;
cssText += noprefix(property2, value, important);
return cssText;
};
// src/twind/theme.ts
var ratios = (start, end) => {
const result = {};
do {
for (let dividend = 1; dividend < start; dividend++) {
result[`${dividend}/${start}`] = Number((dividend / start * 100).toFixed(6)) + "%";
}
} while (++start <= end);
return result;
};
var exponential = (stop, unit, start = 0) => {
const result = {};
for (; start <= stop; start = start * 2 || 1) {
result[start] = start + unit;
}
return result;
};
var linear = (stop, unit = "", divideBy = 1, start = 0, step = 1, result = {}) => {
for (; start <= stop; start += step) {
result[start] = start / divideBy + unit;
}
return result;
};
var alias2 = (section) => (theme2) => theme2(section);
var themeFactory = (args, {theme: theme2}) => theme2(...args);
var theme = (...args) => directive(themeFactory, args);
var defaultTheme = {
screens: {
sm: "640px",
md: "768px",
lg: "1024px",
xl: "1280px",
"2xl": "1536px"
},
colors: {
transparent: "transparent",
current: "currentColor",
black: "#000",
white: "#fff",
gray: {
50: "#f9fafb",
100: "#f3f4f6",
200: "#e5e7eb",
300: "#d1d5db",
400: "#9ca3af",
500: "#6b7280",
600: "#4b5563",
700: "#374151",
800: "#1f2937",
900: "#111827"
},
red: {
50: "#fef2f2",
100: "#fee2e2",
200: "#fecaca",
300: "#fca5a5",
400: "#f87171",
500: "#ef4444",
600: "#dc2626",
700: "#b91c1c",
800: "#991b1b",
900: "#7f1d1d"
},
yellow: {
50: "#fffbeb",
100: "#fef3c7",
200: "#fde68a",
300: "#fcd34d",
400: "#fbbf24",
500: "#f59e0b",
600: "#d97706",
700: "#b45309",
800: "#92400e",
900: "#78350f"
},
green: {
50: "#ecfdf5",
100: "#d1fae5",
200: "#a7f3d0",
300: "#6ee7b7",
400: "#34d399",
500: "#10b981",
600: "#059669",
700: "#047857",
800: "#065f46",
900: "#064e3b"
},
blue: {
50: "#eff6ff",
100: "#dbeafe",
200: "#bfdbfe",
300: "#93c5fd",
400: "#60a5fa",
500: "#3b82f6",
600: "#2563eb",
700: "#1d4ed8",
800: "#1e40af",
900: "#1e3a8a"
},
indigo: {
50: "#eef2ff",
100: "#e0e7ff",
200: "#c7d2fe",
300: "#a5b4fc",
400: "#818cf8",
500: "#6366f1",
600: "#4f46e5",
700: "#4338ca",
800: "#3730a3",
900: "#312e81"
},
purple: {
50: "#f5f3ff",
100: "#ede9fe",
200: "#ddd6fe",
300: "#c4b5fd",
400: "#a78bfa",
500: "#8b5cf6",
600: "#7c3aed",
700: "#6d28d9",
800: "#5b21b6",
900: "#4c1d95"
},
pink: {
50: "#fdf2f8",
100: "#fce7f3",
200: "#fbcfe8",
300: "#f9a8d4",
400: "#f472b6",
500: "#ec4899",
600: "#db2777",
700: "#be185d",
800: "#9d174d",
900: "#831843"
}
},
spacing: {
px: "1px",
0: "0px",
.../* @__PURE__ */ linear(4, "rem", 4, 0.5, 0.5),
.../* @__PURE__ */ linear(12, "rem", 4, 5),
14: "3.5rem",
.../* @__PURE__ */ linear(64, "rem", 4, 16, 4),
72: "18rem",
80: "20rem",
96: "24rem"
},
durations: {
75: "75ms",
100: "100ms",
150: "150ms",
200: "200ms",
300: "300ms",
500: "500ms",
700: "700ms",
1e3: "1000ms"
},
animation: {
none: "none",
spin: "spin 1s linear infinite",
ping: "ping 1s cubic-bezier(0, 0, 0.2, 1) infinite",
pulse: "pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite",
bounce: "bounce 1s infinite"
},
backdropBlur: /* @__PURE__ */ alias2("blur"),
backdropBrightness: /* @__PURE__ */ alias2("brightness"),
backdropContrast: /* @__PURE__ */ alias2("contrast"),
backdropGrayscale: /* @__PURE__ */ alias2("grayscale"),
backdropHueRotate: /* @__PURE__ */ alias2("hueRotate"),
backdropInvert: /* @__PURE__ */ alias2("invert"),
backdropOpacity: /* @__PURE__ */ alias2("opacity"),
backdropSaturate: /* @__PURE__ */ alias2("saturate"),
backdropSepia: /* @__PURE__ */ alias2("sepia"),
backgroundColor: /* @__PURE__ */ alias2("colors"),
backgroundImage: {
none: "none"
},
backgroundOpacity: /* @__PURE__ */ alias2("opacity"),
backgroundSize: {
auto: "auto",
cover: "cover",
contain: "contain"
},
blur: {
0: "0",
sm: "4px",
DEFAULT: "8px",
md: "12px",
lg: "16px",
xl: "24px",
"2xl": "40px",
"3xl": "64px"
},
brightness: {
.../* @__PURE__ */ linear(200, "", 100, 0, 50),
.../* @__PURE__ */ linear(110, "", 100, 90, 5),
75: "0.75",
125: "1.25"
},
borderColor: (theme2) => ({
...theme2("colors"),
DEFAULT: theme2("colors.gray.200", "currentColor")
}),
borderOpacity: /* @__PURE__ */ alias2("opacity"),
borderRadius: {
none: "0px",
sm: "0.125rem",
DEFAULT: "0.25rem",
md: "0.375rem",
lg: "0.5rem",
xl: "0.75rem",
"2xl": "1rem",
"3xl": "1.5rem",
"1/2": "50%",
full: "9999px"
},
borderWidth: {
DEFAULT: "1px",
.../* @__PURE__ */ exponential(8, "px")
},
boxShadow: {
sm: "0 1px 2px 0 rgba(0,0,0,0.05)",
DEFAULT: "0 1px 3px 0 rgba(0,0,0,0.1), 0 1px 2px 0 rgba(0,0,0,0.06)",
md: "0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -1px rgba(0,0,0,0.06)",
lg: "0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -2px rgba(0,0,0,0.05)",
xl: "0 20px 25px -5px rgba(0,0,0,0.1), 0 10px 10px -5px rgba(0,0,0,0.04)",
"2xl": "0 25px 50px -12px rgba(0,0,0,0.25)",
inner: "inset 0 2px 4px 0 rgba(0,0,0,0.06)",
none: "none"
},
contrast: {
.../* @__PURE__ */ linear(200, "", 100, 0, 50),
75: "0.75",
125: "1.25"
},
divideColor: /* @__PURE__ */ alias2("borderColor"),
divideOpacity: /* @__PURE__ */ alias2("borderOpacity"),
divideWidth: /* @__PURE__ */ alias2("borderWidth"),
dropShadow: {
sm: "0 1px 1px rgba(0,0,0,0.05)",
DEFAULT: ["0 1px 2px rgba(0,0,0,0.1)", "0 1px 1px rgba(0,0,0,0.06)"],
md: ["0 4px 3px rgba(0,0,0,0.07)", "0 2px 2px rgba(0,0,0,0.06)"],
lg: ["0 10px 8px rgba(0,0,0,0.04)", "0 4px 3px rgba(0,0,0,0.1)"],
xl: ["0 20px 13px rgba(0,0,0,0.03)", "0 8px 5px rgba(0,0,0,0.08)"],
"2xl": "0 25px 25px rgba(0,0,0,0.15)",
none: "0 0 #0000"
},
fill: {current: "currentColor"},
grayscale: {
0: "0",
DEFAULT: "100%"
},
hueRotate: {
0: "0deg",
15: "15deg",
30: "30deg",
60: "60deg",
90: "90deg",
180: "180deg"
},
invert: {
0: "0",
DEFAULT: "100%"
},
flex: {
1: "1 1 0%",
auto: "1 1 auto",
initial: "0 1 auto",
none: "none"
},
fontFamily: {
sans: 'ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"'.split(","),
serif: 'ui-serif,Georgia,Cambria,"Times New Roman",Times,serif'.split(","),
mono: 'ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace'.split(",")
},
fontSize: {
xs: ["0.75rem", "1rem"],
sm: ["0.875rem", "1.25rem"],
base: ["1rem", "1.5rem"],
lg: ["1.125rem", "1.75rem"],
xl: ["1.25rem", "1.75rem"],
"2xl": ["1.5rem", "2rem"],
"3xl": ["1.875rem", "2.25rem"],
"4xl": ["2.25rem", "2.5rem"],
"5xl": ["3rem", "1"],
"6xl": ["3.75rem", "1"],
"7xl": ["4.5rem", "1"],
"8xl": ["6rem", "1"],
"9xl": ["8rem", "1"]
},
fontWeight: {
thin: "100",
extralight: "200",
light: "300",
normal: "400",
medium: "500",
semibold: "600",
bold: "700",
extrabold: "800",
black: "900"
},
gridTemplateColumns: {},
gridTemplateRows: {},
gridAutoColumns: {
min: "min-content",
max: "max-content",
fr: "minmax(0,1fr)"
},
gridAutoRows: {
min: "min-content",
max: "max-content",
fr: "minmax(0,1fr)"
},
gridColumn: {
auto: "auto",
"span-full": "1 / -1"
},
gridRow: {
auto: "auto",
"span-full": "1 / -1"
},
gap: /* @__PURE__ */ alias2("spacing"),
gradientColorStops: /* @__PURE__ */ alias2("colors"),
height: (theme2) => ({
auto: "auto",
...theme2("spacing"),
...ratios(2, 6),
full: "100%",
screen: "100vh"
}),
inset: (theme2) => ({
auto: "auto",
...theme2("spacing"),
...ratios(2, 4),
full: "100%"
}),
keyframes: {
spin: {
from: {
transform: "rotate(0deg)"
},
to: {
transform: "rotate(360deg)"
}
},
ping: {
"0%": {
transform: "scale(1)",
opacity: "1"
},
"75%,100%": {
transform: "scale(2)",
opacity: "0"
}
},
pulse: {
"0%,100%": {
opacity: "1"
},
"50%": {
opacity: ".5"
}
},
bounce: {
"0%, 100%": {
transform: "translateY(-25%)",
animationTimingFunction: "cubic-bezier(0.8,0,1,1)"
},
"50%": {
transform: "none",
animationTimingFunction: "cubic-bezier(0,0,0.2,1)"
}
}
},
letterSpacing: {
tighter: "-0.05em",
tight: "-0.025em",
normal: "0em",
wide: "0.025em",
wider: "0.05em",
widest: "0.1em"
},
lineHeight: {
none: "1",
tight: "1.25",
snug: "1.375",
normal: "1.5",
relaxed: "1.625",
loose: "2",
.../* @__PURE__ */ linear(10, "rem", 4, 3)
},
margin: (theme2) => ({
auto: "auto",
...theme2("spacing")
}),
maxHeight: (theme2) => ({
...theme2("spacing"),
full: "100%",
screen: "100vh"
}),
maxWidth: (theme2, {breakpoints}) => ({
none: "none",
0: "0rem",
xs: "20rem",
sm: "24rem",
md: "28rem",
lg: "32rem",
xl: "36rem",
"2xl": "42rem",
"3xl": "48rem",
"4xl": "56rem",
"5xl": "64rem",
"6xl": "72rem",
"7xl": "80rem",
full: "100%",
min: "min-content",
max: "max-content",
prose: "65ch",
...breakpoints(theme2("screens"))
}),
minHeight: {
0: "0px",
full: "100%",
screen: "100vh"
},
minWidth: {
0: "0px",
full: "100%",
min: "min-content",
max: "max-content"
},
opacity: {
.../* @__PURE__ */ linear(100, "", 100, 0, 10),
5: "0.05",
25: "0.25",
75: "0.75",
95: "0.95"
},
order: {
first: "-9999",
last: "9999",
none: "0",
.../* @__PURE__ */ linear(12, "", 1, 1)
},
outline: {
none: ["2px solid transparent", "2px"],
white: ["2px dotted white", "2px"],
black: ["2px dotted black", "2px"]
},
padding: /* @__PURE__ */ alias2("spacing"),
placeholderColor: /* @__PURE__ */ alias2("colors"),
placeholderOpacity: /* @__PURE__ */ alias2("opacity"),
ringColor: (theme2) => ({
DEFAULT: theme2("colors.blue.500", "#3b82f6"),
...theme2("colors")
}),
ringOffsetColor: /* @__PURE__ */ alias2("colors"),
ringOffsetWidth: /* @__PURE__ */ exponential(8, "px"),
ringOpacity: (theme2) => ({
DEFAULT: "0.5",
...theme2("opacity")
}),
ringWidth: {
DEFAULT: "3px",
.../* @__PURE__ */ exponential(8, "px")
},
rotate: {
.../* @__PURE__ */ exponential(2, "deg"),
.../* @__PURE__ */ exponential(12, "deg", 3),
.../* @__PURE__ */ exponential(180, "deg", 45)
},
saturate: /* @__PURE__ */ linear(200, "", 100, 0, 50),
scale: {
.../* @__PURE__ */ linear(150, "", 100, 0, 50),
.../* @__PURE__ */ linear(110, "", 100, 90, 5),
75: "0.75",
125: "1.25"
},
sepia: {
0: "0",
DEFAULT: "100%"
},
skew: {
.../* @__PURE__ */ exponential(2, "deg"),
.../* @__PURE__ */ exponential(12, "deg", 3)
},
space: /* @__PURE__ */ alias2("spacing"),
stroke: {
current: "currentColor"
},
strokeWidth: /* @__PURE__ */ linear(2),
textColor: /* @__PURE__ */ alias2("colors"),
textOpacity: /* @__PURE__ */ alias2("opacity"),
transitionDuration: (theme2) => ({
DEFAULT: "150ms",
...theme2("durations")
}),
transitionDelay: /* @__PURE__ */ alias2("durations"),
transitionProperty: {
none: "none",
all: "all",
DEFAULT: "background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter",
colors: "background-color,border-color,color,fill,stroke",
opacity: "opacity",
shadow: "box-shadow",
transform: "transform"
},
transitionTimingFunction: {
DEFAULT: "cubic-bezier(0.4,0,0.2,1)",
linear: "linear",
in: "cubic-bezier(0.4,0,1,1)",
out: "cubic-bezier(0,0,0.2,1)",
"in-out": "cubic-bezier(0.4,0,0.2,1)"
},
translate: (theme2) => ({
...theme2("spacing"),
...ratios(2, 4),
full: "100%"
}),
width: (theme2) => ({
auto: "auto",
...theme2("spacing"),
...ratios(2, 6),
...ratios(12, 12),
screen: "100vw",
full: "100%",
min: "min-content",
max: "max-content"
}),
zIndex: {
auto: "auto",
.../* @__PURE__ */ linear(50, "", 1, 0, 10)
}
};
var flattenColorPalette = (colors, target = {}, prefix = []) => {
Object.keys(colors).forEach((property2) => {
const value = colors[property2];
if (property2 == "DEFAULT") {
target[join(prefix)] = value;
target[join(prefix, ".")] = value;
}
const key = [...prefix, property2];
target[join(key)] = value;
target[join(key, ".")] = value;
if (value && typeof value == "object") {
flattenColorPalette(value, target, key);
}
}, target);
return target;
};
var resolveContext = {
negative: () => ({}),
breakpoints: (screens) => Object.keys(screens).filter((key) => typeof screens[key] == "string").reduce((target, key) => {
target["screen-" + key] = screens[key];
return target;
}, {})
};
var handleArbitraryValues = (section, key) => (key = key[0] == "[" && key.slice(-1) == "]" && key.slice(1, -1)) && includes(section, "olor") == /^(#|(hsl|rgb)a?\(|[a-z]+$)/.test(key) && (includes(key, "calc(") ? key.replace(/(-?\d*\.?\d(?!\b-.+[,)](?![^+\-/*])\D)(?:%|[a-z]+)?|\))([+\-/*])/g, "$1 $2 ") : key);
var makeThemeResolver = (config) => {
const cache = new Map();
const