prom-pal-ui 1.2.7 → 1.3.3

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