hiver-ui-kit-extended 1.0.0-beta.2

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