notion-enhancer/extension/dep/twind.mjs

2403 lines
67 KiB
JavaScript

/**
* Twind v0.16.16
* @license MIT
* @source https://unpkg.com/twind@0.16.16/twind.js?module
*/
// 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);
// 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 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: (params, context, id) =>
expandEdges(params[0])
? edges(context.theme('borderWidth', tail(params)), params[0], 'border', 'width')
: border(params, context, id),
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.mjs';
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 theme2 = { ...defaultTheme, ...config };
const deref = (theme3, section) => {
const base = theme3 && theme3[section];
const value = typeof base == 'function' ? base(resolve, resolveContext) : base;
return value && section == 'colors' ? flattenColorPalette(value) : value;
};
const resolve = (section, key, defaultValue) => {
const keypath = section.split('.');
section = keypath[0];
if (keypath.length > 1) {
defaultValue = key;
key = join(tail(keypath), '.');
}
let base = cache.get(section);
if (!base) {
cache.set(section, (base = { ...deref(theme2, section) }));
Object.assign(base, deref(theme2.extend, section));
}
if (key != null) {
key = (Array.isArray(key) ? join(key) : key) || 'DEFAULT';
const value = handleArbitraryValues(section, key) || base[key];
return value == null
? defaultValue
: Array.isArray(value) && !includes(['fontSize', 'outline', 'dropShadow'], section)
? join(value, ',')
: value;
}
return base;
};
return resolve;
};
// src/twind/translate.ts
var translate = (plugins, context) => (rule, isTranslating) => {
if (typeof rule.d == 'function') {
return rule.d(context);
}
const parameters = rule.d.split(/-(?![^[]*])/g);
if (!isTranslating && parameters[0] == 'tw' && rule.$ == rule.d) {
return rule.$;
}
for (let index = parameters.length; index; index--) {
const id = join(parameters.slice(0, index));
const plugin = plugins[id];
if (plugin) {
return typeof plugin == 'function'
? plugin(tail(parameters, index), context, id)
: typeof plugin == 'string'
? context[isTranslating ? 'css' : 'tw'](plugin)
: plugin;
}
}
};
// src/twind/decorate.ts
var _2;
var GROUP_RE = /^:(group(?:(?!-focus).+?)*)-(.+)$/;
var NOT_PREFIX_RE = /^(:not)-(.+)/;
var prepareVariantSelector = (variant) => (variant[1] == '[' ? tail(variant) : variant);
var decorate = (darkMode, variants, { theme: theme2, tag }) => {
const applyVariant = (translation, variant) => {
if ((_2 = theme2('screens', tail(variant), ''))) {
return { [buildMediaQuery(_2)]: translation };
}
if (variant == ':dark' && darkMode == 'class') {
return { '.dark &': translation };
}
if ((_2 = GROUP_RE.exec(variant))) {
return { [`.${escape(tag(_2[1]))}:${_2[2]} &`]: translation };
}
return {
[variants[tail(variant)] ||
'&' +
variant.replace(
NOT_PREFIX_RE,
(_4, not, variant2) => not + '(' + prepareVariantSelector(':' + variant2) + ')'
)]: translation,
};
};
return (translation, rule) => rule.v.reduceRight(applyVariant, translation);
};
// src/twind/presedence.ts
var _3;
var responsivePrecedence = (css) =>
(((_3 = /(?:^|min-width: *)(\d+(?:.\d+)?)(p)?/.exec(css))
? +_3[1] / (_3[2] ? 15 : 1) / 10
: 0) &
31) <<
22;
var seperatorPrecedence = (string) => {
_3 = 0;
for (let index = string.length; index--; ) {
_3 += includes('-:,', string[index]);
}
return _3;
};
var atRulePresedence = (css) => (seperatorPrecedence(css) & 15) << 18;
var PRECEDENCES_BY_PSEUDO_CLASS = [
'rst',
'st',
'en',
'd',
'nk',
'sited',
'pty',
'ecked',
'cus-w',
'ver',
'cus',
'cus-v',
'tive',
'sable',
'ad-on',
'tiona',
'quire',
];
var pseudoPrecedence = (pseudoClass) =>
1 <<
(~(_3 = PRECEDENCES_BY_PSEUDO_CLASS.indexOf(
pseudoClass.replace(GROUP_RE, ':$2').slice(3, 8)
))
? _3
: 17);
var makeVariantPresedenceCalculator = (theme2, variants) => (presedence, variant) =>
presedence |
((_3 = theme2('screens', tail(variant), ''))
? (1 << 27) | responsivePrecedence(buildMediaQuery(_3))
: variant == ':dark'
? 1 << 30
: (_3 = variants[variant] || variant.replace(NOT_PREFIX_RE, ':$2'))[0] == '@'
? atRulePresedence(_3)
: pseudoPrecedence(variant));
var declarationPropertyPrecedence = (property2) =>
property2[0] == '-'
? 0
: seperatorPrecedence(property2) +
((_3 = /^(?:(border-(?!w|c|sty)|[tlbr].{2,4}m?$|c.{7}$)|([fl].{5}l|g.{8}$|pl))/.exec(
property2
))
? +!!_3[1] || -!!_3[2]
: 0) +
1;
// src/twind/serialize.ts
var stringifyBlock = (body, selector) => selector + '{' + body + '}';
var serialize = (prefix, variants, context) => {
const { theme: theme2, tag } = context;
const tagVar = (_4, property2) => '--' + tag(property2);
const tagVars = (value) => `${value}`.replace(/--(tw-[\w-]+)\b/g, tagVar);
const stringifyDeclaration = (property2, value, important) => {
property2 = tagVars(property2);
return Array.isArray(value)
? join(
value.filter(Boolean).map((value2) => prefix(property2, tagVars(value2), important)),
';'
)
: prefix(property2, tagVars(value), important);
};
let rules2;
const stringify3 = (atRules, selector, presedence, css, important) => {
if (Array.isArray(css)) {
css.forEach(
(css2) => css2 && stringify3(atRules, selector, presedence, css2, important)
);
return;
}
let declarations = '';
let maxPropertyPresedence = 0;
let numberOfDeclarations = 0;
if (css['@apply']) {
css = merge(
evalThunk(apply(css['@apply']), context),
{ ...css, '@apply': void 0 },
context
);
}
Object.keys(css).forEach((key) => {
const value = evalThunk(css[key], context);
if (isCSSProperty(key, value)) {
if (value !== '' && key.length > 1) {
const property2 = hyphenate(key);
numberOfDeclarations += 1;
maxPropertyPresedence = Math.max(
maxPropertyPresedence,
declarationPropertyPrecedence(property2)
);
declarations =
(declarations && declarations + ';') +
stringifyDeclaration(property2, value, important);
}
} else if (value) {
if (key == ':global') {
key = '@global';
}
if (key[0] == '@') {
if (key[1] == 'g') {
stringify3([], '', 0, value, important);
} else if (key[1] == 'f') {
stringify3([], key, 0, value, important);
} else if (key[1] == 'k') {
const currentSize = rules2.length;
stringify3([], '', 0, value, important);
const waypoints = rules2.splice(currentSize, rules2.length - currentSize);
rules2.push({
r: stringifyBlock(
join(
waypoints.map((p) => p.r),
''
),
key
),
p: waypoints.reduce((sum, p) => sum + p.p, 0),
});
} else if (key[1] == 'i') {
(Array.isArray(value) ? value : [value]).forEach(
(value2) => value2 && rules2.push({ p: 0, r: `${key} ${value2};` })
);
} else {
if (key[2] == 'c') {
key = buildMediaQuery(context.theme('screens', tail(key, 8).trim()));
}
stringify3(
[...atRules, key],
selector,
presedence | responsivePrecedence(key) | atRulePresedence(key),
value,
important
);
}
} else {
stringify3(
atRules,
selector
? join(
selector.split(/,(?![^[]*])/g).map((selectorPart) =>
join(
key
.split(/,(?![^[]*])/g)
.map((keyPart) =>
includes(keyPart, '&')
? keyPart.replace(/&/g, selectorPart)
: (selectorPart && selectorPart + ' ') + keyPart
),
','
)
),
','
)
: key,
presedence,
value,
important
);
}
}
});
if (numberOfDeclarations) {
rules2.push({
r: atRules.reduceRight(stringifyBlock, stringifyBlock(declarations, selector)),
p:
presedence * (1 << 8) +
(((Math.max(0, 15 - numberOfDeclarations) & 15) << 4) |
((maxPropertyPresedence || 15) & 15)),
});
}
};
const variantPresedence = makeVariantPresedenceCalculator(theme2, variants);
return (css, className, rule, layer = 0) => {
layer <<= 28;
rules2 = [];
stringify3(
[],
className ? '.' + escape(className) : '',
rule ? rule.v.reduceRight(variantPresedence, layer) : layer,
css,
rule && rule.i
);
return rules2;
};
};
// src/twind/inject.ts
var inject = (sheet, mode2, init, context) => {
let sortedPrecedences;
init((value = []) => (sortedPrecedences = value));
let insertedRules;
init((value = new Set()) => (insertedRules = value));
return ({ r: css, p: presedence }) => {
if (!insertedRules.has(css)) {
insertedRules.add(css);
const index = sortedInsertionIndex(sortedPrecedences, presedence);
try {
sheet.insert(css, index);
sortedPrecedences.splice(index, 0, presedence);
} catch (error) {
if (!/:-[mwo]/.test(css)) {
mode2.report({ id: 'INJECT_CSS_ERROR', css, error }, context);
}
}
}
};
};
// src/twind/configure.ts
var sanitize = (value, defaultValue, disabled, enabled = defaultValue) =>
value === false ? disabled : value === true ? enabled : value || defaultValue;
var loadMode = (mode2) =>
(typeof mode2 == 'string' ? { t: strict, a: warn, i: silent }[mode2[1]] : mode2) || warn;
var stringifyVariant = (selector, variant) =>
selector + (variant[1] == ':' ? tail(variant, 2) + ':' : tail(variant)) + ':';
var stringify2 = (rule, directive2 = rule.d) =>
typeof directive2 == 'function'
? ''
: rule.v.reduce(stringifyVariant, '') +
(rule.i ? '!' : '') +
(rule.n ? '-' : '') +
directive2;
var COMPONENT_PROPS = { _: { value: '', writable: true } };
var configure = (config = {}) => {
const theme2 = makeThemeResolver(config.theme);
const mode2 = loadMode(config.mode);
const hash = sanitize(config.hash, false, false, cyrb32);
const important = config.important;
let activeRule = { v: [] };
let translateDepth = 0;
const lastTranslations = [];
const context = {
tw: (...tokens) => process(tokens),
theme: (section, key, defaultValue) => {
var _a;
const value =
(_a = theme2(section, key, defaultValue)) != null
? _a
: mode2.unknown(
section,
key == null || Array.isArray(key) ? key : key.split('.'),
defaultValue != null,
context
);
return activeRule.n && value && includes('rg', (typeof value)[5])
? `calc(${value} * -1)`
: value;
},
tag: (value) => (hash ? hash(value) : value),
css: (rules2) => {
translateDepth++;
const lastTranslationsIndex = lastTranslations.length;
try {
(typeof rules2 == 'string' ? parse([rules2]) : rules2).forEach(convert);
const css = Object.create(null, COMPONENT_PROPS);
for (let index = lastTranslationsIndex; index < lastTranslations.length; index++) {
const translation = lastTranslations[index];
if (translation) {
switch (typeof translation) {
case 'object':
merge(css, translation, context);
break;
case 'string':
css._ += (css._ && ' ') + translation;
}
}
}
return css;
} finally {
lastTranslations.length = lastTranslationsIndex;
translateDepth--;
}
},
};
const translate2 = translate({ ...corePlugins, ...config.plugins }, context);
const doTranslate = (rule) => {
const parentRule = activeRule;
activeRule = rule;
try {
return evalThunk(translate2(rule), context);
} finally {
activeRule = parentRule;
}
};
const variants = { ...coreVariants, ...config.variants };
const decorate2 = decorate(config.darkMode || 'media', variants, context);
const serialize2 = serialize(
sanitize(config.prefix, autoprefix, noprefix),
variants,
context
);
const sheet =
config.sheet || (typeof window == 'undefined' ? voidSheet() : cssomSheet(config));
const { init = (callback) => callback() } = sheet;
const inject2 = inject(sheet, mode2, init, context);
let idToClassName;
init((value = new Map()) => (idToClassName = value));
const inlineDirectiveName = new WeakMap();
const evaluateFunctions = (key, value) =>
key == '_'
? void 0
: typeof value == 'function'
? JSON.stringify(evalThunk(value, context), evaluateFunctions)
: value;
const convert = (rule) => {
if (!translateDepth && activeRule.v.length) {
rule = { ...rule, v: [...activeRule.v, ...rule.v], $: '' };
}
if (!rule.$) {
rule.$ = stringify2(rule, inlineDirectiveName.get(rule.d));
}
let className = translateDepth ? null : idToClassName.get(rule.$);
if (className == null) {
let translation = doTranslate(rule);
if (!rule.$) {
rule.$ = cyrb32(JSON.stringify(translation, evaluateFunctions));
inlineDirectiveName.set(rule.d, rule.$);
rule.$ = stringify2(rule, rule.$);
}
if (translation && typeof translation == 'object') {
rule.v = rule.v.map(prepareVariantSelector);
if (important) rule.i = important;
translation = decorate2(translation, rule);
if (translateDepth) {
lastTranslations.push(translation);
} else {
const layer =
typeof rule.d == 'function' ? (typeof translation._ == 'string' ? 1 : 3) : 2;
className =
hash || typeof rule.d == 'function' ? (hash || cyrb32)(layer + rule.$) : rule.$;
serialize2(translation, className, rule, layer).forEach(inject2);
if (translation._) {
className += ' ' + translation._;
}
}
} else {
if (typeof translation == 'string') {
className = translation;
} else {
className = rule.$;
mode2.report({ id: 'UNKNOWN_DIRECTIVE', rule: className }, context);
}
if (translateDepth && typeof rule.d !== 'function') {
lastTranslations.push(className);
}
}
if (!translateDepth) {
idToClassName.set(rule.$, className);
ensureMaxSize(idToClassName, 3e4);
}
}
return className;
};
const process = (tokens) => join(parse(tokens).map(convert).filter(Boolean), ' ');
const preflight = sanitize(config.preflight, identity, false);
if (preflight) {
const css = createPreflight(theme2);
const styles = serialize2(
typeof preflight == 'function'
? evalThunk(preflight(css, context), context) || css
: { ...css, ...preflight }
);
init((injected = (styles.forEach(inject2), true)) => injected);
}
return {
init: () => mode2.report({ id: 'LATE_SETUP_CALL' }, context),
process,
};
};
// src/twind/instance.ts
var create = (config) => {
let process = (tokens) => {
init();
return process(tokens);
};
let init = (config2) => {
({ process, init } = configure(config2));
};
if (config) init(config);
let context;
const fromContext = (key) => () => {
if (!context) {
process([
(_4) => {
context = _4;
return '';
},
]);
}
return context[key];
};
return {
tw: Object.defineProperties((...tokens) => process(tokens), {
theme: {
get: fromContext('theme'),
},
}),
setup: (config2) => init(config2),
};
};
// src/twind/default.ts
var { tw, setup } = /* @__PURE__ */ create();
export {
apply,
autoprefix,
create,
cssomSheet,
directive,
cyrb32 as hash,
mode,
noprefix,
setup,
silent,
strict,
theme,
tw,
voidSheet,
warn,
};