@meridial/react 0.1.0

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