@codefluss/section-renderer 0.0.1-alpha.1

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