@devadeboye/react-material-components 0.0.1

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