prom-pal-ui 1.2.7 → 1.2.8

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