@axiomui/utils 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -24,70 +24,3198 @@ __export(index_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(index_exports);
26
26
 
27
- // src/cn.ts
28
- function toClassName(value) {
29
- if (typeof value === "string" || typeof value === "number") {
30
- return String(value);
27
+ // ../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
28
+ function r(e) {
29
+ var t, f, n = "";
30
+ if ("string" == typeof e || "number" == typeof e) n += e;
31
+ else if ("object" == typeof e) if (Array.isArray(e)) {
32
+ var o = e.length;
33
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
34
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
35
+ return n;
36
+ }
37
+ function clsx() {
38
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
39
+ return n;
40
+ }
41
+
42
+ // ../../node_modules/.pnpm/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs
43
+ var concatArrays = (array1, array2) => {
44
+ const combinedArray = new Array(array1.length + array2.length);
45
+ for (let i = 0; i < array1.length; i++) {
46
+ combinedArray[i] = array1[i];
47
+ }
48
+ for (let i = 0; i < array2.length; i++) {
49
+ combinedArray[array1.length + i] = array2[i];
50
+ }
51
+ return combinedArray;
52
+ };
53
+ var createClassValidatorObject = (classGroupId, validator) => ({
54
+ classGroupId,
55
+ validator
56
+ });
57
+ var createClassPartObject = (nextPart = /* @__PURE__ */ new Map(), validators = null, classGroupId) => ({
58
+ nextPart,
59
+ validators,
60
+ classGroupId
61
+ });
62
+ var CLASS_PART_SEPARATOR = "-";
63
+ var EMPTY_CONFLICTS = [];
64
+ var ARBITRARY_PROPERTY_PREFIX = "arbitrary..";
65
+ var createClassGroupUtils = (config) => {
66
+ const classMap = createClassMap(config);
67
+ const {
68
+ conflictingClassGroups,
69
+ conflictingClassGroupModifiers
70
+ } = config;
71
+ const getClassGroupId = (className) => {
72
+ if (className.startsWith("[") && className.endsWith("]")) {
73
+ return getGroupIdForArbitraryProperty(className);
74
+ }
75
+ const classParts = className.split(CLASS_PART_SEPARATOR);
76
+ const startIndex = classParts[0] === "" && classParts.length > 1 ? 1 : 0;
77
+ return getGroupRecursive(classParts, startIndex, classMap);
78
+ };
79
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
80
+ if (hasPostfixModifier) {
81
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
82
+ const baseConflicts = conflictingClassGroups[classGroupId];
83
+ if (modifierConflicts) {
84
+ if (baseConflicts) {
85
+ return concatArrays(baseConflicts, modifierConflicts);
86
+ }
87
+ return modifierConflicts;
88
+ }
89
+ return baseConflicts || EMPTY_CONFLICTS;
90
+ }
91
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
92
+ };
93
+ return {
94
+ getClassGroupId,
95
+ getConflictingClassGroupIds
96
+ };
97
+ };
98
+ var getGroupRecursive = (classParts, startIndex, classPartObject) => {
99
+ const classPathsLength = classParts.length - startIndex;
100
+ if (classPathsLength === 0) {
101
+ return classPartObject.classGroupId;
31
102
  }
32
- if (!value || typeof value === "boolean") {
33
- return "";
103
+ const currentClassPart = classParts[startIndex];
104
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
105
+ if (nextClassPartObject) {
106
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
107
+ if (result) return result;
34
108
  }
35
- if (Array.isArray(value)) {
36
- return value.map(toClassName).filter(Boolean).join(" ");
109
+ const validators = classPartObject.validators;
110
+ if (validators === null) {
111
+ return void 0;
37
112
  }
38
- return Object.entries(value).filter(([, condition]) => Boolean(condition)).map(([className]) => className).join(" ");
39
- }
40
- function getUtilityGroup(utility) {
41
- const groups = [
42
- [/^p[trblxy]?-/u, "padding"],
43
- [/^m[trblxy]?-/u, "margin"],
44
- [/^(w|min-w|max-w)-/u, "width"],
45
- [/^(h|min-h|max-h)-/u, "height"],
46
- [/^size-/u, "size"],
47
- [/^bg-/u, "background"],
48
- [/^text-/u, "text"],
49
- [/^(font|tracking|leading)-/u, "typography"],
50
- [/^rounded(?:-[trbl]{1,2})?-/u, "radius"],
51
- [/^border(?:-[trblxy])?-/u, "border"],
52
- [/^ring(?:-[trblxy])?-/u, "ring"],
53
- [/^shadow/u, "shadow"],
54
- [/^opacity-/u, "opacity"],
55
- [/^gap[xy]?-/u, "gap"],
56
- [/^justify-/u, "justify"],
57
- [/^items-/u, "items"],
58
- [/^inline-flex$|^flex$|^block$|^inline-block$|^hidden$/u, "display"],
59
- [/^transition/u, "transition"],
60
- [/^duration-/u, "duration"],
61
- [/^ease-/u, "ease"],
62
- [/^transform$/u, "transform"],
63
- [/^(scale|translate|rotate|skew)-/u, "transform-effect"]
113
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
114
+ const validatorsLength = validators.length;
115
+ for (let i = 0; i < validatorsLength; i++) {
116
+ const validatorObj = validators[i];
117
+ if (validatorObj.validator(classRest)) {
118
+ return validatorObj.classGroupId;
119
+ }
120
+ }
121
+ return void 0;
122
+ };
123
+ var getGroupIdForArbitraryProperty = (className) => className.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
124
+ const content = className.slice(1, -1);
125
+ const colonIndex = content.indexOf(":");
126
+ const property = content.slice(0, colonIndex);
127
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : void 0;
128
+ })();
129
+ var createClassMap = (config) => {
130
+ const {
131
+ theme,
132
+ classGroups
133
+ } = config;
134
+ return processClassGroups(classGroups, theme);
135
+ };
136
+ var processClassGroups = (classGroups, theme) => {
137
+ const classMap = createClassPartObject();
138
+ for (const classGroupId in classGroups) {
139
+ const group = classGroups[classGroupId];
140
+ processClassesRecursively(group, classMap, classGroupId, theme);
141
+ }
142
+ return classMap;
143
+ };
144
+ var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
145
+ const len = classGroup.length;
146
+ for (let i = 0; i < len; i++) {
147
+ const classDefinition = classGroup[i];
148
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
149
+ }
150
+ };
151
+ var processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
152
+ if (typeof classDefinition === "string") {
153
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
154
+ return;
155
+ }
156
+ if (typeof classDefinition === "function") {
157
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
158
+ return;
159
+ }
160
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
161
+ };
162
+ var processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
163
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
164
+ classPartObjectToEdit.classGroupId = classGroupId;
165
+ };
166
+ var processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
167
+ if (isThemeGetter(classDefinition)) {
168
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
169
+ return;
170
+ }
171
+ if (classPartObject.validators === null) {
172
+ classPartObject.validators = [];
173
+ }
174
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
175
+ };
176
+ var processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
177
+ const entries = Object.entries(classDefinition);
178
+ const len = entries.length;
179
+ for (let i = 0; i < len; i++) {
180
+ const [key, value] = entries[i];
181
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
182
+ }
183
+ };
184
+ var getPart = (classPartObject, path) => {
185
+ let current = classPartObject;
186
+ const parts = path.split(CLASS_PART_SEPARATOR);
187
+ const len = parts.length;
188
+ for (let i = 0; i < len; i++) {
189
+ const part = parts[i];
190
+ let next = current.nextPart.get(part);
191
+ if (!next) {
192
+ next = createClassPartObject();
193
+ current.nextPart.set(part, next);
194
+ }
195
+ current = next;
196
+ }
197
+ return current;
198
+ };
199
+ var isThemeGetter = (func) => "isThemeGetter" in func && func.isThemeGetter === true;
200
+ var createLruCache = (maxCacheSize) => {
201
+ if (maxCacheSize < 1) {
202
+ return {
203
+ get: () => void 0,
204
+ set: () => {
205
+ }
206
+ };
207
+ }
208
+ let cacheSize = 0;
209
+ let cache = /* @__PURE__ */ Object.create(null);
210
+ let previousCache = /* @__PURE__ */ Object.create(null);
211
+ const update = (key, value) => {
212
+ cache[key] = value;
213
+ cacheSize++;
214
+ if (cacheSize > maxCacheSize) {
215
+ cacheSize = 0;
216
+ previousCache = cache;
217
+ cache = /* @__PURE__ */ Object.create(null);
218
+ }
219
+ };
220
+ return {
221
+ get(key) {
222
+ let value = cache[key];
223
+ if (value !== void 0) {
224
+ return value;
225
+ }
226
+ if ((value = previousCache[key]) !== void 0) {
227
+ update(key, value);
228
+ return value;
229
+ }
230
+ },
231
+ set(key, value) {
232
+ if (key in cache) {
233
+ cache[key] = value;
234
+ } else {
235
+ update(key, value);
236
+ }
237
+ }
238
+ };
239
+ };
240
+ var IMPORTANT_MODIFIER = "!";
241
+ var MODIFIER_SEPARATOR = ":";
242
+ var EMPTY_MODIFIERS = [];
243
+ var createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
244
+ modifiers,
245
+ hasImportantModifier,
246
+ baseClassName,
247
+ maybePostfixModifierPosition,
248
+ isExternal
249
+ });
250
+ var createParseClassName = (config) => {
251
+ const {
252
+ prefix,
253
+ experimentalParseClassName
254
+ } = config;
255
+ let parseClassName = (className) => {
256
+ const modifiers = [];
257
+ let bracketDepth = 0;
258
+ let parenDepth = 0;
259
+ let modifierStart = 0;
260
+ let postfixModifierPosition;
261
+ const len = className.length;
262
+ for (let index = 0; index < len; index++) {
263
+ const currentCharacter = className[index];
264
+ if (bracketDepth === 0 && parenDepth === 0) {
265
+ if (currentCharacter === MODIFIER_SEPARATOR) {
266
+ modifiers.push(className.slice(modifierStart, index));
267
+ modifierStart = index + 1;
268
+ continue;
269
+ }
270
+ if (currentCharacter === "/") {
271
+ postfixModifierPosition = index;
272
+ continue;
273
+ }
274
+ }
275
+ if (currentCharacter === "[") bracketDepth++;
276
+ else if (currentCharacter === "]") bracketDepth--;
277
+ else if (currentCharacter === "(") parenDepth++;
278
+ else if (currentCharacter === ")") parenDepth--;
279
+ }
280
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
281
+ let baseClassName = baseClassNameWithImportantModifier;
282
+ let hasImportantModifier = false;
283
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
284
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
285
+ hasImportantModifier = true;
286
+ } else if (
287
+ /**
288
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
289
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
290
+ */
291
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)
292
+ ) {
293
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
294
+ hasImportantModifier = true;
295
+ }
296
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
297
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
298
+ };
299
+ if (prefix) {
300
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
301
+ const parseClassNameOriginal = parseClassName;
302
+ parseClassName = (className) => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, void 0, true);
303
+ }
304
+ if (experimentalParseClassName) {
305
+ const parseClassNameOriginal = parseClassName;
306
+ parseClassName = (className) => experimentalParseClassName({
307
+ className,
308
+ parseClassName: parseClassNameOriginal
309
+ });
310
+ }
311
+ return parseClassName;
312
+ };
313
+ var createSortModifiers = (config) => {
314
+ const modifierWeights = /* @__PURE__ */ new Map();
315
+ config.orderSensitiveModifiers.forEach((mod, index) => {
316
+ modifierWeights.set(mod, 1e6 + index);
317
+ });
318
+ return (modifiers) => {
319
+ const result = [];
320
+ let currentSegment = [];
321
+ for (let i = 0; i < modifiers.length; i++) {
322
+ const modifier = modifiers[i];
323
+ const isArbitrary = modifier[0] === "[";
324
+ const isOrderSensitive = modifierWeights.has(modifier);
325
+ if (isArbitrary || isOrderSensitive) {
326
+ if (currentSegment.length > 0) {
327
+ currentSegment.sort();
328
+ result.push(...currentSegment);
329
+ currentSegment = [];
330
+ }
331
+ result.push(modifier);
332
+ } else {
333
+ currentSegment.push(modifier);
334
+ }
335
+ }
336
+ if (currentSegment.length > 0) {
337
+ currentSegment.sort();
338
+ result.push(...currentSegment);
339
+ }
340
+ return result;
341
+ };
342
+ };
343
+ var createConfigUtils = (config) => ({
344
+ cache: createLruCache(config.cacheSize),
345
+ parseClassName: createParseClassName(config),
346
+ sortModifiers: createSortModifiers(config),
347
+ ...createClassGroupUtils(config)
348
+ });
349
+ var SPLIT_CLASSES_REGEX = /\s+/;
350
+ var mergeClassList = (classList, configUtils) => {
351
+ const {
352
+ parseClassName,
353
+ getClassGroupId,
354
+ getConflictingClassGroupIds,
355
+ sortModifiers
356
+ } = configUtils;
357
+ const classGroupsInConflict = [];
358
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
359
+ let result = "";
360
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
361
+ const originalClassName = classNames[index];
362
+ const {
363
+ isExternal,
364
+ modifiers,
365
+ hasImportantModifier,
366
+ baseClassName,
367
+ maybePostfixModifierPosition
368
+ } = parseClassName(originalClassName);
369
+ if (isExternal) {
370
+ result = originalClassName + (result.length > 0 ? " " + result : result);
371
+ continue;
372
+ }
373
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
374
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
375
+ if (!classGroupId) {
376
+ if (!hasPostfixModifier) {
377
+ result = originalClassName + (result.length > 0 ? " " + result : result);
378
+ continue;
379
+ }
380
+ classGroupId = getClassGroupId(baseClassName);
381
+ if (!classGroupId) {
382
+ result = originalClassName + (result.length > 0 ? " " + result : result);
383
+ continue;
384
+ }
385
+ hasPostfixModifier = false;
386
+ }
387
+ const variantModifier = modifiers.length === 0 ? "" : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(":");
388
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
389
+ const classId = modifierId + classGroupId;
390
+ if (classGroupsInConflict.indexOf(classId) > -1) {
391
+ continue;
392
+ }
393
+ classGroupsInConflict.push(classId);
394
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
395
+ for (let i = 0; i < conflictGroups.length; ++i) {
396
+ const group = conflictGroups[i];
397
+ classGroupsInConflict.push(modifierId + group);
398
+ }
399
+ result = originalClassName + (result.length > 0 ? " " + result : result);
400
+ }
401
+ return result;
402
+ };
403
+ var twJoin = (...classLists) => {
404
+ let index = 0;
405
+ let argument;
406
+ let resolvedValue;
407
+ let string = "";
408
+ while (index < classLists.length) {
409
+ if (argument = classLists[index++]) {
410
+ if (resolvedValue = toValue(argument)) {
411
+ string && (string += " ");
412
+ string += resolvedValue;
413
+ }
414
+ }
415
+ }
416
+ return string;
417
+ };
418
+ var toValue = (mix) => {
419
+ if (typeof mix === "string") {
420
+ return mix;
421
+ }
422
+ let resolvedValue;
423
+ let string = "";
424
+ for (let k = 0; k < mix.length; k++) {
425
+ if (mix[k]) {
426
+ if (resolvedValue = toValue(mix[k])) {
427
+ string && (string += " ");
428
+ string += resolvedValue;
429
+ }
430
+ }
431
+ }
432
+ return string;
433
+ };
434
+ var createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
435
+ let configUtils;
436
+ let cacheGet;
437
+ let cacheSet;
438
+ let functionToCall;
439
+ const initTailwindMerge = (classList) => {
440
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
441
+ configUtils = createConfigUtils(config);
442
+ cacheGet = configUtils.cache.get;
443
+ cacheSet = configUtils.cache.set;
444
+ functionToCall = tailwindMerge;
445
+ return tailwindMerge(classList);
446
+ };
447
+ const tailwindMerge = (classList) => {
448
+ const cachedResult = cacheGet(classList);
449
+ if (cachedResult) {
450
+ return cachedResult;
451
+ }
452
+ const result = mergeClassList(classList, configUtils);
453
+ cacheSet(classList, result);
454
+ return result;
455
+ };
456
+ functionToCall = initTailwindMerge;
457
+ return (...args) => functionToCall(twJoin(...args));
458
+ };
459
+ var fallbackThemeArr = [];
460
+ var fromTheme = (key) => {
461
+ const themeGetter = (theme) => theme[key] || fallbackThemeArr;
462
+ themeGetter.isThemeGetter = true;
463
+ return themeGetter;
464
+ };
465
+ var arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
466
+ var arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
467
+ var fractionRegex = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/;
468
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
469
+ var lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
470
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
471
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
472
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
473
+ var isFraction = (value) => fractionRegex.test(value);
474
+ var isNumber = (value) => !!value && !Number.isNaN(Number(value));
475
+ var isInteger = (value) => !!value && Number.isInteger(Number(value));
476
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
477
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
478
+ var isAny = () => true;
479
+ var isLengthOnly = (value) => (
480
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
481
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
482
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
483
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
484
+ );
485
+ var isNever = () => false;
486
+ var isShadow = (value) => shadowRegex.test(value);
487
+ var isImage = (value) => imageRegex.test(value);
488
+ var isAnyNonArbitrary = (value) => !isArbitraryValue(value) && !isArbitraryVariable(value);
489
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, isLabelSize, isNever);
490
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
491
+ var isArbitraryLength = (value) => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
492
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, isLabelNumber, isNumber);
493
+ var isArbitraryWeight = (value) => getIsArbitraryValue(value, isLabelWeight, isAny);
494
+ var isArbitraryFamilyName = (value) => getIsArbitraryValue(value, isLabelFamilyName, isNever);
495
+ var isArbitraryPosition = (value) => getIsArbitraryValue(value, isLabelPosition, isNever);
496
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, isLabelImage, isImage);
497
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, isLabelShadow, isShadow);
498
+ var isArbitraryVariable = (value) => arbitraryVariableRegex.test(value);
499
+ var isArbitraryVariableLength = (value) => getIsArbitraryVariable(value, isLabelLength);
500
+ var isArbitraryVariableFamilyName = (value) => getIsArbitraryVariable(value, isLabelFamilyName);
501
+ var isArbitraryVariablePosition = (value) => getIsArbitraryVariable(value, isLabelPosition);
502
+ var isArbitraryVariableSize = (value) => getIsArbitraryVariable(value, isLabelSize);
503
+ var isArbitraryVariableImage = (value) => getIsArbitraryVariable(value, isLabelImage);
504
+ var isArbitraryVariableShadow = (value) => getIsArbitraryVariable(value, isLabelShadow, true);
505
+ var isArbitraryVariableWeight = (value) => getIsArbitraryVariable(value, isLabelWeight, true);
506
+ var getIsArbitraryValue = (value, testLabel, testValue) => {
507
+ const result = arbitraryValueRegex.exec(value);
508
+ if (result) {
509
+ if (result[1]) {
510
+ return testLabel(result[1]);
511
+ }
512
+ return testValue(result[2]);
513
+ }
514
+ return false;
515
+ };
516
+ var getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
517
+ const result = arbitraryVariableRegex.exec(value);
518
+ if (result) {
519
+ if (result[1]) {
520
+ return testLabel(result[1]);
521
+ }
522
+ return shouldMatchNoLabel;
523
+ }
524
+ return false;
525
+ };
526
+ var isLabelPosition = (label) => label === "position" || label === "percentage";
527
+ var isLabelImage = (label) => label === "image" || label === "url";
528
+ var isLabelSize = (label) => label === "length" || label === "size" || label === "bg-size";
529
+ var isLabelLength = (label) => label === "length";
530
+ var isLabelNumber = (label) => label === "number";
531
+ var isLabelFamilyName = (label) => label === "family-name";
532
+ var isLabelWeight = (label) => label === "number" || label === "weight";
533
+ var isLabelShadow = (label) => label === "shadow";
534
+ var getDefaultConfig = () => {
535
+ const themeColor = fromTheme("color");
536
+ const themeFont = fromTheme("font");
537
+ const themeText = fromTheme("text");
538
+ const themeFontWeight = fromTheme("font-weight");
539
+ const themeTracking = fromTheme("tracking");
540
+ const themeLeading = fromTheme("leading");
541
+ const themeBreakpoint = fromTheme("breakpoint");
542
+ const themeContainer = fromTheme("container");
543
+ const themeSpacing = fromTheme("spacing");
544
+ const themeRadius = fromTheme("radius");
545
+ const themeShadow = fromTheme("shadow");
546
+ const themeInsetShadow = fromTheme("inset-shadow");
547
+ const themeTextShadow = fromTheme("text-shadow");
548
+ const themeDropShadow = fromTheme("drop-shadow");
549
+ const themeBlur = fromTheme("blur");
550
+ const themePerspective = fromTheme("perspective");
551
+ const themeAspect = fromTheme("aspect");
552
+ const themeEase = fromTheme("ease");
553
+ const themeAnimate = fromTheme("animate");
554
+ const scaleBreak = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
555
+ const scalePosition = () => [
556
+ "center",
557
+ "top",
558
+ "bottom",
559
+ "left",
560
+ "right",
561
+ "top-left",
562
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
563
+ "left-top",
564
+ "top-right",
565
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
566
+ "right-top",
567
+ "bottom-right",
568
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
569
+ "right-bottom",
570
+ "bottom-left",
571
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
572
+ "left-bottom"
64
573
  ];
65
- const matched = groups.find(([pattern]) => pattern.test(utility));
66
- return matched ? matched[1] : utility;
67
- }
68
- function mergeTailwindLikeClasses(className) {
69
- const tokens = className.trim().split(/\s+/u).filter(Boolean);
70
- const merged = /* @__PURE__ */ new Map();
71
- for (const token of tokens) {
72
- const important = token.startsWith("!") ? "!" : "";
73
- const cleanToken = important ? token.slice(1) : token;
74
- const segments = cleanToken.split(":");
75
- const utility = segments.pop() ?? cleanToken;
76
- const variants = segments.join(":");
77
- const key = `${important}${variants}|${getUtilityGroup(utility)}`;
78
- if (merged.has(key)) {
79
- merged.delete(key);
80
- }
81
- merged.set(key, token);
82
- }
83
- return Array.from(merged.values()).join(" ");
84
- }
574
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
575
+ const scaleOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
576
+ const scaleOverscroll = () => ["auto", "contain", "none"];
577
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
578
+ const scaleInset = () => [isFraction, "full", "auto", ...scaleUnambiguousSpacing()];
579
+ const scaleGridTemplateColsRows = () => [isInteger, "none", "subgrid", isArbitraryVariable, isArbitraryValue];
580
+ const scaleGridColRowStartAndEnd = () => ["auto", {
581
+ span: ["full", isInteger, isArbitraryVariable, isArbitraryValue]
582
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
583
+ const scaleGridColRowStartOrEnd = () => [isInteger, "auto", isArbitraryVariable, isArbitraryValue];
584
+ const scaleGridAutoColsRows = () => ["auto", "min", "max", "fr", isArbitraryVariable, isArbitraryValue];
585
+ const scaleAlignPrimaryAxis = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"];
586
+ const scaleAlignSecondaryAxis = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"];
587
+ const scaleMargin = () => ["auto", ...scaleUnambiguousSpacing()];
588
+ const scaleSizing = () => [isFraction, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
589
+ const scaleSizingInline = () => [isFraction, "screen", "full", "dvw", "lvw", "svw", "min", "max", "fit", ...scaleUnambiguousSpacing()];
590
+ const scaleSizingBlock = () => [isFraction, "screen", "full", "lh", "dvh", "lvh", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
591
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
592
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
593
+ position: [isArbitraryVariable, isArbitraryValue]
594
+ }];
595
+ const scaleBgRepeat = () => ["no-repeat", {
596
+ repeat: ["", "x", "y", "space", "round"]
597
+ }];
598
+ const scaleBgSize = () => ["auto", "cover", "contain", isArbitraryVariableSize, isArbitrarySize, {
599
+ size: [isArbitraryVariable, isArbitraryValue]
600
+ }];
601
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
602
+ const scaleRadius = () => [
603
+ // Deprecated since Tailwind CSS v4.0.0
604
+ "",
605
+ "none",
606
+ "full",
607
+ themeRadius,
608
+ isArbitraryVariable,
609
+ isArbitraryValue
610
+ ];
611
+ const scaleBorderWidth = () => ["", isNumber, isArbitraryVariableLength, isArbitraryLength];
612
+ const scaleLineStyle = () => ["solid", "dashed", "dotted", "double"];
613
+ const scaleBlendMode = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
614
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
615
+ const scaleBlur = () => [
616
+ // Deprecated since Tailwind CSS v4.0.0
617
+ "",
618
+ "none",
619
+ themeBlur,
620
+ isArbitraryVariable,
621
+ isArbitraryValue
622
+ ];
623
+ const scaleRotate = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
624
+ const scaleScale = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
625
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
626
+ const scaleTranslate = () => [isFraction, "full", ...scaleUnambiguousSpacing()];
627
+ return {
628
+ cacheSize: 500,
629
+ theme: {
630
+ animate: ["spin", "ping", "pulse", "bounce"],
631
+ aspect: ["video"],
632
+ blur: [isTshirtSize],
633
+ breakpoint: [isTshirtSize],
634
+ color: [isAny],
635
+ container: [isTshirtSize],
636
+ "drop-shadow": [isTshirtSize],
637
+ ease: ["in", "out", "in-out"],
638
+ font: [isAnyNonArbitrary],
639
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
640
+ "inset-shadow": [isTshirtSize],
641
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
642
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
643
+ radius: [isTshirtSize],
644
+ shadow: [isTshirtSize],
645
+ spacing: ["px", isNumber],
646
+ text: [isTshirtSize],
647
+ "text-shadow": [isTshirtSize],
648
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
649
+ },
650
+ classGroups: {
651
+ // --------------
652
+ // --- Layout ---
653
+ // --------------
654
+ /**
655
+ * Aspect Ratio
656
+ * @see https://tailwindcss.com/docs/aspect-ratio
657
+ */
658
+ aspect: [{
659
+ aspect: ["auto", "square", isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
660
+ }],
661
+ /**
662
+ * Container
663
+ * @see https://tailwindcss.com/docs/container
664
+ * @deprecated since Tailwind CSS v4.0.0
665
+ */
666
+ container: ["container"],
667
+ /**
668
+ * Columns
669
+ * @see https://tailwindcss.com/docs/columns
670
+ */
671
+ columns: [{
672
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
673
+ }],
674
+ /**
675
+ * Break After
676
+ * @see https://tailwindcss.com/docs/break-after
677
+ */
678
+ "break-after": [{
679
+ "break-after": scaleBreak()
680
+ }],
681
+ /**
682
+ * Break Before
683
+ * @see https://tailwindcss.com/docs/break-before
684
+ */
685
+ "break-before": [{
686
+ "break-before": scaleBreak()
687
+ }],
688
+ /**
689
+ * Break Inside
690
+ * @see https://tailwindcss.com/docs/break-inside
691
+ */
692
+ "break-inside": [{
693
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
694
+ }],
695
+ /**
696
+ * Box Decoration Break
697
+ * @see https://tailwindcss.com/docs/box-decoration-break
698
+ */
699
+ "box-decoration": [{
700
+ "box-decoration": ["slice", "clone"]
701
+ }],
702
+ /**
703
+ * Box Sizing
704
+ * @see https://tailwindcss.com/docs/box-sizing
705
+ */
706
+ box: [{
707
+ box: ["border", "content"]
708
+ }],
709
+ /**
710
+ * Display
711
+ * @see https://tailwindcss.com/docs/display
712
+ */
713
+ display: ["block", "inline-block", "inline", "flex", "inline-flex", "table", "inline-table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row-group", "table-row", "flow-root", "grid", "inline-grid", "contents", "list-item", "hidden"],
714
+ /**
715
+ * Screen Reader Only
716
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
717
+ */
718
+ sr: ["sr-only", "not-sr-only"],
719
+ /**
720
+ * Floats
721
+ * @see https://tailwindcss.com/docs/float
722
+ */
723
+ float: [{
724
+ float: ["right", "left", "none", "start", "end"]
725
+ }],
726
+ /**
727
+ * Clear
728
+ * @see https://tailwindcss.com/docs/clear
729
+ */
730
+ clear: [{
731
+ clear: ["left", "right", "both", "none", "start", "end"]
732
+ }],
733
+ /**
734
+ * Isolation
735
+ * @see https://tailwindcss.com/docs/isolation
736
+ */
737
+ isolation: ["isolate", "isolation-auto"],
738
+ /**
739
+ * Object Fit
740
+ * @see https://tailwindcss.com/docs/object-fit
741
+ */
742
+ "object-fit": [{
743
+ object: ["contain", "cover", "fill", "none", "scale-down"]
744
+ }],
745
+ /**
746
+ * Object Position
747
+ * @see https://tailwindcss.com/docs/object-position
748
+ */
749
+ "object-position": [{
750
+ object: scalePositionWithArbitrary()
751
+ }],
752
+ /**
753
+ * Overflow
754
+ * @see https://tailwindcss.com/docs/overflow
755
+ */
756
+ overflow: [{
757
+ overflow: scaleOverflow()
758
+ }],
759
+ /**
760
+ * Overflow X
761
+ * @see https://tailwindcss.com/docs/overflow
762
+ */
763
+ "overflow-x": [{
764
+ "overflow-x": scaleOverflow()
765
+ }],
766
+ /**
767
+ * Overflow Y
768
+ * @see https://tailwindcss.com/docs/overflow
769
+ */
770
+ "overflow-y": [{
771
+ "overflow-y": scaleOverflow()
772
+ }],
773
+ /**
774
+ * Overscroll Behavior
775
+ * @see https://tailwindcss.com/docs/overscroll-behavior
776
+ */
777
+ overscroll: [{
778
+ overscroll: scaleOverscroll()
779
+ }],
780
+ /**
781
+ * Overscroll Behavior X
782
+ * @see https://tailwindcss.com/docs/overscroll-behavior
783
+ */
784
+ "overscroll-x": [{
785
+ "overscroll-x": scaleOverscroll()
786
+ }],
787
+ /**
788
+ * Overscroll Behavior Y
789
+ * @see https://tailwindcss.com/docs/overscroll-behavior
790
+ */
791
+ "overscroll-y": [{
792
+ "overscroll-y": scaleOverscroll()
793
+ }],
794
+ /**
795
+ * Position
796
+ * @see https://tailwindcss.com/docs/position
797
+ */
798
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
799
+ /**
800
+ * Inset
801
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
802
+ */
803
+ inset: [{
804
+ inset: scaleInset()
805
+ }],
806
+ /**
807
+ * Inset Inline
808
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
809
+ */
810
+ "inset-x": [{
811
+ "inset-x": scaleInset()
812
+ }],
813
+ /**
814
+ * Inset Block
815
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
816
+ */
817
+ "inset-y": [{
818
+ "inset-y": scaleInset()
819
+ }],
820
+ /**
821
+ * Inset Inline Start
822
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
823
+ * @todo class group will be renamed to `inset-s` in next major release
824
+ */
825
+ start: [{
826
+ "inset-s": scaleInset(),
827
+ /**
828
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.
829
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
830
+ */
831
+ start: scaleInset()
832
+ }],
833
+ /**
834
+ * Inset Inline End
835
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
836
+ * @todo class group will be renamed to `inset-e` in next major release
837
+ */
838
+ end: [{
839
+ "inset-e": scaleInset(),
840
+ /**
841
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.
842
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
843
+ */
844
+ end: scaleInset()
845
+ }],
846
+ /**
847
+ * Inset Block Start
848
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
849
+ */
850
+ "inset-bs": [{
851
+ "inset-bs": scaleInset()
852
+ }],
853
+ /**
854
+ * Inset Block End
855
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
856
+ */
857
+ "inset-be": [{
858
+ "inset-be": scaleInset()
859
+ }],
860
+ /**
861
+ * Top
862
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
863
+ */
864
+ top: [{
865
+ top: scaleInset()
866
+ }],
867
+ /**
868
+ * Right
869
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
870
+ */
871
+ right: [{
872
+ right: scaleInset()
873
+ }],
874
+ /**
875
+ * Bottom
876
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
877
+ */
878
+ bottom: [{
879
+ bottom: scaleInset()
880
+ }],
881
+ /**
882
+ * Left
883
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
884
+ */
885
+ left: [{
886
+ left: scaleInset()
887
+ }],
888
+ /**
889
+ * Visibility
890
+ * @see https://tailwindcss.com/docs/visibility
891
+ */
892
+ visibility: ["visible", "invisible", "collapse"],
893
+ /**
894
+ * Z-Index
895
+ * @see https://tailwindcss.com/docs/z-index
896
+ */
897
+ z: [{
898
+ z: [isInteger, "auto", isArbitraryVariable, isArbitraryValue]
899
+ }],
900
+ // ------------------------
901
+ // --- Flexbox and Grid ---
902
+ // ------------------------
903
+ /**
904
+ * Flex Basis
905
+ * @see https://tailwindcss.com/docs/flex-basis
906
+ */
907
+ basis: [{
908
+ basis: [isFraction, "full", "auto", themeContainer, ...scaleUnambiguousSpacing()]
909
+ }],
910
+ /**
911
+ * Flex Direction
912
+ * @see https://tailwindcss.com/docs/flex-direction
913
+ */
914
+ "flex-direction": [{
915
+ flex: ["row", "row-reverse", "col", "col-reverse"]
916
+ }],
917
+ /**
918
+ * Flex Wrap
919
+ * @see https://tailwindcss.com/docs/flex-wrap
920
+ */
921
+ "flex-wrap": [{
922
+ flex: ["nowrap", "wrap", "wrap-reverse"]
923
+ }],
924
+ /**
925
+ * Flex
926
+ * @see https://tailwindcss.com/docs/flex
927
+ */
928
+ flex: [{
929
+ flex: [isNumber, isFraction, "auto", "initial", "none", isArbitraryValue]
930
+ }],
931
+ /**
932
+ * Flex Grow
933
+ * @see https://tailwindcss.com/docs/flex-grow
934
+ */
935
+ grow: [{
936
+ grow: ["", isNumber, isArbitraryVariable, isArbitraryValue]
937
+ }],
938
+ /**
939
+ * Flex Shrink
940
+ * @see https://tailwindcss.com/docs/flex-shrink
941
+ */
942
+ shrink: [{
943
+ shrink: ["", isNumber, isArbitraryVariable, isArbitraryValue]
944
+ }],
945
+ /**
946
+ * Order
947
+ * @see https://tailwindcss.com/docs/order
948
+ */
949
+ order: [{
950
+ order: [isInteger, "first", "last", "none", isArbitraryVariable, isArbitraryValue]
951
+ }],
952
+ /**
953
+ * Grid Template Columns
954
+ * @see https://tailwindcss.com/docs/grid-template-columns
955
+ */
956
+ "grid-cols": [{
957
+ "grid-cols": scaleGridTemplateColsRows()
958
+ }],
959
+ /**
960
+ * Grid Column Start / End
961
+ * @see https://tailwindcss.com/docs/grid-column
962
+ */
963
+ "col-start-end": [{
964
+ col: scaleGridColRowStartAndEnd()
965
+ }],
966
+ /**
967
+ * Grid Column Start
968
+ * @see https://tailwindcss.com/docs/grid-column
969
+ */
970
+ "col-start": [{
971
+ "col-start": scaleGridColRowStartOrEnd()
972
+ }],
973
+ /**
974
+ * Grid Column End
975
+ * @see https://tailwindcss.com/docs/grid-column
976
+ */
977
+ "col-end": [{
978
+ "col-end": scaleGridColRowStartOrEnd()
979
+ }],
980
+ /**
981
+ * Grid Template Rows
982
+ * @see https://tailwindcss.com/docs/grid-template-rows
983
+ */
984
+ "grid-rows": [{
985
+ "grid-rows": scaleGridTemplateColsRows()
986
+ }],
987
+ /**
988
+ * Grid Row Start / End
989
+ * @see https://tailwindcss.com/docs/grid-row
990
+ */
991
+ "row-start-end": [{
992
+ row: scaleGridColRowStartAndEnd()
993
+ }],
994
+ /**
995
+ * Grid Row Start
996
+ * @see https://tailwindcss.com/docs/grid-row
997
+ */
998
+ "row-start": [{
999
+ "row-start": scaleGridColRowStartOrEnd()
1000
+ }],
1001
+ /**
1002
+ * Grid Row End
1003
+ * @see https://tailwindcss.com/docs/grid-row
1004
+ */
1005
+ "row-end": [{
1006
+ "row-end": scaleGridColRowStartOrEnd()
1007
+ }],
1008
+ /**
1009
+ * Grid Auto Flow
1010
+ * @see https://tailwindcss.com/docs/grid-auto-flow
1011
+ */
1012
+ "grid-flow": [{
1013
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
1014
+ }],
1015
+ /**
1016
+ * Grid Auto Columns
1017
+ * @see https://tailwindcss.com/docs/grid-auto-columns
1018
+ */
1019
+ "auto-cols": [{
1020
+ "auto-cols": scaleGridAutoColsRows()
1021
+ }],
1022
+ /**
1023
+ * Grid Auto Rows
1024
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1025
+ */
1026
+ "auto-rows": [{
1027
+ "auto-rows": scaleGridAutoColsRows()
1028
+ }],
1029
+ /**
1030
+ * Gap
1031
+ * @see https://tailwindcss.com/docs/gap
1032
+ */
1033
+ gap: [{
1034
+ gap: scaleUnambiguousSpacing()
1035
+ }],
1036
+ /**
1037
+ * Gap X
1038
+ * @see https://tailwindcss.com/docs/gap
1039
+ */
1040
+ "gap-x": [{
1041
+ "gap-x": scaleUnambiguousSpacing()
1042
+ }],
1043
+ /**
1044
+ * Gap Y
1045
+ * @see https://tailwindcss.com/docs/gap
1046
+ */
1047
+ "gap-y": [{
1048
+ "gap-y": scaleUnambiguousSpacing()
1049
+ }],
1050
+ /**
1051
+ * Justify Content
1052
+ * @see https://tailwindcss.com/docs/justify-content
1053
+ */
1054
+ "justify-content": [{
1055
+ justify: [...scaleAlignPrimaryAxis(), "normal"]
1056
+ }],
1057
+ /**
1058
+ * Justify Items
1059
+ * @see https://tailwindcss.com/docs/justify-items
1060
+ */
1061
+ "justify-items": [{
1062
+ "justify-items": [...scaleAlignSecondaryAxis(), "normal"]
1063
+ }],
1064
+ /**
1065
+ * Justify Self
1066
+ * @see https://tailwindcss.com/docs/justify-self
1067
+ */
1068
+ "justify-self": [{
1069
+ "justify-self": ["auto", ...scaleAlignSecondaryAxis()]
1070
+ }],
1071
+ /**
1072
+ * Align Content
1073
+ * @see https://tailwindcss.com/docs/align-content
1074
+ */
1075
+ "align-content": [{
1076
+ content: ["normal", ...scaleAlignPrimaryAxis()]
1077
+ }],
1078
+ /**
1079
+ * Align Items
1080
+ * @see https://tailwindcss.com/docs/align-items
1081
+ */
1082
+ "align-items": [{
1083
+ items: [...scaleAlignSecondaryAxis(), {
1084
+ baseline: ["", "last"]
1085
+ }]
1086
+ }],
1087
+ /**
1088
+ * Align Self
1089
+ * @see https://tailwindcss.com/docs/align-self
1090
+ */
1091
+ "align-self": [{
1092
+ self: ["auto", ...scaleAlignSecondaryAxis(), {
1093
+ baseline: ["", "last"]
1094
+ }]
1095
+ }],
1096
+ /**
1097
+ * Place Content
1098
+ * @see https://tailwindcss.com/docs/place-content
1099
+ */
1100
+ "place-content": [{
1101
+ "place-content": scaleAlignPrimaryAxis()
1102
+ }],
1103
+ /**
1104
+ * Place Items
1105
+ * @see https://tailwindcss.com/docs/place-items
1106
+ */
1107
+ "place-items": [{
1108
+ "place-items": [...scaleAlignSecondaryAxis(), "baseline"]
1109
+ }],
1110
+ /**
1111
+ * Place Self
1112
+ * @see https://tailwindcss.com/docs/place-self
1113
+ */
1114
+ "place-self": [{
1115
+ "place-self": ["auto", ...scaleAlignSecondaryAxis()]
1116
+ }],
1117
+ // Spacing
1118
+ /**
1119
+ * Padding
1120
+ * @see https://tailwindcss.com/docs/padding
1121
+ */
1122
+ p: [{
1123
+ p: scaleUnambiguousSpacing()
1124
+ }],
1125
+ /**
1126
+ * Padding Inline
1127
+ * @see https://tailwindcss.com/docs/padding
1128
+ */
1129
+ px: [{
1130
+ px: scaleUnambiguousSpacing()
1131
+ }],
1132
+ /**
1133
+ * Padding Block
1134
+ * @see https://tailwindcss.com/docs/padding
1135
+ */
1136
+ py: [{
1137
+ py: scaleUnambiguousSpacing()
1138
+ }],
1139
+ /**
1140
+ * Padding Inline Start
1141
+ * @see https://tailwindcss.com/docs/padding
1142
+ */
1143
+ ps: [{
1144
+ ps: scaleUnambiguousSpacing()
1145
+ }],
1146
+ /**
1147
+ * Padding Inline End
1148
+ * @see https://tailwindcss.com/docs/padding
1149
+ */
1150
+ pe: [{
1151
+ pe: scaleUnambiguousSpacing()
1152
+ }],
1153
+ /**
1154
+ * Padding Block Start
1155
+ * @see https://tailwindcss.com/docs/padding
1156
+ */
1157
+ pbs: [{
1158
+ pbs: scaleUnambiguousSpacing()
1159
+ }],
1160
+ /**
1161
+ * Padding Block End
1162
+ * @see https://tailwindcss.com/docs/padding
1163
+ */
1164
+ pbe: [{
1165
+ pbe: scaleUnambiguousSpacing()
1166
+ }],
1167
+ /**
1168
+ * Padding Top
1169
+ * @see https://tailwindcss.com/docs/padding
1170
+ */
1171
+ pt: [{
1172
+ pt: scaleUnambiguousSpacing()
1173
+ }],
1174
+ /**
1175
+ * Padding Right
1176
+ * @see https://tailwindcss.com/docs/padding
1177
+ */
1178
+ pr: [{
1179
+ pr: scaleUnambiguousSpacing()
1180
+ }],
1181
+ /**
1182
+ * Padding Bottom
1183
+ * @see https://tailwindcss.com/docs/padding
1184
+ */
1185
+ pb: [{
1186
+ pb: scaleUnambiguousSpacing()
1187
+ }],
1188
+ /**
1189
+ * Padding Left
1190
+ * @see https://tailwindcss.com/docs/padding
1191
+ */
1192
+ pl: [{
1193
+ pl: scaleUnambiguousSpacing()
1194
+ }],
1195
+ /**
1196
+ * Margin
1197
+ * @see https://tailwindcss.com/docs/margin
1198
+ */
1199
+ m: [{
1200
+ m: scaleMargin()
1201
+ }],
1202
+ /**
1203
+ * Margin Inline
1204
+ * @see https://tailwindcss.com/docs/margin
1205
+ */
1206
+ mx: [{
1207
+ mx: scaleMargin()
1208
+ }],
1209
+ /**
1210
+ * Margin Block
1211
+ * @see https://tailwindcss.com/docs/margin
1212
+ */
1213
+ my: [{
1214
+ my: scaleMargin()
1215
+ }],
1216
+ /**
1217
+ * Margin Inline Start
1218
+ * @see https://tailwindcss.com/docs/margin
1219
+ */
1220
+ ms: [{
1221
+ ms: scaleMargin()
1222
+ }],
1223
+ /**
1224
+ * Margin Inline End
1225
+ * @see https://tailwindcss.com/docs/margin
1226
+ */
1227
+ me: [{
1228
+ me: scaleMargin()
1229
+ }],
1230
+ /**
1231
+ * Margin Block Start
1232
+ * @see https://tailwindcss.com/docs/margin
1233
+ */
1234
+ mbs: [{
1235
+ mbs: scaleMargin()
1236
+ }],
1237
+ /**
1238
+ * Margin Block End
1239
+ * @see https://tailwindcss.com/docs/margin
1240
+ */
1241
+ mbe: [{
1242
+ mbe: scaleMargin()
1243
+ }],
1244
+ /**
1245
+ * Margin Top
1246
+ * @see https://tailwindcss.com/docs/margin
1247
+ */
1248
+ mt: [{
1249
+ mt: scaleMargin()
1250
+ }],
1251
+ /**
1252
+ * Margin Right
1253
+ * @see https://tailwindcss.com/docs/margin
1254
+ */
1255
+ mr: [{
1256
+ mr: scaleMargin()
1257
+ }],
1258
+ /**
1259
+ * Margin Bottom
1260
+ * @see https://tailwindcss.com/docs/margin
1261
+ */
1262
+ mb: [{
1263
+ mb: scaleMargin()
1264
+ }],
1265
+ /**
1266
+ * Margin Left
1267
+ * @see https://tailwindcss.com/docs/margin
1268
+ */
1269
+ ml: [{
1270
+ ml: scaleMargin()
1271
+ }],
1272
+ /**
1273
+ * Space Between X
1274
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1275
+ */
1276
+ "space-x": [{
1277
+ "space-x": scaleUnambiguousSpacing()
1278
+ }],
1279
+ /**
1280
+ * Space Between X Reverse
1281
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1282
+ */
1283
+ "space-x-reverse": ["space-x-reverse"],
1284
+ /**
1285
+ * Space Between Y
1286
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1287
+ */
1288
+ "space-y": [{
1289
+ "space-y": scaleUnambiguousSpacing()
1290
+ }],
1291
+ /**
1292
+ * Space Between Y Reverse
1293
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1294
+ */
1295
+ "space-y-reverse": ["space-y-reverse"],
1296
+ // --------------
1297
+ // --- Sizing ---
1298
+ // --------------
1299
+ /**
1300
+ * Size
1301
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1302
+ */
1303
+ size: [{
1304
+ size: scaleSizing()
1305
+ }],
1306
+ /**
1307
+ * Inline Size
1308
+ * @see https://tailwindcss.com/docs/width
1309
+ */
1310
+ "inline-size": [{
1311
+ inline: ["auto", ...scaleSizingInline()]
1312
+ }],
1313
+ /**
1314
+ * Min-Inline Size
1315
+ * @see https://tailwindcss.com/docs/min-width
1316
+ */
1317
+ "min-inline-size": [{
1318
+ "min-inline": ["auto", ...scaleSizingInline()]
1319
+ }],
1320
+ /**
1321
+ * Max-Inline Size
1322
+ * @see https://tailwindcss.com/docs/max-width
1323
+ */
1324
+ "max-inline-size": [{
1325
+ "max-inline": ["none", ...scaleSizingInline()]
1326
+ }],
1327
+ /**
1328
+ * Block Size
1329
+ * @see https://tailwindcss.com/docs/height
1330
+ */
1331
+ "block-size": [{
1332
+ block: ["auto", ...scaleSizingBlock()]
1333
+ }],
1334
+ /**
1335
+ * Min-Block Size
1336
+ * @see https://tailwindcss.com/docs/min-height
1337
+ */
1338
+ "min-block-size": [{
1339
+ "min-block": ["auto", ...scaleSizingBlock()]
1340
+ }],
1341
+ /**
1342
+ * Max-Block Size
1343
+ * @see https://tailwindcss.com/docs/max-height
1344
+ */
1345
+ "max-block-size": [{
1346
+ "max-block": ["none", ...scaleSizingBlock()]
1347
+ }],
1348
+ /**
1349
+ * Width
1350
+ * @see https://tailwindcss.com/docs/width
1351
+ */
1352
+ w: [{
1353
+ w: [themeContainer, "screen", ...scaleSizing()]
1354
+ }],
1355
+ /**
1356
+ * Min-Width
1357
+ * @see https://tailwindcss.com/docs/min-width
1358
+ */
1359
+ "min-w": [{
1360
+ "min-w": [
1361
+ themeContainer,
1362
+ "screen",
1363
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1364
+ "none",
1365
+ ...scaleSizing()
1366
+ ]
1367
+ }],
1368
+ /**
1369
+ * Max-Width
1370
+ * @see https://tailwindcss.com/docs/max-width
1371
+ */
1372
+ "max-w": [{
1373
+ "max-w": [
1374
+ themeContainer,
1375
+ "screen",
1376
+ "none",
1377
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1378
+ "prose",
1379
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1380
+ {
1381
+ screen: [themeBreakpoint]
1382
+ },
1383
+ ...scaleSizing()
1384
+ ]
1385
+ }],
1386
+ /**
1387
+ * Height
1388
+ * @see https://tailwindcss.com/docs/height
1389
+ */
1390
+ h: [{
1391
+ h: ["screen", "lh", ...scaleSizing()]
1392
+ }],
1393
+ /**
1394
+ * Min-Height
1395
+ * @see https://tailwindcss.com/docs/min-height
1396
+ */
1397
+ "min-h": [{
1398
+ "min-h": ["screen", "lh", "none", ...scaleSizing()]
1399
+ }],
1400
+ /**
1401
+ * Max-Height
1402
+ * @see https://tailwindcss.com/docs/max-height
1403
+ */
1404
+ "max-h": [{
1405
+ "max-h": ["screen", "lh", ...scaleSizing()]
1406
+ }],
1407
+ // ------------------
1408
+ // --- Typography ---
1409
+ // ------------------
1410
+ /**
1411
+ * Font Size
1412
+ * @see https://tailwindcss.com/docs/font-size
1413
+ */
1414
+ "font-size": [{
1415
+ text: ["base", themeText, isArbitraryVariableLength, isArbitraryLength]
1416
+ }],
1417
+ /**
1418
+ * Font Smoothing
1419
+ * @see https://tailwindcss.com/docs/font-smoothing
1420
+ */
1421
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1422
+ /**
1423
+ * Font Style
1424
+ * @see https://tailwindcss.com/docs/font-style
1425
+ */
1426
+ "font-style": ["italic", "not-italic"],
1427
+ /**
1428
+ * Font Weight
1429
+ * @see https://tailwindcss.com/docs/font-weight
1430
+ */
1431
+ "font-weight": [{
1432
+ font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]
1433
+ }],
1434
+ /**
1435
+ * Font Stretch
1436
+ * @see https://tailwindcss.com/docs/font-stretch
1437
+ */
1438
+ "font-stretch": [{
1439
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", isPercent, isArbitraryValue]
1440
+ }],
1441
+ /**
1442
+ * Font Family
1443
+ * @see https://tailwindcss.com/docs/font-family
1444
+ */
1445
+ "font-family": [{
1446
+ font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]
1447
+ }],
1448
+ /**
1449
+ * Font Feature Settings
1450
+ * @see https://tailwindcss.com/docs/font-feature-settings
1451
+ */
1452
+ "font-features": [{
1453
+ "font-features": [isArbitraryValue]
1454
+ }],
1455
+ /**
1456
+ * Font Variant Numeric
1457
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1458
+ */
1459
+ "fvn-normal": ["normal-nums"],
1460
+ /**
1461
+ * Font Variant Numeric
1462
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1463
+ */
1464
+ "fvn-ordinal": ["ordinal"],
1465
+ /**
1466
+ * Font Variant Numeric
1467
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1468
+ */
1469
+ "fvn-slashed-zero": ["slashed-zero"],
1470
+ /**
1471
+ * Font Variant Numeric
1472
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1473
+ */
1474
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1475
+ /**
1476
+ * Font Variant Numeric
1477
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1478
+ */
1479
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1480
+ /**
1481
+ * Font Variant Numeric
1482
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1483
+ */
1484
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1485
+ /**
1486
+ * Letter Spacing
1487
+ * @see https://tailwindcss.com/docs/letter-spacing
1488
+ */
1489
+ tracking: [{
1490
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1491
+ }],
1492
+ /**
1493
+ * Line Clamp
1494
+ * @see https://tailwindcss.com/docs/line-clamp
1495
+ */
1496
+ "line-clamp": [{
1497
+ "line-clamp": [isNumber, "none", isArbitraryVariable, isArbitraryNumber]
1498
+ }],
1499
+ /**
1500
+ * Line Height
1501
+ * @see https://tailwindcss.com/docs/line-height
1502
+ */
1503
+ leading: [{
1504
+ leading: [
1505
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1506
+ themeLeading,
1507
+ ...scaleUnambiguousSpacing()
1508
+ ]
1509
+ }],
1510
+ /**
1511
+ * List Style Image
1512
+ * @see https://tailwindcss.com/docs/list-style-image
1513
+ */
1514
+ "list-image": [{
1515
+ "list-image": ["none", isArbitraryVariable, isArbitraryValue]
1516
+ }],
1517
+ /**
1518
+ * List Style Position
1519
+ * @see https://tailwindcss.com/docs/list-style-position
1520
+ */
1521
+ "list-style-position": [{
1522
+ list: ["inside", "outside"]
1523
+ }],
1524
+ /**
1525
+ * List Style Type
1526
+ * @see https://tailwindcss.com/docs/list-style-type
1527
+ */
1528
+ "list-style-type": [{
1529
+ list: ["disc", "decimal", "none", isArbitraryVariable, isArbitraryValue]
1530
+ }],
1531
+ /**
1532
+ * Text Alignment
1533
+ * @see https://tailwindcss.com/docs/text-align
1534
+ */
1535
+ "text-alignment": [{
1536
+ text: ["left", "center", "right", "justify", "start", "end"]
1537
+ }],
1538
+ /**
1539
+ * Placeholder Color
1540
+ * @deprecated since Tailwind CSS v3.0.0
1541
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1542
+ */
1543
+ "placeholder-color": [{
1544
+ placeholder: scaleColor()
1545
+ }],
1546
+ /**
1547
+ * Text Color
1548
+ * @see https://tailwindcss.com/docs/text-color
1549
+ */
1550
+ "text-color": [{
1551
+ text: scaleColor()
1552
+ }],
1553
+ /**
1554
+ * Text Decoration
1555
+ * @see https://tailwindcss.com/docs/text-decoration
1556
+ */
1557
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1558
+ /**
1559
+ * Text Decoration Style
1560
+ * @see https://tailwindcss.com/docs/text-decoration-style
1561
+ */
1562
+ "text-decoration-style": [{
1563
+ decoration: [...scaleLineStyle(), "wavy"]
1564
+ }],
1565
+ /**
1566
+ * Text Decoration Thickness
1567
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1568
+ */
1569
+ "text-decoration-thickness": [{
1570
+ decoration: [isNumber, "from-font", "auto", isArbitraryVariable, isArbitraryLength]
1571
+ }],
1572
+ /**
1573
+ * Text Decoration Color
1574
+ * @see https://tailwindcss.com/docs/text-decoration-color
1575
+ */
1576
+ "text-decoration-color": [{
1577
+ decoration: scaleColor()
1578
+ }],
1579
+ /**
1580
+ * Text Underline Offset
1581
+ * @see https://tailwindcss.com/docs/text-underline-offset
1582
+ */
1583
+ "underline-offset": [{
1584
+ "underline-offset": [isNumber, "auto", isArbitraryVariable, isArbitraryValue]
1585
+ }],
1586
+ /**
1587
+ * Text Transform
1588
+ * @see https://tailwindcss.com/docs/text-transform
1589
+ */
1590
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1591
+ /**
1592
+ * Text Overflow
1593
+ * @see https://tailwindcss.com/docs/text-overflow
1594
+ */
1595
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1596
+ /**
1597
+ * Text Wrap
1598
+ * @see https://tailwindcss.com/docs/text-wrap
1599
+ */
1600
+ "text-wrap": [{
1601
+ text: ["wrap", "nowrap", "balance", "pretty"]
1602
+ }],
1603
+ /**
1604
+ * Text Indent
1605
+ * @see https://tailwindcss.com/docs/text-indent
1606
+ */
1607
+ indent: [{
1608
+ indent: scaleUnambiguousSpacing()
1609
+ }],
1610
+ /**
1611
+ * Vertical Alignment
1612
+ * @see https://tailwindcss.com/docs/vertical-align
1613
+ */
1614
+ "vertical-align": [{
1615
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryVariable, isArbitraryValue]
1616
+ }],
1617
+ /**
1618
+ * Whitespace
1619
+ * @see https://tailwindcss.com/docs/whitespace
1620
+ */
1621
+ whitespace: [{
1622
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
1623
+ }],
1624
+ /**
1625
+ * Word Break
1626
+ * @see https://tailwindcss.com/docs/word-break
1627
+ */
1628
+ break: [{
1629
+ break: ["normal", "words", "all", "keep"]
1630
+ }],
1631
+ /**
1632
+ * Overflow Wrap
1633
+ * @see https://tailwindcss.com/docs/overflow-wrap
1634
+ */
1635
+ wrap: [{
1636
+ wrap: ["break-word", "anywhere", "normal"]
1637
+ }],
1638
+ /**
1639
+ * Hyphens
1640
+ * @see https://tailwindcss.com/docs/hyphens
1641
+ */
1642
+ hyphens: [{
1643
+ hyphens: ["none", "manual", "auto"]
1644
+ }],
1645
+ /**
1646
+ * Content
1647
+ * @see https://tailwindcss.com/docs/content
1648
+ */
1649
+ content: [{
1650
+ content: ["none", isArbitraryVariable, isArbitraryValue]
1651
+ }],
1652
+ // -------------------
1653
+ // --- Backgrounds ---
1654
+ // -------------------
1655
+ /**
1656
+ * Background Attachment
1657
+ * @see https://tailwindcss.com/docs/background-attachment
1658
+ */
1659
+ "bg-attachment": [{
1660
+ bg: ["fixed", "local", "scroll"]
1661
+ }],
1662
+ /**
1663
+ * Background Clip
1664
+ * @see https://tailwindcss.com/docs/background-clip
1665
+ */
1666
+ "bg-clip": [{
1667
+ "bg-clip": ["border", "padding", "content", "text"]
1668
+ }],
1669
+ /**
1670
+ * Background Origin
1671
+ * @see https://tailwindcss.com/docs/background-origin
1672
+ */
1673
+ "bg-origin": [{
1674
+ "bg-origin": ["border", "padding", "content"]
1675
+ }],
1676
+ /**
1677
+ * Background Position
1678
+ * @see https://tailwindcss.com/docs/background-position
1679
+ */
1680
+ "bg-position": [{
1681
+ bg: scaleBgPosition()
1682
+ }],
1683
+ /**
1684
+ * Background Repeat
1685
+ * @see https://tailwindcss.com/docs/background-repeat
1686
+ */
1687
+ "bg-repeat": [{
1688
+ bg: scaleBgRepeat()
1689
+ }],
1690
+ /**
1691
+ * Background Size
1692
+ * @see https://tailwindcss.com/docs/background-size
1693
+ */
1694
+ "bg-size": [{
1695
+ bg: scaleBgSize()
1696
+ }],
1697
+ /**
1698
+ * Background Image
1699
+ * @see https://tailwindcss.com/docs/background-image
1700
+ */
1701
+ "bg-image": [{
1702
+ bg: ["none", {
1703
+ linear: [{
1704
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
1705
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1706
+ radial: ["", isArbitraryVariable, isArbitraryValue],
1707
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1708
+ }, isArbitraryVariableImage, isArbitraryImage]
1709
+ }],
1710
+ /**
1711
+ * Background Color
1712
+ * @see https://tailwindcss.com/docs/background-color
1713
+ */
1714
+ "bg-color": [{
1715
+ bg: scaleColor()
1716
+ }],
1717
+ /**
1718
+ * Gradient Color Stops From Position
1719
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1720
+ */
1721
+ "gradient-from-pos": [{
1722
+ from: scaleGradientStopPosition()
1723
+ }],
1724
+ /**
1725
+ * Gradient Color Stops Via Position
1726
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1727
+ */
1728
+ "gradient-via-pos": [{
1729
+ via: scaleGradientStopPosition()
1730
+ }],
1731
+ /**
1732
+ * Gradient Color Stops To Position
1733
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1734
+ */
1735
+ "gradient-to-pos": [{
1736
+ to: scaleGradientStopPosition()
1737
+ }],
1738
+ /**
1739
+ * Gradient Color Stops From
1740
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1741
+ */
1742
+ "gradient-from": [{
1743
+ from: scaleColor()
1744
+ }],
1745
+ /**
1746
+ * Gradient Color Stops Via
1747
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1748
+ */
1749
+ "gradient-via": [{
1750
+ via: scaleColor()
1751
+ }],
1752
+ /**
1753
+ * Gradient Color Stops To
1754
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1755
+ */
1756
+ "gradient-to": [{
1757
+ to: scaleColor()
1758
+ }],
1759
+ // ---------------
1760
+ // --- Borders ---
1761
+ // ---------------
1762
+ /**
1763
+ * Border Radius
1764
+ * @see https://tailwindcss.com/docs/border-radius
1765
+ */
1766
+ rounded: [{
1767
+ rounded: scaleRadius()
1768
+ }],
1769
+ /**
1770
+ * Border Radius Start
1771
+ * @see https://tailwindcss.com/docs/border-radius
1772
+ */
1773
+ "rounded-s": [{
1774
+ "rounded-s": scaleRadius()
1775
+ }],
1776
+ /**
1777
+ * Border Radius End
1778
+ * @see https://tailwindcss.com/docs/border-radius
1779
+ */
1780
+ "rounded-e": [{
1781
+ "rounded-e": scaleRadius()
1782
+ }],
1783
+ /**
1784
+ * Border Radius Top
1785
+ * @see https://tailwindcss.com/docs/border-radius
1786
+ */
1787
+ "rounded-t": [{
1788
+ "rounded-t": scaleRadius()
1789
+ }],
1790
+ /**
1791
+ * Border Radius Right
1792
+ * @see https://tailwindcss.com/docs/border-radius
1793
+ */
1794
+ "rounded-r": [{
1795
+ "rounded-r": scaleRadius()
1796
+ }],
1797
+ /**
1798
+ * Border Radius Bottom
1799
+ * @see https://tailwindcss.com/docs/border-radius
1800
+ */
1801
+ "rounded-b": [{
1802
+ "rounded-b": scaleRadius()
1803
+ }],
1804
+ /**
1805
+ * Border Radius Left
1806
+ * @see https://tailwindcss.com/docs/border-radius
1807
+ */
1808
+ "rounded-l": [{
1809
+ "rounded-l": scaleRadius()
1810
+ }],
1811
+ /**
1812
+ * Border Radius Start Start
1813
+ * @see https://tailwindcss.com/docs/border-radius
1814
+ */
1815
+ "rounded-ss": [{
1816
+ "rounded-ss": scaleRadius()
1817
+ }],
1818
+ /**
1819
+ * Border Radius Start End
1820
+ * @see https://tailwindcss.com/docs/border-radius
1821
+ */
1822
+ "rounded-se": [{
1823
+ "rounded-se": scaleRadius()
1824
+ }],
1825
+ /**
1826
+ * Border Radius End End
1827
+ * @see https://tailwindcss.com/docs/border-radius
1828
+ */
1829
+ "rounded-ee": [{
1830
+ "rounded-ee": scaleRadius()
1831
+ }],
1832
+ /**
1833
+ * Border Radius End Start
1834
+ * @see https://tailwindcss.com/docs/border-radius
1835
+ */
1836
+ "rounded-es": [{
1837
+ "rounded-es": scaleRadius()
1838
+ }],
1839
+ /**
1840
+ * Border Radius Top Left
1841
+ * @see https://tailwindcss.com/docs/border-radius
1842
+ */
1843
+ "rounded-tl": [{
1844
+ "rounded-tl": scaleRadius()
1845
+ }],
1846
+ /**
1847
+ * Border Radius Top Right
1848
+ * @see https://tailwindcss.com/docs/border-radius
1849
+ */
1850
+ "rounded-tr": [{
1851
+ "rounded-tr": scaleRadius()
1852
+ }],
1853
+ /**
1854
+ * Border Radius Bottom Right
1855
+ * @see https://tailwindcss.com/docs/border-radius
1856
+ */
1857
+ "rounded-br": [{
1858
+ "rounded-br": scaleRadius()
1859
+ }],
1860
+ /**
1861
+ * Border Radius Bottom Left
1862
+ * @see https://tailwindcss.com/docs/border-radius
1863
+ */
1864
+ "rounded-bl": [{
1865
+ "rounded-bl": scaleRadius()
1866
+ }],
1867
+ /**
1868
+ * Border Width
1869
+ * @see https://tailwindcss.com/docs/border-width
1870
+ */
1871
+ "border-w": [{
1872
+ border: scaleBorderWidth()
1873
+ }],
1874
+ /**
1875
+ * Border Width Inline
1876
+ * @see https://tailwindcss.com/docs/border-width
1877
+ */
1878
+ "border-w-x": [{
1879
+ "border-x": scaleBorderWidth()
1880
+ }],
1881
+ /**
1882
+ * Border Width Block
1883
+ * @see https://tailwindcss.com/docs/border-width
1884
+ */
1885
+ "border-w-y": [{
1886
+ "border-y": scaleBorderWidth()
1887
+ }],
1888
+ /**
1889
+ * Border Width Inline Start
1890
+ * @see https://tailwindcss.com/docs/border-width
1891
+ */
1892
+ "border-w-s": [{
1893
+ "border-s": scaleBorderWidth()
1894
+ }],
1895
+ /**
1896
+ * Border Width Inline End
1897
+ * @see https://tailwindcss.com/docs/border-width
1898
+ */
1899
+ "border-w-e": [{
1900
+ "border-e": scaleBorderWidth()
1901
+ }],
1902
+ /**
1903
+ * Border Width Block Start
1904
+ * @see https://tailwindcss.com/docs/border-width
1905
+ */
1906
+ "border-w-bs": [{
1907
+ "border-bs": scaleBorderWidth()
1908
+ }],
1909
+ /**
1910
+ * Border Width Block End
1911
+ * @see https://tailwindcss.com/docs/border-width
1912
+ */
1913
+ "border-w-be": [{
1914
+ "border-be": scaleBorderWidth()
1915
+ }],
1916
+ /**
1917
+ * Border Width Top
1918
+ * @see https://tailwindcss.com/docs/border-width
1919
+ */
1920
+ "border-w-t": [{
1921
+ "border-t": scaleBorderWidth()
1922
+ }],
1923
+ /**
1924
+ * Border Width Right
1925
+ * @see https://tailwindcss.com/docs/border-width
1926
+ */
1927
+ "border-w-r": [{
1928
+ "border-r": scaleBorderWidth()
1929
+ }],
1930
+ /**
1931
+ * Border Width Bottom
1932
+ * @see https://tailwindcss.com/docs/border-width
1933
+ */
1934
+ "border-w-b": [{
1935
+ "border-b": scaleBorderWidth()
1936
+ }],
1937
+ /**
1938
+ * Border Width Left
1939
+ * @see https://tailwindcss.com/docs/border-width
1940
+ */
1941
+ "border-w-l": [{
1942
+ "border-l": scaleBorderWidth()
1943
+ }],
1944
+ /**
1945
+ * Divide Width X
1946
+ * @see https://tailwindcss.com/docs/border-width#between-children
1947
+ */
1948
+ "divide-x": [{
1949
+ "divide-x": scaleBorderWidth()
1950
+ }],
1951
+ /**
1952
+ * Divide Width X Reverse
1953
+ * @see https://tailwindcss.com/docs/border-width#between-children
1954
+ */
1955
+ "divide-x-reverse": ["divide-x-reverse"],
1956
+ /**
1957
+ * Divide Width Y
1958
+ * @see https://tailwindcss.com/docs/border-width#between-children
1959
+ */
1960
+ "divide-y": [{
1961
+ "divide-y": scaleBorderWidth()
1962
+ }],
1963
+ /**
1964
+ * Divide Width Y Reverse
1965
+ * @see https://tailwindcss.com/docs/border-width#between-children
1966
+ */
1967
+ "divide-y-reverse": ["divide-y-reverse"],
1968
+ /**
1969
+ * Border Style
1970
+ * @see https://tailwindcss.com/docs/border-style
1971
+ */
1972
+ "border-style": [{
1973
+ border: [...scaleLineStyle(), "hidden", "none"]
1974
+ }],
1975
+ /**
1976
+ * Divide Style
1977
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
1978
+ */
1979
+ "divide-style": [{
1980
+ divide: [...scaleLineStyle(), "hidden", "none"]
1981
+ }],
1982
+ /**
1983
+ * Border Color
1984
+ * @see https://tailwindcss.com/docs/border-color
1985
+ */
1986
+ "border-color": [{
1987
+ border: scaleColor()
1988
+ }],
1989
+ /**
1990
+ * Border Color Inline
1991
+ * @see https://tailwindcss.com/docs/border-color
1992
+ */
1993
+ "border-color-x": [{
1994
+ "border-x": scaleColor()
1995
+ }],
1996
+ /**
1997
+ * Border Color Block
1998
+ * @see https://tailwindcss.com/docs/border-color
1999
+ */
2000
+ "border-color-y": [{
2001
+ "border-y": scaleColor()
2002
+ }],
2003
+ /**
2004
+ * Border Color Inline Start
2005
+ * @see https://tailwindcss.com/docs/border-color
2006
+ */
2007
+ "border-color-s": [{
2008
+ "border-s": scaleColor()
2009
+ }],
2010
+ /**
2011
+ * Border Color Inline End
2012
+ * @see https://tailwindcss.com/docs/border-color
2013
+ */
2014
+ "border-color-e": [{
2015
+ "border-e": scaleColor()
2016
+ }],
2017
+ /**
2018
+ * Border Color Block Start
2019
+ * @see https://tailwindcss.com/docs/border-color
2020
+ */
2021
+ "border-color-bs": [{
2022
+ "border-bs": scaleColor()
2023
+ }],
2024
+ /**
2025
+ * Border Color Block End
2026
+ * @see https://tailwindcss.com/docs/border-color
2027
+ */
2028
+ "border-color-be": [{
2029
+ "border-be": scaleColor()
2030
+ }],
2031
+ /**
2032
+ * Border Color Top
2033
+ * @see https://tailwindcss.com/docs/border-color
2034
+ */
2035
+ "border-color-t": [{
2036
+ "border-t": scaleColor()
2037
+ }],
2038
+ /**
2039
+ * Border Color Right
2040
+ * @see https://tailwindcss.com/docs/border-color
2041
+ */
2042
+ "border-color-r": [{
2043
+ "border-r": scaleColor()
2044
+ }],
2045
+ /**
2046
+ * Border Color Bottom
2047
+ * @see https://tailwindcss.com/docs/border-color
2048
+ */
2049
+ "border-color-b": [{
2050
+ "border-b": scaleColor()
2051
+ }],
2052
+ /**
2053
+ * Border Color Left
2054
+ * @see https://tailwindcss.com/docs/border-color
2055
+ */
2056
+ "border-color-l": [{
2057
+ "border-l": scaleColor()
2058
+ }],
2059
+ /**
2060
+ * Divide Color
2061
+ * @see https://tailwindcss.com/docs/divide-color
2062
+ */
2063
+ "divide-color": [{
2064
+ divide: scaleColor()
2065
+ }],
2066
+ /**
2067
+ * Outline Style
2068
+ * @see https://tailwindcss.com/docs/outline-style
2069
+ */
2070
+ "outline-style": [{
2071
+ outline: [...scaleLineStyle(), "none", "hidden"]
2072
+ }],
2073
+ /**
2074
+ * Outline Offset
2075
+ * @see https://tailwindcss.com/docs/outline-offset
2076
+ */
2077
+ "outline-offset": [{
2078
+ "outline-offset": [isNumber, isArbitraryVariable, isArbitraryValue]
2079
+ }],
2080
+ /**
2081
+ * Outline Width
2082
+ * @see https://tailwindcss.com/docs/outline-width
2083
+ */
2084
+ "outline-w": [{
2085
+ outline: ["", isNumber, isArbitraryVariableLength, isArbitraryLength]
2086
+ }],
2087
+ /**
2088
+ * Outline Color
2089
+ * @see https://tailwindcss.com/docs/outline-color
2090
+ */
2091
+ "outline-color": [{
2092
+ outline: scaleColor()
2093
+ }],
2094
+ // ---------------
2095
+ // --- Effects ---
2096
+ // ---------------
2097
+ /**
2098
+ * Box Shadow
2099
+ * @see https://tailwindcss.com/docs/box-shadow
2100
+ */
2101
+ shadow: [{
2102
+ shadow: [
2103
+ // Deprecated since Tailwind CSS v4.0.0
2104
+ "",
2105
+ "none",
2106
+ themeShadow,
2107
+ isArbitraryVariableShadow,
2108
+ isArbitraryShadow
2109
+ ]
2110
+ }],
2111
+ /**
2112
+ * Box Shadow Color
2113
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2114
+ */
2115
+ "shadow-color": [{
2116
+ shadow: scaleColor()
2117
+ }],
2118
+ /**
2119
+ * Inset Box Shadow
2120
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2121
+ */
2122
+ "inset-shadow": [{
2123
+ "inset-shadow": ["none", themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2124
+ }],
2125
+ /**
2126
+ * Inset Box Shadow Color
2127
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2128
+ */
2129
+ "inset-shadow-color": [{
2130
+ "inset-shadow": scaleColor()
2131
+ }],
2132
+ /**
2133
+ * Ring Width
2134
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2135
+ */
2136
+ "ring-w": [{
2137
+ ring: scaleBorderWidth()
2138
+ }],
2139
+ /**
2140
+ * Ring Width Inset
2141
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2142
+ * @deprecated since Tailwind CSS v4.0.0
2143
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2144
+ */
2145
+ "ring-w-inset": ["ring-inset"],
2146
+ /**
2147
+ * Ring Color
2148
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2149
+ */
2150
+ "ring-color": [{
2151
+ ring: scaleColor()
2152
+ }],
2153
+ /**
2154
+ * Ring Offset Width
2155
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2156
+ * @deprecated since Tailwind CSS v4.0.0
2157
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2158
+ */
2159
+ "ring-offset-w": [{
2160
+ "ring-offset": [isNumber, isArbitraryLength]
2161
+ }],
2162
+ /**
2163
+ * Ring Offset Color
2164
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2165
+ * @deprecated since Tailwind CSS v4.0.0
2166
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2167
+ */
2168
+ "ring-offset-color": [{
2169
+ "ring-offset": scaleColor()
2170
+ }],
2171
+ /**
2172
+ * Inset Ring Width
2173
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2174
+ */
2175
+ "inset-ring-w": [{
2176
+ "inset-ring": scaleBorderWidth()
2177
+ }],
2178
+ /**
2179
+ * Inset Ring Color
2180
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2181
+ */
2182
+ "inset-ring-color": [{
2183
+ "inset-ring": scaleColor()
2184
+ }],
2185
+ /**
2186
+ * Text Shadow
2187
+ * @see https://tailwindcss.com/docs/text-shadow
2188
+ */
2189
+ "text-shadow": [{
2190
+ "text-shadow": ["none", themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2191
+ }],
2192
+ /**
2193
+ * Text Shadow Color
2194
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2195
+ */
2196
+ "text-shadow-color": [{
2197
+ "text-shadow": scaleColor()
2198
+ }],
2199
+ /**
2200
+ * Opacity
2201
+ * @see https://tailwindcss.com/docs/opacity
2202
+ */
2203
+ opacity: [{
2204
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2205
+ }],
2206
+ /**
2207
+ * Mix Blend Mode
2208
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2209
+ */
2210
+ "mix-blend": [{
2211
+ "mix-blend": [...scaleBlendMode(), "plus-darker", "plus-lighter"]
2212
+ }],
2213
+ /**
2214
+ * Background Blend Mode
2215
+ * @see https://tailwindcss.com/docs/background-blend-mode
2216
+ */
2217
+ "bg-blend": [{
2218
+ "bg-blend": scaleBlendMode()
2219
+ }],
2220
+ /**
2221
+ * Mask Clip
2222
+ * @see https://tailwindcss.com/docs/mask-clip
2223
+ */
2224
+ "mask-clip": [{
2225
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2226
+ }, "mask-no-clip"],
2227
+ /**
2228
+ * Mask Composite
2229
+ * @see https://tailwindcss.com/docs/mask-composite
2230
+ */
2231
+ "mask-composite": [{
2232
+ mask: ["add", "subtract", "intersect", "exclude"]
2233
+ }],
2234
+ /**
2235
+ * Mask Image
2236
+ * @see https://tailwindcss.com/docs/mask-image
2237
+ */
2238
+ "mask-image-linear-pos": [{
2239
+ "mask-linear": [isNumber]
2240
+ }],
2241
+ "mask-image-linear-from-pos": [{
2242
+ "mask-linear-from": scaleMaskImagePosition()
2243
+ }],
2244
+ "mask-image-linear-to-pos": [{
2245
+ "mask-linear-to": scaleMaskImagePosition()
2246
+ }],
2247
+ "mask-image-linear-from-color": [{
2248
+ "mask-linear-from": scaleColor()
2249
+ }],
2250
+ "mask-image-linear-to-color": [{
2251
+ "mask-linear-to": scaleColor()
2252
+ }],
2253
+ "mask-image-t-from-pos": [{
2254
+ "mask-t-from": scaleMaskImagePosition()
2255
+ }],
2256
+ "mask-image-t-to-pos": [{
2257
+ "mask-t-to": scaleMaskImagePosition()
2258
+ }],
2259
+ "mask-image-t-from-color": [{
2260
+ "mask-t-from": scaleColor()
2261
+ }],
2262
+ "mask-image-t-to-color": [{
2263
+ "mask-t-to": scaleColor()
2264
+ }],
2265
+ "mask-image-r-from-pos": [{
2266
+ "mask-r-from": scaleMaskImagePosition()
2267
+ }],
2268
+ "mask-image-r-to-pos": [{
2269
+ "mask-r-to": scaleMaskImagePosition()
2270
+ }],
2271
+ "mask-image-r-from-color": [{
2272
+ "mask-r-from": scaleColor()
2273
+ }],
2274
+ "mask-image-r-to-color": [{
2275
+ "mask-r-to": scaleColor()
2276
+ }],
2277
+ "mask-image-b-from-pos": [{
2278
+ "mask-b-from": scaleMaskImagePosition()
2279
+ }],
2280
+ "mask-image-b-to-pos": [{
2281
+ "mask-b-to": scaleMaskImagePosition()
2282
+ }],
2283
+ "mask-image-b-from-color": [{
2284
+ "mask-b-from": scaleColor()
2285
+ }],
2286
+ "mask-image-b-to-color": [{
2287
+ "mask-b-to": scaleColor()
2288
+ }],
2289
+ "mask-image-l-from-pos": [{
2290
+ "mask-l-from": scaleMaskImagePosition()
2291
+ }],
2292
+ "mask-image-l-to-pos": [{
2293
+ "mask-l-to": scaleMaskImagePosition()
2294
+ }],
2295
+ "mask-image-l-from-color": [{
2296
+ "mask-l-from": scaleColor()
2297
+ }],
2298
+ "mask-image-l-to-color": [{
2299
+ "mask-l-to": scaleColor()
2300
+ }],
2301
+ "mask-image-x-from-pos": [{
2302
+ "mask-x-from": scaleMaskImagePosition()
2303
+ }],
2304
+ "mask-image-x-to-pos": [{
2305
+ "mask-x-to": scaleMaskImagePosition()
2306
+ }],
2307
+ "mask-image-x-from-color": [{
2308
+ "mask-x-from": scaleColor()
2309
+ }],
2310
+ "mask-image-x-to-color": [{
2311
+ "mask-x-to": scaleColor()
2312
+ }],
2313
+ "mask-image-y-from-pos": [{
2314
+ "mask-y-from": scaleMaskImagePosition()
2315
+ }],
2316
+ "mask-image-y-to-pos": [{
2317
+ "mask-y-to": scaleMaskImagePosition()
2318
+ }],
2319
+ "mask-image-y-from-color": [{
2320
+ "mask-y-from": scaleColor()
2321
+ }],
2322
+ "mask-image-y-to-color": [{
2323
+ "mask-y-to": scaleColor()
2324
+ }],
2325
+ "mask-image-radial": [{
2326
+ "mask-radial": [isArbitraryVariable, isArbitraryValue]
2327
+ }],
2328
+ "mask-image-radial-from-pos": [{
2329
+ "mask-radial-from": scaleMaskImagePosition()
2330
+ }],
2331
+ "mask-image-radial-to-pos": [{
2332
+ "mask-radial-to": scaleMaskImagePosition()
2333
+ }],
2334
+ "mask-image-radial-from-color": [{
2335
+ "mask-radial-from": scaleColor()
2336
+ }],
2337
+ "mask-image-radial-to-color": [{
2338
+ "mask-radial-to": scaleColor()
2339
+ }],
2340
+ "mask-image-radial-shape": [{
2341
+ "mask-radial": ["circle", "ellipse"]
2342
+ }],
2343
+ "mask-image-radial-size": [{
2344
+ "mask-radial": [{
2345
+ closest: ["side", "corner"],
2346
+ farthest: ["side", "corner"]
2347
+ }]
2348
+ }],
2349
+ "mask-image-radial-pos": [{
2350
+ "mask-radial-at": scalePosition()
2351
+ }],
2352
+ "mask-image-conic-pos": [{
2353
+ "mask-conic": [isNumber]
2354
+ }],
2355
+ "mask-image-conic-from-pos": [{
2356
+ "mask-conic-from": scaleMaskImagePosition()
2357
+ }],
2358
+ "mask-image-conic-to-pos": [{
2359
+ "mask-conic-to": scaleMaskImagePosition()
2360
+ }],
2361
+ "mask-image-conic-from-color": [{
2362
+ "mask-conic-from": scaleColor()
2363
+ }],
2364
+ "mask-image-conic-to-color": [{
2365
+ "mask-conic-to": scaleColor()
2366
+ }],
2367
+ /**
2368
+ * Mask Mode
2369
+ * @see https://tailwindcss.com/docs/mask-mode
2370
+ */
2371
+ "mask-mode": [{
2372
+ mask: ["alpha", "luminance", "match"]
2373
+ }],
2374
+ /**
2375
+ * Mask Origin
2376
+ * @see https://tailwindcss.com/docs/mask-origin
2377
+ */
2378
+ "mask-origin": [{
2379
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2380
+ }],
2381
+ /**
2382
+ * Mask Position
2383
+ * @see https://tailwindcss.com/docs/mask-position
2384
+ */
2385
+ "mask-position": [{
2386
+ mask: scaleBgPosition()
2387
+ }],
2388
+ /**
2389
+ * Mask Repeat
2390
+ * @see https://tailwindcss.com/docs/mask-repeat
2391
+ */
2392
+ "mask-repeat": [{
2393
+ mask: scaleBgRepeat()
2394
+ }],
2395
+ /**
2396
+ * Mask Size
2397
+ * @see https://tailwindcss.com/docs/mask-size
2398
+ */
2399
+ "mask-size": [{
2400
+ mask: scaleBgSize()
2401
+ }],
2402
+ /**
2403
+ * Mask Type
2404
+ * @see https://tailwindcss.com/docs/mask-type
2405
+ */
2406
+ "mask-type": [{
2407
+ "mask-type": ["alpha", "luminance"]
2408
+ }],
2409
+ /**
2410
+ * Mask Image
2411
+ * @see https://tailwindcss.com/docs/mask-image
2412
+ */
2413
+ "mask-image": [{
2414
+ mask: ["none", isArbitraryVariable, isArbitraryValue]
2415
+ }],
2416
+ // ---------------
2417
+ // --- Filters ---
2418
+ // ---------------
2419
+ /**
2420
+ * Filter
2421
+ * @see https://tailwindcss.com/docs/filter
2422
+ */
2423
+ filter: [{
2424
+ filter: [
2425
+ // Deprecated since Tailwind CSS v3.0.0
2426
+ "",
2427
+ "none",
2428
+ isArbitraryVariable,
2429
+ isArbitraryValue
2430
+ ]
2431
+ }],
2432
+ /**
2433
+ * Blur
2434
+ * @see https://tailwindcss.com/docs/blur
2435
+ */
2436
+ blur: [{
2437
+ blur: scaleBlur()
2438
+ }],
2439
+ /**
2440
+ * Brightness
2441
+ * @see https://tailwindcss.com/docs/brightness
2442
+ */
2443
+ brightness: [{
2444
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2445
+ }],
2446
+ /**
2447
+ * Contrast
2448
+ * @see https://tailwindcss.com/docs/contrast
2449
+ */
2450
+ contrast: [{
2451
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2452
+ }],
2453
+ /**
2454
+ * Drop Shadow
2455
+ * @see https://tailwindcss.com/docs/drop-shadow
2456
+ */
2457
+ "drop-shadow": [{
2458
+ "drop-shadow": [
2459
+ // Deprecated since Tailwind CSS v4.0.0
2460
+ "",
2461
+ "none",
2462
+ themeDropShadow,
2463
+ isArbitraryVariableShadow,
2464
+ isArbitraryShadow
2465
+ ]
2466
+ }],
2467
+ /**
2468
+ * Drop Shadow Color
2469
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2470
+ */
2471
+ "drop-shadow-color": [{
2472
+ "drop-shadow": scaleColor()
2473
+ }],
2474
+ /**
2475
+ * Grayscale
2476
+ * @see https://tailwindcss.com/docs/grayscale
2477
+ */
2478
+ grayscale: [{
2479
+ grayscale: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2480
+ }],
2481
+ /**
2482
+ * Hue Rotate
2483
+ * @see https://tailwindcss.com/docs/hue-rotate
2484
+ */
2485
+ "hue-rotate": [{
2486
+ "hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2487
+ }],
2488
+ /**
2489
+ * Invert
2490
+ * @see https://tailwindcss.com/docs/invert
2491
+ */
2492
+ invert: [{
2493
+ invert: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2494
+ }],
2495
+ /**
2496
+ * Saturate
2497
+ * @see https://tailwindcss.com/docs/saturate
2498
+ */
2499
+ saturate: [{
2500
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2501
+ }],
2502
+ /**
2503
+ * Sepia
2504
+ * @see https://tailwindcss.com/docs/sepia
2505
+ */
2506
+ sepia: [{
2507
+ sepia: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2508
+ }],
2509
+ /**
2510
+ * Backdrop Filter
2511
+ * @see https://tailwindcss.com/docs/backdrop-filter
2512
+ */
2513
+ "backdrop-filter": [{
2514
+ "backdrop-filter": [
2515
+ // Deprecated since Tailwind CSS v3.0.0
2516
+ "",
2517
+ "none",
2518
+ isArbitraryVariable,
2519
+ isArbitraryValue
2520
+ ]
2521
+ }],
2522
+ /**
2523
+ * Backdrop Blur
2524
+ * @see https://tailwindcss.com/docs/backdrop-blur
2525
+ */
2526
+ "backdrop-blur": [{
2527
+ "backdrop-blur": scaleBlur()
2528
+ }],
2529
+ /**
2530
+ * Backdrop Brightness
2531
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2532
+ */
2533
+ "backdrop-brightness": [{
2534
+ "backdrop-brightness": [isNumber, isArbitraryVariable, isArbitraryValue]
2535
+ }],
2536
+ /**
2537
+ * Backdrop Contrast
2538
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2539
+ */
2540
+ "backdrop-contrast": [{
2541
+ "backdrop-contrast": [isNumber, isArbitraryVariable, isArbitraryValue]
2542
+ }],
2543
+ /**
2544
+ * Backdrop Grayscale
2545
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2546
+ */
2547
+ "backdrop-grayscale": [{
2548
+ "backdrop-grayscale": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2549
+ }],
2550
+ /**
2551
+ * Backdrop Hue Rotate
2552
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2553
+ */
2554
+ "backdrop-hue-rotate": [{
2555
+ "backdrop-hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2556
+ }],
2557
+ /**
2558
+ * Backdrop Invert
2559
+ * @see https://tailwindcss.com/docs/backdrop-invert
2560
+ */
2561
+ "backdrop-invert": [{
2562
+ "backdrop-invert": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2563
+ }],
2564
+ /**
2565
+ * Backdrop Opacity
2566
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2567
+ */
2568
+ "backdrop-opacity": [{
2569
+ "backdrop-opacity": [isNumber, isArbitraryVariable, isArbitraryValue]
2570
+ }],
2571
+ /**
2572
+ * Backdrop Saturate
2573
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2574
+ */
2575
+ "backdrop-saturate": [{
2576
+ "backdrop-saturate": [isNumber, isArbitraryVariable, isArbitraryValue]
2577
+ }],
2578
+ /**
2579
+ * Backdrop Sepia
2580
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2581
+ */
2582
+ "backdrop-sepia": [{
2583
+ "backdrop-sepia": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2584
+ }],
2585
+ // --------------
2586
+ // --- Tables ---
2587
+ // --------------
2588
+ /**
2589
+ * Border Collapse
2590
+ * @see https://tailwindcss.com/docs/border-collapse
2591
+ */
2592
+ "border-collapse": [{
2593
+ border: ["collapse", "separate"]
2594
+ }],
2595
+ /**
2596
+ * Border Spacing
2597
+ * @see https://tailwindcss.com/docs/border-spacing
2598
+ */
2599
+ "border-spacing": [{
2600
+ "border-spacing": scaleUnambiguousSpacing()
2601
+ }],
2602
+ /**
2603
+ * Border Spacing X
2604
+ * @see https://tailwindcss.com/docs/border-spacing
2605
+ */
2606
+ "border-spacing-x": [{
2607
+ "border-spacing-x": scaleUnambiguousSpacing()
2608
+ }],
2609
+ /**
2610
+ * Border Spacing Y
2611
+ * @see https://tailwindcss.com/docs/border-spacing
2612
+ */
2613
+ "border-spacing-y": [{
2614
+ "border-spacing-y": scaleUnambiguousSpacing()
2615
+ }],
2616
+ /**
2617
+ * Table Layout
2618
+ * @see https://tailwindcss.com/docs/table-layout
2619
+ */
2620
+ "table-layout": [{
2621
+ table: ["auto", "fixed"]
2622
+ }],
2623
+ /**
2624
+ * Caption Side
2625
+ * @see https://tailwindcss.com/docs/caption-side
2626
+ */
2627
+ caption: [{
2628
+ caption: ["top", "bottom"]
2629
+ }],
2630
+ // ---------------------------------
2631
+ // --- Transitions and Animation ---
2632
+ // ---------------------------------
2633
+ /**
2634
+ * Transition Property
2635
+ * @see https://tailwindcss.com/docs/transition-property
2636
+ */
2637
+ transition: [{
2638
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", isArbitraryVariable, isArbitraryValue]
2639
+ }],
2640
+ /**
2641
+ * Transition Behavior
2642
+ * @see https://tailwindcss.com/docs/transition-behavior
2643
+ */
2644
+ "transition-behavior": [{
2645
+ transition: ["normal", "discrete"]
2646
+ }],
2647
+ /**
2648
+ * Transition Duration
2649
+ * @see https://tailwindcss.com/docs/transition-duration
2650
+ */
2651
+ duration: [{
2652
+ duration: [isNumber, "initial", isArbitraryVariable, isArbitraryValue]
2653
+ }],
2654
+ /**
2655
+ * Transition Timing Function
2656
+ * @see https://tailwindcss.com/docs/transition-timing-function
2657
+ */
2658
+ ease: [{
2659
+ ease: ["linear", "initial", themeEase, isArbitraryVariable, isArbitraryValue]
2660
+ }],
2661
+ /**
2662
+ * Transition Delay
2663
+ * @see https://tailwindcss.com/docs/transition-delay
2664
+ */
2665
+ delay: [{
2666
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2667
+ }],
2668
+ /**
2669
+ * Animation
2670
+ * @see https://tailwindcss.com/docs/animation
2671
+ */
2672
+ animate: [{
2673
+ animate: ["none", themeAnimate, isArbitraryVariable, isArbitraryValue]
2674
+ }],
2675
+ // ------------------
2676
+ // --- Transforms ---
2677
+ // ------------------
2678
+ /**
2679
+ * Backface Visibility
2680
+ * @see https://tailwindcss.com/docs/backface-visibility
2681
+ */
2682
+ backface: [{
2683
+ backface: ["hidden", "visible"]
2684
+ }],
2685
+ /**
2686
+ * Perspective
2687
+ * @see https://tailwindcss.com/docs/perspective
2688
+ */
2689
+ perspective: [{
2690
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2691
+ }],
2692
+ /**
2693
+ * Perspective Origin
2694
+ * @see https://tailwindcss.com/docs/perspective-origin
2695
+ */
2696
+ "perspective-origin": [{
2697
+ "perspective-origin": scalePositionWithArbitrary()
2698
+ }],
2699
+ /**
2700
+ * Rotate
2701
+ * @see https://tailwindcss.com/docs/rotate
2702
+ */
2703
+ rotate: [{
2704
+ rotate: scaleRotate()
2705
+ }],
2706
+ /**
2707
+ * Rotate X
2708
+ * @see https://tailwindcss.com/docs/rotate
2709
+ */
2710
+ "rotate-x": [{
2711
+ "rotate-x": scaleRotate()
2712
+ }],
2713
+ /**
2714
+ * Rotate Y
2715
+ * @see https://tailwindcss.com/docs/rotate
2716
+ */
2717
+ "rotate-y": [{
2718
+ "rotate-y": scaleRotate()
2719
+ }],
2720
+ /**
2721
+ * Rotate Z
2722
+ * @see https://tailwindcss.com/docs/rotate
2723
+ */
2724
+ "rotate-z": [{
2725
+ "rotate-z": scaleRotate()
2726
+ }],
2727
+ /**
2728
+ * Scale
2729
+ * @see https://tailwindcss.com/docs/scale
2730
+ */
2731
+ scale: [{
2732
+ scale: scaleScale()
2733
+ }],
2734
+ /**
2735
+ * Scale X
2736
+ * @see https://tailwindcss.com/docs/scale
2737
+ */
2738
+ "scale-x": [{
2739
+ "scale-x": scaleScale()
2740
+ }],
2741
+ /**
2742
+ * Scale Y
2743
+ * @see https://tailwindcss.com/docs/scale
2744
+ */
2745
+ "scale-y": [{
2746
+ "scale-y": scaleScale()
2747
+ }],
2748
+ /**
2749
+ * Scale Z
2750
+ * @see https://tailwindcss.com/docs/scale
2751
+ */
2752
+ "scale-z": [{
2753
+ "scale-z": scaleScale()
2754
+ }],
2755
+ /**
2756
+ * Scale 3D
2757
+ * @see https://tailwindcss.com/docs/scale
2758
+ */
2759
+ "scale-3d": ["scale-3d"],
2760
+ /**
2761
+ * Skew
2762
+ * @see https://tailwindcss.com/docs/skew
2763
+ */
2764
+ skew: [{
2765
+ skew: scaleSkew()
2766
+ }],
2767
+ /**
2768
+ * Skew X
2769
+ * @see https://tailwindcss.com/docs/skew
2770
+ */
2771
+ "skew-x": [{
2772
+ "skew-x": scaleSkew()
2773
+ }],
2774
+ /**
2775
+ * Skew Y
2776
+ * @see https://tailwindcss.com/docs/skew
2777
+ */
2778
+ "skew-y": [{
2779
+ "skew-y": scaleSkew()
2780
+ }],
2781
+ /**
2782
+ * Transform
2783
+ * @see https://tailwindcss.com/docs/transform
2784
+ */
2785
+ transform: [{
2786
+ transform: [isArbitraryVariable, isArbitraryValue, "", "none", "gpu", "cpu"]
2787
+ }],
2788
+ /**
2789
+ * Transform Origin
2790
+ * @see https://tailwindcss.com/docs/transform-origin
2791
+ */
2792
+ "transform-origin": [{
2793
+ origin: scalePositionWithArbitrary()
2794
+ }],
2795
+ /**
2796
+ * Transform Style
2797
+ * @see https://tailwindcss.com/docs/transform-style
2798
+ */
2799
+ "transform-style": [{
2800
+ transform: ["3d", "flat"]
2801
+ }],
2802
+ /**
2803
+ * Translate
2804
+ * @see https://tailwindcss.com/docs/translate
2805
+ */
2806
+ translate: [{
2807
+ translate: scaleTranslate()
2808
+ }],
2809
+ /**
2810
+ * Translate X
2811
+ * @see https://tailwindcss.com/docs/translate
2812
+ */
2813
+ "translate-x": [{
2814
+ "translate-x": scaleTranslate()
2815
+ }],
2816
+ /**
2817
+ * Translate Y
2818
+ * @see https://tailwindcss.com/docs/translate
2819
+ */
2820
+ "translate-y": [{
2821
+ "translate-y": scaleTranslate()
2822
+ }],
2823
+ /**
2824
+ * Translate Z
2825
+ * @see https://tailwindcss.com/docs/translate
2826
+ */
2827
+ "translate-z": [{
2828
+ "translate-z": scaleTranslate()
2829
+ }],
2830
+ /**
2831
+ * Translate None
2832
+ * @see https://tailwindcss.com/docs/translate
2833
+ */
2834
+ "translate-none": ["translate-none"],
2835
+ // ---------------------
2836
+ // --- Interactivity ---
2837
+ // ---------------------
2838
+ /**
2839
+ * Accent Color
2840
+ * @see https://tailwindcss.com/docs/accent-color
2841
+ */
2842
+ accent: [{
2843
+ accent: scaleColor()
2844
+ }],
2845
+ /**
2846
+ * Appearance
2847
+ * @see https://tailwindcss.com/docs/appearance
2848
+ */
2849
+ appearance: [{
2850
+ appearance: ["none", "auto"]
2851
+ }],
2852
+ /**
2853
+ * Caret Color
2854
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2855
+ */
2856
+ "caret-color": [{
2857
+ caret: scaleColor()
2858
+ }],
2859
+ /**
2860
+ * Color Scheme
2861
+ * @see https://tailwindcss.com/docs/color-scheme
2862
+ */
2863
+ "color-scheme": [{
2864
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
2865
+ }],
2866
+ /**
2867
+ * Cursor
2868
+ * @see https://tailwindcss.com/docs/cursor
2869
+ */
2870
+ cursor: [{
2871
+ cursor: ["auto", "default", "pointer", "wait", "text", "move", "help", "not-allowed", "none", "context-menu", "progress", "cell", "crosshair", "vertical-text", "alias", "copy", "no-drop", "grab", "grabbing", "all-scroll", "col-resize", "row-resize", "n-resize", "e-resize", "s-resize", "w-resize", "ne-resize", "nw-resize", "se-resize", "sw-resize", "ew-resize", "ns-resize", "nesw-resize", "nwse-resize", "zoom-in", "zoom-out", isArbitraryVariable, isArbitraryValue]
2872
+ }],
2873
+ /**
2874
+ * Field Sizing
2875
+ * @see https://tailwindcss.com/docs/field-sizing
2876
+ */
2877
+ "field-sizing": [{
2878
+ "field-sizing": ["fixed", "content"]
2879
+ }],
2880
+ /**
2881
+ * Pointer Events
2882
+ * @see https://tailwindcss.com/docs/pointer-events
2883
+ */
2884
+ "pointer-events": [{
2885
+ "pointer-events": ["auto", "none"]
2886
+ }],
2887
+ /**
2888
+ * Resize
2889
+ * @see https://tailwindcss.com/docs/resize
2890
+ */
2891
+ resize: [{
2892
+ resize: ["none", "", "y", "x"]
2893
+ }],
2894
+ /**
2895
+ * Scroll Behavior
2896
+ * @see https://tailwindcss.com/docs/scroll-behavior
2897
+ */
2898
+ "scroll-behavior": [{
2899
+ scroll: ["auto", "smooth"]
2900
+ }],
2901
+ /**
2902
+ * Scroll Margin
2903
+ * @see https://tailwindcss.com/docs/scroll-margin
2904
+ */
2905
+ "scroll-m": [{
2906
+ "scroll-m": scaleUnambiguousSpacing()
2907
+ }],
2908
+ /**
2909
+ * Scroll Margin Inline
2910
+ * @see https://tailwindcss.com/docs/scroll-margin
2911
+ */
2912
+ "scroll-mx": [{
2913
+ "scroll-mx": scaleUnambiguousSpacing()
2914
+ }],
2915
+ /**
2916
+ * Scroll Margin Block
2917
+ * @see https://tailwindcss.com/docs/scroll-margin
2918
+ */
2919
+ "scroll-my": [{
2920
+ "scroll-my": scaleUnambiguousSpacing()
2921
+ }],
2922
+ /**
2923
+ * Scroll Margin Inline Start
2924
+ * @see https://tailwindcss.com/docs/scroll-margin
2925
+ */
2926
+ "scroll-ms": [{
2927
+ "scroll-ms": scaleUnambiguousSpacing()
2928
+ }],
2929
+ /**
2930
+ * Scroll Margin Inline End
2931
+ * @see https://tailwindcss.com/docs/scroll-margin
2932
+ */
2933
+ "scroll-me": [{
2934
+ "scroll-me": scaleUnambiguousSpacing()
2935
+ }],
2936
+ /**
2937
+ * Scroll Margin Block Start
2938
+ * @see https://tailwindcss.com/docs/scroll-margin
2939
+ */
2940
+ "scroll-mbs": [{
2941
+ "scroll-mbs": scaleUnambiguousSpacing()
2942
+ }],
2943
+ /**
2944
+ * Scroll Margin Block End
2945
+ * @see https://tailwindcss.com/docs/scroll-margin
2946
+ */
2947
+ "scroll-mbe": [{
2948
+ "scroll-mbe": scaleUnambiguousSpacing()
2949
+ }],
2950
+ /**
2951
+ * Scroll Margin Top
2952
+ * @see https://tailwindcss.com/docs/scroll-margin
2953
+ */
2954
+ "scroll-mt": [{
2955
+ "scroll-mt": scaleUnambiguousSpacing()
2956
+ }],
2957
+ /**
2958
+ * Scroll Margin Right
2959
+ * @see https://tailwindcss.com/docs/scroll-margin
2960
+ */
2961
+ "scroll-mr": [{
2962
+ "scroll-mr": scaleUnambiguousSpacing()
2963
+ }],
2964
+ /**
2965
+ * Scroll Margin Bottom
2966
+ * @see https://tailwindcss.com/docs/scroll-margin
2967
+ */
2968
+ "scroll-mb": [{
2969
+ "scroll-mb": scaleUnambiguousSpacing()
2970
+ }],
2971
+ /**
2972
+ * Scroll Margin Left
2973
+ * @see https://tailwindcss.com/docs/scroll-margin
2974
+ */
2975
+ "scroll-ml": [{
2976
+ "scroll-ml": scaleUnambiguousSpacing()
2977
+ }],
2978
+ /**
2979
+ * Scroll Padding
2980
+ * @see https://tailwindcss.com/docs/scroll-padding
2981
+ */
2982
+ "scroll-p": [{
2983
+ "scroll-p": scaleUnambiguousSpacing()
2984
+ }],
2985
+ /**
2986
+ * Scroll Padding Inline
2987
+ * @see https://tailwindcss.com/docs/scroll-padding
2988
+ */
2989
+ "scroll-px": [{
2990
+ "scroll-px": scaleUnambiguousSpacing()
2991
+ }],
2992
+ /**
2993
+ * Scroll Padding Block
2994
+ * @see https://tailwindcss.com/docs/scroll-padding
2995
+ */
2996
+ "scroll-py": [{
2997
+ "scroll-py": scaleUnambiguousSpacing()
2998
+ }],
2999
+ /**
3000
+ * Scroll Padding Inline Start
3001
+ * @see https://tailwindcss.com/docs/scroll-padding
3002
+ */
3003
+ "scroll-ps": [{
3004
+ "scroll-ps": scaleUnambiguousSpacing()
3005
+ }],
3006
+ /**
3007
+ * Scroll Padding Inline End
3008
+ * @see https://tailwindcss.com/docs/scroll-padding
3009
+ */
3010
+ "scroll-pe": [{
3011
+ "scroll-pe": scaleUnambiguousSpacing()
3012
+ }],
3013
+ /**
3014
+ * Scroll Padding Block Start
3015
+ * @see https://tailwindcss.com/docs/scroll-padding
3016
+ */
3017
+ "scroll-pbs": [{
3018
+ "scroll-pbs": scaleUnambiguousSpacing()
3019
+ }],
3020
+ /**
3021
+ * Scroll Padding Block End
3022
+ * @see https://tailwindcss.com/docs/scroll-padding
3023
+ */
3024
+ "scroll-pbe": [{
3025
+ "scroll-pbe": scaleUnambiguousSpacing()
3026
+ }],
3027
+ /**
3028
+ * Scroll Padding Top
3029
+ * @see https://tailwindcss.com/docs/scroll-padding
3030
+ */
3031
+ "scroll-pt": [{
3032
+ "scroll-pt": scaleUnambiguousSpacing()
3033
+ }],
3034
+ /**
3035
+ * Scroll Padding Right
3036
+ * @see https://tailwindcss.com/docs/scroll-padding
3037
+ */
3038
+ "scroll-pr": [{
3039
+ "scroll-pr": scaleUnambiguousSpacing()
3040
+ }],
3041
+ /**
3042
+ * Scroll Padding Bottom
3043
+ * @see https://tailwindcss.com/docs/scroll-padding
3044
+ */
3045
+ "scroll-pb": [{
3046
+ "scroll-pb": scaleUnambiguousSpacing()
3047
+ }],
3048
+ /**
3049
+ * Scroll Padding Left
3050
+ * @see https://tailwindcss.com/docs/scroll-padding
3051
+ */
3052
+ "scroll-pl": [{
3053
+ "scroll-pl": scaleUnambiguousSpacing()
3054
+ }],
3055
+ /**
3056
+ * Scroll Snap Align
3057
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3058
+ */
3059
+ "snap-align": [{
3060
+ snap: ["start", "end", "center", "align-none"]
3061
+ }],
3062
+ /**
3063
+ * Scroll Snap Stop
3064
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3065
+ */
3066
+ "snap-stop": [{
3067
+ snap: ["normal", "always"]
3068
+ }],
3069
+ /**
3070
+ * Scroll Snap Type
3071
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3072
+ */
3073
+ "snap-type": [{
3074
+ snap: ["none", "x", "y", "both"]
3075
+ }],
3076
+ /**
3077
+ * Scroll Snap Type Strictness
3078
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3079
+ */
3080
+ "snap-strictness": [{
3081
+ snap: ["mandatory", "proximity"]
3082
+ }],
3083
+ /**
3084
+ * Touch Action
3085
+ * @see https://tailwindcss.com/docs/touch-action
3086
+ */
3087
+ touch: [{
3088
+ touch: ["auto", "none", "manipulation"]
3089
+ }],
3090
+ /**
3091
+ * Touch Action X
3092
+ * @see https://tailwindcss.com/docs/touch-action
3093
+ */
3094
+ "touch-x": [{
3095
+ "touch-pan": ["x", "left", "right"]
3096
+ }],
3097
+ /**
3098
+ * Touch Action Y
3099
+ * @see https://tailwindcss.com/docs/touch-action
3100
+ */
3101
+ "touch-y": [{
3102
+ "touch-pan": ["y", "up", "down"]
3103
+ }],
3104
+ /**
3105
+ * Touch Action Pinch Zoom
3106
+ * @see https://tailwindcss.com/docs/touch-action
3107
+ */
3108
+ "touch-pz": ["touch-pinch-zoom"],
3109
+ /**
3110
+ * User Select
3111
+ * @see https://tailwindcss.com/docs/user-select
3112
+ */
3113
+ select: [{
3114
+ select: ["none", "text", "all", "auto"]
3115
+ }],
3116
+ /**
3117
+ * Will Change
3118
+ * @see https://tailwindcss.com/docs/will-change
3119
+ */
3120
+ "will-change": [{
3121
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryVariable, isArbitraryValue]
3122
+ }],
3123
+ // -----------
3124
+ // --- SVG ---
3125
+ // -----------
3126
+ /**
3127
+ * Fill
3128
+ * @see https://tailwindcss.com/docs/fill
3129
+ */
3130
+ fill: [{
3131
+ fill: ["none", ...scaleColor()]
3132
+ }],
3133
+ /**
3134
+ * Stroke Width
3135
+ * @see https://tailwindcss.com/docs/stroke-width
3136
+ */
3137
+ "stroke-w": [{
3138
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
3139
+ }],
3140
+ /**
3141
+ * Stroke
3142
+ * @see https://tailwindcss.com/docs/stroke
3143
+ */
3144
+ stroke: [{
3145
+ stroke: ["none", ...scaleColor()]
3146
+ }],
3147
+ // ---------------------
3148
+ // --- Accessibility ---
3149
+ // ---------------------
3150
+ /**
3151
+ * Forced Color Adjust
3152
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3153
+ */
3154
+ "forced-color-adjust": [{
3155
+ "forced-color-adjust": ["auto", "none"]
3156
+ }]
3157
+ },
3158
+ conflictingClassGroups: {
3159
+ overflow: ["overflow-x", "overflow-y"],
3160
+ overscroll: ["overscroll-x", "overscroll-y"],
3161
+ inset: ["inset-x", "inset-y", "inset-bs", "inset-be", "start", "end", "top", "right", "bottom", "left"],
3162
+ "inset-x": ["right", "left"],
3163
+ "inset-y": ["top", "bottom"],
3164
+ flex: ["basis", "grow", "shrink"],
3165
+ gap: ["gap-x", "gap-y"],
3166
+ p: ["px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl"],
3167
+ px: ["pr", "pl"],
3168
+ py: ["pt", "pb"],
3169
+ m: ["mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml"],
3170
+ mx: ["mr", "ml"],
3171
+ my: ["mt", "mb"],
3172
+ size: ["w", "h"],
3173
+ "font-size": ["leading"],
3174
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3175
+ "fvn-ordinal": ["fvn-normal"],
3176
+ "fvn-slashed-zero": ["fvn-normal"],
3177
+ "fvn-figure": ["fvn-normal"],
3178
+ "fvn-spacing": ["fvn-normal"],
3179
+ "fvn-fraction": ["fvn-normal"],
3180
+ "line-clamp": ["display", "overflow"],
3181
+ rounded: ["rounded-s", "rounded-e", "rounded-t", "rounded-r", "rounded-b", "rounded-l", "rounded-ss", "rounded-se", "rounded-ee", "rounded-es", "rounded-tl", "rounded-tr", "rounded-br", "rounded-bl"],
3182
+ "rounded-s": ["rounded-ss", "rounded-es"],
3183
+ "rounded-e": ["rounded-se", "rounded-ee"],
3184
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3185
+ "rounded-r": ["rounded-tr", "rounded-br"],
3186
+ "rounded-b": ["rounded-br", "rounded-bl"],
3187
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3188
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3189
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-bs", "border-w-be", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3190
+ "border-w-x": ["border-w-r", "border-w-l"],
3191
+ "border-w-y": ["border-w-t", "border-w-b"],
3192
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-bs", "border-color-be", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3193
+ "border-color-x": ["border-color-r", "border-color-l"],
3194
+ "border-color-y": ["border-color-t", "border-color-b"],
3195
+ translate: ["translate-x", "translate-y", "translate-none"],
3196
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3197
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3198
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
3199
+ "scroll-my": ["scroll-mt", "scroll-mb"],
3200
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3201
+ "scroll-px": ["scroll-pr", "scroll-pl"],
3202
+ "scroll-py": ["scroll-pt", "scroll-pb"],
3203
+ touch: ["touch-x", "touch-y", "touch-pz"],
3204
+ "touch-x": ["touch"],
3205
+ "touch-y": ["touch"],
3206
+ "touch-pz": ["touch"]
3207
+ },
3208
+ conflictingClassGroupModifiers: {
3209
+ "font-size": ["leading"]
3210
+ },
3211
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3212
+ };
3213
+ };
3214
+ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
3215
+
3216
+ // src/cn.ts
85
3217
  function cn(...inputs) {
86
- const joined = inputs.map(toClassName).filter(Boolean).join(" ").trim();
87
- if (!joined) {
88
- return "";
89
- }
90
- return mergeTailwindLikeClasses(joined);
3218
+ return twMerge(clsx(inputs));
91
3219
  }
92
3220
  // Annotate the CommonJS export names for ESM import in node:
93
3221
  0 && (module.exports = {