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