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