@preprio/prepr-nextjs 2.0.2 → 2.0.3

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