@trackunit/css-class-variance-utilities 0.0.5 → 0.0.7

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