@weapp-tailwindcss/merge 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,2389 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ createTailwindMerge: () => createTailwindMerge,
24
+ extendTailwindMerge: () => extendTailwindMerge,
25
+ fromTheme: () => fromTheme,
26
+ getDefaultConfig: () => getDefaultConfig,
27
+ mergeConfigs: () => mergeConfigs,
28
+ twJoin: () => twJoin,
29
+ twMerge: () => twMerge,
30
+ validators: () => validators_exports
31
+ });
32
+ module.exports = __toCommonJS(src_exports);
33
+
34
+ // src/lib/class-group-utils.ts
35
+ var CLASS_PART_SEPARATOR = "-";
36
+ function createClassGroupUtils(config) {
37
+ const classMap = createClassMap(config);
38
+ const { conflictingClassGroups, conflictingClassGroupModifiers } = config;
39
+ const getClassGroupId = (className) => {
40
+ const classParts = className.split(CLASS_PART_SEPARATOR);
41
+ if (classParts[0] === "" && classParts.length !== 1) {
42
+ classParts.shift();
43
+ }
44
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
45
+ };
46
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
47
+ const conflicts = conflictingClassGroups[classGroupId] || [];
48
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
49
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
50
+ }
51
+ return conflicts;
52
+ };
53
+ return {
54
+ getClassGroupId,
55
+ getConflictingClassGroupIds
56
+ };
57
+ }
58
+ function getGroupRecursive(classParts, classPartObject) {
59
+ if (classParts.length === 0) {
60
+ return classPartObject.classGroupId;
61
+ }
62
+ const currentClassPart = classParts[0];
63
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
64
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : void 0;
65
+ if (classGroupFromNextClassPart) {
66
+ return classGroupFromNextClassPart;
67
+ }
68
+ if (classPartObject.validators.length === 0) {
69
+ return void 0;
70
+ }
71
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
72
+ return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId;
73
+ }
74
+ var arbitraryPropertyRegex = /^\[(.+)\]$/;
75
+ function getGroupIdForArbitraryProperty(className) {
76
+ if (arbitraryPropertyRegex.test(className)) {
77
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
78
+ const property = arbitraryPropertyClassName?.substring(
79
+ 0,
80
+ arbitraryPropertyClassName.indexOf(":")
81
+ );
82
+ if (property) {
83
+ return `arbitrary..${property}`;
84
+ }
85
+ }
86
+ }
87
+ function createClassMap(config) {
88
+ const { theme, prefix } = config;
89
+ const classMap = {
90
+ nextPart: /* @__PURE__ */ new Map(),
91
+ validators: []
92
+ };
93
+ const prefixedClassGroupEntries = getPrefixedClassGroupEntries(
94
+ Object.entries(config.classGroups),
95
+ prefix
96
+ );
97
+ prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {
98
+ processClassesRecursively(classGroup, classMap, classGroupId, theme);
99
+ });
100
+ return classMap;
101
+ }
102
+ function processClassesRecursively(classGroup, classPartObject, classGroupId, theme) {
103
+ classGroup.forEach((classDefinition) => {
104
+ if (typeof classDefinition === "string") {
105
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
106
+ classPartObjectToEdit.classGroupId = classGroupId;
107
+ return;
108
+ }
109
+ if (typeof classDefinition === "function") {
110
+ if (isThemeGetter(classDefinition)) {
111
+ processClassesRecursively(
112
+ classDefinition(theme),
113
+ classPartObject,
114
+ classGroupId,
115
+ theme
116
+ );
117
+ return;
118
+ }
119
+ classPartObject.validators.push({
120
+ validator: classDefinition,
121
+ classGroupId
122
+ });
123
+ return;
124
+ }
125
+ Object.entries(classDefinition).forEach(([key, classGroup2]) => {
126
+ processClassesRecursively(
127
+ classGroup2,
128
+ getPart(classPartObject, key),
129
+ classGroupId,
130
+ theme
131
+ );
132
+ });
133
+ });
134
+ }
135
+ function getPart(classPartObject, path) {
136
+ let currentClassPartObject = classPartObject;
137
+ path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {
138
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
139
+ currentClassPartObject.nextPart.set(pathPart, {
140
+ nextPart: /* @__PURE__ */ new Map(),
141
+ validators: []
142
+ });
143
+ }
144
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
145
+ });
146
+ return currentClassPartObject;
147
+ }
148
+ function isThemeGetter(func) {
149
+ return func.isThemeGetter;
150
+ }
151
+ function getPrefixedClassGroupEntries(classGroupEntries, prefix) {
152
+ if (!prefix) {
153
+ return classGroupEntries;
154
+ }
155
+ return classGroupEntries.map(([classGroupId, classGroup]) => {
156
+ const prefixedClassGroup = classGroup.map((classDefinition) => {
157
+ if (typeof classDefinition === "string") {
158
+ return prefix + classDefinition;
159
+ }
160
+ if (typeof classDefinition === "object") {
161
+ return Object.fromEntries(
162
+ Object.entries(classDefinition).map(([key, value]) => [prefix + key, value])
163
+ );
164
+ }
165
+ return classDefinition;
166
+ });
167
+ return [classGroupId, prefixedClassGroup];
168
+ });
169
+ }
170
+
171
+ // src/lib/lru-cache.ts
172
+ function createLruCache(maxCacheSize) {
173
+ if (maxCacheSize < 1) {
174
+ return {
175
+ get: () => void 0,
176
+ set: () => {
177
+ }
178
+ };
179
+ }
180
+ let cacheSize = 0;
181
+ let cache = /* @__PURE__ */ new Map();
182
+ let previousCache = /* @__PURE__ */ new Map();
183
+ const update = (key, value) => {
184
+ cache.set(key, value);
185
+ cacheSize++;
186
+ if (cacheSize > maxCacheSize) {
187
+ cacheSize = 0;
188
+ previousCache = cache;
189
+ cache = /* @__PURE__ */ new Map();
190
+ }
191
+ };
192
+ return {
193
+ get(key) {
194
+ let value = cache.get(key);
195
+ if (value !== void 0) {
196
+ return value;
197
+ }
198
+ if ((value = previousCache.get(key)) !== void 0) {
199
+ update(key, value);
200
+ return value;
201
+ }
202
+ },
203
+ set(key, value) {
204
+ if (cache.has(key)) {
205
+ cache.set(key, value);
206
+ } else {
207
+ update(key, value);
208
+ }
209
+ }
210
+ };
211
+ }
212
+
213
+ // src/lib/parse-class-name.ts
214
+ var IMPORTANT_MODIFIER = "!";
215
+ function createParseClassName(config) {
216
+ const { separator, experimentalParseClassName } = config;
217
+ const isSeparatorSingleCharacter = separator.length === 1;
218
+ const firstSeparatorCharacter = separator[0];
219
+ const separatorLength = separator.length;
220
+ const parseClassName = (className) => {
221
+ const modifiers = [];
222
+ let bracketDepth = 0;
223
+ let modifierStart = 0;
224
+ let postfixModifierPosition;
225
+ for (let index = 0; index < className.length; index++) {
226
+ const currentCharacter = className[index];
227
+ if (bracketDepth === 0) {
228
+ if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {
229
+ modifiers.push(className.slice(modifierStart, index));
230
+ modifierStart = index + separatorLength;
231
+ continue;
232
+ }
233
+ if (currentCharacter === "/") {
234
+ postfixModifierPosition = index;
235
+ continue;
236
+ }
237
+ }
238
+ if (currentCharacter === "[") {
239
+ bracketDepth++;
240
+ } else if (currentCharacter === "]") {
241
+ bracketDepth--;
242
+ }
243
+ }
244
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
245
+ const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);
246
+ const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;
247
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
248
+ return {
249
+ modifiers,
250
+ hasImportantModifier,
251
+ baseClassName,
252
+ maybePostfixModifierPosition
253
+ };
254
+ };
255
+ if (experimentalParseClassName) {
256
+ return (className) => experimentalParseClassName({ className, parseClassName });
257
+ }
258
+ return parseClassName;
259
+ }
260
+ function sortModifiers(modifiers) {
261
+ if (modifiers.length <= 1) {
262
+ return modifiers;
263
+ }
264
+ const sortedModifiers = [];
265
+ let unsortedModifiers = [];
266
+ modifiers.forEach((modifier) => {
267
+ const isArbitraryVariant = modifier[0] === "[";
268
+ if (isArbitraryVariant) {
269
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
270
+ unsortedModifiers = [];
271
+ } else {
272
+ unsortedModifiers.push(modifier);
273
+ }
274
+ });
275
+ sortedModifiers.push(...unsortedModifiers.sort());
276
+ return sortedModifiers;
277
+ }
278
+
279
+ // src/lib/config-utils.ts
280
+ function createConfigUtils(config) {
281
+ return {
282
+ cache: createLruCache(config.cacheSize),
283
+ parseClassName: createParseClassName(config),
284
+ ...createClassGroupUtils(config)
285
+ };
286
+ }
287
+
288
+ // src/lib/merge-classlist.ts
289
+ var SPLIT_CLASSES_REGEX = /\s+/;
290
+ function mergeClassList(classList, configUtils) {
291
+ const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils;
292
+ const classGroupsInConflict = [];
293
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
294
+ let result = "";
295
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
296
+ const originalClassName = classNames[index];
297
+ const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } = parseClassName(originalClassName);
298
+ let hasPostfixModifier = Boolean(maybePostfixModifierPosition);
299
+ let classGroupId = getClassGroupId(
300
+ hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName
301
+ );
302
+ if (!classGroupId) {
303
+ if (!hasPostfixModifier) {
304
+ result = originalClassName + (result.length > 0 ? ` ${result}` : result);
305
+ continue;
306
+ }
307
+ classGroupId = getClassGroupId(baseClassName);
308
+ if (!classGroupId) {
309
+ result = originalClassName + (result.length > 0 ? ` ${result}` : result);
310
+ continue;
311
+ }
312
+ hasPostfixModifier = false;
313
+ }
314
+ const variantModifier = sortModifiers(modifiers).join(":");
315
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
316
+ const classId = modifierId + classGroupId;
317
+ if (classGroupsInConflict.includes(classId)) {
318
+ continue;
319
+ }
320
+ classGroupsInConflict.push(classId);
321
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
322
+ for (let i = 0; i < conflictGroups.length; ++i) {
323
+ const group = conflictGroups[i];
324
+ classGroupsInConflict.push(modifierId + group);
325
+ }
326
+ result = originalClassName + (result.length > 0 ? ` ${result}` : result);
327
+ }
328
+ return result;
329
+ }
330
+
331
+ // src/lib/tw-join.ts
332
+ function twJoin() {
333
+ let index = 0;
334
+ let argument;
335
+ let resolvedValue;
336
+ let string = "";
337
+ while (index < arguments.length) {
338
+ if (argument = arguments[index++]) {
339
+ if (resolvedValue = toValue(argument)) {
340
+ string && (string += " ");
341
+ string += resolvedValue;
342
+ }
343
+ }
344
+ }
345
+ return string;
346
+ }
347
+ function toValue(mix) {
348
+ if (typeof mix === "string") {
349
+ return mix;
350
+ }
351
+ let resolvedValue;
352
+ let string = "";
353
+ for (let k = 0; k < mix.length; k++) {
354
+ if (mix[k]) {
355
+ if (resolvedValue = toValue(mix[k])) {
356
+ string && (string += " ");
357
+ string += resolvedValue;
358
+ }
359
+ }
360
+ }
361
+ return string;
362
+ }
363
+
364
+ // src/lib/create-tailwind-merge.ts
365
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
366
+ let configUtils;
367
+ let cacheGet;
368
+ let cacheSet;
369
+ let functionToCall = initTailwindMerge;
370
+ function initTailwindMerge(classList) {
371
+ const config = createConfigRest.reduce(
372
+ (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),
373
+ createConfigFirst()
374
+ );
375
+ configUtils = createConfigUtils(config);
376
+ cacheGet = configUtils.cache.get;
377
+ cacheSet = configUtils.cache.set;
378
+ functionToCall = tailwindMerge;
379
+ return tailwindMerge(classList);
380
+ }
381
+ function tailwindMerge(classList) {
382
+ const cachedResult = cacheGet(classList);
383
+ if (cachedResult) {
384
+ return cachedResult;
385
+ }
386
+ const result = mergeClassList(classList, configUtils);
387
+ cacheSet(classList, result);
388
+ return result;
389
+ }
390
+ return function callTailwindMerge() {
391
+ return functionToCall(twJoin.apply(null, arguments));
392
+ };
393
+ }
394
+
395
+ // src/lib/from-theme.ts
396
+ function fromTheme(key) {
397
+ const themeGetter = (theme) => theme[key] || [];
398
+ themeGetter.isThemeGetter = true;
399
+ return themeGetter;
400
+ }
401
+
402
+ // src/lib/validators.ts
403
+ var validators_exports = {};
404
+ __export(validators_exports, {
405
+ isAny: () => isAny,
406
+ isArbitraryImage: () => isArbitraryImage,
407
+ isArbitraryLength: () => isArbitraryLength,
408
+ isArbitraryNumber: () => isArbitraryNumber,
409
+ isArbitraryPosition: () => isArbitraryPosition,
410
+ isArbitraryShadow: () => isArbitraryShadow,
411
+ isArbitrarySize: () => isArbitrarySize,
412
+ isArbitraryValue: () => isArbitraryValue,
413
+ isInteger: () => isInteger,
414
+ isLength: () => isLength,
415
+ isNumber: () => isNumber,
416
+ isPercent: () => isPercent,
417
+ isTshirtSize: () => isTshirtSize
418
+ });
419
+ var arbitraryValueRegex = /^\[(?:([a-z-]+):)?(.+)\]$/i;
420
+ var fractionRegex = /^\d+\/\d+$/;
421
+ var stringLengths = /* @__PURE__ */ new Set(["px", "full", "screen"]);
422
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
423
+ var lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq([whib]|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
424
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
425
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
426
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
427
+ function isLength(value) {
428
+ return isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);
429
+ }
430
+ function isArbitraryLength(value) {
431
+ return getIsArbitraryValue(value, "length", isLengthOnly);
432
+ }
433
+ var isNumber = (value) => Boolean(value) && !Number.isNaN(Number(value));
434
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, "number", isNumber);
435
+ var isInteger = (value) => Boolean(value) && Number.isInteger(Number(value));
436
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
437
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
438
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
439
+ var sizeLabels = /* @__PURE__ */ new Set(["length", "size", "percentage"]);
440
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, sizeLabels, isNever);
441
+ function isArbitraryPosition(value) {
442
+ return getIsArbitraryValue(value, "position", isNever);
443
+ }
444
+ var imageLabels = /* @__PURE__ */ new Set(["image", "url"]);
445
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, imageLabels, isImage);
446
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, "", isShadow);
447
+ var isAny = () => true;
448
+ function getIsArbitraryValue(value, label, testValue) {
449
+ const result = arbitraryValueRegex.exec(value);
450
+ if (result) {
451
+ if (result[1]) {
452
+ return typeof label === "string" ? result[1] === label : label.has(result[1]);
453
+ }
454
+ return testValue(result[2]);
455
+ }
456
+ return false;
457
+ }
458
+ function isLengthOnly(value) {
459
+ return lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
460
+ }
461
+ var isNever = () => false;
462
+ var isShadow = (value) => shadowRegex.test(value);
463
+ var isImage = (value) => imageRegex.test(value);
464
+
465
+ // src/lib/default-config.ts
466
+ function getDefaultConfig() {
467
+ const colors = fromTheme("colors");
468
+ const spacing = fromTheme("spacing");
469
+ const blur = fromTheme("blur");
470
+ const brightness = fromTheme("brightness");
471
+ const borderColor = fromTheme("borderColor");
472
+ const borderRadius = fromTheme("borderRadius");
473
+ const borderSpacing = fromTheme("borderSpacing");
474
+ const borderWidth = fromTheme("borderWidth");
475
+ const contrast = fromTheme("contrast");
476
+ const grayscale = fromTheme("grayscale");
477
+ const hueRotate = fromTheme("hueRotate");
478
+ const invert = fromTheme("invert");
479
+ const gap = fromTheme("gap");
480
+ const gradientColorStops = fromTheme("gradientColorStops");
481
+ const gradientColorStopPositions = fromTheme("gradientColorStopPositions");
482
+ const inset = fromTheme("inset");
483
+ const margin = fromTheme("margin");
484
+ const opacity = fromTheme("opacity");
485
+ const padding = fromTheme("padding");
486
+ const saturate = fromTheme("saturate");
487
+ const scale = fromTheme("scale");
488
+ const sepia = fromTheme("sepia");
489
+ const skew = fromTheme("skew");
490
+ const space = fromTheme("space");
491
+ const translate = fromTheme("translate");
492
+ const getOverscroll = () => ["auto", "contain", "none"];
493
+ const getOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
494
+ const getSpacingWithAutoAndArbitrary = () => ["auto", isArbitraryValue, spacing];
495
+ const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];
496
+ const getLengthWithEmptyAndArbitrary = () => ["", isLength, isArbitraryLength];
497
+ const getNumberWithAutoAndArbitrary = () => ["auto", isNumber, isArbitraryValue];
498
+ const getPositions = () => [
499
+ "bottom",
500
+ "center",
501
+ "left",
502
+ "left-bottom",
503
+ "left-top",
504
+ "right",
505
+ "right-bottom",
506
+ "right-top",
507
+ "top"
508
+ ];
509
+ const getLineStyles = () => ["solid", "dashed", "dotted", "double", "none"];
510
+ const getBlendModes = () => [
511
+ "normal",
512
+ "multiply",
513
+ "screen",
514
+ "overlay",
515
+ "darken",
516
+ "lighten",
517
+ "color-dodge",
518
+ "color-burn",
519
+ "hard-light",
520
+ "soft-light",
521
+ "difference",
522
+ "exclusion",
523
+ "hue",
524
+ "saturation",
525
+ "color",
526
+ "luminosity"
527
+ ];
528
+ const getAlign = () => ["start", "end", "center", "between", "around", "evenly", "stretch"];
529
+ const getZeroAndEmpty = () => ["", "0", isArbitraryValue];
530
+ const getBreaks = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
531
+ const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];
532
+ return {
533
+ cacheSize: 500,
534
+ separator: ":",
535
+ theme: {
536
+ colors: [isAny],
537
+ spacing: [isLength, isArbitraryLength],
538
+ blur: ["none", "", isTshirtSize, isArbitraryValue],
539
+ brightness: getNumberAndArbitrary(),
540
+ borderColor: [colors],
541
+ borderRadius: ["none", "", "full", isTshirtSize, isArbitraryValue],
542
+ borderSpacing: getSpacingWithArbitrary(),
543
+ borderWidth: getLengthWithEmptyAndArbitrary(),
544
+ contrast: getNumberAndArbitrary(),
545
+ grayscale: getZeroAndEmpty(),
546
+ hueRotate: getNumberAndArbitrary(),
547
+ invert: getZeroAndEmpty(),
548
+ gap: getSpacingWithArbitrary(),
549
+ gradientColorStops: [colors],
550
+ gradientColorStopPositions: [isPercent, isArbitraryLength],
551
+ inset: getSpacingWithAutoAndArbitrary(),
552
+ margin: getSpacingWithAutoAndArbitrary(),
553
+ opacity: getNumberAndArbitrary(),
554
+ padding: getSpacingWithArbitrary(),
555
+ saturate: getNumberAndArbitrary(),
556
+ scale: getNumberAndArbitrary(),
557
+ sepia: getZeroAndEmpty(),
558
+ skew: getNumberAndArbitrary(),
559
+ space: getSpacingWithArbitrary(),
560
+ translate: getSpacingWithArbitrary()
561
+ },
562
+ classGroups: {
563
+ // Layout
564
+ /**
565
+ * Aspect Ratio
566
+ * @see https://tailwindcss.com/docs/aspect-ratio
567
+ */
568
+ "aspect": [{ aspect: ["auto", "square", "video", isArbitraryValue] }],
569
+ /**
570
+ * Container
571
+ * @see https://tailwindcss.com/docs/container
572
+ */
573
+ "container": ["container"],
574
+ /**
575
+ * Columns
576
+ * @see https://tailwindcss.com/docs/columns
577
+ */
578
+ "columns": [{ columns: [isTshirtSize] }],
579
+ /**
580
+ * Break After
581
+ * @see https://tailwindcss.com/docs/break-after
582
+ */
583
+ "break-after": [{ "break-after": getBreaks() }],
584
+ /**
585
+ * Break Before
586
+ * @see https://tailwindcss.com/docs/break-before
587
+ */
588
+ "break-before": [{ "break-before": getBreaks() }],
589
+ /**
590
+ * Break Inside
591
+ * @see https://tailwindcss.com/docs/break-inside
592
+ */
593
+ "break-inside": [{ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"] }],
594
+ /**
595
+ * Box Decoration Break
596
+ * @see https://tailwindcss.com/docs/box-decoration-break
597
+ */
598
+ "box-decoration": [{ "box-decoration": ["slice", "clone"] }],
599
+ /**
600
+ * Box Sizing
601
+ * @see https://tailwindcss.com/docs/box-sizing
602
+ */
603
+ "box": [{ box: ["border", "content"] }],
604
+ /**
605
+ * Display
606
+ * @see https://tailwindcss.com/docs/display
607
+ */
608
+ "display": [
609
+ "block",
610
+ "inline-block",
611
+ "inline",
612
+ "flex",
613
+ "inline-flex",
614
+ "table",
615
+ "inline-table",
616
+ "table-caption",
617
+ "table-cell",
618
+ "table-column",
619
+ "table-column-group",
620
+ "table-footer-group",
621
+ "table-header-group",
622
+ "table-row-group",
623
+ "table-row",
624
+ "flow-root",
625
+ "grid",
626
+ "inline-grid",
627
+ "contents",
628
+ "list-item",
629
+ "hidden"
630
+ ],
631
+ /**
632
+ * Floats
633
+ * @see https://tailwindcss.com/docs/float
634
+ */
635
+ "float": [{ float: ["right", "left", "none", "start", "end"] }],
636
+ /**
637
+ * Clear
638
+ * @see https://tailwindcss.com/docs/clear
639
+ */
640
+ "clear": [{ clear: ["left", "right", "both", "none", "start", "end"] }],
641
+ /**
642
+ * Isolation
643
+ * @see https://tailwindcss.com/docs/isolation
644
+ */
645
+ "isolation": ["isolate", "isolation-auto"],
646
+ /**
647
+ * Object Fit
648
+ * @see https://tailwindcss.com/docs/object-fit
649
+ */
650
+ "object-fit": [{ object: ["contain", "cover", "fill", "none", "scale-down"] }],
651
+ /**
652
+ * Object Position
653
+ * @see https://tailwindcss.com/docs/object-position
654
+ */
655
+ "object-position": [{ object: [...getPositions(), isArbitraryValue] }],
656
+ /**
657
+ * Overflow
658
+ * @see https://tailwindcss.com/docs/overflow
659
+ */
660
+ "overflow": [{ overflow: getOverflow() }],
661
+ /**
662
+ * Overflow X
663
+ * @see https://tailwindcss.com/docs/overflow
664
+ */
665
+ "overflow-x": [{ "overflow-x": getOverflow() }],
666
+ /**
667
+ * Overflow Y
668
+ * @see https://tailwindcss.com/docs/overflow
669
+ */
670
+ "overflow-y": [{ "overflow-y": getOverflow() }],
671
+ /**
672
+ * Overscroll Behavior
673
+ * @see https://tailwindcss.com/docs/overscroll-behavior
674
+ */
675
+ "overscroll": [{ overscroll: getOverscroll() }],
676
+ /**
677
+ * Overscroll Behavior X
678
+ * @see https://tailwindcss.com/docs/overscroll-behavior
679
+ */
680
+ "overscroll-x": [{ "overscroll-x": getOverscroll() }],
681
+ /**
682
+ * Overscroll Behavior Y
683
+ * @see https://tailwindcss.com/docs/overscroll-behavior
684
+ */
685
+ "overscroll-y": [{ "overscroll-y": getOverscroll() }],
686
+ /**
687
+ * Position
688
+ * @see https://tailwindcss.com/docs/position
689
+ */
690
+ "position": ["static", "fixed", "absolute", "relative", "sticky"],
691
+ /**
692
+ * Top / Right / Bottom / Left
693
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
694
+ */
695
+ "inset": [{ inset: [inset] }],
696
+ /**
697
+ * Right / Left
698
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
699
+ */
700
+ "inset-x": [{ "inset-x": [inset] }],
701
+ /**
702
+ * Top / Bottom
703
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
704
+ */
705
+ "inset-y": [{ "inset-y": [inset] }],
706
+ /**
707
+ * Start
708
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
709
+ */
710
+ "start": [{ start: [inset] }],
711
+ /**
712
+ * End
713
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
714
+ */
715
+ "end": [{ end: [inset] }],
716
+ /**
717
+ * Top
718
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
719
+ */
720
+ "top": [{ top: [inset] }],
721
+ /**
722
+ * Right
723
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
724
+ */
725
+ "right": [{ right: [inset] }],
726
+ /**
727
+ * Bottom
728
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
729
+ */
730
+ "bottom": [{ bottom: [inset] }],
731
+ /**
732
+ * Left
733
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
734
+ */
735
+ "left": [{ left: [inset] }],
736
+ /**
737
+ * Visibility
738
+ * @see https://tailwindcss.com/docs/visibility
739
+ */
740
+ "visibility": ["visible", "invisible", "collapse"],
741
+ /**
742
+ * Z-Index
743
+ * @see https://tailwindcss.com/docs/z-index
744
+ */
745
+ "z": [{ z: ["auto", isInteger, isArbitraryValue] }],
746
+ // Flexbox and Grid
747
+ /**
748
+ * Flex Basis
749
+ * @see https://tailwindcss.com/docs/flex-basis
750
+ */
751
+ "basis": [{ basis: getSpacingWithAutoAndArbitrary() }],
752
+ /**
753
+ * Flex Direction
754
+ * @see https://tailwindcss.com/docs/flex-direction
755
+ */
756
+ "flex-direction": [{ flex: ["row", "row-reverse", "col", "col-reverse"] }],
757
+ /**
758
+ * Flex Wrap
759
+ * @see https://tailwindcss.com/docs/flex-wrap
760
+ */
761
+ "flex-wrap": [{ flex: ["wrap", "wrap-reverse", "nowrap"] }],
762
+ /**
763
+ * Flex
764
+ * @see https://tailwindcss.com/docs/flex
765
+ */
766
+ "flex": [{ flex: ["1", "auto", "initial", "none", isArbitraryValue] }],
767
+ /**
768
+ * Flex Grow
769
+ * @see https://tailwindcss.com/docs/flex-grow
770
+ */
771
+ "grow": [{ grow: getZeroAndEmpty() }],
772
+ /**
773
+ * Flex Shrink
774
+ * @see https://tailwindcss.com/docs/flex-shrink
775
+ */
776
+ "shrink": [{ shrink: getZeroAndEmpty() }],
777
+ /**
778
+ * Order
779
+ * @see https://tailwindcss.com/docs/order
780
+ */
781
+ "order": [{ order: ["first", "last", "none", isInteger, isArbitraryValue] }],
782
+ /**
783
+ * Grid Template Columns
784
+ * @see https://tailwindcss.com/docs/grid-template-columns
785
+ */
786
+ "grid-cols": [{ "grid-cols": [isAny] }],
787
+ /**
788
+ * Grid Column Start / End
789
+ * @see https://tailwindcss.com/docs/grid-column
790
+ */
791
+ "col-start-end": [
792
+ {
793
+ col: [
794
+ "auto",
795
+ { span: ["full", isInteger, isArbitraryValue] },
796
+ isArbitraryValue
797
+ ]
798
+ }
799
+ ],
800
+ /**
801
+ * Grid Column Start
802
+ * @see https://tailwindcss.com/docs/grid-column
803
+ */
804
+ "col-start": [{ "col-start": getNumberWithAutoAndArbitrary() }],
805
+ /**
806
+ * Grid Column End
807
+ * @see https://tailwindcss.com/docs/grid-column
808
+ */
809
+ "col-end": [{ "col-end": getNumberWithAutoAndArbitrary() }],
810
+ /**
811
+ * Grid Template Rows
812
+ * @see https://tailwindcss.com/docs/grid-template-rows
813
+ */
814
+ "grid-rows": [{ "grid-rows": [isAny] }],
815
+ /**
816
+ * Grid Row Start / End
817
+ * @see https://tailwindcss.com/docs/grid-row
818
+ */
819
+ "row-start-end": [
820
+ { row: ["auto", { span: [isInteger, isArbitraryValue] }, isArbitraryValue] }
821
+ ],
822
+ /**
823
+ * Grid Row Start
824
+ * @see https://tailwindcss.com/docs/grid-row
825
+ */
826
+ "row-start": [{ "row-start": getNumberWithAutoAndArbitrary() }],
827
+ /**
828
+ * Grid Row End
829
+ * @see https://tailwindcss.com/docs/grid-row
830
+ */
831
+ "row-end": [{ "row-end": getNumberWithAutoAndArbitrary() }],
832
+ /**
833
+ * Grid Auto Flow
834
+ * @see https://tailwindcss.com/docs/grid-auto-flow
835
+ */
836
+ "grid-flow": [{ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"] }],
837
+ /**
838
+ * Grid Auto Columns
839
+ * @see https://tailwindcss.com/docs/grid-auto-columns
840
+ */
841
+ "auto-cols": [{ "auto-cols": ["auto", "min", "max", "fr", isArbitraryValue] }],
842
+ /**
843
+ * Grid Auto Rows
844
+ * @see https://tailwindcss.com/docs/grid-auto-rows
845
+ */
846
+ "auto-rows": [{ "auto-rows": ["auto", "min", "max", "fr", isArbitraryValue] }],
847
+ /**
848
+ * Gap
849
+ * @see https://tailwindcss.com/docs/gap
850
+ */
851
+ "gap": [{ gap: [gap] }],
852
+ /**
853
+ * Gap X
854
+ * @see https://tailwindcss.com/docs/gap
855
+ */
856
+ "gap-x": [{ "gap-x": [gap] }],
857
+ /**
858
+ * Gap Y
859
+ * @see https://tailwindcss.com/docs/gap
860
+ */
861
+ "gap-y": [{ "gap-y": [gap] }],
862
+ /**
863
+ * Justify Content
864
+ * @see https://tailwindcss.com/docs/justify-content
865
+ */
866
+ "justify-content": [{ justify: ["normal", ...getAlign()] }],
867
+ /**
868
+ * Justify Items
869
+ * @see https://tailwindcss.com/docs/justify-items
870
+ */
871
+ "justify-items": [{ "justify-items": ["start", "end", "center", "stretch"] }],
872
+ /**
873
+ * Justify Self
874
+ * @see https://tailwindcss.com/docs/justify-self
875
+ */
876
+ "justify-self": [{ "justify-self": ["auto", "start", "end", "center", "stretch"] }],
877
+ /**
878
+ * Align Content
879
+ * @see https://tailwindcss.com/docs/align-content
880
+ */
881
+ "align-content": [{ content: ["normal", ...getAlign(), "baseline"] }],
882
+ /**
883
+ * Align Items
884
+ * @see https://tailwindcss.com/docs/align-items
885
+ */
886
+ "align-items": [{ items: ["start", "end", "center", "baseline", "stretch"] }],
887
+ /**
888
+ * Align Self
889
+ * @see https://tailwindcss.com/docs/align-self
890
+ */
891
+ "align-self": [{ self: ["auto", "start", "end", "center", "stretch", "baseline"] }],
892
+ /**
893
+ * Place Content
894
+ * @see https://tailwindcss.com/docs/place-content
895
+ */
896
+ "place-content": [{ "place-content": [...getAlign(), "baseline"] }],
897
+ /**
898
+ * Place Items
899
+ * @see https://tailwindcss.com/docs/place-items
900
+ */
901
+ "place-items": [{ "place-items": ["start", "end", "center", "baseline", "stretch"] }],
902
+ /**
903
+ * Place Self
904
+ * @see https://tailwindcss.com/docs/place-self
905
+ */
906
+ "place-self": [{ "place-self": ["auto", "start", "end", "center", "stretch"] }],
907
+ // Spacing
908
+ /**
909
+ * Padding
910
+ * @see https://tailwindcss.com/docs/padding
911
+ */
912
+ "p": [{ p: [padding] }],
913
+ /**
914
+ * Padding X
915
+ * @see https://tailwindcss.com/docs/padding
916
+ */
917
+ "px": [{ px: [padding] }],
918
+ /**
919
+ * Padding Y
920
+ * @see https://tailwindcss.com/docs/padding
921
+ */
922
+ "py": [{ py: [padding] }],
923
+ /**
924
+ * Padding Start
925
+ * @see https://tailwindcss.com/docs/padding
926
+ */
927
+ "ps": [{ ps: [padding] }],
928
+ /**
929
+ * Padding End
930
+ * @see https://tailwindcss.com/docs/padding
931
+ */
932
+ "pe": [{ pe: [padding] }],
933
+ /**
934
+ * Padding Top
935
+ * @see https://tailwindcss.com/docs/padding
936
+ */
937
+ "pt": [{ pt: [padding] }],
938
+ /**
939
+ * Padding Right
940
+ * @see https://tailwindcss.com/docs/padding
941
+ */
942
+ "pr": [{ pr: [padding] }],
943
+ /**
944
+ * Padding Bottom
945
+ * @see https://tailwindcss.com/docs/padding
946
+ */
947
+ "pb": [{ pb: [padding] }],
948
+ /**
949
+ * Padding Left
950
+ * @see https://tailwindcss.com/docs/padding
951
+ */
952
+ "pl": [{ pl: [padding] }],
953
+ /**
954
+ * Margin
955
+ * @see https://tailwindcss.com/docs/margin
956
+ */
957
+ "m": [{ m: [margin] }],
958
+ /**
959
+ * Margin X
960
+ * @see https://tailwindcss.com/docs/margin
961
+ */
962
+ "mx": [{ mx: [margin] }],
963
+ /**
964
+ * Margin Y
965
+ * @see https://tailwindcss.com/docs/margin
966
+ */
967
+ "my": [{ my: [margin] }],
968
+ /**
969
+ * Margin Start
970
+ * @see https://tailwindcss.com/docs/margin
971
+ */
972
+ "ms": [{ ms: [margin] }],
973
+ /**
974
+ * Margin End
975
+ * @see https://tailwindcss.com/docs/margin
976
+ */
977
+ "me": [{ me: [margin] }],
978
+ /**
979
+ * Margin Top
980
+ * @see https://tailwindcss.com/docs/margin
981
+ */
982
+ "mt": [{ mt: [margin] }],
983
+ /**
984
+ * Margin Right
985
+ * @see https://tailwindcss.com/docs/margin
986
+ */
987
+ "mr": [{ mr: [margin] }],
988
+ /**
989
+ * Margin Bottom
990
+ * @see https://tailwindcss.com/docs/margin
991
+ */
992
+ "mb": [{ mb: [margin] }],
993
+ /**
994
+ * Margin Left
995
+ * @see https://tailwindcss.com/docs/margin
996
+ */
997
+ "ml": [{ ml: [margin] }],
998
+ /**
999
+ * Space Between X
1000
+ * @see https://tailwindcss.com/docs/space
1001
+ */
1002
+ "space-x": [{ "space-x": [space] }],
1003
+ /**
1004
+ * Space Between X Reverse
1005
+ * @see https://tailwindcss.com/docs/space
1006
+ */
1007
+ "space-x-reverse": ["space-x-reverse"],
1008
+ /**
1009
+ * Space Between Y
1010
+ * @see https://tailwindcss.com/docs/space
1011
+ */
1012
+ "space-y": [{ "space-y": [space] }],
1013
+ /**
1014
+ * Space Between Y Reverse
1015
+ * @see https://tailwindcss.com/docs/space
1016
+ */
1017
+ "space-y-reverse": ["space-y-reverse"],
1018
+ // Sizing
1019
+ /**
1020
+ * Width
1021
+ * @see https://tailwindcss.com/docs/width
1022
+ */
1023
+ "w": [
1024
+ {
1025
+ w: [
1026
+ "auto",
1027
+ "min",
1028
+ "max",
1029
+ "fit",
1030
+ "svw",
1031
+ "lvw",
1032
+ "dvw",
1033
+ isArbitraryValue,
1034
+ spacing
1035
+ ]
1036
+ }
1037
+ ],
1038
+ /**
1039
+ * Min-Width
1040
+ * @see https://tailwindcss.com/docs/min-width
1041
+ */
1042
+ "min-w": [{ "min-w": [isArbitraryValue, spacing, "min", "max", "fit"] }],
1043
+ /**
1044
+ * Max-Width
1045
+ * @see https://tailwindcss.com/docs/max-width
1046
+ */
1047
+ "max-w": [
1048
+ {
1049
+ "max-w": [
1050
+ isArbitraryValue,
1051
+ spacing,
1052
+ "none",
1053
+ "full",
1054
+ "min",
1055
+ "max",
1056
+ "fit",
1057
+ "prose",
1058
+ { screen: [isTshirtSize] },
1059
+ isTshirtSize
1060
+ ]
1061
+ }
1062
+ ],
1063
+ /**
1064
+ * Height
1065
+ * @see https://tailwindcss.com/docs/height
1066
+ */
1067
+ "h": [
1068
+ {
1069
+ h: [
1070
+ isArbitraryValue,
1071
+ spacing,
1072
+ "auto",
1073
+ "min",
1074
+ "max",
1075
+ "fit",
1076
+ "svh",
1077
+ "lvh",
1078
+ "dvh"
1079
+ ]
1080
+ }
1081
+ ],
1082
+ /**
1083
+ * Min-Height
1084
+ * @see https://tailwindcss.com/docs/min-height
1085
+ */
1086
+ "min-h": [
1087
+ { "min-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"] }
1088
+ ],
1089
+ /**
1090
+ * Max-Height
1091
+ * @see https://tailwindcss.com/docs/max-height
1092
+ */
1093
+ "max-h": [
1094
+ { "max-h": [isArbitraryValue, spacing, "min", "max", "fit", "svh", "lvh", "dvh"] }
1095
+ ],
1096
+ /**
1097
+ * Size
1098
+ * @see https://tailwindcss.com/docs/size
1099
+ */
1100
+ "size": [{ size: [isArbitraryValue, spacing, "auto", "min", "max", "fit"] }],
1101
+ // Typography
1102
+ /**
1103
+ * Font Size
1104
+ * @see https://tailwindcss.com/docs/font-size
1105
+ */
1106
+ "font-size": [{ text: ["base", isTshirtSize, isArbitraryLength] }],
1107
+ /**
1108
+ * Font Smoothing
1109
+ * @see https://tailwindcss.com/docs/font-smoothing
1110
+ */
1111
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1112
+ /**
1113
+ * Font Style
1114
+ * @see https://tailwindcss.com/docs/font-style
1115
+ */
1116
+ "font-style": ["italic", "not-italic"],
1117
+ /**
1118
+ * Font Weight
1119
+ * @see https://tailwindcss.com/docs/font-weight
1120
+ */
1121
+ "font-weight": [
1122
+ {
1123
+ font: [
1124
+ "thin",
1125
+ "extralight",
1126
+ "light",
1127
+ "normal",
1128
+ "medium",
1129
+ "semibold",
1130
+ "bold",
1131
+ "extrabold",
1132
+ "black",
1133
+ isArbitraryNumber
1134
+ ]
1135
+ }
1136
+ ],
1137
+ /**
1138
+ * Font Family
1139
+ * @see https://tailwindcss.com/docs/font-family
1140
+ */
1141
+ "font-family": [{ font: [isAny] }],
1142
+ /**
1143
+ * Font Variant Numeric
1144
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1145
+ */
1146
+ "fvn-normal": ["normal-nums"],
1147
+ /**
1148
+ * Font Variant Numeric
1149
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1150
+ */
1151
+ "fvn-ordinal": ["ordinal"],
1152
+ /**
1153
+ * Font Variant Numeric
1154
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1155
+ */
1156
+ "fvn-slashed-zero": ["slashed-zero"],
1157
+ /**
1158
+ * Font Variant Numeric
1159
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1160
+ */
1161
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1162
+ /**
1163
+ * Font Variant Numeric
1164
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1165
+ */
1166
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1167
+ /**
1168
+ * Font Variant Numeric
1169
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1170
+ */
1171
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1172
+ /**
1173
+ * Letter Spacing
1174
+ * @see https://tailwindcss.com/docs/letter-spacing
1175
+ */
1176
+ "tracking": [
1177
+ {
1178
+ tracking: [
1179
+ "tighter",
1180
+ "tight",
1181
+ "normal",
1182
+ "wide",
1183
+ "wider",
1184
+ "widest",
1185
+ isArbitraryValue
1186
+ ]
1187
+ }
1188
+ ],
1189
+ /**
1190
+ * Line Clamp
1191
+ * @see https://tailwindcss.com/docs/line-clamp
1192
+ */
1193
+ "line-clamp": [{ "line-clamp": ["none", isNumber, isArbitraryNumber] }],
1194
+ /**
1195
+ * Line Height
1196
+ * @see https://tailwindcss.com/docs/line-height
1197
+ */
1198
+ "leading": [
1199
+ {
1200
+ leading: [
1201
+ "none",
1202
+ "tight",
1203
+ "snug",
1204
+ "normal",
1205
+ "relaxed",
1206
+ "loose",
1207
+ isLength,
1208
+ isArbitraryValue
1209
+ ]
1210
+ }
1211
+ ],
1212
+ /**
1213
+ * List Style Image
1214
+ * @see https://tailwindcss.com/docs/list-style-image
1215
+ */
1216
+ "list-image": [{ "list-image": ["none", isArbitraryValue] }],
1217
+ /**
1218
+ * List Style Type
1219
+ * @see https://tailwindcss.com/docs/list-style-type
1220
+ */
1221
+ "list-style-type": [{ list: ["none", "disc", "decimal", isArbitraryValue] }],
1222
+ /**
1223
+ * List Style Position
1224
+ * @see https://tailwindcss.com/docs/list-style-position
1225
+ */
1226
+ "list-style-position": [{ list: ["inside", "outside"] }],
1227
+ /**
1228
+ * Placeholder Color
1229
+ * @deprecated since Tailwind CSS v3.0.0
1230
+ * @see https://tailwindcss.com/docs/placeholder-color
1231
+ */
1232
+ "placeholder-color": [{ placeholder: [colors] }],
1233
+ /**
1234
+ * Placeholder Opacity
1235
+ * @see https://tailwindcss.com/docs/placeholder-opacity
1236
+ */
1237
+ "placeholder-opacity": [{ "placeholder-opacity": [opacity] }],
1238
+ /**
1239
+ * Text Alignment
1240
+ * @see https://tailwindcss.com/docs/text-align
1241
+ */
1242
+ "text-alignment": [{ text: ["left", "center", "right", "justify", "start", "end"] }],
1243
+ /**
1244
+ * Text Color
1245
+ * @see https://tailwindcss.com/docs/text-color
1246
+ */
1247
+ "text-color": [{ text: [colors] }],
1248
+ /**
1249
+ * Text Opacity
1250
+ * @see https://tailwindcss.com/docs/text-opacity
1251
+ */
1252
+ "text-opacity": [{ "text-opacity": [opacity] }],
1253
+ /**
1254
+ * Text Decoration
1255
+ * @see https://tailwindcss.com/docs/text-decoration
1256
+ */
1257
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1258
+ /**
1259
+ * Text Decoration Style
1260
+ * @see https://tailwindcss.com/docs/text-decoration-style
1261
+ */
1262
+ "text-decoration-style": [{ decoration: [...getLineStyles(), "wavy"] }],
1263
+ /**
1264
+ * Text Decoration Thickness
1265
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1266
+ */
1267
+ "text-decoration-thickness": [
1268
+ { decoration: ["auto", "from-font", isLength, isArbitraryLength] }
1269
+ ],
1270
+ /**
1271
+ * Text Underline Offset
1272
+ * @see https://tailwindcss.com/docs/text-underline-offset
1273
+ */
1274
+ "underline-offset": [{ "underline-offset": ["auto", isLength, isArbitraryValue] }],
1275
+ /**
1276
+ * Text Decoration Color
1277
+ * @see https://tailwindcss.com/docs/text-decoration-color
1278
+ */
1279
+ "text-decoration-color": [{ decoration: [colors] }],
1280
+ /**
1281
+ * Text Transform
1282
+ * @see https://tailwindcss.com/docs/text-transform
1283
+ */
1284
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1285
+ /**
1286
+ * Text Overflow
1287
+ * @see https://tailwindcss.com/docs/text-overflow
1288
+ */
1289
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1290
+ /**
1291
+ * Text Wrap
1292
+ * @see https://tailwindcss.com/docs/text-wrap
1293
+ */
1294
+ "text-wrap": [{ text: ["wrap", "nowrap", "balance", "pretty"] }],
1295
+ /**
1296
+ * Text Indent
1297
+ * @see https://tailwindcss.com/docs/text-indent
1298
+ */
1299
+ "indent": [{ indent: getSpacingWithArbitrary() }],
1300
+ /**
1301
+ * Vertical Alignment
1302
+ * @see https://tailwindcss.com/docs/vertical-align
1303
+ */
1304
+ "vertical-align": [
1305
+ {
1306
+ align: [
1307
+ "baseline",
1308
+ "top",
1309
+ "middle",
1310
+ "bottom",
1311
+ "text-top",
1312
+ "text-bottom",
1313
+ "sub",
1314
+ "super",
1315
+ isArbitraryValue
1316
+ ]
1317
+ }
1318
+ ],
1319
+ /**
1320
+ * Whitespace
1321
+ * @see https://tailwindcss.com/docs/whitespace
1322
+ */
1323
+ "whitespace": [
1324
+ { whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"] }
1325
+ ],
1326
+ /**
1327
+ * Word Break
1328
+ * @see https://tailwindcss.com/docs/word-break
1329
+ */
1330
+ "break": [{ break: ["normal", "words", "all", "keep"] }],
1331
+ /**
1332
+ * Hyphens
1333
+ * @see https://tailwindcss.com/docs/hyphens
1334
+ */
1335
+ "hyphens": [{ hyphens: ["none", "manual", "auto"] }],
1336
+ /**
1337
+ * Content
1338
+ * @see https://tailwindcss.com/docs/content
1339
+ */
1340
+ "content": [{ content: ["none", isArbitraryValue] }],
1341
+ // Backgrounds
1342
+ /**
1343
+ * Background Attachment
1344
+ * @see https://tailwindcss.com/docs/background-attachment
1345
+ */
1346
+ "bg-attachment": [{ bg: ["fixed", "local", "scroll"] }],
1347
+ /**
1348
+ * Background Clip
1349
+ * @see https://tailwindcss.com/docs/background-clip
1350
+ */
1351
+ "bg-clip": [{ "bg-clip": ["border", "padding", "content", "text"] }],
1352
+ /**
1353
+ * Background Opacity
1354
+ * @deprecated since Tailwind CSS v3.0.0
1355
+ * @see https://tailwindcss.com/docs/background-opacity
1356
+ */
1357
+ "bg-opacity": [{ "bg-opacity": [opacity] }],
1358
+ /**
1359
+ * Background Origin
1360
+ * @see https://tailwindcss.com/docs/background-origin
1361
+ */
1362
+ "bg-origin": [{ "bg-origin": ["border", "padding", "content"] }],
1363
+ /**
1364
+ * Background Position
1365
+ * @see https://tailwindcss.com/docs/background-position
1366
+ */
1367
+ "bg-position": [{ bg: [...getPositions(), isArbitraryPosition] }],
1368
+ /**
1369
+ * Background Repeat
1370
+ * @see https://tailwindcss.com/docs/background-repeat
1371
+ */
1372
+ "bg-repeat": [{ bg: ["no-repeat", { repeat: ["", "x", "y", "round", "space"] }] }],
1373
+ /**
1374
+ * Background Size
1375
+ * @see https://tailwindcss.com/docs/background-size
1376
+ */
1377
+ "bg-size": [{ bg: ["auto", "cover", "contain", isArbitrarySize] }],
1378
+ /**
1379
+ * Background Image
1380
+ * @see https://tailwindcss.com/docs/background-image
1381
+ */
1382
+ "bg-image": [
1383
+ {
1384
+ bg: [
1385
+ "none",
1386
+ { "gradient-to": ["t", "tr", "r", "br", "b", "bl", "l", "tl"] },
1387
+ isArbitraryImage
1388
+ ]
1389
+ }
1390
+ ],
1391
+ /**
1392
+ * Background Color
1393
+ * @see https://tailwindcss.com/docs/background-color
1394
+ */
1395
+ "bg-color": [{ bg: [colors] }],
1396
+ /**
1397
+ * Gradient Color Stops From Position
1398
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1399
+ */
1400
+ "gradient-from-pos": [{ from: [gradientColorStopPositions] }],
1401
+ /**
1402
+ * Gradient Color Stops Via Position
1403
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1404
+ */
1405
+ "gradient-via-pos": [{ via: [gradientColorStopPositions] }],
1406
+ /**
1407
+ * Gradient Color Stops To Position
1408
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1409
+ */
1410
+ "gradient-to-pos": [{ to: [gradientColorStopPositions] }],
1411
+ /**
1412
+ * Gradient Color Stops From
1413
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1414
+ */
1415
+ "gradient-from": [{ from: [gradientColorStops] }],
1416
+ /**
1417
+ * Gradient Color Stops Via
1418
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1419
+ */
1420
+ "gradient-via": [{ via: [gradientColorStops] }],
1421
+ /**
1422
+ * Gradient Color Stops To
1423
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1424
+ */
1425
+ "gradient-to": [{ to: [gradientColorStops] }],
1426
+ // Borders
1427
+ /**
1428
+ * Border Radius
1429
+ * @see https://tailwindcss.com/docs/border-radius
1430
+ */
1431
+ "rounded": [{ rounded: [borderRadius] }],
1432
+ /**
1433
+ * Border Radius Start
1434
+ * @see https://tailwindcss.com/docs/border-radius
1435
+ */
1436
+ "rounded-s": [{ "rounded-s": [borderRadius] }],
1437
+ /**
1438
+ * Border Radius End
1439
+ * @see https://tailwindcss.com/docs/border-radius
1440
+ */
1441
+ "rounded-e": [{ "rounded-e": [borderRadius] }],
1442
+ /**
1443
+ * Border Radius Top
1444
+ * @see https://tailwindcss.com/docs/border-radius
1445
+ */
1446
+ "rounded-t": [{ "rounded-t": [borderRadius] }],
1447
+ /**
1448
+ * Border Radius Right
1449
+ * @see https://tailwindcss.com/docs/border-radius
1450
+ */
1451
+ "rounded-r": [{ "rounded-r": [borderRadius] }],
1452
+ /**
1453
+ * Border Radius Bottom
1454
+ * @see https://tailwindcss.com/docs/border-radius
1455
+ */
1456
+ "rounded-b": [{ "rounded-b": [borderRadius] }],
1457
+ /**
1458
+ * Border Radius Left
1459
+ * @see https://tailwindcss.com/docs/border-radius
1460
+ */
1461
+ "rounded-l": [{ "rounded-l": [borderRadius] }],
1462
+ /**
1463
+ * Border Radius Start Start
1464
+ * @see https://tailwindcss.com/docs/border-radius
1465
+ */
1466
+ "rounded-ss": [{ "rounded-ss": [borderRadius] }],
1467
+ /**
1468
+ * Border Radius Start End
1469
+ * @see https://tailwindcss.com/docs/border-radius
1470
+ */
1471
+ "rounded-se": [{ "rounded-se": [borderRadius] }],
1472
+ /**
1473
+ * Border Radius End End
1474
+ * @see https://tailwindcss.com/docs/border-radius
1475
+ */
1476
+ "rounded-ee": [{ "rounded-ee": [borderRadius] }],
1477
+ /**
1478
+ * Border Radius End Start
1479
+ * @see https://tailwindcss.com/docs/border-radius
1480
+ */
1481
+ "rounded-es": [{ "rounded-es": [borderRadius] }],
1482
+ /**
1483
+ * Border Radius Top Left
1484
+ * @see https://tailwindcss.com/docs/border-radius
1485
+ */
1486
+ "rounded-tl": [{ "rounded-tl": [borderRadius] }],
1487
+ /**
1488
+ * Border Radius Top Right
1489
+ * @see https://tailwindcss.com/docs/border-radius
1490
+ */
1491
+ "rounded-tr": [{ "rounded-tr": [borderRadius] }],
1492
+ /**
1493
+ * Border Radius Bottom Right
1494
+ * @see https://tailwindcss.com/docs/border-radius
1495
+ */
1496
+ "rounded-br": [{ "rounded-br": [borderRadius] }],
1497
+ /**
1498
+ * Border Radius Bottom Left
1499
+ * @see https://tailwindcss.com/docs/border-radius
1500
+ */
1501
+ "rounded-bl": [{ "rounded-bl": [borderRadius] }],
1502
+ /**
1503
+ * Border Width
1504
+ * @see https://tailwindcss.com/docs/border-width
1505
+ */
1506
+ "border-w": [{ border: [borderWidth] }],
1507
+ /**
1508
+ * Border Width X
1509
+ * @see https://tailwindcss.com/docs/border-width
1510
+ */
1511
+ "border-w-x": [{ "border-x": [borderWidth] }],
1512
+ /**
1513
+ * Border Width Y
1514
+ * @see https://tailwindcss.com/docs/border-width
1515
+ */
1516
+ "border-w-y": [{ "border-y": [borderWidth] }],
1517
+ /**
1518
+ * Border Width Start
1519
+ * @see https://tailwindcss.com/docs/border-width
1520
+ */
1521
+ "border-w-s": [{ "border-s": [borderWidth] }],
1522
+ /**
1523
+ * Border Width End
1524
+ * @see https://tailwindcss.com/docs/border-width
1525
+ */
1526
+ "border-w-e": [{ "border-e": [borderWidth] }],
1527
+ /**
1528
+ * Border Width Top
1529
+ * @see https://tailwindcss.com/docs/border-width
1530
+ */
1531
+ "border-w-t": [{ "border-t": [borderWidth] }],
1532
+ /**
1533
+ * Border Width Right
1534
+ * @see https://tailwindcss.com/docs/border-width
1535
+ */
1536
+ "border-w-r": [{ "border-r": [borderWidth] }],
1537
+ /**
1538
+ * Border Width Bottom
1539
+ * @see https://tailwindcss.com/docs/border-width
1540
+ */
1541
+ "border-w-b": [{ "border-b": [borderWidth] }],
1542
+ /**
1543
+ * Border Width Left
1544
+ * @see https://tailwindcss.com/docs/border-width
1545
+ */
1546
+ "border-w-l": [{ "border-l": [borderWidth] }],
1547
+ /**
1548
+ * Border Opacity
1549
+ * @see https://tailwindcss.com/docs/border-opacity
1550
+ */
1551
+ "border-opacity": [{ "border-opacity": [opacity] }],
1552
+ /**
1553
+ * Border Style
1554
+ * @see https://tailwindcss.com/docs/border-style
1555
+ */
1556
+ "border-style": [{ border: [...getLineStyles(), "hidden"] }],
1557
+ /**
1558
+ * Divide Width X
1559
+ * @see https://tailwindcss.com/docs/divide-width
1560
+ */
1561
+ "divide-x": [{ "divide-x": [borderWidth] }],
1562
+ /**
1563
+ * Divide Width X Reverse
1564
+ * @see https://tailwindcss.com/docs/divide-width
1565
+ */
1566
+ "divide-x-reverse": ["divide-x-reverse"],
1567
+ /**
1568
+ * Divide Width Y
1569
+ * @see https://tailwindcss.com/docs/divide-width
1570
+ */
1571
+ "divide-y": [{ "divide-y": [borderWidth] }],
1572
+ /**
1573
+ * Divide Width Y Reverse
1574
+ * @see https://tailwindcss.com/docs/divide-width
1575
+ */
1576
+ "divide-y-reverse": ["divide-y-reverse"],
1577
+ /**
1578
+ * Divide Opacity
1579
+ * @see https://tailwindcss.com/docs/divide-opacity
1580
+ */
1581
+ "divide-opacity": [{ "divide-opacity": [opacity] }],
1582
+ /**
1583
+ * Divide Style
1584
+ * @see https://tailwindcss.com/docs/divide-style
1585
+ */
1586
+ "divide-style": [{ divide: getLineStyles() }],
1587
+ /**
1588
+ * Border Color
1589
+ * @see https://tailwindcss.com/docs/border-color
1590
+ */
1591
+ "border-color": [{ border: [borderColor] }],
1592
+ /**
1593
+ * Border Color X
1594
+ * @see https://tailwindcss.com/docs/border-color
1595
+ */
1596
+ "border-color-x": [{ "border-x": [borderColor] }],
1597
+ /**
1598
+ * Border Color Y
1599
+ * @see https://tailwindcss.com/docs/border-color
1600
+ */
1601
+ "border-color-y": [{ "border-y": [borderColor] }],
1602
+ /**
1603
+ * Border Color S
1604
+ * @see https://tailwindcss.com/docs/border-color
1605
+ */
1606
+ "border-color-s": [{ "border-s": [borderColor] }],
1607
+ /**
1608
+ * Border Color E
1609
+ * @see https://tailwindcss.com/docs/border-color
1610
+ */
1611
+ "border-color-e": [{ "border-e": [borderColor] }],
1612
+ /**
1613
+ * Border Color Top
1614
+ * @see https://tailwindcss.com/docs/border-color
1615
+ */
1616
+ "border-color-t": [{ "border-t": [borderColor] }],
1617
+ /**
1618
+ * Border Color Right
1619
+ * @see https://tailwindcss.com/docs/border-color
1620
+ */
1621
+ "border-color-r": [{ "border-r": [borderColor] }],
1622
+ /**
1623
+ * Border Color Bottom
1624
+ * @see https://tailwindcss.com/docs/border-color
1625
+ */
1626
+ "border-color-b": [{ "border-b": [borderColor] }],
1627
+ /**
1628
+ * Border Color Left
1629
+ * @see https://tailwindcss.com/docs/border-color
1630
+ */
1631
+ "border-color-l": [{ "border-l": [borderColor] }],
1632
+ /**
1633
+ * Divide Color
1634
+ * @see https://tailwindcss.com/docs/divide-color
1635
+ */
1636
+ "divide-color": [{ divide: [borderColor] }],
1637
+ /**
1638
+ * Outline Style
1639
+ * @see https://tailwindcss.com/docs/outline-style
1640
+ */
1641
+ "outline-style": [{ outline: ["", ...getLineStyles()] }],
1642
+ /**
1643
+ * Outline Offset
1644
+ * @see https://tailwindcss.com/docs/outline-offset
1645
+ */
1646
+ "outline-offset": [{ "outline-offset": [isLength, isArbitraryValue] }],
1647
+ /**
1648
+ * Outline Width
1649
+ * @see https://tailwindcss.com/docs/outline-width
1650
+ */
1651
+ "outline-w": [{ outline: [isLength, isArbitraryLength] }],
1652
+ /**
1653
+ * Outline Color
1654
+ * @see https://tailwindcss.com/docs/outline-color
1655
+ */
1656
+ "outline-color": [{ outline: [colors] }],
1657
+ /**
1658
+ * Ring Width
1659
+ * @see https://tailwindcss.com/docs/ring-width
1660
+ */
1661
+ "ring-w": [{ ring: getLengthWithEmptyAndArbitrary() }],
1662
+ /**
1663
+ * Ring Width Inset
1664
+ * @see https://tailwindcss.com/docs/ring-width
1665
+ */
1666
+ "ring-w-inset": ["ring-inset"],
1667
+ /**
1668
+ * Ring Color
1669
+ * @see https://tailwindcss.com/docs/ring-color
1670
+ */
1671
+ "ring-color": [{ ring: [colors] }],
1672
+ /**
1673
+ * Ring Opacity
1674
+ * @see https://tailwindcss.com/docs/ring-opacity
1675
+ */
1676
+ "ring-opacity": [{ "ring-opacity": [opacity] }],
1677
+ /**
1678
+ * Ring Offset Width
1679
+ * @see https://tailwindcss.com/docs/ring-offset-width
1680
+ */
1681
+ "ring-offset-w": [{ "ring-offset": [isLength, isArbitraryLength] }],
1682
+ /**
1683
+ * Ring Offset Color
1684
+ * @see https://tailwindcss.com/docs/ring-offset-color
1685
+ */
1686
+ "ring-offset-color": [{ "ring-offset": [colors] }],
1687
+ // Effects
1688
+ /**
1689
+ * Box Shadow
1690
+ * @see https://tailwindcss.com/docs/box-shadow
1691
+ */
1692
+ "shadow": [{ shadow: ["", "inner", "none", isTshirtSize, isArbitraryShadow] }],
1693
+ /**
1694
+ * Box Shadow Color
1695
+ * @see https://tailwindcss.com/docs/box-shadow-color
1696
+ */
1697
+ "shadow-color": [{ shadow: [isAny] }],
1698
+ /**
1699
+ * Opacity
1700
+ * @see https://tailwindcss.com/docs/opacity
1701
+ */
1702
+ "opacity": [{ opacity: [opacity] }],
1703
+ /**
1704
+ * Mix Blend Mode
1705
+ * @see https://tailwindcss.com/docs/mix-blend-mode
1706
+ */
1707
+ "mix-blend": [{ "mix-blend": [...getBlendModes(), "plus-lighter", "plus-darker"] }],
1708
+ /**
1709
+ * Background Blend Mode
1710
+ * @see https://tailwindcss.com/docs/background-blend-mode
1711
+ */
1712
+ "bg-blend": [{ "bg-blend": getBlendModes() }],
1713
+ // Filters
1714
+ /**
1715
+ * Filter
1716
+ * @deprecated since Tailwind CSS v3.0.0
1717
+ * @see https://tailwindcss.com/docs/filter
1718
+ */
1719
+ "filter": [{ filter: ["", "none"] }],
1720
+ /**
1721
+ * Blur
1722
+ * @see https://tailwindcss.com/docs/blur
1723
+ */
1724
+ "blur": [{ blur: [blur] }],
1725
+ /**
1726
+ * Brightness
1727
+ * @see https://tailwindcss.com/docs/brightness
1728
+ */
1729
+ "brightness": [{ brightness: [brightness] }],
1730
+ /**
1731
+ * Contrast
1732
+ * @see https://tailwindcss.com/docs/contrast
1733
+ */
1734
+ "contrast": [{ contrast: [contrast] }],
1735
+ /**
1736
+ * Drop Shadow
1737
+ * @see https://tailwindcss.com/docs/drop-shadow
1738
+ */
1739
+ "drop-shadow": [{ "drop-shadow": ["", "none", isTshirtSize, isArbitraryValue] }],
1740
+ /**
1741
+ * Grayscale
1742
+ * @see https://tailwindcss.com/docs/grayscale
1743
+ */
1744
+ "grayscale": [{ grayscale: [grayscale] }],
1745
+ /**
1746
+ * Hue Rotate
1747
+ * @see https://tailwindcss.com/docs/hue-rotate
1748
+ */
1749
+ "hue-rotate": [{ "hue-rotate": [hueRotate] }],
1750
+ /**
1751
+ * Invert
1752
+ * @see https://tailwindcss.com/docs/invert
1753
+ */
1754
+ "invert": [{ invert: [invert] }],
1755
+ /**
1756
+ * Saturate
1757
+ * @see https://tailwindcss.com/docs/saturate
1758
+ */
1759
+ "saturate": [{ saturate: [saturate] }],
1760
+ /**
1761
+ * Sepia
1762
+ * @see https://tailwindcss.com/docs/sepia
1763
+ */
1764
+ "sepia": [{ sepia: [sepia] }],
1765
+ /**
1766
+ * Backdrop Filter
1767
+ * @deprecated since Tailwind CSS v3.0.0
1768
+ * @see https://tailwindcss.com/docs/backdrop-filter
1769
+ */
1770
+ "backdrop-filter": [{ "backdrop-filter": ["", "none"] }],
1771
+ /**
1772
+ * Backdrop Blur
1773
+ * @see https://tailwindcss.com/docs/backdrop-blur
1774
+ */
1775
+ "backdrop-blur": [{ "backdrop-blur": [blur] }],
1776
+ /**
1777
+ * Backdrop Brightness
1778
+ * @see https://tailwindcss.com/docs/backdrop-brightness
1779
+ */
1780
+ "backdrop-brightness": [{ "backdrop-brightness": [brightness] }],
1781
+ /**
1782
+ * Backdrop Contrast
1783
+ * @see https://tailwindcss.com/docs/backdrop-contrast
1784
+ */
1785
+ "backdrop-contrast": [{ "backdrop-contrast": [contrast] }],
1786
+ /**
1787
+ * Backdrop Grayscale
1788
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
1789
+ */
1790
+ "backdrop-grayscale": [{ "backdrop-grayscale": [grayscale] }],
1791
+ /**
1792
+ * Backdrop Hue Rotate
1793
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
1794
+ */
1795
+ "backdrop-hue-rotate": [{ "backdrop-hue-rotate": [hueRotate] }],
1796
+ /**
1797
+ * Backdrop Invert
1798
+ * @see https://tailwindcss.com/docs/backdrop-invert
1799
+ */
1800
+ "backdrop-invert": [{ "backdrop-invert": [invert] }],
1801
+ /**
1802
+ * Backdrop Opacity
1803
+ * @see https://tailwindcss.com/docs/backdrop-opacity
1804
+ */
1805
+ "backdrop-opacity": [{ "backdrop-opacity": [opacity] }],
1806
+ /**
1807
+ * Backdrop Saturate
1808
+ * @see https://tailwindcss.com/docs/backdrop-saturate
1809
+ */
1810
+ "backdrop-saturate": [{ "backdrop-saturate": [saturate] }],
1811
+ /**
1812
+ * Backdrop Sepia
1813
+ * @see https://tailwindcss.com/docs/backdrop-sepia
1814
+ */
1815
+ "backdrop-sepia": [{ "backdrop-sepia": [sepia] }],
1816
+ // Tables
1817
+ /**
1818
+ * Border Collapse
1819
+ * @see https://tailwindcss.com/docs/border-collapse
1820
+ */
1821
+ "border-collapse": [{ border: ["collapse", "separate"] }],
1822
+ /**
1823
+ * Border Spacing
1824
+ * @see https://tailwindcss.com/docs/border-spacing
1825
+ */
1826
+ "border-spacing": [{ "border-spacing": [borderSpacing] }],
1827
+ /**
1828
+ * Border Spacing X
1829
+ * @see https://tailwindcss.com/docs/border-spacing
1830
+ */
1831
+ "border-spacing-x": [{ "border-spacing-x": [borderSpacing] }],
1832
+ /**
1833
+ * Border Spacing Y
1834
+ * @see https://tailwindcss.com/docs/border-spacing
1835
+ */
1836
+ "border-spacing-y": [{ "border-spacing-y": [borderSpacing] }],
1837
+ /**
1838
+ * Table Layout
1839
+ * @see https://tailwindcss.com/docs/table-layout
1840
+ */
1841
+ "table-layout": [{ table: ["auto", "fixed"] }],
1842
+ /**
1843
+ * Caption Side
1844
+ * @see https://tailwindcss.com/docs/caption-side
1845
+ */
1846
+ "caption": [{ caption: ["top", "bottom"] }],
1847
+ // Transitions and Animation
1848
+ /**
1849
+ * Tranisition Property
1850
+ * @see https://tailwindcss.com/docs/transition-property
1851
+ */
1852
+ "transition": [
1853
+ {
1854
+ transition: [
1855
+ "none",
1856
+ "all",
1857
+ "",
1858
+ "colors",
1859
+ "opacity",
1860
+ "shadow",
1861
+ "transform",
1862
+ isArbitraryValue
1863
+ ]
1864
+ }
1865
+ ],
1866
+ /**
1867
+ * Transition Duration
1868
+ * @see https://tailwindcss.com/docs/transition-duration
1869
+ */
1870
+ "duration": [{ duration: getNumberAndArbitrary() }],
1871
+ /**
1872
+ * Transition Timing Function
1873
+ * @see https://tailwindcss.com/docs/transition-timing-function
1874
+ */
1875
+ "ease": [{ ease: ["linear", "in", "out", "in-out", isArbitraryValue] }],
1876
+ /**
1877
+ * Transition Delay
1878
+ * @see https://tailwindcss.com/docs/transition-delay
1879
+ */
1880
+ "delay": [{ delay: getNumberAndArbitrary() }],
1881
+ /**
1882
+ * Animation
1883
+ * @see https://tailwindcss.com/docs/animation
1884
+ */
1885
+ "animate": [{ animate: ["none", "spin", "ping", "pulse", "bounce", isArbitraryValue] }],
1886
+ // Transforms
1887
+ /**
1888
+ * Transform
1889
+ * @see https://tailwindcss.com/docs/transform
1890
+ */
1891
+ "transform": [{ transform: ["", "gpu", "none"] }],
1892
+ /**
1893
+ * Scale
1894
+ * @see https://tailwindcss.com/docs/scale
1895
+ */
1896
+ "scale": [{ scale: [scale] }],
1897
+ /**
1898
+ * Scale X
1899
+ * @see https://tailwindcss.com/docs/scale
1900
+ */
1901
+ "scale-x": [{ "scale-x": [scale] }],
1902
+ /**
1903
+ * Scale Y
1904
+ * @see https://tailwindcss.com/docs/scale
1905
+ */
1906
+ "scale-y": [{ "scale-y": [scale] }],
1907
+ /**
1908
+ * Rotate
1909
+ * @see https://tailwindcss.com/docs/rotate
1910
+ */
1911
+ "rotate": [{ rotate: [isInteger, isArbitraryValue] }],
1912
+ /**
1913
+ * Translate X
1914
+ * @see https://tailwindcss.com/docs/translate
1915
+ */
1916
+ "translate-x": [{ "translate-x": [translate] }],
1917
+ /**
1918
+ * Translate Y
1919
+ * @see https://tailwindcss.com/docs/translate
1920
+ */
1921
+ "translate-y": [{ "translate-y": [translate] }],
1922
+ /**
1923
+ * Skew X
1924
+ * @see https://tailwindcss.com/docs/skew
1925
+ */
1926
+ "skew-x": [{ "skew-x": [skew] }],
1927
+ /**
1928
+ * Skew Y
1929
+ * @see https://tailwindcss.com/docs/skew
1930
+ */
1931
+ "skew-y": [{ "skew-y": [skew] }],
1932
+ /**
1933
+ * Transform Origin
1934
+ * @see https://tailwindcss.com/docs/transform-origin
1935
+ */
1936
+ "transform-origin": [
1937
+ {
1938
+ origin: [
1939
+ "center",
1940
+ "top",
1941
+ "top-right",
1942
+ "right",
1943
+ "bottom-right",
1944
+ "bottom",
1945
+ "bottom-left",
1946
+ "left",
1947
+ "top-left",
1948
+ isArbitraryValue
1949
+ ]
1950
+ }
1951
+ ],
1952
+ // Interactivity
1953
+ /**
1954
+ * Accent Color
1955
+ * @see https://tailwindcss.com/docs/accent-color
1956
+ */
1957
+ "accent": [{ accent: ["auto", colors] }],
1958
+ /**
1959
+ * Appearance
1960
+ * @see https://tailwindcss.com/docs/appearance
1961
+ */
1962
+ "appearance": [{ appearance: ["none", "auto"] }],
1963
+ /**
1964
+ * Cursor
1965
+ * @see https://tailwindcss.com/docs/cursor
1966
+ */
1967
+ "cursor": [
1968
+ {
1969
+ cursor: [
1970
+ "auto",
1971
+ "default",
1972
+ "pointer",
1973
+ "wait",
1974
+ "text",
1975
+ "move",
1976
+ "help",
1977
+ "not-allowed",
1978
+ "none",
1979
+ "context-menu",
1980
+ "progress",
1981
+ "cell",
1982
+ "crosshair",
1983
+ "vertical-text",
1984
+ "alias",
1985
+ "copy",
1986
+ "no-drop",
1987
+ "grab",
1988
+ "grabbing",
1989
+ "all-scroll",
1990
+ "col-resize",
1991
+ "row-resize",
1992
+ "n-resize",
1993
+ "e-resize",
1994
+ "s-resize",
1995
+ "w-resize",
1996
+ "ne-resize",
1997
+ "nw-resize",
1998
+ "se-resize",
1999
+ "sw-resize",
2000
+ "ew-resize",
2001
+ "ns-resize",
2002
+ "nesw-resize",
2003
+ "nwse-resize",
2004
+ "zoom-in",
2005
+ "zoom-out",
2006
+ isArbitraryValue
2007
+ ]
2008
+ }
2009
+ ],
2010
+ /**
2011
+ * Caret Color
2012
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2013
+ */
2014
+ "caret-color": [{ caret: [colors] }],
2015
+ /**
2016
+ * Pointer Events
2017
+ * @see https://tailwindcss.com/docs/pointer-events
2018
+ */
2019
+ "pointer-events": [{ "pointer-events": ["none", "auto"] }],
2020
+ /**
2021
+ * Resize
2022
+ * @see https://tailwindcss.com/docs/resize
2023
+ */
2024
+ "resize": [{ resize: ["none", "y", "x", ""] }],
2025
+ /**
2026
+ * Scroll Behavior
2027
+ * @see https://tailwindcss.com/docs/scroll-behavior
2028
+ */
2029
+ "scroll-behavior": [{ scroll: ["auto", "smooth"] }],
2030
+ /**
2031
+ * Scroll Margin
2032
+ * @see https://tailwindcss.com/docs/scroll-margin
2033
+ */
2034
+ "scroll-m": [{ "scroll-m": getSpacingWithArbitrary() }],
2035
+ /**
2036
+ * Scroll Margin X
2037
+ * @see https://tailwindcss.com/docs/scroll-margin
2038
+ */
2039
+ "scroll-mx": [{ "scroll-mx": getSpacingWithArbitrary() }],
2040
+ /**
2041
+ * Scroll Margin Y
2042
+ * @see https://tailwindcss.com/docs/scroll-margin
2043
+ */
2044
+ "scroll-my": [{ "scroll-my": getSpacingWithArbitrary() }],
2045
+ /**
2046
+ * Scroll Margin Start
2047
+ * @see https://tailwindcss.com/docs/scroll-margin
2048
+ */
2049
+ "scroll-ms": [{ "scroll-ms": getSpacingWithArbitrary() }],
2050
+ /**
2051
+ * Scroll Margin End
2052
+ * @see https://tailwindcss.com/docs/scroll-margin
2053
+ */
2054
+ "scroll-me": [{ "scroll-me": getSpacingWithArbitrary() }],
2055
+ /**
2056
+ * Scroll Margin Top
2057
+ * @see https://tailwindcss.com/docs/scroll-margin
2058
+ */
2059
+ "scroll-mt": [{ "scroll-mt": getSpacingWithArbitrary() }],
2060
+ /**
2061
+ * Scroll Margin Right
2062
+ * @see https://tailwindcss.com/docs/scroll-margin
2063
+ */
2064
+ "scroll-mr": [{ "scroll-mr": getSpacingWithArbitrary() }],
2065
+ /**
2066
+ * Scroll Margin Bottom
2067
+ * @see https://tailwindcss.com/docs/scroll-margin
2068
+ */
2069
+ "scroll-mb": [{ "scroll-mb": getSpacingWithArbitrary() }],
2070
+ /**
2071
+ * Scroll Margin Left
2072
+ * @see https://tailwindcss.com/docs/scroll-margin
2073
+ */
2074
+ "scroll-ml": [{ "scroll-ml": getSpacingWithArbitrary() }],
2075
+ /**
2076
+ * Scroll Padding
2077
+ * @see https://tailwindcss.com/docs/scroll-padding
2078
+ */
2079
+ "scroll-p": [{ "scroll-p": getSpacingWithArbitrary() }],
2080
+ /**
2081
+ * Scroll Padding X
2082
+ * @see https://tailwindcss.com/docs/scroll-padding
2083
+ */
2084
+ "scroll-px": [{ "scroll-px": getSpacingWithArbitrary() }],
2085
+ /**
2086
+ * Scroll Padding Y
2087
+ * @see https://tailwindcss.com/docs/scroll-padding
2088
+ */
2089
+ "scroll-py": [{ "scroll-py": getSpacingWithArbitrary() }],
2090
+ /**
2091
+ * Scroll Padding Start
2092
+ * @see https://tailwindcss.com/docs/scroll-padding
2093
+ */
2094
+ "scroll-ps": [{ "scroll-ps": getSpacingWithArbitrary() }],
2095
+ /**
2096
+ * Scroll Padding End
2097
+ * @see https://tailwindcss.com/docs/scroll-padding
2098
+ */
2099
+ "scroll-pe": [{ "scroll-pe": getSpacingWithArbitrary() }],
2100
+ /**
2101
+ * Scroll Padding Top
2102
+ * @see https://tailwindcss.com/docs/scroll-padding
2103
+ */
2104
+ "scroll-pt": [{ "scroll-pt": getSpacingWithArbitrary() }],
2105
+ /**
2106
+ * Scroll Padding Right
2107
+ * @see https://tailwindcss.com/docs/scroll-padding
2108
+ */
2109
+ "scroll-pr": [{ "scroll-pr": getSpacingWithArbitrary() }],
2110
+ /**
2111
+ * Scroll Padding Bottom
2112
+ * @see https://tailwindcss.com/docs/scroll-padding
2113
+ */
2114
+ "scroll-pb": [{ "scroll-pb": getSpacingWithArbitrary() }],
2115
+ /**
2116
+ * Scroll Padding Left
2117
+ * @see https://tailwindcss.com/docs/scroll-padding
2118
+ */
2119
+ "scroll-pl": [{ "scroll-pl": getSpacingWithArbitrary() }],
2120
+ /**
2121
+ * Scroll Snap Align
2122
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2123
+ */
2124
+ "snap-align": [{ snap: ["start", "end", "center", "align-none"] }],
2125
+ /**
2126
+ * Scroll Snap Stop
2127
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2128
+ */
2129
+ "snap-stop": [{ snap: ["normal", "always"] }],
2130
+ /**
2131
+ * Scroll Snap Type
2132
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2133
+ */
2134
+ "snap-type": [{ snap: ["none", "x", "y", "both"] }],
2135
+ /**
2136
+ * Scroll Snap Type Strictness
2137
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2138
+ */
2139
+ "snap-strictness": [{ snap: ["mandatory", "proximity"] }],
2140
+ /**
2141
+ * Touch Action
2142
+ * @see https://tailwindcss.com/docs/touch-action
2143
+ */
2144
+ "touch": [
2145
+ {
2146
+ touch: ["auto", "none", "manipulation"]
2147
+ }
2148
+ ],
2149
+ /**
2150
+ * Touch Action X
2151
+ * @see https://tailwindcss.com/docs/touch-action
2152
+ */
2153
+ "touch-x": [
2154
+ {
2155
+ "touch-pan": ["x", "left", "right"]
2156
+ }
2157
+ ],
2158
+ /**
2159
+ * Touch Action Y
2160
+ * @see https://tailwindcss.com/docs/touch-action
2161
+ */
2162
+ "touch-y": [
2163
+ {
2164
+ "touch-pan": ["y", "up", "down"]
2165
+ }
2166
+ ],
2167
+ /**
2168
+ * Touch Action Pinch Zoom
2169
+ * @see https://tailwindcss.com/docs/touch-action
2170
+ */
2171
+ "touch-pz": ["touch-pinch-zoom"],
2172
+ /**
2173
+ * User Select
2174
+ * @see https://tailwindcss.com/docs/user-select
2175
+ */
2176
+ "select": [{ select: ["none", "text", "all", "auto"] }],
2177
+ /**
2178
+ * Will Change
2179
+ * @see https://tailwindcss.com/docs/will-change
2180
+ */
2181
+ "will-change": [
2182
+ { "will-change": ["auto", "scroll", "contents", "transform", isArbitraryValue] }
2183
+ ],
2184
+ // SVG
2185
+ /**
2186
+ * Fill
2187
+ * @see https://tailwindcss.com/docs/fill
2188
+ */
2189
+ "fill": [{ fill: [colors, "none"] }],
2190
+ /**
2191
+ * Stroke Width
2192
+ * @see https://tailwindcss.com/docs/stroke-width
2193
+ */
2194
+ "stroke-w": [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],
2195
+ /**
2196
+ * Stroke
2197
+ * @see https://tailwindcss.com/docs/stroke
2198
+ */
2199
+ "stroke": [{ stroke: [colors, "none"] }],
2200
+ // Accessibility
2201
+ /**
2202
+ * Screen Readers
2203
+ * @see https://tailwindcss.com/docs/screen-readers
2204
+ */
2205
+ "sr": ["sr-only", "not-sr-only"],
2206
+ /**
2207
+ * Forced Color Adjust
2208
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2209
+ */
2210
+ "forced-color-adjust": [{ "forced-color-adjust": ["auto", "none"] }]
2211
+ },
2212
+ conflictingClassGroups: {
2213
+ "overflow": ["overflow-x", "overflow-y"],
2214
+ "overscroll": ["overscroll-x", "overscroll-y"],
2215
+ "inset": ["inset-x", "inset-y", "start", "end", "top", "right", "bottom", "left"],
2216
+ "inset-x": ["right", "left"],
2217
+ "inset-y": ["top", "bottom"],
2218
+ "flex": ["basis", "grow", "shrink"],
2219
+ "gap": ["gap-x", "gap-y"],
2220
+ "p": ["px", "py", "ps", "pe", "pt", "pr", "pb", "pl"],
2221
+ "px": ["pr", "pl"],
2222
+ "py": ["pt", "pb"],
2223
+ "m": ["mx", "my", "ms", "me", "mt", "mr", "mb", "ml"],
2224
+ "mx": ["mr", "ml"],
2225
+ "my": ["mt", "mb"],
2226
+ "size": ["w", "h"],
2227
+ "font-size": ["leading"],
2228
+ "fvn-normal": [
2229
+ "fvn-ordinal",
2230
+ "fvn-slashed-zero",
2231
+ "fvn-figure",
2232
+ "fvn-spacing",
2233
+ "fvn-fraction"
2234
+ ],
2235
+ "fvn-ordinal": ["fvn-normal"],
2236
+ "fvn-slashed-zero": ["fvn-normal"],
2237
+ "fvn-figure": ["fvn-normal"],
2238
+ "fvn-spacing": ["fvn-normal"],
2239
+ "fvn-fraction": ["fvn-normal"],
2240
+ "line-clamp": ["display", "overflow"],
2241
+ "rounded": [
2242
+ "rounded-s",
2243
+ "rounded-e",
2244
+ "rounded-t",
2245
+ "rounded-r",
2246
+ "rounded-b",
2247
+ "rounded-l",
2248
+ "rounded-ss",
2249
+ "rounded-se",
2250
+ "rounded-ee",
2251
+ "rounded-es",
2252
+ "rounded-tl",
2253
+ "rounded-tr",
2254
+ "rounded-br",
2255
+ "rounded-bl"
2256
+ ],
2257
+ "rounded-s": ["rounded-ss", "rounded-es"],
2258
+ "rounded-e": ["rounded-se", "rounded-ee"],
2259
+ "rounded-t": ["rounded-tl", "rounded-tr"],
2260
+ "rounded-r": ["rounded-tr", "rounded-br"],
2261
+ "rounded-b": ["rounded-br", "rounded-bl"],
2262
+ "rounded-l": ["rounded-tl", "rounded-bl"],
2263
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
2264
+ "border-w": [
2265
+ "border-w-s",
2266
+ "border-w-e",
2267
+ "border-w-t",
2268
+ "border-w-r",
2269
+ "border-w-b",
2270
+ "border-w-l"
2271
+ ],
2272
+ "border-w-x": ["border-w-r", "border-w-l"],
2273
+ "border-w-y": ["border-w-t", "border-w-b"],
2274
+ "border-color": [
2275
+ "border-color-s",
2276
+ "border-color-e",
2277
+ "border-color-t",
2278
+ "border-color-r",
2279
+ "border-color-b",
2280
+ "border-color-l"
2281
+ ],
2282
+ "border-color-x": ["border-color-r", "border-color-l"],
2283
+ "border-color-y": ["border-color-t", "border-color-b"],
2284
+ "scroll-m": [
2285
+ "scroll-mx",
2286
+ "scroll-my",
2287
+ "scroll-ms",
2288
+ "scroll-me",
2289
+ "scroll-mt",
2290
+ "scroll-mr",
2291
+ "scroll-mb",
2292
+ "scroll-ml"
2293
+ ],
2294
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
2295
+ "scroll-my": ["scroll-mt", "scroll-mb"],
2296
+ "scroll-p": [
2297
+ "scroll-px",
2298
+ "scroll-py",
2299
+ "scroll-ps",
2300
+ "scroll-pe",
2301
+ "scroll-pt",
2302
+ "scroll-pr",
2303
+ "scroll-pb",
2304
+ "scroll-pl"
2305
+ ],
2306
+ "scroll-px": ["scroll-pr", "scroll-pl"],
2307
+ "scroll-py": ["scroll-pt", "scroll-pb"],
2308
+ "touch": ["touch-x", "touch-y", "touch-pz"],
2309
+ "touch-x": ["touch"],
2310
+ "touch-y": ["touch"],
2311
+ "touch-pz": ["touch"]
2312
+ },
2313
+ conflictingClassGroupModifiers: {
2314
+ "font-size": ["leading"]
2315
+ }
2316
+ };
2317
+ }
2318
+
2319
+ // src/lib/merge-configs.ts
2320
+ function mergeConfigs(baseConfig, {
2321
+ cacheSize,
2322
+ prefix,
2323
+ separator,
2324
+ experimentalParseClassName,
2325
+ extend = {},
2326
+ override = {}
2327
+ }) {
2328
+ overrideProperty(baseConfig, "cacheSize", cacheSize);
2329
+ overrideProperty(baseConfig, "prefix", prefix);
2330
+ overrideProperty(baseConfig, "separator", separator);
2331
+ overrideProperty(baseConfig, "experimentalParseClassName", experimentalParseClassName);
2332
+ for (const configKey in override) {
2333
+ overrideConfigProperties(
2334
+ baseConfig[configKey],
2335
+ override[configKey]
2336
+ );
2337
+ }
2338
+ for (const key in extend) {
2339
+ mergeConfigProperties(
2340
+ baseConfig[key],
2341
+ extend[key]
2342
+ );
2343
+ }
2344
+ return baseConfig;
2345
+ }
2346
+ function overrideProperty(baseObject, overrideKey, overrideValue) {
2347
+ if (overrideValue !== void 0) {
2348
+ baseObject[overrideKey] = overrideValue;
2349
+ }
2350
+ }
2351
+ function overrideConfigProperties(baseObject, overrideObject) {
2352
+ if (overrideObject) {
2353
+ for (const key in overrideObject) {
2354
+ overrideProperty(baseObject, key, overrideObject[key]);
2355
+ }
2356
+ }
2357
+ }
2358
+ function mergeConfigProperties(baseObject, mergeObject) {
2359
+ if (mergeObject) {
2360
+ for (const key in mergeObject) {
2361
+ const mergeValue = mergeObject[key];
2362
+ if (mergeValue !== void 0) {
2363
+ baseObject[key] = (baseObject[key] || []).concat(mergeValue);
2364
+ }
2365
+ }
2366
+ }
2367
+ }
2368
+
2369
+ // src/lib/extend-tailwind-merge.ts
2370
+ function extendTailwindMerge(configExtension, ...createConfig) {
2371
+ return typeof configExtension === "function" ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(
2372
+ () => mergeConfigs(getDefaultConfig(), configExtension),
2373
+ ...createConfig
2374
+ );
2375
+ }
2376
+
2377
+ // src/lib/tw-merge.ts
2378
+ var twMerge = createTailwindMerge(getDefaultConfig);
2379
+ // Annotate the CommonJS export names for ESM import in node:
2380
+ 0 && (module.exports = {
2381
+ createTailwindMerge,
2382
+ extendTailwindMerge,
2383
+ fromTheme,
2384
+ getDefaultConfig,
2385
+ mergeConfigs,
2386
+ twJoin,
2387
+ twMerge,
2388
+ validators
2389
+ });