eglador-ui-react 0.1.0-alpha.2

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