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