@vaneui/ui 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,3093 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+
3
+ const CLASS_PART_SEPARATOR = '-';
4
+ const createClassGroupUtils = config => {
5
+ const classMap = createClassMap(config);
6
+ const {
7
+ conflictingClassGroups,
8
+ conflictingClassGroupModifiers
9
+ } = config;
10
+ const getClassGroupId = className => {
11
+ const classParts = className.split(CLASS_PART_SEPARATOR);
12
+ // 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.
13
+ if (classParts[0] === '' && classParts.length !== 1) {
14
+ classParts.shift();
15
+ }
16
+ return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);
17
+ };
18
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
19
+ const conflicts = conflictingClassGroups[classGroupId] || [];
20
+ if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {
21
+ return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];
22
+ }
23
+ return conflicts;
24
+ };
25
+ return {
26
+ getClassGroupId,
27
+ getConflictingClassGroupIds
28
+ };
29
+ };
30
+ const getGroupRecursive = (classParts, classPartObject) => {
31
+ if (classParts.length === 0) {
32
+ return classPartObject.classGroupId;
33
+ }
34
+ const currentClassPart = classParts[0];
35
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
36
+ const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;
37
+ if (classGroupFromNextClassPart) {
38
+ return classGroupFromNextClassPart;
39
+ }
40
+ if (classPartObject.validators.length === 0) {
41
+ return undefined;
42
+ }
43
+ const classRest = classParts.join(CLASS_PART_SEPARATOR);
44
+ return classPartObject.validators.find(({
45
+ validator
46
+ }) => validator(classRest))?.classGroupId;
47
+ };
48
+ const arbitraryPropertyRegex = /^\[(.+)\]$/;
49
+ const getGroupIdForArbitraryProperty = className => {
50
+ if (arbitraryPropertyRegex.test(className)) {
51
+ const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];
52
+ const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));
53
+ if (property) {
54
+ // I use two dots here because one dot is used as prefix for class groups in plugins
55
+ return 'arbitrary..' + property;
56
+ }
57
+ }
58
+ };
59
+ /**
60
+ * Exported for testing only
61
+ */
62
+ const createClassMap = config => {
63
+ const {
64
+ theme,
65
+ classGroups
66
+ } = config;
67
+ const classMap = {
68
+ nextPart: new Map(),
69
+ validators: []
70
+ };
71
+ for (const classGroupId in classGroups) {
72
+ processClassesRecursively(classGroups[classGroupId], classMap, classGroupId, theme);
73
+ }
74
+ return classMap;
75
+ };
76
+ const processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
77
+ classGroup.forEach(classDefinition => {
78
+ if (typeof classDefinition === 'string') {
79
+ const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);
80
+ classPartObjectToEdit.classGroupId = classGroupId;
81
+ return;
82
+ }
83
+ if (typeof classDefinition === 'function') {
84
+ if (isThemeGetter(classDefinition)) {
85
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
86
+ return;
87
+ }
88
+ classPartObject.validators.push({
89
+ validator: classDefinition,
90
+ classGroupId
91
+ });
92
+ return;
93
+ }
94
+ Object.entries(classDefinition).forEach(([key, classGroup]) => {
95
+ processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);
96
+ });
97
+ });
98
+ };
99
+ const getPart = (classPartObject, path) => {
100
+ let currentClassPartObject = classPartObject;
101
+ path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {
102
+ if (!currentClassPartObject.nextPart.has(pathPart)) {
103
+ currentClassPartObject.nextPart.set(pathPart, {
104
+ nextPart: new Map(),
105
+ validators: []
106
+ });
107
+ }
108
+ currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);
109
+ });
110
+ return currentClassPartObject;
111
+ };
112
+ const isThemeGetter = func => func.isThemeGetter;
113
+
114
+ // LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance
115
+ const createLruCache = maxCacheSize => {
116
+ if (maxCacheSize < 1) {
117
+ return {
118
+ get: () => undefined,
119
+ set: () => {}
120
+ };
121
+ }
122
+ let cacheSize = 0;
123
+ let cache = new Map();
124
+ let previousCache = new Map();
125
+ const update = (key, value) => {
126
+ cache.set(key, value);
127
+ cacheSize++;
128
+ if (cacheSize > maxCacheSize) {
129
+ cacheSize = 0;
130
+ previousCache = cache;
131
+ cache = new Map();
132
+ }
133
+ };
134
+ return {
135
+ get(key) {
136
+ let value = cache.get(key);
137
+ if (value !== undefined) {
138
+ return value;
139
+ }
140
+ if ((value = previousCache.get(key)) !== undefined) {
141
+ update(key, value);
142
+ return value;
143
+ }
144
+ },
145
+ set(key, value) {
146
+ if (cache.has(key)) {
147
+ cache.set(key, value);
148
+ } else {
149
+ update(key, value);
150
+ }
151
+ }
152
+ };
153
+ };
154
+ const IMPORTANT_MODIFIER = '!';
155
+ const MODIFIER_SEPARATOR = ':';
156
+ const MODIFIER_SEPARATOR_LENGTH = MODIFIER_SEPARATOR.length;
157
+ const createParseClassName = config => {
158
+ const {
159
+ prefix,
160
+ experimentalParseClassName
161
+ } = config;
162
+ /**
163
+ * Parse class name into parts.
164
+ *
165
+ * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS
166
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js
167
+ */
168
+ let parseClassName = className => {
169
+ const modifiers = [];
170
+ let bracketDepth = 0;
171
+ let parenDepth = 0;
172
+ let modifierStart = 0;
173
+ let postfixModifierPosition;
174
+ for (let index = 0; index < className.length; index++) {
175
+ let currentCharacter = className[index];
176
+ if (bracketDepth === 0 && parenDepth === 0) {
177
+ if (currentCharacter === MODIFIER_SEPARATOR) {
178
+ modifiers.push(className.slice(modifierStart, index));
179
+ modifierStart = index + MODIFIER_SEPARATOR_LENGTH;
180
+ continue;
181
+ }
182
+ if (currentCharacter === '/') {
183
+ postfixModifierPosition = index;
184
+ continue;
185
+ }
186
+ }
187
+ if (currentCharacter === '[') {
188
+ bracketDepth++;
189
+ } else if (currentCharacter === ']') {
190
+ bracketDepth--;
191
+ } else if (currentCharacter === '(') {
192
+ parenDepth++;
193
+ } else if (currentCharacter === ')') {
194
+ parenDepth--;
195
+ }
196
+ }
197
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);
198
+ const baseClassName = stripImportantModifier(baseClassNameWithImportantModifier);
199
+ const hasImportantModifier = baseClassName !== baseClassNameWithImportantModifier;
200
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;
201
+ return {
202
+ modifiers,
203
+ hasImportantModifier,
204
+ baseClassName,
205
+ maybePostfixModifierPosition
206
+ };
207
+ };
208
+ if (prefix) {
209
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
210
+ const parseClassNameOriginal = parseClassName;
211
+ parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.substring(fullPrefix.length)) : {
212
+ isExternal: true,
213
+ modifiers: [],
214
+ hasImportantModifier: false,
215
+ baseClassName: className,
216
+ maybePostfixModifierPosition: undefined
217
+ };
218
+ }
219
+ if (experimentalParseClassName) {
220
+ const parseClassNameOriginal = parseClassName;
221
+ parseClassName = className => experimentalParseClassName({
222
+ className,
223
+ parseClassName: parseClassNameOriginal
224
+ });
225
+ }
226
+ return parseClassName;
227
+ };
228
+ const stripImportantModifier = baseClassName => {
229
+ if (baseClassName.endsWith(IMPORTANT_MODIFIER)) {
230
+ return baseClassName.substring(0, baseClassName.length - 1);
231
+ }
232
+ /**
233
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
234
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
235
+ */
236
+ if (baseClassName.startsWith(IMPORTANT_MODIFIER)) {
237
+ return baseClassName.substring(1);
238
+ }
239
+ return baseClassName;
240
+ };
241
+
242
+ /**
243
+ * Sorts modifiers according to following schema:
244
+ * - Predefined modifiers are sorted alphabetically
245
+ * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it
246
+ */
247
+ const createSortModifiers = config => {
248
+ const orderSensitiveModifiers = Object.fromEntries(config.orderSensitiveModifiers.map(modifier => [modifier, true]));
249
+ const sortModifiers = modifiers => {
250
+ if (modifiers.length <= 1) {
251
+ return modifiers;
252
+ }
253
+ const sortedModifiers = [];
254
+ let unsortedModifiers = [];
255
+ modifiers.forEach(modifier => {
256
+ const isPositionSensitive = modifier[0] === '[' || orderSensitiveModifiers[modifier];
257
+ if (isPositionSensitive) {
258
+ sortedModifiers.push(...unsortedModifiers.sort(), modifier);
259
+ unsortedModifiers = [];
260
+ } else {
261
+ unsortedModifiers.push(modifier);
262
+ }
263
+ });
264
+ sortedModifiers.push(...unsortedModifiers.sort());
265
+ return sortedModifiers;
266
+ };
267
+ return sortModifiers;
268
+ };
269
+ const createConfigUtils = config => ({
270
+ cache: createLruCache(config.cacheSize),
271
+ parseClassName: createParseClassName(config),
272
+ sortModifiers: createSortModifiers(config),
273
+ ...createClassGroupUtils(config)
274
+ });
275
+ const SPLIT_CLASSES_REGEX = /\s+/;
276
+ const mergeClassList = (classList, configUtils) => {
277
+ const {
278
+ parseClassName,
279
+ getClassGroupId,
280
+ getConflictingClassGroupIds,
281
+ sortModifiers
282
+ } = configUtils;
283
+ /**
284
+ * Set of classGroupIds in following format:
285
+ * `{importantModifier}{variantModifiers}{classGroupId}`
286
+ * @example 'float'
287
+ * @example 'hover:focus:bg-color'
288
+ * @example 'md:!pr'
289
+ */
290
+ const classGroupsInConflict = [];
291
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
292
+ let result = '';
293
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
294
+ const originalClassName = classNames[index];
295
+ const {
296
+ isExternal,
297
+ modifiers,
298
+ hasImportantModifier,
299
+ baseClassName,
300
+ maybePostfixModifierPosition
301
+ } = parseClassName(originalClassName);
302
+ if (isExternal) {
303
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
304
+ continue;
305
+ }
306
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
307
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
308
+ if (!classGroupId) {
309
+ if (!hasPostfixModifier) {
310
+ // Not a Tailwind class
311
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
312
+ continue;
313
+ }
314
+ classGroupId = getClassGroupId(baseClassName);
315
+ if (!classGroupId) {
316
+ // Not a Tailwind class
317
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
318
+ continue;
319
+ }
320
+ hasPostfixModifier = false;
321
+ }
322
+ const variantModifier = sortModifiers(modifiers).join(':');
323
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
324
+ const classId = modifierId + classGroupId;
325
+ if (classGroupsInConflict.includes(classId)) {
326
+ // Tailwind class omitted due to conflict
327
+ continue;
328
+ }
329
+ classGroupsInConflict.push(classId);
330
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
331
+ for (let i = 0; i < conflictGroups.length; ++i) {
332
+ const group = conflictGroups[i];
333
+ classGroupsInConflict.push(modifierId + group);
334
+ }
335
+ // Tailwind class not in conflict
336
+ result = originalClassName + (result.length > 0 ? ' ' + result : result);
337
+ }
338
+ return result;
339
+ };
340
+
341
+ /**
342
+ * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.
343
+ *
344
+ * Specifically:
345
+ * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js
346
+ * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts
347
+ *
348
+ * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)
349
+ */
350
+ function twJoin() {
351
+ let index = 0;
352
+ let argument;
353
+ let resolvedValue;
354
+ let string = '';
355
+ while (index < arguments.length) {
356
+ if (argument = arguments[index++]) {
357
+ if (resolvedValue = toValue(argument)) {
358
+ string && (string += ' ');
359
+ string += resolvedValue;
360
+ }
361
+ }
362
+ }
363
+ return string;
364
+ }
365
+ const toValue = mix => {
366
+ if (typeof mix === 'string') {
367
+ return mix;
368
+ }
369
+ let resolvedValue;
370
+ let string = '';
371
+ for (let k = 0; k < mix.length; k++) {
372
+ if (mix[k]) {
373
+ if (resolvedValue = toValue(mix[k])) {
374
+ string && (string += ' ');
375
+ string += resolvedValue;
376
+ }
377
+ }
378
+ }
379
+ return string;
380
+ };
381
+ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
382
+ let configUtils;
383
+ let cacheGet;
384
+ let cacheSet;
385
+ let functionToCall = initTailwindMerge;
386
+ function initTailwindMerge(classList) {
387
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
388
+ configUtils = createConfigUtils(config);
389
+ cacheGet = configUtils.cache.get;
390
+ cacheSet = configUtils.cache.set;
391
+ functionToCall = tailwindMerge;
392
+ return tailwindMerge(classList);
393
+ }
394
+ function tailwindMerge(classList) {
395
+ const cachedResult = cacheGet(classList);
396
+ if (cachedResult) {
397
+ return cachedResult;
398
+ }
399
+ const result = mergeClassList(classList, configUtils);
400
+ cacheSet(classList, result);
401
+ return result;
402
+ }
403
+ return function callTailwindMerge() {
404
+ return functionToCall(twJoin.apply(null, arguments));
405
+ };
406
+ }
407
+ const fromTheme = key => {
408
+ const themeGetter = theme => theme[key] || [];
409
+ themeGetter.isThemeGetter = true;
410
+ return themeGetter;
411
+ };
412
+ const arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
413
+ const arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
414
+ const fractionRegex = /^\d+\/\d+$/;
415
+ const tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
416
+ const lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
417
+ const colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/;
418
+ // Shadow always begins with x and y offset separated by underscore optionally prepended by inset
419
+ const shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
420
+ const imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
421
+ const isFraction = value => fractionRegex.test(value);
422
+ const isNumber = value => Boolean(value) && !Number.isNaN(Number(value));
423
+ const isInteger = value => Boolean(value) && Number.isInteger(Number(value));
424
+ const isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));
425
+ const isTshirtSize = value => tshirtUnitRegex.test(value);
426
+ const isAny = () => true;
427
+ const isLengthOnly = value =>
428
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
429
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
430
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
431
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value);
432
+ const isNever = () => false;
433
+ const isShadow = value => shadowRegex.test(value);
434
+ const isImage = value => imageRegex.test(value);
435
+ const isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);
436
+ const isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);
437
+ const isArbitraryValue = value => arbitraryValueRegex.test(value);
438
+ const isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
439
+ const isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);
440
+ const isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);
441
+ const isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);
442
+ const isArbitraryShadow = value => getIsArbitraryValue(value, isNever, isShadow);
443
+ const isArbitraryVariable = value => arbitraryVariableRegex.test(value);
444
+ const isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);
445
+ const isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);
446
+ const isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);
447
+ const isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);
448
+ const isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);
449
+ const isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);
450
+ // Helpers
451
+ const getIsArbitraryValue = (value, testLabel, testValue) => {
452
+ const result = arbitraryValueRegex.exec(value);
453
+ if (result) {
454
+ if (result[1]) {
455
+ return testLabel(result[1]);
456
+ }
457
+ return testValue(result[2]);
458
+ }
459
+ return false;
460
+ };
461
+ const getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
462
+ const result = arbitraryVariableRegex.exec(value);
463
+ if (result) {
464
+ if (result[1]) {
465
+ return testLabel(result[1]);
466
+ }
467
+ return shouldMatchNoLabel;
468
+ }
469
+ return false;
470
+ };
471
+ // Labels
472
+ const isLabelPosition = label => label === 'position';
473
+ const imageLabels = /*#__PURE__*/new Set(['image', 'url']);
474
+ const isLabelImage = label => imageLabels.has(label);
475
+ const sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);
476
+ const isLabelSize = label => sizeLabels.has(label);
477
+ const isLabelLength = label => label === 'length';
478
+ const isLabelNumber = label => label === 'number';
479
+ const isLabelFamilyName = label => label === 'family-name';
480
+ const isLabelShadow = label => label === 'shadow';
481
+ const getDefaultConfig = () => {
482
+ /**
483
+ * Theme getters for theme variable namespaces
484
+ * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces
485
+ */
486
+ /***/
487
+ const themeColor = fromTheme('color');
488
+ const themeFont = fromTheme('font');
489
+ const themeText = fromTheme('text');
490
+ const themeFontWeight = fromTheme('font-weight');
491
+ const themeTracking = fromTheme('tracking');
492
+ const themeLeading = fromTheme('leading');
493
+ const themeBreakpoint = fromTheme('breakpoint');
494
+ const themeContainer = fromTheme('container');
495
+ const themeSpacing = fromTheme('spacing');
496
+ const themeRadius = fromTheme('radius');
497
+ const themeShadow = fromTheme('shadow');
498
+ const themeInsetShadow = fromTheme('inset-shadow');
499
+ const themeDropShadow = fromTheme('drop-shadow');
500
+ const themeBlur = fromTheme('blur');
501
+ const themePerspective = fromTheme('perspective');
502
+ const themeAspect = fromTheme('aspect');
503
+ const themeEase = fromTheme('ease');
504
+ const themeAnimate = fromTheme('animate');
505
+ /**
506
+ * Helpers to avoid repeating the same scales
507
+ *
508
+ * We use functions that create a new array every time they're called instead of static arrays.
509
+ * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.
510
+ */
511
+ /***/
512
+ const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];
513
+ const scalePosition = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];
514
+ const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];
515
+ const scaleOverscroll = () => ['auto', 'contain', 'none'];
516
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
517
+ const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];
518
+ const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];
519
+ const scaleGridColRowStartAndEnd = () => ['auto', {
520
+ span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]
521
+ }, isArbitraryVariable, isArbitraryValue];
522
+ const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];
523
+ const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];
524
+ const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline'];
525
+ const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch'];
526
+ const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];
527
+ const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];
528
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
529
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryLength];
530
+ const scaleRadius = () => [
531
+ // Deprecated since Tailwind CSS v4.0.0
532
+ '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];
533
+ const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];
534
+ const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];
535
+ const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];
536
+ const scaleBlur = () => [
537
+ // Deprecated since Tailwind CSS v4.0.0
538
+ '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];
539
+ const scaleOrigin = () => ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryVariable, isArbitraryValue];
540
+ const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
541
+ const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];
542
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
543
+ const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];
544
+ return {
545
+ cacheSize: 500,
546
+ theme: {
547
+ animate: ['spin', 'ping', 'pulse', 'bounce'],
548
+ aspect: ['video'],
549
+ blur: [isTshirtSize],
550
+ breakpoint: [isTshirtSize],
551
+ color: [isAny],
552
+ container: [isTshirtSize],
553
+ 'drop-shadow': [isTshirtSize],
554
+ ease: ['in', 'out', 'in-out'],
555
+ font: [isAnyNonArbitrary],
556
+ 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],
557
+ 'inset-shadow': [isTshirtSize],
558
+ leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],
559
+ perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],
560
+ radius: [isTshirtSize],
561
+ shadow: [isTshirtSize],
562
+ spacing: ['px', isNumber],
563
+ text: [isTshirtSize],
564
+ tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']
565
+ },
566
+ classGroups: {
567
+ // --------------
568
+ // --- Layout ---
569
+ // --------------
570
+ /**
571
+ * Aspect Ratio
572
+ * @see https://tailwindcss.com/docs/aspect-ratio
573
+ */
574
+ aspect: [{
575
+ aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
576
+ }],
577
+ /**
578
+ * Container
579
+ * @see https://tailwindcss.com/docs/container
580
+ * @deprecated since Tailwind CSS v4.0.0
581
+ */
582
+ container: ['container'],
583
+ /**
584
+ * Columns
585
+ * @see https://tailwindcss.com/docs/columns
586
+ */
587
+ columns: [{
588
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
589
+ }],
590
+ /**
591
+ * Break After
592
+ * @see https://tailwindcss.com/docs/break-after
593
+ */
594
+ 'break-after': [{
595
+ 'break-after': scaleBreak()
596
+ }],
597
+ /**
598
+ * Break Before
599
+ * @see https://tailwindcss.com/docs/break-before
600
+ */
601
+ 'break-before': [{
602
+ 'break-before': scaleBreak()
603
+ }],
604
+ /**
605
+ * Break Inside
606
+ * @see https://tailwindcss.com/docs/break-inside
607
+ */
608
+ 'break-inside': [{
609
+ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']
610
+ }],
611
+ /**
612
+ * Box Decoration Break
613
+ * @see https://tailwindcss.com/docs/box-decoration-break
614
+ */
615
+ 'box-decoration': [{
616
+ 'box-decoration': ['slice', 'clone']
617
+ }],
618
+ /**
619
+ * Box Sizing
620
+ * @see https://tailwindcss.com/docs/box-sizing
621
+ */
622
+ box: [{
623
+ box: ['border', 'content']
624
+ }],
625
+ /**
626
+ * Display
627
+ * @see https://tailwindcss.com/docs/display
628
+ */
629
+ 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'],
630
+ /**
631
+ * Screen Reader Only
632
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
633
+ */
634
+ sr: ['sr-only', 'not-sr-only'],
635
+ /**
636
+ * Floats
637
+ * @see https://tailwindcss.com/docs/float
638
+ */
639
+ float: [{
640
+ float: ['right', 'left', 'none', 'start', 'end']
641
+ }],
642
+ /**
643
+ * Clear
644
+ * @see https://tailwindcss.com/docs/clear
645
+ */
646
+ clear: [{
647
+ clear: ['left', 'right', 'both', 'none', 'start', 'end']
648
+ }],
649
+ /**
650
+ * Isolation
651
+ * @see https://tailwindcss.com/docs/isolation
652
+ */
653
+ isolation: ['isolate', 'isolation-auto'],
654
+ /**
655
+ * Object Fit
656
+ * @see https://tailwindcss.com/docs/object-fit
657
+ */
658
+ 'object-fit': [{
659
+ object: ['contain', 'cover', 'fill', 'none', 'scale-down']
660
+ }],
661
+ /**
662
+ * Object Position
663
+ * @see https://tailwindcss.com/docs/object-position
664
+ */
665
+ 'object-position': [{
666
+ object: [...scalePosition(), isArbitraryValue, isArbitraryVariable]
667
+ }],
668
+ /**
669
+ * Overflow
670
+ * @see https://tailwindcss.com/docs/overflow
671
+ */
672
+ overflow: [{
673
+ overflow: scaleOverflow()
674
+ }],
675
+ /**
676
+ * Overflow X
677
+ * @see https://tailwindcss.com/docs/overflow
678
+ */
679
+ 'overflow-x': [{
680
+ 'overflow-x': scaleOverflow()
681
+ }],
682
+ /**
683
+ * Overflow Y
684
+ * @see https://tailwindcss.com/docs/overflow
685
+ */
686
+ 'overflow-y': [{
687
+ 'overflow-y': scaleOverflow()
688
+ }],
689
+ /**
690
+ * Overscroll Behavior
691
+ * @see https://tailwindcss.com/docs/overscroll-behavior
692
+ */
693
+ overscroll: [{
694
+ overscroll: scaleOverscroll()
695
+ }],
696
+ /**
697
+ * Overscroll Behavior X
698
+ * @see https://tailwindcss.com/docs/overscroll-behavior
699
+ */
700
+ 'overscroll-x': [{
701
+ 'overscroll-x': scaleOverscroll()
702
+ }],
703
+ /**
704
+ * Overscroll Behavior Y
705
+ * @see https://tailwindcss.com/docs/overscroll-behavior
706
+ */
707
+ 'overscroll-y': [{
708
+ 'overscroll-y': scaleOverscroll()
709
+ }],
710
+ /**
711
+ * Position
712
+ * @see https://tailwindcss.com/docs/position
713
+ */
714
+ position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],
715
+ /**
716
+ * Top / Right / Bottom / Left
717
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
718
+ */
719
+ inset: [{
720
+ inset: scaleInset()
721
+ }],
722
+ /**
723
+ * Right / Left
724
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
725
+ */
726
+ 'inset-x': [{
727
+ 'inset-x': scaleInset()
728
+ }],
729
+ /**
730
+ * Top / Bottom
731
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
732
+ */
733
+ 'inset-y': [{
734
+ 'inset-y': scaleInset()
735
+ }],
736
+ /**
737
+ * Start
738
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
739
+ */
740
+ start: [{
741
+ start: scaleInset()
742
+ }],
743
+ /**
744
+ * End
745
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
746
+ */
747
+ end: [{
748
+ end: scaleInset()
749
+ }],
750
+ /**
751
+ * Top
752
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
753
+ */
754
+ top: [{
755
+ top: scaleInset()
756
+ }],
757
+ /**
758
+ * Right
759
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
760
+ */
761
+ right: [{
762
+ right: scaleInset()
763
+ }],
764
+ /**
765
+ * Bottom
766
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
767
+ */
768
+ bottom: [{
769
+ bottom: scaleInset()
770
+ }],
771
+ /**
772
+ * Left
773
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
774
+ */
775
+ left: [{
776
+ left: scaleInset()
777
+ }],
778
+ /**
779
+ * Visibility
780
+ * @see https://tailwindcss.com/docs/visibility
781
+ */
782
+ visibility: ['visible', 'invisible', 'collapse'],
783
+ /**
784
+ * Z-Index
785
+ * @see https://tailwindcss.com/docs/z-index
786
+ */
787
+ z: [{
788
+ z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]
789
+ }],
790
+ // ------------------------
791
+ // --- Flexbox and Grid ---
792
+ // ------------------------
793
+ /**
794
+ * Flex Basis
795
+ * @see https://tailwindcss.com/docs/flex-basis
796
+ */
797
+ basis: [{
798
+ basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]
799
+ }],
800
+ /**
801
+ * Flex Direction
802
+ * @see https://tailwindcss.com/docs/flex-direction
803
+ */
804
+ 'flex-direction': [{
805
+ flex: ['row', 'row-reverse', 'col', 'col-reverse']
806
+ }],
807
+ /**
808
+ * Flex Wrap
809
+ * @see https://tailwindcss.com/docs/flex-wrap
810
+ */
811
+ 'flex-wrap': [{
812
+ flex: ['nowrap', 'wrap', 'wrap-reverse']
813
+ }],
814
+ /**
815
+ * Flex
816
+ * @see https://tailwindcss.com/docs/flex
817
+ */
818
+ flex: [{
819
+ flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]
820
+ }],
821
+ /**
822
+ * Flex Grow
823
+ * @see https://tailwindcss.com/docs/flex-grow
824
+ */
825
+ grow: [{
826
+ grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]
827
+ }],
828
+ /**
829
+ * Flex Shrink
830
+ * @see https://tailwindcss.com/docs/flex-shrink
831
+ */
832
+ shrink: [{
833
+ shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]
834
+ }],
835
+ /**
836
+ * Order
837
+ * @see https://tailwindcss.com/docs/order
838
+ */
839
+ order: [{
840
+ order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]
841
+ }],
842
+ /**
843
+ * Grid Template Columns
844
+ * @see https://tailwindcss.com/docs/grid-template-columns
845
+ */
846
+ 'grid-cols': [{
847
+ 'grid-cols': scaleGridTemplateColsRows()
848
+ }],
849
+ /**
850
+ * Grid Column Start / End
851
+ * @see https://tailwindcss.com/docs/grid-column
852
+ */
853
+ 'col-start-end': [{
854
+ col: scaleGridColRowStartAndEnd()
855
+ }],
856
+ /**
857
+ * Grid Column Start
858
+ * @see https://tailwindcss.com/docs/grid-column
859
+ */
860
+ 'col-start': [{
861
+ 'col-start': scaleGridColRowStartOrEnd()
862
+ }],
863
+ /**
864
+ * Grid Column End
865
+ * @see https://tailwindcss.com/docs/grid-column
866
+ */
867
+ 'col-end': [{
868
+ 'col-end': scaleGridColRowStartOrEnd()
869
+ }],
870
+ /**
871
+ * Grid Template Rows
872
+ * @see https://tailwindcss.com/docs/grid-template-rows
873
+ */
874
+ 'grid-rows': [{
875
+ 'grid-rows': scaleGridTemplateColsRows()
876
+ }],
877
+ /**
878
+ * Grid Row Start / End
879
+ * @see https://tailwindcss.com/docs/grid-row
880
+ */
881
+ 'row-start-end': [{
882
+ row: scaleGridColRowStartAndEnd()
883
+ }],
884
+ /**
885
+ * Grid Row Start
886
+ * @see https://tailwindcss.com/docs/grid-row
887
+ */
888
+ 'row-start': [{
889
+ 'row-start': scaleGridColRowStartOrEnd()
890
+ }],
891
+ /**
892
+ * Grid Row End
893
+ * @see https://tailwindcss.com/docs/grid-row
894
+ */
895
+ 'row-end': [{
896
+ 'row-end': scaleGridColRowStartOrEnd()
897
+ }],
898
+ /**
899
+ * Grid Auto Flow
900
+ * @see https://tailwindcss.com/docs/grid-auto-flow
901
+ */
902
+ 'grid-flow': [{
903
+ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']
904
+ }],
905
+ /**
906
+ * Grid Auto Columns
907
+ * @see https://tailwindcss.com/docs/grid-auto-columns
908
+ */
909
+ 'auto-cols': [{
910
+ 'auto-cols': scaleGridAutoColsRows()
911
+ }],
912
+ /**
913
+ * Grid Auto Rows
914
+ * @see https://tailwindcss.com/docs/grid-auto-rows
915
+ */
916
+ 'auto-rows': [{
917
+ 'auto-rows': scaleGridAutoColsRows()
918
+ }],
919
+ /**
920
+ * Gap
921
+ * @see https://tailwindcss.com/docs/gap
922
+ */
923
+ gap: [{
924
+ gap: scaleUnambiguousSpacing()
925
+ }],
926
+ /**
927
+ * Gap X
928
+ * @see https://tailwindcss.com/docs/gap
929
+ */
930
+ 'gap-x': [{
931
+ 'gap-x': scaleUnambiguousSpacing()
932
+ }],
933
+ /**
934
+ * Gap Y
935
+ * @see https://tailwindcss.com/docs/gap
936
+ */
937
+ 'gap-y': [{
938
+ 'gap-y': scaleUnambiguousSpacing()
939
+ }],
940
+ /**
941
+ * Justify Content
942
+ * @see https://tailwindcss.com/docs/justify-content
943
+ */
944
+ 'justify-content': [{
945
+ justify: [...scaleAlignPrimaryAxis(), 'normal']
946
+ }],
947
+ /**
948
+ * Justify Items
949
+ * @see https://tailwindcss.com/docs/justify-items
950
+ */
951
+ 'justify-items': [{
952
+ 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']
953
+ }],
954
+ /**
955
+ * Justify Self
956
+ * @see https://tailwindcss.com/docs/justify-self
957
+ */
958
+ 'justify-self': [{
959
+ 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]
960
+ }],
961
+ /**
962
+ * Align Content
963
+ * @see https://tailwindcss.com/docs/align-content
964
+ */
965
+ 'align-content': [{
966
+ content: ['normal', ...scaleAlignPrimaryAxis()]
967
+ }],
968
+ /**
969
+ * Align Items
970
+ * @see https://tailwindcss.com/docs/align-items
971
+ */
972
+ 'align-items': [{
973
+ items: [...scaleAlignSecondaryAxis(), 'baseline']
974
+ }],
975
+ /**
976
+ * Align Self
977
+ * @see https://tailwindcss.com/docs/align-self
978
+ */
979
+ 'align-self': [{
980
+ self: ['auto', ...scaleAlignSecondaryAxis(), 'baseline']
981
+ }],
982
+ /**
983
+ * Place Content
984
+ * @see https://tailwindcss.com/docs/place-content
985
+ */
986
+ 'place-content': [{
987
+ 'place-content': scaleAlignPrimaryAxis()
988
+ }],
989
+ /**
990
+ * Place Items
991
+ * @see https://tailwindcss.com/docs/place-items
992
+ */
993
+ 'place-items': [{
994
+ 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']
995
+ }],
996
+ /**
997
+ * Place Self
998
+ * @see https://tailwindcss.com/docs/place-self
999
+ */
1000
+ 'place-self': [{
1001
+ 'place-self': ['auto', ...scaleAlignSecondaryAxis()]
1002
+ }],
1003
+ // Spacing
1004
+ /**
1005
+ * Padding
1006
+ * @see https://tailwindcss.com/docs/padding
1007
+ */
1008
+ p: [{
1009
+ p: scaleUnambiguousSpacing()
1010
+ }],
1011
+ /**
1012
+ * Padding X
1013
+ * @see https://tailwindcss.com/docs/padding
1014
+ */
1015
+ px: [{
1016
+ px: scaleUnambiguousSpacing()
1017
+ }],
1018
+ /**
1019
+ * Padding Y
1020
+ * @see https://tailwindcss.com/docs/padding
1021
+ */
1022
+ py: [{
1023
+ py: scaleUnambiguousSpacing()
1024
+ }],
1025
+ /**
1026
+ * Padding Start
1027
+ * @see https://tailwindcss.com/docs/padding
1028
+ */
1029
+ ps: [{
1030
+ ps: scaleUnambiguousSpacing()
1031
+ }],
1032
+ /**
1033
+ * Padding End
1034
+ * @see https://tailwindcss.com/docs/padding
1035
+ */
1036
+ pe: [{
1037
+ pe: scaleUnambiguousSpacing()
1038
+ }],
1039
+ /**
1040
+ * Padding Top
1041
+ * @see https://tailwindcss.com/docs/padding
1042
+ */
1043
+ pt: [{
1044
+ pt: scaleUnambiguousSpacing()
1045
+ }],
1046
+ /**
1047
+ * Padding Right
1048
+ * @see https://tailwindcss.com/docs/padding
1049
+ */
1050
+ pr: [{
1051
+ pr: scaleUnambiguousSpacing()
1052
+ }],
1053
+ /**
1054
+ * Padding Bottom
1055
+ * @see https://tailwindcss.com/docs/padding
1056
+ */
1057
+ pb: [{
1058
+ pb: scaleUnambiguousSpacing()
1059
+ }],
1060
+ /**
1061
+ * Padding Left
1062
+ * @see https://tailwindcss.com/docs/padding
1063
+ */
1064
+ pl: [{
1065
+ pl: scaleUnambiguousSpacing()
1066
+ }],
1067
+ /**
1068
+ * Margin
1069
+ * @see https://tailwindcss.com/docs/margin
1070
+ */
1071
+ m: [{
1072
+ m: scaleMargin()
1073
+ }],
1074
+ /**
1075
+ * Margin X
1076
+ * @see https://tailwindcss.com/docs/margin
1077
+ */
1078
+ mx: [{
1079
+ mx: scaleMargin()
1080
+ }],
1081
+ /**
1082
+ * Margin Y
1083
+ * @see https://tailwindcss.com/docs/margin
1084
+ */
1085
+ my: [{
1086
+ my: scaleMargin()
1087
+ }],
1088
+ /**
1089
+ * Margin Start
1090
+ * @see https://tailwindcss.com/docs/margin
1091
+ */
1092
+ ms: [{
1093
+ ms: scaleMargin()
1094
+ }],
1095
+ /**
1096
+ * Margin End
1097
+ * @see https://tailwindcss.com/docs/margin
1098
+ */
1099
+ me: [{
1100
+ me: scaleMargin()
1101
+ }],
1102
+ /**
1103
+ * Margin Top
1104
+ * @see https://tailwindcss.com/docs/margin
1105
+ */
1106
+ mt: [{
1107
+ mt: scaleMargin()
1108
+ }],
1109
+ /**
1110
+ * Margin Right
1111
+ * @see https://tailwindcss.com/docs/margin
1112
+ */
1113
+ mr: [{
1114
+ mr: scaleMargin()
1115
+ }],
1116
+ /**
1117
+ * Margin Bottom
1118
+ * @see https://tailwindcss.com/docs/margin
1119
+ */
1120
+ mb: [{
1121
+ mb: scaleMargin()
1122
+ }],
1123
+ /**
1124
+ * Margin Left
1125
+ * @see https://tailwindcss.com/docs/margin
1126
+ */
1127
+ ml: [{
1128
+ ml: scaleMargin()
1129
+ }],
1130
+ /**
1131
+ * Space Between X
1132
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1133
+ */
1134
+ 'space-x': [{
1135
+ 'space-x': scaleUnambiguousSpacing()
1136
+ }],
1137
+ /**
1138
+ * Space Between X Reverse
1139
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1140
+ */
1141
+ 'space-x-reverse': ['space-x-reverse'],
1142
+ /**
1143
+ * Space Between Y
1144
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1145
+ */
1146
+ 'space-y': [{
1147
+ 'space-y': scaleUnambiguousSpacing()
1148
+ }],
1149
+ /**
1150
+ * Space Between Y Reverse
1151
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1152
+ */
1153
+ 'space-y-reverse': ['space-y-reverse'],
1154
+ // --------------
1155
+ // --- Sizing ---
1156
+ // --------------
1157
+ /**
1158
+ * Size
1159
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1160
+ */
1161
+ size: [{
1162
+ size: scaleSizing()
1163
+ }],
1164
+ /**
1165
+ * Width
1166
+ * @see https://tailwindcss.com/docs/width
1167
+ */
1168
+ w: [{
1169
+ w: [themeContainer, 'screen', ...scaleSizing()]
1170
+ }],
1171
+ /**
1172
+ * Min-Width
1173
+ * @see https://tailwindcss.com/docs/min-width
1174
+ */
1175
+ 'min-w': [{
1176
+ 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1177
+ 'none', ...scaleSizing()]
1178
+ }],
1179
+ /**
1180
+ * Max-Width
1181
+ * @see https://tailwindcss.com/docs/max-width
1182
+ */
1183
+ 'max-w': [{
1184
+ 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1185
+ 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1186
+ {
1187
+ screen: [themeBreakpoint]
1188
+ }, ...scaleSizing()]
1189
+ }],
1190
+ /**
1191
+ * Height
1192
+ * @see https://tailwindcss.com/docs/height
1193
+ */
1194
+ h: [{
1195
+ h: ['screen', ...scaleSizing()]
1196
+ }],
1197
+ /**
1198
+ * Min-Height
1199
+ * @see https://tailwindcss.com/docs/min-height
1200
+ */
1201
+ 'min-h': [{
1202
+ 'min-h': ['screen', 'none', ...scaleSizing()]
1203
+ }],
1204
+ /**
1205
+ * Max-Height
1206
+ * @see https://tailwindcss.com/docs/max-height
1207
+ */
1208
+ 'max-h': [{
1209
+ 'max-h': ['screen', ...scaleSizing()]
1210
+ }],
1211
+ // ------------------
1212
+ // --- Typography ---
1213
+ // ------------------
1214
+ /**
1215
+ * Font Size
1216
+ * @see https://tailwindcss.com/docs/font-size
1217
+ */
1218
+ 'font-size': [{
1219
+ text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]
1220
+ }],
1221
+ /**
1222
+ * Font Smoothing
1223
+ * @see https://tailwindcss.com/docs/font-smoothing
1224
+ */
1225
+ 'font-smoothing': ['antialiased', 'subpixel-antialiased'],
1226
+ /**
1227
+ * Font Style
1228
+ * @see https://tailwindcss.com/docs/font-style
1229
+ */
1230
+ 'font-style': ['italic', 'not-italic'],
1231
+ /**
1232
+ * Font Weight
1233
+ * @see https://tailwindcss.com/docs/font-weight
1234
+ */
1235
+ 'font-weight': [{
1236
+ font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]
1237
+ }],
1238
+ /**
1239
+ * Font Stretch
1240
+ * @see https://tailwindcss.com/docs/font-stretch
1241
+ */
1242
+ 'font-stretch': [{
1243
+ 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]
1244
+ }],
1245
+ /**
1246
+ * Font Family
1247
+ * @see https://tailwindcss.com/docs/font-family
1248
+ */
1249
+ 'font-family': [{
1250
+ font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]
1251
+ }],
1252
+ /**
1253
+ * Font Variant Numeric
1254
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1255
+ */
1256
+ 'fvn-normal': ['normal-nums'],
1257
+ /**
1258
+ * Font Variant Numeric
1259
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1260
+ */
1261
+ 'fvn-ordinal': ['ordinal'],
1262
+ /**
1263
+ * Font Variant Numeric
1264
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1265
+ */
1266
+ 'fvn-slashed-zero': ['slashed-zero'],
1267
+ /**
1268
+ * Font Variant Numeric
1269
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1270
+ */
1271
+ 'fvn-figure': ['lining-nums', 'oldstyle-nums'],
1272
+ /**
1273
+ * Font Variant Numeric
1274
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1275
+ */
1276
+ 'fvn-spacing': ['proportional-nums', 'tabular-nums'],
1277
+ /**
1278
+ * Font Variant Numeric
1279
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1280
+ */
1281
+ 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],
1282
+ /**
1283
+ * Letter Spacing
1284
+ * @see https://tailwindcss.com/docs/letter-spacing
1285
+ */
1286
+ tracking: [{
1287
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1288
+ }],
1289
+ /**
1290
+ * Line Clamp
1291
+ * @see https://tailwindcss.com/docs/line-clamp
1292
+ */
1293
+ 'line-clamp': [{
1294
+ 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]
1295
+ }],
1296
+ /**
1297
+ * Line Height
1298
+ * @see https://tailwindcss.com/docs/line-height
1299
+ */
1300
+ leading: [{
1301
+ leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1302
+ themeLeading, ...scaleUnambiguousSpacing()]
1303
+ }],
1304
+ /**
1305
+ * List Style Image
1306
+ * @see https://tailwindcss.com/docs/list-style-image
1307
+ */
1308
+ 'list-image': [{
1309
+ 'list-image': ['none', isArbitraryVariable, isArbitraryValue]
1310
+ }],
1311
+ /**
1312
+ * List Style Position
1313
+ * @see https://tailwindcss.com/docs/list-style-position
1314
+ */
1315
+ 'list-style-position': [{
1316
+ list: ['inside', 'outside']
1317
+ }],
1318
+ /**
1319
+ * List Style Type
1320
+ * @see https://tailwindcss.com/docs/list-style-type
1321
+ */
1322
+ 'list-style-type': [{
1323
+ list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]
1324
+ }],
1325
+ /**
1326
+ * Text Alignment
1327
+ * @see https://tailwindcss.com/docs/text-align
1328
+ */
1329
+ 'text-alignment': [{
1330
+ text: ['left', 'center', 'right', 'justify', 'start', 'end']
1331
+ }],
1332
+ /**
1333
+ * Placeholder Color
1334
+ * @deprecated since Tailwind CSS v3.0.0
1335
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1336
+ */
1337
+ 'placeholder-color': [{
1338
+ placeholder: scaleColor()
1339
+ }],
1340
+ /**
1341
+ * Text Color
1342
+ * @see https://tailwindcss.com/docs/text-color
1343
+ */
1344
+ 'text-color': [{
1345
+ text: scaleColor()
1346
+ }],
1347
+ /**
1348
+ * Text Decoration
1349
+ * @see https://tailwindcss.com/docs/text-decoration
1350
+ */
1351
+ 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],
1352
+ /**
1353
+ * Text Decoration Style
1354
+ * @see https://tailwindcss.com/docs/text-decoration-style
1355
+ */
1356
+ 'text-decoration-style': [{
1357
+ decoration: [...scaleLineStyle(), 'wavy']
1358
+ }],
1359
+ /**
1360
+ * Text Decoration Thickness
1361
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1362
+ */
1363
+ 'text-decoration-thickness': [{
1364
+ decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]
1365
+ }],
1366
+ /**
1367
+ * Text Decoration Color
1368
+ * @see https://tailwindcss.com/docs/text-decoration-color
1369
+ */
1370
+ 'text-decoration-color': [{
1371
+ decoration: scaleColor()
1372
+ }],
1373
+ /**
1374
+ * Text Underline Offset
1375
+ * @see https://tailwindcss.com/docs/text-underline-offset
1376
+ */
1377
+ 'underline-offset': [{
1378
+ 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]
1379
+ }],
1380
+ /**
1381
+ * Text Transform
1382
+ * @see https://tailwindcss.com/docs/text-transform
1383
+ */
1384
+ 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],
1385
+ /**
1386
+ * Text Overflow
1387
+ * @see https://tailwindcss.com/docs/text-overflow
1388
+ */
1389
+ 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],
1390
+ /**
1391
+ * Text Wrap
1392
+ * @see https://tailwindcss.com/docs/text-wrap
1393
+ */
1394
+ 'text-wrap': [{
1395
+ text: ['wrap', 'nowrap', 'balance', 'pretty']
1396
+ }],
1397
+ /**
1398
+ * Text Indent
1399
+ * @see https://tailwindcss.com/docs/text-indent
1400
+ */
1401
+ indent: [{
1402
+ indent: scaleUnambiguousSpacing()
1403
+ }],
1404
+ /**
1405
+ * Vertical Alignment
1406
+ * @see https://tailwindcss.com/docs/vertical-align
1407
+ */
1408
+ 'vertical-align': [{
1409
+ align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]
1410
+ }],
1411
+ /**
1412
+ * Whitespace
1413
+ * @see https://tailwindcss.com/docs/whitespace
1414
+ */
1415
+ whitespace: [{
1416
+ whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']
1417
+ }],
1418
+ /**
1419
+ * Word Break
1420
+ * @see https://tailwindcss.com/docs/word-break
1421
+ */
1422
+ break: [{
1423
+ break: ['normal', 'words', 'all', 'keep']
1424
+ }],
1425
+ /**
1426
+ * Hyphens
1427
+ * @see https://tailwindcss.com/docs/hyphens
1428
+ */
1429
+ hyphens: [{
1430
+ hyphens: ['none', 'manual', 'auto']
1431
+ }],
1432
+ /**
1433
+ * Content
1434
+ * @see https://tailwindcss.com/docs/content
1435
+ */
1436
+ content: [{
1437
+ content: ['none', isArbitraryVariable, isArbitraryValue]
1438
+ }],
1439
+ // -------------------
1440
+ // --- Backgrounds ---
1441
+ // -------------------
1442
+ /**
1443
+ * Background Attachment
1444
+ * @see https://tailwindcss.com/docs/background-attachment
1445
+ */
1446
+ 'bg-attachment': [{
1447
+ bg: ['fixed', 'local', 'scroll']
1448
+ }],
1449
+ /**
1450
+ * Background Clip
1451
+ * @see https://tailwindcss.com/docs/background-clip
1452
+ */
1453
+ 'bg-clip': [{
1454
+ 'bg-clip': ['border', 'padding', 'content', 'text']
1455
+ }],
1456
+ /**
1457
+ * Background Origin
1458
+ * @see https://tailwindcss.com/docs/background-origin
1459
+ */
1460
+ 'bg-origin': [{
1461
+ 'bg-origin': ['border', 'padding', 'content']
1462
+ }],
1463
+ /**
1464
+ * Background Position
1465
+ * @see https://tailwindcss.com/docs/background-position
1466
+ */
1467
+ 'bg-position': [{
1468
+ bg: [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition]
1469
+ }],
1470
+ /**
1471
+ * Background Repeat
1472
+ * @see https://tailwindcss.com/docs/background-repeat
1473
+ */
1474
+ 'bg-repeat': [{
1475
+ bg: ['no-repeat', {
1476
+ repeat: ['', 'x', 'y', 'space', 'round']
1477
+ }]
1478
+ }],
1479
+ /**
1480
+ * Background Size
1481
+ * @see https://tailwindcss.com/docs/background-size
1482
+ */
1483
+ 'bg-size': [{
1484
+ bg: ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize]
1485
+ }],
1486
+ /**
1487
+ * Background Image
1488
+ * @see https://tailwindcss.com/docs/background-image
1489
+ */
1490
+ 'bg-image': [{
1491
+ bg: ['none', {
1492
+ linear: [{
1493
+ to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']
1494
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1495
+ radial: ['', isArbitraryVariable, isArbitraryValue],
1496
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1497
+ }, isArbitraryVariableImage, isArbitraryImage]
1498
+ }],
1499
+ /**
1500
+ * Background Color
1501
+ * @see https://tailwindcss.com/docs/background-color
1502
+ */
1503
+ 'bg-color': [{
1504
+ bg: scaleColor()
1505
+ }],
1506
+ /**
1507
+ * Gradient Color Stops From Position
1508
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1509
+ */
1510
+ 'gradient-from-pos': [{
1511
+ from: scaleGradientStopPosition()
1512
+ }],
1513
+ /**
1514
+ * Gradient Color Stops Via Position
1515
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1516
+ */
1517
+ 'gradient-via-pos': [{
1518
+ via: scaleGradientStopPosition()
1519
+ }],
1520
+ /**
1521
+ * Gradient Color Stops To Position
1522
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1523
+ */
1524
+ 'gradient-to-pos': [{
1525
+ to: scaleGradientStopPosition()
1526
+ }],
1527
+ /**
1528
+ * Gradient Color Stops From
1529
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1530
+ */
1531
+ 'gradient-from': [{
1532
+ from: scaleColor()
1533
+ }],
1534
+ /**
1535
+ * Gradient Color Stops Via
1536
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1537
+ */
1538
+ 'gradient-via': [{
1539
+ via: scaleColor()
1540
+ }],
1541
+ /**
1542
+ * Gradient Color Stops To
1543
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1544
+ */
1545
+ 'gradient-to': [{
1546
+ to: scaleColor()
1547
+ }],
1548
+ // ---------------
1549
+ // --- Borders ---
1550
+ // ---------------
1551
+ /**
1552
+ * Border Radius
1553
+ * @see https://tailwindcss.com/docs/border-radius
1554
+ */
1555
+ rounded: [{
1556
+ rounded: scaleRadius()
1557
+ }],
1558
+ /**
1559
+ * Border Radius Start
1560
+ * @see https://tailwindcss.com/docs/border-radius
1561
+ */
1562
+ 'rounded-s': [{
1563
+ 'rounded-s': scaleRadius()
1564
+ }],
1565
+ /**
1566
+ * Border Radius End
1567
+ * @see https://tailwindcss.com/docs/border-radius
1568
+ */
1569
+ 'rounded-e': [{
1570
+ 'rounded-e': scaleRadius()
1571
+ }],
1572
+ /**
1573
+ * Border Radius Top
1574
+ * @see https://tailwindcss.com/docs/border-radius
1575
+ */
1576
+ 'rounded-t': [{
1577
+ 'rounded-t': scaleRadius()
1578
+ }],
1579
+ /**
1580
+ * Border Radius Right
1581
+ * @see https://tailwindcss.com/docs/border-radius
1582
+ */
1583
+ 'rounded-r': [{
1584
+ 'rounded-r': scaleRadius()
1585
+ }],
1586
+ /**
1587
+ * Border Radius Bottom
1588
+ * @see https://tailwindcss.com/docs/border-radius
1589
+ */
1590
+ 'rounded-b': [{
1591
+ 'rounded-b': scaleRadius()
1592
+ }],
1593
+ /**
1594
+ * Border Radius Left
1595
+ * @see https://tailwindcss.com/docs/border-radius
1596
+ */
1597
+ 'rounded-l': [{
1598
+ 'rounded-l': scaleRadius()
1599
+ }],
1600
+ /**
1601
+ * Border Radius Start Start
1602
+ * @see https://tailwindcss.com/docs/border-radius
1603
+ */
1604
+ 'rounded-ss': [{
1605
+ 'rounded-ss': scaleRadius()
1606
+ }],
1607
+ /**
1608
+ * Border Radius Start End
1609
+ * @see https://tailwindcss.com/docs/border-radius
1610
+ */
1611
+ 'rounded-se': [{
1612
+ 'rounded-se': scaleRadius()
1613
+ }],
1614
+ /**
1615
+ * Border Radius End End
1616
+ * @see https://tailwindcss.com/docs/border-radius
1617
+ */
1618
+ 'rounded-ee': [{
1619
+ 'rounded-ee': scaleRadius()
1620
+ }],
1621
+ /**
1622
+ * Border Radius End Start
1623
+ * @see https://tailwindcss.com/docs/border-radius
1624
+ */
1625
+ 'rounded-es': [{
1626
+ 'rounded-es': scaleRadius()
1627
+ }],
1628
+ /**
1629
+ * Border Radius Top Left
1630
+ * @see https://tailwindcss.com/docs/border-radius
1631
+ */
1632
+ 'rounded-tl': [{
1633
+ 'rounded-tl': scaleRadius()
1634
+ }],
1635
+ /**
1636
+ * Border Radius Top Right
1637
+ * @see https://tailwindcss.com/docs/border-radius
1638
+ */
1639
+ 'rounded-tr': [{
1640
+ 'rounded-tr': scaleRadius()
1641
+ }],
1642
+ /**
1643
+ * Border Radius Bottom Right
1644
+ * @see https://tailwindcss.com/docs/border-radius
1645
+ */
1646
+ 'rounded-br': [{
1647
+ 'rounded-br': scaleRadius()
1648
+ }],
1649
+ /**
1650
+ * Border Radius Bottom Left
1651
+ * @see https://tailwindcss.com/docs/border-radius
1652
+ */
1653
+ 'rounded-bl': [{
1654
+ 'rounded-bl': scaleRadius()
1655
+ }],
1656
+ /**
1657
+ * Border Width
1658
+ * @see https://tailwindcss.com/docs/border-width
1659
+ */
1660
+ 'border-w': [{
1661
+ border: scaleBorderWidth()
1662
+ }],
1663
+ /**
1664
+ * Border Width X
1665
+ * @see https://tailwindcss.com/docs/border-width
1666
+ */
1667
+ 'border-w-x': [{
1668
+ 'border-x': scaleBorderWidth()
1669
+ }],
1670
+ /**
1671
+ * Border Width Y
1672
+ * @see https://tailwindcss.com/docs/border-width
1673
+ */
1674
+ 'border-w-y': [{
1675
+ 'border-y': scaleBorderWidth()
1676
+ }],
1677
+ /**
1678
+ * Border Width Start
1679
+ * @see https://tailwindcss.com/docs/border-width
1680
+ */
1681
+ 'border-w-s': [{
1682
+ 'border-s': scaleBorderWidth()
1683
+ }],
1684
+ /**
1685
+ * Border Width End
1686
+ * @see https://tailwindcss.com/docs/border-width
1687
+ */
1688
+ 'border-w-e': [{
1689
+ 'border-e': scaleBorderWidth()
1690
+ }],
1691
+ /**
1692
+ * Border Width Top
1693
+ * @see https://tailwindcss.com/docs/border-width
1694
+ */
1695
+ 'border-w-t': [{
1696
+ 'border-t': scaleBorderWidth()
1697
+ }],
1698
+ /**
1699
+ * Border Width Right
1700
+ * @see https://tailwindcss.com/docs/border-width
1701
+ */
1702
+ 'border-w-r': [{
1703
+ 'border-r': scaleBorderWidth()
1704
+ }],
1705
+ /**
1706
+ * Border Width Bottom
1707
+ * @see https://tailwindcss.com/docs/border-width
1708
+ */
1709
+ 'border-w-b': [{
1710
+ 'border-b': scaleBorderWidth()
1711
+ }],
1712
+ /**
1713
+ * Border Width Left
1714
+ * @see https://tailwindcss.com/docs/border-width
1715
+ */
1716
+ 'border-w-l': [{
1717
+ 'border-l': scaleBorderWidth()
1718
+ }],
1719
+ /**
1720
+ * Divide Width X
1721
+ * @see https://tailwindcss.com/docs/border-width#between-children
1722
+ */
1723
+ 'divide-x': [{
1724
+ 'divide-x': scaleBorderWidth()
1725
+ }],
1726
+ /**
1727
+ * Divide Width X Reverse
1728
+ * @see https://tailwindcss.com/docs/border-width#between-children
1729
+ */
1730
+ 'divide-x-reverse': ['divide-x-reverse'],
1731
+ /**
1732
+ * Divide Width Y
1733
+ * @see https://tailwindcss.com/docs/border-width#between-children
1734
+ */
1735
+ 'divide-y': [{
1736
+ 'divide-y': scaleBorderWidth()
1737
+ }],
1738
+ /**
1739
+ * Divide Width Y Reverse
1740
+ * @see https://tailwindcss.com/docs/border-width#between-children
1741
+ */
1742
+ 'divide-y-reverse': ['divide-y-reverse'],
1743
+ /**
1744
+ * Border Style
1745
+ * @see https://tailwindcss.com/docs/border-style
1746
+ */
1747
+ 'border-style': [{
1748
+ border: [...scaleLineStyle(), 'hidden', 'none']
1749
+ }],
1750
+ /**
1751
+ * Divide Style
1752
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
1753
+ */
1754
+ 'divide-style': [{
1755
+ divide: [...scaleLineStyle(), 'hidden', 'none']
1756
+ }],
1757
+ /**
1758
+ * Border Color
1759
+ * @see https://tailwindcss.com/docs/border-color
1760
+ */
1761
+ 'border-color': [{
1762
+ border: scaleColor()
1763
+ }],
1764
+ /**
1765
+ * Border Color X
1766
+ * @see https://tailwindcss.com/docs/border-color
1767
+ */
1768
+ 'border-color-x': [{
1769
+ 'border-x': scaleColor()
1770
+ }],
1771
+ /**
1772
+ * Border Color Y
1773
+ * @see https://tailwindcss.com/docs/border-color
1774
+ */
1775
+ 'border-color-y': [{
1776
+ 'border-y': scaleColor()
1777
+ }],
1778
+ /**
1779
+ * Border Color S
1780
+ * @see https://tailwindcss.com/docs/border-color
1781
+ */
1782
+ 'border-color-s': [{
1783
+ 'border-s': scaleColor()
1784
+ }],
1785
+ /**
1786
+ * Border Color E
1787
+ * @see https://tailwindcss.com/docs/border-color
1788
+ */
1789
+ 'border-color-e': [{
1790
+ 'border-e': scaleColor()
1791
+ }],
1792
+ /**
1793
+ * Border Color Top
1794
+ * @see https://tailwindcss.com/docs/border-color
1795
+ */
1796
+ 'border-color-t': [{
1797
+ 'border-t': scaleColor()
1798
+ }],
1799
+ /**
1800
+ * Border Color Right
1801
+ * @see https://tailwindcss.com/docs/border-color
1802
+ */
1803
+ 'border-color-r': [{
1804
+ 'border-r': scaleColor()
1805
+ }],
1806
+ /**
1807
+ * Border Color Bottom
1808
+ * @see https://tailwindcss.com/docs/border-color
1809
+ */
1810
+ 'border-color-b': [{
1811
+ 'border-b': scaleColor()
1812
+ }],
1813
+ /**
1814
+ * Border Color Left
1815
+ * @see https://tailwindcss.com/docs/border-color
1816
+ */
1817
+ 'border-color-l': [{
1818
+ 'border-l': scaleColor()
1819
+ }],
1820
+ /**
1821
+ * Divide Color
1822
+ * @see https://tailwindcss.com/docs/divide-color
1823
+ */
1824
+ 'divide-color': [{
1825
+ divide: scaleColor()
1826
+ }],
1827
+ /**
1828
+ * Outline Style
1829
+ * @see https://tailwindcss.com/docs/outline-style
1830
+ */
1831
+ 'outline-style': [{
1832
+ outline: [...scaleLineStyle(), 'none', 'hidden']
1833
+ }],
1834
+ /**
1835
+ * Outline Offset
1836
+ * @see https://tailwindcss.com/docs/outline-offset
1837
+ */
1838
+ 'outline-offset': [{
1839
+ 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]
1840
+ }],
1841
+ /**
1842
+ * Outline Width
1843
+ * @see https://tailwindcss.com/docs/outline-width
1844
+ */
1845
+ 'outline-w': [{
1846
+ outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]
1847
+ }],
1848
+ /**
1849
+ * Outline Color
1850
+ * @see https://tailwindcss.com/docs/outline-color
1851
+ */
1852
+ 'outline-color': [{
1853
+ outline: [themeColor]
1854
+ }],
1855
+ // ---------------
1856
+ // --- Effects ---
1857
+ // ---------------
1858
+ /**
1859
+ * Box Shadow
1860
+ * @see https://tailwindcss.com/docs/box-shadow
1861
+ */
1862
+ shadow: [{
1863
+ shadow: [
1864
+ // Deprecated since Tailwind CSS v4.0.0
1865
+ '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]
1866
+ }],
1867
+ /**
1868
+ * Box Shadow Color
1869
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
1870
+ */
1871
+ 'shadow-color': [{
1872
+ shadow: scaleColor()
1873
+ }],
1874
+ /**
1875
+ * Inset Box Shadow
1876
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
1877
+ */
1878
+ 'inset-shadow': [{
1879
+ 'inset-shadow': ['none', isArbitraryVariable, isArbitraryValue, themeInsetShadow]
1880
+ }],
1881
+ /**
1882
+ * Inset Box Shadow Color
1883
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
1884
+ */
1885
+ 'inset-shadow-color': [{
1886
+ 'inset-shadow': scaleColor()
1887
+ }],
1888
+ /**
1889
+ * Ring Width
1890
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
1891
+ */
1892
+ 'ring-w': [{
1893
+ ring: scaleBorderWidth()
1894
+ }],
1895
+ /**
1896
+ * Ring Width Inset
1897
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
1898
+ * @deprecated since Tailwind CSS v4.0.0
1899
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
1900
+ */
1901
+ 'ring-w-inset': ['ring-inset'],
1902
+ /**
1903
+ * Ring Color
1904
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
1905
+ */
1906
+ 'ring-color': [{
1907
+ ring: scaleColor()
1908
+ }],
1909
+ /**
1910
+ * Ring Offset Width
1911
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
1912
+ * @deprecated since Tailwind CSS v4.0.0
1913
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
1914
+ */
1915
+ 'ring-offset-w': [{
1916
+ 'ring-offset': [isNumber, isArbitraryLength]
1917
+ }],
1918
+ /**
1919
+ * Ring Offset Color
1920
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
1921
+ * @deprecated since Tailwind CSS v4.0.0
1922
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
1923
+ */
1924
+ 'ring-offset-color': [{
1925
+ 'ring-offset': scaleColor()
1926
+ }],
1927
+ /**
1928
+ * Inset Ring Width
1929
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
1930
+ */
1931
+ 'inset-ring-w': [{
1932
+ 'inset-ring': scaleBorderWidth()
1933
+ }],
1934
+ /**
1935
+ * Inset Ring Color
1936
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
1937
+ */
1938
+ 'inset-ring-color': [{
1939
+ 'inset-ring': scaleColor()
1940
+ }],
1941
+ /**
1942
+ * Opacity
1943
+ * @see https://tailwindcss.com/docs/opacity
1944
+ */
1945
+ opacity: [{
1946
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
1947
+ }],
1948
+ /**
1949
+ * Mix Blend Mode
1950
+ * @see https://tailwindcss.com/docs/mix-blend-mode
1951
+ */
1952
+ 'mix-blend': [{
1953
+ 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']
1954
+ }],
1955
+ /**
1956
+ * Background Blend Mode
1957
+ * @see https://tailwindcss.com/docs/background-blend-mode
1958
+ */
1959
+ 'bg-blend': [{
1960
+ 'bg-blend': scaleBlendMode()
1961
+ }],
1962
+ // ---------------
1963
+ // --- Filters ---
1964
+ // ---------------
1965
+ /**
1966
+ * Filter
1967
+ * @see https://tailwindcss.com/docs/filter
1968
+ */
1969
+ filter: [{
1970
+ filter: [
1971
+ // Deprecated since Tailwind CSS v3.0.0
1972
+ '', 'none', isArbitraryVariable, isArbitraryValue]
1973
+ }],
1974
+ /**
1975
+ * Blur
1976
+ * @see https://tailwindcss.com/docs/blur
1977
+ */
1978
+ blur: [{
1979
+ blur: scaleBlur()
1980
+ }],
1981
+ /**
1982
+ * Brightness
1983
+ * @see https://tailwindcss.com/docs/brightness
1984
+ */
1985
+ brightness: [{
1986
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
1987
+ }],
1988
+ /**
1989
+ * Contrast
1990
+ * @see https://tailwindcss.com/docs/contrast
1991
+ */
1992
+ contrast: [{
1993
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
1994
+ }],
1995
+ /**
1996
+ * Drop Shadow
1997
+ * @see https://tailwindcss.com/docs/drop-shadow
1998
+ */
1999
+ 'drop-shadow': [{
2000
+ 'drop-shadow': [
2001
+ // Deprecated since Tailwind CSS v4.0.0
2002
+ '', 'none', themeDropShadow, isArbitraryVariable, isArbitraryValue]
2003
+ }],
2004
+ /**
2005
+ * Grayscale
2006
+ * @see https://tailwindcss.com/docs/grayscale
2007
+ */
2008
+ grayscale: [{
2009
+ grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2010
+ }],
2011
+ /**
2012
+ * Hue Rotate
2013
+ * @see https://tailwindcss.com/docs/hue-rotate
2014
+ */
2015
+ 'hue-rotate': [{
2016
+ 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2017
+ }],
2018
+ /**
2019
+ * Invert
2020
+ * @see https://tailwindcss.com/docs/invert
2021
+ */
2022
+ invert: [{
2023
+ invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2024
+ }],
2025
+ /**
2026
+ * Saturate
2027
+ * @see https://tailwindcss.com/docs/saturate
2028
+ */
2029
+ saturate: [{
2030
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2031
+ }],
2032
+ /**
2033
+ * Sepia
2034
+ * @see https://tailwindcss.com/docs/sepia
2035
+ */
2036
+ sepia: [{
2037
+ sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]
2038
+ }],
2039
+ /**
2040
+ * Backdrop Filter
2041
+ * @see https://tailwindcss.com/docs/backdrop-filter
2042
+ */
2043
+ 'backdrop-filter': [{
2044
+ 'backdrop-filter': [
2045
+ // Deprecated since Tailwind CSS v3.0.0
2046
+ '', 'none', isArbitraryVariable, isArbitraryValue]
2047
+ }],
2048
+ /**
2049
+ * Backdrop Blur
2050
+ * @see https://tailwindcss.com/docs/backdrop-blur
2051
+ */
2052
+ 'backdrop-blur': [{
2053
+ 'backdrop-blur': scaleBlur()
2054
+ }],
2055
+ /**
2056
+ * Backdrop Brightness
2057
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2058
+ */
2059
+ 'backdrop-brightness': [{
2060
+ 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]
2061
+ }],
2062
+ /**
2063
+ * Backdrop Contrast
2064
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2065
+ */
2066
+ 'backdrop-contrast': [{
2067
+ 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]
2068
+ }],
2069
+ /**
2070
+ * Backdrop Grayscale
2071
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2072
+ */
2073
+ 'backdrop-grayscale': [{
2074
+ 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2075
+ }],
2076
+ /**
2077
+ * Backdrop Hue Rotate
2078
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2079
+ */
2080
+ 'backdrop-hue-rotate': [{
2081
+ 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]
2082
+ }],
2083
+ /**
2084
+ * Backdrop Invert
2085
+ * @see https://tailwindcss.com/docs/backdrop-invert
2086
+ */
2087
+ 'backdrop-invert': [{
2088
+ 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2089
+ }],
2090
+ /**
2091
+ * Backdrop Opacity
2092
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2093
+ */
2094
+ 'backdrop-opacity': [{
2095
+ 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]
2096
+ }],
2097
+ /**
2098
+ * Backdrop Saturate
2099
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2100
+ */
2101
+ 'backdrop-saturate': [{
2102
+ 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]
2103
+ }],
2104
+ /**
2105
+ * Backdrop Sepia
2106
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2107
+ */
2108
+ 'backdrop-sepia': [{
2109
+ 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]
2110
+ }],
2111
+ // --------------
2112
+ // --- Tables ---
2113
+ // --------------
2114
+ /**
2115
+ * Border Collapse
2116
+ * @see https://tailwindcss.com/docs/border-collapse
2117
+ */
2118
+ 'border-collapse': [{
2119
+ border: ['collapse', 'separate']
2120
+ }],
2121
+ /**
2122
+ * Border Spacing
2123
+ * @see https://tailwindcss.com/docs/border-spacing
2124
+ */
2125
+ 'border-spacing': [{
2126
+ 'border-spacing': scaleUnambiguousSpacing()
2127
+ }],
2128
+ /**
2129
+ * Border Spacing X
2130
+ * @see https://tailwindcss.com/docs/border-spacing
2131
+ */
2132
+ 'border-spacing-x': [{
2133
+ 'border-spacing-x': scaleUnambiguousSpacing()
2134
+ }],
2135
+ /**
2136
+ * Border Spacing Y
2137
+ * @see https://tailwindcss.com/docs/border-spacing
2138
+ */
2139
+ 'border-spacing-y': [{
2140
+ 'border-spacing-y': scaleUnambiguousSpacing()
2141
+ }],
2142
+ /**
2143
+ * Table Layout
2144
+ * @see https://tailwindcss.com/docs/table-layout
2145
+ */
2146
+ 'table-layout': [{
2147
+ table: ['auto', 'fixed']
2148
+ }],
2149
+ /**
2150
+ * Caption Side
2151
+ * @see https://tailwindcss.com/docs/caption-side
2152
+ */
2153
+ caption: [{
2154
+ caption: ['top', 'bottom']
2155
+ }],
2156
+ // ---------------------------------
2157
+ // --- Transitions and Animation ---
2158
+ // ---------------------------------
2159
+ /**
2160
+ * Transition Property
2161
+ * @see https://tailwindcss.com/docs/transition-property
2162
+ */
2163
+ transition: [{
2164
+ transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]
2165
+ }],
2166
+ /**
2167
+ * Transition Behavior
2168
+ * @see https://tailwindcss.com/docs/transition-behavior
2169
+ */
2170
+ 'transition-behavior': [{
2171
+ transition: ['normal', 'discrete']
2172
+ }],
2173
+ /**
2174
+ * Transition Duration
2175
+ * @see https://tailwindcss.com/docs/transition-duration
2176
+ */
2177
+ duration: [{
2178
+ duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]
2179
+ }],
2180
+ /**
2181
+ * Transition Timing Function
2182
+ * @see https://tailwindcss.com/docs/transition-timing-function
2183
+ */
2184
+ ease: [{
2185
+ ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]
2186
+ }],
2187
+ /**
2188
+ * Transition Delay
2189
+ * @see https://tailwindcss.com/docs/transition-delay
2190
+ */
2191
+ delay: [{
2192
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2193
+ }],
2194
+ /**
2195
+ * Animation
2196
+ * @see https://tailwindcss.com/docs/animation
2197
+ */
2198
+ animate: [{
2199
+ animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]
2200
+ }],
2201
+ // ------------------
2202
+ // --- Transforms ---
2203
+ // ------------------
2204
+ /**
2205
+ * Backface Visibility
2206
+ * @see https://tailwindcss.com/docs/backface-visibility
2207
+ */
2208
+ backface: [{
2209
+ backface: ['hidden', 'visible']
2210
+ }],
2211
+ /**
2212
+ * Perspective
2213
+ * @see https://tailwindcss.com/docs/perspective
2214
+ */
2215
+ perspective: [{
2216
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2217
+ }],
2218
+ /**
2219
+ * Perspective Origin
2220
+ * @see https://tailwindcss.com/docs/perspective-origin
2221
+ */
2222
+ 'perspective-origin': [{
2223
+ 'perspective-origin': scaleOrigin()
2224
+ }],
2225
+ /**
2226
+ * Rotate
2227
+ * @see https://tailwindcss.com/docs/rotate
2228
+ */
2229
+ rotate: [{
2230
+ rotate: scaleRotate()
2231
+ }],
2232
+ /**
2233
+ * Rotate X
2234
+ * @see https://tailwindcss.com/docs/rotate
2235
+ */
2236
+ 'rotate-x': [{
2237
+ 'rotate-x': scaleRotate()
2238
+ }],
2239
+ /**
2240
+ * Rotate Y
2241
+ * @see https://tailwindcss.com/docs/rotate
2242
+ */
2243
+ 'rotate-y': [{
2244
+ 'rotate-y': scaleRotate()
2245
+ }],
2246
+ /**
2247
+ * Rotate Z
2248
+ * @see https://tailwindcss.com/docs/rotate
2249
+ */
2250
+ 'rotate-z': [{
2251
+ 'rotate-z': scaleRotate()
2252
+ }],
2253
+ /**
2254
+ * Scale
2255
+ * @see https://tailwindcss.com/docs/scale
2256
+ */
2257
+ scale: [{
2258
+ scale: scaleScale()
2259
+ }],
2260
+ /**
2261
+ * Scale X
2262
+ * @see https://tailwindcss.com/docs/scale
2263
+ */
2264
+ 'scale-x': [{
2265
+ 'scale-x': scaleScale()
2266
+ }],
2267
+ /**
2268
+ * Scale Y
2269
+ * @see https://tailwindcss.com/docs/scale
2270
+ */
2271
+ 'scale-y': [{
2272
+ 'scale-y': scaleScale()
2273
+ }],
2274
+ /**
2275
+ * Scale Z
2276
+ * @see https://tailwindcss.com/docs/scale
2277
+ */
2278
+ 'scale-z': [{
2279
+ 'scale-z': scaleScale()
2280
+ }],
2281
+ /**
2282
+ * Scale 3D
2283
+ * @see https://tailwindcss.com/docs/scale
2284
+ */
2285
+ 'scale-3d': ['scale-3d'],
2286
+ /**
2287
+ * Skew
2288
+ * @see https://tailwindcss.com/docs/skew
2289
+ */
2290
+ skew: [{
2291
+ skew: scaleSkew()
2292
+ }],
2293
+ /**
2294
+ * Skew X
2295
+ * @see https://tailwindcss.com/docs/skew
2296
+ */
2297
+ 'skew-x': [{
2298
+ 'skew-x': scaleSkew()
2299
+ }],
2300
+ /**
2301
+ * Skew Y
2302
+ * @see https://tailwindcss.com/docs/skew
2303
+ */
2304
+ 'skew-y': [{
2305
+ 'skew-y': scaleSkew()
2306
+ }],
2307
+ /**
2308
+ * Transform
2309
+ * @see https://tailwindcss.com/docs/transform
2310
+ */
2311
+ transform: [{
2312
+ transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']
2313
+ }],
2314
+ /**
2315
+ * Transform Origin
2316
+ * @see https://tailwindcss.com/docs/transform-origin
2317
+ */
2318
+ 'transform-origin': [{
2319
+ origin: scaleOrigin()
2320
+ }],
2321
+ /**
2322
+ * Transform Style
2323
+ * @see https://tailwindcss.com/docs/transform-style
2324
+ */
2325
+ 'transform-style': [{
2326
+ transform: ['3d', 'flat']
2327
+ }],
2328
+ /**
2329
+ * Translate
2330
+ * @see https://tailwindcss.com/docs/translate
2331
+ */
2332
+ translate: [{
2333
+ translate: scaleTranslate()
2334
+ }],
2335
+ /**
2336
+ * Translate X
2337
+ * @see https://tailwindcss.com/docs/translate
2338
+ */
2339
+ 'translate-x': [{
2340
+ 'translate-x': scaleTranslate()
2341
+ }],
2342
+ /**
2343
+ * Translate Y
2344
+ * @see https://tailwindcss.com/docs/translate
2345
+ */
2346
+ 'translate-y': [{
2347
+ 'translate-y': scaleTranslate()
2348
+ }],
2349
+ /**
2350
+ * Translate Z
2351
+ * @see https://tailwindcss.com/docs/translate
2352
+ */
2353
+ 'translate-z': [{
2354
+ 'translate-z': scaleTranslate()
2355
+ }],
2356
+ /**
2357
+ * Translate None
2358
+ * @see https://tailwindcss.com/docs/translate
2359
+ */
2360
+ 'translate-none': ['translate-none'],
2361
+ // ---------------------
2362
+ // --- Interactivity ---
2363
+ // ---------------------
2364
+ /**
2365
+ * Accent Color
2366
+ * @see https://tailwindcss.com/docs/accent-color
2367
+ */
2368
+ accent: [{
2369
+ accent: scaleColor()
2370
+ }],
2371
+ /**
2372
+ * Appearance
2373
+ * @see https://tailwindcss.com/docs/appearance
2374
+ */
2375
+ appearance: [{
2376
+ appearance: ['none', 'auto']
2377
+ }],
2378
+ /**
2379
+ * Caret Color
2380
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2381
+ */
2382
+ 'caret-color': [{
2383
+ caret: scaleColor()
2384
+ }],
2385
+ /**
2386
+ * Color Scheme
2387
+ * @see https://tailwindcss.com/docs/color-scheme
2388
+ */
2389
+ 'color-scheme': [{
2390
+ scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']
2391
+ }],
2392
+ /**
2393
+ * Cursor
2394
+ * @see https://tailwindcss.com/docs/cursor
2395
+ */
2396
+ cursor: [{
2397
+ 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', isArbitraryVariable, isArbitraryValue]
2398
+ }],
2399
+ /**
2400
+ * Field Sizing
2401
+ * @see https://tailwindcss.com/docs/field-sizing
2402
+ */
2403
+ 'field-sizing': [{
2404
+ 'field-sizing': ['fixed', 'content']
2405
+ }],
2406
+ /**
2407
+ * Pointer Events
2408
+ * @see https://tailwindcss.com/docs/pointer-events
2409
+ */
2410
+ 'pointer-events': [{
2411
+ 'pointer-events': ['auto', 'none']
2412
+ }],
2413
+ /**
2414
+ * Resize
2415
+ * @see https://tailwindcss.com/docs/resize
2416
+ */
2417
+ resize: [{
2418
+ resize: ['none', '', 'y', 'x']
2419
+ }],
2420
+ /**
2421
+ * Scroll Behavior
2422
+ * @see https://tailwindcss.com/docs/scroll-behavior
2423
+ */
2424
+ 'scroll-behavior': [{
2425
+ scroll: ['auto', 'smooth']
2426
+ }],
2427
+ /**
2428
+ * Scroll Margin
2429
+ * @see https://tailwindcss.com/docs/scroll-margin
2430
+ */
2431
+ 'scroll-m': [{
2432
+ 'scroll-m': scaleUnambiguousSpacing()
2433
+ }],
2434
+ /**
2435
+ * Scroll Margin X
2436
+ * @see https://tailwindcss.com/docs/scroll-margin
2437
+ */
2438
+ 'scroll-mx': [{
2439
+ 'scroll-mx': scaleUnambiguousSpacing()
2440
+ }],
2441
+ /**
2442
+ * Scroll Margin Y
2443
+ * @see https://tailwindcss.com/docs/scroll-margin
2444
+ */
2445
+ 'scroll-my': [{
2446
+ 'scroll-my': scaleUnambiguousSpacing()
2447
+ }],
2448
+ /**
2449
+ * Scroll Margin Start
2450
+ * @see https://tailwindcss.com/docs/scroll-margin
2451
+ */
2452
+ 'scroll-ms': [{
2453
+ 'scroll-ms': scaleUnambiguousSpacing()
2454
+ }],
2455
+ /**
2456
+ * Scroll Margin End
2457
+ * @see https://tailwindcss.com/docs/scroll-margin
2458
+ */
2459
+ 'scroll-me': [{
2460
+ 'scroll-me': scaleUnambiguousSpacing()
2461
+ }],
2462
+ /**
2463
+ * Scroll Margin Top
2464
+ * @see https://tailwindcss.com/docs/scroll-margin
2465
+ */
2466
+ 'scroll-mt': [{
2467
+ 'scroll-mt': scaleUnambiguousSpacing()
2468
+ }],
2469
+ /**
2470
+ * Scroll Margin Right
2471
+ * @see https://tailwindcss.com/docs/scroll-margin
2472
+ */
2473
+ 'scroll-mr': [{
2474
+ 'scroll-mr': scaleUnambiguousSpacing()
2475
+ }],
2476
+ /**
2477
+ * Scroll Margin Bottom
2478
+ * @see https://tailwindcss.com/docs/scroll-margin
2479
+ */
2480
+ 'scroll-mb': [{
2481
+ 'scroll-mb': scaleUnambiguousSpacing()
2482
+ }],
2483
+ /**
2484
+ * Scroll Margin Left
2485
+ * @see https://tailwindcss.com/docs/scroll-margin
2486
+ */
2487
+ 'scroll-ml': [{
2488
+ 'scroll-ml': scaleUnambiguousSpacing()
2489
+ }],
2490
+ /**
2491
+ * Scroll Padding
2492
+ * @see https://tailwindcss.com/docs/scroll-padding
2493
+ */
2494
+ 'scroll-p': [{
2495
+ 'scroll-p': scaleUnambiguousSpacing()
2496
+ }],
2497
+ /**
2498
+ * Scroll Padding X
2499
+ * @see https://tailwindcss.com/docs/scroll-padding
2500
+ */
2501
+ 'scroll-px': [{
2502
+ 'scroll-px': scaleUnambiguousSpacing()
2503
+ }],
2504
+ /**
2505
+ * Scroll Padding Y
2506
+ * @see https://tailwindcss.com/docs/scroll-padding
2507
+ */
2508
+ 'scroll-py': [{
2509
+ 'scroll-py': scaleUnambiguousSpacing()
2510
+ }],
2511
+ /**
2512
+ * Scroll Padding Start
2513
+ * @see https://tailwindcss.com/docs/scroll-padding
2514
+ */
2515
+ 'scroll-ps': [{
2516
+ 'scroll-ps': scaleUnambiguousSpacing()
2517
+ }],
2518
+ /**
2519
+ * Scroll Padding End
2520
+ * @see https://tailwindcss.com/docs/scroll-padding
2521
+ */
2522
+ 'scroll-pe': [{
2523
+ 'scroll-pe': scaleUnambiguousSpacing()
2524
+ }],
2525
+ /**
2526
+ * Scroll Padding Top
2527
+ * @see https://tailwindcss.com/docs/scroll-padding
2528
+ */
2529
+ 'scroll-pt': [{
2530
+ 'scroll-pt': scaleUnambiguousSpacing()
2531
+ }],
2532
+ /**
2533
+ * Scroll Padding Right
2534
+ * @see https://tailwindcss.com/docs/scroll-padding
2535
+ */
2536
+ 'scroll-pr': [{
2537
+ 'scroll-pr': scaleUnambiguousSpacing()
2538
+ }],
2539
+ /**
2540
+ * Scroll Padding Bottom
2541
+ * @see https://tailwindcss.com/docs/scroll-padding
2542
+ */
2543
+ 'scroll-pb': [{
2544
+ 'scroll-pb': scaleUnambiguousSpacing()
2545
+ }],
2546
+ /**
2547
+ * Scroll Padding Left
2548
+ * @see https://tailwindcss.com/docs/scroll-padding
2549
+ */
2550
+ 'scroll-pl': [{
2551
+ 'scroll-pl': scaleUnambiguousSpacing()
2552
+ }],
2553
+ /**
2554
+ * Scroll Snap Align
2555
+ * @see https://tailwindcss.com/docs/scroll-snap-align
2556
+ */
2557
+ 'snap-align': [{
2558
+ snap: ['start', 'end', 'center', 'align-none']
2559
+ }],
2560
+ /**
2561
+ * Scroll Snap Stop
2562
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
2563
+ */
2564
+ 'snap-stop': [{
2565
+ snap: ['normal', 'always']
2566
+ }],
2567
+ /**
2568
+ * Scroll Snap Type
2569
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2570
+ */
2571
+ 'snap-type': [{
2572
+ snap: ['none', 'x', 'y', 'both']
2573
+ }],
2574
+ /**
2575
+ * Scroll Snap Type Strictness
2576
+ * @see https://tailwindcss.com/docs/scroll-snap-type
2577
+ */
2578
+ 'snap-strictness': [{
2579
+ snap: ['mandatory', 'proximity']
2580
+ }],
2581
+ /**
2582
+ * Touch Action
2583
+ * @see https://tailwindcss.com/docs/touch-action
2584
+ */
2585
+ touch: [{
2586
+ touch: ['auto', 'none', 'manipulation']
2587
+ }],
2588
+ /**
2589
+ * Touch Action X
2590
+ * @see https://tailwindcss.com/docs/touch-action
2591
+ */
2592
+ 'touch-x': [{
2593
+ 'touch-pan': ['x', 'left', 'right']
2594
+ }],
2595
+ /**
2596
+ * Touch Action Y
2597
+ * @see https://tailwindcss.com/docs/touch-action
2598
+ */
2599
+ 'touch-y': [{
2600
+ 'touch-pan': ['y', 'up', 'down']
2601
+ }],
2602
+ /**
2603
+ * Touch Action Pinch Zoom
2604
+ * @see https://tailwindcss.com/docs/touch-action
2605
+ */
2606
+ 'touch-pz': ['touch-pinch-zoom'],
2607
+ /**
2608
+ * User Select
2609
+ * @see https://tailwindcss.com/docs/user-select
2610
+ */
2611
+ select: [{
2612
+ select: ['none', 'text', 'all', 'auto']
2613
+ }],
2614
+ /**
2615
+ * Will Change
2616
+ * @see https://tailwindcss.com/docs/will-change
2617
+ */
2618
+ 'will-change': [{
2619
+ 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]
2620
+ }],
2621
+ // -----------
2622
+ // --- SVG ---
2623
+ // -----------
2624
+ /**
2625
+ * Fill
2626
+ * @see https://tailwindcss.com/docs/fill
2627
+ */
2628
+ fill: [{
2629
+ fill: ['none', ...scaleColor()]
2630
+ }],
2631
+ /**
2632
+ * Stroke Width
2633
+ * @see https://tailwindcss.com/docs/stroke-width
2634
+ */
2635
+ 'stroke-w': [{
2636
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
2637
+ }],
2638
+ /**
2639
+ * Stroke
2640
+ * @see https://tailwindcss.com/docs/stroke
2641
+ */
2642
+ stroke: [{
2643
+ stroke: ['none', ...scaleColor()]
2644
+ }],
2645
+ // ---------------------
2646
+ // --- Accessibility ---
2647
+ // ---------------------
2648
+ /**
2649
+ * Forced Color Adjust
2650
+ * @see https://tailwindcss.com/docs/forced-color-adjust
2651
+ */
2652
+ 'forced-color-adjust': [{
2653
+ 'forced-color-adjust': ['auto', 'none']
2654
+ }]
2655
+ },
2656
+ conflictingClassGroups: {
2657
+ overflow: ['overflow-x', 'overflow-y'],
2658
+ overscroll: ['overscroll-x', 'overscroll-y'],
2659
+ inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],
2660
+ 'inset-x': ['right', 'left'],
2661
+ 'inset-y': ['top', 'bottom'],
2662
+ flex: ['basis', 'grow', 'shrink'],
2663
+ gap: ['gap-x', 'gap-y'],
2664
+ p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],
2665
+ px: ['pr', 'pl'],
2666
+ py: ['pt', 'pb'],
2667
+ m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],
2668
+ mx: ['mr', 'ml'],
2669
+ my: ['mt', 'mb'],
2670
+ size: ['w', 'h'],
2671
+ 'font-size': ['leading'],
2672
+ 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],
2673
+ 'fvn-ordinal': ['fvn-normal'],
2674
+ 'fvn-slashed-zero': ['fvn-normal'],
2675
+ 'fvn-figure': ['fvn-normal'],
2676
+ 'fvn-spacing': ['fvn-normal'],
2677
+ 'fvn-fraction': ['fvn-normal'],
2678
+ 'line-clamp': ['display', 'overflow'],
2679
+ 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'],
2680
+ 'rounded-s': ['rounded-ss', 'rounded-es'],
2681
+ 'rounded-e': ['rounded-se', 'rounded-ee'],
2682
+ 'rounded-t': ['rounded-tl', 'rounded-tr'],
2683
+ 'rounded-r': ['rounded-tr', 'rounded-br'],
2684
+ 'rounded-b': ['rounded-br', 'rounded-bl'],
2685
+ 'rounded-l': ['rounded-tl', 'rounded-bl'],
2686
+ 'border-spacing': ['border-spacing-x', 'border-spacing-y'],
2687
+ 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],
2688
+ 'border-w-x': ['border-w-r', 'border-w-l'],
2689
+ 'border-w-y': ['border-w-t', 'border-w-b'],
2690
+ 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],
2691
+ 'border-color-x': ['border-color-r', 'border-color-l'],
2692
+ 'border-color-y': ['border-color-t', 'border-color-b'],
2693
+ translate: ['translate-x', 'translate-y', 'translate-none'],
2694
+ 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],
2695
+ 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],
2696
+ 'scroll-mx': ['scroll-mr', 'scroll-ml'],
2697
+ 'scroll-my': ['scroll-mt', 'scroll-mb'],
2698
+ 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],
2699
+ 'scroll-px': ['scroll-pr', 'scroll-pl'],
2700
+ 'scroll-py': ['scroll-pt', 'scroll-pb'],
2701
+ touch: ['touch-x', 'touch-y', 'touch-pz'],
2702
+ 'touch-x': ['touch'],
2703
+ 'touch-y': ['touch'],
2704
+ 'touch-pz': ['touch']
2705
+ },
2706
+ conflictingClassGroupModifiers: {
2707
+ 'font-size': ['leading']
2708
+ },
2709
+ orderSensitiveModifiers: ['before', 'after', 'placeholder', 'file', 'marker', 'selection', 'first-line', 'first-letter', 'backdrop', '*', '**']
2710
+ };
2711
+ };
2712
+ const twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);
2713
+
2714
+ const fontWeightClasses = {
2715
+ thin: "font-thin",
2716
+ extralight: "font-extralight",
2717
+ light: "font-light",
2718
+ normal: "font-normal",
2719
+ medium: "font-medium",
2720
+ semibold: "font-semibold",
2721
+ bold: "font-bold",
2722
+ extrabold: "font-extrabold",
2723
+ black: "font-black",
2724
+ };
2725
+ const fontStyleClasses = {
2726
+ italic: "italic",
2727
+ notItalic: "not-italic",
2728
+ };
2729
+ const fontFamilyClasses = {
2730
+ sans: "font-sans",
2731
+ serif: "font-serif",
2732
+ mono: "font-mono",
2733
+ };
2734
+ const textDecorationClasses = {
2735
+ underline: "underline",
2736
+ lineThrough: "line-through",
2737
+ noUnderline: "no-underline",
2738
+ overline: "overline",
2739
+ };
2740
+ const textTransformClasses = {
2741
+ uppercase: "uppercase",
2742
+ lowercase: "lowercase",
2743
+ capitalize: "capitalize",
2744
+ normalCase: "normal-case",
2745
+ };
2746
+ const textAppearanceClasses = {
2747
+ default: "text-(--text-color-default)",
2748
+ primary: "text-(--text-color-primary)",
2749
+ secondary: "text-(--text-color-secondary)",
2750
+ tertiary: "text-(--text-color-tertiary)",
2751
+ muted: "text-(--text-color-muted)",
2752
+ link: "text-(--text-color-link)",
2753
+ accent: "text-(--text-color-accent)",
2754
+ success: "text-(--text-color-success)",
2755
+ danger: "text-(--text-color-danger)",
2756
+ warning: "text-(--text-color-warning)",
2757
+ info: "text-(--text-color-info)",
2758
+ };
2759
+
2760
+ function getBooleanClass(props, classes, fallbackKey) {
2761
+ var _a, _b;
2762
+ if (!classes)
2763
+ return "";
2764
+ for (const key in props) {
2765
+ if (Object.prototype.hasOwnProperty.call(props, key) && props[key]) {
2766
+ return (_a = classes[key]) !== null && _a !== void 0 ? _a : "";
2767
+ }
2768
+ }
2769
+ return fallbackKey ? (_b = classes[fallbackKey]) !== null && _b !== void 0 ? _b : "" : "";
2770
+ }
2771
+ function componentBuilder(baseProps, defaultTag, baseClasses) {
2772
+ const extraClasses = [];
2773
+ const { className, children, tag, ...other } = baseProps;
2774
+ const otherProps = { ...other };
2775
+ const propsToRemove = [];
2776
+ const registerKeys = (keys) => {
2777
+ keys.forEach((key) => propsToRemove.push(key));
2778
+ };
2779
+ const withBooleanProps = (propMap, fallbackKey, settings) => {
2780
+ // Build a subset of props from otherProps for the keys in the map.
2781
+ const propsSubset = {};
2782
+ const keys = Object.keys(propMap);
2783
+ keys.forEach((key) => {
2784
+ if (key in otherProps) {
2785
+ propsSubset[key] = otherProps[key];
2786
+ }
2787
+ });
2788
+ if (settings) {
2789
+ const settingsClass = getBooleanClass(settings || {}, propMap);
2790
+ extraClasses.push(settingsClass);
2791
+ }
2792
+ // Compute the class.
2793
+ const newClass = getBooleanClass(propsSubset, propMap, fallbackKey);
2794
+ extraClasses.push(newClass);
2795
+ // Register all keys found in the map.
2796
+ registerKeys(keys);
2797
+ return builder;
2798
+ };
2799
+ function finalize() {
2800
+ const Tag = tag || defaultTag;
2801
+ const merged = twMerge(baseClasses, ...extraClasses, className);
2802
+ propsToRemove.forEach(key => delete otherProps[key]);
2803
+ return (jsx(Tag, { className: merged, ...otherProps, children: children }));
2804
+ }
2805
+ const builder = {
2806
+ withBooleanProps,
2807
+ withSizes: (sizeMap) => withBooleanProps(sizeMap, "md"),
2808
+ withBreakpoints: (breakpointMap) => withBooleanProps(breakpointMap),
2809
+ withReverse: (reverseMap) => withBooleanProps(reverseMap),
2810
+ withCentered: (centeredMap) => withBooleanProps(centeredMap),
2811
+ withHide: (hideMap) => withBooleanProps(hideMap),
2812
+ withPosition: (positionMap) => withBooleanProps(positionMap),
2813
+ withFontWeight: (fontWeight, settings) => withBooleanProps(fontWeight, undefined, settings),
2814
+ withFontStyle: (fontStyle, settings) => withBooleanProps(fontStyle, undefined, settings),
2815
+ withFontFamily: (fontFamily, settings) => withBooleanProps(fontFamily, undefined, settings),
2816
+ withTextDecoration: (textDecoration, settings) => withBooleanProps(textDecoration, undefined, settings),
2817
+ withTextTransform: (textTransform, settings) => withBooleanProps(textTransform, undefined, settings),
2818
+ withTextAppearance: (appearance, settings) => withBooleanProps(appearance, "default", settings),
2819
+ withGaps: (gapMap, sizeMap) => otherProps.noGap !== undefined && otherProps.noGap ? withBooleanProps(gapMap) : builder.withSizes(sizeMap),
2820
+ withTypography: (settings) => {
2821
+ var _a, _b, _c, _d, _e, _f;
2822
+ return builder
2823
+ .withFontFamily(fontFamilyClasses, (_a = settings === null || settings === void 0 ? void 0 : settings.fontFamily) !== null && _a !== void 0 ? _a : {})
2824
+ .withFontStyle(fontStyleClasses, (_b = settings === null || settings === void 0 ? void 0 : settings.fontStyle) !== null && _b !== void 0 ? _b : {})
2825
+ .withFontWeight(fontWeightClasses, (_c = settings === null || settings === void 0 ? void 0 : settings.fontWeight) !== null && _c !== void 0 ? _c : {})
2826
+ .withTextDecoration(textDecorationClasses, (_d = settings === null || settings === void 0 ? void 0 : settings.textDecoration) !== null && _d !== void 0 ? _d : {})
2827
+ .withTextTransform(textTransformClasses, (_e = settings === null || settings === void 0 ? void 0 : settings.textTransform) !== null && _e !== void 0 ? _e : {})
2828
+ .withTextAppearance(textAppearanceClasses, (_f = settings === null || settings === void 0 ? void 0 : settings.textAppearance) !== null && _f !== void 0 ? _f : {});
2829
+ },
2830
+ withAppearance: (appearance, settings) => withBooleanProps(appearance, "default", settings),
2831
+ build() {
2832
+ builder.withHide({
2833
+ xsHide: "max-xs:hidden",
2834
+ smHide: "max-sm:hidden",
2835
+ mdHide: "max-md:hidden",
2836
+ lgHide: "max-lg:hidden",
2837
+ xlHide: "max-xl:hidden"
2838
+ });
2839
+ builder.withPosition({
2840
+ relative: "relative",
2841
+ absolute: "absolute",
2842
+ fixed: "fixed",
2843
+ sticky: "sticky",
2844
+ static: "static"
2845
+ });
2846
+ return finalize();
2847
+ },
2848
+ };
2849
+ return builder;
2850
+ }
2851
+
2852
+ const Button = (props) => componentBuilder(props, "button", "w-fit h-fit cursor-pointer flex justify-center items-center border border-gray-200 transition-all duration-300")
2853
+ .withSizes({
2854
+ xs: "px-2 py-1 rounded-sm text-xs",
2855
+ sm: "px-3 py-1 rounded-md text-sm",
2856
+ md: "px-4 py-2 rounded-md text-base",
2857
+ lg: "px-6 py-3 rounded-lg text-lg",
2858
+ xl: "px-8 py-4 rounded-xl text-xl",
2859
+ })
2860
+ .withSizes({
2861
+ xs: "shadow-xs hover:shadow-sm",
2862
+ sm: "shadow-xs hover:shadow-sm",
2863
+ md: "shadow-sm hover:shadow-md",
2864
+ lg: "shadow-md hover:shadow-lg",
2865
+ xl: "shadow-lg hover:shadow-xl",
2866
+ })
2867
+ .withTypography({
2868
+ fontWeight: { semibold: true },
2869
+ })
2870
+ .build();
2871
+
2872
+ const Badge = (props) => componentBuilder(props, "span", "rounded-full w-fit")
2873
+ .withSizes({
2874
+ xs: "px-2 py-1 text-xs",
2875
+ sm: "px-3 py-1 text-sm",
2876
+ md: "px-4 py-2 text-base",
2877
+ lg: "px-5 py-2 text-lg",
2878
+ xl: "px-6 py-3 text-xl",
2879
+ })
2880
+ .withAppearance({
2881
+ default: "bg-gray-200",
2882
+ accent: "bg-gray-200",
2883
+ primary: "bg-blue-200",
2884
+ secondary: "bg-gray-200",
2885
+ tertiary: "bg-gray-200",
2886
+ success: "bg-green-200",
2887
+ danger: "bg-red-200",
2888
+ warning: "bg-yellow-200",
2889
+ info: "bg-blue-200"
2890
+ }, {})
2891
+ .withTypography({
2892
+ fontWeight: { semibold: true },
2893
+ fontFamily: { mono: true },
2894
+ textTransform: { uppercase: true },
2895
+ textAppearance: { secondary: true },
2896
+ })
2897
+ .build();
2898
+
2899
+ const Divider = (props) => componentBuilder(props, "div", "bg-gray-200 w-full h-px")
2900
+ .build();
2901
+
2902
+ const Chip = (props) => componentBuilder(props, "span", "rounded-full w-fit h-fit border")
2903
+ .withSizes({
2904
+ xs: "px-1 py-1 rounded-sm text-xs",
2905
+ sm: "px-2 py-1 rounded-md text-sm",
2906
+ md: "px-2 py-1 rounded-lg text-base",
2907
+ lg: "px-3 py-2 rounded-xl text-lg",
2908
+ xl: "px-4 py-3 rounded-2xl text-xl",
2909
+ })
2910
+ .withAppearance({
2911
+ default: "bg-gray-100",
2912
+ accent: "bg-gray-200",
2913
+ primary: "bg-blue-200",
2914
+ secondary: "bg-gray-200",
2915
+ tertiary: "bg-gray-200",
2916
+ success: "bg-green-200",
2917
+ danger: "bg-red-200",
2918
+ warning: "bg-yellow-200",
2919
+ info: "bg-blue-200"
2920
+ }, {})
2921
+ .withTypography({
2922
+ fontFamily: { mono: true },
2923
+ textAppearance: { secondary: true },
2924
+ })
2925
+ .build();
2926
+
2927
+ const centeredClasses = {
2928
+ centered: "items-center justify-center",
2929
+ vCentered: "items-center",
2930
+ hCentered: "justify-center"
2931
+ };
2932
+ const Section = (props) => componentBuilder(props, "section", "w-full flex flex-col items-start")
2933
+ .withCentered(centeredClasses)
2934
+ .withSizes({
2935
+ xs: "py-6 max-lg:py-4 max-md:py-2",
2936
+ sm: "py-8 max-lg:py-6 max-md:py-4",
2937
+ md: "py-10 max-lg:py-8 max-md:py-6",
2938
+ lg: "py-12 max-lg:py-10 max-md:py-8",
2939
+ xl: "py-14 max-lg:py-12 max-md:py-10",
2940
+ })
2941
+ .withSizes({
2942
+ xs: "px-4 max-lg:px-2 max-md:px-0",
2943
+ sm: "px-6 max-lg:px-6 max-md:px-2",
2944
+ md: "px-8 max-lg:px-6 max-md:px-4",
2945
+ lg: "px-10 max-lg:px-8 max-md:px-6",
2946
+ xl: "px-12 max-lg:px-10 max-md:px-8",
2947
+ })
2948
+ .build();
2949
+ const Container = (props) => componentBuilder(props, "div", "flex flex-col mx-auto w-full")
2950
+ .withCentered(centeredClasses)
2951
+ .withSizes({
2952
+ xs: "max-w-3xl gap-2 max-lg:gap-1",
2953
+ sm: "max-w-4xl gap-4 max-lg:gap-3 max-md:gap-2",
2954
+ md: "max-w-5xl gap-6 max-lg:gap-5 max-md:gap-4",
2955
+ lg: "max-w-6xl gap-8 max-lg:gap-7 max-md:gap-6",
2956
+ xl: "max-w-7xl gap-10 max-lg:gap-9 max-md:gap-8",
2957
+ })
2958
+ .build();
2959
+ const commonGaps = {
2960
+ xs: "gap-1",
2961
+ sm: "gap-2 max-lg:gap-1",
2962
+ md: "gap-4 max-lg:gap-3 max-md:gap-2",
2963
+ lg: "gap-6 max-lg:gap-5 max-md:gap-4",
2964
+ xl: "gap-8 max-lg:gap-7 max-md:gap-6",
2965
+ };
2966
+ const Col = (props) => componentBuilder(props, "div", "flex flex-col")
2967
+ .withGaps({ noGap: "gap-0" }, commonGaps)
2968
+ .withReverse({
2969
+ reverse: "flex-col-reverse"
2970
+ })
2971
+ .withCentered(centeredClasses)
2972
+ .build();
2973
+ const Row = (props) => componentBuilder(props, "div", "flex flex-row")
2974
+ .withGaps({ noGap: "gap-0" }, commonGaps)
2975
+ .withReverse({
2976
+ reverse: "flex-row-reverse"
2977
+ })
2978
+ .withCentered(centeredClasses)
2979
+ .withBreakpoints({
2980
+ xsCol: "max-xs:flex-col",
2981
+ smCol: "max-sm:flex-col",
2982
+ mdCol: "max-md:flex-col",
2983
+ lgCol: "max-lg:flex-col",
2984
+ xlCol: "max-xl:flex-col"
2985
+ })
2986
+ .withBooleanProps({
2987
+ justifyStart: "justify-start",
2988
+ justifyEnd: "justify-end",
2989
+ justifyCenter: "justify-center",
2990
+ justifyBetween: "justify-between",
2991
+ justifyAround: "justify-around",
2992
+ justifyEvenly: "justify-evenly",
2993
+ justifyStretch: "justify-stretch",
2994
+ justifyBaseline: "justify-baseline",
2995
+ })
2996
+ .build();
2997
+ const gridGaps = {
2998
+ xs: "gap-2",
2999
+ sm: "gap-4 max-lg:gap-2",
3000
+ md: "gap-6 max-lg:gap-4",
3001
+ lg: "gap-8 max-lg:gap-6 max-md:gap-4",
3002
+ xl: "gap-10 max-lg:gap-8 max-md:gap-6",
3003
+ };
3004
+ const Grid3 = (props) => componentBuilder(props, "div", "w-full grid grid-cols-3 max-lg:grid-cols-2 max-md:grid-cols-1")
3005
+ .withGaps({ noGap: "gap-0" }, gridGaps)
3006
+ .build();
3007
+ const Grid4 = (props) => componentBuilder(props, "div", "w-full grid grid-cols-4 max-lg:grid-cols-3 max-md:grid-cols-2 max-sm:grid-cols-1")
3008
+ .withGaps({ noGap: "gap-0" }, gridGaps)
3009
+ .build();
3010
+
3011
+ const PageTitle = (props) => componentBuilder(props, "h1")
3012
+ .withSizes({
3013
+ xs: "text-3xl",
3014
+ sm: "text-4xl",
3015
+ md: "text-5xl",
3016
+ lg: "text-6xl",
3017
+ xl: "text-7xl",
3018
+ })
3019
+ .withTypography({
3020
+ fontWeight: { semibold: true }
3021
+ })
3022
+ .build();
3023
+ const SectionTitle = (props) => componentBuilder(props, "h2")
3024
+ .withSizes({
3025
+ xs: "text-2xl",
3026
+ sm: "text-3xl",
3027
+ md: "text-4xl",
3028
+ lg: "text-5xl",
3029
+ xl: "text-6xl",
3030
+ })
3031
+ .withTypography({
3032
+ fontWeight: { semibold: true }
3033
+ })
3034
+ .build();
3035
+ const Title = (props) => componentBuilder(props, "h3")
3036
+ .withSizes({
3037
+ xs: "text-lg",
3038
+ sm: "text-xl",
3039
+ md: "text-2xl",
3040
+ lg: "text-3xl",
3041
+ xl: "text-4xl",
3042
+ })
3043
+ .withTypography({
3044
+ fontWeight: { semibold: true }
3045
+ })
3046
+ .build();
3047
+ const Text = (props) => componentBuilder(props, "p", "p-0 m-0")
3048
+ .withSizes({
3049
+ xs: "text-xs",
3050
+ sm: "text-sm",
3051
+ md: "text-md",
3052
+ lg: "text-lg",
3053
+ xl: "text-xl",
3054
+ })
3055
+ .withTypography({
3056
+ textAppearance: { secondary: true }
3057
+ })
3058
+ .build();
3059
+ const Link = (props) => componentBuilder(props, "a", "hover:underline")
3060
+ .withSizes({
3061
+ xs: "text-xs",
3062
+ sm: "text-sm",
3063
+ md: "text-md",
3064
+ lg: "text-lg",
3065
+ xl: "text-xl",
3066
+ })
3067
+ .withTypography({
3068
+ textAppearance: { link: true }
3069
+ })
3070
+ .build();
3071
+ const ListItem = (props) => componentBuilder(props, "li")
3072
+ .withSizes({
3073
+ xs: "text-xs",
3074
+ sm: "text-sm",
3075
+ md: "text-md",
3076
+ lg: "text-lg",
3077
+ xl: "text-xl",
3078
+ })
3079
+ .withTypography({})
3080
+ .build();
3081
+ const List = (props) => componentBuilder(props, "ul", "list-disc list-inside")
3082
+ .withSizes({
3083
+ xs: "text-xs",
3084
+ sm: "text-sm",
3085
+ md: "text-md",
3086
+ lg: "text-lg",
3087
+ xl: "text-xl",
3088
+ })
3089
+ .withTypography({})
3090
+ .build();
3091
+
3092
+ export { Badge, Button, Chip, Col, Container, Divider, Grid3, Grid4, Link, List, ListItem, PageTitle, Row, Section, SectionTitle, Text, Title };
3093
+ //# sourceMappingURL=index.esm.js.map