cnfast 0.0.2

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