@raydenui/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs ADDED
@@ -0,0 +1,4477 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/components/Button/Button.tsx
7
+
8
+ // node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
9
+ function r(e) {
10
+ var t, f, n = "";
11
+ if ("string" == typeof e || "number" == typeof e) n += e;
12
+ else if ("object" == typeof e) if (Array.isArray(e)) {
13
+ var o = e.length;
14
+ for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
15
+ } else for (f in e) e[f] && (n && (n += " "), n += f);
16
+ return n;
17
+ }
18
+ function clsx() {
19
+ for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
20
+ return n;
21
+ }
22
+
23
+ // node_modules/.pnpm/tailwind-merge@3.5.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs
24
+ var concatArrays = (array1, array2) => {
25
+ const combinedArray = new Array(array1.length + array2.length);
26
+ for (let i = 0; i < array1.length; i++) {
27
+ combinedArray[i] = array1[i];
28
+ }
29
+ for (let i = 0; i < array2.length; i++) {
30
+ combinedArray[array1.length + i] = array2[i];
31
+ }
32
+ return combinedArray;
33
+ };
34
+ var createClassValidatorObject = (classGroupId, validator) => ({
35
+ classGroupId,
36
+ validator
37
+ });
38
+ var createClassPartObject = (nextPart = /* @__PURE__ */ new Map(), validators = null, classGroupId) => ({
39
+ nextPart,
40
+ validators,
41
+ classGroupId
42
+ });
43
+ var CLASS_PART_SEPARATOR = "-";
44
+ var EMPTY_CONFLICTS = [];
45
+ var ARBITRARY_PROPERTY_PREFIX = "arbitrary..";
46
+ var createClassGroupUtils = (config) => {
47
+ const classMap = createClassMap(config);
48
+ const {
49
+ conflictingClassGroups,
50
+ conflictingClassGroupModifiers
51
+ } = config;
52
+ const getClassGroupId = (className) => {
53
+ if (className.startsWith("[") && className.endsWith("]")) {
54
+ return getGroupIdForArbitraryProperty(className);
55
+ }
56
+ const classParts = className.split(CLASS_PART_SEPARATOR);
57
+ const startIndex = classParts[0] === "" && classParts.length > 1 ? 1 : 0;
58
+ return getGroupRecursive(classParts, startIndex, classMap);
59
+ };
60
+ const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {
61
+ if (hasPostfixModifier) {
62
+ const modifierConflicts = conflictingClassGroupModifiers[classGroupId];
63
+ const baseConflicts = conflictingClassGroups[classGroupId];
64
+ if (modifierConflicts) {
65
+ if (baseConflicts) {
66
+ return concatArrays(baseConflicts, modifierConflicts);
67
+ }
68
+ return modifierConflicts;
69
+ }
70
+ return baseConflicts || EMPTY_CONFLICTS;
71
+ }
72
+ return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;
73
+ };
74
+ return {
75
+ getClassGroupId,
76
+ getConflictingClassGroupIds
77
+ };
78
+ };
79
+ var getGroupRecursive = (classParts, startIndex, classPartObject) => {
80
+ const classPathsLength = classParts.length - startIndex;
81
+ if (classPathsLength === 0) {
82
+ return classPartObject.classGroupId;
83
+ }
84
+ const currentClassPart = classParts[startIndex];
85
+ const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);
86
+ if (nextClassPartObject) {
87
+ const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);
88
+ if (result) return result;
89
+ }
90
+ const validators = classPartObject.validators;
91
+ if (validators === null) {
92
+ return void 0;
93
+ }
94
+ const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);
95
+ const validatorsLength = validators.length;
96
+ for (let i = 0; i < validatorsLength; i++) {
97
+ const validatorObj = validators[i];
98
+ if (validatorObj.validator(classRest)) {
99
+ return validatorObj.classGroupId;
100
+ }
101
+ }
102
+ return void 0;
103
+ };
104
+ var getGroupIdForArbitraryProperty = (className) => className.slice(1, -1).indexOf(":") === -1 ? void 0 : (() => {
105
+ const content = className.slice(1, -1);
106
+ const colonIndex = content.indexOf(":");
107
+ const property = content.slice(0, colonIndex);
108
+ return property ? ARBITRARY_PROPERTY_PREFIX + property : void 0;
109
+ })();
110
+ var createClassMap = (config) => {
111
+ const {
112
+ theme,
113
+ classGroups
114
+ } = config;
115
+ return processClassGroups(classGroups, theme);
116
+ };
117
+ var processClassGroups = (classGroups, theme) => {
118
+ const classMap = createClassPartObject();
119
+ for (const classGroupId in classGroups) {
120
+ const group = classGroups[classGroupId];
121
+ processClassesRecursively(group, classMap, classGroupId, theme);
122
+ }
123
+ return classMap;
124
+ };
125
+ var processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {
126
+ const len = classGroup.length;
127
+ for (let i = 0; i < len; i++) {
128
+ const classDefinition = classGroup[i];
129
+ processClassDefinition(classDefinition, classPartObject, classGroupId, theme);
130
+ }
131
+ };
132
+ var processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
133
+ if (typeof classDefinition === "string") {
134
+ processStringDefinition(classDefinition, classPartObject, classGroupId);
135
+ return;
136
+ }
137
+ if (typeof classDefinition === "function") {
138
+ processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);
139
+ return;
140
+ }
141
+ processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);
142
+ };
143
+ var processStringDefinition = (classDefinition, classPartObject, classGroupId) => {
144
+ const classPartObjectToEdit = classDefinition === "" ? classPartObject : getPart(classPartObject, classDefinition);
145
+ classPartObjectToEdit.classGroupId = classGroupId;
146
+ };
147
+ var processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
148
+ if (isThemeGetter(classDefinition)) {
149
+ processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);
150
+ return;
151
+ }
152
+ if (classPartObject.validators === null) {
153
+ classPartObject.validators = [];
154
+ }
155
+ classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));
156
+ };
157
+ var processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {
158
+ const entries = Object.entries(classDefinition);
159
+ const len = entries.length;
160
+ for (let i = 0; i < len; i++) {
161
+ const [key, value] = entries[i];
162
+ processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);
163
+ }
164
+ };
165
+ var getPart = (classPartObject, path) => {
166
+ let current = classPartObject;
167
+ const parts = path.split(CLASS_PART_SEPARATOR);
168
+ const len = parts.length;
169
+ for (let i = 0; i < len; i++) {
170
+ const part = parts[i];
171
+ let next = current.nextPart.get(part);
172
+ if (!next) {
173
+ next = createClassPartObject();
174
+ current.nextPart.set(part, next);
175
+ }
176
+ current = next;
177
+ }
178
+ return current;
179
+ };
180
+ var isThemeGetter = (func) => "isThemeGetter" in func && func.isThemeGetter === true;
181
+ var createLruCache = (maxCacheSize) => {
182
+ if (maxCacheSize < 1) {
183
+ return {
184
+ get: () => void 0,
185
+ set: () => {
186
+ }
187
+ };
188
+ }
189
+ let cacheSize = 0;
190
+ let cache = /* @__PURE__ */ Object.create(null);
191
+ let previousCache = /* @__PURE__ */ Object.create(null);
192
+ const update = (key, value) => {
193
+ cache[key] = value;
194
+ cacheSize++;
195
+ if (cacheSize > maxCacheSize) {
196
+ cacheSize = 0;
197
+ previousCache = cache;
198
+ cache = /* @__PURE__ */ Object.create(null);
199
+ }
200
+ };
201
+ return {
202
+ get(key) {
203
+ let value = cache[key];
204
+ if (value !== void 0) {
205
+ return value;
206
+ }
207
+ if ((value = previousCache[key]) !== void 0) {
208
+ update(key, value);
209
+ return value;
210
+ }
211
+ },
212
+ set(key, value) {
213
+ if (key in cache) {
214
+ cache[key] = value;
215
+ } else {
216
+ update(key, value);
217
+ }
218
+ }
219
+ };
220
+ };
221
+ var IMPORTANT_MODIFIER = "!";
222
+ var MODIFIER_SEPARATOR = ":";
223
+ var EMPTY_MODIFIERS = [];
224
+ var createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({
225
+ modifiers,
226
+ hasImportantModifier,
227
+ baseClassName,
228
+ maybePostfixModifierPosition,
229
+ isExternal
230
+ });
231
+ var createParseClassName = (config) => {
232
+ const {
233
+ prefix,
234
+ experimentalParseClassName
235
+ } = config;
236
+ let parseClassName = (className) => {
237
+ const modifiers = [];
238
+ let bracketDepth = 0;
239
+ let parenDepth = 0;
240
+ let modifierStart = 0;
241
+ let postfixModifierPosition;
242
+ const len = className.length;
243
+ for (let index = 0; index < len; index++) {
244
+ const currentCharacter = className[index];
245
+ if (bracketDepth === 0 && parenDepth === 0) {
246
+ if (currentCharacter === MODIFIER_SEPARATOR) {
247
+ modifiers.push(className.slice(modifierStart, index));
248
+ modifierStart = index + 1;
249
+ continue;
250
+ }
251
+ if (currentCharacter === "/") {
252
+ postfixModifierPosition = index;
253
+ continue;
254
+ }
255
+ }
256
+ if (currentCharacter === "[") bracketDepth++;
257
+ else if (currentCharacter === "]") bracketDepth--;
258
+ else if (currentCharacter === "(") parenDepth++;
259
+ else if (currentCharacter === ")") parenDepth--;
260
+ }
261
+ const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);
262
+ let baseClassName = baseClassNameWithImportantModifier;
263
+ let hasImportantModifier = false;
264
+ if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {
265
+ baseClassName = baseClassNameWithImportantModifier.slice(0, -1);
266
+ hasImportantModifier = true;
267
+ } else if (
268
+ /**
269
+ * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.
270
+ * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864
271
+ */
272
+ baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)
273
+ ) {
274
+ baseClassName = baseClassNameWithImportantModifier.slice(1);
275
+ hasImportantModifier = true;
276
+ }
277
+ const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : void 0;
278
+ return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);
279
+ };
280
+ if (prefix) {
281
+ const fullPrefix = prefix + MODIFIER_SEPARATOR;
282
+ const parseClassNameOriginal = parseClassName;
283
+ parseClassName = (className) => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, void 0, true);
284
+ }
285
+ if (experimentalParseClassName) {
286
+ const parseClassNameOriginal = parseClassName;
287
+ parseClassName = (className) => experimentalParseClassName({
288
+ className,
289
+ parseClassName: parseClassNameOriginal
290
+ });
291
+ }
292
+ return parseClassName;
293
+ };
294
+ var createSortModifiers = (config) => {
295
+ const modifierWeights = /* @__PURE__ */ new Map();
296
+ config.orderSensitiveModifiers.forEach((mod, index) => {
297
+ modifierWeights.set(mod, 1e6 + index);
298
+ });
299
+ return (modifiers) => {
300
+ const result = [];
301
+ let currentSegment = [];
302
+ for (let i = 0; i < modifiers.length; i++) {
303
+ const modifier = modifiers[i];
304
+ const isArbitrary = modifier[0] === "[";
305
+ const isOrderSensitive = modifierWeights.has(modifier);
306
+ if (isArbitrary || isOrderSensitive) {
307
+ if (currentSegment.length > 0) {
308
+ currentSegment.sort();
309
+ result.push(...currentSegment);
310
+ currentSegment = [];
311
+ }
312
+ result.push(modifier);
313
+ } else {
314
+ currentSegment.push(modifier);
315
+ }
316
+ }
317
+ if (currentSegment.length > 0) {
318
+ currentSegment.sort();
319
+ result.push(...currentSegment);
320
+ }
321
+ return result;
322
+ };
323
+ };
324
+ var createConfigUtils = (config) => ({
325
+ cache: createLruCache(config.cacheSize),
326
+ parseClassName: createParseClassName(config),
327
+ sortModifiers: createSortModifiers(config),
328
+ ...createClassGroupUtils(config)
329
+ });
330
+ var SPLIT_CLASSES_REGEX = /\s+/;
331
+ var mergeClassList = (classList, configUtils) => {
332
+ const {
333
+ parseClassName,
334
+ getClassGroupId,
335
+ getConflictingClassGroupIds,
336
+ sortModifiers
337
+ } = configUtils;
338
+ const classGroupsInConflict = [];
339
+ const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);
340
+ let result = "";
341
+ for (let index = classNames.length - 1; index >= 0; index -= 1) {
342
+ const originalClassName = classNames[index];
343
+ const {
344
+ isExternal,
345
+ modifiers,
346
+ hasImportantModifier,
347
+ baseClassName,
348
+ maybePostfixModifierPosition
349
+ } = parseClassName(originalClassName);
350
+ if (isExternal) {
351
+ result = originalClassName + (result.length > 0 ? " " + result : result);
352
+ continue;
353
+ }
354
+ let hasPostfixModifier = !!maybePostfixModifierPosition;
355
+ let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);
356
+ if (!classGroupId) {
357
+ if (!hasPostfixModifier) {
358
+ result = originalClassName + (result.length > 0 ? " " + result : result);
359
+ continue;
360
+ }
361
+ classGroupId = getClassGroupId(baseClassName);
362
+ if (!classGroupId) {
363
+ result = originalClassName + (result.length > 0 ? " " + result : result);
364
+ continue;
365
+ }
366
+ hasPostfixModifier = false;
367
+ }
368
+ const variantModifier = modifiers.length === 0 ? "" : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(":");
369
+ const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;
370
+ const classId = modifierId + classGroupId;
371
+ if (classGroupsInConflict.indexOf(classId) > -1) {
372
+ continue;
373
+ }
374
+ classGroupsInConflict.push(classId);
375
+ const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);
376
+ for (let i = 0; i < conflictGroups.length; ++i) {
377
+ const group = conflictGroups[i];
378
+ classGroupsInConflict.push(modifierId + group);
379
+ }
380
+ result = originalClassName + (result.length > 0 ? " " + result : result);
381
+ }
382
+ return result;
383
+ };
384
+ var twJoin = (...classLists) => {
385
+ let index = 0;
386
+ let argument;
387
+ let resolvedValue;
388
+ let string = "";
389
+ while (index < classLists.length) {
390
+ if (argument = classLists[index++]) {
391
+ if (resolvedValue = toValue(argument)) {
392
+ string && (string += " ");
393
+ string += resolvedValue;
394
+ }
395
+ }
396
+ }
397
+ return string;
398
+ };
399
+ var toValue = (mix) => {
400
+ if (typeof mix === "string") {
401
+ return mix;
402
+ }
403
+ let resolvedValue;
404
+ let string = "";
405
+ for (let k = 0; k < mix.length; k++) {
406
+ if (mix[k]) {
407
+ if (resolvedValue = toValue(mix[k])) {
408
+ string && (string += " ");
409
+ string += resolvedValue;
410
+ }
411
+ }
412
+ }
413
+ return string;
414
+ };
415
+ var createTailwindMerge = (createConfigFirst, ...createConfigRest) => {
416
+ let configUtils;
417
+ let cacheGet;
418
+ let cacheSet;
419
+ let functionToCall;
420
+ const initTailwindMerge = (classList) => {
421
+ const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());
422
+ configUtils = createConfigUtils(config);
423
+ cacheGet = configUtils.cache.get;
424
+ cacheSet = configUtils.cache.set;
425
+ functionToCall = tailwindMerge;
426
+ return tailwindMerge(classList);
427
+ };
428
+ const tailwindMerge = (classList) => {
429
+ const cachedResult = cacheGet(classList);
430
+ if (cachedResult) {
431
+ return cachedResult;
432
+ }
433
+ const result = mergeClassList(classList, configUtils);
434
+ cacheSet(classList, result);
435
+ return result;
436
+ };
437
+ functionToCall = initTailwindMerge;
438
+ return (...args) => functionToCall(twJoin(...args));
439
+ };
440
+ var fallbackThemeArr = [];
441
+ var fromTheme = (key) => {
442
+ const themeGetter = (theme) => theme[key] || fallbackThemeArr;
443
+ themeGetter.isThemeGetter = true;
444
+ return themeGetter;
445
+ };
446
+ var arbitraryValueRegex = /^\[(?:(\w[\w-]*):)?(.+)\]$/i;
447
+ var arbitraryVariableRegex = /^\((?:(\w[\w-]*):)?(.+)\)$/i;
448
+ var fractionRegex = /^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/;
449
+ var tshirtUnitRegex = /^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/;
450
+ var lengthUnitRegex = /\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/;
451
+ var colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/;
452
+ var shadowRegex = /^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/;
453
+ var imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/;
454
+ var isFraction = (value) => fractionRegex.test(value);
455
+ var isNumber = (value) => !!value && !Number.isNaN(Number(value));
456
+ var isInteger = (value) => !!value && Number.isInteger(Number(value));
457
+ var isPercent = (value) => value.endsWith("%") && isNumber(value.slice(0, -1));
458
+ var isTshirtSize = (value) => tshirtUnitRegex.test(value);
459
+ var isAny = () => true;
460
+ var isLengthOnly = (value) => (
461
+ // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.
462
+ // For example, `hsl(0 0% 0%)` would be classified as a length without this check.
463
+ // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.
464
+ lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)
465
+ );
466
+ var isNever = () => false;
467
+ var isShadow = (value) => shadowRegex.test(value);
468
+ var isImage = (value) => imageRegex.test(value);
469
+ var isAnyNonArbitrary = (value) => !isArbitraryValue(value) && !isArbitraryVariable(value);
470
+ var isArbitrarySize = (value) => getIsArbitraryValue(value, isLabelSize, isNever);
471
+ var isArbitraryValue = (value) => arbitraryValueRegex.test(value);
472
+ var isArbitraryLength = (value) => getIsArbitraryValue(value, isLabelLength, isLengthOnly);
473
+ var isArbitraryNumber = (value) => getIsArbitraryValue(value, isLabelNumber, isNumber);
474
+ var isArbitraryWeight = (value) => getIsArbitraryValue(value, isLabelWeight, isAny);
475
+ var isArbitraryFamilyName = (value) => getIsArbitraryValue(value, isLabelFamilyName, isNever);
476
+ var isArbitraryPosition = (value) => getIsArbitraryValue(value, isLabelPosition, isNever);
477
+ var isArbitraryImage = (value) => getIsArbitraryValue(value, isLabelImage, isImage);
478
+ var isArbitraryShadow = (value) => getIsArbitraryValue(value, isLabelShadow, isShadow);
479
+ var isArbitraryVariable = (value) => arbitraryVariableRegex.test(value);
480
+ var isArbitraryVariableLength = (value) => getIsArbitraryVariable(value, isLabelLength);
481
+ var isArbitraryVariableFamilyName = (value) => getIsArbitraryVariable(value, isLabelFamilyName);
482
+ var isArbitraryVariablePosition = (value) => getIsArbitraryVariable(value, isLabelPosition);
483
+ var isArbitraryVariableSize = (value) => getIsArbitraryVariable(value, isLabelSize);
484
+ var isArbitraryVariableImage = (value) => getIsArbitraryVariable(value, isLabelImage);
485
+ var isArbitraryVariableShadow = (value) => getIsArbitraryVariable(value, isLabelShadow, true);
486
+ var isArbitraryVariableWeight = (value) => getIsArbitraryVariable(value, isLabelWeight, true);
487
+ var getIsArbitraryValue = (value, testLabel, testValue) => {
488
+ const result = arbitraryValueRegex.exec(value);
489
+ if (result) {
490
+ if (result[1]) {
491
+ return testLabel(result[1]);
492
+ }
493
+ return testValue(result[2]);
494
+ }
495
+ return false;
496
+ };
497
+ var getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {
498
+ const result = arbitraryVariableRegex.exec(value);
499
+ if (result) {
500
+ if (result[1]) {
501
+ return testLabel(result[1]);
502
+ }
503
+ return shouldMatchNoLabel;
504
+ }
505
+ return false;
506
+ };
507
+ var isLabelPosition = (label) => label === "position" || label === "percentage";
508
+ var isLabelImage = (label) => label === "image" || label === "url";
509
+ var isLabelSize = (label) => label === "length" || label === "size" || label === "bg-size";
510
+ var isLabelLength = (label) => label === "length";
511
+ var isLabelNumber = (label) => label === "number";
512
+ var isLabelFamilyName = (label) => label === "family-name";
513
+ var isLabelWeight = (label) => label === "number" || label === "weight";
514
+ var isLabelShadow = (label) => label === "shadow";
515
+ var getDefaultConfig = () => {
516
+ const themeColor = fromTheme("color");
517
+ const themeFont = fromTheme("font");
518
+ const themeText = fromTheme("text");
519
+ const themeFontWeight = fromTheme("font-weight");
520
+ const themeTracking = fromTheme("tracking");
521
+ const themeLeading = fromTheme("leading");
522
+ const themeBreakpoint = fromTheme("breakpoint");
523
+ const themeContainer = fromTheme("container");
524
+ const themeSpacing = fromTheme("spacing");
525
+ const themeRadius = fromTheme("radius");
526
+ const themeShadow = fromTheme("shadow");
527
+ const themeInsetShadow = fromTheme("inset-shadow");
528
+ const themeTextShadow = fromTheme("text-shadow");
529
+ const themeDropShadow = fromTheme("drop-shadow");
530
+ const themeBlur = fromTheme("blur");
531
+ const themePerspective = fromTheme("perspective");
532
+ const themeAspect = fromTheme("aspect");
533
+ const themeEase = fromTheme("ease");
534
+ const themeAnimate = fromTheme("animate");
535
+ const scaleBreak = () => ["auto", "avoid", "all", "avoid-page", "page", "left", "right", "column"];
536
+ const scalePosition = () => [
537
+ "center",
538
+ "top",
539
+ "bottom",
540
+ "left",
541
+ "right",
542
+ "top-left",
543
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
544
+ "left-top",
545
+ "top-right",
546
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
547
+ "right-top",
548
+ "bottom-right",
549
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
550
+ "right-bottom",
551
+ "bottom-left",
552
+ // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378
553
+ "left-bottom"
554
+ ];
555
+ const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];
556
+ const scaleOverflow = () => ["auto", "hidden", "clip", "visible", "scroll"];
557
+ const scaleOverscroll = () => ["auto", "contain", "none"];
558
+ const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];
559
+ const scaleInset = () => [isFraction, "full", "auto", ...scaleUnambiguousSpacing()];
560
+ const scaleGridTemplateColsRows = () => [isInteger, "none", "subgrid", isArbitraryVariable, isArbitraryValue];
561
+ const scaleGridColRowStartAndEnd = () => ["auto", {
562
+ span: ["full", isInteger, isArbitraryVariable, isArbitraryValue]
563
+ }, isInteger, isArbitraryVariable, isArbitraryValue];
564
+ const scaleGridColRowStartOrEnd = () => [isInteger, "auto", isArbitraryVariable, isArbitraryValue];
565
+ const scaleGridAutoColsRows = () => ["auto", "min", "max", "fr", isArbitraryVariable, isArbitraryValue];
566
+ const scaleAlignPrimaryAxis = () => ["start", "end", "center", "between", "around", "evenly", "stretch", "baseline", "center-safe", "end-safe"];
567
+ const scaleAlignSecondaryAxis = () => ["start", "end", "center", "stretch", "center-safe", "end-safe"];
568
+ const scaleMargin = () => ["auto", ...scaleUnambiguousSpacing()];
569
+ const scaleSizing = () => [isFraction, "auto", "full", "dvw", "dvh", "lvw", "lvh", "svw", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
570
+ const scaleSizingInline = () => [isFraction, "screen", "full", "dvw", "lvw", "svw", "min", "max", "fit", ...scaleUnambiguousSpacing()];
571
+ const scaleSizingBlock = () => [isFraction, "screen", "full", "lh", "dvh", "lvh", "svh", "min", "max", "fit", ...scaleUnambiguousSpacing()];
572
+ const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];
573
+ const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {
574
+ position: [isArbitraryVariable, isArbitraryValue]
575
+ }];
576
+ const scaleBgRepeat = () => ["no-repeat", {
577
+ repeat: ["", "x", "y", "space", "round"]
578
+ }];
579
+ const scaleBgSize = () => ["auto", "cover", "contain", isArbitraryVariableSize, isArbitrarySize, {
580
+ size: [isArbitraryVariable, isArbitraryValue]
581
+ }];
582
+ const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];
583
+ const scaleRadius = () => [
584
+ // Deprecated since Tailwind CSS v4.0.0
585
+ "",
586
+ "none",
587
+ "full",
588
+ themeRadius,
589
+ isArbitraryVariable,
590
+ isArbitraryValue
591
+ ];
592
+ const scaleBorderWidth = () => ["", isNumber, isArbitraryVariableLength, isArbitraryLength];
593
+ const scaleLineStyle = () => ["solid", "dashed", "dotted", "double"];
594
+ const scaleBlendMode = () => ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"];
595
+ const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];
596
+ const scaleBlur = () => [
597
+ // Deprecated since Tailwind CSS v4.0.0
598
+ "",
599
+ "none",
600
+ themeBlur,
601
+ isArbitraryVariable,
602
+ isArbitraryValue
603
+ ];
604
+ const scaleRotate = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
605
+ const scaleScale = () => ["none", isNumber, isArbitraryVariable, isArbitraryValue];
606
+ const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];
607
+ const scaleTranslate = () => [isFraction, "full", ...scaleUnambiguousSpacing()];
608
+ return {
609
+ cacheSize: 500,
610
+ theme: {
611
+ animate: ["spin", "ping", "pulse", "bounce"],
612
+ aspect: ["video"],
613
+ blur: [isTshirtSize],
614
+ breakpoint: [isTshirtSize],
615
+ color: [isAny],
616
+ container: [isTshirtSize],
617
+ "drop-shadow": [isTshirtSize],
618
+ ease: ["in", "out", "in-out"],
619
+ font: [isAnyNonArbitrary],
620
+ "font-weight": ["thin", "extralight", "light", "normal", "medium", "semibold", "bold", "extrabold", "black"],
621
+ "inset-shadow": [isTshirtSize],
622
+ leading: ["none", "tight", "snug", "normal", "relaxed", "loose"],
623
+ perspective: ["dramatic", "near", "normal", "midrange", "distant", "none"],
624
+ radius: [isTshirtSize],
625
+ shadow: [isTshirtSize],
626
+ spacing: ["px", isNumber],
627
+ text: [isTshirtSize],
628
+ "text-shadow": [isTshirtSize],
629
+ tracking: ["tighter", "tight", "normal", "wide", "wider", "widest"]
630
+ },
631
+ classGroups: {
632
+ // --------------
633
+ // --- Layout ---
634
+ // --------------
635
+ /**
636
+ * Aspect Ratio
637
+ * @see https://tailwindcss.com/docs/aspect-ratio
638
+ */
639
+ aspect: [{
640
+ aspect: ["auto", "square", isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]
641
+ }],
642
+ /**
643
+ * Container
644
+ * @see https://tailwindcss.com/docs/container
645
+ * @deprecated since Tailwind CSS v4.0.0
646
+ */
647
+ container: ["container"],
648
+ /**
649
+ * Columns
650
+ * @see https://tailwindcss.com/docs/columns
651
+ */
652
+ columns: [{
653
+ columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]
654
+ }],
655
+ /**
656
+ * Break After
657
+ * @see https://tailwindcss.com/docs/break-after
658
+ */
659
+ "break-after": [{
660
+ "break-after": scaleBreak()
661
+ }],
662
+ /**
663
+ * Break Before
664
+ * @see https://tailwindcss.com/docs/break-before
665
+ */
666
+ "break-before": [{
667
+ "break-before": scaleBreak()
668
+ }],
669
+ /**
670
+ * Break Inside
671
+ * @see https://tailwindcss.com/docs/break-inside
672
+ */
673
+ "break-inside": [{
674
+ "break-inside": ["auto", "avoid", "avoid-page", "avoid-column"]
675
+ }],
676
+ /**
677
+ * Box Decoration Break
678
+ * @see https://tailwindcss.com/docs/box-decoration-break
679
+ */
680
+ "box-decoration": [{
681
+ "box-decoration": ["slice", "clone"]
682
+ }],
683
+ /**
684
+ * Box Sizing
685
+ * @see https://tailwindcss.com/docs/box-sizing
686
+ */
687
+ box: [{
688
+ box: ["border", "content"]
689
+ }],
690
+ /**
691
+ * Display
692
+ * @see https://tailwindcss.com/docs/display
693
+ */
694
+ 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"],
695
+ /**
696
+ * Screen Reader Only
697
+ * @see https://tailwindcss.com/docs/display#screen-reader-only
698
+ */
699
+ sr: ["sr-only", "not-sr-only"],
700
+ /**
701
+ * Floats
702
+ * @see https://tailwindcss.com/docs/float
703
+ */
704
+ float: [{
705
+ float: ["right", "left", "none", "start", "end"]
706
+ }],
707
+ /**
708
+ * Clear
709
+ * @see https://tailwindcss.com/docs/clear
710
+ */
711
+ clear: [{
712
+ clear: ["left", "right", "both", "none", "start", "end"]
713
+ }],
714
+ /**
715
+ * Isolation
716
+ * @see https://tailwindcss.com/docs/isolation
717
+ */
718
+ isolation: ["isolate", "isolation-auto"],
719
+ /**
720
+ * Object Fit
721
+ * @see https://tailwindcss.com/docs/object-fit
722
+ */
723
+ "object-fit": [{
724
+ object: ["contain", "cover", "fill", "none", "scale-down"]
725
+ }],
726
+ /**
727
+ * Object Position
728
+ * @see https://tailwindcss.com/docs/object-position
729
+ */
730
+ "object-position": [{
731
+ object: scalePositionWithArbitrary()
732
+ }],
733
+ /**
734
+ * Overflow
735
+ * @see https://tailwindcss.com/docs/overflow
736
+ */
737
+ overflow: [{
738
+ overflow: scaleOverflow()
739
+ }],
740
+ /**
741
+ * Overflow X
742
+ * @see https://tailwindcss.com/docs/overflow
743
+ */
744
+ "overflow-x": [{
745
+ "overflow-x": scaleOverflow()
746
+ }],
747
+ /**
748
+ * Overflow Y
749
+ * @see https://tailwindcss.com/docs/overflow
750
+ */
751
+ "overflow-y": [{
752
+ "overflow-y": scaleOverflow()
753
+ }],
754
+ /**
755
+ * Overscroll Behavior
756
+ * @see https://tailwindcss.com/docs/overscroll-behavior
757
+ */
758
+ overscroll: [{
759
+ overscroll: scaleOverscroll()
760
+ }],
761
+ /**
762
+ * Overscroll Behavior X
763
+ * @see https://tailwindcss.com/docs/overscroll-behavior
764
+ */
765
+ "overscroll-x": [{
766
+ "overscroll-x": scaleOverscroll()
767
+ }],
768
+ /**
769
+ * Overscroll Behavior Y
770
+ * @see https://tailwindcss.com/docs/overscroll-behavior
771
+ */
772
+ "overscroll-y": [{
773
+ "overscroll-y": scaleOverscroll()
774
+ }],
775
+ /**
776
+ * Position
777
+ * @see https://tailwindcss.com/docs/position
778
+ */
779
+ position: ["static", "fixed", "absolute", "relative", "sticky"],
780
+ /**
781
+ * Inset
782
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
783
+ */
784
+ inset: [{
785
+ inset: scaleInset()
786
+ }],
787
+ /**
788
+ * Inset Inline
789
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
790
+ */
791
+ "inset-x": [{
792
+ "inset-x": scaleInset()
793
+ }],
794
+ /**
795
+ * Inset Block
796
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
797
+ */
798
+ "inset-y": [{
799
+ "inset-y": scaleInset()
800
+ }],
801
+ /**
802
+ * Inset Inline Start
803
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
804
+ * @todo class group will be renamed to `inset-s` in next major release
805
+ */
806
+ start: [{
807
+ "inset-s": scaleInset(),
808
+ /**
809
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.
810
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
811
+ */
812
+ start: scaleInset()
813
+ }],
814
+ /**
815
+ * Inset Inline End
816
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
817
+ * @todo class group will be renamed to `inset-e` in next major release
818
+ */
819
+ end: [{
820
+ "inset-e": scaleInset(),
821
+ /**
822
+ * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.
823
+ * @see https://github.com/tailwindlabs/tailwindcss/pull/19613
824
+ */
825
+ end: scaleInset()
826
+ }],
827
+ /**
828
+ * Inset Block Start
829
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
830
+ */
831
+ "inset-bs": [{
832
+ "inset-bs": scaleInset()
833
+ }],
834
+ /**
835
+ * Inset Block End
836
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
837
+ */
838
+ "inset-be": [{
839
+ "inset-be": scaleInset()
840
+ }],
841
+ /**
842
+ * Top
843
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
844
+ */
845
+ top: [{
846
+ top: scaleInset()
847
+ }],
848
+ /**
849
+ * Right
850
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
851
+ */
852
+ right: [{
853
+ right: scaleInset()
854
+ }],
855
+ /**
856
+ * Bottom
857
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
858
+ */
859
+ bottom: [{
860
+ bottom: scaleInset()
861
+ }],
862
+ /**
863
+ * Left
864
+ * @see https://tailwindcss.com/docs/top-right-bottom-left
865
+ */
866
+ left: [{
867
+ left: scaleInset()
868
+ }],
869
+ /**
870
+ * Visibility
871
+ * @see https://tailwindcss.com/docs/visibility
872
+ */
873
+ visibility: ["visible", "invisible", "collapse"],
874
+ /**
875
+ * Z-Index
876
+ * @see https://tailwindcss.com/docs/z-index
877
+ */
878
+ z: [{
879
+ z: [isInteger, "auto", isArbitraryVariable, isArbitraryValue]
880
+ }],
881
+ // ------------------------
882
+ // --- Flexbox and Grid ---
883
+ // ------------------------
884
+ /**
885
+ * Flex Basis
886
+ * @see https://tailwindcss.com/docs/flex-basis
887
+ */
888
+ basis: [{
889
+ basis: [isFraction, "full", "auto", themeContainer, ...scaleUnambiguousSpacing()]
890
+ }],
891
+ /**
892
+ * Flex Direction
893
+ * @see https://tailwindcss.com/docs/flex-direction
894
+ */
895
+ "flex-direction": [{
896
+ flex: ["row", "row-reverse", "col", "col-reverse"]
897
+ }],
898
+ /**
899
+ * Flex Wrap
900
+ * @see https://tailwindcss.com/docs/flex-wrap
901
+ */
902
+ "flex-wrap": [{
903
+ flex: ["nowrap", "wrap", "wrap-reverse"]
904
+ }],
905
+ /**
906
+ * Flex
907
+ * @see https://tailwindcss.com/docs/flex
908
+ */
909
+ flex: [{
910
+ flex: [isNumber, isFraction, "auto", "initial", "none", isArbitraryValue]
911
+ }],
912
+ /**
913
+ * Flex Grow
914
+ * @see https://tailwindcss.com/docs/flex-grow
915
+ */
916
+ grow: [{
917
+ grow: ["", isNumber, isArbitraryVariable, isArbitraryValue]
918
+ }],
919
+ /**
920
+ * Flex Shrink
921
+ * @see https://tailwindcss.com/docs/flex-shrink
922
+ */
923
+ shrink: [{
924
+ shrink: ["", isNumber, isArbitraryVariable, isArbitraryValue]
925
+ }],
926
+ /**
927
+ * Order
928
+ * @see https://tailwindcss.com/docs/order
929
+ */
930
+ order: [{
931
+ order: [isInteger, "first", "last", "none", isArbitraryVariable, isArbitraryValue]
932
+ }],
933
+ /**
934
+ * Grid Template Columns
935
+ * @see https://tailwindcss.com/docs/grid-template-columns
936
+ */
937
+ "grid-cols": [{
938
+ "grid-cols": scaleGridTemplateColsRows()
939
+ }],
940
+ /**
941
+ * Grid Column Start / End
942
+ * @see https://tailwindcss.com/docs/grid-column
943
+ */
944
+ "col-start-end": [{
945
+ col: scaleGridColRowStartAndEnd()
946
+ }],
947
+ /**
948
+ * Grid Column Start
949
+ * @see https://tailwindcss.com/docs/grid-column
950
+ */
951
+ "col-start": [{
952
+ "col-start": scaleGridColRowStartOrEnd()
953
+ }],
954
+ /**
955
+ * Grid Column End
956
+ * @see https://tailwindcss.com/docs/grid-column
957
+ */
958
+ "col-end": [{
959
+ "col-end": scaleGridColRowStartOrEnd()
960
+ }],
961
+ /**
962
+ * Grid Template Rows
963
+ * @see https://tailwindcss.com/docs/grid-template-rows
964
+ */
965
+ "grid-rows": [{
966
+ "grid-rows": scaleGridTemplateColsRows()
967
+ }],
968
+ /**
969
+ * Grid Row Start / End
970
+ * @see https://tailwindcss.com/docs/grid-row
971
+ */
972
+ "row-start-end": [{
973
+ row: scaleGridColRowStartAndEnd()
974
+ }],
975
+ /**
976
+ * Grid Row Start
977
+ * @see https://tailwindcss.com/docs/grid-row
978
+ */
979
+ "row-start": [{
980
+ "row-start": scaleGridColRowStartOrEnd()
981
+ }],
982
+ /**
983
+ * Grid Row End
984
+ * @see https://tailwindcss.com/docs/grid-row
985
+ */
986
+ "row-end": [{
987
+ "row-end": scaleGridColRowStartOrEnd()
988
+ }],
989
+ /**
990
+ * Grid Auto Flow
991
+ * @see https://tailwindcss.com/docs/grid-auto-flow
992
+ */
993
+ "grid-flow": [{
994
+ "grid-flow": ["row", "col", "dense", "row-dense", "col-dense"]
995
+ }],
996
+ /**
997
+ * Grid Auto Columns
998
+ * @see https://tailwindcss.com/docs/grid-auto-columns
999
+ */
1000
+ "auto-cols": [{
1001
+ "auto-cols": scaleGridAutoColsRows()
1002
+ }],
1003
+ /**
1004
+ * Grid Auto Rows
1005
+ * @see https://tailwindcss.com/docs/grid-auto-rows
1006
+ */
1007
+ "auto-rows": [{
1008
+ "auto-rows": scaleGridAutoColsRows()
1009
+ }],
1010
+ /**
1011
+ * Gap
1012
+ * @see https://tailwindcss.com/docs/gap
1013
+ */
1014
+ gap: [{
1015
+ gap: scaleUnambiguousSpacing()
1016
+ }],
1017
+ /**
1018
+ * Gap X
1019
+ * @see https://tailwindcss.com/docs/gap
1020
+ */
1021
+ "gap-x": [{
1022
+ "gap-x": scaleUnambiguousSpacing()
1023
+ }],
1024
+ /**
1025
+ * Gap Y
1026
+ * @see https://tailwindcss.com/docs/gap
1027
+ */
1028
+ "gap-y": [{
1029
+ "gap-y": scaleUnambiguousSpacing()
1030
+ }],
1031
+ /**
1032
+ * Justify Content
1033
+ * @see https://tailwindcss.com/docs/justify-content
1034
+ */
1035
+ "justify-content": [{
1036
+ justify: [...scaleAlignPrimaryAxis(), "normal"]
1037
+ }],
1038
+ /**
1039
+ * Justify Items
1040
+ * @see https://tailwindcss.com/docs/justify-items
1041
+ */
1042
+ "justify-items": [{
1043
+ "justify-items": [...scaleAlignSecondaryAxis(), "normal"]
1044
+ }],
1045
+ /**
1046
+ * Justify Self
1047
+ * @see https://tailwindcss.com/docs/justify-self
1048
+ */
1049
+ "justify-self": [{
1050
+ "justify-self": ["auto", ...scaleAlignSecondaryAxis()]
1051
+ }],
1052
+ /**
1053
+ * Align Content
1054
+ * @see https://tailwindcss.com/docs/align-content
1055
+ */
1056
+ "align-content": [{
1057
+ content: ["normal", ...scaleAlignPrimaryAxis()]
1058
+ }],
1059
+ /**
1060
+ * Align Items
1061
+ * @see https://tailwindcss.com/docs/align-items
1062
+ */
1063
+ "align-items": [{
1064
+ items: [...scaleAlignSecondaryAxis(), {
1065
+ baseline: ["", "last"]
1066
+ }]
1067
+ }],
1068
+ /**
1069
+ * Align Self
1070
+ * @see https://tailwindcss.com/docs/align-self
1071
+ */
1072
+ "align-self": [{
1073
+ self: ["auto", ...scaleAlignSecondaryAxis(), {
1074
+ baseline: ["", "last"]
1075
+ }]
1076
+ }],
1077
+ /**
1078
+ * Place Content
1079
+ * @see https://tailwindcss.com/docs/place-content
1080
+ */
1081
+ "place-content": [{
1082
+ "place-content": scaleAlignPrimaryAxis()
1083
+ }],
1084
+ /**
1085
+ * Place Items
1086
+ * @see https://tailwindcss.com/docs/place-items
1087
+ */
1088
+ "place-items": [{
1089
+ "place-items": [...scaleAlignSecondaryAxis(), "baseline"]
1090
+ }],
1091
+ /**
1092
+ * Place Self
1093
+ * @see https://tailwindcss.com/docs/place-self
1094
+ */
1095
+ "place-self": [{
1096
+ "place-self": ["auto", ...scaleAlignSecondaryAxis()]
1097
+ }],
1098
+ // Spacing
1099
+ /**
1100
+ * Padding
1101
+ * @see https://tailwindcss.com/docs/padding
1102
+ */
1103
+ p: [{
1104
+ p: scaleUnambiguousSpacing()
1105
+ }],
1106
+ /**
1107
+ * Padding Inline
1108
+ * @see https://tailwindcss.com/docs/padding
1109
+ */
1110
+ px: [{
1111
+ px: scaleUnambiguousSpacing()
1112
+ }],
1113
+ /**
1114
+ * Padding Block
1115
+ * @see https://tailwindcss.com/docs/padding
1116
+ */
1117
+ py: [{
1118
+ py: scaleUnambiguousSpacing()
1119
+ }],
1120
+ /**
1121
+ * Padding Inline Start
1122
+ * @see https://tailwindcss.com/docs/padding
1123
+ */
1124
+ ps: [{
1125
+ ps: scaleUnambiguousSpacing()
1126
+ }],
1127
+ /**
1128
+ * Padding Inline End
1129
+ * @see https://tailwindcss.com/docs/padding
1130
+ */
1131
+ pe: [{
1132
+ pe: scaleUnambiguousSpacing()
1133
+ }],
1134
+ /**
1135
+ * Padding Block Start
1136
+ * @see https://tailwindcss.com/docs/padding
1137
+ */
1138
+ pbs: [{
1139
+ pbs: scaleUnambiguousSpacing()
1140
+ }],
1141
+ /**
1142
+ * Padding Block End
1143
+ * @see https://tailwindcss.com/docs/padding
1144
+ */
1145
+ pbe: [{
1146
+ pbe: scaleUnambiguousSpacing()
1147
+ }],
1148
+ /**
1149
+ * Padding Top
1150
+ * @see https://tailwindcss.com/docs/padding
1151
+ */
1152
+ pt: [{
1153
+ pt: scaleUnambiguousSpacing()
1154
+ }],
1155
+ /**
1156
+ * Padding Right
1157
+ * @see https://tailwindcss.com/docs/padding
1158
+ */
1159
+ pr: [{
1160
+ pr: scaleUnambiguousSpacing()
1161
+ }],
1162
+ /**
1163
+ * Padding Bottom
1164
+ * @see https://tailwindcss.com/docs/padding
1165
+ */
1166
+ pb: [{
1167
+ pb: scaleUnambiguousSpacing()
1168
+ }],
1169
+ /**
1170
+ * Padding Left
1171
+ * @see https://tailwindcss.com/docs/padding
1172
+ */
1173
+ pl: [{
1174
+ pl: scaleUnambiguousSpacing()
1175
+ }],
1176
+ /**
1177
+ * Margin
1178
+ * @see https://tailwindcss.com/docs/margin
1179
+ */
1180
+ m: [{
1181
+ m: scaleMargin()
1182
+ }],
1183
+ /**
1184
+ * Margin Inline
1185
+ * @see https://tailwindcss.com/docs/margin
1186
+ */
1187
+ mx: [{
1188
+ mx: scaleMargin()
1189
+ }],
1190
+ /**
1191
+ * Margin Block
1192
+ * @see https://tailwindcss.com/docs/margin
1193
+ */
1194
+ my: [{
1195
+ my: scaleMargin()
1196
+ }],
1197
+ /**
1198
+ * Margin Inline Start
1199
+ * @see https://tailwindcss.com/docs/margin
1200
+ */
1201
+ ms: [{
1202
+ ms: scaleMargin()
1203
+ }],
1204
+ /**
1205
+ * Margin Inline End
1206
+ * @see https://tailwindcss.com/docs/margin
1207
+ */
1208
+ me: [{
1209
+ me: scaleMargin()
1210
+ }],
1211
+ /**
1212
+ * Margin Block Start
1213
+ * @see https://tailwindcss.com/docs/margin
1214
+ */
1215
+ mbs: [{
1216
+ mbs: scaleMargin()
1217
+ }],
1218
+ /**
1219
+ * Margin Block End
1220
+ * @see https://tailwindcss.com/docs/margin
1221
+ */
1222
+ mbe: [{
1223
+ mbe: scaleMargin()
1224
+ }],
1225
+ /**
1226
+ * Margin Top
1227
+ * @see https://tailwindcss.com/docs/margin
1228
+ */
1229
+ mt: [{
1230
+ mt: scaleMargin()
1231
+ }],
1232
+ /**
1233
+ * Margin Right
1234
+ * @see https://tailwindcss.com/docs/margin
1235
+ */
1236
+ mr: [{
1237
+ mr: scaleMargin()
1238
+ }],
1239
+ /**
1240
+ * Margin Bottom
1241
+ * @see https://tailwindcss.com/docs/margin
1242
+ */
1243
+ mb: [{
1244
+ mb: scaleMargin()
1245
+ }],
1246
+ /**
1247
+ * Margin Left
1248
+ * @see https://tailwindcss.com/docs/margin
1249
+ */
1250
+ ml: [{
1251
+ ml: scaleMargin()
1252
+ }],
1253
+ /**
1254
+ * Space Between X
1255
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1256
+ */
1257
+ "space-x": [{
1258
+ "space-x": scaleUnambiguousSpacing()
1259
+ }],
1260
+ /**
1261
+ * Space Between X Reverse
1262
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1263
+ */
1264
+ "space-x-reverse": ["space-x-reverse"],
1265
+ /**
1266
+ * Space Between Y
1267
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1268
+ */
1269
+ "space-y": [{
1270
+ "space-y": scaleUnambiguousSpacing()
1271
+ }],
1272
+ /**
1273
+ * Space Between Y Reverse
1274
+ * @see https://tailwindcss.com/docs/margin#adding-space-between-children
1275
+ */
1276
+ "space-y-reverse": ["space-y-reverse"],
1277
+ // --------------
1278
+ // --- Sizing ---
1279
+ // --------------
1280
+ /**
1281
+ * Size
1282
+ * @see https://tailwindcss.com/docs/width#setting-both-width-and-height
1283
+ */
1284
+ size: [{
1285
+ size: scaleSizing()
1286
+ }],
1287
+ /**
1288
+ * Inline Size
1289
+ * @see https://tailwindcss.com/docs/width
1290
+ */
1291
+ "inline-size": [{
1292
+ inline: ["auto", ...scaleSizingInline()]
1293
+ }],
1294
+ /**
1295
+ * Min-Inline Size
1296
+ * @see https://tailwindcss.com/docs/min-width
1297
+ */
1298
+ "min-inline-size": [{
1299
+ "min-inline": ["auto", ...scaleSizingInline()]
1300
+ }],
1301
+ /**
1302
+ * Max-Inline Size
1303
+ * @see https://tailwindcss.com/docs/max-width
1304
+ */
1305
+ "max-inline-size": [{
1306
+ "max-inline": ["none", ...scaleSizingInline()]
1307
+ }],
1308
+ /**
1309
+ * Block Size
1310
+ * @see https://tailwindcss.com/docs/height
1311
+ */
1312
+ "block-size": [{
1313
+ block: ["auto", ...scaleSizingBlock()]
1314
+ }],
1315
+ /**
1316
+ * Min-Block Size
1317
+ * @see https://tailwindcss.com/docs/min-height
1318
+ */
1319
+ "min-block-size": [{
1320
+ "min-block": ["auto", ...scaleSizingBlock()]
1321
+ }],
1322
+ /**
1323
+ * Max-Block Size
1324
+ * @see https://tailwindcss.com/docs/max-height
1325
+ */
1326
+ "max-block-size": [{
1327
+ "max-block": ["none", ...scaleSizingBlock()]
1328
+ }],
1329
+ /**
1330
+ * Width
1331
+ * @see https://tailwindcss.com/docs/width
1332
+ */
1333
+ w: [{
1334
+ w: [themeContainer, "screen", ...scaleSizing()]
1335
+ }],
1336
+ /**
1337
+ * Min-Width
1338
+ * @see https://tailwindcss.com/docs/min-width
1339
+ */
1340
+ "min-w": [{
1341
+ "min-w": [
1342
+ themeContainer,
1343
+ "screen",
1344
+ /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1345
+ "none",
1346
+ ...scaleSizing()
1347
+ ]
1348
+ }],
1349
+ /**
1350
+ * Max-Width
1351
+ * @see https://tailwindcss.com/docs/max-width
1352
+ */
1353
+ "max-w": [{
1354
+ "max-w": [
1355
+ themeContainer,
1356
+ "screen",
1357
+ "none",
1358
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1359
+ "prose",
1360
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1361
+ {
1362
+ screen: [themeBreakpoint]
1363
+ },
1364
+ ...scaleSizing()
1365
+ ]
1366
+ }],
1367
+ /**
1368
+ * Height
1369
+ * @see https://tailwindcss.com/docs/height
1370
+ */
1371
+ h: [{
1372
+ h: ["screen", "lh", ...scaleSizing()]
1373
+ }],
1374
+ /**
1375
+ * Min-Height
1376
+ * @see https://tailwindcss.com/docs/min-height
1377
+ */
1378
+ "min-h": [{
1379
+ "min-h": ["screen", "lh", "none", ...scaleSizing()]
1380
+ }],
1381
+ /**
1382
+ * Max-Height
1383
+ * @see https://tailwindcss.com/docs/max-height
1384
+ */
1385
+ "max-h": [{
1386
+ "max-h": ["screen", "lh", ...scaleSizing()]
1387
+ }],
1388
+ // ------------------
1389
+ // --- Typography ---
1390
+ // ------------------
1391
+ /**
1392
+ * Font Size
1393
+ * @see https://tailwindcss.com/docs/font-size
1394
+ */
1395
+ "font-size": [{
1396
+ text: ["base", themeText, isArbitraryVariableLength, isArbitraryLength]
1397
+ }],
1398
+ /**
1399
+ * Font Smoothing
1400
+ * @see https://tailwindcss.com/docs/font-smoothing
1401
+ */
1402
+ "font-smoothing": ["antialiased", "subpixel-antialiased"],
1403
+ /**
1404
+ * Font Style
1405
+ * @see https://tailwindcss.com/docs/font-style
1406
+ */
1407
+ "font-style": ["italic", "not-italic"],
1408
+ /**
1409
+ * Font Weight
1410
+ * @see https://tailwindcss.com/docs/font-weight
1411
+ */
1412
+ "font-weight": [{
1413
+ font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]
1414
+ }],
1415
+ /**
1416
+ * Font Stretch
1417
+ * @see https://tailwindcss.com/docs/font-stretch
1418
+ */
1419
+ "font-stretch": [{
1420
+ "font-stretch": ["ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "normal", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded", isPercent, isArbitraryValue]
1421
+ }],
1422
+ /**
1423
+ * Font Family
1424
+ * @see https://tailwindcss.com/docs/font-family
1425
+ */
1426
+ "font-family": [{
1427
+ font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]
1428
+ }],
1429
+ /**
1430
+ * Font Feature Settings
1431
+ * @see https://tailwindcss.com/docs/font-feature-settings
1432
+ */
1433
+ "font-features": [{
1434
+ "font-features": [isArbitraryValue]
1435
+ }],
1436
+ /**
1437
+ * Font Variant Numeric
1438
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1439
+ */
1440
+ "fvn-normal": ["normal-nums"],
1441
+ /**
1442
+ * Font Variant Numeric
1443
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1444
+ */
1445
+ "fvn-ordinal": ["ordinal"],
1446
+ /**
1447
+ * Font Variant Numeric
1448
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1449
+ */
1450
+ "fvn-slashed-zero": ["slashed-zero"],
1451
+ /**
1452
+ * Font Variant Numeric
1453
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1454
+ */
1455
+ "fvn-figure": ["lining-nums", "oldstyle-nums"],
1456
+ /**
1457
+ * Font Variant Numeric
1458
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1459
+ */
1460
+ "fvn-spacing": ["proportional-nums", "tabular-nums"],
1461
+ /**
1462
+ * Font Variant Numeric
1463
+ * @see https://tailwindcss.com/docs/font-variant-numeric
1464
+ */
1465
+ "fvn-fraction": ["diagonal-fractions", "stacked-fractions"],
1466
+ /**
1467
+ * Letter Spacing
1468
+ * @see https://tailwindcss.com/docs/letter-spacing
1469
+ */
1470
+ tracking: [{
1471
+ tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]
1472
+ }],
1473
+ /**
1474
+ * Line Clamp
1475
+ * @see https://tailwindcss.com/docs/line-clamp
1476
+ */
1477
+ "line-clamp": [{
1478
+ "line-clamp": [isNumber, "none", isArbitraryVariable, isArbitraryNumber]
1479
+ }],
1480
+ /**
1481
+ * Line Height
1482
+ * @see https://tailwindcss.com/docs/line-height
1483
+ */
1484
+ leading: [{
1485
+ leading: [
1486
+ /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */
1487
+ themeLeading,
1488
+ ...scaleUnambiguousSpacing()
1489
+ ]
1490
+ }],
1491
+ /**
1492
+ * List Style Image
1493
+ * @see https://tailwindcss.com/docs/list-style-image
1494
+ */
1495
+ "list-image": [{
1496
+ "list-image": ["none", isArbitraryVariable, isArbitraryValue]
1497
+ }],
1498
+ /**
1499
+ * List Style Position
1500
+ * @see https://tailwindcss.com/docs/list-style-position
1501
+ */
1502
+ "list-style-position": [{
1503
+ list: ["inside", "outside"]
1504
+ }],
1505
+ /**
1506
+ * List Style Type
1507
+ * @see https://tailwindcss.com/docs/list-style-type
1508
+ */
1509
+ "list-style-type": [{
1510
+ list: ["disc", "decimal", "none", isArbitraryVariable, isArbitraryValue]
1511
+ }],
1512
+ /**
1513
+ * Text Alignment
1514
+ * @see https://tailwindcss.com/docs/text-align
1515
+ */
1516
+ "text-alignment": [{
1517
+ text: ["left", "center", "right", "justify", "start", "end"]
1518
+ }],
1519
+ /**
1520
+ * Placeholder Color
1521
+ * @deprecated since Tailwind CSS v3.0.0
1522
+ * @see https://v3.tailwindcss.com/docs/placeholder-color
1523
+ */
1524
+ "placeholder-color": [{
1525
+ placeholder: scaleColor()
1526
+ }],
1527
+ /**
1528
+ * Text Color
1529
+ * @see https://tailwindcss.com/docs/text-color
1530
+ */
1531
+ "text-color": [{
1532
+ text: scaleColor()
1533
+ }],
1534
+ /**
1535
+ * Text Decoration
1536
+ * @see https://tailwindcss.com/docs/text-decoration
1537
+ */
1538
+ "text-decoration": ["underline", "overline", "line-through", "no-underline"],
1539
+ /**
1540
+ * Text Decoration Style
1541
+ * @see https://tailwindcss.com/docs/text-decoration-style
1542
+ */
1543
+ "text-decoration-style": [{
1544
+ decoration: [...scaleLineStyle(), "wavy"]
1545
+ }],
1546
+ /**
1547
+ * Text Decoration Thickness
1548
+ * @see https://tailwindcss.com/docs/text-decoration-thickness
1549
+ */
1550
+ "text-decoration-thickness": [{
1551
+ decoration: [isNumber, "from-font", "auto", isArbitraryVariable, isArbitraryLength]
1552
+ }],
1553
+ /**
1554
+ * Text Decoration Color
1555
+ * @see https://tailwindcss.com/docs/text-decoration-color
1556
+ */
1557
+ "text-decoration-color": [{
1558
+ decoration: scaleColor()
1559
+ }],
1560
+ /**
1561
+ * Text Underline Offset
1562
+ * @see https://tailwindcss.com/docs/text-underline-offset
1563
+ */
1564
+ "underline-offset": [{
1565
+ "underline-offset": [isNumber, "auto", isArbitraryVariable, isArbitraryValue]
1566
+ }],
1567
+ /**
1568
+ * Text Transform
1569
+ * @see https://tailwindcss.com/docs/text-transform
1570
+ */
1571
+ "text-transform": ["uppercase", "lowercase", "capitalize", "normal-case"],
1572
+ /**
1573
+ * Text Overflow
1574
+ * @see https://tailwindcss.com/docs/text-overflow
1575
+ */
1576
+ "text-overflow": ["truncate", "text-ellipsis", "text-clip"],
1577
+ /**
1578
+ * Text Wrap
1579
+ * @see https://tailwindcss.com/docs/text-wrap
1580
+ */
1581
+ "text-wrap": [{
1582
+ text: ["wrap", "nowrap", "balance", "pretty"]
1583
+ }],
1584
+ /**
1585
+ * Text Indent
1586
+ * @see https://tailwindcss.com/docs/text-indent
1587
+ */
1588
+ indent: [{
1589
+ indent: scaleUnambiguousSpacing()
1590
+ }],
1591
+ /**
1592
+ * Vertical Alignment
1593
+ * @see https://tailwindcss.com/docs/vertical-align
1594
+ */
1595
+ "vertical-align": [{
1596
+ align: ["baseline", "top", "middle", "bottom", "text-top", "text-bottom", "sub", "super", isArbitraryVariable, isArbitraryValue]
1597
+ }],
1598
+ /**
1599
+ * Whitespace
1600
+ * @see https://tailwindcss.com/docs/whitespace
1601
+ */
1602
+ whitespace: [{
1603
+ whitespace: ["normal", "nowrap", "pre", "pre-line", "pre-wrap", "break-spaces"]
1604
+ }],
1605
+ /**
1606
+ * Word Break
1607
+ * @see https://tailwindcss.com/docs/word-break
1608
+ */
1609
+ break: [{
1610
+ break: ["normal", "words", "all", "keep"]
1611
+ }],
1612
+ /**
1613
+ * Overflow Wrap
1614
+ * @see https://tailwindcss.com/docs/overflow-wrap
1615
+ */
1616
+ wrap: [{
1617
+ wrap: ["break-word", "anywhere", "normal"]
1618
+ }],
1619
+ /**
1620
+ * Hyphens
1621
+ * @see https://tailwindcss.com/docs/hyphens
1622
+ */
1623
+ hyphens: [{
1624
+ hyphens: ["none", "manual", "auto"]
1625
+ }],
1626
+ /**
1627
+ * Content
1628
+ * @see https://tailwindcss.com/docs/content
1629
+ */
1630
+ content: [{
1631
+ content: ["none", isArbitraryVariable, isArbitraryValue]
1632
+ }],
1633
+ // -------------------
1634
+ // --- Backgrounds ---
1635
+ // -------------------
1636
+ /**
1637
+ * Background Attachment
1638
+ * @see https://tailwindcss.com/docs/background-attachment
1639
+ */
1640
+ "bg-attachment": [{
1641
+ bg: ["fixed", "local", "scroll"]
1642
+ }],
1643
+ /**
1644
+ * Background Clip
1645
+ * @see https://tailwindcss.com/docs/background-clip
1646
+ */
1647
+ "bg-clip": [{
1648
+ "bg-clip": ["border", "padding", "content", "text"]
1649
+ }],
1650
+ /**
1651
+ * Background Origin
1652
+ * @see https://tailwindcss.com/docs/background-origin
1653
+ */
1654
+ "bg-origin": [{
1655
+ "bg-origin": ["border", "padding", "content"]
1656
+ }],
1657
+ /**
1658
+ * Background Position
1659
+ * @see https://tailwindcss.com/docs/background-position
1660
+ */
1661
+ "bg-position": [{
1662
+ bg: scaleBgPosition()
1663
+ }],
1664
+ /**
1665
+ * Background Repeat
1666
+ * @see https://tailwindcss.com/docs/background-repeat
1667
+ */
1668
+ "bg-repeat": [{
1669
+ bg: scaleBgRepeat()
1670
+ }],
1671
+ /**
1672
+ * Background Size
1673
+ * @see https://tailwindcss.com/docs/background-size
1674
+ */
1675
+ "bg-size": [{
1676
+ bg: scaleBgSize()
1677
+ }],
1678
+ /**
1679
+ * Background Image
1680
+ * @see https://tailwindcss.com/docs/background-image
1681
+ */
1682
+ "bg-image": [{
1683
+ bg: ["none", {
1684
+ linear: [{
1685
+ to: ["t", "tr", "r", "br", "b", "bl", "l", "tl"]
1686
+ }, isInteger, isArbitraryVariable, isArbitraryValue],
1687
+ radial: ["", isArbitraryVariable, isArbitraryValue],
1688
+ conic: [isInteger, isArbitraryVariable, isArbitraryValue]
1689
+ }, isArbitraryVariableImage, isArbitraryImage]
1690
+ }],
1691
+ /**
1692
+ * Background Color
1693
+ * @see https://tailwindcss.com/docs/background-color
1694
+ */
1695
+ "bg-color": [{
1696
+ bg: scaleColor()
1697
+ }],
1698
+ /**
1699
+ * Gradient Color Stops From Position
1700
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1701
+ */
1702
+ "gradient-from-pos": [{
1703
+ from: scaleGradientStopPosition()
1704
+ }],
1705
+ /**
1706
+ * Gradient Color Stops Via Position
1707
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1708
+ */
1709
+ "gradient-via-pos": [{
1710
+ via: scaleGradientStopPosition()
1711
+ }],
1712
+ /**
1713
+ * Gradient Color Stops To Position
1714
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1715
+ */
1716
+ "gradient-to-pos": [{
1717
+ to: scaleGradientStopPosition()
1718
+ }],
1719
+ /**
1720
+ * Gradient Color Stops From
1721
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1722
+ */
1723
+ "gradient-from": [{
1724
+ from: scaleColor()
1725
+ }],
1726
+ /**
1727
+ * Gradient Color Stops Via
1728
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1729
+ */
1730
+ "gradient-via": [{
1731
+ via: scaleColor()
1732
+ }],
1733
+ /**
1734
+ * Gradient Color Stops To
1735
+ * @see https://tailwindcss.com/docs/gradient-color-stops
1736
+ */
1737
+ "gradient-to": [{
1738
+ to: scaleColor()
1739
+ }],
1740
+ // ---------------
1741
+ // --- Borders ---
1742
+ // ---------------
1743
+ /**
1744
+ * Border Radius
1745
+ * @see https://tailwindcss.com/docs/border-radius
1746
+ */
1747
+ rounded: [{
1748
+ rounded: scaleRadius()
1749
+ }],
1750
+ /**
1751
+ * Border Radius Start
1752
+ * @see https://tailwindcss.com/docs/border-radius
1753
+ */
1754
+ "rounded-s": [{
1755
+ "rounded-s": scaleRadius()
1756
+ }],
1757
+ /**
1758
+ * Border Radius End
1759
+ * @see https://tailwindcss.com/docs/border-radius
1760
+ */
1761
+ "rounded-e": [{
1762
+ "rounded-e": scaleRadius()
1763
+ }],
1764
+ /**
1765
+ * Border Radius Top
1766
+ * @see https://tailwindcss.com/docs/border-radius
1767
+ */
1768
+ "rounded-t": [{
1769
+ "rounded-t": scaleRadius()
1770
+ }],
1771
+ /**
1772
+ * Border Radius Right
1773
+ * @see https://tailwindcss.com/docs/border-radius
1774
+ */
1775
+ "rounded-r": [{
1776
+ "rounded-r": scaleRadius()
1777
+ }],
1778
+ /**
1779
+ * Border Radius Bottom
1780
+ * @see https://tailwindcss.com/docs/border-radius
1781
+ */
1782
+ "rounded-b": [{
1783
+ "rounded-b": scaleRadius()
1784
+ }],
1785
+ /**
1786
+ * Border Radius Left
1787
+ * @see https://tailwindcss.com/docs/border-radius
1788
+ */
1789
+ "rounded-l": [{
1790
+ "rounded-l": scaleRadius()
1791
+ }],
1792
+ /**
1793
+ * Border Radius Start Start
1794
+ * @see https://tailwindcss.com/docs/border-radius
1795
+ */
1796
+ "rounded-ss": [{
1797
+ "rounded-ss": scaleRadius()
1798
+ }],
1799
+ /**
1800
+ * Border Radius Start End
1801
+ * @see https://tailwindcss.com/docs/border-radius
1802
+ */
1803
+ "rounded-se": [{
1804
+ "rounded-se": scaleRadius()
1805
+ }],
1806
+ /**
1807
+ * Border Radius End End
1808
+ * @see https://tailwindcss.com/docs/border-radius
1809
+ */
1810
+ "rounded-ee": [{
1811
+ "rounded-ee": scaleRadius()
1812
+ }],
1813
+ /**
1814
+ * Border Radius End Start
1815
+ * @see https://tailwindcss.com/docs/border-radius
1816
+ */
1817
+ "rounded-es": [{
1818
+ "rounded-es": scaleRadius()
1819
+ }],
1820
+ /**
1821
+ * Border Radius Top Left
1822
+ * @see https://tailwindcss.com/docs/border-radius
1823
+ */
1824
+ "rounded-tl": [{
1825
+ "rounded-tl": scaleRadius()
1826
+ }],
1827
+ /**
1828
+ * Border Radius Top Right
1829
+ * @see https://tailwindcss.com/docs/border-radius
1830
+ */
1831
+ "rounded-tr": [{
1832
+ "rounded-tr": scaleRadius()
1833
+ }],
1834
+ /**
1835
+ * Border Radius Bottom Right
1836
+ * @see https://tailwindcss.com/docs/border-radius
1837
+ */
1838
+ "rounded-br": [{
1839
+ "rounded-br": scaleRadius()
1840
+ }],
1841
+ /**
1842
+ * Border Radius Bottom Left
1843
+ * @see https://tailwindcss.com/docs/border-radius
1844
+ */
1845
+ "rounded-bl": [{
1846
+ "rounded-bl": scaleRadius()
1847
+ }],
1848
+ /**
1849
+ * Border Width
1850
+ * @see https://tailwindcss.com/docs/border-width
1851
+ */
1852
+ "border-w": [{
1853
+ border: scaleBorderWidth()
1854
+ }],
1855
+ /**
1856
+ * Border Width Inline
1857
+ * @see https://tailwindcss.com/docs/border-width
1858
+ */
1859
+ "border-w-x": [{
1860
+ "border-x": scaleBorderWidth()
1861
+ }],
1862
+ /**
1863
+ * Border Width Block
1864
+ * @see https://tailwindcss.com/docs/border-width
1865
+ */
1866
+ "border-w-y": [{
1867
+ "border-y": scaleBorderWidth()
1868
+ }],
1869
+ /**
1870
+ * Border Width Inline Start
1871
+ * @see https://tailwindcss.com/docs/border-width
1872
+ */
1873
+ "border-w-s": [{
1874
+ "border-s": scaleBorderWidth()
1875
+ }],
1876
+ /**
1877
+ * Border Width Inline End
1878
+ * @see https://tailwindcss.com/docs/border-width
1879
+ */
1880
+ "border-w-e": [{
1881
+ "border-e": scaleBorderWidth()
1882
+ }],
1883
+ /**
1884
+ * Border Width Block Start
1885
+ * @see https://tailwindcss.com/docs/border-width
1886
+ */
1887
+ "border-w-bs": [{
1888
+ "border-bs": scaleBorderWidth()
1889
+ }],
1890
+ /**
1891
+ * Border Width Block End
1892
+ * @see https://tailwindcss.com/docs/border-width
1893
+ */
1894
+ "border-w-be": [{
1895
+ "border-be": scaleBorderWidth()
1896
+ }],
1897
+ /**
1898
+ * Border Width Top
1899
+ * @see https://tailwindcss.com/docs/border-width
1900
+ */
1901
+ "border-w-t": [{
1902
+ "border-t": scaleBorderWidth()
1903
+ }],
1904
+ /**
1905
+ * Border Width Right
1906
+ * @see https://tailwindcss.com/docs/border-width
1907
+ */
1908
+ "border-w-r": [{
1909
+ "border-r": scaleBorderWidth()
1910
+ }],
1911
+ /**
1912
+ * Border Width Bottom
1913
+ * @see https://tailwindcss.com/docs/border-width
1914
+ */
1915
+ "border-w-b": [{
1916
+ "border-b": scaleBorderWidth()
1917
+ }],
1918
+ /**
1919
+ * Border Width Left
1920
+ * @see https://tailwindcss.com/docs/border-width
1921
+ */
1922
+ "border-w-l": [{
1923
+ "border-l": scaleBorderWidth()
1924
+ }],
1925
+ /**
1926
+ * Divide Width X
1927
+ * @see https://tailwindcss.com/docs/border-width#between-children
1928
+ */
1929
+ "divide-x": [{
1930
+ "divide-x": scaleBorderWidth()
1931
+ }],
1932
+ /**
1933
+ * Divide Width X Reverse
1934
+ * @see https://tailwindcss.com/docs/border-width#between-children
1935
+ */
1936
+ "divide-x-reverse": ["divide-x-reverse"],
1937
+ /**
1938
+ * Divide Width Y
1939
+ * @see https://tailwindcss.com/docs/border-width#between-children
1940
+ */
1941
+ "divide-y": [{
1942
+ "divide-y": scaleBorderWidth()
1943
+ }],
1944
+ /**
1945
+ * Divide Width Y Reverse
1946
+ * @see https://tailwindcss.com/docs/border-width#between-children
1947
+ */
1948
+ "divide-y-reverse": ["divide-y-reverse"],
1949
+ /**
1950
+ * Border Style
1951
+ * @see https://tailwindcss.com/docs/border-style
1952
+ */
1953
+ "border-style": [{
1954
+ border: [...scaleLineStyle(), "hidden", "none"]
1955
+ }],
1956
+ /**
1957
+ * Divide Style
1958
+ * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style
1959
+ */
1960
+ "divide-style": [{
1961
+ divide: [...scaleLineStyle(), "hidden", "none"]
1962
+ }],
1963
+ /**
1964
+ * Border Color
1965
+ * @see https://tailwindcss.com/docs/border-color
1966
+ */
1967
+ "border-color": [{
1968
+ border: scaleColor()
1969
+ }],
1970
+ /**
1971
+ * Border Color Inline
1972
+ * @see https://tailwindcss.com/docs/border-color
1973
+ */
1974
+ "border-color-x": [{
1975
+ "border-x": scaleColor()
1976
+ }],
1977
+ /**
1978
+ * Border Color Block
1979
+ * @see https://tailwindcss.com/docs/border-color
1980
+ */
1981
+ "border-color-y": [{
1982
+ "border-y": scaleColor()
1983
+ }],
1984
+ /**
1985
+ * Border Color Inline Start
1986
+ * @see https://tailwindcss.com/docs/border-color
1987
+ */
1988
+ "border-color-s": [{
1989
+ "border-s": scaleColor()
1990
+ }],
1991
+ /**
1992
+ * Border Color Inline End
1993
+ * @see https://tailwindcss.com/docs/border-color
1994
+ */
1995
+ "border-color-e": [{
1996
+ "border-e": scaleColor()
1997
+ }],
1998
+ /**
1999
+ * Border Color Block Start
2000
+ * @see https://tailwindcss.com/docs/border-color
2001
+ */
2002
+ "border-color-bs": [{
2003
+ "border-bs": scaleColor()
2004
+ }],
2005
+ /**
2006
+ * Border Color Block End
2007
+ * @see https://tailwindcss.com/docs/border-color
2008
+ */
2009
+ "border-color-be": [{
2010
+ "border-be": scaleColor()
2011
+ }],
2012
+ /**
2013
+ * Border Color Top
2014
+ * @see https://tailwindcss.com/docs/border-color
2015
+ */
2016
+ "border-color-t": [{
2017
+ "border-t": scaleColor()
2018
+ }],
2019
+ /**
2020
+ * Border Color Right
2021
+ * @see https://tailwindcss.com/docs/border-color
2022
+ */
2023
+ "border-color-r": [{
2024
+ "border-r": scaleColor()
2025
+ }],
2026
+ /**
2027
+ * Border Color Bottom
2028
+ * @see https://tailwindcss.com/docs/border-color
2029
+ */
2030
+ "border-color-b": [{
2031
+ "border-b": scaleColor()
2032
+ }],
2033
+ /**
2034
+ * Border Color Left
2035
+ * @see https://tailwindcss.com/docs/border-color
2036
+ */
2037
+ "border-color-l": [{
2038
+ "border-l": scaleColor()
2039
+ }],
2040
+ /**
2041
+ * Divide Color
2042
+ * @see https://tailwindcss.com/docs/divide-color
2043
+ */
2044
+ "divide-color": [{
2045
+ divide: scaleColor()
2046
+ }],
2047
+ /**
2048
+ * Outline Style
2049
+ * @see https://tailwindcss.com/docs/outline-style
2050
+ */
2051
+ "outline-style": [{
2052
+ outline: [...scaleLineStyle(), "none", "hidden"]
2053
+ }],
2054
+ /**
2055
+ * Outline Offset
2056
+ * @see https://tailwindcss.com/docs/outline-offset
2057
+ */
2058
+ "outline-offset": [{
2059
+ "outline-offset": [isNumber, isArbitraryVariable, isArbitraryValue]
2060
+ }],
2061
+ /**
2062
+ * Outline Width
2063
+ * @see https://tailwindcss.com/docs/outline-width
2064
+ */
2065
+ "outline-w": [{
2066
+ outline: ["", isNumber, isArbitraryVariableLength, isArbitraryLength]
2067
+ }],
2068
+ /**
2069
+ * Outline Color
2070
+ * @see https://tailwindcss.com/docs/outline-color
2071
+ */
2072
+ "outline-color": [{
2073
+ outline: scaleColor()
2074
+ }],
2075
+ // ---------------
2076
+ // --- Effects ---
2077
+ // ---------------
2078
+ /**
2079
+ * Box Shadow
2080
+ * @see https://tailwindcss.com/docs/box-shadow
2081
+ */
2082
+ shadow: [{
2083
+ shadow: [
2084
+ // Deprecated since Tailwind CSS v4.0.0
2085
+ "",
2086
+ "none",
2087
+ themeShadow,
2088
+ isArbitraryVariableShadow,
2089
+ isArbitraryShadow
2090
+ ]
2091
+ }],
2092
+ /**
2093
+ * Box Shadow Color
2094
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color
2095
+ */
2096
+ "shadow-color": [{
2097
+ shadow: scaleColor()
2098
+ }],
2099
+ /**
2100
+ * Inset Box Shadow
2101
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow
2102
+ */
2103
+ "inset-shadow": [{
2104
+ "inset-shadow": ["none", themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]
2105
+ }],
2106
+ /**
2107
+ * Inset Box Shadow Color
2108
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color
2109
+ */
2110
+ "inset-shadow-color": [{
2111
+ "inset-shadow": scaleColor()
2112
+ }],
2113
+ /**
2114
+ * Ring Width
2115
+ * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring
2116
+ */
2117
+ "ring-w": [{
2118
+ ring: scaleBorderWidth()
2119
+ }],
2120
+ /**
2121
+ * Ring Width Inset
2122
+ * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings
2123
+ * @deprecated since Tailwind CSS v4.0.0
2124
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2125
+ */
2126
+ "ring-w-inset": ["ring-inset"],
2127
+ /**
2128
+ * Ring Color
2129
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color
2130
+ */
2131
+ "ring-color": [{
2132
+ ring: scaleColor()
2133
+ }],
2134
+ /**
2135
+ * Ring Offset Width
2136
+ * @see https://v3.tailwindcss.com/docs/ring-offset-width
2137
+ * @deprecated since Tailwind CSS v4.0.0
2138
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2139
+ */
2140
+ "ring-offset-w": [{
2141
+ "ring-offset": [isNumber, isArbitraryLength]
2142
+ }],
2143
+ /**
2144
+ * Ring Offset Color
2145
+ * @see https://v3.tailwindcss.com/docs/ring-offset-color
2146
+ * @deprecated since Tailwind CSS v4.0.0
2147
+ * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158
2148
+ */
2149
+ "ring-offset-color": [{
2150
+ "ring-offset": scaleColor()
2151
+ }],
2152
+ /**
2153
+ * Inset Ring Width
2154
+ * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring
2155
+ */
2156
+ "inset-ring-w": [{
2157
+ "inset-ring": scaleBorderWidth()
2158
+ }],
2159
+ /**
2160
+ * Inset Ring Color
2161
+ * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color
2162
+ */
2163
+ "inset-ring-color": [{
2164
+ "inset-ring": scaleColor()
2165
+ }],
2166
+ /**
2167
+ * Text Shadow
2168
+ * @see https://tailwindcss.com/docs/text-shadow
2169
+ */
2170
+ "text-shadow": [{
2171
+ "text-shadow": ["none", themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]
2172
+ }],
2173
+ /**
2174
+ * Text Shadow Color
2175
+ * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color
2176
+ */
2177
+ "text-shadow-color": [{
2178
+ "text-shadow": scaleColor()
2179
+ }],
2180
+ /**
2181
+ * Opacity
2182
+ * @see https://tailwindcss.com/docs/opacity
2183
+ */
2184
+ opacity: [{
2185
+ opacity: [isNumber, isArbitraryVariable, isArbitraryValue]
2186
+ }],
2187
+ /**
2188
+ * Mix Blend Mode
2189
+ * @see https://tailwindcss.com/docs/mix-blend-mode
2190
+ */
2191
+ "mix-blend": [{
2192
+ "mix-blend": [...scaleBlendMode(), "plus-darker", "plus-lighter"]
2193
+ }],
2194
+ /**
2195
+ * Background Blend Mode
2196
+ * @see https://tailwindcss.com/docs/background-blend-mode
2197
+ */
2198
+ "bg-blend": [{
2199
+ "bg-blend": scaleBlendMode()
2200
+ }],
2201
+ /**
2202
+ * Mask Clip
2203
+ * @see https://tailwindcss.com/docs/mask-clip
2204
+ */
2205
+ "mask-clip": [{
2206
+ "mask-clip": ["border", "padding", "content", "fill", "stroke", "view"]
2207
+ }, "mask-no-clip"],
2208
+ /**
2209
+ * Mask Composite
2210
+ * @see https://tailwindcss.com/docs/mask-composite
2211
+ */
2212
+ "mask-composite": [{
2213
+ mask: ["add", "subtract", "intersect", "exclude"]
2214
+ }],
2215
+ /**
2216
+ * Mask Image
2217
+ * @see https://tailwindcss.com/docs/mask-image
2218
+ */
2219
+ "mask-image-linear-pos": [{
2220
+ "mask-linear": [isNumber]
2221
+ }],
2222
+ "mask-image-linear-from-pos": [{
2223
+ "mask-linear-from": scaleMaskImagePosition()
2224
+ }],
2225
+ "mask-image-linear-to-pos": [{
2226
+ "mask-linear-to": scaleMaskImagePosition()
2227
+ }],
2228
+ "mask-image-linear-from-color": [{
2229
+ "mask-linear-from": scaleColor()
2230
+ }],
2231
+ "mask-image-linear-to-color": [{
2232
+ "mask-linear-to": scaleColor()
2233
+ }],
2234
+ "mask-image-t-from-pos": [{
2235
+ "mask-t-from": scaleMaskImagePosition()
2236
+ }],
2237
+ "mask-image-t-to-pos": [{
2238
+ "mask-t-to": scaleMaskImagePosition()
2239
+ }],
2240
+ "mask-image-t-from-color": [{
2241
+ "mask-t-from": scaleColor()
2242
+ }],
2243
+ "mask-image-t-to-color": [{
2244
+ "mask-t-to": scaleColor()
2245
+ }],
2246
+ "mask-image-r-from-pos": [{
2247
+ "mask-r-from": scaleMaskImagePosition()
2248
+ }],
2249
+ "mask-image-r-to-pos": [{
2250
+ "mask-r-to": scaleMaskImagePosition()
2251
+ }],
2252
+ "mask-image-r-from-color": [{
2253
+ "mask-r-from": scaleColor()
2254
+ }],
2255
+ "mask-image-r-to-color": [{
2256
+ "mask-r-to": scaleColor()
2257
+ }],
2258
+ "mask-image-b-from-pos": [{
2259
+ "mask-b-from": scaleMaskImagePosition()
2260
+ }],
2261
+ "mask-image-b-to-pos": [{
2262
+ "mask-b-to": scaleMaskImagePosition()
2263
+ }],
2264
+ "mask-image-b-from-color": [{
2265
+ "mask-b-from": scaleColor()
2266
+ }],
2267
+ "mask-image-b-to-color": [{
2268
+ "mask-b-to": scaleColor()
2269
+ }],
2270
+ "mask-image-l-from-pos": [{
2271
+ "mask-l-from": scaleMaskImagePosition()
2272
+ }],
2273
+ "mask-image-l-to-pos": [{
2274
+ "mask-l-to": scaleMaskImagePosition()
2275
+ }],
2276
+ "mask-image-l-from-color": [{
2277
+ "mask-l-from": scaleColor()
2278
+ }],
2279
+ "mask-image-l-to-color": [{
2280
+ "mask-l-to": scaleColor()
2281
+ }],
2282
+ "mask-image-x-from-pos": [{
2283
+ "mask-x-from": scaleMaskImagePosition()
2284
+ }],
2285
+ "mask-image-x-to-pos": [{
2286
+ "mask-x-to": scaleMaskImagePosition()
2287
+ }],
2288
+ "mask-image-x-from-color": [{
2289
+ "mask-x-from": scaleColor()
2290
+ }],
2291
+ "mask-image-x-to-color": [{
2292
+ "mask-x-to": scaleColor()
2293
+ }],
2294
+ "mask-image-y-from-pos": [{
2295
+ "mask-y-from": scaleMaskImagePosition()
2296
+ }],
2297
+ "mask-image-y-to-pos": [{
2298
+ "mask-y-to": scaleMaskImagePosition()
2299
+ }],
2300
+ "mask-image-y-from-color": [{
2301
+ "mask-y-from": scaleColor()
2302
+ }],
2303
+ "mask-image-y-to-color": [{
2304
+ "mask-y-to": scaleColor()
2305
+ }],
2306
+ "mask-image-radial": [{
2307
+ "mask-radial": [isArbitraryVariable, isArbitraryValue]
2308
+ }],
2309
+ "mask-image-radial-from-pos": [{
2310
+ "mask-radial-from": scaleMaskImagePosition()
2311
+ }],
2312
+ "mask-image-radial-to-pos": [{
2313
+ "mask-radial-to": scaleMaskImagePosition()
2314
+ }],
2315
+ "mask-image-radial-from-color": [{
2316
+ "mask-radial-from": scaleColor()
2317
+ }],
2318
+ "mask-image-radial-to-color": [{
2319
+ "mask-radial-to": scaleColor()
2320
+ }],
2321
+ "mask-image-radial-shape": [{
2322
+ "mask-radial": ["circle", "ellipse"]
2323
+ }],
2324
+ "mask-image-radial-size": [{
2325
+ "mask-radial": [{
2326
+ closest: ["side", "corner"],
2327
+ farthest: ["side", "corner"]
2328
+ }]
2329
+ }],
2330
+ "mask-image-radial-pos": [{
2331
+ "mask-radial-at": scalePosition()
2332
+ }],
2333
+ "mask-image-conic-pos": [{
2334
+ "mask-conic": [isNumber]
2335
+ }],
2336
+ "mask-image-conic-from-pos": [{
2337
+ "mask-conic-from": scaleMaskImagePosition()
2338
+ }],
2339
+ "mask-image-conic-to-pos": [{
2340
+ "mask-conic-to": scaleMaskImagePosition()
2341
+ }],
2342
+ "mask-image-conic-from-color": [{
2343
+ "mask-conic-from": scaleColor()
2344
+ }],
2345
+ "mask-image-conic-to-color": [{
2346
+ "mask-conic-to": scaleColor()
2347
+ }],
2348
+ /**
2349
+ * Mask Mode
2350
+ * @see https://tailwindcss.com/docs/mask-mode
2351
+ */
2352
+ "mask-mode": [{
2353
+ mask: ["alpha", "luminance", "match"]
2354
+ }],
2355
+ /**
2356
+ * Mask Origin
2357
+ * @see https://tailwindcss.com/docs/mask-origin
2358
+ */
2359
+ "mask-origin": [{
2360
+ "mask-origin": ["border", "padding", "content", "fill", "stroke", "view"]
2361
+ }],
2362
+ /**
2363
+ * Mask Position
2364
+ * @see https://tailwindcss.com/docs/mask-position
2365
+ */
2366
+ "mask-position": [{
2367
+ mask: scaleBgPosition()
2368
+ }],
2369
+ /**
2370
+ * Mask Repeat
2371
+ * @see https://tailwindcss.com/docs/mask-repeat
2372
+ */
2373
+ "mask-repeat": [{
2374
+ mask: scaleBgRepeat()
2375
+ }],
2376
+ /**
2377
+ * Mask Size
2378
+ * @see https://tailwindcss.com/docs/mask-size
2379
+ */
2380
+ "mask-size": [{
2381
+ mask: scaleBgSize()
2382
+ }],
2383
+ /**
2384
+ * Mask Type
2385
+ * @see https://tailwindcss.com/docs/mask-type
2386
+ */
2387
+ "mask-type": [{
2388
+ "mask-type": ["alpha", "luminance"]
2389
+ }],
2390
+ /**
2391
+ * Mask Image
2392
+ * @see https://tailwindcss.com/docs/mask-image
2393
+ */
2394
+ "mask-image": [{
2395
+ mask: ["none", isArbitraryVariable, isArbitraryValue]
2396
+ }],
2397
+ // ---------------
2398
+ // --- Filters ---
2399
+ // ---------------
2400
+ /**
2401
+ * Filter
2402
+ * @see https://tailwindcss.com/docs/filter
2403
+ */
2404
+ filter: [{
2405
+ filter: [
2406
+ // Deprecated since Tailwind CSS v3.0.0
2407
+ "",
2408
+ "none",
2409
+ isArbitraryVariable,
2410
+ isArbitraryValue
2411
+ ]
2412
+ }],
2413
+ /**
2414
+ * Blur
2415
+ * @see https://tailwindcss.com/docs/blur
2416
+ */
2417
+ blur: [{
2418
+ blur: scaleBlur()
2419
+ }],
2420
+ /**
2421
+ * Brightness
2422
+ * @see https://tailwindcss.com/docs/brightness
2423
+ */
2424
+ brightness: [{
2425
+ brightness: [isNumber, isArbitraryVariable, isArbitraryValue]
2426
+ }],
2427
+ /**
2428
+ * Contrast
2429
+ * @see https://tailwindcss.com/docs/contrast
2430
+ */
2431
+ contrast: [{
2432
+ contrast: [isNumber, isArbitraryVariable, isArbitraryValue]
2433
+ }],
2434
+ /**
2435
+ * Drop Shadow
2436
+ * @see https://tailwindcss.com/docs/drop-shadow
2437
+ */
2438
+ "drop-shadow": [{
2439
+ "drop-shadow": [
2440
+ // Deprecated since Tailwind CSS v4.0.0
2441
+ "",
2442
+ "none",
2443
+ themeDropShadow,
2444
+ isArbitraryVariableShadow,
2445
+ isArbitraryShadow
2446
+ ]
2447
+ }],
2448
+ /**
2449
+ * Drop Shadow Color
2450
+ * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color
2451
+ */
2452
+ "drop-shadow-color": [{
2453
+ "drop-shadow": scaleColor()
2454
+ }],
2455
+ /**
2456
+ * Grayscale
2457
+ * @see https://tailwindcss.com/docs/grayscale
2458
+ */
2459
+ grayscale: [{
2460
+ grayscale: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2461
+ }],
2462
+ /**
2463
+ * Hue Rotate
2464
+ * @see https://tailwindcss.com/docs/hue-rotate
2465
+ */
2466
+ "hue-rotate": [{
2467
+ "hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2468
+ }],
2469
+ /**
2470
+ * Invert
2471
+ * @see https://tailwindcss.com/docs/invert
2472
+ */
2473
+ invert: [{
2474
+ invert: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2475
+ }],
2476
+ /**
2477
+ * Saturate
2478
+ * @see https://tailwindcss.com/docs/saturate
2479
+ */
2480
+ saturate: [{
2481
+ saturate: [isNumber, isArbitraryVariable, isArbitraryValue]
2482
+ }],
2483
+ /**
2484
+ * Sepia
2485
+ * @see https://tailwindcss.com/docs/sepia
2486
+ */
2487
+ sepia: [{
2488
+ sepia: ["", isNumber, isArbitraryVariable, isArbitraryValue]
2489
+ }],
2490
+ /**
2491
+ * Backdrop Filter
2492
+ * @see https://tailwindcss.com/docs/backdrop-filter
2493
+ */
2494
+ "backdrop-filter": [{
2495
+ "backdrop-filter": [
2496
+ // Deprecated since Tailwind CSS v3.0.0
2497
+ "",
2498
+ "none",
2499
+ isArbitraryVariable,
2500
+ isArbitraryValue
2501
+ ]
2502
+ }],
2503
+ /**
2504
+ * Backdrop Blur
2505
+ * @see https://tailwindcss.com/docs/backdrop-blur
2506
+ */
2507
+ "backdrop-blur": [{
2508
+ "backdrop-blur": scaleBlur()
2509
+ }],
2510
+ /**
2511
+ * Backdrop Brightness
2512
+ * @see https://tailwindcss.com/docs/backdrop-brightness
2513
+ */
2514
+ "backdrop-brightness": [{
2515
+ "backdrop-brightness": [isNumber, isArbitraryVariable, isArbitraryValue]
2516
+ }],
2517
+ /**
2518
+ * Backdrop Contrast
2519
+ * @see https://tailwindcss.com/docs/backdrop-contrast
2520
+ */
2521
+ "backdrop-contrast": [{
2522
+ "backdrop-contrast": [isNumber, isArbitraryVariable, isArbitraryValue]
2523
+ }],
2524
+ /**
2525
+ * Backdrop Grayscale
2526
+ * @see https://tailwindcss.com/docs/backdrop-grayscale
2527
+ */
2528
+ "backdrop-grayscale": [{
2529
+ "backdrop-grayscale": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2530
+ }],
2531
+ /**
2532
+ * Backdrop Hue Rotate
2533
+ * @see https://tailwindcss.com/docs/backdrop-hue-rotate
2534
+ */
2535
+ "backdrop-hue-rotate": [{
2536
+ "backdrop-hue-rotate": [isNumber, isArbitraryVariable, isArbitraryValue]
2537
+ }],
2538
+ /**
2539
+ * Backdrop Invert
2540
+ * @see https://tailwindcss.com/docs/backdrop-invert
2541
+ */
2542
+ "backdrop-invert": [{
2543
+ "backdrop-invert": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2544
+ }],
2545
+ /**
2546
+ * Backdrop Opacity
2547
+ * @see https://tailwindcss.com/docs/backdrop-opacity
2548
+ */
2549
+ "backdrop-opacity": [{
2550
+ "backdrop-opacity": [isNumber, isArbitraryVariable, isArbitraryValue]
2551
+ }],
2552
+ /**
2553
+ * Backdrop Saturate
2554
+ * @see https://tailwindcss.com/docs/backdrop-saturate
2555
+ */
2556
+ "backdrop-saturate": [{
2557
+ "backdrop-saturate": [isNumber, isArbitraryVariable, isArbitraryValue]
2558
+ }],
2559
+ /**
2560
+ * Backdrop Sepia
2561
+ * @see https://tailwindcss.com/docs/backdrop-sepia
2562
+ */
2563
+ "backdrop-sepia": [{
2564
+ "backdrop-sepia": ["", isNumber, isArbitraryVariable, isArbitraryValue]
2565
+ }],
2566
+ // --------------
2567
+ // --- Tables ---
2568
+ // --------------
2569
+ /**
2570
+ * Border Collapse
2571
+ * @see https://tailwindcss.com/docs/border-collapse
2572
+ */
2573
+ "border-collapse": [{
2574
+ border: ["collapse", "separate"]
2575
+ }],
2576
+ /**
2577
+ * Border Spacing
2578
+ * @see https://tailwindcss.com/docs/border-spacing
2579
+ */
2580
+ "border-spacing": [{
2581
+ "border-spacing": scaleUnambiguousSpacing()
2582
+ }],
2583
+ /**
2584
+ * Border Spacing X
2585
+ * @see https://tailwindcss.com/docs/border-spacing
2586
+ */
2587
+ "border-spacing-x": [{
2588
+ "border-spacing-x": scaleUnambiguousSpacing()
2589
+ }],
2590
+ /**
2591
+ * Border Spacing Y
2592
+ * @see https://tailwindcss.com/docs/border-spacing
2593
+ */
2594
+ "border-spacing-y": [{
2595
+ "border-spacing-y": scaleUnambiguousSpacing()
2596
+ }],
2597
+ /**
2598
+ * Table Layout
2599
+ * @see https://tailwindcss.com/docs/table-layout
2600
+ */
2601
+ "table-layout": [{
2602
+ table: ["auto", "fixed"]
2603
+ }],
2604
+ /**
2605
+ * Caption Side
2606
+ * @see https://tailwindcss.com/docs/caption-side
2607
+ */
2608
+ caption: [{
2609
+ caption: ["top", "bottom"]
2610
+ }],
2611
+ // ---------------------------------
2612
+ // --- Transitions and Animation ---
2613
+ // ---------------------------------
2614
+ /**
2615
+ * Transition Property
2616
+ * @see https://tailwindcss.com/docs/transition-property
2617
+ */
2618
+ transition: [{
2619
+ transition: ["", "all", "colors", "opacity", "shadow", "transform", "none", isArbitraryVariable, isArbitraryValue]
2620
+ }],
2621
+ /**
2622
+ * Transition Behavior
2623
+ * @see https://tailwindcss.com/docs/transition-behavior
2624
+ */
2625
+ "transition-behavior": [{
2626
+ transition: ["normal", "discrete"]
2627
+ }],
2628
+ /**
2629
+ * Transition Duration
2630
+ * @see https://tailwindcss.com/docs/transition-duration
2631
+ */
2632
+ duration: [{
2633
+ duration: [isNumber, "initial", isArbitraryVariable, isArbitraryValue]
2634
+ }],
2635
+ /**
2636
+ * Transition Timing Function
2637
+ * @see https://tailwindcss.com/docs/transition-timing-function
2638
+ */
2639
+ ease: [{
2640
+ ease: ["linear", "initial", themeEase, isArbitraryVariable, isArbitraryValue]
2641
+ }],
2642
+ /**
2643
+ * Transition Delay
2644
+ * @see https://tailwindcss.com/docs/transition-delay
2645
+ */
2646
+ delay: [{
2647
+ delay: [isNumber, isArbitraryVariable, isArbitraryValue]
2648
+ }],
2649
+ /**
2650
+ * Animation
2651
+ * @see https://tailwindcss.com/docs/animation
2652
+ */
2653
+ animate: [{
2654
+ animate: ["none", themeAnimate, isArbitraryVariable, isArbitraryValue]
2655
+ }],
2656
+ // ------------------
2657
+ // --- Transforms ---
2658
+ // ------------------
2659
+ /**
2660
+ * Backface Visibility
2661
+ * @see https://tailwindcss.com/docs/backface-visibility
2662
+ */
2663
+ backface: [{
2664
+ backface: ["hidden", "visible"]
2665
+ }],
2666
+ /**
2667
+ * Perspective
2668
+ * @see https://tailwindcss.com/docs/perspective
2669
+ */
2670
+ perspective: [{
2671
+ perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]
2672
+ }],
2673
+ /**
2674
+ * Perspective Origin
2675
+ * @see https://tailwindcss.com/docs/perspective-origin
2676
+ */
2677
+ "perspective-origin": [{
2678
+ "perspective-origin": scalePositionWithArbitrary()
2679
+ }],
2680
+ /**
2681
+ * Rotate
2682
+ * @see https://tailwindcss.com/docs/rotate
2683
+ */
2684
+ rotate: [{
2685
+ rotate: scaleRotate()
2686
+ }],
2687
+ /**
2688
+ * Rotate X
2689
+ * @see https://tailwindcss.com/docs/rotate
2690
+ */
2691
+ "rotate-x": [{
2692
+ "rotate-x": scaleRotate()
2693
+ }],
2694
+ /**
2695
+ * Rotate Y
2696
+ * @see https://tailwindcss.com/docs/rotate
2697
+ */
2698
+ "rotate-y": [{
2699
+ "rotate-y": scaleRotate()
2700
+ }],
2701
+ /**
2702
+ * Rotate Z
2703
+ * @see https://tailwindcss.com/docs/rotate
2704
+ */
2705
+ "rotate-z": [{
2706
+ "rotate-z": scaleRotate()
2707
+ }],
2708
+ /**
2709
+ * Scale
2710
+ * @see https://tailwindcss.com/docs/scale
2711
+ */
2712
+ scale: [{
2713
+ scale: scaleScale()
2714
+ }],
2715
+ /**
2716
+ * Scale X
2717
+ * @see https://tailwindcss.com/docs/scale
2718
+ */
2719
+ "scale-x": [{
2720
+ "scale-x": scaleScale()
2721
+ }],
2722
+ /**
2723
+ * Scale Y
2724
+ * @see https://tailwindcss.com/docs/scale
2725
+ */
2726
+ "scale-y": [{
2727
+ "scale-y": scaleScale()
2728
+ }],
2729
+ /**
2730
+ * Scale Z
2731
+ * @see https://tailwindcss.com/docs/scale
2732
+ */
2733
+ "scale-z": [{
2734
+ "scale-z": scaleScale()
2735
+ }],
2736
+ /**
2737
+ * Scale 3D
2738
+ * @see https://tailwindcss.com/docs/scale
2739
+ */
2740
+ "scale-3d": ["scale-3d"],
2741
+ /**
2742
+ * Skew
2743
+ * @see https://tailwindcss.com/docs/skew
2744
+ */
2745
+ skew: [{
2746
+ skew: scaleSkew()
2747
+ }],
2748
+ /**
2749
+ * Skew X
2750
+ * @see https://tailwindcss.com/docs/skew
2751
+ */
2752
+ "skew-x": [{
2753
+ "skew-x": scaleSkew()
2754
+ }],
2755
+ /**
2756
+ * Skew Y
2757
+ * @see https://tailwindcss.com/docs/skew
2758
+ */
2759
+ "skew-y": [{
2760
+ "skew-y": scaleSkew()
2761
+ }],
2762
+ /**
2763
+ * Transform
2764
+ * @see https://tailwindcss.com/docs/transform
2765
+ */
2766
+ transform: [{
2767
+ transform: [isArbitraryVariable, isArbitraryValue, "", "none", "gpu", "cpu"]
2768
+ }],
2769
+ /**
2770
+ * Transform Origin
2771
+ * @see https://tailwindcss.com/docs/transform-origin
2772
+ */
2773
+ "transform-origin": [{
2774
+ origin: scalePositionWithArbitrary()
2775
+ }],
2776
+ /**
2777
+ * Transform Style
2778
+ * @see https://tailwindcss.com/docs/transform-style
2779
+ */
2780
+ "transform-style": [{
2781
+ transform: ["3d", "flat"]
2782
+ }],
2783
+ /**
2784
+ * Translate
2785
+ * @see https://tailwindcss.com/docs/translate
2786
+ */
2787
+ translate: [{
2788
+ translate: scaleTranslate()
2789
+ }],
2790
+ /**
2791
+ * Translate X
2792
+ * @see https://tailwindcss.com/docs/translate
2793
+ */
2794
+ "translate-x": [{
2795
+ "translate-x": scaleTranslate()
2796
+ }],
2797
+ /**
2798
+ * Translate Y
2799
+ * @see https://tailwindcss.com/docs/translate
2800
+ */
2801
+ "translate-y": [{
2802
+ "translate-y": scaleTranslate()
2803
+ }],
2804
+ /**
2805
+ * Translate Z
2806
+ * @see https://tailwindcss.com/docs/translate
2807
+ */
2808
+ "translate-z": [{
2809
+ "translate-z": scaleTranslate()
2810
+ }],
2811
+ /**
2812
+ * Translate None
2813
+ * @see https://tailwindcss.com/docs/translate
2814
+ */
2815
+ "translate-none": ["translate-none"],
2816
+ // ---------------------
2817
+ // --- Interactivity ---
2818
+ // ---------------------
2819
+ /**
2820
+ * Accent Color
2821
+ * @see https://tailwindcss.com/docs/accent-color
2822
+ */
2823
+ accent: [{
2824
+ accent: scaleColor()
2825
+ }],
2826
+ /**
2827
+ * Appearance
2828
+ * @see https://tailwindcss.com/docs/appearance
2829
+ */
2830
+ appearance: [{
2831
+ appearance: ["none", "auto"]
2832
+ }],
2833
+ /**
2834
+ * Caret Color
2835
+ * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities
2836
+ */
2837
+ "caret-color": [{
2838
+ caret: scaleColor()
2839
+ }],
2840
+ /**
2841
+ * Color Scheme
2842
+ * @see https://tailwindcss.com/docs/color-scheme
2843
+ */
2844
+ "color-scheme": [{
2845
+ scheme: ["normal", "dark", "light", "light-dark", "only-dark", "only-light"]
2846
+ }],
2847
+ /**
2848
+ * Cursor
2849
+ * @see https://tailwindcss.com/docs/cursor
2850
+ */
2851
+ cursor: [{
2852
+ 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]
2853
+ }],
2854
+ /**
2855
+ * Field Sizing
2856
+ * @see https://tailwindcss.com/docs/field-sizing
2857
+ */
2858
+ "field-sizing": [{
2859
+ "field-sizing": ["fixed", "content"]
2860
+ }],
2861
+ /**
2862
+ * Pointer Events
2863
+ * @see https://tailwindcss.com/docs/pointer-events
2864
+ */
2865
+ "pointer-events": [{
2866
+ "pointer-events": ["auto", "none"]
2867
+ }],
2868
+ /**
2869
+ * Resize
2870
+ * @see https://tailwindcss.com/docs/resize
2871
+ */
2872
+ resize: [{
2873
+ resize: ["none", "", "y", "x"]
2874
+ }],
2875
+ /**
2876
+ * Scroll Behavior
2877
+ * @see https://tailwindcss.com/docs/scroll-behavior
2878
+ */
2879
+ "scroll-behavior": [{
2880
+ scroll: ["auto", "smooth"]
2881
+ }],
2882
+ /**
2883
+ * Scroll Margin
2884
+ * @see https://tailwindcss.com/docs/scroll-margin
2885
+ */
2886
+ "scroll-m": [{
2887
+ "scroll-m": scaleUnambiguousSpacing()
2888
+ }],
2889
+ /**
2890
+ * Scroll Margin Inline
2891
+ * @see https://tailwindcss.com/docs/scroll-margin
2892
+ */
2893
+ "scroll-mx": [{
2894
+ "scroll-mx": scaleUnambiguousSpacing()
2895
+ }],
2896
+ /**
2897
+ * Scroll Margin Block
2898
+ * @see https://tailwindcss.com/docs/scroll-margin
2899
+ */
2900
+ "scroll-my": [{
2901
+ "scroll-my": scaleUnambiguousSpacing()
2902
+ }],
2903
+ /**
2904
+ * Scroll Margin Inline Start
2905
+ * @see https://tailwindcss.com/docs/scroll-margin
2906
+ */
2907
+ "scroll-ms": [{
2908
+ "scroll-ms": scaleUnambiguousSpacing()
2909
+ }],
2910
+ /**
2911
+ * Scroll Margin Inline End
2912
+ * @see https://tailwindcss.com/docs/scroll-margin
2913
+ */
2914
+ "scroll-me": [{
2915
+ "scroll-me": scaleUnambiguousSpacing()
2916
+ }],
2917
+ /**
2918
+ * Scroll Margin Block Start
2919
+ * @see https://tailwindcss.com/docs/scroll-margin
2920
+ */
2921
+ "scroll-mbs": [{
2922
+ "scroll-mbs": scaleUnambiguousSpacing()
2923
+ }],
2924
+ /**
2925
+ * Scroll Margin Block End
2926
+ * @see https://tailwindcss.com/docs/scroll-margin
2927
+ */
2928
+ "scroll-mbe": [{
2929
+ "scroll-mbe": scaleUnambiguousSpacing()
2930
+ }],
2931
+ /**
2932
+ * Scroll Margin Top
2933
+ * @see https://tailwindcss.com/docs/scroll-margin
2934
+ */
2935
+ "scroll-mt": [{
2936
+ "scroll-mt": scaleUnambiguousSpacing()
2937
+ }],
2938
+ /**
2939
+ * Scroll Margin Right
2940
+ * @see https://tailwindcss.com/docs/scroll-margin
2941
+ */
2942
+ "scroll-mr": [{
2943
+ "scroll-mr": scaleUnambiguousSpacing()
2944
+ }],
2945
+ /**
2946
+ * Scroll Margin Bottom
2947
+ * @see https://tailwindcss.com/docs/scroll-margin
2948
+ */
2949
+ "scroll-mb": [{
2950
+ "scroll-mb": scaleUnambiguousSpacing()
2951
+ }],
2952
+ /**
2953
+ * Scroll Margin Left
2954
+ * @see https://tailwindcss.com/docs/scroll-margin
2955
+ */
2956
+ "scroll-ml": [{
2957
+ "scroll-ml": scaleUnambiguousSpacing()
2958
+ }],
2959
+ /**
2960
+ * Scroll Padding
2961
+ * @see https://tailwindcss.com/docs/scroll-padding
2962
+ */
2963
+ "scroll-p": [{
2964
+ "scroll-p": scaleUnambiguousSpacing()
2965
+ }],
2966
+ /**
2967
+ * Scroll Padding Inline
2968
+ * @see https://tailwindcss.com/docs/scroll-padding
2969
+ */
2970
+ "scroll-px": [{
2971
+ "scroll-px": scaleUnambiguousSpacing()
2972
+ }],
2973
+ /**
2974
+ * Scroll Padding Block
2975
+ * @see https://tailwindcss.com/docs/scroll-padding
2976
+ */
2977
+ "scroll-py": [{
2978
+ "scroll-py": scaleUnambiguousSpacing()
2979
+ }],
2980
+ /**
2981
+ * Scroll Padding Inline Start
2982
+ * @see https://tailwindcss.com/docs/scroll-padding
2983
+ */
2984
+ "scroll-ps": [{
2985
+ "scroll-ps": scaleUnambiguousSpacing()
2986
+ }],
2987
+ /**
2988
+ * Scroll Padding Inline End
2989
+ * @see https://tailwindcss.com/docs/scroll-padding
2990
+ */
2991
+ "scroll-pe": [{
2992
+ "scroll-pe": scaleUnambiguousSpacing()
2993
+ }],
2994
+ /**
2995
+ * Scroll Padding Block Start
2996
+ * @see https://tailwindcss.com/docs/scroll-padding
2997
+ */
2998
+ "scroll-pbs": [{
2999
+ "scroll-pbs": scaleUnambiguousSpacing()
3000
+ }],
3001
+ /**
3002
+ * Scroll Padding Block End
3003
+ * @see https://tailwindcss.com/docs/scroll-padding
3004
+ */
3005
+ "scroll-pbe": [{
3006
+ "scroll-pbe": scaleUnambiguousSpacing()
3007
+ }],
3008
+ /**
3009
+ * Scroll Padding Top
3010
+ * @see https://tailwindcss.com/docs/scroll-padding
3011
+ */
3012
+ "scroll-pt": [{
3013
+ "scroll-pt": scaleUnambiguousSpacing()
3014
+ }],
3015
+ /**
3016
+ * Scroll Padding Right
3017
+ * @see https://tailwindcss.com/docs/scroll-padding
3018
+ */
3019
+ "scroll-pr": [{
3020
+ "scroll-pr": scaleUnambiguousSpacing()
3021
+ }],
3022
+ /**
3023
+ * Scroll Padding Bottom
3024
+ * @see https://tailwindcss.com/docs/scroll-padding
3025
+ */
3026
+ "scroll-pb": [{
3027
+ "scroll-pb": scaleUnambiguousSpacing()
3028
+ }],
3029
+ /**
3030
+ * Scroll Padding Left
3031
+ * @see https://tailwindcss.com/docs/scroll-padding
3032
+ */
3033
+ "scroll-pl": [{
3034
+ "scroll-pl": scaleUnambiguousSpacing()
3035
+ }],
3036
+ /**
3037
+ * Scroll Snap Align
3038
+ * @see https://tailwindcss.com/docs/scroll-snap-align
3039
+ */
3040
+ "snap-align": [{
3041
+ snap: ["start", "end", "center", "align-none"]
3042
+ }],
3043
+ /**
3044
+ * Scroll Snap Stop
3045
+ * @see https://tailwindcss.com/docs/scroll-snap-stop
3046
+ */
3047
+ "snap-stop": [{
3048
+ snap: ["normal", "always"]
3049
+ }],
3050
+ /**
3051
+ * Scroll Snap Type
3052
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3053
+ */
3054
+ "snap-type": [{
3055
+ snap: ["none", "x", "y", "both"]
3056
+ }],
3057
+ /**
3058
+ * Scroll Snap Type Strictness
3059
+ * @see https://tailwindcss.com/docs/scroll-snap-type
3060
+ */
3061
+ "snap-strictness": [{
3062
+ snap: ["mandatory", "proximity"]
3063
+ }],
3064
+ /**
3065
+ * Touch Action
3066
+ * @see https://tailwindcss.com/docs/touch-action
3067
+ */
3068
+ touch: [{
3069
+ touch: ["auto", "none", "manipulation"]
3070
+ }],
3071
+ /**
3072
+ * Touch Action X
3073
+ * @see https://tailwindcss.com/docs/touch-action
3074
+ */
3075
+ "touch-x": [{
3076
+ "touch-pan": ["x", "left", "right"]
3077
+ }],
3078
+ /**
3079
+ * Touch Action Y
3080
+ * @see https://tailwindcss.com/docs/touch-action
3081
+ */
3082
+ "touch-y": [{
3083
+ "touch-pan": ["y", "up", "down"]
3084
+ }],
3085
+ /**
3086
+ * Touch Action Pinch Zoom
3087
+ * @see https://tailwindcss.com/docs/touch-action
3088
+ */
3089
+ "touch-pz": ["touch-pinch-zoom"],
3090
+ /**
3091
+ * User Select
3092
+ * @see https://tailwindcss.com/docs/user-select
3093
+ */
3094
+ select: [{
3095
+ select: ["none", "text", "all", "auto"]
3096
+ }],
3097
+ /**
3098
+ * Will Change
3099
+ * @see https://tailwindcss.com/docs/will-change
3100
+ */
3101
+ "will-change": [{
3102
+ "will-change": ["auto", "scroll", "contents", "transform", isArbitraryVariable, isArbitraryValue]
3103
+ }],
3104
+ // -----------
3105
+ // --- SVG ---
3106
+ // -----------
3107
+ /**
3108
+ * Fill
3109
+ * @see https://tailwindcss.com/docs/fill
3110
+ */
3111
+ fill: [{
3112
+ fill: ["none", ...scaleColor()]
3113
+ }],
3114
+ /**
3115
+ * Stroke Width
3116
+ * @see https://tailwindcss.com/docs/stroke-width
3117
+ */
3118
+ "stroke-w": [{
3119
+ stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]
3120
+ }],
3121
+ /**
3122
+ * Stroke
3123
+ * @see https://tailwindcss.com/docs/stroke
3124
+ */
3125
+ stroke: [{
3126
+ stroke: ["none", ...scaleColor()]
3127
+ }],
3128
+ // ---------------------
3129
+ // --- Accessibility ---
3130
+ // ---------------------
3131
+ /**
3132
+ * Forced Color Adjust
3133
+ * @see https://tailwindcss.com/docs/forced-color-adjust
3134
+ */
3135
+ "forced-color-adjust": [{
3136
+ "forced-color-adjust": ["auto", "none"]
3137
+ }]
3138
+ },
3139
+ conflictingClassGroups: {
3140
+ overflow: ["overflow-x", "overflow-y"],
3141
+ overscroll: ["overscroll-x", "overscroll-y"],
3142
+ inset: ["inset-x", "inset-y", "inset-bs", "inset-be", "start", "end", "top", "right", "bottom", "left"],
3143
+ "inset-x": ["right", "left"],
3144
+ "inset-y": ["top", "bottom"],
3145
+ flex: ["basis", "grow", "shrink"],
3146
+ gap: ["gap-x", "gap-y"],
3147
+ p: ["px", "py", "ps", "pe", "pbs", "pbe", "pt", "pr", "pb", "pl"],
3148
+ px: ["pr", "pl"],
3149
+ py: ["pt", "pb"],
3150
+ m: ["mx", "my", "ms", "me", "mbs", "mbe", "mt", "mr", "mb", "ml"],
3151
+ mx: ["mr", "ml"],
3152
+ my: ["mt", "mb"],
3153
+ size: ["w", "h"],
3154
+ "font-size": ["leading"],
3155
+ "fvn-normal": ["fvn-ordinal", "fvn-slashed-zero", "fvn-figure", "fvn-spacing", "fvn-fraction"],
3156
+ "fvn-ordinal": ["fvn-normal"],
3157
+ "fvn-slashed-zero": ["fvn-normal"],
3158
+ "fvn-figure": ["fvn-normal"],
3159
+ "fvn-spacing": ["fvn-normal"],
3160
+ "fvn-fraction": ["fvn-normal"],
3161
+ "line-clamp": ["display", "overflow"],
3162
+ 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"],
3163
+ "rounded-s": ["rounded-ss", "rounded-es"],
3164
+ "rounded-e": ["rounded-se", "rounded-ee"],
3165
+ "rounded-t": ["rounded-tl", "rounded-tr"],
3166
+ "rounded-r": ["rounded-tr", "rounded-br"],
3167
+ "rounded-b": ["rounded-br", "rounded-bl"],
3168
+ "rounded-l": ["rounded-tl", "rounded-bl"],
3169
+ "border-spacing": ["border-spacing-x", "border-spacing-y"],
3170
+ "border-w": ["border-w-x", "border-w-y", "border-w-s", "border-w-e", "border-w-bs", "border-w-be", "border-w-t", "border-w-r", "border-w-b", "border-w-l"],
3171
+ "border-w-x": ["border-w-r", "border-w-l"],
3172
+ "border-w-y": ["border-w-t", "border-w-b"],
3173
+ "border-color": ["border-color-x", "border-color-y", "border-color-s", "border-color-e", "border-color-bs", "border-color-be", "border-color-t", "border-color-r", "border-color-b", "border-color-l"],
3174
+ "border-color-x": ["border-color-r", "border-color-l"],
3175
+ "border-color-y": ["border-color-t", "border-color-b"],
3176
+ translate: ["translate-x", "translate-y", "translate-none"],
3177
+ "translate-none": ["translate", "translate-x", "translate-y", "translate-z"],
3178
+ "scroll-m": ["scroll-mx", "scroll-my", "scroll-ms", "scroll-me", "scroll-mbs", "scroll-mbe", "scroll-mt", "scroll-mr", "scroll-mb", "scroll-ml"],
3179
+ "scroll-mx": ["scroll-mr", "scroll-ml"],
3180
+ "scroll-my": ["scroll-mt", "scroll-mb"],
3181
+ "scroll-p": ["scroll-px", "scroll-py", "scroll-ps", "scroll-pe", "scroll-pbs", "scroll-pbe", "scroll-pt", "scroll-pr", "scroll-pb", "scroll-pl"],
3182
+ "scroll-px": ["scroll-pr", "scroll-pl"],
3183
+ "scroll-py": ["scroll-pt", "scroll-pb"],
3184
+ touch: ["touch-x", "touch-y", "touch-pz"],
3185
+ "touch-x": ["touch"],
3186
+ "touch-y": ["touch"],
3187
+ "touch-pz": ["touch"]
3188
+ },
3189
+ conflictingClassGroupModifiers: {
3190
+ "font-size": ["leading"]
3191
+ },
3192
+ orderSensitiveModifiers: ["*", "**", "after", "backdrop", "before", "details-content", "file", "first-letter", "first-line", "marker", "placeholder", "selection"]
3193
+ };
3194
+ };
3195
+ var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
3196
+
3197
+ // src/utils/cn.ts
3198
+ function cn(...inputs) {
3199
+ return twMerge(clsx(inputs));
3200
+ }
3201
+ var solidVariants = {
3202
+ primary: "bg-primary-500 text-white hover:bg-primary-400 focus-visible:bg-primary-700 disabled:bg-grey-300 disabled:text-white",
3203
+ secondary: "bg-white text-primary-600 border-[1.5px] border-primary-600 hover:bg-primary-50 hover:border-primary-600 focus-visible:bg-primary-50 focus-visible:border-primary-700 focus-visible:border-2 disabled:bg-white disabled:border-2 disabled:border-grey-100 disabled:text-grey-400",
3204
+ grey: "bg-grey-600 text-white hover:bg-grey-500 focus-visible:bg-grey-700 disabled:bg-grey-300 disabled:text-white",
3205
+ destructive: "bg-error-500 text-white hover:bg-error-200 focus-visible:bg-error-500 disabled:bg-grey-300 disabled:text-white",
3206
+ text: "bg-transparent text-primary-600 hover:text-primary-400 focus-visible:text-primary-700 disabled:text-grey-400",
3207
+ success: "bg-success-500 text-white hover:bg-success-200 focus-visible:bg-success-600",
3208
+ warning: "bg-warning-400 text-white hover:bg-warning-500 focus-visible:bg-warning-500",
3209
+ info: "bg-info-400 text-white hover:bg-info-500 focus-visible:bg-info-500"
3210
+ };
3211
+ var outlinedVariants = {
3212
+ primary: solidVariants.secondary,
3213
+ secondary: solidVariants.secondary,
3214
+ grey: "bg-white text-grey-600 border-[1.5px] border-grey-300 hover:bg-grey-100 hover:border-grey-300 focus-visible:bg-grey-100 focus-visible:border-grey-700 focus-visible:border-2 disabled:bg-white disabled:border-2 disabled:border-grey-100 disabled:text-grey-400",
3215
+ destructive: "bg-white text-error-500 border-[1.5px] border-error-200 hover:bg-error-100/20 hover:border-error-200 focus-visible:bg-error-100/20 focus-visible:border-error-500 focus-visible:border-2 disabled:bg-white disabled:border-2 disabled:border-grey-100 disabled:text-grey-400",
3216
+ text: solidVariants.text,
3217
+ success: solidVariants.success,
3218
+ warning: solidVariants.warning,
3219
+ info: solidVariants.info
3220
+ };
3221
+ var sizeClasses = {
3222
+ sm: {
3223
+ base: "h-9 text-sm rounded-lg",
3224
+ none: "px-4 py-2",
3225
+ icon: "px-3 py-2",
3226
+ "icon-only": "p-2"
3227
+ },
3228
+ lg: {
3229
+ base: "h-14 text-base rounded-lg",
3230
+ none: "px-6 py-4",
3231
+ icon: "p-4",
3232
+ "icon-only": "p-4"
3233
+ }
3234
+ };
3235
+ var Button = react.forwardRef(
3236
+ ({
3237
+ variant = "primary",
3238
+ appearance = "solid",
3239
+ size = "sm",
3240
+ icon,
3241
+ iconPosition = "none",
3242
+ className,
3243
+ children,
3244
+ disabled,
3245
+ ...rest
3246
+ }, ref) => {
3247
+ const variantClasses = appearance === "outlined" ? outlinedVariants[variant] : solidVariants[variant];
3248
+ const sizeConfig2 = sizeClasses[size];
3249
+ const paddingKey = iconPosition === "icon-only" ? "icon-only" : iconPosition !== "none" ? "icon" : "none";
3250
+ const iconSize = size === "sm" ? "size-5" : "size-6";
3251
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3252
+ "button",
3253
+ {
3254
+ ref,
3255
+ disabled,
3256
+ className: cn(
3257
+ "inline-flex items-center justify-center gap-2 font-semibold transition-colors focus-visible:outline-none cursor-pointer disabled:cursor-not-allowed",
3258
+ sizeConfig2.base,
3259
+ sizeConfig2[paddingKey],
3260
+ variantClasses,
3261
+ className
3262
+ ),
3263
+ ...rest,
3264
+ children: [
3265
+ iconPosition === "leading" && icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize), children: icon }),
3266
+ iconPosition === "icon-only" && icon ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize), children: icon }) : iconPosition !== "icon-only" && children,
3267
+ iconPosition === "trailing" && icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", iconSize), children: icon })
3268
+ ]
3269
+ }
3270
+ );
3271
+ }
3272
+ );
3273
+ Button.displayName = "Button";
3274
+ function ButtonGroup({ children, className }) {
3275
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("inline-flex", className), role: "group", children });
3276
+ }
3277
+ var ButtonGroupItem = react.forwardRef(
3278
+ ({
3279
+ leadingIcon,
3280
+ trailingIcon,
3281
+ active = false,
3282
+ disabled = false,
3283
+ className,
3284
+ children,
3285
+ ...rest
3286
+ }, ref) => {
3287
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3288
+ "button",
3289
+ {
3290
+ ref,
3291
+ disabled,
3292
+ className: cn(
3293
+ "inline-flex items-center gap-2 px-4 py-2.5 text-sm font-medium transition-colors",
3294
+ "border-y border-r border-grey-300",
3295
+ "first:rounded-l-lg first:border-l",
3296
+ "last:rounded-r-lg",
3297
+ active ? "bg-primary-400 text-white border-primary-400" : disabled ? "bg-white text-grey-300 cursor-not-allowed" : "bg-white text-grey-600 hover:bg-grey-100 cursor-pointer",
3298
+ className
3299
+ ),
3300
+ ...rest,
3301
+ children: [
3302
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5", children: leadingIcon }),
3303
+ children,
3304
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5", children: trailingIcon })
3305
+ ]
3306
+ }
3307
+ );
3308
+ }
3309
+ );
3310
+ ButtonGroupItem.displayName = "ButtonGroupItem";
3311
+ var Input = react.forwardRef(
3312
+ ({
3313
+ size = "sm",
3314
+ label,
3315
+ helperText,
3316
+ error,
3317
+ success,
3318
+ leadingIcon,
3319
+ trailingIcon,
3320
+ addonRight,
3321
+ readOnly,
3322
+ disabled,
3323
+ className,
3324
+ wrapperClassName,
3325
+ id,
3326
+ ...rest
3327
+ }, ref) => {
3328
+ const inputId = id || (label ? `input-${label.toLowerCase().replace(/\s+/g, "-")}` : void 0);
3329
+ const hasError = !!error;
3330
+ const hasSuccess = !!success;
3331
+ const bottomText = hasError ? typeof error === "string" ? error : void 0 : hasSuccess ? typeof success === "string" ? success : void 0 : helperText;
3332
+ const borderColor = hasError ? "border-error-200 focus-within:border-error-200" : hasSuccess ? "border-success-200 focus-within:border-success-200" : "border-grey-300 hover:border-primary-100 focus-within:border-primary-200";
3333
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col gap-2 w-full", wrapperClassName), children: [
3334
+ label && /* @__PURE__ */ jsxRuntime.jsx(
3335
+ "label",
3336
+ {
3337
+ htmlFor: inputId,
3338
+ className: "text-sm font-medium text-grey-900 leading-[1.45]",
3339
+ children: label
3340
+ }
3341
+ ),
3342
+ /* @__PURE__ */ jsxRuntime.jsxs(
3343
+ "div",
3344
+ {
3345
+ className: cn(
3346
+ "flex items-center gap-3 border rounded-md overflow-hidden transition-colors",
3347
+ size === "sm" ? "h-9 px-3 py-2" : "h-14 p-4",
3348
+ readOnly ? "bg-grey-100 border-grey-300" : disabled ? "bg-grey-50 border-grey-200 cursor-not-allowed" : cn("bg-white", borderColor)
3349
+ ),
3350
+ children: [
3351
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5 text-grey-400", children: leadingIcon }),
3352
+ /* @__PURE__ */ jsxRuntime.jsx(
3353
+ "input",
3354
+ {
3355
+ ref,
3356
+ id: inputId,
3357
+ readOnly,
3358
+ disabled,
3359
+ className: cn(
3360
+ "flex-1 min-w-0 bg-transparent text-sm text-grey-900 placeholder:text-grey-400 outline-none disabled:cursor-not-allowed",
3361
+ className
3362
+ ),
3363
+ ...rest
3364
+ }
3365
+ ),
3366
+ addonRight && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 text-sm text-grey-500", children: addonRight }),
3367
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5 text-grey-400", children: trailingIcon })
3368
+ ]
3369
+ }
3370
+ ),
3371
+ bottomText && /* @__PURE__ */ jsxRuntime.jsx(
3372
+ "p",
3373
+ {
3374
+ className: cn(
3375
+ "text-sm leading-[1.45]",
3376
+ hasError ? "text-error-500" : hasSuccess ? "text-success-600" : "text-grey-500"
3377
+ ),
3378
+ children: bottomText
3379
+ }
3380
+ )
3381
+ ] });
3382
+ }
3383
+ );
3384
+ Input.displayName = "Input";
3385
+ var TabsContext = react.createContext(null);
3386
+ function useTabsContext() {
3387
+ const ctx = react.useContext(TabsContext);
3388
+ if (!ctx) throw new Error("Tab must be used within Tabs");
3389
+ return ctx;
3390
+ }
3391
+ function Tabs({
3392
+ variant = "line",
3393
+ value,
3394
+ defaultValue = "",
3395
+ onValueChange,
3396
+ children,
3397
+ className
3398
+ }) {
3399
+ const [internalValue, setInternalValue] = react.useState(defaultValue);
3400
+ const activeValue = value ?? internalValue;
3401
+ const onSelect = react.useCallback(
3402
+ (val) => {
3403
+ if (value === void 0) setInternalValue(val);
3404
+ onValueChange?.(val);
3405
+ },
3406
+ [value, onValueChange]
3407
+ );
3408
+ return /* @__PURE__ */ jsxRuntime.jsx(TabsContext.Provider, { value: { activeValue, onSelect, variant }, children: /* @__PURE__ */ jsxRuntime.jsx(
3409
+ "div",
3410
+ {
3411
+ className: cn(
3412
+ "inline-flex",
3413
+ variant === "line" ? "border-b border-grey-200" : "gap-1",
3414
+ className
3415
+ ),
3416
+ role: "tablist",
3417
+ children
3418
+ }
3419
+ ) });
3420
+ }
3421
+ function Tab({
3422
+ value,
3423
+ icon,
3424
+ badge,
3425
+ disabled = false,
3426
+ children,
3427
+ className
3428
+ }) {
3429
+ const { activeValue, onSelect, variant } = useTabsContext();
3430
+ const isActive = activeValue === value;
3431
+ if (variant === "pill") {
3432
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3433
+ "button",
3434
+ {
3435
+ role: "tab",
3436
+ "aria-selected": isActive,
3437
+ disabled,
3438
+ onClick: () => !disabled && onSelect(value),
3439
+ className: cn(
3440
+ "inline-flex items-center gap-2 h-9 px-3 py-2 rounded-md text-sm font-medium transition-colors cursor-pointer",
3441
+ isActive ? "bg-primary-50 text-primary-400" : disabled ? "border border-grey-300 text-grey-300 cursor-not-allowed" : "border border-grey-300 text-grey-700 hover:bg-grey-50",
3442
+ className
3443
+ ),
3444
+ children: [
3445
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-4", children: icon }),
3446
+ children,
3447
+ badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
3448
+ "span",
3449
+ {
3450
+ className: cn(
3451
+ "inline-flex items-center justify-center px-2 rounded-full text-xs font-medium tracking-tight",
3452
+ isActive ? "bg-primary-400 text-white" : disabled ? "bg-grey-200 text-grey-50" : "bg-grey-100 text-grey-700"
3453
+ ),
3454
+ children: badge
3455
+ }
3456
+ )
3457
+ ]
3458
+ }
3459
+ );
3460
+ }
3461
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3462
+ "button",
3463
+ {
3464
+ role: "tab",
3465
+ "aria-selected": isActive,
3466
+ disabled,
3467
+ onClick: () => !disabled && onSelect(value),
3468
+ className: cn(
3469
+ "relative inline-flex flex-col items-center cursor-pointer",
3470
+ disabled && "cursor-not-allowed",
3471
+ className
3472
+ ),
3473
+ children: [
3474
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2 px-4 pt-4 pb-[15px]", children: [
3475
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5", children: icon }),
3476
+ /* @__PURE__ */ jsxRuntime.jsx(
3477
+ "span",
3478
+ {
3479
+ className: cn(
3480
+ "text-sm font-medium transition-colors",
3481
+ isActive ? "text-primary-400" : disabled ? "text-grey-300" : "text-grey-700 hover:text-grey-700"
3482
+ ),
3483
+ children
3484
+ }
3485
+ ),
3486
+ badge !== void 0 && /* @__PURE__ */ jsxRuntime.jsx(
3487
+ "span",
3488
+ {
3489
+ className: cn(
3490
+ "inline-flex items-center justify-center px-2 rounded-full text-xs font-medium tracking-tight",
3491
+ isActive ? "bg-primary-400 text-white" : disabled ? "bg-grey-200 text-grey-50" : "bg-grey-100 text-grey-700"
3492
+ ),
3493
+ children: badge
3494
+ }
3495
+ )
3496
+ ] }),
3497
+ /* @__PURE__ */ jsxRuntime.jsx(
3498
+ "div",
3499
+ {
3500
+ className: cn(
3501
+ "h-px w-full transition-colors",
3502
+ isActive ? "bg-primary-400" : disabled ? "bg-grey-200" : "bg-grey-200 group-hover:bg-grey-500"
3503
+ )
3504
+ }
3505
+ )
3506
+ ]
3507
+ }
3508
+ );
3509
+ }
3510
+ var Chip = react.forwardRef(
3511
+ ({
3512
+ variant = "input",
3513
+ icon,
3514
+ disabled = false,
3515
+ onClose,
3516
+ onDropdown,
3517
+ className,
3518
+ children,
3519
+ ...rest
3520
+ }, ref) => {
3521
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3522
+ "div",
3523
+ {
3524
+ ref,
3525
+ className: cn(
3526
+ "inline-flex items-center gap-1 rounded-md border px-2 py-1 text-sm font-medium transition-colors",
3527
+ disabled ? "border-grey-200 bg-grey-100 text-grey-300 cursor-not-allowed" : "border-grey-300 bg-white text-grey-700 cursor-default focus-within:bg-[#FBF1F1] focus-within:border-primary-600",
3528
+ className
3529
+ ),
3530
+ ...rest,
3531
+ children: [
3532
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-4", children: icon }),
3533
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children }),
3534
+ variant === "input" && onClose && /* @__PURE__ */ jsxRuntime.jsx(
3535
+ "button",
3536
+ {
3537
+ type: "button",
3538
+ onClick: onClose,
3539
+ disabled,
3540
+ className: cn(
3541
+ "shrink-0 size-4 inline-flex items-center justify-center rounded-sm",
3542
+ disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
3543
+ ),
3544
+ "aria-label": "Remove",
3545
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3546
+ "svg",
3547
+ {
3548
+ viewBox: "0 0 16 16",
3549
+ fill: "none",
3550
+ stroke: "currentColor",
3551
+ strokeWidth: 2,
3552
+ className: "size-3",
3553
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 4l8 8M12 4l-8 8" })
3554
+ }
3555
+ )
3556
+ }
3557
+ ),
3558
+ variant === "filter" && /* @__PURE__ */ jsxRuntime.jsx(
3559
+ "button",
3560
+ {
3561
+ type: "button",
3562
+ onClick: onDropdown,
3563
+ disabled,
3564
+ className: cn(
3565
+ "shrink-0 size-4 inline-flex items-center justify-center",
3566
+ disabled ? "cursor-not-allowed text-grey-300" : "cursor-pointer text-grey-500 hover:text-grey-700"
3567
+ ),
3568
+ "aria-label": "Open filter",
3569
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3570
+ "svg",
3571
+ {
3572
+ viewBox: "0 0 16 16",
3573
+ fill: "none",
3574
+ stroke: "currentColor",
3575
+ strokeWidth: 2,
3576
+ className: "size-3",
3577
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M4 6l4 4 4-4" })
3578
+ }
3579
+ )
3580
+ }
3581
+ )
3582
+ ]
3583
+ }
3584
+ );
3585
+ }
3586
+ );
3587
+ Chip.displayName = "Chip";
3588
+ var clampValue = (value) => Math.min(100, Math.max(0, value));
3589
+ function ProgressBar({
3590
+ value = 0,
3591
+ size = "lg",
3592
+ label,
3593
+ metadata,
3594
+ showPercentage = true,
3595
+ className,
3596
+ ...rest
3597
+ }) {
3598
+ const clamped = clampValue(value);
3599
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("w-full", className), ...rest, children: [
3600
+ (label || showPercentage) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-2", children: [
3601
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-medium text-grey-900", children: label }),
3602
+ showPercentage && /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-sm font-medium text-grey-900", children: [
3603
+ Math.round(clamped),
3604
+ "%"
3605
+ ] })
3606
+ ] }),
3607
+ /* @__PURE__ */ jsxRuntime.jsx(
3608
+ "div",
3609
+ {
3610
+ className: cn(
3611
+ "w-full rounded-full bg-grey-100",
3612
+ size === "lg" ? "h-3" : "h-2"
3613
+ ),
3614
+ role: "progressbar",
3615
+ "aria-valuenow": clamped,
3616
+ "aria-valuemin": 0,
3617
+ "aria-valuemax": 100,
3618
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3619
+ "div",
3620
+ {
3621
+ className: cn(
3622
+ "rounded-full bg-primary-400 transition-all duration-300",
3623
+ size === "lg" ? "h-3" : "h-2"
3624
+ ),
3625
+ style: { width: `${clamped}%` }
3626
+ }
3627
+ )
3628
+ }
3629
+ ),
3630
+ metadata && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end mt-1", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-grey-500", children: metadata }) })
3631
+ ] });
3632
+ }
3633
+ var sizeConfig = {
3634
+ xs: { dimension: 48, strokeWidth: 4, fontSize: 12 },
3635
+ sm: { dimension: 56, strokeWidth: 5, fontSize: 12 },
3636
+ md: { dimension: 72, strokeWidth: 6, fontSize: 14 },
3637
+ lg: { dimension: 90, strokeWidth: 7, fontSize: 16 },
3638
+ xl: { dimension: 120, strokeWidth: 8, fontSize: 18 }
3639
+ };
3640
+ var clampValue2 = (value) => Math.min(100, Math.max(0, value));
3641
+ function ProgressCircle({
3642
+ value = 0,
3643
+ size = "md",
3644
+ showText = true,
3645
+ className,
3646
+ ...rest
3647
+ }) {
3648
+ const clamped = clampValue2(value);
3649
+ const config = sizeConfig[size];
3650
+ const radius = (config.dimension - config.strokeWidth) / 2;
3651
+ const circumference = 2 * Math.PI * radius;
3652
+ const offset = circumference - clamped / 100 * circumference;
3653
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3654
+ "div",
3655
+ {
3656
+ className: cn("relative inline-flex items-center justify-center", className),
3657
+ style: { width: config.dimension, height: config.dimension },
3658
+ role: "progressbar",
3659
+ "aria-valuenow": clamped,
3660
+ "aria-valuemin": 0,
3661
+ "aria-valuemax": 100,
3662
+ ...rest,
3663
+ children: [
3664
+ /* @__PURE__ */ jsxRuntime.jsxs(
3665
+ "svg",
3666
+ {
3667
+ width: config.dimension,
3668
+ height: config.dimension,
3669
+ className: "-rotate-90",
3670
+ children: [
3671
+ /* @__PURE__ */ jsxRuntime.jsx(
3672
+ "circle",
3673
+ {
3674
+ cx: config.dimension / 2,
3675
+ cy: config.dimension / 2,
3676
+ r: radius,
3677
+ fill: "none",
3678
+ stroke: "#F0F2F5",
3679
+ strokeWidth: config.strokeWidth
3680
+ }
3681
+ ),
3682
+ /* @__PURE__ */ jsxRuntime.jsx(
3683
+ "circle",
3684
+ {
3685
+ cx: config.dimension / 2,
3686
+ cy: config.dimension / 2,
3687
+ r: radius,
3688
+ fill: "none",
3689
+ stroke: "#F56630",
3690
+ strokeWidth: config.strokeWidth,
3691
+ strokeLinecap: "round",
3692
+ strokeDasharray: circumference,
3693
+ strokeDashoffset: offset,
3694
+ className: "transition-all duration-300"
3695
+ }
3696
+ )
3697
+ ]
3698
+ }
3699
+ ),
3700
+ showText && /* @__PURE__ */ jsxRuntime.jsxs(
3701
+ "span",
3702
+ {
3703
+ className: "absolute font-semibold text-black",
3704
+ style: { fontSize: config.fontSize },
3705
+ children: [
3706
+ Math.round(clamped),
3707
+ "%"
3708
+ ]
3709
+ }
3710
+ )
3711
+ ]
3712
+ }
3713
+ );
3714
+ }
3715
+ var colorStyles = {
3716
+ orange: {
3717
+ filled: "bg-primary-400 text-white",
3718
+ accent: "bg-primary-50 text-primary-700",
3719
+ outline: "border border-primary-700 text-primary-700"
3720
+ },
3721
+ blue: {
3722
+ filled: "bg-secondary-400 text-white",
3723
+ accent: "bg-secondary-50 text-secondary-700",
3724
+ outline: "border border-secondary-700 text-secondary-700"
3725
+ },
3726
+ success: {
3727
+ filled: "bg-success-400 text-white",
3728
+ accent: "bg-success-50 text-[#036B26]",
3729
+ outline: "border border-[#036B26] text-[#036B26]"
3730
+ },
3731
+ warning: {
3732
+ filled: "bg-warning-400 text-black",
3733
+ accent: "bg-warning-50 text-warning-600",
3734
+ outline: "border border-warning-600 text-warning-600"
3735
+ },
3736
+ error: {
3737
+ filled: "bg-error-400 text-white",
3738
+ accent: "bg-error-50 text-[#9E0A05]",
3739
+ outline: "border border-[#9E0A05] text-[#9E0A05]"
3740
+ },
3741
+ neutral: {
3742
+ filled: "bg-grey-900 text-grey-50",
3743
+ accent: "bg-grey-100 text-grey-700",
3744
+ outline: "border border-grey-700 text-grey-700"
3745
+ },
3746
+ disabled: {
3747
+ filled: "bg-grey-300 text-grey-50",
3748
+ accent: "bg-grey-100 text-grey-400",
3749
+ outline: "border border-grey-400 text-grey-400"
3750
+ }
3751
+ };
3752
+ var sizeStyles = {
3753
+ sm: { container: "h-[22px] px-2 text-xs gap-1", icon: "size-3" },
3754
+ md: { container: "h-6 px-2.5 text-xs gap-1", icon: "size-3" },
3755
+ lg: { container: "h-7 px-3 text-sm gap-1.5", icon: "size-3.5" }
3756
+ };
3757
+ function Badge({
3758
+ color = "orange",
3759
+ type = "filled",
3760
+ size = "sm",
3761
+ leadingIcon,
3762
+ trailingIcon,
3763
+ className,
3764
+ children,
3765
+ ...rest
3766
+ }) {
3767
+ const colorClass = colorStyles[color][type];
3768
+ const sizeConfig2 = sizeStyles[size];
3769
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3770
+ "span",
3771
+ {
3772
+ className: cn(
3773
+ "inline-flex items-center rounded-xl font-medium whitespace-nowrap",
3774
+ sizeConfig2.container,
3775
+ colorClass,
3776
+ className
3777
+ ),
3778
+ ...rest,
3779
+ children: [
3780
+ leadingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig2.icon), children: leadingIcon }),
3781
+ children,
3782
+ trailingIcon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: cn("shrink-0", sizeConfig2.icon), children: trailingIcon })
3783
+ ]
3784
+ }
3785
+ );
3786
+ }
3787
+ var stateStyles = {
3788
+ information: {
3789
+ border: "bg-secondary-500",
3790
+ iconBg: "bg-secondary-50",
3791
+ iconBorder: "border-secondary-75",
3792
+ ctaBg: "bg-secondary-500",
3793
+ ctaText: "text-white"
3794
+ },
3795
+ success: {
3796
+ border: "bg-success-600",
3797
+ iconBg: "bg-success-50",
3798
+ iconBorder: "border-success-75",
3799
+ ctaBg: "bg-success-600",
3800
+ ctaText: "text-white"
3801
+ },
3802
+ warning: {
3803
+ border: "bg-warning-500",
3804
+ iconBg: "bg-warning-50",
3805
+ iconBorder: "border-warning-75",
3806
+ ctaBg: "bg-warning-400",
3807
+ ctaText: "text-black"
3808
+ },
3809
+ error: {
3810
+ border: "bg-error-500",
3811
+ iconBg: "bg-error-50",
3812
+ iconBorder: "border-error-75",
3813
+ ctaBg: "bg-error-500",
3814
+ ctaText: "text-white"
3815
+ }
3816
+ };
3817
+ function Alert({
3818
+ variant = "toast",
3819
+ state = "information",
3820
+ title,
3821
+ description,
3822
+ icon,
3823
+ showIcon = true,
3824
+ onClose,
3825
+ primaryAction,
3826
+ secondaryAction,
3827
+ className,
3828
+ ...rest
3829
+ }) {
3830
+ const styles = stateStyles[state];
3831
+ const isBanner = variant === "banner";
3832
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3833
+ "div",
3834
+ {
3835
+ className: cn(
3836
+ "flex items-start overflow-hidden rounded bg-white",
3837
+ className
3838
+ ),
3839
+ role: "alert",
3840
+ ...rest,
3841
+ children: [
3842
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-1.5 self-stretch shrink-0", styles.border) }),
3843
+ /* @__PURE__ */ jsxRuntime.jsxs(
3844
+ "div",
3845
+ {
3846
+ className: cn(
3847
+ "flex flex-1 items-start border-t border-r border-b border-grey-200 rounded-r",
3848
+ isBanner ? "gap-4 p-5" : "gap-3 px-4 py-3"
3849
+ ),
3850
+ children: [
3851
+ showIcon && icon && /* @__PURE__ */ jsxRuntime.jsx(
3852
+ "div",
3853
+ {
3854
+ className: cn(
3855
+ "shrink-0 rounded-lg border flex items-center justify-center",
3856
+ styles.iconBg,
3857
+ styles.iconBorder,
3858
+ isBanner ? "size-8" : "size-6"
3859
+ ),
3860
+ children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: isBanner ? "size-4" : "size-3", children: icon })
3861
+ }
3862
+ ),
3863
+ isBanner ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col gap-4 justify-center", children: [
3864
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-1", children: [
3865
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-base font-semibold text-grey-900", children: title }),
3866
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-grey-600", children: description })
3867
+ ] }),
3868
+ (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [
3869
+ primaryAction && /* @__PURE__ */ jsxRuntime.jsx(
3870
+ "button",
3871
+ {
3872
+ type: "button",
3873
+ onClick: primaryAction.onClick,
3874
+ className: cn(
3875
+ "inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-semibold cursor-pointer",
3876
+ styles.ctaBg,
3877
+ styles.ctaText
3878
+ ),
3879
+ children: primaryAction.label
3880
+ }
3881
+ ),
3882
+ secondaryAction && /* @__PURE__ */ jsxRuntime.jsx(
3883
+ "button",
3884
+ {
3885
+ type: "button",
3886
+ onClick: secondaryAction.onClick,
3887
+ className: "inline-flex items-center justify-center rounded-lg border border-grey-300 bg-white px-4 py-2 text-sm font-semibold text-grey-700 cursor-pointer hover:bg-grey-50",
3888
+ children: secondaryAction.label
3889
+ }
3890
+ )
3891
+ ] })
3892
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-1 flex-col gap-0.5 self-stretch text-sm", children: [
3893
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold text-grey-900", children: title }),
3894
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-grey-600", children: description })
3895
+ ] }),
3896
+ onClose && /* @__PURE__ */ jsxRuntime.jsxs(
3897
+ "div",
3898
+ {
3899
+ className: cn(
3900
+ "flex items-center self-stretch shrink-0",
3901
+ isBanner ? "gap-4" : "gap-3"
3902
+ ),
3903
+ children: [
3904
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-px self-stretch bg-grey-100" }),
3905
+ /* @__PURE__ */ jsxRuntime.jsx(
3906
+ "button",
3907
+ {
3908
+ type: "button",
3909
+ onClick: onClose,
3910
+ className: "shrink-0 inline-flex items-center justify-center text-grey-500 hover:text-grey-700 cursor-pointer",
3911
+ "aria-label": "Close",
3912
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3913
+ "svg",
3914
+ {
3915
+ viewBox: "0 0 20 20",
3916
+ fill: "none",
3917
+ stroke: "currentColor",
3918
+ strokeWidth: 2,
3919
+ className: "size-5",
3920
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 5l10 10M15 5L5 15" })
3921
+ }
3922
+ )
3923
+ }
3924
+ )
3925
+ ]
3926
+ }
3927
+ )
3928
+ ]
3929
+ }
3930
+ )
3931
+ ]
3932
+ }
3933
+ );
3934
+ }
3935
+ function DividerLine({ className }) {
3936
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-px flex-1 bg-grey-100", className) });
3937
+ }
3938
+ function DividerButton({
3939
+ label,
3940
+ icon,
3941
+ onClick
3942
+ }) {
3943
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3944
+ "button",
3945
+ {
3946
+ type: "button",
3947
+ onClick,
3948
+ className: "inline-flex items-center gap-2 rounded-lg border border-grey-300 bg-white px-3 py-2 text-sm font-semibold text-grey-700 cursor-pointer hover:bg-grey-50",
3949
+ children: [
3950
+ icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-5 shrink-0", children: icon }),
3951
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { children: label })
3952
+ ]
3953
+ }
3954
+ );
3955
+ }
3956
+ function Divider({
3957
+ variant = "default",
3958
+ label,
3959
+ icon,
3960
+ buttonLabel,
3961
+ buttonIcon,
3962
+ onButtonClick,
3963
+ className,
3964
+ ...rest
3965
+ }) {
3966
+ if (variant === "default") {
3967
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("h-px w-full bg-grey-100", className), ...rest });
3968
+ }
3969
+ if (variant === "with-icon") {
3970
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative w-full", className), ...rest, children: [
3971
+ /* @__PURE__ */ jsxRuntime.jsx(DividerLine, {}),
3972
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white px-1 py-0.5 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-6", children: icon }) })
3973
+ ] });
3974
+ }
3975
+ if (variant === "with-label") {
3976
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center gap-0.5 w-full", className), ...rest, children: [
3977
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 pr-2 text-sm text-grey-400 bg-white", children: label }),
3978
+ /* @__PURE__ */ jsxRuntime.jsx(DividerLine, {})
3979
+ ] });
3980
+ }
3981
+ if (variant === "with-title") {
3982
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative w-full", className), ...rest, children: [
3983
+ /* @__PURE__ */ jsxRuntime.jsx(DividerLine, {}),
3984
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-white px-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg text-grey-900 whitespace-nowrap", children: label }) })
3985
+ ] });
3986
+ }
3987
+ if (variant === "with-button") {
3988
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative w-full", className), ...rest, children: [
3989
+ /* @__PURE__ */ jsxRuntime.jsx(DividerLine, {}),
3990
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2", children: /* @__PURE__ */ jsxRuntime.jsx(
3991
+ DividerButton,
3992
+ {
3993
+ label: buttonLabel,
3994
+ icon: buttonIcon,
3995
+ onClick: onButtonClick
3996
+ }
3997
+ ) })
3998
+ ] });
3999
+ }
4000
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex items-center w-full", className), ...rest, children: [
4001
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 bg-white px-2", children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-lg text-grey-900 whitespace-nowrap", children: label }) }),
4002
+ /* @__PURE__ */ jsxRuntime.jsx(DividerLine, {}),
4003
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: /* @__PURE__ */ jsxRuntime.jsx(
4004
+ DividerButton,
4005
+ {
4006
+ label: buttonLabel,
4007
+ icon: buttonIcon,
4008
+ onClick: onButtonClick
4009
+ }
4010
+ ) })
4011
+ ] });
4012
+ }
4013
+ function Arrow({
4014
+ position,
4015
+ theme
4016
+ }) {
4017
+ const fill = theme === "dark" ? "#101928" : "#FFFFFF";
4018
+ const stroke = theme === "light" ? "#F0F2F5" : "none";
4019
+ const isTop = position.startsWith("top");
4020
+ const isBottom = position.startsWith("bottom");
4021
+ position.startsWith("left");
4022
+ const isRight = position.startsWith("right");
4023
+ if (isTop || isBottom) {
4024
+ const alignment2 = position.endsWith("left") ? "justify-start pl-4" : position.endsWith("right") ? "justify-end pr-4" : "justify-center";
4025
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex w-full", alignment2), children: /* @__PURE__ */ jsxRuntime.jsx(
4026
+ "svg",
4027
+ {
4028
+ width: "20",
4029
+ height: "12",
4030
+ viewBox: "0 0 20 12",
4031
+ fill: "none",
4032
+ className: isBottom ? "rotate-180" : "",
4033
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M10 0L20 12H0L10 0Z", fill, stroke })
4034
+ }
4035
+ ) });
4036
+ }
4037
+ const alignment = position.endsWith("top") ? "justify-start pt-4" : position.endsWith("bottom") ? "justify-end pb-4" : "justify-center";
4038
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex flex-col self-stretch", alignment), children: /* @__PURE__ */ jsxRuntime.jsx(
4039
+ "svg",
4040
+ {
4041
+ width: "12",
4042
+ height: "20",
4043
+ viewBox: "0 0 12 20",
4044
+ fill: "none",
4045
+ className: isRight ? "rotate-180" : "",
4046
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M0 10L12 0V20L0 10Z", fill, stroke })
4047
+ }
4048
+ ) });
4049
+ }
4050
+ var Tooltip = react.forwardRef(
4051
+ ({
4052
+ theme = "light",
4053
+ position = "top-left",
4054
+ title,
4055
+ content,
4056
+ onClose,
4057
+ primaryAction,
4058
+ secondaryAction,
4059
+ className,
4060
+ ...rest
4061
+ }, ref) => {
4062
+ const isDark = theme === "dark";
4063
+ const isHorizontal = position.startsWith("left") || position.startsWith("right");
4064
+ const showArrowBefore = position.startsWith("top") || position.startsWith("left");
4065
+ const showArrowAfter = position.startsWith("bottom") || position.startsWith("right");
4066
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4067
+ "div",
4068
+ {
4069
+ ref,
4070
+ className: cn(
4071
+ "inline-flex isolate",
4072
+ isHorizontal ? "flex-row" : "flex-col",
4073
+ className
4074
+ ),
4075
+ ...rest,
4076
+ children: [
4077
+ showArrowBefore && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-[2] -mb-px", children: /* @__PURE__ */ jsxRuntime.jsx(Arrow, { position, theme }) }),
4078
+ /* @__PURE__ */ jsxRuntime.jsxs(
4079
+ "div",
4080
+ {
4081
+ className: cn(
4082
+ "flex flex-col gap-4 rounded-lg p-4 relative z-[1]",
4083
+ isDark ? "bg-grey-900" : "bg-white border border-grey-100"
4084
+ ),
4085
+ children: [
4086
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex gap-2 items-start", children: [
4087
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 flex flex-col gap-1 text-sm", children: [
4088
+ title && /* @__PURE__ */ jsxRuntime.jsx(
4089
+ "p",
4090
+ {
4091
+ className: cn(
4092
+ "font-semibold",
4093
+ isDark ? "text-white" : "text-grey-800"
4094
+ ),
4095
+ children: title
4096
+ }
4097
+ ),
4098
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: isDark ? "text-grey-300" : "text-grey-500", children: content })
4099
+ ] }),
4100
+ onClose && /* @__PURE__ */ jsxRuntime.jsx(
4101
+ "button",
4102
+ {
4103
+ type: "button",
4104
+ onClick: onClose,
4105
+ className: cn(
4106
+ "shrink-0 cursor-pointer",
4107
+ isDark ? "text-grey-300 hover:text-white" : "text-grey-500 hover:text-grey-700"
4108
+ ),
4109
+ "aria-label": "Close",
4110
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4111
+ "svg",
4112
+ {
4113
+ viewBox: "0 0 20 20",
4114
+ fill: "none",
4115
+ stroke: "currentColor",
4116
+ strokeWidth: 2,
4117
+ className: "size-5",
4118
+ children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M5 5l10 10M15 5L5 15" })
4119
+ }
4120
+ )
4121
+ }
4122
+ )
4123
+ ] }),
4124
+ (primaryAction || secondaryAction) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [
4125
+ secondaryAction && /* @__PURE__ */ jsxRuntime.jsx(
4126
+ "button",
4127
+ {
4128
+ type: "button",
4129
+ onClick: secondaryAction.onClick,
4130
+ className: cn(
4131
+ "text-sm font-semibold cursor-pointer",
4132
+ isDark ? "text-grey-50" : "text-grey-500"
4133
+ ),
4134
+ children: secondaryAction.label
4135
+ }
4136
+ ),
4137
+ primaryAction && /* @__PURE__ */ jsxRuntime.jsx(
4138
+ "button",
4139
+ {
4140
+ type: "button",
4141
+ onClick: primaryAction.onClick,
4142
+ className: cn(
4143
+ "text-sm font-semibold cursor-pointer",
4144
+ isDark ? "text-primary-400" : "text-primary-500"
4145
+ ),
4146
+ children: primaryAction.label
4147
+ }
4148
+ )
4149
+ ] })
4150
+ ]
4151
+ }
4152
+ ),
4153
+ showArrowAfter && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative z-[2] -mt-px", children: /* @__PURE__ */ jsxRuntime.jsx(Arrow, { position, theme }) })
4154
+ ]
4155
+ }
4156
+ );
4157
+ }
4158
+ );
4159
+ Tooltip.displayName = "Tooltip";
4160
+ function range(start, end) {
4161
+ const arr = [];
4162
+ for (let i = start; i <= end; i++) arr.push(i);
4163
+ return arr;
4164
+ }
4165
+ function getPageNumbers(currentPage, totalPages, siblingCount) {
4166
+ const totalNumbers = siblingCount * 2 + 5;
4167
+ if (totalPages <= totalNumbers) {
4168
+ return range(1, totalPages);
4169
+ }
4170
+ const leftSiblingIndex = Math.max(currentPage - siblingCount, 1);
4171
+ const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages);
4172
+ const showLeftDots = leftSiblingIndex > 2;
4173
+ const showRightDots = rightSiblingIndex < totalPages - 1;
4174
+ if (!showLeftDots && showRightDots) {
4175
+ const leftItemCount = 3 + 2 * siblingCount;
4176
+ const leftRange = range(1, leftItemCount);
4177
+ return [...leftRange, "...", totalPages];
4178
+ }
4179
+ if (showLeftDots && !showRightDots) {
4180
+ const rightItemCount = 3 + 2 * siblingCount;
4181
+ const rightRange = range(totalPages - rightItemCount + 1, totalPages);
4182
+ return [1, "...", ...rightRange];
4183
+ }
4184
+ const middleRange = range(leftSiblingIndex, rightSiblingIndex);
4185
+ return [1, "...", ...middleRange, "...", totalPages];
4186
+ }
4187
+ var ChevronLeft = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 2, className: "size-5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 5l-5 5 5 5" }) });
4188
+ var ChevronRight = () => /* @__PURE__ */ jsxRuntime.jsx("svg", { viewBox: "0 0 20 20", fill: "none", stroke: "currentColor", strokeWidth: 2, className: "size-5", children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M8 5l5 5-5 5" }) });
4189
+ function Pagination({
4190
+ currentPage,
4191
+ totalPages,
4192
+ onPageChange,
4193
+ showPrevNext = true,
4194
+ siblingCount = 1,
4195
+ className,
4196
+ ...rest
4197
+ }) {
4198
+ const pages = getPageNumbers(currentPage, totalPages, siblingCount);
4199
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4200
+ "nav",
4201
+ {
4202
+ className: cn("flex items-center gap-1", className),
4203
+ "aria-label": "Pagination",
4204
+ ...rest,
4205
+ children: [
4206
+ showPrevNext && /* @__PURE__ */ jsxRuntime.jsxs(
4207
+ "button",
4208
+ {
4209
+ type: "button",
4210
+ onClick: () => onPageChange(currentPage - 1),
4211
+ disabled: currentPage <= 1,
4212
+ className: "inline-flex items-center gap-2 rounded-lg border border-grey-300 bg-white px-3 py-2 text-sm font-semibold text-grey-700 cursor-pointer hover:bg-grey-50 disabled:opacity-50 disabled:cursor-not-allowed",
4213
+ "aria-label": "Previous page",
4214
+ children: [
4215
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronLeft, {}),
4216
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Previous" })
4217
+ ]
4218
+ }
4219
+ ),
4220
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", children: pages.map(
4221
+ (page, i) => page === "..." ? /* @__PURE__ */ jsxRuntime.jsx(
4222
+ "span",
4223
+ {
4224
+ className: "flex items-center justify-center size-6 text-sm text-grey-400",
4225
+ children: "..."
4226
+ },
4227
+ `dots-${i}`
4228
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
4229
+ "button",
4230
+ {
4231
+ type: "button",
4232
+ onClick: () => onPageChange(page),
4233
+ className: cn(
4234
+ "flex items-center justify-center size-6 rounded-md text-sm cursor-pointer",
4235
+ page === currentPage ? "border border-primary-400 text-black font-medium" : "text-grey-400 hover:bg-grey-50"
4236
+ ),
4237
+ "aria-current": page === currentPage ? "page" : void 0,
4238
+ children: page
4239
+ },
4240
+ page
4241
+ )
4242
+ ) }),
4243
+ showPrevNext && /* @__PURE__ */ jsxRuntime.jsxs(
4244
+ "button",
4245
+ {
4246
+ type: "button",
4247
+ onClick: () => onPageChange(currentPage + 1),
4248
+ disabled: currentPage >= totalPages,
4249
+ className: "inline-flex items-center gap-2 rounded-lg border border-grey-300 bg-white px-3 py-2 text-sm font-semibold text-grey-700 cursor-pointer hover:bg-grey-50 disabled:opacity-50 disabled:cursor-not-allowed",
4250
+ "aria-label": "Next page",
4251
+ children: [
4252
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: "Next" }),
4253
+ /* @__PURE__ */ jsxRuntime.jsx(ChevronRight, {})
4254
+ ]
4255
+ }
4256
+ )
4257
+ ]
4258
+ }
4259
+ );
4260
+ }
4261
+ var Checkbox = react.forwardRef(
4262
+ ({ label, description, position = "left", className, ...rest }, ref) => {
4263
+ const control = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative shrink-0 size-5", children: [
4264
+ /* @__PURE__ */ jsxRuntime.jsx(
4265
+ "input",
4266
+ {
4267
+ ref,
4268
+ type: "checkbox",
4269
+ className: cn(
4270
+ "peer size-5 appearance-none rounded border-[1.5px] border-grey-300 bg-white cursor-pointer",
4271
+ "checked:bg-primary-400 checked:border-primary-400",
4272
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-200",
4273
+ "disabled:cursor-not-allowed disabled:opacity-50"
4274
+ ),
4275
+ ...rest
4276
+ }
4277
+ ),
4278
+ /* @__PURE__ */ jsxRuntime.jsx(
4279
+ "svg",
4280
+ {
4281
+ viewBox: "0 0 14 14",
4282
+ fill: "none",
4283
+ className: "pointer-events-none absolute inset-0 m-auto size-3 hidden peer-checked:block text-white",
4284
+ children: /* @__PURE__ */ jsxRuntime.jsx(
4285
+ "path",
4286
+ {
4287
+ d: "M11.5 3.5L5.5 10L2.5 7",
4288
+ stroke: "currentColor",
4289
+ strokeWidth: 2,
4290
+ strokeLinecap: "round",
4291
+ strokeLinejoin: "round"
4292
+ }
4293
+ )
4294
+ }
4295
+ )
4296
+ ] });
4297
+ if (!label && !description) {
4298
+ return control;
4299
+ }
4300
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4301
+ "label",
4302
+ {
4303
+ className: cn(
4304
+ "inline-flex items-center gap-3 cursor-pointer",
4305
+ className
4306
+ ),
4307
+ children: [
4308
+ position === "left" && control,
4309
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
4310
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-medium text-grey-900", children: label }),
4311
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-grey-500", children: description })
4312
+ ] }),
4313
+ position === "right" && control
4314
+ ]
4315
+ }
4316
+ );
4317
+ }
4318
+ );
4319
+ Checkbox.displayName = "Checkbox";
4320
+ var Radio = react.forwardRef(
4321
+ ({ label, description, position = "left", className, ...rest }, ref) => {
4322
+ const control = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative shrink-0 size-5", children: [
4323
+ /* @__PURE__ */ jsxRuntime.jsx(
4324
+ "input",
4325
+ {
4326
+ ref,
4327
+ type: "radio",
4328
+ className: cn(
4329
+ "peer size-5 appearance-none rounded-full border-[1.5px] border-grey-300 bg-white cursor-pointer",
4330
+ "checked:border-primary-400",
4331
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-200",
4332
+ "disabled:cursor-not-allowed disabled:opacity-50"
4333
+ ),
4334
+ ...rest
4335
+ }
4336
+ ),
4337
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pointer-events-none absolute inset-0 m-auto size-2.5 rounded-full bg-primary-400 hidden peer-checked:block" })
4338
+ ] });
4339
+ if (!label && !description) {
4340
+ return control;
4341
+ }
4342
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4343
+ "label",
4344
+ {
4345
+ className: cn(
4346
+ "inline-flex items-center gap-3 cursor-pointer",
4347
+ className
4348
+ ),
4349
+ children: [
4350
+ position === "left" && control,
4351
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
4352
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-medium text-grey-900", children: label }),
4353
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-grey-500", children: description })
4354
+ ] }),
4355
+ position === "right" && control
4356
+ ]
4357
+ }
4358
+ );
4359
+ }
4360
+ );
4361
+ Radio.displayName = "Radio";
4362
+ var Toggle = react.forwardRef(
4363
+ ({ label, description, position = "left", className, ...rest }, ref) => {
4364
+ const control = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative shrink-0 w-9 h-5", children: [
4365
+ /* @__PURE__ */ jsxRuntime.jsx(
4366
+ "input",
4367
+ {
4368
+ ref,
4369
+ type: "checkbox",
4370
+ role: "switch",
4371
+ className: cn(
4372
+ "peer size-full appearance-none rounded-full bg-grey-200 cursor-pointer transition-colors",
4373
+ "checked:bg-primary-400",
4374
+ "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary-200",
4375
+ "disabled:cursor-not-allowed disabled:opacity-50"
4376
+ ),
4377
+ ...rest
4378
+ }
4379
+ ),
4380
+ /* @__PURE__ */ jsxRuntime.jsx(
4381
+ "div",
4382
+ {
4383
+ className: cn(
4384
+ "pointer-events-none absolute top-0.5 left-0.5 size-4 rounded-full bg-white shadow-sm transition-transform",
4385
+ "peer-checked:translate-x-4"
4386
+ )
4387
+ }
4388
+ )
4389
+ ] });
4390
+ if (!label && !description) {
4391
+ return control;
4392
+ }
4393
+ return /* @__PURE__ */ jsxRuntime.jsxs(
4394
+ "label",
4395
+ {
4396
+ className: cn(
4397
+ "inline-flex items-center gap-3 cursor-pointer",
4398
+ className
4399
+ ),
4400
+ children: [
4401
+ position === "left" && control,
4402
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col", children: [
4403
+ label && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-base font-medium text-grey-900", children: label }),
4404
+ description && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-grey-500", children: description })
4405
+ ] }),
4406
+ position === "right" && control
4407
+ ]
4408
+ }
4409
+ );
4410
+ }
4411
+ );
4412
+ Toggle.displayName = "Toggle";
4413
+ function Breadcrumb({
4414
+ items,
4415
+ separator = "/",
4416
+ className,
4417
+ ...rest
4418
+ }) {
4419
+ return /* @__PURE__ */ jsxRuntime.jsx(
4420
+ "nav",
4421
+ {
4422
+ "aria-label": "Breadcrumb",
4423
+ className: cn(
4424
+ "border-y border-grey-200 px-4 py-2.5",
4425
+ className
4426
+ ),
4427
+ ...rest,
4428
+ children: /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex items-center gap-2 text-sm", children: items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "flex items-center gap-2", children: [
4429
+ i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-grey-400", "aria-hidden": true, children: separator }),
4430
+ item.icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "size-4 shrink-0", children: item.icon }),
4431
+ item.href && !item.disabled && !item.active ? /* @__PURE__ */ jsxRuntime.jsx(
4432
+ "a",
4433
+ {
4434
+ href: item.href,
4435
+ className: cn(
4436
+ "text-grey-500 hover:text-primary-300 transition-colors"
4437
+ ),
4438
+ children: item.label
4439
+ }
4440
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
4441
+ "span",
4442
+ {
4443
+ className: cn(
4444
+ item.active && "text-primary-500 font-medium",
4445
+ item.disabled && "text-grey-400 cursor-not-allowed",
4446
+ !item.active && !item.disabled && "text-grey-500"
4447
+ ),
4448
+ "aria-current": item.active ? "page" : void 0,
4449
+ children: item.label
4450
+ }
4451
+ )
4452
+ ] }, i)) })
4453
+ }
4454
+ );
4455
+ }
4456
+
4457
+ exports.Alert = Alert;
4458
+ exports.Badge = Badge;
4459
+ exports.Breadcrumb = Breadcrumb;
4460
+ exports.Button = Button;
4461
+ exports.ButtonGroup = ButtonGroup;
4462
+ exports.ButtonGroupItem = ButtonGroupItem;
4463
+ exports.Checkbox = Checkbox;
4464
+ exports.Chip = Chip;
4465
+ exports.Divider = Divider;
4466
+ exports.Input = Input;
4467
+ exports.Pagination = Pagination;
4468
+ exports.ProgressBar = ProgressBar;
4469
+ exports.ProgressCircle = ProgressCircle;
4470
+ exports.Radio = Radio;
4471
+ exports.Tab = Tab;
4472
+ exports.Tabs = Tabs;
4473
+ exports.Toggle = Toggle;
4474
+ exports.Tooltip = Tooltip;
4475
+ exports.cn = cn;
4476
+ //# sourceMappingURL=index.cjs.map
4477
+ //# sourceMappingURL=index.cjs.map