cnfast 0.0.2

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