@easy-editor/setters 0.0.3 → 0.0.6

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