@meetreeve/ui 0.8.1 → 0.10.0

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