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