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